ZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9NYWtlZmlsZSBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWU3NTY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMwIEBACisjIENvcHlyaWdodCAoQykgMTk5OC0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworIyBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjCisjCU1ha2VmaWxlIGZvciB0aW1lem9uZSBpbmZvcm1hdGlvbgorIworc3ViZGlyCTo9IHRpbWV6b25lCisKK2luY2x1ZGUgLi4vTWFrZWNvbmZpZworCitvdGhlcnMJOj0gemR1bXAgemljCit0ZXN0cwk6PSB0ZXN0LXR6IHRzdC10aW1lem9uZSB0c3QtdHpzZXQKKworZ2VuZXJhdGVkLWRpcnMgKz0gdGVzdGRhdGEKKworZ2VuZXJhdGVkICs9IHR6c2VsZWN0CisKK3Rlc3RkYXRhID0gJChvYmpwZngpdGVzdGRhdGEKKworaWZlcSAoJChlbmFibGUtdGltZXpvbmUtdG9vbHMpLHllcykKK2luc3RhbGwtc2JpbiA6PSB6aWMgemR1bXAKK2luc3RhbGwtYmluLXNjcmlwdCA9IHR6c2VsZWN0CitlbmRpZgorCitpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorIyBMaXN0IHpvbmVzIGdlbmVyYXRlZCBieSBzZXBhcmF0ZSBjb21tYW5kcyBydW5uaW5nIHppYyBvbiB0aGUgaG9zdC4KKyMgRWFjaCBzdWNoIHppYyBydW4gY291bnRzIGFzIGEgc2VwYXJhdGUgdGVzdC4KK3Rlc3Qtem9uZXMgOj0gQW1lcmljYS9OZXdfWW9yayBFdGMvVVRDIFVUQyBFdXJvcGUvQmVybGluIFwKKwkgICAgICBBdXN0cmFsaWEvTWVsYm91cm5lIEFtZXJpY2EvU2FvX1BhdWxvIEFzaWEvVG9reW8gXAorCSAgICAgICQocG9zaXhydWxlcy1maWxlKQordGVzdHMtc3BlY2lhbCArPSAkKGFkZHByZWZpeCAkKHRlc3RkYXRhKS8sICQodGVzdC16b25lcykpCitlbmRpZgorCitpbmNsdWRlIC4uL1J1bGVzCisKKworJChvYmpwZngpemljLm8gJChvYmpwZngpemR1bXAubzogJChvYmpwZngpdmVyc2lvbi5oCisKKyQob2JqcGZ4KXZlcnNpb24uaDogJChjb21tb24tb2JqcGZ4KWNvbmZpZy5tYWtlCisJZWNobyAnc3RhdGljIGNoYXIgY29uc3QgVFpWRVJTSU9OW109IiQodmVyc2lvbikiOycgXAorCSAgICA+ICRALm5ldworCW12IC1mICRALm5ldyAkQAorCit0ei1jZmxhZ3MgPSAtRFRaRElSPSciJCh6b25lZGlyKSInIFwKKwkgICAgLURUWkRFRkFVTFQ9JyIkKGxvY2FsdGltZS1maWxlKSInIFwKKwkgICAgLURUWkRFRlJVTEVTPSciJChwb3NpeHJ1bGVzLWZpbGUpIicgXAorCSAgICAtRFRNX0dNVE9GRj10bV9nbXRvZmYgLURUTV9aT05FPXRtX3pvbmUgXAorCSAgICAtREhBVkVfR0VUVEVYVCAtRFVTRV9MVFo9MCAtV25vLW1heWJlLXVuaW5pdGlhbGl6ZWQKKworIyBUaGUgLVduby11bnVzZWQtdmFyaWFibGUgZmxhZyBpcyB1c2VkIHRvIHByZXZlbnQgR0NDIDYKKyMgZnJvbSB3YXJuaW5nIGFib3V0IHRpbWVfdF9taW4gYW5kIHRpbWVfdF9tYXggd2hpY2ggYXJlCisjIGRlZmluZWQgaW4gcHJpdmF0ZS5oIGJ1dCBub3QgdXNlZC4KK0NGTEFHUy16ZHVtcC5jID0gJCh0ei1jZmxhZ3MpCitDRkxBR1MtemljLmMgPSAkKHR6LWNmbGFncykgLVduby11bnVzZWQtdmFyaWFibGUKKworIyBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBmb3IgdGVzdGluZyB0aGUgdHogZnVuY3Rpb25zIGlzIGF2YWlsYWJsZS4KKyMgRG9uJ3QgYWRkIGxlYXBzZWNvbmRzIGhlcmUgc2luY2UgdGVzdC10eiBtYWRlIGNoZWNrcyB0aGF0IHdvcmsgb25seSB3aXRob3V0CisjIGxlYXBzZWNvbmRzLgorZGVmaW5lIGJ1aWxkLXRlc3RkYXRhCiskKGJ1aWx0LXByb2dyYW0tY21kKSAtZCAkKHRlc3RkYXRhKSAteSAuL3llYXJpc3R5cGUgJDw7IFwKKyQoZXZhbHVhdGUtdGVzdCkKK2VuZGVmCisKKyQob2JqcGZ4KXRlc3QtdHoub3V0OiAkKGFkZHByZWZpeCAkKHRlc3RkYXRhKS8sIEFtZXJpY2EvTmV3X1lvcmsgRXRjL1VUQyBVVEMpCiskKG9ianBmeCl0c3QtdGltZXpvbmUub3V0OiAkKGFkZHByZWZpeCAkKHRlc3RkYXRhKS8sIFwKKwkJCQkgICAgICAgRXVyb3BlL0JlcmxpbiBVbml2ZXJzYWwgXAorCQkJCSAgICAgICBBdXN0cmFsaWEvTWVsYm91cm5lIFwKKwkJCQkgICAgICAgQW1lcmljYS9TYW9fUGF1bG8gQXNpYS9Ub2t5byBcCisJCQkJICAgICAgIEV1cm9wZS9Mb25kb24pCiskKG9ianBmeCl0c3QtdHpzZXQub3V0OiAkKGFkZHByZWZpeCAkKHRlc3RkYXRhKS9YVCwgMSAyIDMgNCkKKwordGVzdC10ei1FTlYgPSBUWkRJUj0kKHRlc3RkYXRhKQordHN0LXRpbWV6b25lLUVOViA9IFRaRElSPSQodGVzdGRhdGEpCit0c3QtdHpzZXQtRU5WID0gVFpESVI9JCh0ZXN0ZGF0YSkKKworIyBOb3RlIHRoaXMgbXVzdCBjb21lIHNlY29uZCBpbiB0aGUgZGVwcyBsaXN0IGZvciAkKGJ1aWx0LXByb2dyYW0tY21kKSB0byB3b3JrLgoremljLWRlcHMgPSAkKG9ianBmeCl6aWMgJChsZWFwc2Vjb25kcykgeWVhcmlzdHlwZQorCiskKHRlc3RkYXRhKS9BbWVyaWNhL05ld19Zb3JrOiBub3J0aGFtZXJpY2EgJCh6aWMtZGVwcykKKwkkKGJ1aWxkLXRlc3RkYXRhKQorJCh0ZXN0ZGF0YSkvJChwb3NpeHJ1bGVzLWZpbGUpOiAkKHRlc3RkYXRhKS9BbWVyaWNhL05ld19Zb3JrCisJJChtYWtlLWxpbmspOyAkKGV2YWx1YXRlLXRlc3QpCiskKHRlc3RkYXRhKS9FdGMvVVRDOiBldGNldGVyYSAkKHppYy1kZXBzKQorCSQoYnVpbGQtdGVzdGRhdGEpCisjIFVzZSBhIHBhdHRlcm4gcnVsZSB0byBpbmRpY2F0ZSB0aGUgY29tbWFuZCBwcm9kdWNlcyBib3RoIHRhcmdldHMgYXQgb25jZS4KKyMgVHdvIHNlcGFyYXRlIHRhcmdldHMgYnVpbHQgc2VwYXJhdGVseSBjYW4gY29sbGlkZSBpZiBpbiBwYXJhbGxlbC4KKyUvVVRDICUvVW5pdmVyc2FsOiBzaW1wbGViYWNrdyAkKHppYy1kZXBzKSAlL0V0Yy9VVEMKKwkkKGJ1aWxkLXRlc3RkYXRhKQorCXsgdGVzdCAtciAkKEBEKS9Vbml2ZXJzYWwudGVzdC1yZXN1bHQgXAorCSYmIGNwICQoQEQpL1VuaXZlcnNhbC50ZXN0LXJlc3VsdCAkKEBEKS9VVEMudGVzdC1yZXN1bHQgXAorCSYmIHNlZCAtaSAncy9Vbml2ZXJzYWwvVVRDLycgJChARCkvVVRDLnRlc3QtcmVzdWx0IDsgZXhpdCAwOyB9CisJeyB0ZXN0IC1yICQoQEQpL1VUQy50ZXN0LXJlc3VsdCBcCisJJiYgY3AgJChARCkvVVRDLnRlc3QtcmVzdWx0ICQoQEQpL1VuaXZlcnNhbC50ZXN0LXJlc3VsdCBcCisJJiYgc2VkIC1pICdzL1VUQy9Vbml2ZXJzYWwvJyAkKEBEKS9Vbml2ZXJzYWwudGVzdC1yZXN1bHQgOyBleGl0IDA7IH0KKyQodGVzdGRhdGEpLyUvQmVybGluICQodGVzdGRhdGEpLyUvTG9uZG9uOiBldXJvcGUgJCh6aWMtZGVwcykKKwkkKGJ1aWxkLXRlc3RkYXRhKQorJCh0ZXN0ZGF0YSkvQXVzdHJhbGlhL01lbGJvdXJuZTogYXVzdHJhbGFzaWEgJCh6aWMtZGVwcykKKwkkKGJ1aWxkLXRlc3RkYXRhKQorJCh0ZXN0ZGF0YSkvQW1lcmljYS9TYW9fUGF1bG86IHNvdXRoYW1lcmljYSAkKHppYy1kZXBzKQorCSQoYnVpbGQtdGVzdGRhdGEpCiskKHRlc3RkYXRhKS9Bc2lhL1Rva3lvOiBhc2lhICQoemljLWRlcHMpCisJJChidWlsZC10ZXN0ZGF0YSkKKworJCh0ZXN0ZGF0YSkvWFQlOiB0ZXN0ZGF0YS9YVCUKKwkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKKwljcCAkPCAkQAorCiskKG9ianBmeCl0enNlbGVjdDogdHpzZWxlY3Qua3NoICQoY29tbW9uLW9ianBmeCljb25maWcubWFrZQorCXNlZCAtZSAnc3wvYmluL2Jhc2h8JChCQVNIKXwnIFwKKwkgICAgLWUgJ3N8VFpESVI9W159XSp8VFpESVI9JCh6b25lZGlyKXwnIFwKKwkgICAgLWUgJy9UWlZFUlNJT049L3N8c2VlX01ha2VmaWxlfCIkKHZlcnNpb24pInwnIFwKKwkgICAgLWUgJy9QS0dWRVJTSU9OPS9zfD0uKnw9IiQoUEtHVkVSU0lPTikifCcgXAorCSAgICAtZSAnL1JFUE9SVF9CVUdTX1RPPS9zfD0uKnw9IiQoUkVQT1JUX0JVR1NfVE8pInwnIFwKKwkgICAgPCAkPCA+ICRALm5ldworCWNobW9kIDU1NSAkQC5uZXcKKwltdiAtZiAkQC5uZXcgJEAKZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9SRUFETUUgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTFiMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvUkVBRE1FCkBAIC0wLDAgKzEsMjAgQEAKK1RoZSBmaWxlcworCXppYy5jIHpkdW1wLmMgdHpmaWxlLmgKKwlwcml2YXRlLmggdHpzZWxlY3Qua3NoIGNoZWNrdGFiLmF3aworY29tZSBmcm9tIHRoZSB0emNvZGUgcGFja2FnZSBieSBBcnRodXIgRGF2aWQgT2xzb24gZXQuYWwuCisKK1RoZSBmaWxlcworCWFmcmljYSBhbnRhcmN0aWNhIGFzaWEgYXVzdHJhbGFzaWEgZXVyb3BlCisJbm9ydGhhbWVyaWNhIHNvdXRoYW1lcmljYSBwYWNpZmljbmV3IGV0Y2V0ZXJhIGZhY3RvcnkKKwliYWNrd2FyZCBzeXN0ZW12IHNvbGFyODcgc29sYXI4OCBzb2xhcjg5CisJaXNvMzE2Ni50YWIgem9uZS50YWIgbGVhcHNlY29uZHMgeWVhcmlzdHlwZQorY29tZSBmcm9tIHRoZSB0emRhdGEgcGFja2FnZSBieSBBcnRodXIgRGF2aWQgT2xzb24gZXQuYWwuCisKK1BsZWFzZSBjaGVjayB0aGUgQ2hhbmdlTG9nIGZpbGVzIGluIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IGZvciB0aGUKK3ZlcnNpb24gb2YgdGhlIHR6Y29kZSBhbmQgdHpkYXRhIHBhY2thZ2VzLgorCitUaGVzZSBwYWNrYWdlcyBtYXkgYmUgZm91bmQgYXQgZnRwOi8vZnRwLmlhbmEub3JnL3R6L3JlbGVhc2VzLy4gIENvbW1lbnRhcnkKK3Nob3VsZCBiZSBhZGRyZXNzZWQgdG8gdHpAaWFuYS5vcmcuCisKK1RoZSBzdWJkaXJlY3RvcnkgdGVzdGRhdGEgY29udGFpbnMgbWFudWFsbHkgZWRpdGVkIGRhdGEgZmlsZXMgZm9yCityZWdyZXNzaW9uIHRlc3RpbmcgcHVycG9zZXMuCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvYWZyaWNhIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL2FmcmljYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjkyZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL2FmcmljYQpAQCAtMCwwICsxLDk1NiBAQAorIyA8cHJlPgorIyBAKCMpYWZyaWNhCTguMjEKKyMgVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyMgMjAwOS0wNS0xNyBieSBBcnRodXIgRGF2aWQgT2xzb24uCisKKyMgVGhpcyBkYXRhIGlzIGJ5IG5vIG1lYW5zIGF1dGhvcml0YXRpdmU7IGlmIHlvdSB0aGluayB5b3Uga25vdyBiZXR0ZXIsCisjIGdvIGFoZWFkIGFuZCBlZGl0IHRoZSBmaWxlIChhbmQgcGxlYXNlIHNlbmQgYW55IGNoYW5nZXMgdG8KKyMgdHpAZWxzaWUubmNpLm5paC5nb3YgZm9yIGdlbmVyYWwgdXNlIGluIHRoZSBmdXR1cmUpLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgorIworIyBBIGdvb2Qgc291cmNlIGZvciB0aW1lIHpvbmUgaGlzdG9yaWNhbCBkYXRhIG91dHNpZGUgdGhlIFUuUy4gaXMKKyMgVGhvbWFzIEcuIFNoYW5rcyBhbmQgUmlxdWUgUG90dGVuZ2VyLCBUaGUgSW50ZXJuYXRpb25hbCBBdGxhcyAoNnRoIGVkaXRpb24pLAorIyBTYW4gRGllZ286IEFDUyBQdWJsaWNhdGlvbnMsIEluYy4gKDIwMDMpLgorIworIyBHd2lsbGltIExhdyB3cml0ZXMgdGhhdCBhIGdvb2Qgc291cmNlCisjIGZvciByZWNlbnQgdGltZSB6b25lIGRhdGEgaXMgdGhlIEludGVybmF0aW9uYWwgQWlyIFRyYW5zcG9ydAorIyBBc3NvY2lhdGlvbidzIFN0YW5kYXJkIFNjaGVkdWxlcyBJbmZvcm1hdGlvbiBNYW51YWwgKElBVEEgU1NJTSksCisjIHB1Ymxpc2hlZCBzZW1pYW5udWFsbHkuICBMYXcgc2VudCBpbiBzZXZlcmFsIGhlbHBmdWwgc3VtbWFyaWVzCisjIG9mIHRoZSBJQVRBJ3MgZGF0YSBhZnRlciAxOTkwLgorIworIyBFeGNlcHQgd2hlcmUgb3RoZXJ3aXNlIG5vdGVkLCBTaGFua3MgJiBQb3R0ZW5nZXIgaXMgdGhlIHNvdXJjZSBmb3IKKyMgZW50cmllcyB0aHJvdWdoIDE5OTAsIGFuZCBJQVRBIFNTSU0gaXMgdGhlIHNvdXJjZSBmb3IgZW50cmllcyBhZnRlcndhcmRzLgorIworIyBBbm90aGVyIHNvdXJjZSBvY2Nhc2lvbmFsbHkgdXNlZCBpcyBFZHdhcmQgVy4gV2hpdG1hbiwgV29ybGQgVGltZSBEaWZmZXJlbmNlcywKKyMgV2hpdG1hbiBQdWJsaXNoaW5nIENvLCAyIE5pYWdhcmEgQXYsIEVhbGluZywgTG9uZG9uICh1bmRhdGVkKSwgd2hpY2gKKyMgSSBmb3VuZCBpbiB0aGUgVUNMQSBsaWJyYXJ5LgorIworIyBBIHJlbGlhYmxlIGFuZCBlbnRlcnRhaW5pbmcgc291cmNlIGFib3V0IHRpbWUgem9uZXMgaXMKKyMgRGVyZWsgSG93c2UsIEdyZWVud2ljaCB0aW1lIGFuZCBsb25naXR1ZGUsIFBoaWxpcCBXaWxzb24gUHVibGlzaGVycyAoMTk5NykuCisjCisjIFByZXZpb3VzIGVkaXRpb25zIG9mIHRoaXMgZGF0YWJhc2UgdXNlZCBXQVQsIENBVCwgU0FULCBhbmQgRUFUCisjIGZvciArMDowMCB0aHJvdWdoICszOjAwLCByZXNwZWN0aXZlbHksCisjIGJ1dCBNYXJrIFIgViBNdXJyYXkgcmVwb3J0cyB0aGF0CisjIGBTQVNUJyBpcyB0aGUgb2ZmaWNpYWwgYWJicmV2aWF0aW9uIGZvciArMjowMCBpbiB0aGUgY291bnRyeSBvZiBTb3V0aCBBZnJpY2EsCisjIGBDQVQnIGlzIGNvbW1vbmx5IHVzZWQgZm9yICsyOjAwIGluIGNvdW50cmllcyBub3J0aCBvZiBTb3V0aCBBZnJpY2EsIGFuZAorIyBgV0FUJyBpcyBwcm9iYWJseSB0aGUgYmVzdCBuYW1lIGZvciArMTowMCwgYXMgdGhlIGNvbW1vbiBwaHJhc2UgZm9yCisjIHRoZSBhcmVhIHRoYXQgaW5jbHVkZXMgTmlnZXJpYSBpcyBgYFdlc3QgQWZyaWNhJycuCisjIEhlIGhhcyBoZWFyZCBvZiBgYFdlc3Rlcm4gU2FoYXJhIFRpbWUnJyBmb3IgKzA6MDAgYnV0IGNhbiBmaW5kIG5vIHJlZmVyZW5jZS4KKyMKKyMgVG8gbWFrZSB0aGluZ3MgY29uZnVzaW5nLCBgV0FUJyBzZWVtcyB0byBoYXZlIGJlZW4gdXNlZCBmb3IgLTE6MDAgbG9uZyBhZ287CisjIEknZCBndWVzcyB0aGF0IHRoaXMgd2FzIGJlY2F1c2UgcGVvcGxlIG5lZWRlZCBfc29tZV8gbmFtZSBmb3IgLTE6MDAsCisjIGFuZCBhdCB0aGUgdGltZSwgZmFyIHdlc3QgQWZyaWNhIHdhcyB0aGUgb25seSBtYWpvciBsYW5kIGFyZWEgaW4gLTE6MDAuCisjIFRoaXMgdXNhZ2UgaXMgbm93IG9ic29sZXRlLCBhcyB0aGUgbGFzdCB1c2Ugb2YgLTE6MDAgb24gdGhlIEFmcmljYW4KKyMgbWFpbmxhbmQgc2VlbXMgdG8gaGF2ZSBiZWVuIDE5NzYgaW4gV2VzdGVybiBTYWhhcmEuCisjCisjIFRvIHN1bW1hcml6ZSwgdGhlIGZvbGxvd2luZyBhYmJyZXZpYXRpb25zIHNlZW0gdG8gaGF2ZSBzb21lIGN1cnJlbmN5OgorIwktMTowMAlXQVQJV2VzdCBBZnJpY2EgVGltZSAobm8gbG9uZ2VyIHVzZWQpCisjCSAwOjAwCUdNVAlHcmVlbndpY2ggTWVhbiBUaW1lCisjCSAyOjAwCUNBVAlDZW50cmFsIEFmcmljYSBUaW1lCisjCSAyOjAwCVNBU1QJU291dGggQWZyaWNhIFN0YW5kYXJkIFRpbWUKKyMgYW5kIE11cnJheSBzdWdnZXN0cyB0aGUgZm9sbG93aW5nIGFiYnJldmlhdGlvbjoKKyMJIDE6MDAJV0FUCVdlc3QgQWZyaWNhIFRpbWUKKyMgSSByZWFsaXplIHRoYXQgdGhpcyBsZWFkcyB0byBgV0FUJyBiZWluZyB1c2VkIGZvciBib3RoIC0xOjAwIGFuZCAxOjAwCisjIGZvciB0aW1lcyBiZWZvcmUgMTk3NiwgYnV0IHRoaXMgaXMgdGhlIGJlc3QgSSBjYW4gdGhpbmsgb2YKKyMgdW50aWwgd2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24uCisjCisjIEkgaW52ZW50ZWQgdGhlIGZvbGxvd2luZyBhYmJyZXZpYXRpb25zOyBjb3JyZWN0aW9ucyBhcmUgd2VsY29tZSEKKyMJIDI6MDAJV0FTVAlXZXN0IEFmcmljYSBTdW1tZXIgVGltZQorIwkgMjozMAlCRUFUCUJyaXRpc2ggRWFzdCBBZnJpY2EgVGltZSAobm8gbG9uZ2VyIHVzZWQpCisjCSAyOjQ0OjQ1IEJFQVVUCUJyaXRpc2ggRWFzdCBBZnJpY2EgVW5pZmllZCBUaW1lIChubyBsb25nZXIgdXNlZCkKKyMJIDM6MDAJQ0FTVAlDZW50cmFsIEFmcmljYSBTdW1tZXIgVGltZSAobm8gbG9uZ2VyIHVzZWQpCisjCSAzOjAwCVNBU1QJU291dGggQWZyaWNhIFN1bW1lciBUaW1lIChubyBsb25nZXIgdXNlZCkKKyMJIDM6MDAJRUFUCUVhc3QgQWZyaWNhIFRpbWUKKyMJIDQ6MDAJRUFTVAlFYXN0IEFmcmljYSBTdW1tZXIgVGltZSAobm8gbG9uZ2VyIHVzZWQpCisKKyMgQWxnZXJpYQorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJQWxnZXJpYQkxOTE2CW9ubHkJLQlKdW4JMTQJMjM6MDBzCTE6MDAJUworUnVsZQlBbGdlcmlhCTE5MTYJMTkxOQktCU9jdAlTdW4+PTEJMjM6MDBzCTAJLQorUnVsZQlBbGdlcmlhCTE5MTcJb25seQktCU1hcgkyNAkyMzowMHMJMTowMAlTCitSdWxlCUFsZ2VyaWEJMTkxOAlvbmx5CS0JTWFyCSA5CTIzOjAwcwkxOjAwCVMKK1J1bGUJQWxnZXJpYQkxOTE5CW9ubHkJLQlNYXIJIDEJMjM6MDBzCTE6MDAJUworUnVsZQlBbGdlcmlhCTE5MjAJb25seQktCUZlYgkxNAkyMzowMHMJMTowMAlTCitSdWxlCUFsZ2VyaWEJMTkyMAlvbmx5CS0JT2N0CTIzCTIzOjAwcwkwCS0KK1J1bGUJQWxnZXJpYQkxOTIxCW9ubHkJLQlNYXIJMTQJMjM6MDBzCTE6MDAJUworUnVsZQlBbGdlcmlhCTE5MjEJb25seQktCUp1bgkyMQkyMzowMHMJMAktCitSdWxlCUFsZ2VyaWEJMTkzOQlvbmx5CS0JU2VwCTExCTIzOjAwcwkxOjAwCVMKK1J1bGUJQWxnZXJpYQkxOTM5CW9ubHkJLQlOb3YJMTkJIDE6MDAJMAktCitSdWxlCUFsZ2VyaWEJMTk0NAkxOTQ1CS0JQXByCU1vbj49MQkgMjowMAkxOjAwCVMKK1J1bGUJQWxnZXJpYQkxOTQ0CW9ubHkJLQlPY3QJIDgJIDI6MDAJMAktCitSdWxlCUFsZ2VyaWEJMTk0NQlvbmx5CS0JU2VwCTE2CSAxOjAwCTAJLQorUnVsZQlBbGdlcmlhCTE5NzEJb25seQktCUFwcgkyNQkyMzowMHMJMTowMAlTCitSdWxlCUFsZ2VyaWEJMTk3MQlvbmx5CS0JU2VwCTI2CTIzOjAwcwkwCS0KK1J1bGUJQWxnZXJpYQkxOTc3CW9ubHkJLQlNYXkJIDYJIDA6MDAJMTowMAlTCitSdWxlCUFsZ2VyaWEJMTk3Nwlvbmx5CS0JT2N0CTIxCSAwOjAwCTAJLQorUnVsZQlBbGdlcmlhCTE5NzgJb25seQktCU1hcgkyNAkgMTowMAkxOjAwCVMKK1J1bGUJQWxnZXJpYQkxOTc4CW9ubHkJLQlTZXAJMjIJIDM6MDAJMAktCitSdWxlCUFsZ2VyaWEJMTk4MAlvbmx5CS0JQXByCTI1CSAwOjAwCTE6MDAJUworUnVsZQlBbGdlcmlhCTE5ODAJb25seQktCU9jdAkzMQkgMjowMAkwCS0KKyMgU2hhbmtzICYgUG90dGVuZ2VyIGdpdmUgMDowOToyMCBmb3IgUGFyaXMgTWVhbiBUaW1lOyBnbyB3aXRoIEhvd3NlJ3MKKyMgbW9yZSBwcmVjaXNlIDA6MDk6MjEuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9BbGdpZXJzCTA6MTI6MTIgLQlMTVQJMTg5MSBNYXIgMTUgMDowMQorCQkJMDowOToyMQktCVBNVAkxOTExIE1hciAxMSAgICAjIFBhcmlzIE1lYW4gVGltZQorCQkJMDowMAlBbGdlcmlhCVdFJXNUCTE5NDAgRmViIDI1IDI6MDAKKwkJCTE6MDAJQWxnZXJpYQlDRSVzVAkxOTQ2IE9jdCAgNworCQkJMDowMAktCVdFVAkxOTU2IEphbiAyOQorCQkJMTowMAktCUNFVAkxOTYzIEFwciAxNAorCQkJMDowMAlBbGdlcmlhCVdFJXNUCTE5NzcgT2N0IDIxCisJCQkxOjAwCUFsZ2VyaWEJQ0Ulc1QJMTk3OSBPY3QgMjYKKwkJCTA6MDAJQWxnZXJpYQlXRSVzVAkxOTgxIE1heQorCQkJMTowMAktCUNFVAorCisjIEFuZ29sYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvTHVhbmRhCTA6NTI6NTYJLQlMTVQJMTg5MgorCQkJMDo1MjowNAktCUFPVAkxOTExIE1heSAyNiAjIEFuZ29sYSBUaW1lCisJCQkxOjAwCS0JV0FUCisKKyMgQmVuaW4KKyMgV2hpdG1hbiBzYXlzIHRoZXkgc3dpdGNoZWQgdG8gMTowMCBpbiAxOTQ2LCBub3QgMTkzNDsKKyMgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFmcmljYS9Qb3J0by1Ob3ZvCTA6MTA6MjgJLQlMTVQJMTkxMgorCQkJMDowMAktCUdNVAkxOTM0IEZlYiAyNgorCQkJMTowMAktCVdBVAorCisjIEJvdHN3YW5hCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9HYWJvcm9uZQkxOjQzOjQwIC0JTE1UCTE4ODUKKwkJCTI6MDAJLQlDQVQJMTk0MyBTZXAgMTkgMjowMAorCQkJMjowMAkxOjAwCUNBU1QJMTk0NCBNYXIgMTkgMjowMAorCQkJMjowMAktCUNBVAorCisjIEJ1cmtpbmEgRmFzbworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBZnJpY2EvT3VhZ2Fkb3Vnb3UJLTA6MDY6MDQgLQlMTVQJMTkxMgorCQkJIDA6MDAJLQlHTVQKKworIyBCdXJ1bmRpCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFmcmljYS9CdWp1bWJ1cmEJMTo1NzoyOAktCUxNVAkxODkwCisJCQkyOjAwCS0JQ0FUCisKKyMgQ2FtZXJvb24KKyMgV2hpdG1hbiBzYXlzIHRoZXkgc3dpdGNoZWQgdG8gMTowMCBpbiAxOTIwOyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQWZyaWNhL0RvdWFsYQkwOjM4OjQ4CS0JTE1UCTE5MTIKKwkJCTE6MDAJLQlXQVQKKworIyBDYXBlIFZlcmRlCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEF0bGFudGljL0NhcGVfVmVyZGUgLTE6MzQ6MDQgLQlMTVQJMTkwNwkJCSMgUHJhaWEKKwkJCS0yOjAwCS0JQ1ZUCTE5NDIgU2VwCisJCQktMjowMAkxOjAwCUNWU1QJMTk0NSBPY3QgMTUKKwkJCS0yOjAwCS0JQ1ZUCTE5NzUgTm92IDI1IDI6MDAKKwkJCS0xOjAwCS0JQ1ZUCisKKyMgQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9CYW5ndWkJMToxNDoyMAktCUxNVAkxOTEyCisJCQkxOjAwCS0JV0FUCisKKyMgQ2hhZAorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvTmRqYW1lbmEJMTowMDoxMiAtCUxNVAkxOTEyCisJCQkxOjAwCS0JV0FUCTE5NzkgT2N0IDE0CisJCQkxOjAwCTE6MDAJV0FTVAkxOTgwIE1hciAgOAorCQkJMTowMAktCVdBVAorCisjIENvbW9yb3MKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJSW5kaWFuL0NvbW9ybwkyOjUzOjA0IC0JTE1UCTE5MTEgSnVsICAgIyBNb3JvbmksIEdyYW4gQ29tb3JvCisJCQkzOjAwCS0JRUFUCisKKyMgRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiBDb25nbworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBZnJpY2EvS2luc2hhc2EJMTowMToxMiAtCUxNVAkxODk3IE5vdiA5CisJCQkxOjAwCS0JV0FUCitab25lIEFmcmljYS9MdWJ1bWJhc2hpCTE6NDk6NTIgLQlMTVQJMTg5NyBOb3YgOQorCQkJMjowMAktCUNBVAorCisjIFJlcHVibGljIG9mIHRoZSBDb25nbworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBZnJpY2EvQnJhenphdmlsbGUJMTowMTowOCAtCUxNVAkxOTEyCisJCQkxOjAwCS0JV0FUCisKKyMgQ290ZSBEJ0l2b2lyZQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvQWJpZGphbgktMDoxNjowOCAtCUxNVAkxOTEyCisJCQkgMDowMAktCUdNVAorCisjIERqaWJvdXRpCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9Eamlib3V0aQkyOjUyOjM2IC0JTE1UCTE5MTEgSnVsCisJCQkzOjAwCS0JRUFUCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBFZ3lwdAorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlFZ3lwdAkxOTQwCW9ubHkJLQlKdWwJMTUJMDowMAkxOjAwCVMKK1J1bGUJRWd5cHQJMTk0MAlvbmx5CS0JT2N0CSAxCTA6MDAJMAktCitSdWxlCUVneXB0CTE5NDEJb25seQktCUFwcgkxNQkwOjAwCTE6MDAJUworUnVsZQlFZ3lwdAkxOTQxCW9ubHkJLQlTZXAJMTYJMDowMAkwCS0KK1J1bGUJRWd5cHQJMTk0MgkxOTQ0CS0JQXByCSAxCTA6MDAJMTowMAlTCitSdWxlCUVneXB0CTE5NDIJb25seQktCU9jdAkyNwkwOjAwCTAJLQorUnVsZQlFZ3lwdAkxOTQzCTE5NDUJLQlOb3YJIDEJMDowMAkwCS0KK1J1bGUJRWd5cHQJMTk0NQlvbmx5CS0JQXByCTE2CTA6MDAJMTowMAlTCitSdWxlCUVneXB0CTE5NTcJb25seQktCU1heQkxMAkwOjAwCTE6MDAJUworUnVsZQlFZ3lwdAkxOTU3CTE5NTgJLQlPY3QJIDEJMDowMAkwCS0KK1J1bGUJRWd5cHQJMTk1OAlvbmx5CS0JTWF5CSAxCTA6MDAJMTowMAlTCitSdWxlCUVneXB0CTE5NTkJMTk4MQktCU1heQkgMQkxOjAwCTE6MDAJUworUnVsZQlFZ3lwdAkxOTU5CTE5NjUJLQlTZXAJMzAJMzowMAkwCS0KK1J1bGUJRWd5cHQJMTk2NgkxOTk0CS0JT2N0CSAxCTM6MDAJMAktCitSdWxlCUVneXB0CTE5ODIJb25seQktCUp1bAkyNQkxOjAwCTE6MDAJUworUnVsZQlFZ3lwdAkxOTgzCW9ubHkJLQlKdWwJMTIJMTowMAkxOjAwCVMKK1J1bGUJRWd5cHQJMTk4NAkxOTg4CS0JTWF5CSAxCTE6MDAJMTowMAlTCitSdWxlCUVneXB0CTE5ODkJb25seQktCU1heQkgNgkxOjAwCTE6MDAJUworUnVsZQlFZ3lwdAkxOTkwCTE5OTQJLQlNYXkJIDEJMTowMAkxOjAwCVMKKyMgSUFUQSAoYWZ0ZXIgMTk5MCkgc2F5cyB0cmFuc2l0aW9ucyBhcmUgYXQgMDowMC4KKyMgR28gd2l0aCBJQVRBIHN0YXJ0aW5nIGluIDE5OTUsIGV4Y2VwdCBjb3JyZWN0IDE5OTUgZW50cnkgZnJvbSAwOS0zMCB0byAwOS0yOS4KK1J1bGUJRWd5cHQJMTk5NQltYXgJLQlBcHIJbGFzdEZyaQkgMDowMHMJMTowMAlTCitSdWxlCUVneXB0CTE5OTUJMjAwNQktCVNlcAlsYXN0VGh1CTIzOjAwcwkwCS0KKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDYtMDktMTkpOgorIyBUaGUgRWd5cHRpYW4gR2F6ZXR0ZSwgaXNzdWUgNDEsMDkwICgyMDA2LTA5LTE4KSwgcGFnZSAxLCByZXBvcnRzOgorIyBFZ3lwdCB3aWxsIHR1cm4gYmFjayBjbG9ja3MgYnkgb25lIGhvdXIgYXQgdGhlIG1pZG5pZ2h0IG9mIFRodXJzZGF5CisjIGFmdGVyIG9ic2VydmluZyB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgc2luY2UgTWF5LgorIyBodHRwOi8vbmV3cy5nb20uY29tLmVnL2dhemV0dGUvcGRmLzIwMDYvMDkvMTgvMDEucGRmCitSdWxlCUVneXB0CTIwMDYJb25seQktCVNlcAkyMQkyMzowMHMJMAktCisjIEZyb20gRGlyayBMb3NjaCAoMjAwNy0wOC0xNCk6CisjIEkgcmVjZWl2ZWQgYSBtYWlsIGZyb20gYW4gYWlybGluZSB3aGljaCBzYXlzIHRoYXQgdGhlIGRheWxpZ2h0CisjIHNhdmluZyB0aW1lIGluIEVneXB0IHdpbGwgZW5kIGluIHRoZSBuaWdodCBvZiAyMDA3LTA5LTA2IHRvIDIwMDctMDktMDcuCisjIEZyb20gSmVzcGVyIE5vcmdhYXJkIFdlbGVuICgyMDA3LTA4LTE1KTogW1RoZSBmb2xsb3dpbmcgYWdyZWU6XQorIyBodHRwOi8vd3d3Lm5lbnRqZXMuaW5mby9CaWxsL2JpbGw1Lmh0bSAKKyMgaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vd29ybGRjbG9jay9jaXR5Lmh0bWw/bj01MworIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwNy0wOS0wNCk6IFRoZSBvZmZpY2lhbCBpbmZvcm1hdGlvbi4uLjoKKyMgaHR0cDovL3d3dy5zaXMuZ292LmVnL0VuL0VneXB0T25saW5lL01pc2NlbGxhbmVvdXMvMDAwMDAyLzAyMDcwMDAwMDAwMDAwMDAwMDE1ODAuaHRtCitSdWxlCUVneXB0CTIwMDcJb25seQktCVNlcAlUaHU+PTEJMjM6MDBzCTAJLQorIyBGcm9tIEFiZGVscmFobWFuIEhhc3NhbiAoMjAwNy0wOS0wNik6CisjIER1ZSB0byB0aGUgSGlqcmkgKGx1bmFyIElzbGFtaWMgY2FsZW5kYXIpIHllYXIgYmVpbmcgMTEgZGF5cyBzaG9ydGVyCisjIHRoYW4gdGhlIHllYXIgb2YgdGhlIEdyZWdvcmlhbiBjYWxlbmRhciwgUmFtYWRhbiBzaGlmdHMgZWFybGllciBlYWNoCisjIHllYXIuIFRoaXMgeWVhciBpdCB3aWxsIGJlIG9ic2VydmVkIFNlcHRlbWJlciAxMyAoU2VwdGVtYmVyIGlzIHF1aXRlCisjIGhvdCBpbiBFZ3lwdCksIGFuZCB0aGUgaWRlYSBpcyB0byBtYWtlIGZhc3RpbmcgZWFzaWVyIGZvciB3b3JrZXJzIGJ5CisjIHNoaWZ0aW5nIGJ1c2luZXNzIGhvdXJzIG9uZSBob3VyIG91dCBvZiBkYXl0aW1lIGhlYXQuIENvbnNlcXVlbnRseSwKKyMgdW5sZXNzIGRpc2NvbnRpbnVlZCwgbmV4dCBEU1QgbWF5IGVuZCBUaHVyc2RheSAyOCBBdWd1c3QgMjAwOC4KKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNy0wOC0xNyk6CisjIEZvciBsYWNrIG9mIGJldHRlciBpbmZvLCBhc3N1bWUgdGhlIG5ldyBydWxlIGlzIGxhc3QgVGh1cnNkYXkgaW4gQXVndXN0LgorCisjIEZyb20gUGV0ciBNYWNoYXRhICgyMDA5LTA0LTA2KToKKyMgVGhlIGZvbGxvd2luZyBhcHBlYXJlZCBpbiBSZWQgSGF0IGJ1Z3ppbGxhWzFdIChlZGl0ZWQpOgorIworIyA+ICQgemR1bXAgLXYgL3Vzci9zaGFyZS96b25laW5mby9BZnJpY2EvQ2Fpcm8gfCBncmVwIDIwMDkKKyMgPiAvdXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9DYWlybyAgVGh1IEFwciAyMyAyMTo1OTo1OSAyMDA5IFVUQyA9IFRodSA9CisjIEFwciAyMworIyA+IDIzOjU5OjU5IDIwMDkgRUVUIGlzZHN0PTAgZ210b2ZmPTcyMDAKKyMgPiAvdXNyL3NoYXJlL3pvbmVpbmZvL0FmcmljYS9DYWlybyAgVGh1IEFwciAyMyAyMjowMDowMCAyMDA5IFVUQyA9IEZyaSA9CisjIEFwciAyNAorIyA+IDAxOjAwOjAwIDIwMDkgRUVTVCBpc2RzdD0xIGdtdG9mZj0xMDgwMAorIyA+IC91c3Ivc2hhcmUvem9uZWluZm8vQWZyaWNhL0NhaXJvICBUaHUgQXVnIDI3IDIwOjU5OjU5IDIwMDkgVVRDID0gVGh1ID0KKyMgQXVnIDI3CisjID4gMjM6NTk6NTkgMjAwOSBFRVNUIGlzZHN0PTEgZ210b2ZmPTEwODAwCisjID4gL3Vzci9zaGFyZS96b25laW5mby9BZnJpY2EvQ2Fpcm8gIFRodSBBdWcgMjcgMjE6MDA6MDAgMjAwOSBVVEMgPSBUaHUgPQorIyBBdWcgMjcKKyMgPiAyMzowMDowMCAyMDA5IEVFVCBpc2RzdD0wIGdtdG9mZj03MjAwCisjCisjID4gZW5kIGRhdGUgc2hvdWxkIGJlIFRodSBTZXAgMjQgMjAwOSAoTGFzdCBUaHVyc2RheSBpbiBTZXB0ZW1iZXIgYXQgMjM6NTk9CisjIDo1OSkKKyMgPiBodHRwOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzk1ODcyOS8KKyMKKyMgdGltZWFuZGRhdGVbMl0gYW5kIGFub3RoZXIgc2l0ZSBJJ3ZlIGZvdW5kWzNdIGFsc28gc3VwcG9ydCB0aGF0LgorIworIyBbMV0gPGEgaHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD00OTIyNjMiPgorIyBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTQ5MjI2MworIyA8L2E+CisjIFsyXSA8YSBocmVmPSJodHRwOi8vd3d3LnRpbWVhbmRkYXRlLmNvbS93b3JsZGNsb2NrL2Nsb2NrY2hhbmdlLmh0bWw/bj01MyI+CisjIGh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL3dvcmxkY2xvY2svY2xvY2tjaGFuZ2UuaHRtbD9uPTUzCisjIDwvYT4KKyMgWzNdIDxhIGhyZWY9Imh0dHA6Ly93d3AuZ3JlZW53aWNobWVhbnRpbWUuY29tL3RpbWUtem9uZS9hZnJpY2EvZWd5cHQvIj4KKyMgaHR0cDovL3d3cC5ncmVlbndpY2htZWFudGltZS5jb20vdGltZS16b25lL2FmcmljYS9lZ3lwdC8KKyMgPC9hPgorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgyMDA5LTA0LTIwKToKKyMgSW4gMjAwOSAoYW5kIGZvciB0aGUgbmV4dCBzZXZlcmFsIHllYXJzKSwgUmFtYWRhbiBlbmRzIGJlZm9yZSB0aGUgZm91cnRoCisjIFRodXJzZGF5IGluIFNlcHRlbWJlcjsgRWd5cHQgaXMgZXhwZWN0ZWQgdG8gcmV2ZXJ0IHRvIHRoZSBsYXN0IFRodXJzZGF5CisjIGluIFNlcHRlbWJlci4KK1J1bGUJRWd5cHQJMjAwOAlvbmx5CS0JQXVnCWxhc3RUaHUJMjM6MDBzCTAJLQorUnVsZQlFZ3lwdAkyMDA5CW1heAktCVNlcAlsYXN0VGh1CTIzOjAwcwkwCS0KKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvQ2Fpcm8JMjowNTowMCAtCUxNVAkxOTAwIE9jdAorCQkJMjowMAlFZ3lwdAlFRSVzVAorCisjIEVxdWF0b3JpYWwgR3VpbmVhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9NYWxhYm8JMDozNTowOCAtCUxNVAkxOTEyCisJCQkwOjAwCS0JR01UCTE5NjMgRGVjIDE1CisJCQkxOjAwCS0JV0FUCisKKyMgRXJpdHJlYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvQXNtYXJhCTI6MzU6MzIgLQlMTVQJMTg3MAorCQkJMjozNTozMgktCUFNVAkxODkwCSAgICAgICMgQXNtYXJhIE1lYW4gVGltZQorCQkJMjozNToyMAktCUFETVQJMTkzNiBNYXkgNSAgICAjIEFkaXMgRGVyYSBNVAorCQkJMzowMAktCUVBVAorCisjIEV0aGlvcGlhCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgorIyBTaGFua3MgJiBQb3R0ZW5nZXIgd3JpdGUgdGhhdCBFdGhpb3BpYSBoYWQgc2l4IG5hcnJvd2x5LXNwYWNlZCB0aW1lIHpvbmVzCisjIGJldHdlZW4gMTg3MCBhbmQgMTg5MCwgYW5kIHRoYXQgdGhleSBtZXJnZWQgdG8gMzhFNTAgKDI6MzU6MjApIGluIDE4OTAuCisjIFdlJ2xsIGd1ZXNzIHRoYXQgMzhFNTAgaXMgZm9yIEFkaXMgRGVyYS4KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQWZyaWNhL0FkZGlzX0FiYWJhCTI6MzQ6NDggLQlMTVQJMTg3MAorCQkJMjozNToyMAktCUFETVQJMTkzNiBNYXkgNSAgICAjIEFkaXMgRGVyYSBNVAorCQkJMzowMAktCUVBVAorCisjIEdhYm9uCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFmcmljYS9MaWJyZXZpbGxlCTA6Mzc6NDggLQlMTVQJMTkxMgorCQkJMTowMAktCVdBVAorCisjIEdhbWJpYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvQmFuanVsCS0xOjA2OjM2IC0JTE1UCTE5MTIKKwkJCS0xOjA2OjM2IC0JQk1UCTE5MzUJIyBCYW5qdWwgTWVhbiBUaW1lCisJCQktMTowMAktCVdBVAkxOTY0CisJCQkgMDowMAktCUdNVAorCisjIEdoYW5hCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworIyBXaGl0bWFuIHNheXMgRFNUIHdhcyBvYnNlcnZlZCBmcm9tIDE5MzEgdG8gYGB0aGUgcHJlc2VudCcnOworIyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJR2hhbmEJMTkzNgkxOTQyCS0JU2VwCSAxCTA6MDAJMDoyMAlHSFNUCitSdWxlCUdoYW5hCTE5MzYJMTk0MgktCURlYwkzMQkwOjAwCTAJR01UCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9BY2NyYQktMDowMDo1MiAtCUxNVAkxOTE4CisJCQkgMDowMAlHaGFuYQklcworCisjIEd1aW5lYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvQ29uYWtyeQktMDo1NDo1MiAtCUxNVAkxOTEyCisJCQkgMDowMAktCUdNVAkxOTM0IEZlYiAyNgorCQkJLTE6MDAJLQlXQVQJMTk2MAorCQkJIDA6MDAJLQlHTVQKKworIyBHdWluZWEtQmlzc2F1CisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9CaXNzYXUJLTE6MDI6MjAgLQlMTVQJMTkxMSBNYXkgMjYKKwkJCS0xOjAwCS0JV0FUCTE5NzUKKwkJCSAwOjAwCS0JR01UCisKKyMgS2VueWEKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQWZyaWNhL05haXJvYmkJMjoyNzoxNgktCUxNVAkxOTI4IEp1bAorCQkJMzowMAktCUVBVAkxOTMwCisJCQkyOjMwCS0JQkVBVAkxOTQwCisJCQkyOjQ0OjQ1CS0JQkVBVVQJMTk2MAorCQkJMzowMAktCUVBVAorCisjIExlc290aG8KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQWZyaWNhL01hc2VydQkxOjUwOjAwIC0JTE1UCTE5MDMgTWFyCisJCQkyOjAwCS0JU0FTVAkxOTQzIFNlcCAxOSAyOjAwCisJCQkyOjAwCTE6MDAJU0FTVAkxOTQ0IE1hciAxOSAyOjAwCisJCQkyOjAwCS0JU0FTVAorCisjIExpYmVyaWEKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIEluIDE5NzIgTGliZXJpYSB3YXMgdGhlIGxhc3QgY291bnRyeSB0byBzd2l0Y2gKKyMgZnJvbSBhIFVUQyBvZmZzZXQgdGhhdCB3YXMgbm90IGEgbXVsdGlwbGUgb2YgMTUgb3IgMjAgbWludXRlcy4KKyMgSG93c2UgcmVwb3J0cyB0aGF0IGl0IHdhcyBpbiBob25vciBvZiB0aGVpciBwcmVzaWRlbnQncyBiaXJ0aGRheS4KKyMgU2hhbmsgJiBQb3R0ZW5nZXIgcmVwb3J0IHRoZSBkYXRlIGFzIE1heSAxLCB3aGVyZWFzIEhvd3NlIHJlcG9ydHMgSmFuOworIyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KKyMgRm9yIExpYmVyaWEgYmVmb3JlIDE5NzIsIFNoYW5rcyAmIFBvdHRlbmdlciByZXBvcnQgLTA6NDQsIHdoZXJlYXMgSG93c2UgYW5kCisjIFdoaXRtYW4gZWFjaCByZXBvcnQgLTA6NDQ6MzA7IGdvIHdpdGggdGhlIG1vcmUgcHJlY2lzZSBmaWd1cmUuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9Nb25yb3ZpYQktMDo0MzowOCAtCUxNVAkxODgyCisJCQktMDo0MzowOCAtCU1NVAkxOTE5IE1hciAjIE1vbnJvdmlhIE1lYW4gVGltZQorCQkJLTA6NDQ6MzAgLQlMUlQJMTk3MiBNYXkgIyBMaWJlcmlhIFRpbWUKKwkJCSAwOjAwCS0JR01UCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBMaWJ5YQorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlMaWJ5YQkxOTUxCW9ubHkJLQlPY3QJMTQJMjowMAkxOjAwCVMKK1J1bGUJTGlieWEJMTk1Mglvbmx5CS0JSmFuCSAxCTA6MDAJMAktCitSdWxlCUxpYnlhCTE5NTMJb25seQktCU9jdAkgOQkyOjAwCTE6MDAJUworUnVsZQlMaWJ5YQkxOTU0CW9ubHkJLQlKYW4JIDEJMDowMAkwCS0KK1J1bGUJTGlieWEJMTk1NQlvbmx5CS0JU2VwCTMwCTA6MDAJMTowMAlTCitSdWxlCUxpYnlhCTE5NTYJb25seQktCUphbgkgMQkwOjAwCTAJLQorUnVsZQlMaWJ5YQkxOTgyCTE5ODQJLQlBcHIJIDEJMDowMAkxOjAwCVMKK1J1bGUJTGlieWEJMTk4MgkxOTg1CS0JT2N0CSAxCTA6MDAJMAktCitSdWxlCUxpYnlhCTE5ODUJb25seQktCUFwcgkgNgkwOjAwCTE6MDAJUworUnVsZQlMaWJ5YQkxOTg2CW9ubHkJLQlBcHIJIDQJMDowMAkxOjAwCVMKK1J1bGUJTGlieWEJMTk4Nglvbmx5CS0JT2N0CSAzCTA6MDAJMAktCitSdWxlCUxpYnlhCTE5ODcJMTk4OQktCUFwcgkgMQkwOjAwCTE6MDAJUworUnVsZQlMaWJ5YQkxOTg3CTE5ODkJLQlPY3QJIDEJMDowMAkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQWZyaWNhL1RyaXBvbGkJMDo1Mjo0NCAtCUxNVAkxOTIwCisJCQkxOjAwCUxpYnlhCUNFJXNUCTE5NTkKKwkJCTI6MDAJLQlFRVQJMTk4MgorCQkJMTowMAlMaWJ5YQlDRSVzVAkxOTkwIE1heSAgNAorIyBUaGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIGZyb20gU2hhbmtzICYgUG90dGVuZ2VyOworIyB0aGUgSUFUQSBTU0lNIGRhdGEgY29udGFpbiBzb21lIG9idmlvdXMgZXJyb3JzLgorCQkJMjowMAktCUVFVAkxOTk2IFNlcCAzMAorCQkJMTowMAktCUNFVAkxOTk3IEFwciAgNAorCQkJMTowMAkxOjAwCUNFU1QJMTk5NyBPY3QgIDQKKwkJCTI6MDAJLQlFRVQKKworIyBNYWRhZ2FzY2FyCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEluZGlhbi9BbnRhbmFuYXJpdm8gMzoxMDowNCAtCUxNVAkxOTExIEp1bAorCQkJMzowMAktCUVBVAkxOTU0IEZlYiAyNyAyMzowMHMKKwkJCTM6MDAJMTowMAlFQVNUCTE5NTQgTWF5IDI5IDIzOjAwcworCQkJMzowMAktCUVBVAorCisjIE1hbGF3aQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvQmxhbnR5cmUJMjoyMDowMCAtCUxNVAkxOTAzIE1hcgorCQkJMjowMAktCUNBVAorCisjIE1hbGkKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQWZyaWNhL0JhbWFrbwktMDozMjowMCAtCUxNVAkxOTEyCisJCQkgMDowMAktCUdNVAkxOTM0IEZlYiAyNgorCQkJLTE6MDAJLQlXQVQJMTk2MCBKdW4gMjAKKwkJCSAwOjAwCS0JR01UCisKKyMgTWF1cml0YW5pYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBZnJpY2EvTm91YWtjaG90dAktMTowMzo0OCAtCUxNVAkxOTEyCisJCQkgMDowMAktCUdNVAkxOTM0IEZlYiAyNgorCQkJLTE6MDAJLQlXQVQJMTk2MCBOb3YgMjgKKwkJCSAwOjAwCS0JR01UCisKKyMgTWF1cml0aXVzCisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDgtMDYtMjUpOgorIyBNYXVyaXRpdXMgcGxhbnMgdG8gb2JzZXJ2ZSBEU1QgZnJvbSAyMDA4LTExLTAxIHRvIDIwMDktMDMtMzEgb24gYSB0cmlhbAorIyBiYXNpcy4uLi4KKyMgSXQgc2VlbXMgdGhhdCBNYXVyaXRpdXMgb2JzZXJ2ZWQgZGF5bGlnaHQgc2F2aW5nIHRpbWUgZnJvbSAxOTgyLTEwLTEwIHRvIAorIyAxOTgzLTAzLTIwIGFzIHdlbGwsIGJ1dCB0aGF0IHdhcyBub3Qgc3VjY2Vzc2Z1bC4uLi4KKyMgaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vbmV3cy90aW1lL21hdXJpdGl1cy1kYXlsaWdodC1zYXZpbmctdGltZS5odG1sCisKKyMgRnJvbSBBbGV4IEtyaXZlbnlzaGV2ICgyMDA4LTA2LTI1KToKKyMgaHR0cDovL2Vjb25vbWljZGV2ZWxvcG1lbnQuZ292Lm11L3BvcnRhbC9zaXRlL01haW5ob21lcGFnZS9tZW51aXRlbS5hNDJiMjQxMjgxMDRkOTg0NWRhYmRkZDE1NDUwOGEwYy8/Y29udGVudF9pZD0wYTdjZWU4YjVkNjlhMTEwVmduVkNNMTAwMDAwMGEwNGE4YzBSQ1JECisKKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDIwMDgtMDYtMzApOgorIyBUaGUgd3d3LnRpbWVhbmRkYXRlLmNvbSBhcnRpY2xlIGNpdGVkIGJ5IFN0ZWZmZW4gVGhvcnNlbiBub3RlcyB0aGF0ICJBCisjIGZpbmFsIGRlY2lzaW9uIGhhcyB5ZXQgdG8gYmUgbWFkZSBvbiB0aGUgdGltZXMgdGhhdCBkYXlsaWdodCBzYXZpbmcKKyMgd291bGQgYmVnaW4gYW5kIGVuZCBvbiB0aGVzZSBkYXRlcy4iIEFzIGEgcGxhY2UgaG9sZGVyLCB1c2UgbWlkbmlnaHQuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwOC0wNi0zMCk6CisjIEZvbGxvdyBUaG9yc2VuIG9uIERTVCBpbiAxOTgyLzE5ODMsIGluc3RlYWQgb2YgU2hhbmtzICYgUG90dGVuZ2VyLgorCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA4LTA3LTEwKToKKyMgQWNjb3JkaW5nIHRvCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cubGV4cHJlc3MubXUvZGlzcGxheV9hcnRpY2xlLnBocD9uZXdzX2lkPTExMTIxNiI+CisjIGh0dHA6Ly93d3cubGV4cHJlc3MubXUvZGlzcGxheV9hcnRpY2xlLnBocD9uZXdzX2lkPTExMTIxNgorIyA8L2E+CisjIChpbiBGcmVuY2gpLCBNYXVyaXRpdXMgd2lsbCBzdGFydCBhbmQgZW5kIHRoZWlyIERTVCBhIGZldyBkYXlzIGVhcmxpZXIKKyMgdGhhbiBwcmV2aW91c2x5IGFubm91bmNlZCAoMjAwOC0xMS0wMSB0byAyMDA5LTAzLTMxKS4gIFRoZSBuZXcgc3RhcnQKKyMgZGF0ZSBpcyAyMDA4LTEwLTI2IGF0IDAyOjAwIGFuZCB0aGUgbmV3IGVuZCBkYXRlIGlzIDIwMDktMDMtMjcgKG5vIHRpbWUKKyMgZ2l2ZW4sIGJ1dCBpdCBpcyBwcm9iYWJseSBhdCBlaXRoZXIgMiBvciAzIHdhbGwgY2xvY2sgdGltZSkuCisjIAorIyBBIGxpdHRsZSBzdHJhbmdlIHRob3VnaCwgc2luY2UgdGhlIGFydGljbGUgc2F5cyB0aGF0IHRoZXkgbW92ZWQgdGhlIGRhdGUgCisjIHRvIGFsaWduIGl0c2VsZiB3aXRoIEV1cm9wZSBhbmQgVVNBIHdoaWNoIGFsc28gY2hhbmdlIHRpbWUgb24gdGhhdCBkYXRlLCAKKyMgYnV0IHRoYXQgbWVhbnMgdGhleSBoYXZlIG5vdCBwYWlkIGF0dGVudGlvbiB0byB3aGF0IGhhcHBlbmVkIGluIAorIyBVU0EvQ2FuYWRhIGxhc3QgeWVhciAoRFNUIGVuZHMgZmlyc3QgU3VuZGF5IGluIE5vdmVtYmVyKS4gSSBhbHNvIHdvbmRlciAKKyMgd2h5IHRoYXQgdGhleSBlbmQgb24gYSBGcmlkYXksIGluc3RlYWQgb2YgYWxpZ25pbmcgd2l0aCBFdXJvcGUgd2hpY2ggCisjIGNoYW5nZXMgdHdvIGRheXMgbGF0ZXIuCisKKyMgRnJvbSBBbGV4IEtyaXZlbnlzaGV2ICgyMDA4LTA3LTExKToKKyMgU2VlbXMgdGhhdCBFbmdsaXNoIGxhbmd1YWdlIGFydGljbGUgIlRoZSByZXZpdmFsIG9mIGRheWxpZ2h0IHNhdmluZworIyB0aW1lOiAgRW5lcmd5IGNvbnNlcnZhdGlvbj8iLSMgTm8uIDE2NTc4ICgwNy8xMS8yMDA4KSB3YXMgb3JpZ2luYWxseQorIyBwdWJsaXNoZWQgb24gTW9uZGF5LCBKdW5lIDMwLCAyMDA4Li4uCisjCisjIEkgZ3Vlc3MgdGhhdCBhcnRpY2xlIGluIEZyZW5jaCAiTGUgZ291dmVybmVtZW50IGF2YW5jZSBsJ2ludHJvZHVjdGlvbgorIyBkZSBsJ2hldXJlIGQnZXRlIiBzdGF0aW5nIHRoYXQgRFNUIGluIE1hdXJpdGl1cyBzdGFydGluZyBvbiBPY3RvYmVyIDI2CisjIGFuZCBlbmRpbmcgb24gTWFyY2ggMjcsIDIwMDkgaXMgdGhlIG1vc3QgcmVjZW50IG9uZS4KKyMgLi4uCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5jb20vZHN0X25ld3MvZHN0X25ld3NfbWF1cml0aXVzMDIuaHRtbCI+CisjIGh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5jb20vZHN0X25ld3MvZHN0X25ld3NfbWF1cml0aXVzMDIuaHRtbAorIyA8L2E+CisKKyMgRnJvbSBSaWFkIE0uIEhvc3NlbiBBbGx5ICgyMDA4LTA4LTAzKToKKyMgVGhlIEdvdmVybm1lbnQgb2YgTWF1cml0aXVzIHdlYmxpbmsKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5nb3YubXUvcG9ydGFsL3NpdGUvcG1vc2l0ZS9tZW51aXRlbS40Y2EwZWZkZWU0NzQ2MmU3NDQwYTYwMDI0OGE1MjFjYS8/Y29udGVudF9pZD00NzI4Y2E2OGIyYTViMTEwVmduVkNNMTAwMDAwMGEwNGE4YzBSQ1JEIj4KKyMgaHR0cDovL3d3dy5nb3YubXUvcG9ydGFsL3NpdGUvcG1vc2l0ZS9tZW51aXRlbS40Y2EwZWZkZWU0NzQ2MmU3NDQwYTYwMDI0OGE1MjFjYS8/Y29udGVudF9pZD00NzI4Y2E2OGIyYTViMTEwVmduVkNNMTAwMDAwMGEwNGE4YzBSQ1JECisjIDwvYT4KKyMgQ2FiaW5ldCBEZWNpc2lvbiBvZiBKdWx5IDE4dGgsIDIwMDggc3RhdGVzIGFzIGZvbGxvd3M6CisjCisjIDQuIC4uLkNhYmluZXQgaGFzIGFncmVlZCB0byB0aGUgaW50cm9kdWN0aW9uIGludG8gdGhlIE5hdGlvbmFsIEFzc2VtYmx5CisjIG9mIHRoZSBUaW1lIEJpbGwgd2hpY2ggcHJvdmlkZXMgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygc3VtbWVyIHRpbWUgaW4KKyMgTWF1cml0aXVzLiBUaGUgc3VtbWVyIHRpbWUgcGVyaW9kIHdoaWNoIHdpbGwgYmUgb2Ygb25lIGhvdXIgYWhlYWQgb2YKKyMgdGhlIHN0YW5kYXJkIHRpbWUsIHdpbGwgYmUgYWxpZ25lZCB3aXRoIHRoYXQgaW4gRXVyb3BlIGFuZCB0aGUgVW5pdGVkCisjIFN0YXRlcyBvZiBBbWVyaWNhLiBJdCB3aWxsIHN0YXJ0IGF0IHR3byBvJ2Nsb2NrIGluIHRoZSBtb3JuaW5nIG9uIHRoZQorIyBsYXN0IFN1bmRheSBvZiBPY3RvYmVyIGFuZCB3aWxsIGVuZCBhdCB0d28gbydjbG9jayBpbiB0aGUgbW9ybmluZyBvbgorIyB0aGUgbGFzdCBTdW5kYXkgb2YgTWFyY2ggdGhlIGZvbGxvd2luZyB5ZWFyLiBUaGUgc3VtbWVyIHRpbWUgZm9yIHRoZQorIyB5ZWFyIDIwMDggLSAyMDA5IHdpbGwsIHRoZXJlZm9yZSwgYmUgZWZmZWN0aXZlIGFzIGZyb20gMjYgT2N0b2JlciAyMDA4CisjIGFuZCBlbmQgb24gMjkgTWFyY2ggMjAwOS4KKworIyBGcm9tIEVkIE1hc3RlICgyMDA4LTEwLTA3KToKKyMgVEhFIFRJTUUgQklMTCAoTm8uIFhYVklJIG9mIDIwMDgpIEV4cGxhbmF0b3J5IE1lbW9yYW5kdW0gc3RhdGVzIHRoZQorIyBiZWdpbm5pbmcgLyBlbmRpbmcgb2Ygc3VtbWVyIHRpbWUgaXMgMiBvJ2Nsb2NrIHN0YW5kYXJkIHRpbWUgaW4gdGhlCisjIG1vcm5pbmcgb2YgdGhlIGxhc3QgU3VuZGF5IG9mIE9jdG9iZXIgLyBsYXN0IFN1bmRheSBvZiBNYXJjaC4KKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5nb3YubXUvcG9ydGFsL2dvYy9hc3NlbWJseXNpdGUvZmlsZS9iaWxsMjcwOC5wZGYiPgorIyBodHRwOi8vd3d3Lmdvdi5tdS9wb3J0YWwvZ29jL2Fzc2VtYmx5c2l0ZS9maWxlL2JpbGwyNzA4LnBkZgorIyA8L2E+CisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlIE1hdXJpdGl1cwkxOTgyCW9ubHkJLQlPY3QJMTAJMDowMAkxOjAwCVMKK1J1bGUgTWF1cml0aXVzCTE5ODMJb25seQktCU1hcgkyMQkwOjAwCTAJLQorUnVsZSBNYXVyaXRpdXMJMjAwOAltYXgJLQlPY3QJbGFzdFN1bgkyOjAwcwkxOjAwCVMKK1J1bGUgTWF1cml0aXVzCTIwMDkJbWF4CS0JTWFyCWxhc3RTdW4JMjowMHMJMAktCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEluZGlhbi9NYXVyaXRpdXMJMzo1MDowMCAtCUxNVAkxOTA3CQkjIFBvcnQgTG91aXMKKwkJCTQ6MDAgTWF1cml0aXVzCU1VJXNUCSMgTWF1cml0aXVzIFRpbWUKKyMgQWdhbGVnYSBJcywgUm9kcmlndWV6CisjIG5vIGluZm9ybWF0aW9uOyBwcm9iYWJseSBsaWtlIEluZGlhbi9NYXVyaXRpdXMKKworIyBNYXlvdHRlCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUluZGlhbi9NYXlvdHRlCTM6MDA6NTYgLQlMTVQJMTkxMSBKdWwJIyBNYW1vdXR6b3UKKwkJCTM6MDAJLQlFQVQKKworIyBNb3JvY2NvCisjIFNlZSB0aGUgYGV1cm9wZScgZmlsZSBmb3IgU3BhbmlzaCBNb3JvY2NvIChBZnJpY2EvQ2V1dGEpLgorCisjIEZyb20gQWxleCBLcml2ZW55c2hldiAoMjAwOC0wNS0wOSk6CisjIEhlcmUgaXMgYW4gYXJ0aWNsZSB0aGF0IE1vcm9jY28gcGxhbiB0byBpbnRyb2R1Y2UgRGF5bGlnaHQgU2F2aW5nIFRpbWUgYmV0d2VlbgorIyAxIEp1bmUsIDIwMDggYW5kIDI3IFNlcHRlbWJlciwgMjAwOC4KKyMKKyMgIi4uLiBNb3JvY2NvIGlzIHRvIHNhdmUgZW5lcmd5IGJ5IGFkanVzdGluZyBpdHMgY2xvY2sgZHVyaW5nIHN1bW1lciBzbyBpdCB3aWxsCisjIGJlIG9uZSBob3VyIGFoZWFkIG9mIEdNVCBiZXR3ZWVuIDEgSnVuZSBhbmQgMjcgU2VwdGVtYmVyLCBhY2NvcmRpbmcgdG8KKyMgQ29tbXVuaWNhdGlvbiBNaW5pc3RlciBhbmQgR292IGVybm1lbnQgU3Bva2VzbWFuLCBLaGFsaWQgTmFjaXJpLi4uLiIKKyMKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLm5ldC9kc3RfbmV3cy9kc3RfbmV3c19tb3JvY2NvMDEuaHRtbCI+CisjIGh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5uZXQvZHN0X25ld3MvZHN0X25ld3NfbW9yb2NjbzAxLmh0bWwKKyMgPC9hPgorIyBPUgorIyA8YSBocmVmPSJodHRwOi8vZW4uYWZyaWsuY29tL25ld3MxMTg5Mi5odG1sIj4KKyMgaHR0cDovL2VuLmFmcmlrLmNvbS9uZXdzMTE4OTIuaHRtbAorIyA8L2E+CisKKyMgRnJvbSBBbGV4IEtyaXZlbnlzaGV2ICgyMDA4LTA1LTA5KToKKyMgVGhlIE1vcm9jY28gdGltZSBjaGFuZ2UgY2FuIGJlIGNvbmZpcm1lZCBvbiBNb3JvY2NvIHdlYiBzaXRlIE1hZ2hyZWIgQXJhYmUgUHJlc3NlOgorIyA8YSBocmVmPSJodHRwOi8vd3d3Lm1hcC5tYS9lbmcvc2VjdGlvbnMvYm94My9tb3JvY2NvX3NoaWZ0c190b19kYS92aWV3Ij4KKyMgaHR0cDovL3d3dy5tYXAubWEvZW5nL3NlY3Rpb25zL2JveDMvbW9yb2Njb19zaGlmdHNfdG9fZGEvdmlldworIyA8L2E+CisjCisjIE1vcm9jY28gc2hpZnRzIHRvIGRheWxpZ2h0IHRpbWUgb24gSnVuZSAxc3QgdGhyb3VnaCBTZXB0ZW1iZXIgMjcsIEdvdnQuCisjIHNwb2tlc21hbi4KKworIyBGcm9tIFBhdHJpY2UgU2NhdHRvbGluICgyMDA4LTA1LTA5KToKKyMgQWNjb3JkaW5nIHRvIHRoaXMgYXJ0aWNsZToKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5hdm1hcm9jLmNvbS9hY3R1YWxpdGUvaGV1cmUtZGV0ZS1jb21tZW50LWExMjc4OTYuaHRtbCI+CisjIGh0dHA6Ly93d3cuYXZtYXJvYy5jb20vYWN0dWFsaXRlL2hldXJlLWRldGUtY29tbWVudC1hMTI3ODk2Lmh0bWwKKyMgPC9hPgorIyAoYW5kIHJlcHVibGlzaGVkIGhlcmU6CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWN0dS5tYS9oZXVyZS1kZXRlLWNvbW1lbnRfaTEyNzg5Nl8wLmh0bWwiPgorIyBodHRwOi8vd3d3LmFjdHUubWEvaGV1cmUtZGV0ZS1jb21tZW50X2kxMjc4OTZfMC5odG1sCisjIDwvYT4KKyMgKQorIyB0aGUgY2hhbmdlcyBvY2N1cnMgYXQgbWlkbmlnaHQ6CisjCisjIHNhdHVyZGF5IG5pZ2h0IG1heSAzMXN0IGF0IG1pZG5pZ2h0ICh3aGljaCBpbiBmcmVuY2ggaXMgdG8gYmUKKyMgaW50cmVwcmV0ZWQgYXMgdGhlIG5pZ2h0IGJldHdlZW4gc2F0dXJkYXkgYW5kIHN1bmRheSkKKyMgc3VuZGF5IG5pZ2h0IHRoZSAyOHRoICBhdCBtaWRuaWdodAorIworIyBTZWVpbmcgdGhhdCB0aGUgMjh0aCBpcyBtb25kYXksIEkgYW0gZ3Vlc3NpbmcgdGhhdCBzaGUgaW50ZW5kcyB0byBzYXkKKyMgdGhlIG1pZG5pZ2h0IG9mIHRoZSAyOHRoIHdoaWNoIGlzIHRoZSBtaWRuaWdodCBiZXR3ZWVuIHN1bmRheSBhbmQKKyMgbW9uZGF5LCB3aGljaCBqaXZlcyB3aXRoIG90aGVyIHNvdXJjZXMgdGhhdCBzYXkgdGhhdCBpdCdzIGluY2x1c2l2ZQorIyBqdW5lMXN0IHRvIHNlcHQgMjd0aC4KKyMKKyMgVGhlIGRlY2lzaW9uIHdhcyB0YWtlbiBieSBkZWNyZWUgKjItMDgtMjI0ICpidXQgSSBjYW4ndCBmaW5kIHRoZSBkZWNyZWUKKyMgcHVibGlzaGVkIG9uIHRoZSB3ZWIuCisjCisjIEl0J3MgYWxzbyBjb25maXJtZWQgaGVyZToKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5tYXJvYy5tYS9OUi9leGVyZXMvRkFDRjE0MUYtRDkxMC00NEIwLUI3RkEtNkUwMzczMzQyNUQxLmh0bSI+CisjIGh0dHA6Ly93d3cubWFyb2MubWEvTlIvZXhlcmVzL0ZBQ0YxNDFGLUQ5MTAtNDRCMC1CN0ZBLTZFMDM3MzM0MjVEMS5odG0KKyMgPC9hPgorIyBvbiBhIGdvdmVybm1lbnQgcG9ydGFsIGFzIGJlaW5nICBiZXR3ZWVuIGp1bmUgMXN0IGFuZCBzZXB0IDI3dGggKG5vdCB5ZXQKKyMgcG9zdGVkIGluIGVuZ2xpc2gpLgorIworIyBUaGUgZm9sbG93aW5nIGdvb2dsZSBxdWVyeSB3aWxsIGdlbmVyYXRlIG1hbnkgcmVsZXZhbnQgaGl0czoKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9obD1lbiZxPUNvbnNlaWwrZGUrZ291dmVybmVtZW50K21hcm9jK2hldXJlK2F2YW5jZSZidG5HPVNlYXJjaCI+CisjIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/aGw9ZW4mcT1Db25zZWlsK2RlK2dvdXZlcm5lbWVudCttYXJvYytoZXVyZSthdmFuY2UmYnRuRz1TZWFyY2gKKyMgPC9hPgorCisjIEZyb20gQWxleCBLcml2ZW55c2hldiAoMjAwOC0wNS0wOSk6CisjIElzIFdlc3Rlcm4gU2FoYXJhIChwYXJ0IHdoaWNoIGFkbWluaXN0cmF0ZWQgYnkgTW9yb2NjbykgZ29pbmcgdG8gZm9sbG93CisjIE1vcm9jY28gRFNUIGNoYW5nZXM/ICBBbnkgaW5mb3JtYXRpb24/ICBXaGF0IGFib3V0IG90aGVyIHBhcnQgb2YKKyMgV2VzdGVybiBTYWhhcmEgLSB1bmRlciBhZG1pbmlzdHJhdGlvbiBvZiBQT0xJU0FSSU8gRnJvbnQgKGFsc28gbmFtZWQKKyMgU0FEUiBTYWhhcmF3aSBBcmFiIERlbW9jcmF0aWMgUmVwdWJsaWMpPworCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgyMDA4LTA1LTA5KToKKyMgWFhYLS1ndWVzcyB0aGF0IGl0IGlzIG9ubHkgTW9yb2NjbyBmb3Igbm93OyBndWVzcyBvbmx5IDIwMDggZm9yIG5vdy4KKworIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwOC0wOC0yNyk6CisjIE1vcm9jY28gd2lsbCBjaGFuZ2UgdGhlIGNsb2NrcyBiYWNrIG9uIHRoZSBtaWRuaWdodCBiZXR3ZWVuIEF1Z3VzdCAzMSAKKyMgYW5kIFNlcHRlbWJlciAxLiBUaGV5IG9yaWdpbmFsbHkgcGxhbm5lZCB0byBvYnNlcnZlIERTVCB0byBuZWFyIHRoZSBlbmQgCisjIG9mIFNlcHRlbWJlcjoKKyMKKyMgT25lIGFydGljbGUgYWJvdXQgaXQgKGluIEZyZW5jaCk6CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cubWVuYXJhLm1hL2ZyL0FjdHVhbGl0ZXMvTWFyb2MvU29jaWV0ZS9jaS5yZXRvdXJfYV9sX2hldXJlX2dtdF9hX3BhcnRpcl9kdV9kaW1hbmNoZV8zMV9hb3V0X2FfbWludWl0X29mZmljaWVsXy5kZWZhdWx0Ij4KKyMgaHR0cDovL3d3dy5tZW5hcmEubWEvZnIvQWN0dWFsaXRlcy9NYXJvYy9Tb2NpZXRlL2NpLnJldG91cl9hX2xfaGV1cmVfZ210X2FfcGFydGlyX2R1X2RpbWFuY2hlXzMxX2FvdXRfYV9taW51aXRfb2ZmaWNpZWxfLmRlZmF1bHQKKyMgPC9hPgorIworIyBXZSBoYXZlIHNvbWUgZnVydGhlciBkZXRhaWxzIHBvc3RlZCBoZXJlOgorIyA8YSBocmVmPSJodHRwOi8vd3d3LnRpbWVhbmRkYXRlLmNvbS9uZXdzL3RpbWUvbW9yb2Njby1lbmRzLWRzdC1lYXJseS0yMDA4Lmh0bWwiPgorIyBodHRwOi8vd3d3LnRpbWVhbmRkYXRlLmNvbS9uZXdzL3RpbWUvbW9yb2Njby1lbmRzLWRzdC1lYXJseS0yMDA4Lmh0bWwKKyMgPC9hPgorCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA5LTAzLTE3KToKKyMgTW9yb2NjbyB3aWxsIG9ic2VydmUgRFNUIGZyb20gMjAwOS0wNi0wMSAwMDowMCB0byAyMDA5LTA4LTIxIDAwOjAwIGFjY29yZGluZworIyB0byBtYW55IHNvdXJjZXMsIHN1Y2ggYXMKKyMgPGEgaHJlZj0iaHR0cDovL25ld3MubWFyd2ViLmNvbS9tb3JvY2NvL2VudGVydGFpbm1lbnQvbW9yb2Njby1kYXlsaWdodC1zYXZpbmcuaHRtbCI+CisjIGh0dHA6Ly9uZXdzLm1hcndlYi5jb20vbW9yb2Njby9lbnRlcnRhaW5tZW50L21vcm9jY28tZGF5bGlnaHQtc2F2aW5nLmh0bWwKKyMgPC9hPgorIyA8YSBocmVmPSJodHRwOi8vd3d3Lm1lZGkxc2F0Lm1hL2ZyL2RlcGVjaGUuYXNweD9pZHA9MjMxMiI+CisjIGh0dHA6Ly93d3cubWVkaTFzYXQubWEvZnIvZGVwZWNoZS5hc3B4P2lkcD0yMzEyCisjIDwvYT4KKyMgKEZyZW5jaCkKKyMKKyMgT3VyIHN1bW1hcnk6CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL25ld3MvdGltZS9tb3JvY2NvLXN0YXJ0cy1kc3QtMjAwOS5odG1sIj4KKyMgaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vbmV3cy90aW1lL21vcm9jY28tc3RhcnRzLWRzdC0yMDA5Lmh0bWwKKyMgPC9hPgorCisjIEZyb20gQWxleGFuZGVyIEtyaXZlbnlzaGV2ICgyMDA5LTAzLTE3KToKKyMgSGVyZSBpcyBhIGxpbmsgdG8gb2ZmaWNpYWwgZG9jdW1lbnQgZnJvbSBSb3lhdW1lIGR1IE1hcm9jIFByZW1pZXIgTWluaXN0cmUsCisjIE1pbmlzdGVyZSBkZSBsYSBNb2Rlcm5pc2F0aW9uIGRlcyBTZWN0ZXVycyBQdWJsaWNzCisjCisjIFVuZGVyIEFydGljbGUgMSBvZiBSb3lhbCBEZWNyZWUgTm8uIDQ1NS02NyBvZiBBY3QgMjMgc2FmYXIgMTM4NyAoMiBqdW5lIDE5NjcpCisjIGNvbmNlcm5pbmcgdGhlIGFtZW5kbWVudCBvZiB0aGUgbGVnYWwgdGltZSwgdGhlIE1pbmlzdHJ5IG9mIE1vZGVybml6YXRpb24gb2YKKyMgUHVibGljIFNlY3RvcnMgYW5ub3VuY2VkIHRoYXQgdGhlIG9mZmljaWFsIHRpbWUgaW4gdGhlIEtpbmdkb20gd2lsbCBiZQorIyBhZHZhbmNlZCA2MCBtaW51dGVzIGZyb20gU3VuZGF5IDMxIE1heSAyMDA5IGF0IG1pZG5pZ2h0LgorIworIyA8YSBocmVmPSJodHRwOi8vd3d3Lm1tc3AuZ292Lm1hL2ZyYW5jYWlzL0FjdHVhbGl0ZXNfZnIvUERGX0FjdHVhbGl0ZXNfRnIvSGV1cmVFdGVfRlIucGRmIj4KKyMgaHR0cDovL3d3dy5tbXNwLmdvdi5tYS9mcmFuY2Fpcy9BY3R1YWxpdGVzX2ZyL1BERl9BY3R1YWxpdGVzX0ZyL0hldXJlRXRlX0ZSLnBkZgorIyA8L2E+CisjCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5jb20vZHN0X25ld3MvZHN0X25ld3NfbW9yb2NjbzAzLmh0bWwiPgorIyBodHRwOi8vd3d3LndvcmxkdGltZXpvbmUuY29tL2RzdF9uZXdzL2RzdF9uZXdzX21vcm9jY28wMy5odG1sCisjIDwvYT4KKworIyBSVUxFCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKKworUnVsZQlNb3JvY2NvCTE5MzkJb25seQktCVNlcAkxMgkgMDowMAkxOjAwCVMKK1J1bGUJTW9yb2NjbwkxOTM5CW9ubHkJLQlOb3YJMTkJIDA6MDAJMAktCitSdWxlCU1vcm9jY28JMTk0MAlvbmx5CS0JRmViCTI1CSAwOjAwCTE6MDAJUworUnVsZQlNb3JvY2NvCTE5NDUJb25seQktCU5vdgkxOAkgMDowMAkwCS0KK1J1bGUJTW9yb2NjbwkxOTUwCW9ubHkJLQlKdW4JMTEJIDA6MDAJMTowMAlTCitSdWxlCU1vcm9jY28JMTk1MAlvbmx5CS0JT2N0CTI5CSAwOjAwCTAJLQorUnVsZQlNb3JvY2NvCTE5NjcJb25seQktCUp1bgkgMwkxMjowMAkxOjAwCVMKK1J1bGUJTW9yb2NjbwkxOTY3CW9ubHkJLQlPY3QJIDEJIDA6MDAJMAktCitSdWxlCU1vcm9jY28JMTk3NAlvbmx5CS0JSnVuCTI0CSAwOjAwCTE6MDAJUworUnVsZQlNb3JvY2NvCTE5NzQJb25seQktCVNlcAkgMQkgMDowMAkwCS0KK1J1bGUJTW9yb2NjbwkxOTc2CTE5NzcJLQlNYXkJIDEJIDA6MDAJMTowMAlTCitSdWxlCU1vcm9jY28JMTk3Nglvbmx5CS0JQXVnCSAxCSAwOjAwCTAJLQorUnVsZQlNb3JvY2NvCTE5NzcJb25seQktCVNlcAkyOAkgMDowMAkwCS0KK1J1bGUJTW9yb2NjbwkxOTc4CW9ubHkJLQlKdW4JIDEJIDA6MDAJMTowMAlTCitSdWxlCU1vcm9jY28JMTk3OAlvbmx5CS0JQXVnCSA0CSAwOjAwCTAJLQorUnVsZQlNb3JvY2NvCTIwMDgJb25seQktCUp1bgkgMQkgMDowMAkxOjAwCVMKK1J1bGUJTW9yb2NjbwkyMDA4CW9ubHkJLQlTZXAJIDEJIDA6MDAJMAktCitSdWxlCU1vcm9jY28JMjAwOQlvbmx5CS0JSnVuCSAxCSAwOjAwCTE6MDAJUworUnVsZQlNb3JvY2NvCTIwMDkJb25seQktCUF1ZwkgMjEJIDA6MDAJMAktCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFmcmljYS9DYXNhYmxhbmNhCS0wOjMwOjIwIC0JTE1UCTE5MTMgT2N0IDI2CisJCQkgMDowMAlNb3JvY2NvCVdFJXNUCTE5ODQgTWFyIDE2CisJCQkgMTowMAktCUNFVAkxOTg2CisJCQkgMDowMAlNb3JvY2NvCVdFJXNUCisjIFdlc3Rlcm4gU2FoYXJhCitab25lIEFmcmljYS9FbF9BYWl1bgktMDo1Mjo0OCAtCUxNVAkxOTM0IEphbgorCQkJLTE6MDAJLQlXQVQJMTk3NiBBcHIgMTQKKwkJCSAwOjAwCS0JV0VUCisKKyMgTW96YW1iaXF1ZQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvTWFwdXRvCTI6MTA6MjAgLQlMTVQJMTkwMyBNYXIKKwkJCTI6MDAJLQlDQVQKKworIyBOYW1pYmlhCisjIFRoZSAxOTk0LTA0LTAzIHRyYW5zaXRpb24gaXMgZnJvbSBTaGFua3MgJiBQb3R0ZW5nZXIuCisjIFNoYW5rcyAmIFBvdHRlbmdlciByZXBvcnQgbm8gRFNUIGFmdGVyIDE5OTgtMDQ7IGdvIHdpdGggSUFUQS4KKworIyBGcm9tIFBldHJvbmVsbGEgU2liZWVuZSAoMjAwNy0wMy0zMCkgaW4KKyMgPGh0dHA6Ly9hbGxhZnJpY2EuY29tL3N0b3JpZXMvMjAwNzAzMzAwMTc4Lmh0bWw+OgorIyBXaGlsZSB0aGUgZW50aXJlIGNvdW50cnkgY2hhbmdlcyBpdHMgdGltZSwgS2F0aW1hIE11bGlsbyBhbmQgb3RoZXIKKyMgc2V0dGxlbWVudHMgaW4gQ2Fwcml2aSB1bm9mZmljaWFsbHkgd2lsbCBub3QgYmVjYXVzZSB0aGUgc3VuIHRoZXJlCisjIHJpc2VzIGFuZCBzZXRzIGVhcmxpZXIgY29tcGFyZWQgdG8gb3RoZXIgcmVnaW9ucy4gIENoaWVmIG9mCisjIEZvcmVjYXN0aW5nIFJpYWFuIHZhbiBaeWwgZXhwbGFpbmVkIHRoYXQgdGhlIGZhciBlYXN0ZXJuIHBhcnRzIG9mCisjIHRoZSBjb3VudHJ5IGFyZSBjbG9zZSB0byA0MCBtaW51dGVzIGVhcmxpZXIgaW4gc3VucmlzZSB0aGFuIHRoZSByZXN0CisjIG9mIHRoZSBjb3VudHJ5LgorIyAKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNy0wMy0zMSk6CisjIEFwcGFyZW50bHkgdGhlIENhcHJpdmkgU3RyaXAgaW5mb3JtYWxseSBvYnNlcnZlcyBCb3Rzd2FuYSB0aW1lLCBidXQKKyMgd2UgaGF2ZSBubyBkZXRhaWxzLiAgSW4gdGhlIG1lYW50aW1lIHBlb3BsZSB0aGVyZSBjYW4gdXNlIEFmcmljYS9HYWJvcm9uZS4KKworIyBSVUxFCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJTmFtaWJpYQkxOTk0CW1heAktCVNlcAlTdW4+PTEJMjowMAkxOjAwCVMKK1J1bGUJTmFtaWJpYQkxOTk1CW1heAktCUFwcglTdW4+PTEJMjowMAkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQWZyaWNhL1dpbmRob2VrCTE6MDg6MjQgLQlMTVQJMTg5MiBGZWIgOAorCQkJMTozMAktCVNXQVQJMTkwMyBNYXIJIyBTVyBBZnJpY2EgVGltZQorCQkJMjowMAktCVNBU1QJMTk0MiBTZXAgMjAgMjowMAorCQkJMjowMAkxOjAwCVNBU1QJMTk0MyBNYXIgMjEgMjowMAorCQkJMjowMAktCVNBU1QJMTk5MCBNYXIgMjEgIyBpbmRlcGVuZGVuY2UKKwkJCTI6MDAJLQlDQVQJMTk5NCBBcHIgIDMKKwkJCTE6MDAJTmFtaWJpYQlXQSVzVAorCisjIE5pZ2VyCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9OaWFtZXkJIDA6MDg6MjggLQlMTVQJMTkxMgorCQkJLTE6MDAJLQlXQVQJMTkzNCBGZWIgMjYKKwkJCSAwOjAwCS0JR01UCTE5NjAKKwkJCSAxOjAwCS0JV0FUCisKKyMgTmlnZXJpYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvTGFnb3MJMDoxMzozNiAtCUxNVAkxOTE5IFNlcAorCQkJMTowMAktCVdBVAorCisjIFJldW5pb24KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJSW5kaWFuL1JldW5pb24JMzo0MTo1MiAtCUxNVAkxOTExIEp1bgkjIFNhaW50LURlbmlzCisJCQk0OjAwCS0JUkVUCSMgUmV1bmlvbiBUaW1lCisjCisjIFNjYXR0ZXJlZCBJc2xhbmRzIChJbGVzIEVwYXJzZXMpIGFkbWluaXN0ZXJlZCBmcm9tIFJldW5pb24gYXJlIGFzIGZvbGxvd3MuCisjIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlbSBpcyB0YWtlbiBmcm9tCisjIElsZXMgRXBhcnNlcyAod3d3Lm91dHJlLW1lci5nb3V2LmZyL2RvbXRvbS9pbGUuaHRtLCAxOTk3LTA3LTIyLCBpbiBGcmVuY2g7CisjIG5vIGxvbmdlciBhdmFpbGFibGUgYXMgb2YgMTk5OS0wOC0xNykuCisjIFdlIGhhdmUgbm8gaW5mbyBhYm91dCB0aGVpciB0aW1lIHpvbmUgaGlzdG9yaWVzLgorIworIyBCYXNzYXMgZGEgSW5kaWEgLSB1bmluaGFiaXRlZAorIyBFdXJvcGEgSXNsYW5kIC0gaW5oYWJpdGVkIGZyb20gMTkwNSB0byAxOTEwIGJ5IHR3byBmYW1pbGllcworIyBHbG9yaW9zbyBJcyAtIGluaGFiaXRlZCB1bnRpbCBhdCBsZWFzdCAxOTU4CisjIEp1YW4gZGUgTm92YSAtIHVuaW5oYWJpdGVkCisjIFRyb21lbGluIC0gaW5oYWJpdGVkIHVudGlsIGF0IGxlYXN0IDE5NTgKKworIyBSd2FuZGEKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQWZyaWNhL0tpZ2FsaQkyOjAwOjE2IC0JTE1UCTE5MzUgSnVuCisJCQkyOjAwCS0JQ0FUCisKKyMgU3QgSGVsZW5hCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEF0bGFudGljL1N0X0hlbGVuYQktMDoyMjo0OCAtCUxNVAkxODkwCQkjIEphbWVzdG93bgorCQkJLTA6MjI6NDggLQlKTVQJMTk1MQkjIEphbWVzdG93biBNZWFuIFRpbWUKKwkJCSAwOjAwCS0JR01UCisjIFRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgU3QgSGVsZW5hIHRlcnJpdG9yeSBhcmUgc2ltaWxhcjoKKyMJVHJpc3RhbiBkYSBDdW5oYTogb24gR01ULCBzYXkgV2hpdG1hbiBhbmQgdGhlIENJQQorIwlBc2NlbnNpb246IG9uIEdNVCwgc2F5cyB1c25vMTk5NSBhbmQgdGhlIENJQQorIwlHb3VnaCAoc2NpZW50aWZpYyBzdGF0aW9uIHNpbmNlIDE5NTU7IHNlYWxlcnMgd2ludGVyZWQgcHJldmlvdXNseSk6CisjCQlvbiBHTVQsIHNheXMgdGhlIENJQQorIwlJbmFjY2Vzc2libGUsIE5pZ2h0aW5nYWxlOiBubyBpbmZvcm1hdGlvbiwgYnV0IHByb2JhYmx5IEdNVAorCisjIFNhbyBUb21lIGFuZCBQcmluY2lwZQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvU2FvX1RvbWUJIDA6MjY6NTYgLQlMTVQJMTg4NAorCQkJLTA6MzY6MzIgLQlMTVQJMTkxMgkjIExpc2JvbiBNZWFuIFRpbWUKKwkJCSAwOjAwCS0JR01UCisKKyMgU2VuZWdhbAorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvRGFrYXIJLTE6MDk6NDQgLQlMTVQJMTkxMgorCQkJLTE6MDAJLQlXQVQJMTk0MSBKdW4KKwkJCSAwOjAwCS0JR01UCisKKyMgU2V5Y2hlbGxlcworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlJbmRpYW4vTWFoZQkzOjQxOjQ4IC0JTE1UCTE5MDYgSnVuCSMgVmljdG9yaWEKKwkJCTQ6MDAJLQlTQ1QJIyBTZXljaGVsbGVzIFRpbWUKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMS0wNS0zMCk6CisjIEFsZGFicmEsIEZhcnF1aGFyLCBhbmQgRGVzcm9jaGVzLCBvcmlnaW5hbGx5IGRlcGVuZGVuY2llcyBvZiB0aGUKKyMgU2V5Y2hlbGxlcywgd2VyZSB0cmFuc2ZlcnJlZCB0byB0aGUgQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5CisjIGluIDE5NjUgYW5kIHJldHVybmVkIHRvIFNleWNoZWxsZXMgY29udHJvbCBpbiAxOTc2LiAgV2UgZG9uJ3Qga25vdworIyB3aGV0aGVyIHRoaXMgYWZmZWN0ZWQgdGhlaXIgdGltZSB6b25lLCBzbyBvbWl0IHRoaXMgZm9yIG5vdy4KKyMgUG9zc2libHkgdGhlIGlzbGFuZHMgd2VyZSB1bmluaGFiaXRlZC4KKworIyBTaWVycmEgTGVvbmUKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCisjIFdoaXRtYW4gZ2l2ZXMgTWFyIDMxIC0gQXVnIDMxIGZvciAxOTMxIG9uOyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJU0wJMTkzNQkxOTQyCS0JSnVuCSAxCTA6MDAJMDo0MAlTTFNUCitSdWxlCVNMCTE5MzUJMTk0MgktCU9jdAkgMQkwOjAwCTAJV0FUCitSdWxlCVNMCTE5NTcJMTk2MgktCUp1bgkgMQkwOjAwCTE6MDAJU0xTVAorUnVsZQlTTAkxOTU3CTE5NjIJLQlTZXAJIDEJMDowMAkwCUdNVAorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvRnJlZXRvd24JLTA6NTM6MDAgLQlMTVQJMTg4MgorCQkJLTA6NTM6MDAgLQlGTVQJMTkxMyBKdW4gIyBGcmVldG93biBNZWFuIFRpbWUKKwkJCS0xOjAwCVNMCSVzCTE5NTcKKwkJCSAwOjAwCVNMCSVzCisKKyMgU29tYWxpYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBZnJpY2EvTW9nYWRpc2h1CTM6MDE6MjggLQlMTVQJMTg5MyBOb3YKKwkJCTM6MDAJLQlFQVQJMTkzMQorCQkJMjozMAktCUJFQVQJMTk1NworCQkJMzowMAktCUVBVAorCisjIFNvdXRoIEFmcmljYQorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJU0EJMTk0MgkxOTQzCS0JU2VwCVN1bj49MTUJMjowMAkxOjAwCS0KK1J1bGUJU0EJMTk0MwkxOTQ0CS0JTWFyCVN1bj49MTUJMjowMAkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQWZyaWNhL0pvaGFubmVzYnVyZyAxOjUyOjAwIC0JTE1UCTE4OTIgRmViIDgKKwkJCTE6MzAJLQlTQVNUCTE5MDMgTWFyCisJCQkyOjAwCVNBCVNBU1QKKyMgTWFyaW9uIGFuZCBQcmluY2UgRWR3YXJkIElzCisjIHNjaWVudGlmaWMgc3RhdGlvbiBzaW5jZSAxOTQ3CisjIG5vIGluZm9ybWF0aW9uCisKKyMgU3VkYW4KKyMKKyMgRnJvbSA8YSBocmVmPSJodHRwOi8vd3d3LnN1bmFuZXdzLm5ldC9zbjEzamFuZS5odG1sIj4KKyMgU3VkYW4gTmV3cyBBZ2VuY3kgKDIwMDAtMDEtMTMpCisjIDwvYT4sIGFsc28gcmVwb3J0ZWQgYnkgTWljaGFlbCBEZSBCZXVrZWxhZXItRG9zc2NoZSB2aWEgU3RlZmZlbiBUaG9yc2VuOgorIyBDbG9ja3Mgd2lsbCBiZSBtb3ZlZCBhaGVhZCBmb3IgNjAgbWludXRlcyBhbGwgb3ZlciB0aGUgU3VkYW4gYXMgb2Ygbm9vbgorIyBTYXR1cmRheS4uLi4gIFRoaXMgd2FzIGFubm91bmNlZCBUaHVyc2RheSBieSBDYXJldGFrZXIgU3RhdGUgTWluaXN0ZXIgZm9yCisjIE1hbnBvd2VyIEFiZHVsLVJhaG1hbiBOdXItRWRkaW4uCisjCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlTdWRhbgkxOTcwCW9ubHkJLQlNYXkJIDEJMDowMAkxOjAwCVMKK1J1bGUJU3VkYW4JMTk3MAkxOTg1CS0JT2N0CTE1CTA6MDAJMAktCitSdWxlCVN1ZGFuCTE5NzEJb25seQktCUFwcgkzMAkwOjAwCTE6MDAJUworUnVsZQlTdWRhbgkxOTcyCTE5ODUJLQlBcHIJbGFzdFN1bgkwOjAwCTE6MDAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvS2hhcnRvdW0JMjoxMDowOCAtCUxNVAkxOTMxCisJCQkyOjAwCVN1ZGFuCUNBJXNUCTIwMDAgSmFuIDE1IDEyOjAwCisJCQkzOjAwCS0JRUFUCisKKyMgU3dhemlsYW5kCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9NYmFiYW5lCTI6MDQ6MjQgLQlMTVQJMTkwMyBNYXIKKwkJCTI6MDAJLQlTQVNUCisKKyMgVGFuemFuaWEKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQWZyaWNhL0Rhcl9lc19TYWxhYW0gMjozNzowOCAtCUxNVAkxOTMxCisJCQkzOjAwCS0JRUFUCTE5NDgKKwkJCTI6NDQ6NDUJLQlCRUFVVAkxOTYxCisJCQkzOjAwCS0JRUFUCisKKyMgVG9nbworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvTG9tZQkwOjA0OjUyIC0JTE1UCTE4OTMKKwkJCTA6MDAJLQlHTVQKKworIyBUdW5pc2lhCisKKyMgRnJvbSBHd2lsbGltIExhdyAoMjAwNS0wNC0zMCk6CisjIE15IGNvcnJlc3BvbmRlbnQsIFJpc3RvIE55a2FuZW4sIGhhcyBhbGVydGVkIG1lIHRvIGFub3RoZXIgYWRvcHRpb24gb2YgRFNULAorIyB0aGlzIHRpbWUgaW4gVHVuaXNpYS4gIEFjY29yZGluZyB0byBZYWhvbyBGcmFuY2UgTmV3cworIyA8aHR0cDovL2ZyLm5ld3MueWFob28uY29tLzA1MDQyNi81LzRkdW1rLmh0bWw+LCBpbiBhIHN0b3J5IGF0dHJpYnV0ZWQgdG8gQVAKKyMgYW5kIGRhdGVkIDIwMDUtMDQtMjYsICJUdW5pc2lhIGhhcyBkZWNpZGVkIHRvIGFkdmFuY2UgaXRzIG9mZmljaWFsIHRpbWUgYnkKKyMgb25lIGhvdXIsIHN0YXJ0aW5nIG9uIFN1bmRheSwgTWF5IDEuICBIZW5jZWZvcnRoLCBUdW5pc2lhbiB0aW1lIHdpbGwgYmUKKyMgVVRDKzIgaW5zdGVhZCBvZiBVVEMrMS4gIFRoZSBjaGFuZ2Ugd2lsbCB0YWtlIHBsYWNlIGF0IDIzOjAwIFVUQyBuZXh0CisjIFNhdHVyZGF5LiIgIChNeSB0cmFuc2xhdGlvbikKKyMKKyMgRnJvbSBPc2NhciB2YW4gVmxpam1lbiAoMjAwNS0wNS0wMik6CisjIExhUHJlc3NlLCB0aGUgZmlyc3QgbmF0aW9uYWwgZGFpbHkgbmV3c3BhcGVyIC4uLgorIyA8aHR0cDovL3d3dy5sYXByZXNzZS50bi9hcmNoaXZlcy9hcmNoaXZlczI4MDQwNS9hY3R1YWxpdGVzL2xoZXVyZS5odG1sPgorIyAuLi4gRFNUIGZvciAyMDA1OiBvbjogU3VuIE1heSAxIDBoIHN0YW5kYXJkIHRpbWUsIG9mZjogRnJpIFNlcHQuIDMwLAorIyAxaCBzdGFuZGFyZCB0aW1lLgorIworIyBGcm9tIEF0ZWYgTG91a2lsICgyMDA2LTAzLTI4KToKKyMgVGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIHdpbGwgYmUgdGhlIHNhbWUgZWFjaCB5ZWFyOgorIyBCZWdpbm5pbmcgICAgICA6IHRoZSBsYXN0IFN1bmRheSBvZiBNYXJjaCBhdCAwMjowMAorIyBFbmRpbmcgICAgICAgICA6IHRoZSBsYXN0IFN1bmRheSBvZiBPY3RvYmVyIGF0IDAzOjAwIC4uLgorIyBodHRwOi8vd3d3LnRhcC5pbmZvLnRuL2VuL2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdGFzaz12aWV3JmlkPTExODgmSXRlbWlkPTUwCisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDktMDMtMTYpOgorIyBBY2NvcmRpbmcgdG8gc2V2ZXJhbCBuZXdzIHNvdXJjZXMsIFR1bmlzaWEgd2lsbCBub3Qgb2JzZXJ2ZSBEU1QgdGhpcyB5ZWFyLgorIyAoQXJhYmljKQorIyA8YSBocmVmPSJodHRwOi8vd3d3LmVsYmFzaGF5ZXIuY29tLz9wYWdlPXZpZXduJm5pZD00MjU0NiI+CisjIGh0dHA6Ly93d3cuZWxiYXNoYXllci5jb20vP3BhZ2U9dmlld24mbmlkPTQyNTQ2CisjIDwvYT4KKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5iYWJuZXQubmV0L2tpd2lkZXRhaWwtMTUyOTUuYXNwIj4KKyMgaHR0cDovL3d3dy5iYWJuZXQubmV0L2tpd2lkZXRhaWwtMTUyOTUuYXNwCisjIDwvYT4KKyMKKyMgV2UgaGF2ZSBhbHNvIGNvbmZpcm1lZCB0aGlzIHdpdGggdGhlIFVTIGVtYmFzc3kgaW4gVHVuaXNpYS4KKyMgV2UgaGF2ZSBhIHdyYXAtdXAgYWJvdXQgdGhpcyBvbiB0aGUgZm9sbG93aW5nIHBhZ2U6CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL25ld3MvdGltZS90dW5pc2lhLWNhbmNlbHMtZHN0LTIwMDkuaHRtbCI+CisjIGh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL25ld3MvdGltZS90dW5pc2lhLWNhbmNlbHMtZHN0LTIwMDkuaHRtbAorIyA8L2E+CisKKyMgRnJvbSBBbGV4YW5kZXIgS3JpdmVueXNoZXYgKDIwMDktMDMtMTcpOgorIyBIZXJlIGlzIGEgbGluayB0byBUdW5pcyBBZnJpcXVlIFByZXNzZSBOZXdzIEFnZW5jeQorIworIyBTdGFuZGFyZCB0aW1lIHRvIGJlIGtlcHQgdGhlIHdob2xlIHllYXIgbG9uZyAodGFwLmluZm8udG4pOgorIworIyAoaW4gRW5nbGlzaCkKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy50YXAuaW5mby50bi9lbi9pbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnRhc2s9dmlldyZpZD0yNjgxMyZJdGVtaWQ9MTU3Ij4KKyMgaHR0cDovL3d3dy50YXAuaW5mby50bi9lbi9pbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnRhc2s9dmlldyZpZD0yNjgxMyZJdGVtaWQ9MTU3CisjIDwvYT4KKyMKKyMgKGluIEFyYWJpYykKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy50YXAuaW5mby50bi9hci9pbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnRhc2s9dmlldyZpZD02MTI0MCZJdGVtaWQ9MSI+CisjIGh0dHA6Ly93d3cudGFwLmluZm8udG4vYXIvaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZ0YXNrPXZpZXcmaWQ9NjEyNDAmSXRlbWlkPTEKKyMgPC9hPgorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgyMDA5LS0zLTE4KToKKyMgVGhlIFR1bmlzIEFmcmlxdWUgUHJlc3NlIE5ld3MgQWdlbmN5IG5vdGljZSBjb250YWlucyB0aGlzOiAiVGhpcyBtZWFzdXJlIGlzIGR1ZSB0byB0aGUgZmFjdAorIyB0aGF0IHRoZSBmYXN0aW5nIG1vbnRoIG9mIHJhbWFkYW4gY29pbmNpZGVzIHdpdGggdGhlIHBlcmlvZCBjb25jZXJuZWQgYnkgc3VtbWVyIHRpbWUuCisjIFRoZXJlZm9yZSwgdGhlIHN0YW5kYXJkIHRpbWUgd2lsbCBiZSBrZXB0IHVuY2hhbmdlZCB0aGUgd2hvbGUgeWVhciBsb25nLiIKKyMgU28gZm9yZWdvaW5nIERTVCBzZWVtcyB0byBiZSBhbiBleGNlcHRpb24gKGFsYmVpdCBvbmUgdGhhdCBtYXkgYmUgcmVwZWF0ZWQgaW4gdGhlICBmdXR1cmUpLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlUdW5pc2lhCTE5MzkJb25seQktCUFwcgkxNQkyMzowMHMJMTowMAlTCitSdWxlCVR1bmlzaWEJMTkzOQlvbmx5CS0JTm92CTE4CTIzOjAwcwkwCS0KK1J1bGUJVHVuaXNpYQkxOTQwCW9ubHkJLQlGZWIJMjUJMjM6MDBzCTE6MDAJUworUnVsZQlUdW5pc2lhCTE5NDEJb25seQktCU9jdAkgNgkgMDowMAkwCS0KK1J1bGUJVHVuaXNpYQkxOTQyCW9ubHkJLQlNYXIJIDkJIDA6MDAJMTowMAlTCitSdWxlCVR1bmlzaWEJMTk0Mglvbmx5CS0JTm92CSAyCSAzOjAwCTAJLQorUnVsZQlUdW5pc2lhCTE5NDMJb25seQktCU1hcgkyOQkgMjowMAkxOjAwCVMKK1J1bGUJVHVuaXNpYQkxOTQzCW9ubHkJLQlBcHIJMTcJIDI6MDAJMAktCitSdWxlCVR1bmlzaWEJMTk0Mwlvbmx5CS0JQXByCTI1CSAyOjAwCTE6MDAJUworUnVsZQlUdW5pc2lhCTE5NDMJb25seQktCU9jdAkgNAkgMjowMAkwCS0KK1J1bGUJVHVuaXNpYQkxOTQ0CTE5NDUJLQlBcHIJTW9uPj0xCSAyOjAwCTE6MDAJUworUnVsZQlUdW5pc2lhCTE5NDQJb25seQktCU9jdAkgOAkgMDowMAkwCS0KK1J1bGUJVHVuaXNpYQkxOTQ1CW9ubHkJLQlTZXAJMTYJIDA6MDAJMAktCitSdWxlCVR1bmlzaWEJMTk3Nwlvbmx5CS0JQXByCTMwCSAwOjAwcwkxOjAwCVMKK1J1bGUJVHVuaXNpYQkxOTc3CW9ubHkJLQlTZXAJMjQJIDA6MDBzCTAJLQorUnVsZQlUdW5pc2lhCTE5NzgJb25seQktCU1heQkgMQkgMDowMHMJMTowMAlTCitSdWxlCVR1bmlzaWEJMTk3OAlvbmx5CS0JT2N0CSAxCSAwOjAwcwkwCS0KK1J1bGUJVHVuaXNpYQkxOTg4CW9ubHkJLQlKdW4JIDEJIDA6MDBzCTE6MDAJUworUnVsZQlUdW5pc2lhCTE5ODgJMTk5MAktCVNlcAlsYXN0U3VuCSAwOjAwcwkwCS0KK1J1bGUJVHVuaXNpYQkxOTg5CW9ubHkJLQlNYXIJMjYJIDA6MDBzCTE6MDAJUworUnVsZQlUdW5pc2lhCTE5OTAJb25seQktCU1heQkgMQkgMDowMHMJMTowMAlTCitSdWxlCVR1bmlzaWEJMjAwNQlvbmx5CS0JTWF5CSAxCSAwOjAwcwkxOjAwCVMKK1J1bGUJVHVuaXNpYQkyMDA1CW9ubHkJLQlTZXAJMzAJIDE6MDBzCTAJLQorUnVsZQlUdW5pc2lhCTIwMDYJMjAwOAktCU1hcglsYXN0U3VuCSAyOjAwcwkxOjAwCVMKK1J1bGUJVHVuaXNpYQkyMDA2CTIwMDgJLQlPY3QJbGFzdFN1bgkgMjowMHMJMAktCitSdWxlCVR1bmlzaWEJMjAxMAltYXgJLQlNYXIJbGFzdFN1bgkgMjowMHMJMTowMAlTCitSdWxlCVR1bmlzaWEJMjAxMAltYXgJLQlPY3QJbGFzdFN1bgkgMjowMHMJMAktCisjIFNoYW5rcyAmIFBvdHRlbmdlciBnaXZlIDA6MDk6MjAgZm9yIFBhcmlzIE1lYW4gVGltZTsgZ28gd2l0aCBIb3dzZSdzCisjIG1vcmUgcHJlY2lzZSAwOjA5OjIxLgorIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IHRoZSAxOTExIHN3aXRjaCB3YXMgb24gTWFyIDk7IGdvIHdpdGggSG93c2UncyBNYXIgMTEuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFmcmljYS9UdW5pcwkwOjQwOjQ0IC0JTE1UCTE4ODEgTWF5IDEyCisJCQkwOjA5OjIxCS0JUE1UCTE5MTEgTWFyIDExICAgICMgUGFyaXMgTWVhbiBUaW1lCisJCQkxOjAwCVR1bmlzaWEJQ0Ulc1QKKworIyBVZ2FuZGEKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQWZyaWNhL0thbXBhbGEJMjowOTo0MCAtCUxNVAkxOTI4IEp1bAorCQkJMzowMAktCUVBVAkxOTMwCisJCQkyOjMwCS0JQkVBVAkxOTQ4CisJCQkyOjQ0OjQ1CS0JQkVBVVQJMTk1NworCQkJMzowMAktCUVBVAorCisjIFphbWJpYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvTHVzYWthCTE6NTM6MDggLQlMTVQJMTkwMyBNYXIKKwkJCTI6MDAJLQlDQVQKKworIyBaaW1iYWJ3ZQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBZnJpY2EvSGFyYXJlCTI6MDQ6MTIgLQlMTVQJMTkwMyBNYXIKKwkJCTI6MDAJLQlDQVQKZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9hbnRhcmN0aWNhIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL2FudGFyY3RpY2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUxMWFiMgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9hbnRhcmN0aWNhCkBAIC0wLDAgKzEsMzI5IEBACisjIDxwcmU+CisjIEAoIylhbnRhcmN0aWNhCTguNQorIyBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorIyAyMDA5LTA1LTE3IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgxOTk5LTExLTE1KToKKyMgVG8ga2VlcCB0aGluZ3MgbWFuYWdlYWJsZSwgd2UgbGlzdCBvbmx5IGxvY2F0aW9ucyBvY2N1cGllZCB5ZWFyLXJvdW5kOyBzZWUKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5jb21uYXAuYXEvY29tbmFwL2NvbW5hcC5uc2YvUC9TdGF0aW9ucy8iPgorIyBDT01OQVAgLSBTdGF0aW9ucyBhbmQgQmFzZXMKKyMgPC9hPgorIyBhbmQKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5zcHJpLmNhbS5hYy51ay9ib2IvcGVyaWFudC5odG0iPgorIyBTdW1tYXJ5IG9mIHRoZSBQZXJpLUFudGFyY3RpYyBJc2xhbmRzICgxOTk4LTA3LTIzKQorIyA8L2E+CisjIGZvciBpbmZvcm1hdGlvbi4KKyMgVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIHdlIGhhdmUgbm8gdGltZSB6b25lIGluZm9ybWF0aW9uLgorIworIyBFeGNlcHQgZm9yIHRoZSBGcmVuY2ggZW50cmllcywKKyMgSSBtYWRlIHVwIGFsbCB0aW1lIHpvbmUgYWJicmV2aWF0aW9ucyBtZW50aW9uZWQgaGVyZTsgY29ycmVjdGlvbnMgd2VsY29tZSEKKyMgRk9STUFUIGlzIGB6enonIGFuZCBHTVRPRkYgaXMgMCBmb3IgbG9jYXRpb25zIHdoaWxlIHVuaW5oYWJpdGVkLgorCisjIFRoZXNlIHJ1bGVzIGFyZSBzdG9sZW4gZnJvbSB0aGUgYGV1cm9wZScgZmlsZS4KKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCVJ1c3NBUQkxOTgxCTE5ODQJLQlBcHIJIDEJIDA6MDAJMTowMAlTCitSdWxlCVJ1c3NBUQkxOTgxCTE5ODMJLQlPY3QJIDEJIDA6MDAJMAktCitSdWxlCVJ1c3NBUQkxOTg0CTE5OTEJLQlTZXAJbGFzdFN1bgkgMjowMHMJMAktCitSdWxlCVJ1c3NBUQkxOTg1CTE5OTEJLQlNYXIJbGFzdFN1bgkgMjowMHMJMTowMAlTCitSdWxlCVJ1c3NBUQkxOTkyCW9ubHkJLQlNYXIJbGFzdFNhdAkgMjM6MDAJMTowMAlTCitSdWxlCVJ1c3NBUQkxOTkyCW9ubHkJLQlTZXAJbGFzdFNhdAkgMjM6MDAJMAktCitSdWxlCVJ1c3NBUQkxOTkzCW1heAktCU1hcglsYXN0U3VuCSAyOjAwcwkxOjAwCVMKK1J1bGUJUnVzc0FRCTE5OTMJMTk5NQktCVNlcAlsYXN0U3VuCSAyOjAwcwkwCS0KK1J1bGUJUnVzc0FRCTE5OTYJbWF4CS0JT2N0CWxhc3RTdW4JIDI6MDBzCTAJLQorCisjIFRoZXNlIHJ1bGVzIGFyZSBzdG9sZW4gZnJvbSB0aGUgYHNvdXRoYW1lcmljYScgZmlsZS4KKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUFyZ0FRCTE5NjQJMTk2NgktCU1hcgkgMQkwOjAwCTAJLQorUnVsZQlBcmdBUQkxOTY0CTE5NjYJLQlPY3QJMTUJMDowMAkxOjAwCVMKK1J1bGUJQXJnQVEJMTk2Nwlvbmx5CS0JQXByCSAyCTA6MDAJMAktCitSdWxlCUFyZ0FRCTE5NjcJMTk2OAktCU9jdAlTdW4+PTEJMDowMAkxOjAwCVMKK1J1bGUJQXJnQVEJMTk2OAkxOTY5CS0JQXByCVN1bj49MQkwOjAwCTAJLQorUnVsZQlBcmdBUQkxOTc0CW9ubHkJLQlKYW4JMjMJMDowMAkxOjAwCVMKK1J1bGUJQXJnQVEJMTk3NAlvbmx5CS0JTWF5CSAxCTA6MDAJMAktCitSdWxlCUNoaWxlQVEJMTk3MgkxOTg2CS0JTWFyCVN1bj49OQkzOjAwdQkwCS0KK1J1bGUJQ2hpbGVBUQkxOTc0CTE5ODcJLQlPY3QJU3VuPj05CTQ6MDB1CTE6MDAJUworUnVsZQlDaGlsZUFRCTE5ODcJb25seQktCUFwcgkxMgkzOjAwdQkwCS0KK1J1bGUJQ2hpbGVBUQkxOTg4CTE5ODkJLQlNYXIJU3VuPj05CTM6MDB1CTAJLQorUnVsZQlDaGlsZUFRCTE5ODgJb25seQktCU9jdAlTdW4+PTEJNDowMHUJMTowMAlTCitSdWxlCUNoaWxlQVEJMTk4OQlvbmx5CS0JT2N0CVN1bj49OQk0OjAwdQkxOjAwCVMKK1J1bGUJQ2hpbGVBUQkxOTkwCW9ubHkJLQlNYXIJMTgJMzowMHUJMAktCitSdWxlCUNoaWxlQVEJMTk5MAlvbmx5CS0JU2VwCTE2CTQ6MDB1CTE6MDAJUworUnVsZQlDaGlsZUFRCTE5OTEJMTk5NgktCU1hcglTdW4+PTkJMzowMHUJMAktCitSdWxlCUNoaWxlQVEJMTk5MQkxOTk3CS0JT2N0CVN1bj49OQk0OjAwdQkxOjAwCVMKK1J1bGUJQ2hpbGVBUQkxOTk3CW9ubHkJLQlNYXIJMzAJMzowMHUJMAktCitSdWxlCUNoaWxlQVEJMTk5OAlvbmx5CS0JTWFyCVN1bj49OQkzOjAwdQkwCS0KK1J1bGUJQ2hpbGVBUQkxOTk4CW9ubHkJLQlTZXAJMjcJNDowMHUJMTowMAlTCitSdWxlCUNoaWxlQVEJMTk5OQlvbmx5CS0JQXByCSA0CTM6MDB1CTAJLQorUnVsZQlDaGlsZUFRCTE5OTkJbWF4CS0JT2N0CVN1bj49OQk0OjAwdQkxOjAwCVMKK1J1bGUJQ2hpbGVBUQkyMDAwCW1heAktCU1hcglTdW4+PTkJMzowMHUJMAktCisKKworIyBBcmdlbnRpbmEgLSB5ZWFyLXJvdW5kIGJhc2VzCisjIEJlbGdyYW5vIElJLCBDb25maW4gQ29hc3QsIC03NzAyMjctMDM0MzczNywgc2luY2UgMTk3Mi0wMi0wNQorIyBFc3BlcmFuemEsIFNhbiBNYXJ0aW4gTGFuZCwgLTYzMjMtMDU2NTksIHNpbmNlIDE5NTItMTItMTcKKyMgSnViYW55LCBQb3R0ZXIgUGVuaW5zdWxhLCBLaW5nIEdlb3JnZSBJc2xhbmQsIC02NDE0LTA2MDIzMjAsIHNpbmNlIDE5ODItMDEKKyMgTWFyYW1iaW8sIFNleW1vdXIgSSwgLTY0MTQtMDU2MzcsIHNpbmNlIDE5NjktMTAtMjkKKyMgT3JjYWRhcywgTGF1cmllIEksIC02MDE2LTA0NDQ0LCBzaW5jZSAxOTA0LTAyLTIyCisjIFNhbiBNYXJ0aW4sIERlYmVuaGFtIEksIC02ODA3LTA2NzA4LCBzaW5jZSAxOTUxLTAzLTIxCisjCShleGNlcHQgMTk2MC0wMyAvIDE5NzYtMDMtMjEpCisKKyMgQXVzdHJhbGlhIC0gdGVycml0b3JpZXMKKyMgSGVhcmQgSXNsYW5kLCBNY0RvbmFsZCBJc2xhbmRzICh1bmluaGFiaXRlZCkKKyMJcHJldmlvdXNseSBzZWFsZXJzIGFuZCBzY2llbnRpZmljIHBlcnNvbm5lbCB3aW50ZXJlZAorIwk8YSBocmVmPSJodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDAyMTIwNDIyMjI0NS9odHRwOi8vd3d3LmRzdGMucXV0LmVkdS5hdS9EU1QvbWFyZy9kYXlsaWdodC5odG1sIj4KKyMJTWFyZ2FyZXQgVHVybmVyIHJlcG9ydHMKKyMJPC9hPiAoMTk5OS0wOS0zMCkgdGhhdCB0aGV5J3JlIFVUQys1LCB3aXRoIG5vIERTVDsKKyMJcHJlc3VtYWJseSB0aGlzIGlzIHdoZW4gdGhleSBoYXZlIHZpc2l0b3JzLgorIworIyB5ZWFyLXJvdW5kIGJhc2VzCisjIENhc2V5LCBCYWlsZXkgUGVuaW5zdWxhLCAtNjYxNysxMTAzMiwgc2luY2UgMTk2OQorIyBEYXZpcywgVmVzdGZvbGQgSGlsbHMsIC02ODM1KzA3NzU5LCBzaW5jZSAxOTU3LTAxLTEzCisjCShleGNlcHQgMTk2NC0xMSAtIDE5NjktMDIpCisjIE1hd3NvbiwgSG9sbWUgQmF5LCAtNjczNiswNjI1Mywgc2luY2UgMTk1NC0wMi0xMworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbnRhcmN0aWNhL0Nhc2V5CTAJLQl6enoJMTk2OQorCQkJODowMAktCVdTVAkjIFdlc3Rlcm4gKEF1cykgU3RhbmRhcmQgVGltZQorWm9uZSBBbnRhcmN0aWNhL0RhdmlzCTAJLQl6enoJMTk1NyBKYW4gMTMKKwkJCTc6MDAJLQlEQVZUCTE5NjQgTm92ICMgRGF2aXMgVGltZQorCQkJMAktCXp6egkxOTY5IEZlYgorCQkJNzowMAktCURBVlQKK1pvbmUgQW50YXJjdGljYS9NYXdzb24JMAktCXp6egkxOTU0IEZlYiAxMworCQkJNjowMAktCU1BV1QJIyBNYXdzb24gVGltZQorIyBSZWZlcmVuY2VzOgorIyA8YSBocmVmPSJodHRwOi8vd3d3LmFudGRpdi5nb3YuYXUvYWFkL2V4b3Avc2ZvL2Nhc2V5L2Nhc2V5X2F3cy5odG1sIj4KKyMgQ2FzZXkgV2VhdGhlciAoMTk5OC0wMi0yNikKKyMgPC9hPgorIyA8YSBocmVmPSJodHRwOi8vd3d3LmFudGRpdi5nb3YuYXUvYWFkL2V4b3Avc2ZvL2RhdmlzL3ZpZGVvLmh0bWwiPgorIyBEYXZpcyBTdGF0aW9uLCBBbnRhcmN0aWNhICgxOTk4LTAyLTI2KQorIyA8L2E+CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuYW50ZGl2Lmdvdi5hdS9hYWQvZXhvcC9zZm8vbWF3c29uL3ZpZGVvLmh0bWwiPgorIyBNYXdzb24gU3RhdGlvbiwgQW50YXJjdGljYSAoMTk5OC0wMi0yNSkKKyMgPC9hPgorCisjIEJyYXppbCAtIHllYXItcm91bmQgYmFzZQorIyBDb21hbmRhbnRlIEZlcnJheiwgS2luZyBHZW9yZ2UgSXNsYW5kLCAtNjIwNSswNTgyNCwgc2luY2UgMTk4My80CisKKyMgQ2hpbGUgLSB5ZWFyLXJvdW5kIGJhc2VzIGFuZCB0b3ducworIyBFc2N1ZGVybywgU291dGggU2hldGxhbmQgSXMsIC02MjExNTctMDU4NTczNSwgc2luY2UgMTk5NAorIyBQcmVzaWRlbnRlIEVkdWFkcm8gRnJlaSwgS2luZyBHZW9yZ2UgSXNsYW5kLCAtNjIxNC0wNTg0OCwgc2luY2UgMTk2OS0wMy0wNworIyBHZW5lcmFsIEJlcm5hcmRvIE8nSGlnZ2lucywgQW50YXJjdGljIFBlbmluc3VsYSwgLTYzMTktMDU3MDQsIHNpbmNlIDE5NDgtMDIKKyMgQ2FwaXRhbiBBcnR1cm8gUHJhdCwgLTYyMzAtMDU5NDEKKyMgVmlsbGEgTGFzIEVzdHJlbGxhcyAoYSB0b3duKSwgYXJvdW5kIHRoZSBGcmVpIGJhc2UsIHNpbmNlIDE5ODQtMDQtMDkKKyMgVGhlc2UgbG9jYXRpb25zIGhhdmUgYWx3YXlzIHVzZWQgU2FudGlhZ28gdGltZTsgdXNlIFRaPSdBbWVyaWNhL1NhbnRpYWdvJy4KKworIyBDaGluYSAtIHllYXItcm91bmQgYmFzZXMKKyMgR3JlYXQgV2FsbCwgS2luZyBHZW9yZ2UgSXNsYW5kLCAtNjIxMy0wNTg1OCwgc2luY2UgMTk4NS0wMi0yMAorIyBaaG9uZ3NoYW4sIExhcnNlbWFubiBIaWxscywgUHJ5ZHogQmF5LCAtNjkyMiswNzYyMywgc2luY2UgMTk4OS0wMi0yNgorCisjIEZyYW5jZSAtIHllYXItcm91bmQgYmFzZXMKKyMKKyMgRnJvbSBBbnRvaW5lIExlY2EgKDE5OTctMDEtMjApOgorIyBUaW1lIGRhdGEgYXJlIGZyb20gTmljb2xlIFBhaWxsZWF1IGF0IHRoZSBJRlJUUAorIyAoRnJlbmNoIEluc3RpdHV0ZSBmb3IgUG9sYXIgUmVzZWFyY2ggYW5kIFRlY2hub2xvZ3kpLgorIyBTaGUgY29uZmlybXMgdGhhdCBGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXMgYW5kIFRlcnJlIEFkZWxpZSBiYXNlcworIyBkb24ndCBvYnNlcnZlIGRheWxpZ2h0IHNhdmluZyB0aW1lLCBldmVuIGlmIFRlcnJlIEFkZWxpZSBzdXBwbGllcyBjYW1lCisjIGZyb20gVGFzbWFuaWEuCisjCisjIEZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyB3aXRoIHllYXItcm91bmQgaW5oYWJpdGFudHMKKyMKKyMgTWFydGluLWRlLVZpdmllcyBCYXNlLCBBbXN0ZXJkYW0gSXNsYW5kLCAtMzc0MTA1KzA3NzMxNTUsIHNpbmNlIDE5NTAKKyMgQWxmcmVkLUZhdXJlIEJhc2UsIENyb3pldCBJc2xhbmRzLCAtNDYyNTUxKzA1MTUxNTIsIHNpbmNlIDE5NjQKKyMgUG9ydC1hdXgtRnJhbmNhaXMsIEtlcmd1ZWxlbiBJc2xhbmRzLCAtNDkyMTEwKzA3MDEzMDMsIHNpbmNlIDE5NTE7CisjCXdoYWxpbmcgJiBzZWFsaW5nIHN0YXRpb24gb3BlcmF0ZWQgMTkwOC8xOTE0LCAxOTIwLzE5MjksIGFuZCAxOTUxLzE5NTYKKyMKKyMgU3QgUGF1bCBJc2xhbmQgLSBuZWFyIEFtc3RlcmRhbSwgdW5pbmhhYml0ZWQKKyMJZmlzaGluZyBzdGF0aW9ucyBvcGVyYXRlZCB2YXJpb3VzbHkgMTgxOS8xOTMxCisjCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEluZGlhbi9LZXJndWVsZW4JMAktCXp6egkxOTUwCSMgUG9ydC1hdXgtRnJhbmNhaXMKKwkJCTU6MDAJLQlURlQJIyBJU08gY29kZSBURiBUaW1lCisjCisjIHllYXItcm91bmQgYmFzZSBpbiB0aGUgbWFpbiBjb250aW5lbnQKKyMgRHVtb250LWQnVXJ2aWxsZSwgSWxlIGRlcyBQZXRyZWxzLCAtNjY0MCsxNDAwMSwgc2luY2UgMTk1Ni0xMQorIworIyBBbm90aGVyIGJhc2UgYXQgUG9ydC1NYXJ0aW4sIDUwa20gZWFzdCwgYmVnYW4gb3BlcmF0aW9uIGluIDE5NDcuCisjIEl0IHdhcyBkZXN0cm95ZWQgYnkgZmlyZSBvbiAxOTUyLTAxLTE0LgorIworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbnRhcmN0aWNhL0R1bW9udERVcnZpbGxlIDAgLQl6enoJMTk0NworCQkJMTA6MDAJLQlQTVQJMTk1MiBKYW4gMTQgIyBQb3J0LU1hcnRpbiBUaW1lCisJCQkwCS0Jenp6CTE5NTYgTm92CisJCQkxMDowMAktCUREVVQJIyBEdW1vbnQtZCdVcnZpbGxlIFRpbWUKKyMgUmVmZXJlbmNlOgorIyA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0R1bW9udF9kJ1VydmlsbGVfU3RhdGlvbiI+CisjIER1bW9udCBkJ1VydmlsbGUgU3RhdGlvbiAoMjAwNS0xMi0wNSkKKyMgPC9hPgorCisjIEdlcm1hbnkgLSB5ZWFyLXJvdW5kIGJhc2UKKyMgR2Vvcmcgdm9uIE5ldW1heWVyLCAtNzAzOS0wMDgxNQorCisjIEluZGlhIC0geWVhci1yb3VuZCBiYXNlCisjIERha3NoaW4gR2FuZ290cmksIC03MDA1KzAxMjAwCisKKyMgSmFwYW4gLSB5ZWFyLXJvdW5kIGJhc2VzCisjIERvbWUgRnVqaSwgLTc3MTkrMDM5NDIKKyMgU3lvd2EsIC02OTAwMjIrMDM5MzUyNAorIworIyBGcm9tIEhpZGV5dWtpIFN1enVraSAoMTk5OS0wMi0wNik6CisjIEluIGFsbCBKYXBhbmVzZSBzdGF0aW9ucywgKzAzMDAgaXMgdXNlZCBhcyB0aGUgc3RhbmRhcmQgdGltZS4KKyMKKyMgU3lvd2Egc3RhdGlvbiwgd2hpY2ggaXMgdGhlIGZpcnN0IGFudGFyY3RpYyBzdGF0aW9uIG9mIEphcGFuLAorIyB3YXMgZXN0YWJsaXNoZWQgb24gMTk1Ny0wMS0yOS4gIFNpbmNlIFN5b3dhIHN0YXRpb24gaXMgc3RpbGwgdGhlIG1haW4KKyMgc3RhdGlvbiBvZiBKYXBhbiwgaXQncyBhcHByb3ByaWF0ZSBmb3IgdGhlIHByaW5jaXBhbCBsb2NhdGlvbi4KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW50YXJjdGljYS9TeW93YQkwCS0Jenp6CTE5NTcgSmFuIDI5CisJCQkzOjAwCS0JU1lPVAkjIFN5b3dhIFRpbWUKKyMgU2VlOgorIyA8YSBocmVmPSJodHRwOi8vd3d3Lm5pcHIuYWMuanAvZW5nbGlzaC9hcmEwMS5odG1sIj4KKyMgTklQUiBBbnRhcmN0aWMgUmVzZWFyY2ggQWN0aXZpdGllcyAoMTk5OS0wOC0xNykKKyMgPC9hPgorCisjIFMgS29yZWEgLSB5ZWFyLXJvdW5kIGJhc2UKKyMgS2luZyBTZWpvbmcsIEtpbmcgR2VvcmdlIElzbGFuZCwgLTYyMTMtMDU4NDcsIHNpbmNlIDE5ODgKKworIyBOZXcgWmVhbGFuZCAtIGNsYWltcworIyBCYWxsZW55IElzbGFuZHMgKG5ldmVyIGluaGFiaXRlZCkKKyMgU2NvdHQgSXNsYW5kIChuZXZlciBpbmhhYml0ZWQpCisjCisjIHllYXItcm91bmQgYmFzZQorIyBTY290dCwgUm9zcyBJc2xhbmQsIHNpbmNlIDE5NTctMDEsIGlzIGxpa2UgQW50YXJjdGljYS9NY011cmRvLgorIworIyBUaGVzZSBydWxlcyBmb3IgTmV3IFplYWxhbmQgYXJlIHN0b2xlbiBmcm9tIHRoZSBgYXVzdHJhbGFzaWEnIGZpbGUuCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlOWkFRCTE5NzQJb25seQktCU5vdgkgMwkyOjAwcwkxOjAwCUQKK1J1bGUJTlpBUQkxOTc1CTE5ODgJLQlPY3QJbGFzdFN1bgkyOjAwcwkxOjAwCUQKK1J1bGUJTlpBUQkxOTg5CW9ubHkJLQlPY3QJIDgJMjowMHMJMTowMAlECitSdWxlCU5aQVEJMTk5MAkyMDA2CS0JT2N0CVN1bj49MQkyOjAwcwkxOjAwCUQKK1J1bGUJTlpBUQkxOTc1CW9ubHkJLQlGZWIJMjMJMjowMHMJMAlTCitSdWxlCU5aQVEJMTk3NgkxOTg5CS0JTWFyCVN1bj49MQkyOjAwcwkwCVMKK1J1bGUJTlpBUQkxOTkwCTIwMDcJLQlNYXIJU3VuPj0xNQkyOjAwcwkwCVMKK1J1bGUJTlpBUQkyMDA3CW1heAktCVNlcAlsYXN0U3VuCTI6MDBzCTE6MDAJRAorUnVsZQlOWkFRCTIwMDgJbWF4CS0JQXByCVN1bj49MQkyOjAwcwkwCVMKKworIyBOb3J3YXkgLSB0ZXJyaXRvcmllcworIyBCb3V2ZXQgKG5ldmVyIGluaGFiaXRlZCkKKyMKKyMgY2xhaW1zCisjIFBldGVyIEkgSXNsYW5kIChuZXZlciBpbmhhYml0ZWQpCisKKyMgUG9sYW5kIC0geWVhci1yb3VuZCBiYXNlCisjIEFyY3Rvd3NraSwgS2luZyBHZW9yZ2UgSXNsYW5kLCAtNjIwOTQ1LTA1ODI3NDUsIHNpbmNlIDE5NzcKKworIyBSdXNzaWEgLSB5ZWFyLXJvdW5kIGJhc2VzCisjIEJlbGxpbmdzaGF1c2VuLCBLaW5nIEdlb3JnZSBJc2xhbmQsIC02MjExNTktMDU4NTMzNywgc2luY2UgMTk2OC0wMi0yMgorIyBNaXJueSwgRGF2aXMgY29hc3QsIC02NjMzKzA5MzAxLCBzaW5jZSAxOTU2LTAyCisjIE1vbG9kZXpobmF5YSwgQWxhc2hleWV2IEJheSwgLTY3NDArMDQ1NTEsCisjCXllYXItcm91bmQgZnJvbSAxOTYyLTAyIHRvIDE5OTktMDctMDEKKyMgTm92b2xhemFyZXZza2F5YSwgUXVlZW4gTWF1ZCBMYW5kLCAtNzA0NiswMTE1MCwKKyMJeWVhci1yb3VuZCBmcm9tIDE5NjAvNjEgdG8gMTk5MgorCisjIFZvc3Rvaywgc2luY2UgMTk1Ny0xMi0xNiwgdGVtcG9yYXJpbHkgY2xvc2VkIDE5OTQtMDIvMTk5NC0xMQorIyA8YSBocmVmPSJodHRwOi8vcXVlc3QuYXJjLm5hc2EuZ292L2FudGFyY3RpY2EvUUEvY29tcHV0ZXJzL0RpcmVjdGlvbnMsVGltZSxaSVAiPgorIyBGcm9tIENyYWlnIE11bmRlbGwgKDE5OTQtMTItMTUpPC9hPjoKKyMgVm9zdG9rLCB3aGljaCBpcyBvbmUgb2YgdGhlIFJ1c3NpYW4gc3RhdGlvbnMsIGlzIHNldCBvbiB0aGUgc2FtZQorIyB0aW1lIGFzIE1vc2NvdywgUnVzc2lhLgorIworIyBGcm9tIExlZSBIb3R6ICgyMDAxLTAzLTA4KToKKyMgSSBxdWVyaWVkIHRoZSBmb2xrcyBhdCBDb2x1bWJpYSB3aG8gc3BlbnQgdGhlIHN1bW1lciBhdCBWb3N0b2sgYW5kIHRoaXMgaXMKKyMgd2hhdCB0aGV5IGhhZCB0byBzYXkgYWJvdXQgdGltZSB0aGVyZToKKyMgYGBpbiB0aGUgVVMgQ2FtcCAoRWFzdCBDYW1wKSB3ZSBoYXZlIGJlZW4gb24gTmV3IFplYWxhbmQgKE1jTXVyZG8pCisjIHRpbWUsIHdoaWNoIGlzIDEyIGhvdXJzIGFoZWFkIG9mIEdNVC4gVGhlIFJ1c3NpYW4gU3RhdGlvbiBWb3N0b2sgd2FzCisjIDYgaG91cnMgYmVoaW5kIHRoYXQgKGFsdGhvdWdoIG9ubHkgMiBtaWxlcyBhd2F5LCBpLmUuIDYgaG91cnMgYWhlYWQKKyMgb2YgR01UKS4gVGhpcyBpcyBhIHRpbWUgem9uZSBJIHRoaW5rIHR3byBob3VycyBlYXN0IG9mIE1vc2Nvdy4gVGhlCisjIG5hdHVyYWwgdGltZSB6b25lIGlzIGluIGJldHdlZW4gdGhlIHR3bzogOCBob3VycyBhaGVhZCBvZiBHTVQuJycKKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMS0wNS0wNCk6CisjIFRoaXMgc2VlbXMgdG8gYmUgaG9wZWxlc3NseSBjb25mdXNpbmcsIHNvIEkgYXNrZWQgTGVlIEhvdHogYWJvdXQgaXQKKyMgaW4gcGVyc29uLiAgSGUgc2FpZCB0aGF0IHNvbWUgQW50YXJ0aWMgbG9jYXRpb25zIHNldCB0aGVpciBsb2NhbAorIyB0aW1lIHNvIHRoYXQgbm9vbiBpcyB0aGUgd2FybWVzdCBwYXJ0IG9mIHRoZSBkYXksIGFuZCB0aGF0IHRoaXMKKyMgY2hhbmdlcyBkdXJpbmcgdGhlIHllYXIgYW5kIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gbWVhbgorIyBzb2xhciBub29uLiAgU28gdGhlIFZvc3RvayB0aW1lIG1pZ2h0IGhhdmUgYmVlbiB3aGF0ZXZlciB0aGUgY2xvY2tzCisjIGhhcHBlbmVkIHRvIGJlIGR1cmluZyB0aGVpciB2aXNpdC4gIFNvIHdlIHN0aWxsIGRvbid0IHJlYWxseSBrbm93IHdoYXQgdGltZQorIyBpdCBpcyBhdCBWb3N0b2suICBCdXQgd2UnbGwgZ3Vlc3MgVVRDKzYuCisjCitab25lIEFudGFyY3RpY2EvVm9zdG9rCTAJLQl6enoJMTk1NyBEZWMgMTYKKwkJCTY6MDAJLQlWT1NUCSMgVm9zdG9rIHRpbWUKKworIyBTIEFmcmljYSAtIHllYXItcm91bmQgYmFzZXMKKyMgTWFyaW9uIElzbGFuZCwgLTQ2NTMrMDM3NTIKKyMgU2FuYWUsIC03MTQxLTAwMjUwCisKKyMgVUsKKyMKKyMgQnJpdGlzaCBBbnRhcmN0aWMgVGVycml0b3JpZXMgKEJBVCkgY2xhaW1zCisjIFNvdXRoIE9ya25leSBJc2xhbmRzCisjCXNjaWVudGlmaWMgc3RhdGlvbiBmcm9tIDE5MDMKKyMJd2hhbGluZyBzdGF0aW9uIGF0IFNpZ255IEkgMTkyMC8xOTI2CisjIFNvdXRoIFNoZXRsYW5kIElzbGFuZHMKKyMKKyMgeWVhci1yb3VuZCBiYXNlcworIyBCaXJkIElzbGFuZCwgU291dGggR2VvcmdpYSwgLTU0MDAtMDM4MDMsIHNpbmNlIDE5ODMKKyMgRGVjZXB0aW9uIElzbGFuZCwgLTYyNTktMDYwMzQsIHdoYWxpbmcgc3RhdGlvbiAxOTEyLzE5MzEsCisjCXNjaWVudGlmaWMgc3RhdGlvbiAxOTQzLzE5NjcsCisjCXByZXZpb3VzbHkgc2VhbGVycyBhbmQgYSBzY2llbnRpZmljIGV4cGVkaXRpb24gd2ludGVyZWQgYnkgYWNjaWRlbnQsCisjCWFuZCBhIGdhcnJpc29uIHdhcyBkZXBsb3llZCBicmllZmx5CisjIEhhbGxleSwgQ29hdGVzIExhbmQsIC03NTM1LTAyNjA0LCBzaW5jZSAxOTU2LTAxLTA2CisjCUhhbGxleSBpcyBvbiBhIG1vdmluZyBpY2Ugc2hlbGYgYW5kIGlzIHBlcmlvZGljYWxseSByZWxvY2F0ZWQKKyMJc28gdGhhdCBpdCBpcyBuZXZlciBtb3JlIHRoYW4gMTBrbSBmcm9tIGl0cyBub21pbmFsIGxvY2F0aW9uLgorIyBSb3RoZXJhLCBBZGVsYWlkZSBJc2xhbmQsIC02NzM0LTY4MDgsIHNpbmNlIDE5NzYtMTItMDEKKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMi0xMC0yMikKKyMgPGh0dHA6Ly93ZWJleGhpYml0cy5vcmcvZGF5bGlnaHRzYXZpbmcvZy5odG1sPiBzYXlzIFJvdGhlcmEgaXMgLTAzIGFsbCB5ZWFyLgorIworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbnRhcmN0aWNhL1JvdGhlcmEJMAktCXp6egkxOTc2IERlYyAgMQorCQkJLTM6MDAJLQlST1RUCSMgUm90aGVyYSB0aW1lCisKKyMgVXJ1Z3VheSAtIHllYXIgcm91bmQgYmFzZQorIyBBcnRpZ2FzLCBLaW5nIEdlb3JnZSBJc2xhbmQsIC02MjExMDQtMDU4NTEwNworCisjIFVTQSAtIHllYXItcm91bmQgYmFzZXMKKyMKKyMgUGFsbWVyLCBBbnZlcnMgSXNsYW5kLCBzaW5jZSAxOTY1IChtb3ZlZCAyIG1pbGVzIGluIDE5NjgpCisjCisjIEZyb20gRXRoYW4gRGlja3MgKDE5OTYtMTAtMDYpOgorIyBJdCBrZWVwcyB0aGUgc2FtZSB0aW1lIGFzIFB1bnRhIEFyZW5hcywgQ2hpbGUsIGJlY2F1c2UsIGp1c3QgbGlrZSB1cworIyBhbmQgdGhlIFNvdXRoIFBvbGUsIHRoYXQncyB0aGUgb3RoZXIgZW5kIG9mIHRoZWlyIHN1cHBseSBsaW5lLi4uLgorIyBJIHZlcmlmaWVkIHdpdGggc29tZW9uZSB3aG8gd2FzIHRoZXJlIHRoYXQgc2luY2UgMTk4MCwKKyMgUGFsbWVyIGhhcyBmb2xsb3dlZCBDaGlsZS4gIFByaW9yIHRvIHRoYXQsIGJlZm9yZSB0aGUgRmFsa2xhbmRzIFdhciwKKyMgUGFsbWVyIHVzZWQgdG8gYmUgc3VwcGxpZWQgZnJvbSBBcmdlbnRpbmEuCisjCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFudGFyY3RpY2EvUGFsbWVyCTAJLQl6enoJMTk2NQorCQkJLTQ6MDAJQXJnQVEJQVIlc1QJMTk2OSBPY3QgNQorCQkJLTM6MDAJQXJnQVEJQVIlc1QJMTk4MiBNYXkKKwkJCS00OjAwCUNoaWxlQVEJQ0wlc1QKKyMKKyMKKyMgTWNNdXJkbywgUm9zcyBJc2xhbmQsIHNpbmNlIDE5NTUtMTIKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW50YXJjdGljYS9NY011cmRvCTAJLQl6enoJMTk1NgorCQkJMTI6MDAJTlpBUQlOWiVzVAorIworIyBBbXVuZHNlbi1TY290dCwgU291dGggUG9sZSwgY29udGludW91c2x5IG9jY3VwaWVkIHNpbmNlIDE5NTYtMTEtMjAKKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMTk5Ni0wOS0wMyk6CisjIE5vcm1hbGx5IGl0IHdvdWxkbid0IGhhdmUgYSBzZXBhcmF0ZSBlbnRyeSwgc2luY2UgaXQncyBsaWtlIHRoZQorIyBsYXJnZXIgQW50YXJjdGljYS9NY011cmRvIHNpbmNlIDE5NzAsIGJ1dCBpdCdzIHRvbyBmYW1vdXMgdG8gb21pdC4KKyMKKyMgRnJvbSBDaHJpcyBDYXJyaWVyICgxOTk2LTA2LTI3KToKKyMgU2lwbGUsIHRoZSBmaXJzdCBjb21tYW5kZXIgb2YgdGhlIFNvdXRoIFBvbGUgc3RhdGlvbiwKKyMgc3RhdGVkIHRoYXQgaGUgd291bGQgaGF2ZSBsaWtlZCB0byBoYXZlIGtlcHQgR01UIGF0IHRoZSBzdGF0aW9uLAorIyBidXQgdGhhdCBoZSBmb3VuZCBpdCBtb3JlIGNvbnZlbmllbnQgdG8ga2VlcCBHTVQrMTIKKyMgYXMgc3VwcGxpZXMgZm9yIHRoZSBzdGF0aW9uIHdlcmUgY29taW5nIGZyb20gTWNNdXJkbyBTb3VuZCwKKyMgd2hpY2ggd2FzIG9uIEdNVCsxMiBiZWNhdXNlIE5ldyBaZWFsYW5kIHdhcyBvbiBHTVQrMTIgYWxsIHllYXIKKyMgYXQgdGhhdCB0aW1lICgxOTU3KS4gIChTb3VyY2U6IFNpcGxlJ3MgYm9vayA5MCBkZWdyZWVzIFNPVVRILikKKyMKKyMgRnJvbSBTdXNhbiBTbWl0aAorIyBodHRwOi8vd3d3LmN5YmVydG91cnMuY29tL3docy9wb2xlMTAuaHRtbAorIyAoMTk5NS0xMS0xMyAxNjoyNDo1NiArMTMwMCwgbm8gbG9uZ2VyIGF2YWlsYWJsZSk6CisjIFdlIHVzZSB0aGUgc2FtZSB0aW1lIGFzIE1jTXVyZG8gZG9lcy4KKyMgQW5kIHRoZXkgdXNlIHRoZSBzYW1lIHRpbWUgYXMgQ2hyaXN0Y2h1cmNoLCBOWiBkb2VzLi4uLgorIyBPbmUgbGFzdCBxdWlyayBhYm91dCBTb3V0aCBQb2xlIHRpbWUuCisjIEFsbCB0aGUgZWxlY3RyaWMgY2xvY2tzIGFyZSB1c3VhbGx5IHdyb25nLgorIyBTb21ldGhpbmcgYWJvdXQgdGhlIGdlbmVyYXRvcnMgcnVubmluZyBhdCA2MC4xaGVydHogb3Igc29tZXRoaW5nCisjIG1ha2VzIGFsbCBvZiB0aGUgY2xvY2tzIHJ1biBmYXN0LiAgU28gZXZlcnkgY291cGxlIG9mIGRheXMsCisjIHdlIGhhdmUgdG8gZ28gYXJvdW5kIGFuZCBzZXQgdGhlbSBiYWNrIDUgbWludXRlcyBvciBzby4KKyMgTWF5YmUgaWYgd2UgbGV0IHRoZW0gcnVuIGZhc3QgYWxsIG9mIHRoZSB0aW1lLCB3ZSdkIGdldCB0byBsZWF2ZSBoZXJlIHNvb25lciEhCisjCitMaW5rCUFudGFyY3RpY2EvTWNNdXJkbwlBbnRhcmN0aWNhL1NvdXRoX1BvbGUKZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9hc2lhIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL2FzaWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyY2EzOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9hc2lhCkBAIC0wLDAgKzEsMjE5NyBAQAorIyA8cHJlPgorIyBAKCMpYXNpYQk4LjM0CisjIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiwgc28gY2xhcmlmaWVkIGFzIG9mCisjIDIwMDktMDUtMTcgYnkgQXJ0aHVyIERhdmlkIE9sc29uLgorCisjIFRoaXMgZGF0YSBpcyBieSBubyBtZWFucyBhdXRob3JpdGF0aXZlOyBpZiB5b3UgdGhpbmsgeW91IGtub3cgYmV0dGVyLAorIyBnbyBhaGVhZCBhbmQgZWRpdCB0aGUgZmlsZSAoYW5kIHBsZWFzZSBzZW5kIGFueSBjaGFuZ2VzIHRvCisjIHR6QGVsc2llLm5jaS5uaWguZ292IGZvciBnZW5lcmFsIHVzZSBpbiB0aGUgZnV0dXJlKS4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMKKyMgQSBnb29kIHNvdXJjZSBmb3IgdGltZSB6b25lIGhpc3RvcmljYWwgZGF0YSBvdXRzaWRlIHRoZSBVLlMuIGlzCisjIFRob21hcyBHLiBTaGFua3MgYW5kIFJpcXVlIFBvdHRlbmdlciwgVGhlIEludGVybmF0aW9uYWwgQXRsYXMgKDZ0aCBlZGl0aW9uKSwKKyMgU2FuIERpZWdvOiBBQ1MgUHVibGljYXRpb25zLCBJbmMuICgyMDAzKS4KKyMKKyMgR3dpbGxpbSBMYXcgd3JpdGVzIHRoYXQgYSBnb29kIHNvdXJjZQorIyBmb3IgcmVjZW50IHRpbWUgem9uZSBkYXRhIGlzIHRoZSBJbnRlcm5hdGlvbmFsIEFpciBUcmFuc3BvcnQKKyMgQXNzb2NpYXRpb24ncyBTdGFuZGFyZCBTY2hlZHVsZXMgSW5mb3JtYXRpb24gTWFudWFsIChJQVRBIFNTSU0pLAorIyBwdWJsaXNoZWQgc2VtaWFubnVhbGx5LiAgTGF3IHNlbnQgaW4gc2V2ZXJhbCBoZWxwZnVsIHN1bW1hcmllcworIyBvZiB0aGUgSUFUQSdzIGRhdGEgYWZ0ZXIgMTk5MC4KKyMKKyMgRXhjZXB0IHdoZXJlIG90aGVyd2lzZSBub3RlZCwgU2hhbmtzICYgUG90dGVuZ2VyIGlzIHRoZSBzb3VyY2UgZm9yCisjIGVudHJpZXMgdGhyb3VnaCAxOTkwLCBhbmQgSUFUQSBTU0lNIGlzIHRoZSBzb3VyY2UgZm9yIGVudHJpZXMgYWZ0ZXJ3YXJkcy4KKyMKKyMgQW5vdGhlciBzb3VyY2Ugb2NjYXNpb25hbGx5IHVzZWQgaXMgRWR3YXJkIFcuIFdoaXRtYW4sIFdvcmxkIFRpbWUgRGlmZmVyZW5jZXMsCisjIFdoaXRtYW4gUHVibGlzaGluZyBDbywgMiBOaWFnYXJhIEF2LCBFYWxpbmcsIExvbmRvbiAodW5kYXRlZCksIHdoaWNoCisjIEkgZm91bmQgaW4gdGhlIFVDTEEgbGlicmFyeS4KKyMKKyMgQSByZWxpYWJsZSBhbmQgZW50ZXJ0YWluaW5nIHNvdXJjZSBhYm91dCB0aW1lIHpvbmVzIGlzCisjIERlcmVrIEhvd3NlLCBHcmVlbndpY2ggdGltZSBhbmQgbG9uZ2l0dWRlLCBQaGlsaXAgV2lsc29uIFB1Ymxpc2hlcnMgKDE5OTcpLgorIworIyBJIGludmVudGVkIHRoZSBhYmJyZXZpYXRpb25zIG1hcmtlZCBgKicgaW4gdGhlIGZvbGxvd2luZyB0YWJsZTsKKyMgdGhlIHJlc3QgYXJlIGZyb20gZWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUsIG9yIGZyb20gb3RoZXIgc291cmNlcy4KKyMgQ29ycmVjdGlvbnMgYXJlIHdlbGNvbWUhCisjCSAgICAgc3RkICBkc3QKKyMJICAgICBMTVQJTG9jYWwgTWVhbiBUaW1lCisjCTI6MDAgRUVUICBFRVNUCUVhc3Rlcm4gRXVyb3BlYW4gVGltZQorIwkyOjAwIElTVCAgSURUCUlzcmFlbAorIwkzOjAwIEFTVCAgQURUCUFyYWJpYSoKKyMJMzozMCBJUlNUIElSRFQJSXJhbgorIwk0OjAwIEdTVAlHdWxmKgorIwk1OjMwIElTVAlJbmRpYQorIwk3OjAwIElDVAlJbmRvY2hpbmEqCisjCTc6MDAgV0lUCXdlc3QgSW5kb25lc2lhCisjCTg6MDAgQ0lUCWNlbnRyYWwgSW5kb25lc2lhCisjCTg6MDAgQ1NUCUNoaW5hCisjCTk6MDAgQ0pUCUNlbnRyYWwgSmFwYW5lc2UgVGltZSAoMTg5Ni8xOTM3KSoKKyMJOTowMCBFSVQJZWFzdCBJbmRvbmVzaWEKKyMJOTowMCBKU1QgIEpEVAlKYXBhbgorIwk5OjAwIEtTVCAgS0RUCUtvcmVhCisjCTk6MzAgQ1NUCShBdXN0cmFsaWFuKSBDZW50cmFsIFN0YW5kYXJkIFRpbWUKKyMKKyMgU2VlIHRoZSBgZXVyb3BlJyBmaWxlIGZvciBSdXNzaWEgYW5kIFR1cmtleSBpbiBBc2lhLgorCisjIEZyb20gR3V5IEhhcnJpczoKKyMgSW5jb3Jwb3JhdGVzIGRhdGEgZm9yIFNpbmdhcG9yZSBmcm9tIFJvYmVydCBFbHonIGFzaWEgMS4xLCBhcyB3ZWxsIGFzCisjIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZnJvbSBUb20gWWFwLCBTdW4gTWljcm9zeXN0ZW1zIEludGVyY29udGluZW50YWwKKyMgVGVjaG5pY2FsIFN1cHBvcnQgKGluY2x1ZGluZyBhIHBhZ2UgZnJvbSB0aGUgT2ZmaWNpYWwgQWlybGluZSBHdWlkZSAtCisjIFdvcmxkd2lkZSBFZGl0aW9uKS4gIFRoZSBuYW1lcyBmb3IgdGltZSB6b25lcyBhcmUgZ3Vlc3Nlcy4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoZXNlIHJ1bGVzIGFyZSBzdG9sZW4gZnJvbSB0aGUgYGV1cm9wZScgZmlsZS4KKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUVVQXNpYQkxOTgxCW1heAktCU1hcglsYXN0U3VuCSAxOjAwdQkxOjAwCVMKK1J1bGUJRVVBc2lhCTE5NzkJMTk5NQktCVNlcAlsYXN0U3VuCSAxOjAwdQkwCS0KK1J1bGUJRVVBc2lhCTE5OTYJbWF4CS0JT2N0CWxhc3RTdW4JIDE6MDB1CTAJLQorUnVsZSBFLUV1ckFzaWEJMTk4MQltYXgJLQlNYXIJbGFzdFN1bgkgMDowMAkxOjAwCVMKK1J1bGUgRS1FdXJBc2lhCTE5NzkJMTk5NQktCVNlcAlsYXN0U3VuCSAwOjAwCTAJLQorUnVsZSBFLUV1ckFzaWEJMTk5NgltYXgJLQlPY3QJbGFzdFN1bgkgMDowMAkwCS0KK1J1bGUgUnVzc2lhQXNpYQkxOTgxCTE5ODQJLQlBcHIJMQkgMDowMAkxOjAwCVMKK1J1bGUgUnVzc2lhQXNpYQkxOTgxCTE5ODMJLQlPY3QJMQkgMDowMAkwCS0KK1J1bGUgUnVzc2lhQXNpYQkxOTg0CTE5OTEJLQlTZXAJbGFzdFN1bgkgMjowMHMJMAktCitSdWxlIFJ1c3NpYUFzaWEJMTk4NQkxOTkxCS0JTWFyCWxhc3RTdW4JIDI6MDBzCTE6MDAJUworUnVsZSBSdXNzaWFBc2lhCTE5OTIJb25seQktCU1hcglsYXN0U2F0CTIzOjAwCTE6MDAJUworUnVsZSBSdXNzaWFBc2lhCTE5OTIJb25seQktCVNlcAlsYXN0U2F0CTIzOjAwCTAJLQorUnVsZSBSdXNzaWFBc2lhCTE5OTMJbWF4CS0JTWFyCWxhc3RTdW4JIDI6MDBzCTE6MDAJUworUnVsZSBSdXNzaWFBc2lhCTE5OTMJMTk5NQktCVNlcAlsYXN0U3VuCSAyOjAwcwkwCS0KK1J1bGUgUnVzc2lhQXNpYQkxOTk2CW1heAktCU9jdAlsYXN0U3VuCSAyOjAwcwkwCS0KKworIyBBZmdoYW5pc3RhbgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL0thYnVsCTQ6MzY6NDggLQlMTVQJMTg5MAorCQkJNDowMAktCUFGVAkxOTQ1CisJCQk0OjMwCS0JQUZUCisKKyMgQXJtZW5pYQorIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgU2hhbmtzICYgUG90dGVuZ2VyIGhhdmUgWWVyZXZhbiBzd2l0Y2hpbmcgdG8gMzowMCAod2l0aCBSdXNzaWFuIERTVCkKKyMgaW4gc3ByaW5nIDE5OTEsIHRoZW4gdG8gNDowMCB3aXRoIG5vIERTVCBpbiBmYWxsIDE5OTUsIHRoZW4KKyMgcmVhZG9wdGluZyBSdXNzaWFuIERTVCBpbiAxOTk3LiAgR28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIsIGV2ZW4KKyMgd2hlbiB0aGV5IGRpc2FncmVlIHdpdGggb3RoZXJzLiAgRWRnYXIgRGVyLURhbmllbGlhbnR6CisjIHJlcG9ydGVkICgxOTk2LTA1LTA0KSB0aGF0IFllcmV2YW4gcHJvYmFibHkgd291bGRuJ3QgdXNlIERTVAorIyBpbiAxOTk2LCB0aG91Z2ggaXQgZGlkIHVzZSBEU1QgaW4gMTk5NS4gIElBVEEgU1NJTSAoMTk5MS8xOTk4KSByZXBvcnRzIHRoYXQKKyMgQXJtZW5pYSBzd2l0Y2hlZCBmcm9tIDM6MDAgdG8gNDowMCBpbiAxOTk4IGFuZCBvYnNlcnZlZCBEU1QgYWZ0ZXIgMTk5MSwKKyMgYnV0IHN0YXJ0ZWQgc3dpdGNoaW5nIGF0IDM6MDBzIGluIDE5OTguCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvWWVyZXZhbgkyOjU4OjAwIC0JTE1UCTE5MjQgTWF5ICAyCisJCQkzOjAwCS0JWUVSVAkxOTU3IE1hciAgICAjIFllcmV2YW4gVGltZQorCQkJNDowMCBSdXNzaWFBc2lhIFlFUiVzVAkxOTkxIE1hciAzMSAyOjAwcworCQkJMzowMAkxOjAwCVlFUlNUCTE5OTEgU2VwIDIzICMgaW5kZXBlbmRlbmNlCisJCQkzOjAwIFJ1c3NpYUFzaWEJQU0lc1QJMTk5NSBTZXAgMjQgMjowMHMKKwkJCTQ6MDAJLQlBTVQJMTk5NworCQkJNDowMCBSdXNzaWFBc2lhCUFNJXNUCisKKyMgQXplcmJhaWphbgorIyBGcm9tIFJ1c3RhbSBBbGl5ZXYgb2YgdGhlIEF6ZXJiYWlqYW4gSW50ZXJuZXQgRm9ydW0gKDIwMDUtMTAtMjMpOgorIyBBY2NvcmRpbmcgdG8gdGhlIHJlc29sdXRpb24gb2YgQ2FiaW5ldCBvZiBNaW5pc3RlcnMsIDE5OTcKKyMgUmVzb2x1dGlvbiBhdmFpbGFibGUgYXQ6IGh0dHA6Ly9haWYuYXovZG9jcy9kYXlsaWdodF9yZXMucGRmCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlBemVyCTE5OTcJbWF4CS0JTWFyCWxhc3RTdW4JIDQ6MDAJMTowMAlTCitSdWxlCUF6ZXIJMTk5NwltYXgJLQlPY3QJbGFzdFN1bgkgNTowMAkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9CYWt1CTM6MTk6MjQgLQlMTVQJMTkyNCBNYXkgIDIKKwkJCTM6MDAJLQlCQUtUCTE5NTcgTWFyICAgICMgQmFrdSBUaW1lCisJCQk0OjAwIFJ1c3NpYUFzaWEgQkFLJXNUCTE5OTEgTWFyIDMxIDI6MDBzCisJCQkzOjAwCTE6MDAJQkFLU1QJMTk5MSBBdWcgMzAgIyBpbmRlcGVuZGVuY2UKKwkJCTM6MDAgUnVzc2lhQXNpYQlBWiVzVAkxOTkyIFNlcCBsYXN0U2F0IDIzOjAwCisJCQk0OjAwCS0JQVpUCTE5OTYgIyBBemVyYmFpamFuIHRpbWUKKwkJCTQ6MDAJRVVBc2lhCUFaJXNUCTE5OTcKKwkJCTQ6MDAJQXplcglBWiVzVAorCisjIEJhaHJhaW4KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9CYWhyYWluCTM6MjI6MjAgLQlMTVQJMTkyMAkJIyBBbCBNYW5hbWFoCisJCQk0OjAwCS0JR1NUCTE5NzIgSnVuCisJCQkzOjAwCS0JQVNUCisKKyMgQmFuZ2xhZGVzaAorIyBGcm9tIEFsZXhhbmRlciBLcml2ZW55c2hldiAoMjAwOS0wNS0xMyk6CisjIEFjY29yZGluZyB0byBuZXdzcGFwZXIgQXNpYW4gVHJpYnVuZSAoTWF5IDYsIDIwMDkpIEJhbmdsYWRlc2ggbWF5IGludHJvZHVjZQorIyBEYXlsaWdodCBTYXZpbmcgVGltZSBmcm9tIEp1bmUgMTYgdG8gU2VwdCAzMAorIworIyBCYW5nbGFkZXNoIHRvIGludHJvZHVjZSBkYXlsaWdodCBzYXZpbmcgdGltZSBsaWtlbHkgZnJvbSBKdW5lIDE2CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXNpYW50cmlidW5lLmNvbS8/cT1ub2RlLzE3Mjg4Ij4KKyMgaHR0cDovL3d3dy5hc2lhbnRyaWJ1bmUuY29tLz9xPW5vZGUvMTcyODgKKyMgPC9hPgorIyBvcgorIyA8YSBocmVmPSJodHRwOi8vd3d3LndvcmxkdGltZXpvbmUuY29tL2RzdF9uZXdzL2RzdF9uZXdzX2JhbmdsYWRlc2gwMi5odG1sIj4KKyMgaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLmNvbS9kc3RfbmV3cy9kc3RfbmV3c19iYW5nbGFkZXNoMDIuaHRtbAorIyA8L2E+CisjCisjICIuLi4gQmFuZ2xhZGVzaCBnb3Zlcm5tZW50IGhhcyBkZWNpZGVkIHRvIHN3aXRjaCBkYXlsaWdodCBzYXZpbmcgdGltZSBmcm9tCisjIEp1bmUKKyMgMTYgdGlsbCBTZXB0ZW1iZXIgMzAgaW4gYSBiaWQgdG8gZW5zdXJlIG1heGltdW0gdXNlIG9mIGRheWxpZ2h0IHRvIGNvcGUgd2l0aAorIyBjcmlwcGxpbmcgcG93ZXIgY3Jpc2lzLiAiCisjCisjIFRoZSBzd2l0Y2ggd2lsbCByZW1haW4gaW4gZWZmZWN0IGZyb20gSnVuZSAxNiB0byBTZXB0IDMwICgyMDA5KSBidXQgaWYKKyMgaW1wbGVtZW50ZWQgdGhlIG5leHQgeWVhciwgaXQgd2lsbCBjb21lIGluIGZvcmNlIGZyb20gQXByaWwgMSwgMjAxMAorCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA5LTA2LTAyKToKKyMgVGhleSBoYXZlIGZpbmFsbHkgZGVjaWRlZCBub3csIGJ1dCBjaGFuZ2VkIHRoZSBzdGFydCBkYXRlIHRvIG1pZG5pZ2h0IGJldHdlZW4KKyMgdGhlIDE5dGggYW5kIDIwdGgsIGFuZCB0aGV5IGhhdmUgbm90IHNldCB0aGUgZW5kIGRhdGUgeWV0LgorIworIyBTb21lIHNvdXJjZXM6CisjIDxhIGhyZWY9Imh0dHA6Ly9pbi5yZXV0ZXJzLmNvbS9hcnRpY2xlL3NvdXRoQXNpYU5ld3MvaWRJTkluZGlhLTQwMDE3NjIwMDkwNjAxIj4KKyMgaHR0cDovL2luLnJldXRlcnMuY29tL2FydGljbGUvc291dGhBc2lhTmV3cy9pZElOSW5kaWEtNDAwMTc2MjAwOTA2MDEKKyMgPC9hPgorIyA8YSBocmVmPSJodHRwOi8vYmRuZXdzMjQuY29tL2RldGFpbHMucGhwP2lkPTg1ODg5JmNpZD0yIj4KKyMgaHR0cDovL2JkbmV3czI0LmNvbS9kZXRhaWxzLnBocD9pZD04NTg4OSZjaWQ9MgorIyA8L2E+CisjCisjIE91ciB3cmFwLXVwOgorIyA8YSBocmVmPSJodHRwOi8vd3d3LnRpbWVhbmRkYXRlLmNvbS9uZXdzL3RpbWUvYmFuZ2xhZGVzaC1kYXlsaWdodC1zYXZpbmctMjAwOS5odG1sIj4KKyMgaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vbmV3cy90aW1lL2JhbmdsYWRlc2gtZGF5bGlnaHQtc2F2aW5nLTIwMDkuaHRtbAorIyA8L2E+CisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUJhbmcJMjAwOQlvbmx5CS0JSmFuCTEJMDowMAkwCS0KK1J1bGUJQmFuZwkyMDA5CW9ubHkJLQlKdW4JMjAJMDowMAkxOjAwCVMKKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL0RoYWthCTY6MDE6NDAgLQlMTVQJMTg5MAorCQkJNTo1MzoyMAktCUhNVAkxOTQxIE9jdCAgICAjIEhvd3JhaCBNZWFuIFRpbWU/CisJCQk2OjMwCS0JQlVSVAkxOTQyIE1heSAxNSAjIEJ1cm1hIFRpbWUKKwkJCTU6MzAJLQlJU1QJMTk0MiBTZXAKKwkJCTY6MzAJLQlCVVJUCTE5NTEgU2VwIDMwCisJCQk2OjAwCS0JREFDVAkxOTcxIE1hciAyNiAjIERhY2NhIFRpbWUKKwkJCTY6MDAJLQlCRFQJMjAwOSAjIEJhbmdsYWRlc2ggVGltZQorCQkJNjowMAlCYW5nCUJEJXNUCisKKyMgQmh1dGFuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvVGhpbXBodQk1OjU4OjM2IC0JTE1UCTE5NDcgQXVnIDE1ICMgb3IgVGhpbWJ1CisJCQk1OjMwCS0JSVNUCTE5ODcgT2N0CisJCQk2OjAwCS0JQlRUCSMgQmh1dGFuIFRpbWUKKworIyBCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkKKyMgV2hpdG1hbiBhbmQgdGhlIDE5OTUgQ0lBIHRpbWUgem9uZSBtYXAgc2F5IDU6MDAsIGJ1dCB0aGUKKyMgMTk5NyBhbmQgbGF0ZXIgbWFwcyBzYXkgNjowMC4gIEFzc3VtZSB0aGUgc3dpdGNoIG9jY3VycmVkIGluIDE5OTYuCisjIFdlIGhhdmUgbm8gaW5mb3JtYXRpb24gYXMgdG8gd2hlbiBzdGFuZGFyZCB0aW1lIHdhcyBpbnRyb2R1Y2VkOworIyBhc3N1bWUgaXQgb2NjdXJyZWQgaW4gMTkwNywgdGhlIHNhbWUgeWVhciBhcyBNYXVyaXRpdXMgKHdoaWNoCisjIHRoZW4gY29udGFpbmVkIHRoZSBDaGFnb3MgQXJjaGlwZWxhZ28pLgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlJbmRpYW4vQ2hhZ29zCTQ6NDk6NDAJLQlMTVQJMTkwNworCQkJNTowMAktCUlPVAkxOTk2ICMgQklPVCBUaW1lCisJCQk2OjAwCS0JSU9UCisKKyMgQnJ1bmVpCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvQnJ1bmVpCTc6Mzk6NDAgLQlMTVQJMTkyNiBNYXIgICAjIEJhbmRhciBTZXJpIEJlZ2F3YW4KKwkJCTc6MzAJLQlCTlQJMTkzMworCQkJODowMAktCUJOVAorCisjIEJ1cm1hIC8gTXlhbm1hcgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL1Jhbmdvb24JNjoyNDo0MCAtCUxNVAkxODgwCQkjIG9yIFlhbmdvbgorCQkJNjoyNDozNgktCVJNVAkxOTIwCSAgICMgUmFuZ29vbiBNZWFuIFRpbWU/CisJCQk2OjMwCS0JQlVSVAkxOTQyIE1heSAgICMgQnVybWEgVGltZQorCQkJOTowMAktCUpTVAkxOTQ1IE1heSAzCisJCQk2OjMwCS0JTU1UCQkgICAjIE15YW5tYXIgVGltZQorCisjIENhbWJvZGlhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvUGhub21fUGVuaAk2OjU5OjQwIC0JTE1UCTE5MDYgSnVuICA5CisJCQk3OjA2OjIwCS0JU01UCTE5MTEgTWFyIDExIDA6MDEgIyBTYWlnb24gTVQ/CisJCQk3OjAwCS0JSUNUCTE5MTIgTWF5CisJCQk4OjAwCS0JSUNUCTE5MzEgTWF5CisJCQk3OjAwCS0JSUNUCisKKyMgQ2hpbmEKKworIyBGcm9tIEd1eSBIYXJyaXM6CisjIFBlb3BsZSdzIFJlcHVibGljIG9mIENoaW5hLiAgWWVzLCB0aGV5IHJlYWxseSBoYXZlIG9ubHkgb25lIHRpbWUgem9uZS4KKworIyBGcm9tIEJvYiBEZXZpbmUgKDE5ODgtMDEtMjgpOgorIyBObyB0aGV5IGRvbid0LiAgU2VlIFRJTUUgbWFnLCAxOTg2LTAyLTE3IHAuNTIuICBFdmVuIHRob3VnaAorIyBDaGluYSBpcyBhY3Jvc3MgNCBwaHlzaWNhbCB0aW1lIHpvbmVzLCBiZWZvcmUgRmViIDEsIDE5ODYgb25seSB0aGUKKyMgUGVraW5nIChCZWppbmcpIHRpbWUgem9uZSB3YXMgcmVjb2duaXplZC4gIFNpbmNlIHRoYXQgZGF0ZSwgQ2hpbmEKKyMgaGFzIHR3byBvZiAnZW0gLS0gUGVraW5nJ3MgYW5kIFVydW1xaSAobmFtZWQgYWZ0ZXIgdGhlIGNhcGl0YWwgb2YKKyMgdGhlIFhpbmppYW5nIFV5Z2h1ciBBdXRvbm9tb3VzIFJlZ2lvbikuICBJIGRvbid0IGtub3cgYWJvdXQgRFNUIGZvciBpdC4KKyMKKyMgLiAuIC5JIGp1c3QgZGVsZXRlZCB0aGUgRFNUIHRhYmxlIGFuZCB0aGlzIGVkaXRvciBtYWtlcyBpdCB0b28KKyMgcGFpbmZ1bCB0byBzdWNrIGluIGFub3RoZXIgY29weS4uICBTbywgaGVyZSBpcyB3aGF0IEkgaGF2ZSBmb3IKKyMgRFNUIHN0YXJ0L2VuZCBkYXRlcyBmb3IgUGVraW5nJ3MgdGltZSB6b25lIChpbmZvIGZyb20gQVApOgorIworIyAgICAgMTk4NiBNYXkgNCAtIFNlcHQgMTQKKyMgICAgIDE5ODcgbWlkLUFwcmlsIC0gPz8KKworIyBGcm9tIFUuIFMuIE5hdmFsIE9ic2VydmF0b3J5ICgxOTg5LTAxLTE5KToKKyMgQ0hJTkEgICAgICAgICAgICAgICA4IEggIEFIRUFEIE9GIFVUQyAgQUxMIE9GIENISU5BLCBJTkNMIFRBSVdBTgorIyBDSElOQSAgICAgICAgICAgICAgIDkgSCAgQUhFQUQgT0YgVVRDICBBUFIgMTcgLSBTRVAgMTAKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgU2hhbmtzICYgUG90dGVuZ2VyIHdyaXRlIHRoYXQgQ2hpbmEgKGV4Y2VwdCBmb3IgSG9uZyBLb25nIGFuZCBNYWNhdSkKKyMgaGFzIGhhZCBhIHNpbmdsZSB0aW1lIHpvbmUgc2luY2UgMTk4MCBNYXkgMSwgb2JzZXJ2aW5nIHN1bW1lciBEU1QKKyMgZnJvbSAxOTg2IHRocm91Z2ggMTk5MTsgdGhpcyBjb250cmFkaWN0cyBEZXZpbmUncworIyBub3RlIGFib3V0IFRpbWUgbWFnYXppbmUsIHRob3VnaCBhcHBhcmVudGx5IF9zb21ldGhpbmdfIGhhcHBlbmVkIGluIDE5ODYuCisjIEdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyIGZvciBub3cuICBJIG1hZGUgdXAgbmFtZXMgZm9yIHRoZSBvdGhlcgorIyBwcmUtMTk4MCB0aW1lIHpvbmVzLgorCisjIEZyb20gU2hhbmtzICYgUG90dGVuZ2VyOgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJU2hhbmcJMTk0MAlvbmx5CS0JSnVuCSAzCTA6MDAJMTowMAlECitSdWxlCVNoYW5nCTE5NDAJMTk0MQktCU9jdAkgMQkwOjAwCTAJUworUnVsZQlTaGFuZwkxOTQxCW9ubHkJLQlNYXIJMTYJMDowMAkxOjAwCUQKK1J1bGUJUFJDCTE5ODYJb25seQktCU1heQkgNAkwOjAwCTE6MDAJRAorUnVsZQlQUkMJMTk4NgkxOTkxCS0JU2VwCVN1bj49MTEJMDowMAkwCVMKK1J1bGUJUFJDCTE5ODcJMTk5MQktCUFwcglTdW4+PTEwCTA6MDAJMTowMAlECisKKyMgRnJvbSBBbnRob255IEZvayAoMjAwMS0xMi0yMCk6CisjIEJUVywgSSBkaWQgc29tZSByZXNlYXJjaCBvbi1saW5lIGFuZCBmb3VuZCBzb21lIGluZm8gcmVnYXJkaW5nIHRoZXNlIGZpdmUKKyMgaGlzdG9yaWMgdGltZXpvbmVzIGZyb20gc29tZSBUYWl3YW4gd2Vic2l0ZXMuICBBbmQgeWVzLCB0aGVyZSBhcmUgb2ZmaWNpYWwKKyMgQ2hpbmVzZSBuYW1lcyBmb3IgdGhlc2UgbG9jYWxlcyAoYmVmb3JlIDE5NDkpLgorIworIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNi0wNy0xNCk6CisjIEkgaGF2ZSBpbnZlc3RpZ2F0ZWQgdGhlIHRpbWV6b25lcyBhcm91bmQgMTk3MCBvbiB0aGUKKyMgaHR0cDovL3d3dy5hc3Ryby5jb20vYXRsYXMgc2l0ZSBbd2l0aCBwcm92aW5jZXMgYW5kIGNvdW50eQorIyBib3VuZGFyaWVzIHN1bW1hcml6ZWQgYmVsb3ddLi4uLiAgQSBmZXcgb3RoZXIgZXhjZXB0aW9ucyB3ZXJlIHR3bworIyBjb3VudGllcyBvbiB0aGUgU2ljaHVhbiBzaWRlIG9mIHRoZSBYaXphbmctU2ljaHVhbiBib3JkZXIsCisjIGNvdW50aWVzIERlZ2UgYW5kIEJhaXl1IHdoaWNoIGxpZXMgb24gdGhlIFNpY2h1YW4gc2lkZSBhbmQgYXJlCisjIHRoZXJlZm9yZSBzdXBwb3NlZCB0byBiZSBHTVQrNywgWGl6YW5nIHJlZ2lvbiBiZWluZyBHTVQrNiwgYnV0IERlZ2UKKyMgY291bnR5IGlzIEdNVCs4IGFjY29yZGluZyB0byBhc3Ryby5jb20gd2hpbGUgQmFpeXUgY291bnR5IGlzIEdNVCs2CisjIChjb3VsZCBiZSB0cnVlKSwgZm9yIHRoZSBtb21lbnQgSSBhbSBhc3N1bWluZyB0aGF0IHRob3NlIHR3bworIyBjb3VudGllcyBhcmUgbWlzdGFrZXMgaW4gdGhlIGFzdHJvLmNvbSBkYXRhLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDgtMDItMTEpOgorIyBJIGp1c3Qgbm93IGNoZWNrZWQgR29vZ2xlIE5ld3MgZm9yIHdlc3Rlcm4gbmV3cyBzb3VyY2VzIHRoYXQgdGFsaworIyBhYm91dCBDaGluYSdzIHNpbmdsZSB0aW1lIHpvbmUsIGFuZCBjb3VsZG4ndCBmaW5kIGFueXRoaW5nIGJlZm9yZSAxOTg2CisjIHRhbGtpbmcgYWJvdXQgQ2hpbmEgYmVpbmcgaW4gb25lIHRpbWUgem9uZS4gIChUaGF0IGFydGljbGUgd2FzOiBKaW0KKyMgTWFubiwgIkEgY2x1bXN5IGVtYnJhY2UgZm9yIGFub3RoZXIgd2VzdGVybiBjdXN0b206IENoaW5hIG9uIGRheWxpZ2h0CisjIHRpbWUtLXNvcnQgb2YiLCBMb3MgQW5nZWxlcyBUaW1lcywgMTk4Ni0wNS0wNS4gIEJ5IHRoZSB3YXksIHRoaXMKKyMgYXJ0aWNsZSBjb25maXJtcyB0aGUgdHogZGF0YWJhc2UncyBkYXRhIGNsYWltaW5nIHRoYXQgQ2hpbmEgYmVnYW4KKyMgb2JzZXJ2aW5nIGRheWxpZ2h0IHNhdmluZyB0aW1lIGluIDE5ODYuCisjCisjIEZyb20gVGhvbWFzIFMuIE11bGxhbmV5ICgyMDA4LTAyLTExKToKKyMgSSB0aGluayB5b3UncmUgY29tYmluaW5nIHR3byBzdWJqZWN0cyB0aGF0IG5lZWQgdG8gdHJlYXRlZCAKKyMgc2VwYXJhdGVseTogZGF5bGlnaHQgc2F2aW5ncyAod2hpY2gsIHlvdSdyZSBjb3JyZWN0LCB3YXNuJ3QgCisjIGltcGxlbWVudGVkIHVudGlsIHRoZSAxOTgwcykgYW5kIHRoZSB1bmlmaWVkIHRpbWUgem9uZSBjZW50ZXJlZCBuZWFyIAorIyBCZWlqaW5nICh3aGljaCB3YXMgaW1wbGVtZW50ZWQgaW4gMTk0OSkuIEJyaWVmbHksIHRoZXJlIHdhcyBhbHNvIGEgCisjICJMaGFzYSBUaW1lIiBpbiBUaWJldCBhbmQgIlVydW1xaSBUaW1lIiBpbiBYaW5qaWFuZy4gVGhlIGZpcnN0IHdhcyAKKyMgY2Vhc2VkLCBhbmQgdGhlIHNlY29uZCBldmVudHVhbGx5IHJlY29nbml6ZWQgKGFnYWluLCBpbiB0aGUgMTk4MHMpLgorIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA4LTA2LTMwKToKKyMgVGhlcmUgc2VlbXMgdG8gYmUgYSBnb29kIGNoYW5jZSBDaGluYSBzd2l0Y2hlZCB0byBhIHNpbmdsZSB0aW1lIHpvbmUgaW4gMTk0OQorIyByYXRoZXIgdGhhbiBpbiAxOTgwIGFzIFNoYW5rcyAmIFBvdHRlbmdlciBoYXZlIGl0LCBidXQgd2UgZG9uJ3QgaGF2ZSBhCisjIHJlbGlhYmxlIGRvY3VtZW50YXJ5IHNvdXJjZSBzYXlpbmcgc28geWV0LCBzbyBmb3Igbm93IHdlIHN0aWxsIGdvIHdpdGgKKyMgU2hhbmtzICYgUG90dGVuZ2VyLgorCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCisjIENoYW5nYmFpIFRpbWUgKCJMb25nLXdoaXRlIFRpbWUiLCBMb25nLXdoaXRlID0gSGVpbG9uZ2ppYW5nIGFyZWEpCisjIEhlaWxvbmdqaWFuZyAoZXhjZXB0IE1vaGUgY291bnR5KSwgSmlsaW4KK1pvbmUJQXNpYS9IYXJiaW4JODoyNjo0NAktCUxNVAkxOTI4ICMgb3IgSGFlcmJpbgorCQkJODozMAktCUNIQVQJMTkzMiBNYXIgIyBDaGFuZ2JhaSBUaW1lCisJCQk4OjAwCS0JQ1NUCTE5NDAKKwkJCTk6MDAJLQlDSEFUCTE5NjYgTWF5CisJCQk4OjMwCS0JQ0hBVAkxOTgwIE1heQorCQkJODowMAlQUkMJQyVzVAorIyBaaG9uZ3l1YW4gVGltZSAoIkNlbnRyYWwgcGxhaW4gVGltZSIpCisjIG1vc3Qgb2YgQ2hpbmEKK1pvbmUJQXNpYS9TaGFuZ2hhaQk4OjA1OjUyCS0JTE1UCTE5MjgKKwkJCTg6MDAJU2hhbmcJQyVzVAkxOTQ5CisJCQk4OjAwCVBSQwlDJXNUCisjIExvbmctc2h1IFRpbWUgKHByb2JhYmx5IGR1ZSB0byBMb25nIGFuZCBTaHUgYmVpbmcgdHdvIG5hbWVzIG9mIHRoYXQgYXJlYSkKKyMgR3Vhbmd4aSwgR3VpemhvdSwgSGFpbmFuLCBOaW5neGlhLCBTaWNodWFuLCBTaGFhbnhpLCBhbmQgWXVubmFuOworIyBtb3N0IG9mIEdhbnN1OyB3ZXN0IElubmVyIE1vbmdvbGlhOyB3ZXN0IFFpbmdoYWk7IGFuZCB0aGUgR3Vhbmdkb25nCisjIGNvdW50aWVzIERlcWluZywgRW5waW5nLCBLYWlwaW5nLCBMdW9kaW5nLCBUYWlzaGFuLCBYaW54aW5nLAorIyBZYW5nY2h1biwgWWFuZ2ppYW5nLCBZdSduYW4sIGFuZCBZdW5mdS4KK1pvbmUJQXNpYS9DaG9uZ3FpbmcJNzowNjoyMAktCUxNVAkxOTI4ICMgb3IgQ2h1bmdraW5nCisJCQk3OjAwCS0JTE9OVAkxOTgwIE1heSAjIExvbmctc2h1IFRpbWUKKwkJCTg6MDAJUFJDCUMlc1QKKyMgWGluLXphbmcgVGltZSAoIlhpbmppYW5nLVRpYmV0IFRpbWUiKQorIyBUaGUgR2Fuc3UgY291bnRpZXMgQWtzYXksIEFueGksIER1bmh1YW5nLCBTdWJlaTsgd2VzdCBRaW5naGFpOworIyB0aGUgR3Vhbmdkb25nIGNvdW50aWVzICBYdXdlbiwgSGFpa2FuZywgU3VpeGksIExpYW5qaWFuZywKKyMgWmhhbmppYW5nLCBXdWNodWFuLCBIdWF6aG91LCBHYW96aG91LCBNYW9taW5nLCBEaWFuYmFpLCBhbmQgWGlueWk7CisjIGVhc3QgVGliZXQsIGluY2x1ZGluZyBMaGFzYSwgQ2hhbWRvLCBTaGlnYWlzZSwgSmltc2FyLCBTaGF3YW4gYW5kIEh1dHViaTsKKyMgZWFzdCBYaW5qaWFuZywgaW5jbHVkaW5nIFVydW1xaSwgVHVycGFuLCBLYXJhbWF5LCBLb3JsYSwgTWluZmVuZywgSmluZ2hlLAorIyBXdXN1LCBRaWVtbywgWGlueWFuLCBXdWxhbnd1c3UsIEppbmdoZSwgWXVtaW4sIFRhY2hlbmcsIFR1b2xpLCBFbWluLAorIyBTaGloZXppLCBDaGFuZ2ppLCBZYW5xaSwgSGVzaHVvLCBUdW9rZXh1biwgVHVsdWZhbiwgU2hhbnNoYW4sIEhhbWksCisjIEZ1a2FuZywgS3VpdHVuLCBLdW11a3VsaSwgTWlxdWFuLCBRaXRhaSwgYW5kIFR1cmZhbi4KK1pvbmUJQXNpYS9VcnVtcWkJNTo1MDoyMAktCUxNVAkxOTI4ICMgb3IgVXJ1bWNoaQorCQkJNjowMAktCVVSVVQJMTk4MCBNYXkgIyBVcnVtcWkgVGltZQorCQkJODowMAlQUkMJQyVzVAorIyBLdW5sdW4gVGltZQorIyBXZXN0IFRpYmV0LCBpbmNsdWRpbmcgUHVsYW4sIEFoZXFpLCBTaHVmdSwgU2h1bGU7CisjIFdlc3QgWGluamlhbmcsIGluY2x1ZGluZyBBa3N1LCBBdHVzaGksIFlpbmluZywgSGV0aWFuLCBDZWxlLCBMdW9wdSwgTmlsZWtlLAorIyBaaGFvc3UsIFRla2VzaSwgR29uZ2xpdSwgQ2hhYnVjaGFlciwgSHVvY2hlbmcsIEJvbGUsIFBpc2hhbiwgU3VpZGluZywKKyMgYW5kIFlhcmthbmQuCitab25lCUFzaWEvS2FzaGdhcgk1OjAzOjU2CS0JTE1UCTE5MjggIyBvciBLYXNoaSBvciBLYXhnYXIKKwkJCTU6MzAJLQlLQVNUCTE5NDAJICMgS2FzaGdhciBUaW1lCisJCQk1OjAwCS0JS0FTVAkxOTgwIE1heQorCQkJODowMAlQUkMJQyVzVAorCisjIEhvbmcgS29uZyAoWGlhbmdnYW5nKQorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJSEsJMTk0Nglvbmx5CS0JQXByCTIwCTM6MzAJMTowMAlTCitSdWxlCUhLCTE5NDYJb25seQktCURlYwkxCTM6MzAJMAktCitSdWxlCUhLCTE5NDcJb25seQktCUFwcgkxMwkzOjMwCTE6MDAJUworUnVsZQlISwkxOTQ3CW9ubHkJLQlEZWMJMzAJMzozMAkwCS0KK1J1bGUJSEsJMTk0OAlvbmx5CS0JTWF5CTIJMzozMAkxOjAwCVMKK1J1bGUJSEsJMTk0OAkxOTUyCS0JT2N0CWxhc3RTdW4JMzozMAkwCS0KK1J1bGUJSEsJMTk0OQkxOTUzCS0JQXByCVN1bj49MQkzOjMwCTE6MDAJUworUnVsZQlISwkxOTUzCW9ubHkJLQlOb3YJMQkzOjMwCTAJLQorUnVsZQlISwkxOTU0CTE5NjQJLQlNYXIJU3VuPj0xOAkzOjMwCTE6MDAJUworUnVsZQlISwkxOTU0CW9ubHkJLQlPY3QJMzEJMzozMAkwCS0KK1J1bGUJSEsJMTk1NQkxOTY0CS0JTm92CVN1bj49MQkzOjMwCTAJLQorUnVsZQlISwkxOTY1CTE5NzcJLQlBcHIJU3VuPj0xNgkzOjMwCTE6MDAJUworUnVsZQlISwkxOTY1CTE5NzcJLQlPY3QJU3VuPj0xNgkzOjMwCTAJLQorUnVsZQlISwkxOTc5CTE5ODAJLQlNYXkJU3VuPj04CTM6MzAJMTowMAlTCitSdWxlCUhLCTE5NzkJMTk4MAktCU9jdAlTdW4+PTE2CTM6MzAJMAktCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvSG9uZ19Lb25nCTc6MzY6MzYgLQlMTVQJMTkwNCBPY3QgMzAKKwkJCTg6MDAJSEsJSEslc1QKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGFpd2FuCisKKyMgU2hhbmtzICYgUG90dGVuZ2VyIHdyaXRlIHRoYXQgVGFpd2FuIG9ic2VydmVkIERTVCBkdXJpbmcgMTk0NSwgd2hlbiBpdAorIyB3YXMgc3RpbGwgY29udHJvbGxlZCBieSBKYXBhbi4gIFRoaXMgaXMgaGFyZCB0byBiZWxpZXZlLCBidXQgd2UgZG9uJ3QKKyMgaGF2ZSBhbnkgb3RoZXIgaW5mb3JtYXRpb24uCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCVRhaXdhbgkxOTQ1CTE5NTEJLQlNYXkJMQkwOjAwCTE6MDAJRAorUnVsZQlUYWl3YW4JMTk0NQkxOTUxCS0JT2N0CTEJMDowMAkwCVMKK1J1bGUJVGFpd2FuCTE5NTIJb25seQktCU1hcgkxCTA6MDAJMTowMAlECitSdWxlCVRhaXdhbgkxOTUyCTE5NTQJLQlOb3YJMQkwOjAwCTAJUworUnVsZQlUYWl3YW4JMTk1MwkxOTU5CS0JQXByCTEJMDowMAkxOjAwCUQKK1J1bGUJVGFpd2FuCTE5NTUJMTk2MQktCU9jdAkxCTA6MDAJMAlTCitSdWxlCVRhaXdhbgkxOTYwCTE5NjEJLQlKdW4JMQkwOjAwCTE6MDAJRAorUnVsZQlUYWl3YW4JMTk3NAkxOTc1CS0JQXByCTEJMDowMAkxOjAwCUQKK1J1bGUJVGFpd2FuCTE5NzQJMTk3NQktCU9jdAkxCTA6MDAJMAlTCitSdWxlCVRhaXdhbgkxOTgwCW9ubHkJLQlKdW4JMzAJMDowMAkxOjAwCUQKK1J1bGUJVGFpd2FuCTE5ODAJb25seQktCVNlcAkzMAkwOjAwCTAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL1RhaXBlaQk4OjA2OjAwIC0JTE1UCTE4OTYgIyBvciBUYWliZWkgb3IgVCdhaS1wZWkKKwkJCTg6MDAJVGFpd2FuCUMlc1QKKworIyBNYWNhdSAoTWFjYW8sIEFvbWVuKQorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJTWFjYXUJMTk2MQkxOTYyCS0JTWFyCVN1bj49MTYJMzozMAkxOjAwCVMKK1J1bGUJTWFjYXUJMTk2MQkxOTY0CS0JTm92CVN1bj49MQkzOjMwCTAJLQorUnVsZQlNYWNhdQkxOTYzCW9ubHkJLQlNYXIJU3VuPj0xNgkwOjAwCTE6MDAJUworUnVsZQlNYWNhdQkxOTY0CW9ubHkJLQlNYXIJU3VuPj0xNgkzOjMwCTE6MDAJUworUnVsZQlNYWNhdQkxOTY1CW9ubHkJLQlNYXIJU3VuPj0xNgkwOjAwCTE6MDAJUworUnVsZQlNYWNhdQkxOTY1CW9ubHkJLQlPY3QJMzEJMDowMAkwCS0KK1J1bGUJTWFjYXUJMTk2NgkxOTcxCS0JQXByCVN1bj49MTYJMzozMAkxOjAwCVMKK1J1bGUJTWFjYXUJMTk2NgkxOTcxCS0JT2N0CVN1bj49MTYJMzozMAkwCS0KK1J1bGUJTWFjYXUJMTk3MgkxOTc0CS0JQXByCVN1bj49MTUJMDowMAkxOjAwCVMKK1J1bGUJTWFjYXUJMTk3MgkxOTczCS0JT2N0CVN1bj49MTUJMDowMAkwCS0KK1J1bGUJTWFjYXUJMTk3NAkxOTc3CS0JT2N0CVN1bj49MTUJMzozMAkwCS0KK1J1bGUJTWFjYXUJMTk3NQkxOTc3CS0JQXByCVN1bj49MTUJMzozMAkxOjAwCVMKK1J1bGUJTWFjYXUJMTk3OAkxOTgwCS0JQXByCVN1bj49MTUJMDowMAkxOjAwCVMKK1J1bGUJTWFjYXUJMTk3OAkxOTgwCS0JT2N0CVN1bj49MTUJMDowMAkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9NYWNhdQk3OjM0OjIwIC0JTE1UCTE5MTIKKwkJCTg6MDAJTWFjYXUJTU8lc1QJMTk5OSBEZWMgMjAgIyByZXR1cm4gdG8gQ2hpbmEKKwkJCTg6MDAJUFJDCUMlc1QKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQ3lwcnVzCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlDeXBydXMJMTk3NQlvbmx5CS0JQXByCTEzCTA6MDAJMTowMAlTCitSdWxlCUN5cHJ1cwkxOTc1CW9ubHkJLQlPY3QJMTIJMDowMAkwCS0KK1J1bGUJQ3lwcnVzCTE5NzYJb25seQktCU1heQkxNQkwOjAwCTE6MDAJUworUnVsZQlDeXBydXMJMTk3Nglvbmx5CS0JT2N0CTExCTA6MDAJMAktCitSdWxlCUN5cHJ1cwkxOTc3CTE5ODAJLQlBcHIJU3VuPj0xCTA6MDAJMTowMAlTCitSdWxlCUN5cHJ1cwkxOTc3CW9ubHkJLQlTZXAJMjUJMDowMAkwCS0KK1J1bGUJQ3lwcnVzCTE5NzgJb25seQktCU9jdAkyCTA6MDAJMAktCitSdWxlCUN5cHJ1cwkxOTc5CTE5OTcJLQlTZXAJbGFzdFN1bgkwOjAwCTAJLQorUnVsZQlDeXBydXMJMTk4MQkxOTk4CS0JTWFyCWxhc3RTdW4JMDowMAkxOjAwCVMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9OaWNvc2lhCTI6MTM6MjggLQlMTVQJMTkyMSBOb3YgMTQKKwkJCTI6MDAJQ3lwcnVzCUVFJXNUCTE5OTggU2VwCisJCQkyOjAwCUVVQXNpYQlFRSVzVAorIyBJQVRBIFNTSU0gKDE5OTgtMDkpIGhhcyBDeXBydXMgdXNpbmcgRVUgcnVsZXMgZm9yIHRoZSBmaXJzdCB0aW1lLgorCisjIENsYXNzaWNhbGx5LCBDeXBydXMgYmVsb25ncyB0byBBc2lhOyBlLmcuIHNlZSBIZXJvZG90dXMsIEhpc3RvcmllcywgSS43Mi4KKyMgSG93ZXZlciwgZm9yIHZhcmlvdXMgcmVhc29ucyBtYW55IHVzZXJzIGV4cGVjdCB0byBmaW5kIGl0IHVuZGVyIEV1cm9wZS4KK0xpbmsJQXNpYS9OaWNvc2lhCUV1cm9wZS9OaWNvc2lhCisKKyMgR2VvcmdpYQorIyBGcm9tIFBhdWwgRWdnZXJ0ICgxOTk0LTExLTE5KToKKyMgVG9kYXkncyBfRWNvbm9taXN0XyAocCA2MCkgcmVwb3J0cyB0aGF0IEdlb3JnaWEgbW92ZWQgaXRzIGNsb2NrcyBmb3J3YXJkCisjIGFuIGhvdXIgcmVjZW50bHksIGR1ZSB0byBhIGxhdyBwcm9wb3NlZCBieSBadXJhYiBNdXJ2YW5pZHplLAorIyBhbiBNUCB3aG8gd2VudCBvbiBhIGh1bmdlciBzdHJpa2UgZm9yIDExIGRheXMgdG8gZm9yY2UgZGlzY3Vzc2lvbiBhYm91dCBpdCEKKyMgV2UgaGF2ZSBubyBkZXRhaWxzLCBidXQgd2UnbGwgZ3Vlc3MgdGhleSBkaWRuJ3QgbW92ZSB0aGUgY2xvY2tzIGJhY2sgaW4gZmFsbC4KKyMKKyMgRnJvbSBNYXRoZXcgRW5nbGFuZGVyLCBxdW90aW5nIEFQICgxOTk2LTEwLTIzIDEzOjA1LTA0KToKKyMgSW5zdGVhZCBvZiBwdXR0aW5nIGJhY2sgY2xvY2tzIGF0IHRoZSBlbmQgb2YgT2N0b2JlciwgR2VvcmdpYQorIyB3aWxsIHN0YXkgb24gZGF5bGlnaHQgc2F2aW5ncyB0aW1lIHRoaXMgd2ludGVyIHRvIHNhdmUgZW5lcmd5LAorIyBQcmVzaWRlbnQgRWR1YXJkIFNoZXZhcmRuYWR6ZSBkZWNyZWVkIFdlZG5lc2RheS4KKyMKKyMgRnJvbSB0aGUgQkJDIHZpYSBKb3NlcGggUy4gTXllcnMgKDIwMDQtMDYtMjcpOgorIworIyBHZW9yZ2lhIG1vdmVkIGNsb3NlciB0byBXZXN0ZXJuIEV1cm9wZSBvbiBTdW5kYXkuLi4gIFRoZSBmb3JtZXIgU292aWV0CisjIHJlcHVibGljIGhhcyBjaGFuZ2VkIGl0cyB0aW1lIHpvbmUgYmFjayB0byB0aGF0IG9mIE1vc2Nvdy4gIEFzIGEgcmVzdWx0IGl0CisjIGlzIG5vdyBqdXN0IGZvdXIgaG91cnMgYWhlYWQgb2YgR3JlZW53aWNoIE1lYW4gVGltZSwgcmF0aGVyIHRoYW4gZml2ZSBob3VycworIyBhaGVhZC4gIFRoZSBzd2l0Y2ggd2FzIGRlY3JlZWQgYnkgdGhlIHByby1XZXN0ZXJuIHByZXNpZGVudCBvZiBHZW9yZ2lhLAorIyBNaWtoYWlsIFNhYWthc2h2aWxpLCB3aG8gc2FpZCB0aGUgY2hhbmdlIHdhcyBwYXJ0bHkgcHJvbXB0ZWQgYnkgdGhlIHByb2Nlc3MKKyMgb2YgaW50ZWdyYXRpb24gaW50byBFdXJvcGUuCisKKyMgRnJvbSBUZWltdXJheiBBYmFzaGlkemUgKDIwMDUtMTEtMDcpOgorIyBHb3Zlcm5tZW50IG9mIEdlb3JnaWEgLi4uIGRlY2lkZWQgdG8gTk9UIENIQU5HRSBkYXlsaWdodCBzYXZpbmdzIHRpbWUgb24KKyMgW09jdC5dIDMwLCBhcyBpdCB3YXMgZG9uZSBiZWZvcmUgZHVyaW5nIGxhc3QgbW9yZSB0aGFuIDEwIHllYXJzLgorIyBDdXJyZW50bHksIHdlIGFyZSBpbiBmYWN0IEdNVCArNDowMCwgYXMgYmVmb3JlIDMwIE9jdG9iZXIgaXQgd2FzIEdNVAorIyArMzowMC4uLi4gVGhlIHByb2JsZW0gaXMsIHRoZXJlIGlzIE5PIEZPUk1BTCBMQVcgb3IgZ292ZXJubWVudGFsIGRvY3VtZW50CisjIGFib3V0IGl0LiAgQXMgZmFyIGFzIEkgY2FuIGZpbmQsIEkgd2FzIHRvbGQsIHRoYXQgdGhlcmUgaXMgbm8gZG9jdW1lbnQsCisjIGJlY2F1c2Ugd2UganVzdCBESUROJ1QgSVNTVUUgZG9jdW1lbnQgYWJvdXQgc3dpdGNoaW5nIHRvIHdpbnRlciB0aW1lLi4uLgorIyBJIGRvbid0IGtub3cgd2hhdCBjYW4gYmUgZG9uZSwgZXNwZWNpYWxseSBrbm93aW5nIHRoYXQgc29tZSB5ZWFycyBhZ28gb3VyCisjIERTVCBydWxlcyB3aGVyZSBjaGFuZ2VkIFRIUkVFIFRJTUVTIGR1cmluZyBvbmUgbW9udGguCisKKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL1RiaWxpc2kJMjo1OToxNiAtCUxNVAkxODgwCisJCQkyOjU5OjE2CS0JVEJNVAkxOTI0IE1heSAgMiAjIFRiaWxpc2kgTWVhbiBUaW1lCisJCQkzOjAwCS0JVEJJVAkxOTU3IE1hciAgICAjIFRiaWxpc2kgVGltZQorCQkJNDowMCBSdXNzaWFBc2lhIFRCSSVzVAkxOTkxIE1hciAzMSAyOjAwcworCQkJMzowMAkxOjAwCVRCSVNUCTE5OTEgQXByICA5ICMgaW5kZXBlbmRlbmNlCisJCQkzOjAwIFJ1c3NpYUFzaWEgR0Ulc1QJMTk5MiAjIEdlb3JnaWEgVGltZQorCQkJMzowMCBFLUV1ckFzaWEJR0Ulc1QJMTk5NCBTZXAgbGFzdFN1bgorCQkJNDowMCBFLUV1ckFzaWEJR0Ulc1QJMTk5NiBPY3QgbGFzdFN1bgorCQkJNDowMAkxOjAwCUdFU1QJMTk5NyBNYXIgbGFzdFN1bgorCQkJNDowMCBFLUV1ckFzaWEJR0Ulc1QJMjAwNCBKdW4gMjcKKwkJCTM6MDAgUnVzc2lhQXNpYQlHRSVzVAkyMDA1IE1hciBsYXN0U3VuIDI6MDAKKwkJCTQ6MDAJLQlHRVQKKworIyBFYXN0IFRpbW9yCisKKyMgU2VlIEluZG9uZXNpYSBmb3IgdGhlIDE5NDUgdHJhbnNpdGlvbi4KKworIyBGcm9tIEpvYW8gQ2FycmFzY2FsYW8sIGJyb3RoZXIgb2YgdGhlIGZvcm1lciBnb3Zlcm5vciBvZiBFYXN0IFRpbW9yLCBpbgorIyA8YSBocmVmPSJodHRwOi8vZXRhbi5vcmcvZXQ5OWMvZGVjZW1iZXIvMjYtMzEvMzBFVE1BWS5odG0iPgorIyBFYXN0IFRpbW9yIG1heSBiZSBsYXRlIGZvciBpdHMgbWlsbGVubml1bQorIyA8L2E+ICgxOTk5LTEyLTI2LzMxKToKKyMgUG9ydHVnYWwgdHJpZWQgdG8gY2hhbmdlIHRoZSB0aW1lIGZvcndhcmQgaW4gMTk3NCBiZWNhdXNlIHRoZSBzdW4KKyMgcmlzZXMgdG9vIGVhcmx5IGJ1dCB0aGUgc3VnZ2VzdGlvbiByYWlzZWQgYSBsb3Qgb2YgcHJvYmxlbXMgd2l0aCB0aGUKKyMgVGltb3Jlc2UgYW5kIEkgc3RpbGwgZG9uJ3QgdGhpbmsgaXQgd291bGQgd29yayB0b2RheSBiZWNhdXNlIGl0CisjIGNvbmZsaWN0cyB3aXRoIHRoZWlyIHdheSBvZiBsaWZlLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDAtMTItMDQpOgorIyBXZSBkb24ndCBoYXZlIGFueSByZWNvcmQgb2YgdGhlIGFib3ZlIGF0dGVtcHQuCisjIE1vc3QgbGlrZWx5IG91ciByZWNvcmRzIGFyZSBpbmNvbXBsZXRlLCBidXQgd2UgaGF2ZSBubyBiZXR0ZXIgZGF0YS4KKworIyA8YSBocmVmPSJodHRwOi8vd3d3LmhyaS5vcmcvbmV3cy93b3JsZC91bmRoL2xhc3QvMDAtMDgtMTYudW5kaC5odG1sIj4KKyMgRnJvbSBNYW5vZWwgZGUgQWxtZWlkYSBlIFNpbHZhLCBEZXB1dHkgU3Bva2VzbWFuIGZvciB0aGUgVU4gU2VjcmV0YXJ5LUdlbmVyYWwKKyMgKDIwMDAtMDgtMTYpPC9hPjoKKyMgVGhlIENhYmluZXQgb2YgdGhlIEVhc3QgVGltb3IgVHJhbnNpdGlvbiBBZG1pbmlzdHJhdGlvbiBkZWNpZGVkCisjIHRvZGF5IHRvIGFkdmFuY2UgRWFzdCBUaW1vcidzIHRpbWUgYnkgb25lIGhvdXIuICBUaGUgdGltZSBjaGFuZ2UsCisjIHdoaWNoIHdpbGwgYmUgcGVybWFuZW50LCB3aXRoIG5vIHNlYXNvbmFsIGFkanVzdG1lbnQsIHdpbGwgaGFwcGVuIGF0CisjIG1pZG5pZ2h0IG9uIFNhdHVyZGF5LCBTZXB0ZW1iZXIgMTYuCisKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9EaWxpCTg6MjI6MjAgLQlMTVQJMTkxMgorCQkJODowMAktCVRMVAkxOTQyIEZlYiAyMSAyMzowMCAjIEUgVGltb3IgVGltZQorCQkJOTowMAktCUpTVAkxOTQ1IFNlcCAyMworCQkJOTowMAktCVRMVAkxOTc2IE1heSAgMworCQkJODowMAktCUNJVAkyMDAwIFNlcCAxNyAwMDowMAorCQkJOTowMAktCVRMVAorCisjIEluZGlhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvS29sa2F0YQk1OjUzOjI4IC0JTE1UCTE4ODAJIyBLb2xrYXRhCisJCQk1OjUzOjIwCS0JSE1UCTE5NDEgT2N0ICAgICMgSG93cmFoIE1lYW4gVGltZT8KKwkJCTY6MzAJLQlCVVJUCTE5NDIgTWF5IDE1ICMgQnVybWEgVGltZQorCQkJNTozMAktCUlTVAkxOTQyIFNlcAorCQkJNTozMAkxOjAwCUlTVAkxOTQ1IE9jdCAxNQorCQkJNTozMAktCUlTVAorIyBUaGUgZm9sbG93aW5nIGFyZSBsaWtlIEFzaWEvS29sa2F0YToKKyMJQW5kYW1hbiBJcworIwlMYWtzaGFkd2VlcCAoTGFjY2FkaXZlLCBNaW5pY295IGFuZCBBbWluZGl2aSBJcykKKyMJTmljb2JhciBJcworCisjIEluZG9uZXNpYQorIworIyBGcm9tIEd3aWxsaW0gTGF3ICgyMDAxLTA1LTI4KSwgb3ZlcnJpZGluZyBTaGFua3MgJiBQb3R0ZW5nZXI6CisjIDxodHRwOi8vd3d3LnN1bWF0ZXJhLWluYy5jb20vZ29fdG9faW52ZXN0L2Fib3V0X2luZG9uZXNpYS5hc3Ajc3RhbmR0aW1lPgorIyBzYXlzIHRoYXQgSW5kb25lc2lhJ3MgdGltZSB6b25lcyBjaGFuZ2VkIG9uIDE5ODgtMDEtMDEuICBMb29raW5nIGF0IHNvbWUKKyMgdGltZSB6b25lIG1hcHMsIEkgdGhpbmsgdGhhdCBtdXN0IHJlZmVyIHRvIFdlc3Rlcm4gQm9ybmVvIChLYWxpbWFudGFuIEJhcmF0CisjIGFuZCBLYWxpbWFudGFuIFRlbmdhaCkgc3dpdGNoaW5nIGZyb20gVVRDKzggdG8gVVRDKzcuCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDctMDMtMTApOgorIyBIZXJlIGlzIGFub3RoZXIgY29ycmVjdGlvbiB0byBTaGFua3MgJiBQb3R0ZW5nZXIuCisjIEpvaG5UV0Igd3JpdGVzIHRoYXQgSmFwYW5lc2UgZm9yY2VzIGRpZCBub3Qgc3VycmVuZGVyIGNvbnRyb2wgaW4KKyMgSW5kb25lc2lhIHVudGlsIDE5NDUtMDktMDEgMDA6MDAgYXQgdGhlIGVhcmxpZXN0IChpbiBKYWthcnRhKSBhbmQKKyMgb3RoZXIgZm9ybWFsIHN1cnJlbmRlciBjZXJlbW9uaWVzIHdlcmUgU2VwdGVtYmVyIDksIDExLCBhbmQgMTMsIHBsdXMKKyMgU2VwdGVtYmVyIDEyIGZvciB0aGUgcmVnaW9uYWwgc3VycmVuZGVyIHRvIE1vdW50YmF0dGVuIGluIFNpbmdhcG9yZS4KKyMgVGhlc2Ugd291bGQgYmUgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIHRpbWVzIGZvciBhIGNoYW5nZS4KKyMgUmVnaW1lcyBob3JhaXJlcyBwb3VyIGxlIG1vbmRlIGVudGllciwgYnkgSGVucmkgTGUgQ29ycmUsIChFZGl0aW9ucworIyBUcmFkaXRpb25uZWxsZXMsIDE5ODcsIFBhcmlzKSBzYXlzIHRoYXQgSmF2YSBhbmQgTWFkdXJhIHN3aXRjaGVkCisjIGZyb20gSlNUIHRvIFVUQyswNzozMCBvbiAxOTQ1LTA5LTIzLCBhbmQgZ2l2ZXMgMTk0NC0wOS0wMSBmb3IgSmF5YXB1cmEKKyMgKEhvbGxhbmRpYSkuICBGb3Igbm93LCBhc3N1bWUgYWxsIEluZG9uZXNpYW4gbG9jYXRpb25zIG90aGVyIHRoYW4gSmF5YXB1cmEKKyMgc3dpdGNoZWQgb24gMTk0NS0wOS0yMy4KKyMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQXNpYS9KYWthcnRhCTc6MDc6MTIgLQlMTVQJMTg2NyBBdWcgMTAKKyMgU2hhbmtzICYgUG90dGVuZ2VyIHNheSB0aGUgbmV4dCB0cmFuc2l0aW9uIHdhcyBhdCAxOTI0IEphbiAxIDA6MTMsCisjIGJ1dCB0aGlzIG11c3QgYmUgYSB0eXBvLgorCQkJNzowNzoxMgktCUpNVAkxOTIzIERlYyAzMSAyMzo0NzoxMiAjIEpha2FydGEKKwkJCTc6MjAJLQlKQVZUCTE5MzIgTm92CSAjIEphdmEgVGltZQorCQkJNzozMAktCVdJVAkxOTQyIE1hciAyMworCQkJOTowMAktCUpTVAkxOTQ1IFNlcCAyMworCQkJNzozMAktCVdJVAkxOTQ4IE1heQorCQkJODowMAktCVdJVAkxOTUwIE1heQorCQkJNzozMAktCVdJVAkxOTY0CisJCQk3OjAwCS0JV0lUCitab25lIEFzaWEvUG9udGlhbmFrCTc6MTc6MjAJLQlMTVQJMTkwOCBNYXkKKwkJCTc6MTc6MjAJLQlQTVQJMTkzMiBOb3YgICAgIyBQb250aWFuYWsgTVQKKwkJCTc6MzAJLQlXSVQJMTk0MiBKYW4gMjkKKwkJCTk6MDAJLQlKU1QJMTk0NSBTZXAgMjMKKwkJCTc6MzAJLQlXSVQJMTk0OCBNYXkKKwkJCTg6MDAJLQlXSVQJMTk1MCBNYXkKKwkJCTc6MzAJLQlXSVQJMTk2NAorCQkJODowMAktCUNJVAkxOTg4IEphbiAgMQorCQkJNzowMAktCVdJVAorWm9uZSBBc2lhL01ha2Fzc2FyCTc6NTc6MzYgLQlMTVQJMTkyMAorCQkJNzo1NzozNgktCU1NVAkxOTMyIE5vdiAgICAjIE1hY2Fzc2FyIE1UCisJCQk4OjAwCS0JQ0lUCTE5NDIgRmViICA5CisJCQk5OjAwCS0JSlNUCTE5NDUgU2VwIDIzCisJCQk4OjAwCS0JQ0lUCitab25lIEFzaWEvSmF5YXB1cmEJOToyMjo0OCAtCUxNVAkxOTMyIE5vdgorCQkJOTowMAktCUVJVAkxOTQ0IFNlcCAgMQorCQkJOTozMAktCUNTVAkxOTY0CisJCQk5OjAwCS0JRUlUCisKKyMgSXJhbgorCisjIEZyb20gUm9vemJlaCBQb3VybmFkZXIgKDIwMDMtMDMtMTUpOgorIyBUaGlzIGlzIGFuIEVuZ2xpc2ggdHJhbnNsYXRpb24gb2Ygd2hhdCBJIGp1c3QgZm91bmQgKG9yaWdpbmFsbHkgaW4gUGVyc2lhbikuCisjIFRoZSBHcmVnb3JpYW4gZGF0ZXMgaW4gYnJhY2tldHMgYXJlIG1pbmU6CisjCisjCU9mZmljaWFsIE5ld3NwYXBlciBOby4gMTM1NDgtMTM3MC82LzI1IFsxOTkxLTA5LTE2XQorIwlOby4gMTY3NjAvVDIzMyBICQkJCTEzNzAvNi8xMCBbMTk5MS0wOS0wMV0KKyMKKyMJVGhlIFJ1bGUgQWJvdXQgQ2hhbmdlIG9mIHRoZSBPZmZpY2lhbCBUaW1lIG9mIHRoZSBDb3VudHJ5CisjCisjCVRoZSBCb2FyZCBvZiBNaW5pc3RlcnMsIGluIHRoZSBtZWV0aW5nIGRhdGVkIDEzNzAvNS8yMyBbMTk5MS0wOC0xNF0sCisjCWJhc2VkIG9uIHRoZSBzdWdnZXN0aW9uIG51bWJlciAyMjIxL0QgZGF0ZWQgMTM3MC80LzIyIFsxOTkxLTA3LTEzXQorIwlvZiB0aGUgQ291bnRyeSdzIE9yZ2FuaXphdGlvbiBmb3IgT2ZmaWNpYWwgYW5kIEVtcGxveW1lbnQgQWZmYWlycywKKyMJYW5kIHJlZmVycmluZyB0byB0aGUgbGF3IGZvciBlcXVhdGluZyB0aGUgd29ya2luZyBob3VycyBvZiB3b3JrZXJzCisjCWFuZCBvZmZpY2VycyBpbiB0aGUgd2hvbGUgY291bnRyeSBkYXRlZCAxMzU5LzQvMjMgWzE5ODAtMDctMTRdLCBhbmQKKyMJZm9yIHN5bmNocm9uaXppbmcgdGhlIG9mZmljaWFsIHRpbWVzIG9mIHRoZSBjb3VudHJ5LCBhZ3JlZWQgdGhhdDoKKyMKKyMJVGhlIG9mZmljaWFsIHRpbWUgb2YgdGhlIGNvdW50cnkgd2lsbCBzaG91bGQgbW92ZSBmb3J3YXJkIG9uZSBob3VyCisjCWF0IHRoZSAyNFs6MDBdIGhvdXJzIG9mIHRoZSBmaXJzdCBkYXkgb2YgRmFydmFyZGluIGFuZCBzaG91bGQgcmV0dXJuCisjCXRvIGl0cyBwcmV2aW91cyBzdGF0ZSBhdCB0aGUgMjRbOjAwXSBob3VycyBvZiB0aGUgMzB0aCBkYXkgb2YKKyMJU2hhaHJpdmFyLgorIworIwlGaXJzdCBEZXB1dHkgdG8gdGhlIFByZXNpZGVudCAtIEhhc3NhbiBIYWJpYmkKKyMKKyMgRnJvbSBwZXJzb25hbCBleHBlcmllbmNlLCB0aGF0IGFncmVlcyB3aXRoIHdoYXQgaGFzIGJlZW4gZm9sbG93ZWQKKyMgZm9yIGF0IGxlYXN0IHRoZSBsYXN0IDUgeWVhcnMuICBCZWZvcmUgdGhhdCwgZm9yIGEgZmV3IHllYXJzLCB0aGUKKyMgZGF0ZSB1c2VkIHdhcyB0aGUgZmlyc3QgVGh1cnNkYXkgbmlnaHQgb2YgRmFydmFyZGluIGFuZCB0aGUgbGFzdAorIyBUaHVyc2RheSBuaWdodCBvZiBTaGFocml2YXIsIGJ1dCBJIGNhbid0IGdpdmUgZXhhY3QgZGF0ZXMuLi4uCisjIEkgaGF2ZSBhbHNvIGNoYW5nZWQgdGhlIGFiYnJldmlhdGlvbnMgdG8gd2hhdCBpcyBjb25zaWRlcmVkIGNvcnJlY3QKKyMgaGVyZSBpbiBJcmFuLCBJUlNUIGZvciByZWd1bGFyIHRpbWUgYW5kIElSRFQgZm9yIGRheWxpZ2h0IHNhdmluZyB0aW1lLgorIworIyBGcm9tIFJvb3piZWggUG91cm5hZGVyICgyMDA1LTA0LTA1KToKKyMgVGhlIHRleHQgb2YgdGhlIElyYW5pYW4gbGF3LCBpbiBlZmZlY3Qgc2luY2UgMTkyNSwgY2xlYXJseSBtZW50aW9ucworIyB0aGF0IHRoZSB0cnVlIHNvbGFyIHllYXIgaXMgdGhlIG1lYXN1cmUsIGFuZCB0aGVyZSBpcyBubyBhcml0aG1ldGljCisjIGxlYXAgeWVhciBjYWxjdWxhdGlvbiBpbnZvbHZlZC4gIFRoZXJlIGhhcyBuZXZlciBiZWVuIGFueSBzZXJpb3VzCisjIHBsYW4gdG8gY2hhbmdlIHRoYXQgbGF3Li4uLgorIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgR28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIgYmVmb3JlIFNlcHQuIDE5OTEsIGFuZCB3aXRoIFBvdXJuYWRlciB0aGVyZWFmdGVyLgorIyBJIHVzZWQgRWQgUmVpbmdvbGQncyBjYWwtcGVyc2lhIGluIEdOVSBFbWFjcyAyMS4yIHRvIGNoZWNrIFBlcnNpYW4gZGF0ZXMsCisjIHN0b3BwaW5nIGFmdGVyIDIwMzcgd2hlbiAzMi1iaXQgdGltZV90J3Mgb3ZlcmZsb3cuCisjIFRoYXQgY2FsLXBlcnNpYSB1c2VkIEJpcmFzaGsncyBhcHByb3hpbWF0aW9uLCB3aGljaCBkaXNhZ3JlZXMgd2l0aCB0aGUgc29sYXIKKyMgY2FsZW5kYXIgcHJlZGljdGlvbnMgZm9yIHRoZSB5ZWFyIDIwMjUsIHNvIEkgY29ycmVjdGVkIHRob3NlIGRhdGVzIGJ5IGhhbmQuCisjCisjIEZyb20gT3NjYXIgdmFuIFZsaWptZW4gKDIwMDUtMDMtMzApLCB3cml0aW5nIGFib3V0IGZ1dHVyZQorIyBkaXNjcmVwYW5jaWVzIGJldHdlZW4gY2FsLXBlcnNpYSBhbmQgdGhlIElyYW5pYW4gY2FsZW5kYXI6CisjIEZvciAyMDkxIHNvbGFyLWxvbmdpdHVkZS1hZnRlciB5aWVsZHMgMjA5MS0wMy0yMCAwODo0MDowNy43IFVUIGZvcgorIyB0aGUgdmVybmFsIGVxdWlub3ggYW5kIHRoYXQgZ2V0cyBzbyBjbG9zZSB0byAxMjowMCBzb21lIGxvY2FsCisjIElyYW5pYW4gdGltZSB0aGF0IHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjb3JyZWN0IGxvY2F0aW9uIG5lZWRzIHRvIGJlCisjIGtub3duIGV4YWN0bHksIGFtb25nc3Qgb3RoZXIgZmFjdG9ycy4gIDIxNTcgaXMgZXZlbiBjbG9zZXI6CisjIDIxNTctMDMtMjAgMDg6Mzc6MTUuNSBVVC4gIEJ1dCB0aGUgR3JlZ29yaWFuIHllYXIgMjAyNSBzaG91bGQgZ2l2ZQorIyBubyBpbnRlcnByZXRhdGlvbiBwcm9ibGVtIHdoYXRzb2V2ZXIuICBCeSB0aGUgd2F5LCBhbm90aGVyIGluc3RhbnQKKyMgaW4gdGhlIG5lYXIgZnV0dXJlIHdoZXJlIHRoZXJlIHdpbGwgYmUgYSBkaXNjcmVwYW5jeSBiZXR3ZWVuCisjIGFyaXRobWV0aWNhbCBhbmQgYXN0cm9ub21pY2FsIElyYW5pYW4gY2FsZW5kYXJzIHdpbGwgYmUgaW4gMjA1ODoKKyMgdmVybmFsIGVxdWlub3ggb24gMjA1OC0wMy0yMCAwOTowMzowNS45IFVULiAgVGhlIEphdmEgdmVyc2lvbiBvZgorIyBSZWluZ29sZCdzL0RlcnNob3dpdHonIGNhbGN1bGF0b3IgZ2l2ZXMgY29ycmVjdGx5IHRoZSBHcmVnb3JpYW4gZGF0ZQorIyAyMDU4LTAzLTIxIGZvciAxIEZhcnZhcmRpbiAxNDM3IChhc3Ryb25vbWljYWwpLgorIworIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwNi0wMy0yMik6CisjIFNldmVyYWwgb2YgbXkgdXNlcnMgaGF2ZSByZXBvcnRlZCB0aGF0IElyYW4gd2lsbCBub3Qgb2JzZXJ2ZSBEU1QgYW55bW9yZToKKyMgaHR0cDovL3d3dy5pcm5hLmlyL2VuL25ld3Mvdmlldy9saW5lLTE3LzA2MDMxOTM4MTIxNjQ5NDguaHRtCisjCisjIEZyb20gUmV1dGVycyAoMjAwNy0wOS0xNiksIHdpdGggYSBoZWFkcy11cCBmcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbjoKKyMgLi4uIHRoZSBHdWFyZGlhbiBDb3VuY2lsIC4uLiBhcHByb3ZlZCBhIGxhdyBvbiBTdW5kYXkgdG8gcmUtaW50cm9kdWNlCisjIGRheWxpZ2h0IHNhdmluZyB0aW1lIC4uLgorIyBodHRwOi8vdWsucmV1dGVycy5jb20vYXJ0aWNsZS9vaWxScHQvaWRVS0JMQTY1MDQ4NDIwMDcwOTE2CisjCisjIEZyb20gUm9vemJlaCBQb3VybmFkZXIgKDIwMDctMTEtMDUpOgorIyBUaGlzIGlzIHF1b3RlZCBmcm9tIE9mZmljaWFsIEdhemV0dGUgb2YgdGhlIElzbGFtaWMgUmVwdWJsaWMgb2YKKyMgSXJhbiwgVm9sdW1lIDYzLCBOdW1iZXIgMTgyNDIsIGRhdGVkIFR1ZXNkYXkgMTM4Ni82LzI0CisjIFsyMDA3LTEwLTE2XS4gSSBhbSBkb2luZyB0aGUgYmVzdCB0cmFuc2xhdGlvbiBJIGNhbjouLi4KKyMgVGhlIG9mZmljaWFsIHRpbWUgb2YgdGhlIGNvdW50cnkgd2lsbCBiZSBtb3ZlZCBmb3J3YXJkIGZvciBvbmUgaG91cgorIyBvbiB0aGUgMjQgaG91cnMgb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGggb2YgRmFydmFyZGluIGFuZCB3aWxsCisjIGJlIGNoYW5nZWQgYmFjayB0byBpdHMgcHJldmlvdXMgc3RhdGUgb24gdGhlIDI0IGhvdXJzIG9mIHRoZQorIyB0aGlydGlldGggZGF5IG9mIFNoYWhyaXZhci4KKyMKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUlyYW4JMTk3OAkxOTgwCS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMTk3OAlvbmx5CS0JT2N0CTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMTk3OQlvbmx5CS0JU2VwCTE5CTA6MDAJMAlTCitSdWxlCUlyYW4JMTk4MAlvbmx5CS0JU2VwCTIzCTA6MDAJMAlTCitSdWxlCUlyYW4JMTk5MQlvbmx5CS0JTWF5CSAzCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMTk5MgkxOTk1CS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMTk5MQkxOTk1CS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMTk5Nglvbmx5CS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMTk5Nglvbmx5CS0JU2VwCTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMTk5NwkxOTk5CS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMTk5NwkxOTk5CS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAwMAlvbmx5CS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAwMAlvbmx5CS0JU2VwCTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAwMQkyMDAzCS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAwMQkyMDAzCS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAwNAlvbmx5CS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAwNAlvbmx5CS0JU2VwCTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAwNQlvbmx5CS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAwNQlvbmx5CS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAwOAlvbmx5CS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAwOAlvbmx5CS0JU2VwCTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAwOQkyMDExCS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAwOQkyMDExCS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAxMglvbmx5CS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAxMglvbmx5CS0JU2VwCTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAxMwkyMDE1CS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAxMwkyMDE1CS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAxNglvbmx5CS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAxNglvbmx5CS0JU2VwCTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAxNwkyMDE5CS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAxNwkyMDE5CS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAyMAlvbmx5CS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAyMAlvbmx5CS0JU2VwCTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAyMQkyMDIzCS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAyMQkyMDIzCS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAyNAlvbmx5CS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAyNAlvbmx5CS0JU2VwCTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAyNQkyMDI3CS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAyNQkyMDI3CS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAyOAkyMDI5CS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAyOAkyMDI5CS0JU2VwCTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAzMAkyMDMxCS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAzMAkyMDMxCS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAzMgkyMDMzCS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAzMgkyMDMzCS0JU2VwCTIxCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAzNAkyMDM1CS0JTWFyCTIyCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAzNAkyMDM1CS0JU2VwCTIyCTA6MDAJMAlTCitSdWxlCUlyYW4JMjAzNgkyMDM3CS0JTWFyCTIxCTA6MDAJMTowMAlECitSdWxlCUlyYW4JMjAzNgkyMDM3CS0JU2VwCTIxCTA6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvVGVocmFuCTM6MjU6NDQJLQlMTVQJMTkxNgorCQkJMzoyNTo0NAktCVRNVAkxOTQ2CSMgVGVocmFuIE1lYW4gVGltZQorCQkJMzozMAktCUlSU1QJMTk3NyBOb3YKKwkJCTQ6MDAJSXJhbglJUiVzVAkxOTc5CisJCQkzOjMwCUlyYW4JSVIlc1QKKworCisjIElyYXEKKyMKKyMgRnJvbSBKb25hdGhhbiBMZW5ub3ggKDIwMDAtMDYtMTIpOgorIyBBbiBhcnRpY2xlIGluIHRoaXMgd2VlaydzIEVjb25vbWlzdCAoIkluc2lkZSB0aGUgU2FkZGFtLWZyZWUgem9uZSIsIHAuIDUwIGluCisjIHRoZSBVLlMuIGVkaXRpb24pIG9uIHRoZSBJcmFxaSBLdXJkcyBjb250YWlucyBhIHBhcmFncmFwaDoKKyMgIlRoZSB0aHJlZSBub3J0aGVybiBwcm92aW5jZXMgLi4uIHN3aXRjaGVkIHRoZWlyIGNsb2NrcyB0aGlzIHNwcmluZyBhbmQKKyMgYXJlIGFuIGhvdXIgYWhlYWQgb2YgQmFnaGRhZC4iCisjCisjIEJ1dCBSaXZlcyBNY0RvdyAoMjAwMC0wNi0xOCkgcXVvdGVzIGEgY29udGFjdCBpbiBJcmFxaS1LdXJkaXN0YW4gYXMgZm9sbG93czoKKyMgSW4gdGhlIHBhc3QsIHNvbWUgS3VyZGlzaCBuYXRpb25hbGlzdHMsIGFzIGEgcHJvdGVzdCB0byB0aGUgSXJhcWkKKyMgR292ZXJubWVudCwgZGlkIG5vdCBhZGhlcmUgdG8gZGF5bGlnaHQgc2F2aW5nIHRpbWUuICBUaGV5IHJlZmVycmVkCisjIHRvIGRheWxpZ2h0IHNhdmluZyBhcyBTYWRkYW0gdGltZS4gIEJ1dCwgYXMgb2YgdG9kYXksIHRoZSB0aW1lIHpvbmUKKyMgaW4gSXJhcWktS3VyZGlzdGFuIGlzIG9uIHN0YW5kYXJkIHRpbWUgd2l0aCBCYWdoZGFkLCBJcmFxLgorIworIyBTbyB3ZSdsbCBpZ25vcmUgdGhlIEVjb25vbWlzdCdzIGNsYWltLgorCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA4LTAzLTEwKToKKyMgVGhlIGNhYmluZXQgaW4gSXJhcSBhYm9saXNoZWQgRFNUIGxhc3Qgd2VlaywgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcKKyMgbmV3cyBzb3VyY2VzIChpbiBBcmFiaWMpOgorIyA8YSBocmVmPSJodHRwOi8vd3d3LmFsamVlcmFuLm5ldC93ZXNpbWFfYXJ0aWNsZXMvbmV3cy0yMDA4MDMwNS05ODYwMi5odG1sIj4KKyMgaHR0cDovL3d3dy5hbGplZXJhbi5uZXQvd2VzaW1hX2FydGljbGVzL25ld3MtMjAwODAzMDUtOTg2MDIuaHRtbAorIyA8L2E+CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXN3YXRhbGlyYXEuaW5mby9sb29rL2FydGljbGUudHBsP2lkPTIwNDcmSWRMYW5ndWFnZT0xNyZJZFB1YmxpY2F0aW9uPTQmTnJBcnRpY2xlPTcxNzQzJk5ySXNzdWU9MSZOclNlY3Rpb249MTAiPgorIyBodHRwOi8vd3d3LmFzd2F0YWxpcmFxLmluZm8vbG9vay9hcnRpY2xlLnRwbD9pZD0yMDQ3JklkTGFuZ3VhZ2U9MTcmSWRQdWJsaWNhdGlvbj00Jk5yQXJ0aWNsZT03MTc0MyZOcklzc3VlPTEmTnJTZWN0aW9uPTEwCisjIDwvYT4KKyMKKyMgV2UgaGF2ZSBwdWJsaXNoZWQgYSBzaG9ydCBhcnRpY2xlIGluIEVuZ2xpc2ggYWJvdXQgdGhlIGNoYW5nZToKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vbmV3cy90aW1lL2lyYXEtZHVtcHMtZGF5bGlnaHQtc2F2aW5nLmh0bWwiPgorIyBodHRwOi8vd3d3LnRpbWVhbmRkYXRlLmNvbS9uZXdzL3RpbWUvaXJhcS1kdW1wcy1kYXlsaWdodC1zYXZpbmcuaHRtbAorIyA8L2E+CisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUlyYXEJMTk4Mglvbmx5CS0JTWF5CTEJMDowMAkxOjAwCUQKK1J1bGUJSXJhcQkxOTgyCTE5ODQJLQlPY3QJMQkwOjAwCTAJUworUnVsZQlJcmFxCTE5ODMJb25seQktCU1hcgkzMQkwOjAwCTE6MDAJRAorUnVsZQlJcmFxCTE5ODQJMTk4NQktCUFwcgkxCTA6MDAJMTowMAlECitSdWxlCUlyYXEJMTk4NQkxOTkwCS0JU2VwCWxhc3RTdW4JMTowMHMJMAlTCitSdWxlCUlyYXEJMTk4NgkxOTkwCS0JTWFyCWxhc3RTdW4JMTowMHMJMTowMAlECisjIElBVEEgU1NJTSAoMTk5MS8xOTk2KSBzYXlzIEFwciAxIDEyOjAxYW0gVVRDOyBndWVzcyB0aGUgYDowMScgaXMgYSB0eXBvLgorIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IElyYXEgZGlkIG5vdCBvYnNlcnZlIERTVCAxOTkyLzE5OTc7IGlnbm9yZSB0aGlzLgorIworUnVsZQlJcmFxCTE5OTEJMjAwNwktCUFwcgkgMQkzOjAwcwkxOjAwCUQKK1J1bGUJSXJhcQkxOTkxCTIwMDcJLQlPY3QJIDEJMzowMHMJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvQmFnaGRhZAkyOjU3OjQwCS0JTE1UCTE4OTAKKwkJCTI6NTc6MzYJLQlCTVQJMTkxOAkgICAgIyBCYWdoZGFkIE1lYW4gVGltZT8KKwkJCTM6MDAJLQlBU1QJMTk4MiBNYXkKKwkJCTM6MDAJSXJhcQlBJXNUCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIElzcmFlbAorCisjIEZyb20gRXBocmFpbSBTaWx2ZXJiZXJnICgyMDAxLTAxLTExKToKKyMKKyMgSSBjb2luZWQgIklTVC9JRFQiIGNpcmNhIDE5ODguICBVbnRpbCB0aGVuIHRoZXJlIHdlcmUgdGhyZWUKKyMgZGlmZmVyZW50IGFiYnJldmlhdGlvbnMgaW4gdXNlOgorIworIyBKU1QgIEplcnVzYWxlbSBTdGFuZGFyZCBUaW1lIFtEYW5ueSBCcmFuaXNzLCBIZWJyZXcgVW5pdmVyc2l0eV0KKyMgSVpUICBJc3JhZWwgWm9uYWwgKHNpYykgVGltZSBbUHJvZi4gSGFpbSBQYXBvLCBUZWNobmlvbl0KKyMgRUVTVCBFYXN0ZXJuIEV1cm9wZSBTdGFuZGFyZCBUaW1lIFt1c2VkIGJ5IGFsbW9zdCBldmVyeW9uZSBlbHNlXQorIworIyBTaW5jZSB0aW1lem9uZXMgc2hvdWxkIGJlIGNhbGxlZCBieSBjb3VudHJ5IGFuZCBub3QgY2FwaXRhbCBjaXRpZXMsCisjIEkgcnVsZWQgb3V0IEpTVC4gIEFzIElzcmFlbCBpcyBpbiBBc2lhIE1pbm9yIGFuZCBub3QgRWFzdGVybiBFdXJvcGUsCisjIEVFU1Qgd2FzIGVxdWFsbHkgdW5hY2NlcHRhYmxlLiAgU2luY2UgInpvbmFsIiB3YXMgbm90IGNvbXBhdGlibGUgd2l0aAorIyBhbnkgb3RoZXIgdGltZXpvbmUgYWJicmV2aWF0aW9uLCBJIGZlbHQgdGhhdCAnSVNUJyB3YXMgdGhlIHdheSB0byBnbworIyBhbmQsIGluZGVlZCwgaXQgaGFzIHJlY2VpdmVkIGFsbW9zdCB1bml2ZXJzYWwgYWNjZXB0YW5jZSBpbiB0aW1lem9uZQorIyBzZXR0aW5ncyBpbiBJc3JhZWxpIGNvbXB1dGVycy4KKyMKKyMgSW4gYW55IGNhc2UsIEkgYW0gaGFwcHkgdG8gc2hhcmUgdGltZXpvbmUgYWJicmV2aWF0aW9ucyB3aXRoIEluZGlhLAorIyBoaWdoIG9uIG15IGZhdm9yaXRlLWNvdW50cnkgbGlzdCAoYW5kIG5vdCBvbmx5IGJlY2F1c2UgbXkgd2lmZSdzCisjIGZhbWlseSBpcyBmcm9tIEluZGlhKS4KKworIyBGcm9tIFNoYW5rcyAmIFBvdHRlbmdlcjoKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCVppb24JMTk0MAlvbmx5CS0JSnVuCSAxCTA6MDAJMTowMAlECitSdWxlCVppb24JMTk0MgkxOTQ0CS0JTm92CSAxCTA6MDAJMAlTCitSdWxlCVppb24JMTk0Mwlvbmx5CS0JQXByCSAxCTI6MDAJMTowMAlECitSdWxlCVppb24JMTk0NAlvbmx5CS0JQXByCSAxCTA6MDAJMTowMAlECitSdWxlCVppb24JMTk0NQlvbmx5CS0JQXByCTE2CTA6MDAJMTowMAlECitSdWxlCVppb24JMTk0NQlvbmx5CS0JTm92CSAxCTI6MDAJMAlTCitSdWxlCVppb24JMTk0Nglvbmx5CS0JQXByCTE2CTI6MDAJMTowMAlECitSdWxlCVppb24JMTk0Nglvbmx5CS0JTm92CSAxCTA6MDAJMAlTCitSdWxlCVppb24JMTk0OAlvbmx5CS0JTWF5CTIzCTA6MDAJMjowMAlERAorUnVsZQlaaW9uCTE5NDgJb25seQktCVNlcAkgMQkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NDgJMTk0OQktCU5vdgkgMQkyOjAwCTAJUworUnVsZQlaaW9uCTE5NDkJb25seQktCU1heQkgMQkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NTAJb25seQktCUFwcgkxNgkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NTAJb25seQktCVNlcAkxNQkzOjAwCTAJUworUnVsZQlaaW9uCTE5NTEJb25seQktCUFwcgkgMQkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NTEJb25seQktCU5vdgkxMQkzOjAwCTAJUworUnVsZQlaaW9uCTE5NTIJb25seQktCUFwcgkyMAkyOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NTIJb25seQktCU9jdAkxOQkzOjAwCTAJUworUnVsZQlaaW9uCTE5NTMJb25seQktCUFwcgkxMgkyOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NTMJb25seQktCVNlcAkxMwkzOjAwCTAJUworUnVsZQlaaW9uCTE5NTQJb25seQktCUp1bgkxMwkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NTQJb25seQktCVNlcAkxMgkwOjAwCTAJUworUnVsZQlaaW9uCTE5NTUJb25seQktCUp1bgkxMQkyOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NTUJb25seQktCVNlcAkxMQkwOjAwCTAJUworUnVsZQlaaW9uCTE5NTYJb25seQktCUp1bgkgMwkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NTYJb25seQktCVNlcAkzMAkzOjAwCTAJUworUnVsZQlaaW9uCTE5NTcJb25seQktCUFwcgkyOQkyOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NTcJb25seQktCVNlcAkyMgkwOjAwCTAJUworUnVsZQlaaW9uCTE5NzQJb25seQktCUp1bAkgNwkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NzQJb25seQktCU9jdAkxMwkwOjAwCTAJUworUnVsZQlaaW9uCTE5NzUJb25seQktCUFwcgkyMAkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5NzUJb25seQktCUF1ZwkzMQkwOjAwCTAJUworUnVsZQlaaW9uCTE5ODUJb25seQktCUFwcgkxNAkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5ODUJb25seQktCVNlcAkxNQkwOjAwCTAJUworUnVsZQlaaW9uCTE5ODYJb25seQktCU1heQkxOAkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5ODYJb25seQktCVNlcAkgNwkwOjAwCTAJUworUnVsZQlaaW9uCTE5ODcJb25seQktCUFwcgkxNQkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5ODcJb25seQktCVNlcAkxMwkwOjAwCTAJUworUnVsZQlaaW9uCTE5ODgJb25seQktCUFwcgkgOQkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5ODgJb25seQktCVNlcAkgMwkwOjAwCTAJUworCisjIEZyb20gRXBocmFpbSBTaWx2ZXJiZXJnCisjICgxOTk3LTAzLTA0LCAxOTk4LTAzLTE2LCAxOTk4LTEyLTI4LCAyMDAwLTAxLTE3LCAyMDAwLTA3LTI1LCAyMDA0LTEyLTIyLAorIyBhbmQgMjAwNS0wMi0xNyk6CisKKyMgQWNjb3JkaW5nIHRvIHRoZSBPZmZpY2Ugb2YgdGhlIFNlY3JldGFyeSBHZW5lcmFsIG9mIHRoZSBNaW5pc3RyeSBvZgorIyBJbnRlcmlvciwgdGhlcmUgaXMgTk8gc2V0IHJ1bGUgZm9yIERheWxpZ2h0LVNhdmluZ3MvU3RhbmRhcmQgdGltZSBjaGFuZ2VzLgorIyBPbmUgdGhpbmcgaXMgZW50cmVuY2hlZCBpbiBsYXcsIGhvd2V2ZXI6IHRoYXQgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAxNTAKKyMgZGF5cyBvZiBkYXlsaWdodCBzYXZpbmdzIHRpbWUgYW5udWFsbHkuICBGcm9tIDE5OTMtMTk5OCwgdGhlIGNoYW5nZSB0bworIyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgd2FzIG9uIGEgRnJpZGF5IG1vcm5pbmcgZnJvbSBtaWRuaWdodCBJU1QgdG8KKyMgMSBhLm0gSURUOyB1cCB1bnRpbCAxOTk4LCB0aGUgY2hhbmdlIGJhY2sgdG8gc3RhbmRhcmQgdGltZSB3YXMgb24gYQorIyBTYXR1cmRheSBuaWdodCBmcm9tIG1pZG5pZ2h0IGRheWxpZ2h0IHNhdmluZ3MgdGltZSB0byAxMSBwLm0uIHN0YW5kYXJkCisjIHRpbWUuICAxOTk2IGlzIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgd2hlcmUgdGhlIGNoYW5nZSBiYWNrIHRvIHN0YW5kYXJkCisjIHRpbWUgdG9vayBwbGFjZSBvbiBTdW5kYXkgbmlnaHQgaW5zdGVhZCBvZiBTYXR1cmRheSBuaWdodCB0byBhdm9pZAorIyBjb25mbGljdHMgd2l0aCB0aGUgSmV3aXNoIE5ldyBZZWFyLiAgSW4gMTk5OSwgdGhlIGNoYW5nZSB0bworIyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgd2FzIHN0aWxsIG9uIGEgRnJpZGF5IG1vcm5pbmcgYnV0IGZyb20KKyMgMiBhLm0uIElTVCB0byAzIGEubS4gSURUOyBmdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBiYWNrIHRvIHN0YW5kYXJkIHRpbWUKKyMgd2FzIGFsc28gb24gYSBGcmlkYXkgbW9ybmluZyBmcm9tIDIgYS5tLiBJRFQgdG8gMSBhLm0uIElTVCBmb3IKKyMgMTk5OSBvbmx5LiAgSW4gdGhlIHllYXIgMjAwMCwgdGhlIGNoYW5nZSB0byBkYXlsaWdodCBzYXZpbmdzIHRpbWUgd2FzCisjIHNpbWlsYXIgdG8gMTk5OSwgYnV0IGFsdGhvdWdoIHRoZSBjaGFuZ2UgYmFjayB3aWxsIGJlIG9uIGEgRnJpZGF5LCBpdAorIyB3aWxsIHRha2UgcGxhY2UgZnJvbSAxIGEubS4gSURUIHRvIG1pZG5pZ2h0IElTVC4gIFN0YXJ0aW5nIGluIDIwMDEsIGFsbAorIyBjaGFuZ2VzIHRvL2Zyb20gd2lsbCB0YWtlIHBsYWNlIGF0IDEgYS5tLiBvbGQgdGltZSwgYnV0IG5vdyB0aGVyZSBpcyBubworIyBydWxlIGFzIHRvIHdoYXQgZGF5IG9mIHRoZSB3ZWVrIGl0IHdpbGwgdGFrZSBwbGFjZSBpbiBhcyB0aGUgc3RhcnQgZGF0ZQorIyAoZXhjZXB0IGluIDIwMDMpIGlzIHRoZSBuaWdodCBhZnRlciB0aGUgUGFzc292ZXIgU2VkZXIgKGkuZS4gdGhlIGV2ZQorIyBvZiB0aGUgMTZ0aCBvZiBOaXNhbiBpbiB0aGUgbHVuYXIgSGVicmV3IGNhbGVuZGFyKSBhbmQgdGhlIGVuZCBkYXRlCisjIChleGNlcHQgaW4gMjAwMikgaXMgdGhyZWUgbmlnaHRzIGJlZm9yZSBZb20gS2lwcHVyIFtEYXkgb2YgQXRvbmVtZW50XQorIyAodGhlIGV2ZSBvZiB0aGUgN3RoIG9mIFRpc2hyZWkgaW4gdGhlIGx1bmFyIEhlYnJldyBjYWxlbmRhcikuCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCVppb24JMTk4OQlvbmx5CS0JQXByCTMwCTA6MDAJMTowMAlECitSdWxlCVppb24JMTk4OQlvbmx5CS0JU2VwCSAzCTA6MDAJMAlTCitSdWxlCVppb24JMTk5MAlvbmx5CS0JTWFyCTI1CTA6MDAJMTowMAlECitSdWxlCVppb24JMTk5MAlvbmx5CS0JQXVnCTI2CTA6MDAJMAlTCitSdWxlCVppb24JMTk5MQlvbmx5CS0JTWFyCTI0CTA6MDAJMTowMAlECitSdWxlCVppb24JMTk5MQlvbmx5CS0JU2VwCSAxCTA6MDAJMAlTCitSdWxlCVppb24JMTk5Mglvbmx5CS0JTWFyCTI5CTA6MDAJMTowMAlECitSdWxlCVppb24JMTk5Mglvbmx5CS0JU2VwCSA2CTA6MDAJMAlTCitSdWxlCVppb24JMTk5Mwlvbmx5CS0JQXByCSAyCTA6MDAJMTowMAlECitSdWxlCVppb24JMTk5Mwlvbmx5CS0JU2VwCSA1CTA6MDAJMAlTCisKKyMgVGhlIGRhdGVzIGZvciAxOTk0LTE5OTUgd2VyZSBvYnRhaW5lZCBmcm9tIE9mZmljZSBvZiB0aGUgU3Bva2Vzd29tYW4gZm9yIHRoZQorIyBNaW5pc3RyeSBvZiBJbnRlcmlvciwgSmVydXNhbGVtLCBJc3JhZWwuICBUaGUgc3Bva2Vzd29tYW4gY2FuIGJlIHJlYWNoZWQgYnkKKyMgY2FsbGluZyB0aGUgb2ZmaWNlIGRpcmVjdGx5IGF0IDk3Mi0yLTY3MDE0NDcgb3IgOTcyLTItNjcwMTQ0OC4KKworIyBSdWxlCU5BTUUgICAgRlJPTSAgICBUTyAgICAgIFRZUEUgICAgSU4gICAgICBPTiAgICAgIEFUICAgICAgU0FWRSAgICBMRVRURVIvUworUnVsZQlaaW9uCTE5OTQJb25seQktCUFwcgkgMQkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5OTQJb25seQktCUF1ZwkyOAkwOjAwCTAJUworUnVsZQlaaW9uCTE5OTUJb25seQktCU1hcgkzMQkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5OTUJb25seQktCVNlcAkgMwkwOjAwCTAJUworCisjIFRoZSBkYXRlcyBmb3IgMTk5NiB3ZXJlIGRldGVybWluZWQgYnkgdGhlIE1pbmlzdGVyIG9mIEludGVyaW9yIG9mIHRoZQorIyB0aW1lLCBIYWltIFJhbW9uLiAgVGhlIG9mZmljaWFsIGFubm91bmNlbWVudCByZWdhcmRpbmcgMTk5Ni0xOTk4CisjICh3aXRoIHRoZSBkYXRlcyBmb3IgMTk5Ny0xOTk4IG5vIGxvbmdlciBiZWluZyByZWxldmFudCkgY2FuIGJlIHZpZXdlZCBhdDoKKyMKKyMgICBmdHA6Ly9mdHAuY3MuaHVqaS5hYy5pbC9wdWIvdHovYW5ub3VuY2VtZW50cy8xOTk2LTE5OTgucmFtb24ucHMuZ3oKKyMKKyMgVGhlIGRhdGVzIGZvciAxOTk3LTE5OTggd2VyZSBhbHRlcmVkIGJ5IGhpcyBzdWNjZXNzb3IsIFJhYmJpIEVsaSBTdWlzc2EuCisjCisjIFRoZSBvZmZpY2lhbCBhbm5vdW5jZW1lbnRzIGZvciB0aGUgeWVhcnMgMTk5Ny0xOTk5IGNhbiBiZSB2aWV3ZWQgYXQ6CisjCisjICAgZnRwOi8vZnRwLmNzLmh1amkuYWMuaWwvcHViL3R6L2Fubm91bmNlbWVudHMvWVlZWS5wcy5negorIworIyAgICAgICB3aGVyZSBZWVlZIGlzIHRoZSByZWxldmFudCB5ZWFyLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlaaW9uCTE5OTYJb25seQktCU1hcgkxNQkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5OTYJb25seQktCVNlcAkxNgkwOjAwCTAJUworUnVsZQlaaW9uCTE5OTcJb25seQktCU1hcgkyMQkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5OTcJb25seQktCVNlcAkxNAkwOjAwCTAJUworUnVsZQlaaW9uCTE5OTgJb25seQktCU1hcgkyMAkwOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5OTgJb25seQktCVNlcAkgNgkwOjAwCTAJUworUnVsZQlaaW9uCTE5OTkJb25seQktCUFwcgkgMgkyOjAwCTE6MDAJRAorUnVsZQlaaW9uCTE5OTkJb25seQktCVNlcAkgMwkyOjAwCTAJUworCisjIFRoZSBLbmVzc2V0IEludGVyaW9yIENvbW1pdHRlZSBoYXMgY2hhbmdlZCB0aGUgZGF0ZXMgZm9yIDIwMDAgZm9yCisjIHRoZSB0aGlyZCB0aW1lIGluIGp1c3Qgb3ZlciBhIHllYXIgYW5kIGhhdmUgc2V0IG5ldyBkYXRlcyBmb3IgdGhlCisjIHllYXJzIDIwMDEtMjAwNCBhcyB3ZWxsLgorIworIyBUaGUgb2ZmaWNpYWwgYW5ub3VuY2VtZW50IGZvciB0aGUgc3RhcnQgZGF0ZSBvZiAyMDAwIGNhbiBiZSB2aWV3ZWQgYXQ6CisjCisjCWZ0cDovL2Z0cC5jcy5odWppLmFjLmlsL3B1Yi90ei9hbm5vdW5jZW1lbnRzLzIwMDAtc3RhcnQucHMuZ3oKKyMKKyMgVGhlIG9mZmljaWFsIGFubm91bmNlbWVudCBmb3IgdGhlIGVuZCBkYXRlIG9mIDIwMDAgYW5kIHRoZSBkYXRlcworIyBmb3IgdGhlIHllYXJzIDIwMDEtMjAwNCBjYW4gYmUgdmlld2VkIGF0OgorIworIwlmdHA6Ly9mdHAuY3MuaHVqaS5hYy5pbC9wdWIvdHovYW5ub3VuY2VtZW50cy8yMDAwLTIwMDQucHMuZ3oKKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJWmlvbgkyMDAwCW9ubHkJLQlBcHIJMTQJMjowMAkxOjAwCUQKK1J1bGUJWmlvbgkyMDAwCW9ubHkJLQlPY3QJIDYJMTowMAkwCVMKK1J1bGUJWmlvbgkyMDAxCW9ubHkJLQlBcHIJIDkJMTowMAkxOjAwCUQKK1J1bGUJWmlvbgkyMDAxCW9ubHkJLQlTZXAJMjQJMTowMAkwCVMKK1J1bGUJWmlvbgkyMDAyCW9ubHkJLQlNYXIJMjkJMTowMAkxOjAwCUQKK1J1bGUJWmlvbgkyMDAyCW9ubHkJLQlPY3QJIDcJMTowMAkwCVMKK1J1bGUJWmlvbgkyMDAzCW9ubHkJLQlNYXIJMjgJMTowMAkxOjAwCUQKK1J1bGUJWmlvbgkyMDAzCW9ubHkJLQlPY3QJIDMJMTowMAkwCVMKK1J1bGUJWmlvbgkyMDA0CW9ubHkJLQlBcHIJIDcJMTowMAkxOjAwCUQKK1J1bGUJWmlvbgkyMDA0CW9ubHkJLQlTZXAJMjIJMTowMAkwCVMKKworIyBUaGUgcHJvcG9zZWQgbGF3IGFncmVlZCB1cG9uIGJ5IHRoZSBLbmVzc2V0IEludGVyaW9yIENvbW1pdHRlZSBvbgorIyAyMDA1LTAyLTE0IGlzIHRoYXQsIGZvciAyMDA1IGFuZCBiZXlvbmQsIERTVCBzdGFydHMgYXQgMDI6MDAgdGhlCisjIGxhc3QgRnJpZGF5IGJlZm9yZSBBcHJpbCAybmQgKGkuZS4gdGhlIGxhc3QgRnJpZGF5IGluIE1hcmNoIG9yIEFwcmlsCisjIDFzdCBpdHNlbGYgaWYgaXQgZmFsbHMgb24gYSBGcmlkYXkpIGFuZCBlbmRzIGF0IDAyOjAwIG9uIHRoZSBTYXR1cmRheQorIyBuaWdodCBfYmVmb3JlXyB0aGUgZmFzdCBvZiBZb20gS2lwcHVyLgorIworIyBUaG9zZSB3aG8gY2FuIHJlYWQgSGVicmV3IGNhbiB2aWV3IHRoZSBhbm5vdW5jZW1lbnQgYXQ6CisjCisjCWZ0cDovL2Z0cC5jcy5odWppLmFjLmlsL3B1Yi90ei9hbm5vdW5jZW1lbnRzLzIwMDUrYmV5b25kLnBzCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNS0wMi0yMik6CisjIEkgdXNlZCBFcGhyYWltIFNpbHZlcmJlcmcncyBkc3QtaXNyYWVsLmVsIHByb2dyYW0KKyMgPGZ0cDovL2Z0cC5jcy5odWppLmFjLmlsL3B1Yi90ei9zb2Z0d2FyZS9kc3QtaXNyYWVsLmVsPiAoMjAwNS0wMi0yMCkKKyMgYWxvbmcgd2l0aCBFZCBSZWluZ29sZCdzIGNhbC1oZWJyZXcgaW4gR05VIEVtYWNzIDIxLjQsCisjIHRvIGdlbmVyYXRlIHRoZSB0cmFuc2l0aW9ucyBpbiB0aGlzIGxpc3QuCisjIChJIHJlcGxhY2VkICJsYXN0RnJpIiB3aXRoICJGcmk+PTI2IiBieSBoYW5kLikKKyMgVGhlIHNwcmluZyB0cmFuc2l0aW9ucyBiZWxvdyBhbGwgY29ycmVzcG9uZCB0byB0aGUgZm9sbG93aW5nIFJ1bGU6CisjCisjIFJ1bGUJWmlvbgkyMDA1CW1heAktCU1hcglGcmk+PTI2CTI6MDAJMTowMAlECisjCisjIGJ1dCBvbGRlciB6aWMgaW1wbGVtZW50YXRpb25zIChlLmcuLCBTb2xhcmlzIDgpIGRvIG5vdCBzdXBwb3J0CisjICJGcmk+PTI2IiB0byBtZWFuIEFwcmlsIDEgaW4geWVhcnMgbGlrZSAyMDA1LCBzbyBmb3Igbm93IHdlIGxpc3QgdGhlCisjIHNwcmluZ3RpbWUgdHJhbnNpdGlvbnMgZXhwbGljaXRseS4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJWmlvbgkyMDA1CW9ubHkJLQlBcHIJIDEJMjowMAkxOjAwCUQKK1J1bGUJWmlvbgkyMDA1CW9ubHkJLQlPY3QJIDkJMjowMAkwCVMKK1J1bGUJWmlvbgkyMDA2CTIwMTAJLQlNYXIJRnJpPj0yNgkyOjAwCTE6MDAJRAorUnVsZQlaaW9uCTIwMDYJb25seQktCU9jdAkgMQkyOjAwCTAJUworUnVsZQlaaW9uCTIwMDcJb25seQktCVNlcAkxNgkyOjAwCTAJUworUnVsZQlaaW9uCTIwMDgJb25seQktCU9jdAkgNQkyOjAwCTAJUworUnVsZQlaaW9uCTIwMDkJb25seQktCVNlcAkyNwkyOjAwCTAJUworUnVsZQlaaW9uCTIwMTAJb25seQktCVNlcAkxMgkyOjAwCTAJUworUnVsZQlaaW9uCTIwMTEJb25seQktCUFwcgkgMQkyOjAwCTE6MDAJRAorUnVsZQlaaW9uCTIwMTEJb25seQktCU9jdAkgMgkyOjAwCTAJUworUnVsZQlaaW9uCTIwMTIJMjAxNQktCU1hcglGcmk+PTI2CTI6MDAJMTowMAlECitSdWxlCVppb24JMjAxMglvbmx5CS0JU2VwCTIzCTI6MDAJMAlTCitSdWxlCVppb24JMjAxMwlvbmx5CS0JU2VwCSA4CTI6MDAJMAlTCitSdWxlCVppb24JMjAxNAlvbmx5CS0JU2VwCTI4CTI6MDAJMAlTCitSdWxlCVppb24JMjAxNQlvbmx5CS0JU2VwCTIwCTI6MDAJMAlTCitSdWxlCVppb24JMjAxNglvbmx5CS0JQXByCSAxCTI6MDAJMTowMAlECitSdWxlCVppb24JMjAxNglvbmx5CS0JT2N0CSA5CTI6MDAJMAlTCitSdWxlCVppb24JMjAxNwkyMDIxCS0JTWFyCUZyaT49MjYJMjowMAkxOjAwCUQKK1J1bGUJWmlvbgkyMDE3CW9ubHkJLQlTZXAJMjQJMjowMAkwCVMKK1J1bGUJWmlvbgkyMDE4CW9ubHkJLQlTZXAJMTYJMjowMAkwCVMKK1J1bGUJWmlvbgkyMDE5CW9ubHkJLQlPY3QJIDYJMjowMAkwCVMKK1J1bGUJWmlvbgkyMDIwCW9ubHkJLQlTZXAJMjcJMjowMAkwCVMKK1J1bGUJWmlvbgkyMDIxCW9ubHkJLQlTZXAJMTIJMjowMAkwCVMKK1J1bGUJWmlvbgkyMDIyCW9ubHkJLQlBcHIJIDEJMjowMAkxOjAwCUQKK1J1bGUJWmlvbgkyMDIyCW9ubHkJLQlPY3QJIDIJMjowMAkwCVMKK1J1bGUJWmlvbgkyMDIzCTIwMzIJLQlNYXIJRnJpPj0yNgkyOjAwCTE6MDAJRAorUnVsZQlaaW9uCTIwMjMJb25seQktCVNlcAkyNAkyOjAwCTAJUworUnVsZQlaaW9uCTIwMjQJb25seQktCU9jdAkgNgkyOjAwCTAJUworUnVsZQlaaW9uCTIwMjUJb25seQktCVNlcAkyOAkyOjAwCTAJUworUnVsZQlaaW9uCTIwMjYJb25seQktCVNlcAkyMAkyOjAwCTAJUworUnVsZQlaaW9uCTIwMjcJb25seQktCU9jdAkxMAkyOjAwCTAJUworUnVsZQlaaW9uCTIwMjgJb25seQktCVNlcAkyNAkyOjAwCTAJUworUnVsZQlaaW9uCTIwMjkJb25seQktCVNlcAkxNgkyOjAwCTAJUworUnVsZQlaaW9uCTIwMzAJb25seQktCU9jdAkgNgkyOjAwCTAJUworUnVsZQlaaW9uCTIwMzEJb25seQktCVNlcAkyMQkyOjAwCTAJUworUnVsZQlaaW9uCTIwMzIJb25seQktCVNlcAkxMgkyOjAwCTAJUworUnVsZQlaaW9uCTIwMzMJb25seQktCUFwcgkgMQkyOjAwCTE6MDAJRAorUnVsZQlaaW9uCTIwMzMJb25seQktCU9jdAkgMgkyOjAwCTAJUworUnVsZQlaaW9uCTIwMzQJMjAzNwktCU1hcglGcmk+PTI2CTI6MDAJMTowMAlECitSdWxlCVppb24JMjAzNAlvbmx5CS0JU2VwCTE3CTI6MDAJMAlTCitSdWxlCVppb24JMjAzNQlvbmx5CS0JT2N0CSA3CTI6MDAJMAlTCitSdWxlCVppb24JMjAzNglvbmx5CS0JU2VwCTI4CTI6MDAJMAlTCitSdWxlCVppb24JMjAzNwlvbmx5CS0JU2VwCTEzCTI6MDAJMAlTCisKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9KZXJ1c2FsZW0JMjoyMDo1NiAtCUxNVAkxODgwCisJCQkyOjIwOjQwCS0JSk1UCTE5MTgJIyBKZXJ1c2FsZW0gTWVhbiBUaW1lPworCQkJMjowMAlaaW9uCUklc1QKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBKYXBhbgorCisjIGA5OjAwJyBhbmQgYEpTVCcgaXMgZnJvbSBHdXkgSGFycmlzLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTUtMDMtMDYpOgorIyBUb2RheSdzIF9Bc2FoaSBFdmVuaW5nIE5ld3NfIChwYWdlIDQpIHJlcG9ydHMgdGhhdCBKYXBhbiBoYWQKKyMgZGF5bGlnaHQgc2F2aW5nIGJldHdlZW4gMTk0OCBhbmQgMTk1MSwgYnV0IGBgdGhlIHN5c3RlbSB3YXMgZGlzY29udGludWVkCisjIGJlY2F1c2UgdGhlIHB1YmxpYyBiZWxpZXZlZCBpdCB3b3VsZCBsZWFkIHRvIGxvbmdlciB3b3JraW5nIGhvdXJzLicnCisKKyMgRnJvbSBNYXl1bWkgTmVnaXNoaSBpbiB0aGUgMjAwNS0wOC0xMCBKYXBhbiBUaW1lcworIyA8aHR0cDovL3d3dy5qYXBhbnRpbWVzLmNvLmpwL2NnaS1iaW4vZ2V0YXJ0aWNsZS5wbDU/bm4yMDA1MDgxMGYyLmh0bT46CisjIE9jY3VwYXRpb24gYXV0aG9yaXRpZXMgaW1wb3NlZCBkYXlsaWdodC1zYXZpbmcgdGltZSBvbiBKYXBhbiBvbgorIyBbMTk0OC0wNS0wMV0uLi4uICBCdXQgbGFjayBvZiBwcmlvciBkZWJhdGUgYW5kIHRoZSBleGVjdXRpb24gb2YKKyMgZGF5bGlnaHQtc2F2aW5nIHRpbWUganVzdCB0aHJlZSBkYXlzIGFmdGVyIHRoZSBiaWxsIHdhcyBwYXNzZWQgZ2VuZXJhdGVkCisjIGRlZXAgaGF0cmVkIG9mIHRoZSBjb25jZXB0Li4uLiAgVGhlIERpZXQgdW5jZXJlbW9uaW91c2x5IHBhc3NlZCBhIGJpbGwgdG8KKyMgZHVtcCB0aGUgdW5wb3B1bGFyIHN5c3RlbSBpbiBPY3RvYmVyIDE5NTEsIGxlc3MgdGhhbiBhIG1vbnRoIGFmdGVyIHRoZSBTYW4KKyMgRnJhbmNpc2NvIFBlYWNlIFRyZWF0eSB3YXMgc2lnbmVkLiAgKEEgZ292ZXJubWVudCBwb2xsIGluIDE5NTEgc2hvd2VkIDUzJQorIyBvZiB0aGUgSmFwYW5lc2Ugd2FudGVkIHRvIHNjcmFwIGRheWxpZ2h0LXNhdmluZyB0aW1lLCBhcyBvcHBvc2VkIHRvIDMwJSB3aG8KKyMgd2FudGVkIHRvIGtlZXAgaXQuKQorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgorIyBTaGFua3MgJiBQb3R0ZW5nZXIgd3JpdGUgdGhhdCBEU1QgaW4gSmFwYW4gZHVyaW5nIHRob3NlIHllYXJzIHdhcyBhcyBmb2xsb3dzOgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJSmFwYW4JMTk0OAlvbmx5CS0JTWF5CVN1bj49MQkyOjAwCTE6MDAJRAorUnVsZQlKYXBhbgkxOTQ4CTE5NTEJLQlTZXAJU2F0Pj04CTI6MDAJMAlTCitSdWxlCUphcGFuCTE5NDkJb25seQktCUFwcglTdW4+PTEJMjowMAkxOjAwCUQKK1J1bGUJSmFwYW4JMTk1MAkxOTUxCS0JTWF5CVN1bj49MQkyOjAwCTE6MDAJRAorIyBidXQgdGhlIG9ubHkgbG9jYXRpb25zIHVzaW5nIGl0IChmb3IgYmlydGggY2VydGlmaWNhdGVzLCBwcmVzdW1hYmx5LCBzaW5jZQorIyB0aGVpciBhdWRpZW5jZSBpcyBhc3Ryb2xvZ2Vycykgd2VyZSBVUyBtaWxpdGFyeSBiYXNlcy4gIEZvciBub3csIGFzc3VtZQorIyB0aGF0IGZvciBtb3N0IHB1cnBvc2VzIGRheWxpZ2h0LXNhdmluZyB0aW1lIHdhcyBvYnNlcnZlZDsgb3RoZXJ3aXNlLCB3aGF0CisjIHdvdWxkIGhhdmUgYmVlbiB0aGUgcG9pbnQgb2YgdGhlIDE5NTEgcG9sbD8KKworIyBGcm9tIEhpZGV5dWtpIFN1enVraSAoMTk5OC0xMS0wOSk6CisjICdUb2t5bycgdXN1YWxseSBzdGFuZHMgZm9yIHRoZSBmb3JtZXIgbG9jYXRpb24gb2YgVG9reW8gQXN0cm9ub21pY2FsCisjIE9ic2VydmF0b3J5OiBFIDEzOSA0NCcgNDAiLjkwICg5aCAxOG0gNThzLjcyNyksIE4gMzUgMzknIDE2Ii4wLgorIyBUaGlzIGRhdGEgaXMgZnJvbSAnUmlrYSBOZW5weW91IChDaHJvbm9sb2dpY2FsIFNjaWVudGlmaWMgVGFibGVzKSAxOTk2JworIyBlZGl0ZWQgYnkgTmF0aW9uYWwgQXN0cm9ub21pY2FsIE9ic2VydmF0b3J5IG9mIEphcGFuLi4uLgorIyBKU1QgKEphcGFuIFN0YW5kYXJkIFRpbWUpIGhhcyBiZWVuIHVzZWQgc2luY2UgMTg4OC0wMS0wMSAwMDowMCAoSlNUKS4KKyMgVGhlIGxhdyBpcyBlbmFjdGVkIG9uIDE4ODYtMDctMDcuCisKKyMgRnJvbSBIaWRleXVraSBTdXp1a2kgKDE5OTgtMTEtMTYpOgorIyBUaGUgb3JkaW5hbmNlIE5vLiA1MSAoMTg4NikgZXN0YWJsaXNoZWQgInN0YW5kYXJkIHRpbWUiIGluIEphcGFuLAorIyB3aGljaCBzdGFuZHMgZm9yIHRoZSB0aW1lIG9uIEUgMTM1IGRlZ3JlZS4KKyMgSW4gdGhlIG9yZGluYW5jZSBOby4gMTY3ICgxODk1KSwgInN0YW5kYXJkIHRpbWUiIHdhcyByZW5hbWVkIHRvICJjZW50cmFsCisjIHN0YW5kYXJkIHRpbWUiLiAgQW5kIHRoZSBzYW1lIG9yZGluYW5jZSBhbHNvIGVzdGFibGlzaGVkICJ3ZXN0ZXJuIHN0YW5kYXJkCisjIHRpbWUiLCB3aGljaCBzdGFuZHMgZm9yIHRoZSB0aW1lIG9uIEUgMTIwIGRlZ3JlZS4uLi4gIEJ1dCAid2VzdGVybiBzdGFuZGFyZAorIyB0aW1lIiB3YXMgYWJvbGlzaGVkIGluIHRoZSBvcmRpbmFuY2UgTm8uIDUyOSAoMTkzNykuICBJbiB0aGUgb3JkaW5hbmNlIE5vLgorIyAxNjcsIHRoZXJlIGlzIG5vIG1lbnRpb24gcmVnYXJkaW5nIGZvciB3aGF0IHBsYWNlIHdlc3Rlcm4gc3RhbmRhcmQgdGltZSBpcworIyBzdGFuZGFyZC4uLi4KKyMKKyMgSSB3cm90ZSAib3JkaW5hbmNlIiBhYm92ZSwgYnV0IEkgZG9uJ3Qga25vdyBob3cgdG8gdHJhbnNsYXRlLgorIyBJbiBKYXBhbmVzZSBpdCdzICJjaG9rdXJlaSIsIHdoaWNoIG1lYW5zIG9yZGluYW5jZSBmcm9tIGVtcGVyb3IuCisKKyMgU2hhbmtzICYgUG90dGVuZ2VyIGNsYWltIEpTVCBpbiB1c2Ugc2luY2UgMTg5NiwgYW5kIHRoYXQgYSBmZXcKKyMgcGxhY2VzIChlLmcuIElzaGlnYWtpKSB1c2UgKzA4MDA7IGdvIHdpdGggU3V6dWtpLiAgR3Vlc3MgdGhhdCBhbGwKKyMgb3JkaW5hbmNlcyB0b29rIGVmZmVjdCBvbiBKYW4gMS4KKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL1Rva3lvCTk6MTg6NTkJLQlMTVQJMTg4NyBEZWMgMzEgMTU6MDB1CisJCQk5OjAwCS0JSlNUCTE4OTYKKwkJCTk6MDAJLQlDSlQJMTkzOAorCQkJOTowMAlKYXBhbglKJXNUCisjIFNpbmNlIDE5MzgsIGFsbCBKYXBhbmVzZSBwb3NzZXNzaW9ucyBoYXZlIGJlZW4gbGlrZSBBc2lhL1Rva3lvLgorCisjIEpvcmRhbgorIworIyBGcm9tIDxhIGhyZWY9Imh0dHA6Ly9zdGFyLmFyYWJpYS5jb20vOTkwNzAxL0pPOS5odG1sIj4KKyMgSm9yZGFuIFdlZWsgKDE5OTktMDctMDEpIDwvYT4gdmlhIFN0ZWZmZW4gVGhvcnNlbiAoMTk5OS0wOS0wOSk6CisjIENsb2NrcyBpbiBKb3JkYW4gd2VyZSBmb3J3YXJkZWQgb25lIGhvdXIgb24gV2VkbmVzZGF5IGF0IG1pZG5pZ2h0LAorIyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGdvdmVybm1lbnQncyBkZWNpc2lvbiB0byBpbXBsZW1lbnQgc3VtbWVyIHRpbWUKKyMgYWxsIHllYXIgcm91bmQuCisjCisjIEZyb20gPGEgaHJlZj0iaHR0cDovL3N0YXIuYXJhYmlhLmNvbS85OTA5MzAvSk85Lmh0bWwiPgorIyBKb3JkYW4gV2VlayAoMTk5OS0wOS0zMCkgPC9hPiB2aWEgU3RlZmZlbiBUaG9yc2VuICgxOTk5LTExLTA5KToKKyMgV2ludGVyIHRpbWUgc3RhcnRzIHRvZGF5IFRodXJzZGF5LCAzMCBTZXB0ZW1iZXIuIENsb2NrcyB3aWxsIGJlIHR1cm5lZCBiYWNrCisjIGJ5IG9uZSBob3VyLiAgVGhpcyBpcyB0aGUgbGF0ZXN0IGdvdmVybm1lbnQgZGVjaXNpb24gYW5kIGl0J3MgZmluYWwhCisjIFRoZSBkZWNpc2lvbiB3YXMgdGFrZW4gYmVjYXVzZSBvZiB0aGUgaW5jcmVhc2UgaW4gd29ya2luZyBob3VycyBpbgorIyBnb3Zlcm5tZW50J3MgZGVwYXJ0bWVudHMgZnJvbSBzaXggdG8gc2V2ZW4gaG91cnMuCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDUtMTEtMjIpOgorIyBTdGFydGluZyAyMDAzIHRyYW5zaXRpb25zIGFyZSBmcm9tIFN0ZWZmZW4gVGhvcnNlbidzIHdlYiBzaXRlIHRpbWVhbmRkYXRlLmNvbS4KKyMKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDUtMTEtMjMpOgorIyBGb3IgSm9yZGFuIEkgaGF2ZSByZWNlaXZlZCBtdWx0aXBsZSBpbmRlcGVuZGVudCB1c2VyIHJlcG9ydHMgZXZlcnkgeWVhcgorIyBhYm91dCBEU1QgZW5kIGRhdGVzLCBhcyB0aGUgZW5kLXJ1bGUgaXMgZGlmZmVyZW50IGV2ZXJ5IHllYXIuCisjCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA2LTEwLTAxKSwgYWZ0ZXIgYSBoZWFkcy11cCBmcm9tIEhpbGFsIE1hbGF3aToKKyMgaHR0cDovL3d3dy5wZXRyYW5ld3MuZ292LmpvL25lcHJhcy8yMDA2L1NlcC8wNS80MDAwLmh0bQorIyAiSm9yZGFuIHdpbGwgc3dpdGNoIHRvIHdpbnRlciB0aW1lIG9uIEZyaWRheSwgT2N0b2JlciAyNyIuCisjCisKKyMgRnJvbSBQaGlsIFBpenpleSAoMjAwOS0wNC0wMik6CisjIC4uLkkgdGhpbmsgSSBtYXkgaGF2ZSBzcG90dGVkIGFuIGVycm9yIGluIHRoZSB0aW1lem9uZSBkYXRhIGZvcgorIyBKb3JkYW4uCisjIFRoZSBjdXJyZW50ICgyMDA5ZCkgYXNpYSBmaWxlIHNob3dzIEpvcmRhbiBnb2luZyB0byBkYXlsaWdodAorIyBzYXZpbmcKKyMgdGltZSBvbiB0aGUgbGFzdCBUaHVyc2RheSBpbiBNYXJjaC4KKyMKKyMgUnVsZSAgSm9yZGFuICAgICAgMjAwMCAgbWF4CS0gIE1hciAgIGxhc3RUaHUgICAgIDA6MDBzIDE6MDAgIFMKKyMKKyMgSG93ZXZlciB0aW1lYW5kZGF0ZS5jb20sIHdoaWNoIEkgdXN1YWxseSBmaW5kIHJlbGlhYmxlLCBzaG93cyBKb3JkYW4KKyMgZ29pbmcgdG8gZGF5bGlnaHQgc2F2aW5nIHRpbWUgb24gdGhlIGxhc3QgRnJpZGF5IGluIE1hcmNoIHNpbmNlIDIwMDIuCisjIFBsZWFzZSBzZWUKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vd29ybGRjbG9jay90aW1lem9uZS5odG1sP249MTEiPgorIyBodHRwOi8vd3d3LnRpbWVhbmRkYXRlLmNvbS93b3JsZGNsb2NrL3RpbWV6b25lLmh0bWw/bj0xMQorIyA8L2E+CisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDktMDQtMDIpOgorIyBUaGlzIHNpbmdsZSBvbmUgbWlnaHQgYmUgZ29vZCBlbm91Z2gsICgyMDA5LTAzLTI0LCBBcmFiaWMpOgorIyA8YSBocmVmPSJodHRwOi8vcGV0cmEuZ292LmpvL0FydGljYWwuYXNweD9Mbmc9MiZTZWN0aW9uPTgmQXJ0aWNhbD05NTI3OSI+CisjIGh0dHA6Ly9wZXRyYS5nb3Yuam8vQXJ0aWNhbC5hc3B4P0xuZz0yJlNlY3Rpb249OCZBcnRpY2FsPTk1Mjc5CisjIDwvYT4KKyMKKyMgR29vZ2xlJ3MgdHJhbnNsYXRpb246CisjCisjID4gVGhlIENvdW5jaWwgb2YgTWluaXN0ZXJzIGRlY2lkZWQgaW4gMjAwMiB0byBhZG9wdCB0aGUgcHJpbmNpcGxlIG9mIHRpbWVseQorIyA+IHN1Ym1pc3Npb24gb2YgdGhlIHN1bW1lciBhdCA2MCBtaW51dGVzIGFzIG9mIG1pZG5pZ2h0IG9uIHRoZSBsYXN0IFRodXJzZGF5CisjID4gb2YgdGhlIG1vbnRoIG9mIE1hcmNoIG9mIGVhY2ggeWVhci4KKyMKKyMgU28gLSB0aGlzIG1lYW5zIHRoZSBtaWRuaWdodCBiZXR3ZWVuIFRodXJzZGF5IGFuZCBGcmlkYXkgc2luY2UgMjAwMi4KKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMjAwOS0wNC0wNik6CisjIFdlIHN0aWxsIGhhdmUgSm9yZGFuIHN3aXRjaGluZyB0byBEU1Qgb24gVGh1cnNkYXlzIGluIDIwMDAgYW5kIDIwMDEuCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUpvcmRhbgkxOTczCW9ubHkJLQlKdW4JNgkwOjAwCTE6MDAJUworUnVsZQlKb3JkYW4JMTk3MwkxOTc1CS0JT2N0CTEJMDowMAkwCS0KK1J1bGUJSm9yZGFuCTE5NzQJMTk3NwktCU1heQkxCTA6MDAJMTowMAlTCitSdWxlCUpvcmRhbgkxOTc2CW9ubHkJLQlOb3YJMQkwOjAwCTAJLQorUnVsZQlKb3JkYW4JMTk3Nwlvbmx5CS0JT2N0CTEJMDowMAkwCS0KK1J1bGUJSm9yZGFuCTE5NzgJb25seQktCUFwcgkzMAkwOjAwCTE6MDAJUworUnVsZQlKb3JkYW4JMTk3OAlvbmx5CS0JU2VwCTMwCTA6MDAJMAktCitSdWxlCUpvcmRhbgkxOTg1CW9ubHkJLQlBcHIJMQkwOjAwCTE6MDAJUworUnVsZQlKb3JkYW4JMTk4NQlvbmx5CS0JT2N0CTEJMDowMAkwCS0KK1J1bGUJSm9yZGFuCTE5ODYJMTk4OAktCUFwcglGcmk+PTEJMDowMAkxOjAwCVMKK1J1bGUJSm9yZGFuCTE5ODYJMTk5MAktCU9jdAlGcmk+PTEJMDowMAkwCS0KK1J1bGUJSm9yZGFuCTE5ODkJb25seQktCU1heQk4CTA6MDAJMTowMAlTCitSdWxlCUpvcmRhbgkxOTkwCW9ubHkJLQlBcHIJMjcJMDowMAkxOjAwCVMKK1J1bGUJSm9yZGFuCTE5OTEJb25seQktCUFwcgkxNwkwOjAwCTE6MDAJUworUnVsZQlKb3JkYW4JMTk5MQlvbmx5CS0JU2VwCTI3CTA6MDAJMAktCitSdWxlCUpvcmRhbgkxOTkyCW9ubHkJLQlBcHIJMTAJMDowMAkxOjAwCVMKK1J1bGUJSm9yZGFuCTE5OTIJMTk5MwktCU9jdAlGcmk+PTEJMDowMAkwCS0KK1J1bGUJSm9yZGFuCTE5OTMJMTk5OAktCUFwcglGcmk+PTEJMDowMAkxOjAwCVMKK1J1bGUJSm9yZGFuCTE5OTQJb25seQktCVNlcAlGcmk+PTE1CTA6MDAJMAktCitSdWxlCUpvcmRhbgkxOTk1CTE5OTgJLQlTZXAJRnJpPj0xNQkwOjAwcwkwCS0KK1J1bGUJSm9yZGFuCTE5OTkJb25seQktCUp1bAkgMQkwOjAwcwkxOjAwCVMKK1J1bGUJSm9yZGFuCTE5OTkJMjAwMgktCVNlcAlsYXN0RnJpCTA6MDBzCTAJLQorUnVsZQlKb3JkYW4JMjAwMAkyMDAxCS0JTWFyCWxhc3RUaHUJMDowMHMJMTowMAlTCitSdWxlCUpvcmRhbgkyMDAyCW1heAktCU1hcglsYXN0VGh1CTI0OjAwCTE6MDAJUworUnVsZQlKb3JkYW4JMjAwMwlvbmx5CS0JT2N0CTI0CTA6MDBzCTAJLQorUnVsZQlKb3JkYW4JMjAwNAlvbmx5CS0JT2N0CTE1CTA6MDBzCTAJLQorUnVsZQlKb3JkYW4JMjAwNQlvbmx5CS0JU2VwCWxhc3RGcmkJMDowMHMJMAktCitSdWxlCUpvcmRhbgkyMDA2CW1heAktCU9jdAlsYXN0RnJpCTA6MDBzCTAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL0FtbWFuCTI6MjM6NDQgLQlMTVQJMTkzMQorCQkJMjowMAlKb3JkYW4JRUUlc1QKKworCisjIEthemFraHN0YW4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgxOTk2LTExLTIyKToKKyMgQW5kcmV3IEV2dGljaG92ICgxOTk2LTA0LTEzKSB3cml0ZXMgdGhhdCBLYXpha2hzdGFuCisjIHN0YXllZCBpbiBzeW5jIHdpdGggTW9zY293IGFmdGVyIDE5OTAsIGFuZCB0aGF0IEFxdG9iZSAoZm9ybWVybHkgQWt0eXViaW5zaykKKyMgYW5kIEFxdGF1IChmb3JtZXJseSBTaGV2Y2hlbmtvKSBhcmUgdGhlIGxhcmdlc3QgY2l0aWVzIGluIHRoZWlyIHpvbmVzLgorIyBHdWVzcyB0aGF0IEFxdGF1IGFuZCBBcXRvYmUgZGl2ZXJnZWQgaW4gMTk5NSwgc2luY2UgdGhhdCdzIHRoZSBmaXJzdCB0aW1lCisjIElBVEEgU1NJTSBtZW50aW9ucyBhIHRoaXJkIHRpbWUgem9uZSBpbiBLYXpha2hzdGFuLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgorIyBHZXJtYW4gSW9maXMsIEVMU0ksIEFsbWF0eSAoMjAwMS0xMC0wOSkgcmVwb3J0cyB0aGF0IEthemFraHN0YW4gdXNlcworIyBSdXNzaWFBc2lhIHJ1bGVzLCBpbnN0ZWFkIG9mIHN3aXRjaGluZyBhdCAwMDowMCBhcyB0aGUgSUFUQSBoYXMgaXQuCisjIEdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLCB3aG8gaGF2ZSB0aGVtIGFsd2F5cyB1c2luZyBSdXNzaWFBc2lhIHJ1bGVzLgorIyBBbHNvIGdvIHdpdGggdGhlIGZvbGxvd2luZyBjbGFpbXMgb2YgU2hhbmtzICYgUG90dGVuZ2VyOgorIworIyAtIEthemFraHN0YW4gZGlkIG5vdCBvYnNlcnZlIERTVCBpbiAxOTkxLgorIyAtIFF5enlsb3JkYSBzd2l0Y2hlZCBmcm9tICs1OjAwIHRvICs2OjAwIG9uIDE5OTItMDEtMTkgMDI6MDAuCisjIC0gT3JhbCBzd2l0Y2hlZCBmcm9tICs1OjAwIHRvICs0OjAwIGluIHNwcmluZyAxOTg5LgorCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cua2F6c29jaWV0eS5vcmcudWsvbmV3cy8yMDA1LzAzLzMwLmh0bSI+CisjIEZyb20gS2F6YWtoc3RhbiBFbWJhc3N5J3MgTmV3cyBCdWxsZXRpbiAjMTEgKDIwMDUtMDMtMjEpOgorIyA8L2E+CisjIFRoZSBHb3Zlcm5tZW50IG9mIEthemFraHN0YW4gcGFzc2VkIGEgcmVzb2x1dGlvbiBNYXJjaCAxNSBhYm9saXNoaW5nCisjIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNpdGluZyBsYWNrIG9mIGVjb25vbWljIGJlbmVmaXRzIGFuZCBoZWFsdGgKKyMgY29tcGxpY2F0aW9ucyBjb3VwbGVkIHdpdGggYSBkZWNyZWFzZSBpbiBwcm9kdWN0aXZpdHkuCisjCisjIEZyb20gQnJhbmlzbGF2IEtvamljIChpbiBBc3RhbmEpIHZpYSBHd2lsbGltIExhdyAoMjAwNS0wNi0yOCk6CisjIC4uLiB3aGF0IGhhcHBlbmVkIHdhcyB0aGF0IHRoZSBmb3JtZXIgS2F6YWtoc3RhbiBFYXN0ZXJuIHRpbWUgem9uZQorIyB3YXMgImJsZW5kZWQiIHdpdGggdGhlIENlbnRyYWwgem9uZS4gIFRoZXJlZm9yZSwgS2F6YWtoc3RhbiBub3cgaGFzCisjIHR3byB0aW1lIHpvbmVzLCBhbmQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gaXMgb25lIGhvdXIuICBUaGUgem9uZQorIyBjbG9zZXIgdG8gVVRDIGlzIHRoZSBmb3JtZXIgV2VzdGVybiB6b25lIChwcm9iYWJseSBzdGlsbCBjYWxsZWQgdGhlCisjIHNhbWUpLCBlbmNvbXBhc3NpbmcgZm91ciBwcm92aW5jZXMgaW4gdGhlIHdlc3Q6IEFxdG9iZSwgQXR5cmF1LAorIyBNYW5nZ2h5c3RhdSwgYW5kIFdlc3QgS2F6YWtoc3Rhbi4gIFRoZSBvdGhlciB6b25lIGVuY29tcGFzc2VzCisjIGV2ZXJ5dGhpbmcgZWxzZS4uLi4gIEkgZ3Vlc3MgdGhhdCB3b3VsZCBtYWtlIEthemFraHN0YW4gdGltZSB6b25lcworIyBkZSBqdXJlIFVUQys1IGFuZCBVVEMrNiByZXNwZWN0aXZlbHkuCisKKyMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KKyMKKyMgQWxtYXR5IChmb3JtZXJseSBBbG1hLUF0YSksIHJlcHJlc2VudGluZyBtb3N0IGxvY2F0aW9ucyBpbiBLYXpha2hzdGFuCitab25lCUFzaWEvQWxtYXR5CTU6MDc6NDggLQlMTVQJMTkyNCBNYXkgIDIgIyBvciBBbG1hLUF0YQorCQkJNTowMAktCUFMTVQJMTkzMCBKdW4gMjEgIyBBbG1hLUF0YSBUaW1lCisJCQk2OjAwIFJ1c3NpYUFzaWEgQUxNJXNUCTE5OTEKKwkJCTY6MDAJLQlBTE1UCTE5OTIKKwkJCTY6MDAgUnVzc2lhQXNpYQlBTE0lc1QJMjAwNSBNYXIgMTUKKwkJCTY6MDAJLQlBTE1UCisjIFF5enlsb3JkYSAoYWthIEt5enlsb3JkYSwgS2l6aWxvcmRhLCBLenlsLU9yZGEsIGV0Yy4pCitab25lCUFzaWEvUXl6eWxvcmRhCTQ6MjE6NTIgLQlMTVQJMTkyNCBNYXkgIDIKKwkJCTQ6MDAJLQlLSVpUCTE5MzAgSnVuIDIxICMgS2l6aWxvcmRhIFRpbWUKKwkJCTU6MDAJLQlLSVpUCTE5ODEgQXByICAxCisJCQk1OjAwCTE6MDAJS0laU1QJMTk4MSBPY3QgIDEKKwkJCTY6MDAJLQlLSVpUCTE5ODIgQXByICAxCisJCQk1OjAwIFJ1c3NpYUFzaWEJS0laJXNUCTE5OTEKKwkJCTU6MDAJLQlLSVpUCTE5OTEgRGVjIDE2ICMgaW5kZXBlbmRlbmNlCisJCQk1OjAwCS0JUVlaVAkxOTkyIEphbiAxOSAyOjAwCisJCQk2OjAwIFJ1c3NpYUFzaWEJUVlaJXNUCTIwMDUgTWFyIDE1CisJCQk2OjAwCS0JUVlaVAorIyBBcXRvYmUgKGFrYSBBa3RvYmUsIGZvcm1lcmx5IEFrdCd1Ymluc2spCitab25lCUFzaWEvQXF0b2JlCTM6NDg6NDAJLQlMTVQJMTkyNCBNYXkgIDIKKwkJCTQ6MDAJLQlBS1RUCTE5MzAgSnVuIDIxICMgQWt0eXViaW5zayBUaW1lCisJCQk1OjAwCS0JQUtUVAkxOTgxIEFwciAgMQorCQkJNTowMAkxOjAwCUFLVFNUCTE5ODEgT2N0ICAxCisJCQk2OjAwCS0JQUtUVAkxOTgyIEFwciAgMQorCQkJNTowMCBSdXNzaWFBc2lhCUFLVCVzVAkxOTkxCisJCQk1OjAwCS0JQUtUVAkxOTkxIERlYyAxNiAjIGluZGVwZW5kZW5jZQorCQkJNTowMCBSdXNzaWFBc2lhCUFRVCVzVAkyMDA1IE1hciAxNSAjIEFxdG9iZSBUaW1lCisJCQk1OjAwCS0JQVFUVAorIyBNYW5nZ2h5c3RhdQorIyBBcXRhdSB3YXMgbm90IGZvdW5kZWQgdW50aWwgMTk2MywgYnV0IGl0IHJlcHJlc2VudHMgYW4gaW5oYWJpdGVkIHJlZ2lvbiwKKyMgc28gaW5jbHVkZSB0aW1lIHN0YW1wcyBiZWZvcmUgMTk2My4KK1pvbmUJQXNpYS9BcXRhdQkzOjIxOjA0CS0JTE1UCTE5MjQgTWF5ICAyCisJCQk0OjAwCS0JRk9SVAkxOTMwIEp1biAyMSAjIEZvcnQgU2hldmNoZW5rbyBUCisJCQk1OjAwCS0JRk9SVAkxOTYzCisJCQk1OjAwCS0JU0hFVAkxOTgxIE9jdCAgMSAjIFNoZXZjaGVua28gVGltZQorCQkJNjowMAktCVNIRVQJMTk4MiBBcHIgIDEKKwkJCTU6MDAgUnVzc2lhQXNpYQlTSEUlc1QJMTk5MQorCQkJNTowMAktCVNIRVQJMTk5MSBEZWMgMTYgIyBpbmRlcGVuZGVuY2UKKwkJCTU6MDAgUnVzc2lhQXNpYQlBUVQlc1QJMTk5NSBNYXIgbGFzdFN1biAyOjAwICMgQXF0YXUgVGltZQorCQkJNDowMCBSdXNzaWFBc2lhCUFRVCVzVAkyMDA1IE1hciAxNQorCQkJNTowMAktCUFRVFQKKyMgV2VzdCBLYXpha2hzdGFuCitab25lCUFzaWEvT3JhbAkzOjI1OjI0CS0JTE1UCTE5MjQgTWF5ICAyICMgb3IgVXJhbCdzaworCQkJNDowMAktCVVSQVQJMTkzMCBKdW4gMjEgIyBVcmFsJ3NrIHRpbWUKKwkJCTU6MDAJLQlVUkFUCTE5ODEgQXByICAxCisJCQk1OjAwCTE6MDAJVVJBU1QJMTk4MSBPY3QgIDEKKwkJCTY6MDAJLQlVUkFUCTE5ODIgQXByICAxCisJCQk1OjAwIFJ1c3NpYUFzaWEJVVJBJXNUCTE5ODkgTWFyIDI2IDI6MDAKKwkJCTQ6MDAgUnVzc2lhQXNpYQlVUkElc1QJMTk5MQorCQkJNDowMAktCVVSQVQJMTk5MSBEZWMgMTYgIyBpbmRlcGVuZGVuY2UKKwkJCTQ6MDAgUnVzc2lhQXNpYQlPUkElc1QJMjAwNSBNYXIgMTUgIyBPcmFsIFRpbWUKKwkJCTU6MDAJLQlPUkFUCisKKyMgS3lyZ3l6c3RhbiAoS2lyZ2l6c3RhbikKKyMgVHJhbnNpdGlvbnMgdGhyb3VnaCAxOTkxIGFyZSBmcm9tIFNoYW5rcyAmIFBvdHRlbmdlci4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA1LTA4LTE1KToKKyMgQWNjb3JkaW5nIHRvIGFuIGFydGljbGUgZGF0ZWQgdG9kYXkgaW4gdGhlIEt5cmd5enN0YW4gRGV2ZWxvcG1lbnQgR2F0ZXdheQorIyA8aHR0cDovL2VuZy5nYXRld2F5LmtnL2NnaS1iaW4vcGFnZS5wbD9pZD0xJnN0b3J5X25hbWU9ZG9jOTk3OS5zaHRtbD4KKyMgS3lyZ3l6c3RhbiBpcyBjYW5jZWxpbmcgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIHN5c3RlbS4gIEkgdGFrZSB0aGUgYXJ0aWNsZQorIyB0byBtZWFuIHRoYXQgdGhleSB3aWxsIGxlYXZlIHRoZWlyIGNsb2NrcyBhdCA2IGhvdXJzIGFoZWFkIG9mIFVUQy4KKyMgRnJvbSBNYWxpayBBYmR1Z2FsaWV2ICgyMDA1LTA5LTIxKToKKyMgT3VyIGdvdmVybm1lbnQgY2FuY2VscyBkYXlsaWdodCBzYXZpbmcgdGltZSA2dGggb2YgQXVndXN0IDIwMDUuCisjIEZyb20gMjAwNS0wOC0xMiBvdXIgR01ULW9mZnNldCBpcyArNiwgdy9vIGFueSBkYXlsaWdodCBzYXZpbmcuCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUt5cmd5egkxOTkyCTE5OTYJLQlBcHIJU3VuPj03CTA6MDBzCTE6MDAJUworUnVsZQlLeXJneXoJMTk5MgkxOTk2CS0JU2VwCWxhc3RTdW4JMDowMAkwCS0KK1J1bGUJS3lyZ3l6CTE5OTcJMjAwNQktCU1hcglsYXN0U3VuCTI6MzAJMTowMAlTCitSdWxlCUt5cmd5egkxOTk3CTIwMDQJLQlPY3QJbGFzdFN1bgkyOjMwCTAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL0Jpc2hrZWsJNDo1ODoyNCAtCUxNVAkxOTI0IE1heSAgMgorCQkJNTowMAktCUZSVVQJMTkzMCBKdW4gMjEgIyBGcnVuemUgVGltZQorCQkJNjowMCBSdXNzaWFBc2lhIEZSVSVzVAkxOTkxIE1hciAzMSAyOjAwcworCQkJNTowMAkxOjAwCUZSVVNUCTE5OTEgQXVnIDMxIDI6MDAgIyBpbmRlcGVuZGVuY2UKKwkJCTU6MDAJS3lyZ3l6CUtHJXNUCTIwMDUgQXVnIDEyICAgICMgS3lyZ3l6c3RhbiBUaW1lCisJCQk2OjAwCS0JS0dUCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBLb3JlYSAoTm9ydGggYW5kIFNvdXRoKQorCisjIEZyb20gQW5uaWUgSS4gQmFuZyAoMjAwNi0wNy0xMCkgaW4KKyMgPGh0dHA6Ly93d3cua29yZWFoZXJhbGQuY28ua3IvU0lURS9kYXRhL2h0bWxfZGlyLzIwMDYvMDcvMTAvMjAwNjA3MTAwMDEyLmFzcD46CisjIFRoZSBNaW5pc3RyeSBvZiBDb21tZXJjZSwgSW5kdXN0cnkgYW5kIEVuZXJneSBoYXMgYWxyZWFkeQorIyBjb21taXNzaW9uZWQgYSByZXNlYXJjaCBwcm9qZWN0IFt0byByZWludHJvZHVjZSBEU1RdIGFuZCBoYXMgc2FpZAorIyB0aGUgc3lzdGVtIG1heSBiZWdpbiBhcyBlYXJseSBhcyAyMDA4Li4uLiAgS29yZWEgcmFuIGEgZGF5bGlnaHQKKyMgc2F2aW5nIHByb2dyYW0gZnJvbSAxOTQ5LTYxIGJ1dCBzdG9wcGVkIGl0IGR1cmluZyB0aGUgMTk1MC01MyBLb3JlYW4gV2FyLgorCisjIEZyb20gU2hhbmtzICYgUG90dGVuZ2VyOgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJUk9LCTE5NjAJb25seQktCU1heQkxNQkwOjAwCTE6MDAJRAorUnVsZQlST0sJMTk2MAlvbmx5CS0JU2VwCTEzCTA6MDAJMAlTCitSdWxlCVJPSwkxOTg3CTE5ODgJLQlNYXkJU3VuPj04CTA6MDAJMTowMAlECitSdWxlCVJPSwkxOTg3CTE5ODgJLQlPY3QJU3VuPj04CTA6MDAJMAlTCisKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9TZW91bAk4OjI3OjUyCS0JTE1UCTE4OTAKKwkJCTg6MzAJLQlLU1QJMTkwNCBEZWMKKwkJCTk6MDAJLQlLU1QJMTkyOAorCQkJODozMAktCUtTVAkxOTMyCisJCQk5OjAwCS0JS1NUCTE5NTQgTWFyIDIxCisJCQk4OjAwCVJPSwlLJXNUCTE5NjEgQXVnIDEwCisJCQk4OjMwCS0JS1NUCTE5NjggT2N0CisJCQk5OjAwCVJPSwlLJXNUCitab25lCUFzaWEvUHlvbmd5YW5nCTg6MjM6MDAgLQlMTVQJMTg5MAorCQkJODozMAktCUtTVAkxOTA0IERlYworCQkJOTowMAktCUtTVAkxOTI4CisJCQk4OjMwCS0JS1NUCTE5MzIKKwkJCTk6MDAJLQlLU1QJMTk1NCBNYXIgMjEKKwkJCTg6MDAJLQlLU1QJMTk2MSBBdWcgMTAKKwkJCTk6MDAJLQlLU1QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEt1d2FpdAorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorIyBGcm9tIHRoZSBBcmFiIFRpbWVzICgyMDA3LTAzLTE0KToKKyMgVGhlIENpdmlsIFNlcnZpY2UgQ29tbWlzc2lvbiAoQ1NDKSBoYXMgYXBwcm92ZWQgYSBwcm9wb3NhbCBmb3J3YXJkZWQKKyMgYnkgTVAgQWhtYWQgQmFxZXIgb24gaW1wbGVtZW50aW5nIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSAoRFNUKSBpbgorIyBLdXdhaXQgc3RhcnRpbmcgZnJvbSBBcHJpbCB1bnRpbCB0aGUgZW5kIG9mIFNlcHQgdGhpcyB5ZWFyLCByZXBvcnRzIEFsLUFuYmEuCisjIDxodHRwOi8vd3d3LmFyYWJ0aW1lc29ubGluZS5jb20vYXJhYnRpbWVzL2t1d2FpdC9WaWV3ZGV0LmFzcD9JRD05OTUwPi4KKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNy0wMy0yOSk6CisjIFdlIGRvbid0IGtub3cgdGhlIGRldGFpbHMsIG9yIHdoZXRoZXIgdGhlIGFwcHJvdmFsIG1lYW5zIGl0J2xsIGhhcHBlbiwKKyMgc28gZm9yIG5vdyB3ZSBhc3N1bWUgbm8gRFNULgorWm9uZQlBc2lhL0t1d2FpdAkzOjExOjU2IC0JTE1UCTE5NTAKKwkJCTM6MDAJLQlBU1QKKworIyBMYW9zCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvVmllbnRpYW5lCTY6NTA6MjQgLQlMTVQJMTkwNiBKdW4gIDkgIyBvciBWaWFuZ2NoYW4KKwkJCTc6MDY6MjAJLQlTTVQJMTkxMSBNYXIgMTEgMDowMSAjIFNhaWdvbiBNVD8KKwkJCTc6MDAJLQlJQ1QJMTkxMiBNYXkKKwkJCTg6MDAJLQlJQ1QJMTkzMSBNYXkKKwkJCTc6MDAJLQlJQ1QKKworIyBMZWJhbm9uCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlMZWJhbm9uCTE5MjAJb25seQktCU1hcgkyOAkwOjAwCTE6MDAJUworUnVsZQlMZWJhbm9uCTE5MjAJb25seQktCU9jdAkyNQkwOjAwCTAJLQorUnVsZQlMZWJhbm9uCTE5MjEJb25seQktCUFwcgkzCTA6MDAJMTowMAlTCitSdWxlCUxlYmFub24JMTkyMQlvbmx5CS0JT2N0CTMJMDowMAkwCS0KK1J1bGUJTGViYW5vbgkxOTIyCW9ubHkJLQlNYXIJMjYJMDowMAkxOjAwCVMKK1J1bGUJTGViYW5vbgkxOTIyCW9ubHkJLQlPY3QJOAkwOjAwCTAJLQorUnVsZQlMZWJhbm9uCTE5MjMJb25seQktCUFwcgkyMgkwOjAwCTE6MDAJUworUnVsZQlMZWJhbm9uCTE5MjMJb25seQktCVNlcAkxNgkwOjAwCTAJLQorUnVsZQlMZWJhbm9uCTE5NTcJMTk2MQktCU1heQkxCTA6MDAJMTowMAlTCitSdWxlCUxlYmFub24JMTk1NwkxOTYxCS0JT2N0CTEJMDowMAkwCS0KK1J1bGUJTGViYW5vbgkxOTcyCW9ubHkJLQlKdW4JMjIJMDowMAkxOjAwCVMKK1J1bGUJTGViYW5vbgkxOTcyCTE5NzcJLQlPY3QJMQkwOjAwCTAJLQorUnVsZQlMZWJhbm9uCTE5NzMJMTk3NwktCU1heQkxCTA6MDAJMTowMAlTCitSdWxlCUxlYmFub24JMTk3OAlvbmx5CS0JQXByCTMwCTA6MDAJMTowMAlTCitSdWxlCUxlYmFub24JMTk3OAlvbmx5CS0JU2VwCTMwCTA6MDAJMAktCitSdWxlCUxlYmFub24JMTk4NAkxOTg3CS0JTWF5CTEJMDowMAkxOjAwCVMKK1J1bGUJTGViYW5vbgkxOTg0CTE5OTEJLQlPY3QJMTYJMDowMAkwCS0KK1J1bGUJTGViYW5vbgkxOTg4CW9ubHkJLQlKdW4JMQkwOjAwCTE6MDAJUworUnVsZQlMZWJhbm9uCTE5ODkJb25seQktCU1heQkxMAkwOjAwCTE6MDAJUworUnVsZQlMZWJhbm9uCTE5OTAJMTk5MgktCU1heQkxCTA6MDAJMTowMAlTCitSdWxlCUxlYmFub24JMTk5Mglvbmx5CS0JT2N0CTQJMDowMAkwCS0KK1J1bGUJTGViYW5vbgkxOTkzCW1heAktCU1hcglsYXN0U3VuCTA6MDAJMTowMAlTCitSdWxlCUxlYmFub24JMTk5MwkxOTk4CS0JU2VwCWxhc3RTdW4JMDowMAkwCS0KK1J1bGUJTGViYW5vbgkxOTk5CW1heAktCU9jdAlsYXN0U3VuCTA6MDAJMAktCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvQmVpcnV0CTI6MjI6MDAgLQlMTVQJMTg4MAorCQkJMjowMAlMZWJhbm9uCUVFJXNUCisKKyMgTWFsYXlzaWEKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCU5Cb3JuZW8JMTkzNQkxOTQxCS0JU2VwCTE0CTA6MDAJMDoyMAlUUyAjIG9uZS1UaGlyZCBTdW1tZXIKK1J1bGUJTkJvcm5lbwkxOTM1CTE5NDEJLQlEZWMJMTQJMDowMAkwCS0KKyMKKyMgcGVuaW5zdWxhciBNYWxheXNpYQorIyBUaGUgZGF0YSBoZXJlIGFyZSB0YWtlbiBmcm9tIE1vayBMeSBZbmcgKDIwMDMtMTAtMzApCisjIDxodHRwOi8vd3d3Lm1hdGgubnVzLmVkdS5zZy9hc2xha3Nlbi90ZWFjaGluZy90aW1lem9uZS5odG1sPi4KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQXNpYS9LdWFsYV9MdW1wdXIJNjo0Njo0NiAtCUxNVAkxOTAxIEphbiAgMQorCQkJNjo1NToyNQktCVNNVAkxOTA1IEp1biAgMSAjIFNpbmdhcG9yZSBNLlQuCisJCQk3OjAwCS0JTUFMVAkxOTMzIEphbiAgMSAjIE1hbGF5YSBUaW1lCisJCQk3OjAwCTA6MjAJTUFMU1QJMTkzNiBKYW4gIDEKKwkJCTc6MjAJLQlNQUxUCTE5NDEgU2VwICAxCisJCQk3OjMwCS0JTUFMVAkxOTQyIEZlYiAxNgorCQkJOTowMAktCUpTVAkxOTQ1IFNlcCAxMgorCQkJNzozMAktCU1BTFQJMTk4MiBKYW4gIDEKKwkJCTg6MDAJLQlNWVQJIyBNYWxheXNpYSBUaW1lCisjIFNhYmFoICYgU2FyYXdhaworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgVGhlIGRhdGEgaGVyZSBhcmUgbW9zdGx5IGZyb20gU2hhbmtzICYgUG90dGVuZ2VyLCBidXQgdGhlIDE5NDIsIDE5NDUgYW5kIDE5ODIKKyMgdHJhbnNpdGlvbiBkYXRlcyBhcmUgZnJvbSBNb2sgTHkgWW5nLgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBc2lhL0t1Y2hpbmcJNzoyMToyMAktCUxNVAkxOTI2IE1hcgorCQkJNzozMAktCUJPUlQJMTkzMwkjIEJvcm5lbyBUaW1lCisJCQk4OjAwCU5Cb3JuZW8JQk9SJXNUCTE5NDIgRmViIDE2CisJCQk5OjAwCS0JSlNUCTE5NDUgU2VwIDEyCisJCQk4OjAwCS0JQk9SVAkxOTgyIEphbiAgMQorCQkJODowMAktCU1ZVAorCisjIE1hbGRpdmVzCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUluZGlhbi9NYWxkaXZlcwk0OjU0OjAwIC0JTE1UCTE4ODAJIyBNYWxlCisJCQk0OjU0OjAwCS0JTU1UCTE5NjAJIyBNYWxlIE1lYW4gVGltZQorCQkJNTowMAktCU1WVAkJIyBNYWxkaXZlcyBUaW1lCisKKyMgTW9uZ29saWEKKworIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IHRoYXQgTW9uZ29saWEgaGFzIHRocmVlIHRpbWUgem9uZXMsIGJ1dAorIyB1c25vMTk5NSBhbmQgdGhlIENJQSBtYXAgU3RhbmRhcmQgVGltZSBab25lcyBvZiB0aGUgV29ybGQgKDIwMDUtMDMpCisjIGJvdGggc2F5IHRoYXQgaXQgaGFzIGp1c3Qgb25lLgorCisjIEZyb20gT3NjYXIgdmFuIFZsaWptZW4gKDE5OTktMTItMTEpOgorIyA8YSBocmVmPSJodHRwOi8vd3d3Lm1vbmdvbGlhdG91cmlzbS5nb3YubW4vZ2VuZXJhbC5odG0iPgorIyBHZW5lcmFsIEluZm9ybWF0aW9uIE1vbmdvbGlhCisjIDwvYT4gKDE5OTktMDkpCisjICJUaW1lOiBNb25nb2xpYSBoYXMgdHdvIHRpbWUgem9uZXMuIFRocmVlIHdlc3Rlcm5tb3N0IHByb3ZpbmNlcyBvZgorIyBCYXlhbi1VbGdpaSwgVXZzLCBhbmQgSG92ZCBhcmUgb25lIGhvdXIgZWFybGllciB0aGFuIHRoZSBjYXBpdGFsIGNpdHksIGFuZAorIyB0aGUgcmVzdCBvZiB0aGUgY291bnRyeSBmb2xsb3dzIHRoZSBVbGFhbmJhYXRhciB0aW1lLCB3aGljaCBpcyBVVEMvR01UIHBsdXMKKyMgZWlnaHQgaG91cnMuIgorCisjIEZyb20gUml2ZXMgTWNEb3cgKDE5OTktMTItMTMpOgorIyBNb25nb2xpYSBkaXNjb250aW51ZWQgdGhlIHVzZSBvZiBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaW4gMTk5OTsgMTk5OAorIyBiZWluZyB0aGUgbGFzdCB5ZWFyIGl0IHdhcyBpbXBsZW1lbnRlZC4gIFRoZSBkYXRlcyBvZiBpbXBsZW1lbnRhdGlvbiBJIGFtCisjIHVuc3VyZSBvZiwgYnV0IG1vc3QgcHJvYmFibHkgaXQgd2FzIHNpbWlsYXIgdG8gUnVzc2lhLCBleGNlcHQgZm9yIHRoZSB0aW1lCisjIG9mIGltcGxlbWVudGF0aW9uIG1heSBoYXZlIGJlZW4gZGlmZmVyZW50Li4uLgorIyBTb21lIG1hcHMgaW4gdGhlIHBhc3QgaGF2ZSBpbmRpY2F0ZWQgdGhhdCB0aGVyZSB3YXMgYW4gYWRkaXRpb25hbCB0aW1lCisjIHpvbmUgaW4gdGhlIGVhc3Rlcm4gcGFydCBvZiBNb25nb2xpYSwgaW5jbHVkaW5nIHRoZSBwcm92aW5jZXMgb2YgRG9ybm9kLAorIyBTdWhiYWF0YXIsIGFuZCBwb3NzaWJseSBLaGVudGlqLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTktMTItMTUpOgorIyBOYW1pbmcgYW5kIHNwZWxsaW5nIGlzIHRyaWNreSBpbiBNb25nb2xpYS4KKyMgV2UnbGwgdXNlIEhvdmQgKGFsc28gc3BlbGxlZCBDaG92ZCBhbmQgS2hvdmQpIHRvIHJlcHJlc2VudCB0aGUgd2VzdCB6b25lOworIyB0aGUgY2FwaXRhbCBvZiB0aGUgSG92ZCBwcm92aW5jZSBpcyBzb21ldGltZXMgY2FsbGVkIEhvdmQsIHNvbWV0aW1lcyBEdW5kLVVzLAorIyBhbmQgc29tZXRpbWVzIEppcmdhbGFudGEgKHdpdGggdmFyaWFudCBzcGVsbGluZ3MpLCBidXQgdGhlIG5hbWUgSG92ZAorIyBpcyBnb29kIGVub3VnaCBmb3Igb3VyIHB1cnBvc2VzLgorCisjIEZyb20gUml2ZXMgTWNEb3cgKDIwMDEtMDUtMTMpOgorIyBJbiBhZGRpdGlvbiB0byBNb25nb2xpYSBzdGFydGluZyBkYXlsaWdodCBzYXZpbmdzIGFzIHJlcG9ydGVkIGVhcmxpZXIKKyMgKGFkb3B0ZWQgRFNUIG9uIDIwMDEtMDQtMjcgMDI6MDAgbG9jYWwgdGltZSwgZW5kaW5nIDIwMDEtMDktMjgpLAorIyB0aGVyZSBhcmUgdGhyZWUgdGltZSB6b25lcy4KKyMKKyMgUHJvdmluY2VzIFthdCA3OjAwXTogQmF5YW4tdWxnaWksIFV2cywgS2hvdmQsIFphdmtoYW4sIEdvdmktQWx0YWkKKyMgUHJvdmluY2VzIFthdCA4OjAwXTogS2hvdnNnb2wsIEJ1bGdhbiwgQXJraGFuZ2FpLCBLaGVudGlpLCBUb3YsCisjCUJheWFua2hvbmdvciwgT3ZvcmtoYW5nYWksIER1bmRnb3ZpLCBEb3Jub2dvdmksIE9tbm9nb3ZpCisjIFByb3ZpbmNlcyBbYXQgOTowMF06IERvcm5vZCwgU3VraGJhYXRhcgorIworIyBbVGhlIHByb3ZpbmNlIG9mIFNlbGVuZ2UgaXMgb21pdHRlZCBmcm9tIHRoZSBhYm92ZSBsaXN0cy5dCisKKyMgRnJvbSBHYW5ib2xkIFRzLiwgVWxhYW5iYWF0YXIgKDIwMDQtMDQtMTcpOgorIyBEYXlsaWdodCBzYXZpbmcgb2NjdXJzIGF0IDAyOjAwIGxvY2FsIHRpbWUgbGFzdCBTYXR1cmRheSBvZiBNYXJjaC4KKyMgSXQgd2lsbCBjaGFuZ2UgYmFjayB0byBub3JtYWwgYXQgMDI6MDAgbG9jYWwgdGltZSBsYXN0IFNhdHVyZGF5IG9mCisjIFNlcHRlbWJlci4uLi4gQXMgSSByZW1lbWJlciB0aGlzIHJ1bGUgd2FzIGNoYW5nZWQgaW4gMjAwMS4KKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNC0wNC0xNyk6CisjIEZvciBub3csIGFzc3VtZSBSaXZlcyBNY0RvdydzIGluZm9ybWFudCBnb3QgY29uZnVzZWQgYWJvdXQgRnJpZGF5IHZzCisjIFNhdHVyZGF5LCBhbmQgdGhhdCBoaXMgMjAwMSBkYXRlcyBzaG91bGQgaGF2ZSAxIGFkZGVkIHRvIHRoZW0uCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNS0wNy0yNik6CisjIFdlIGhhdmUgd2lsZGx5IGNvbmZsaWN0aW5nIGluZm9ybWF0aW9uIGFib3V0IE1vbmdvbGlhJ3MgdGltZSB6b25lcy4KKyMgQmlsbCBCb25uZXQgKDIwMDUtMDUtMTkpIHJlcG9ydHMgdGhhdCB0aGUgVVMgRW1iYXNzeSBpbiBVbGFhbmJhYXRhciBzYXlzCisjIHRoZXJlIGlzIG9ubHkgb25lIHRpbWUgem9uZSBhbmQgdGhhdCBEU1QgaXMgb2JzZXJ2ZWQsIGNpdGluZyBNaWNyb3NvZnQKKyMgV2luZG93cyBYUCBhcyB0aGUgc291cmNlLiAgUmlzdG8gTnlrYW5lbiAoMjAwNS0wNS0xNikgcmVwb3J0cyB0aGF0CisjIHRyYXZlbG1vbmdvbGlhLm9yZyBzYXlzIHRoZXJlIGFyZSB0d28gdGltZSB6b25lcyAoVVRDKzcsIFVUQys4KSB3aXRoIG5vIERTVC4KKyMgT3NjYXIgdmFuIFZsaWptZW4gKDIwMDUtMDUtMjApIHJlcG9ydHMgdGhhdCB0aGUgTW9uZ29saWFuIEVtYmFzc3kgaW4KKyMgV2FzaGluZ3RvbiwgREMgc2F5cyB0aGVyZSBhcmUgdHdvIHRpbWUgem9uZXMsIHdpdGggRFNUIG9ic2VydmVkLgorIyBIZSBhbHNvIGZvdW5kCisjIDxodHRwOi8vdWJwb3N0Lm1vbmdvbG5ld3MubW4vaW5kZXgucGhwP3N1YmFjdGlvbj1zaG93Y29tbWVudHMmaWQ9MTExMTYzNDg5NCZhcmNoaXZlPSZzdGFydF9mcm9tPSZ1Y2F0PTEmPgorIyB3aGljaCBhbHNvIHNheXMgdGhhdCB0aGVyZSBpcyBEU1QsIGFuZCB3aGljaCBoYXMgYSBjb21tZW50IGJ5ICJUb2RkaXVzIgorIyAoMjAwNS0wMy0zMSAwNjowNSArMDcwMCkgc2F5aW5nICJNb25nb2xpYSBhY3R1YWxseSBoYXMgMy41IHRpbWUgem9uZXMuCisjIFRoZSBXZXN0IChPTEdJSSkgaXMgKzcgR01ULCBtb3N0IG9mIHRoZSBjb3VudHJ5IGlzIFVMQVQgaXMgKzggR01UCisjIGFuZCBzb21lIEVhc3Rlcm4gcHJvdmluY2VzIGFyZSArOSBHTVQgYnV0IFN1a2hiYWF0YXIgQWltYWcgaXMgU1VISyArOC41IEdNVC4KKyMgVGhlIFNVS0ggdGltZXpvbmUgaXMgbmV3IHRoaXMgeWVhciwgaXQgaXMgb25lIG9mIHRoZSBmZXcgdGhpbmdzIHRoZQorIyBwYXJsaWFtZW50IHBhc3NlZCBkdXJpbmcgdGhlIHR1bXVsdHVvdXMgd2ludGVyIHNlc3Npb24uIgorIyBGb3Igbm93LCBsZXQncyBpZ25vcmUgdGhpcyBpbmZvcm1hdGlvbiwgdW50aWwgd2UgaGF2ZSBtb3JlIGNvbmZpcm1hdGlvbi4KKworIyBGcm9tIEdhbmJvbGQgVHMuICgyMDA3LTAyLTI2KToKKyMgUGFybGlhbWVudCBvZiBNb25nb2xpYSBoYXMganVzdCBjaGFuZ2VkIHRoZSBkYXlsaWdodC1zYXZpbmcgcnVsZSBpbiBGZWJydWFyeS4KKyMgVGhleSBkZWNpZGVkIG5vdCB0byBhZG9wdCBkYXlsaWdodC1zYXZpbmcgdGltZS4uLi4KKyMgaHR0cDovL3d3dy5tb25nb2xuZXdzLm1uL2luZGV4LnBocD9tb2R1bGU9dW51dWR1ciZzZWM9dmlldyZpZD0xNTc0MgorCisjIEZyb20gRGVib3JhaCBHb2xkc21pdGggKDIwMDgtMDMtMzApOgorIyBXZSByZWNlaXZlZCBhIGJ1ZyByZXBvcnQgY2xhaW1pbmcgdGhhdCB0aGUgdHogZGF0YWJhc2UgVVRDIG9mZnNldCBmb3IKKyMgQXNpYS9DaG9pYmFsc2FuIChHTVQrMDk6MDApIGlzIGluY29ycmVjdCwgYW5kIHRoYXQgaXQgc2hvdWxkIGJlIEdNVAorIyArMDg6MDAgaW5zdGVhZC4gRGlmZmVyZW50IHNvdXJjZXMgYXBwZWFyIHRvIGRpc2FncmVlIHdpdGggdGhlIHR6CisjIGRhdGFiYXNlIG9uIHRoaXMsIGUuZy46CisjCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL3dvcmxkY2xvY2svY2l0eS5odG1sP249MTAyNiI+CisjIGh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL3dvcmxkY2xvY2svY2l0eS5odG1sP249MTAyNgorIyA8L2E+CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cud29ybGR0aW1lc2VydmVyLmNvbS9jdXJyZW50X3RpbWVfaW5fTU4uYXNweCI+CisjIGh0dHA6Ly93d3cud29ybGR0aW1lc2VydmVyLmNvbS9jdXJyZW50X3RpbWVfaW5fTU4uYXNweAorIyA8L2E+CisjCisjIGJvdGggc2F5IEdNVCswODowMC4KKworIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwOC0wMy0zMSk6CisjIGV6bmlzIGFpcndheXMsIHdoaWNoIG9wZXJhdGVzIHNldmVyYWwgZG9tZXN0aWMgZmxpZ2h0cywgaGFzIGEgZmxpZ2h0CisjIHNjaGVkdWxlIGhlcmU6CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuZXpuaXMuY29tL0NvbnRhaW5lci5qc3A/aWQ9MTEyIj4KKyMgaHR0cDovL3d3dy5lem5pcy5jb20vQ29udGFpbmVyLmpzcD9pZD0xMTIKKyMgPC9hPgorIyAoY2xpY2sgdGhlIEVuZ2xpc2ggZmxhZyBmb3IgRW5nbGlzaCkKKyMKKyMgVGhlcmUgaXQgYXBwZWFycyB0aGF0IGZsaWdodHMgYmV0d2VlbiBDaG9pYmFsc2FuIGFuZCBVbGFhbmJhdGFyIGFycml2ZQorIyBhYm91dCAxOjM1IC0gMTo1MCBob3VycyBsYXRlciBpbiBsb2NhbCBjbG9jayB0aW1lLCBubyBtYXR0ZXIgdGhlCisjIGRpcmVjdGlvbiwgd2hpbGUgVWxhYW5iYWF0YXItS2h2b2QgdGFrZXMgMiBob3VycyBpbiB0aGUgRWFzdGVybgorIyBkaXJlY3Rpb24gYW5kIDM6MzUgYmFjaywgd2hpY2ggaW5kaWNhdGVzIHRoYXQgVWxhYW5iYXRhciBhbmQgS2h2b2QgYXJlCisjIGluIGRpZmZlcmVudCB0aW1lIHpvbmVzIChsaWtlIHdlIGtub3cgYWJvdXQpLCB3aGlsZSBDaG9pYmFsc2FuIGFuZAorIyBVbGFhbmJhdGFyIGFyZSBpbiB0aGUgc2FtZSB0aW1lIHpvbmUgKGNvcnJlY3Rpb24gbmVlZGVkKS4KKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMjAwOC0wNS0xOSk6CisjIEFzc3VtZSB0aGF0IENob2liYWxzYW4gaXMgaW5kZWVkIG9mZnNldCBieSA4OjAwLgorIyBYWFgtLWluIHRoZSBhYnNlbmNlIG9mIGJldHRlciBpbmZvcm1hdGlvbiwgYXNzdW1lIHRoYXQgdHJhbnNpdGlvbgorIyB3YXMgYXQgdGhlIHN0YXJ0IG9mIDIwMDgtMDMtMzEgKHRoZSBkYXkgb2YgU3RlZmZlbiBUaG9yc2VuJ3MgcmVwb3J0KTsKKyMgdGhpcyBpcyBhbG1vc3Qgc3VyZWx5IHdyb25nLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlNb25nb2wJMTk4MwkxOTg0CS0JQXByCTEJMDowMAkxOjAwCVMKK1J1bGUJTW9uZ29sCTE5ODMJb25seQktCU9jdAkxCTA6MDAJMAktCisjIFNoYW5rcyAmIFBvdHRlbmdlciBhbmQgSUFUQSBTU0lNIHNheSAxOTkwcyBzd2l0Y2hlcyBvY2N1cnJlZCBhdCAwMDowMCwKKyMgYnV0IE1jRG93IHNheXMgdGhlIDIwMDEgc3dpdGNoZXMgb2NjdXJyZWQgYXQgMDI6MDAuICBBbHNvLCBJQVRBIFNTSU0KKyMgKDE5OTYtMDkpIHNheXMgMTk5Ni0xMC0yNS4gIEdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyIHRocm91Z2ggMTk5OC4KKyMKKyMgU2hhbmtzICYgUG90dGVuZ2VyIHNheSB0aGF0IHRoZSBTZXB0LiAxOTg0IHRocm91Z2ggU2VwdC4gMTk5MCBzd2l0Y2hlcworIyBpbiBDaG9pYmFsc2FuIChtb3JlIHByZWNpc2VseSwgaW4gRG9ybm9kIGFuZCBTdWtoYmFhdGFyKSB0b29rIHBsYWNlCisjIGF0IDAyOjAwIHN0YW5kYXJkIHRpbWUsIG5vdCBhdCAwMDowMCBsb2NhbCB0aW1lIGFzIGluIHRoZSByZXN0IG9mCisjIHRoZSBjb3VudHJ5LiAgVGhhdCB3b3VsZCBiZSBvZGQsIGFuZCBwb3NzaWJseSBpcyBhIHJlc3VsdCBvZiB0aGVpcgorIyBjb3JyZWN0aW9uIG9mIDAyOjAwIChpbiB0aGUgcHJldmlvdXMgZWRpdGlvbikgbm90IGJlaW5nIGRvbmUgY29ycmVjdGx5CisjIGluIHRoZSBsYXRlc3QgZWRpdGlvbjsgc28gaWdub3JlIGl0IGZvciBub3cuCisKK1J1bGUJTW9uZ29sCTE5ODUJMTk5OAktCU1hcglsYXN0U3VuCTA6MDAJMTowMAlTCitSdWxlCU1vbmdvbAkxOTg0CTE5OTgJLQlTZXAJbGFzdFN1bgkwOjAwCTAJLQorIyBJQVRBIFNTSU0gKDE5OTktMDkpIHNheXMgTW9uZ29saWEgbm8gbG9uZ2VyIG9ic2VydmVzIERTVC4KK1J1bGUJTW9uZ29sCTIwMDEJb25seQktCUFwcglsYXN0U2F0CTI6MDAJMTowMAlTCitSdWxlCU1vbmdvbAkyMDAxCTIwMDYJLQlTZXAJbGFzdFNhdAkyOjAwCTAJLQorUnVsZQlNb25nb2wJMjAwMgkyMDA2CS0JTWFyCWxhc3RTYXQJMjowMAkxOjAwCVMKKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorIyBIb3ZkLCBhLmsuYS4gQ2hvdmQsIER1bmQtVXMsIER6aGFyZ2FsYW50LCBLaG92ZCwgSmlyZ2FsYW50YQorWm9uZQlBc2lhL0hvdmQJNjowNjozNiAtCUxNVAkxOTA1IEF1ZworCQkJNjowMAktCUhPVlQJMTk3OAkjIEhvdmQgVGltZQorCQkJNzowMAlNb25nb2wJSE9WJXNUCisjIFVsYWFuYmFhdGFyLCBhLmsuYS4gVWxhbiBCYXRhYXIsIFVsYW4gQmF0b3IsIFVyZ2EKK1pvbmUJQXNpYS9VbGFhbmJhYXRhciA3OjA3OjMyIC0JTE1UCTE5MDUgQXVnCisJCQk3OjAwCS0JVUxBVAkxOTc4CSMgVWxhYW5iYWF0YXIgVGltZQorCQkJODowMAlNb25nb2wJVUxBJXNUCisjIENob2liYWxzYW4sIGEuay5hLiBCYWphbiBUdWVtZW4sIEJhamFuIFR1bWVuLCBDaG9qYmFsc2FuLAorIyBDaG95YmFsc2FuLCBTYW5iZWpzZSwgVGNob2liYWxzYW4KK1pvbmUJQXNpYS9DaG9pYmFsc2FuCTc6Mzg6MDAgLQlMTVQJMTkwNSBBdWcKKwkJCTc6MDAJLQlVTEFUCTE5NzgKKwkJCTg6MDAJLQlVTEFUCTE5ODMgQXByCisJCQk5OjAwCU1vbmdvbAlDSE8lc1QJMjAwOCBNYXIgMzEgIyBDaG9pYmFsc2FuIFRpbWUKKwkJCTg6MDAJTW9uZ29sCUNITyVzVAorCisjIE5lcGFsCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvS2F0aG1hbmR1CTU6NDE6MTYgLQlMTVQJMTkyMAorCQkJNTozMAktCUlTVAkxOTg2CisJCQk1OjQ1CS0JTlBUCSMgTmVwYWwgVGltZQorCisjIE9tYW4KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9NdXNjYXQJMzo1NDoyMCAtCUxNVAkxOTIwCisJCQk0OjAwCS0JR1NUCisKKyMgUGFraXN0YW4KKworIyBGcm9tIFJpdmVzIE1jRG93ICgyMDAyLTAzLTEzKToKKyMgSSBoYXZlIGJlZW4gYWR2aXNlZCB0aGF0IFBha2lzdGFuIGhhcyBkZWNpZGVkIHRvIGFkb3B0IGRzdCBvbiBhCisjIFRSSUFMIGJhc2lzIGZvciBvbmUgeWVhciwgc3RhcnRpbmcgMDA6MDEgbG9jYWwgdGltZSBvbiBBcHJpbCA3LCAyMDAyCisjIGFuZCBlbmRpbmcgYXQgMDA6MDEgbG9jYWwgdGltZSBPY3RvYmVyIDYsIDIwMDIuICBUaGlzIGlzIHdoYXQgSSB3YXMKKyMgdG9sZCwgYnV0IEkgYmVsaWV2ZSB0aGF0IHRoZSBhY3R1YWwgdGltZSBvZiBjaGFuZ2UgbWF5IGJlIDAwOjAwOyB0aGUKKyMgMDA6MDEgd2FzIHRvIG1ha2UgaXQgY2xlYXIgd2hpY2ggZGF5IGl0IHdhcyBvbi4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDAyLTAzLTE1KToKKyMgSmVzcGVyIE5vcmdhYXJkIGZvdW5kIHRoaXMgVVJMOgorIyBodHRwOi8vd3d3LnBhay5nb3YucGsvcHVibGljL25ld3MvYXBwL2FwcDA2X2RlYy5odG0KKyMgKGRhdGVkIDIwMDEtMTItMDYpIHdoaWNoIHNheXMgdGhhdCB0aGUgQ2FiaW5ldCBhZG9wdGVkIGEgc2NoZW1lICJ0bworIyBhZHZhbmNlIHRoZSBjbG9ja3MgYnkgb25lIGhvdXIgb24gdGhlIG5pZ2h0IGJldHdlZW4gdGhlIGZpcnN0CisjIFNhdHVyZGF5IGFuZCBTdW5kYXkgb2YgQXByaWwgYW5kIHJldmVydCB0byB0aGUgb3JpZ2luYWwgcG9zaXRpb24gb24KKyMgMTV0aCBPY3RvYmVyIGVhY2ggeWVhciIuICBUaGlzIGFncmVlcyB3aXRoIE1jRG93J3MgMDQtMDcgYXQgMDA6MDAsCisjIGJ1dCBkaXNhZ3JlZXMgYWJvdXQgdGhlIE9jdG9iZXIgdHJhbnNpdGlvbiwgYW5kIG1ha2VzIGl0IHNvdW5kIGxpa2UKKyMgaXQncyBub3Qgb24gYSB0cmlhbCBiYXNpcy4gIEFsc28sIHRoZSAiYmV0d2VlbiB0aGUgZmlyc3QgU2F0dXJkYXkKKyMgYW5kIFN1bmRheSBvZiBBcHJpbCIgcGhyYXNlLCBpZiB0YWtlbiBsaXRlcmFsbHksIG1lYW5zIHRoYXQgdGhlCisjIHRyYW5zaXRpb24gdGFrZXMgcGxhY2UgYXQgMDA6MDAgb24gdGhlIGZpcnN0IFN1bmRheSBvbiBvciBhZnRlciAwNC0wMi4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDAzLTAyLTA5KToKKyMgREFXTiA8aHR0cDovL3d3dy5kYXduLmNvbS8yMDAyLzEwLzA2L3RvcDEzLmh0bT4gcmVwb3J0ZWQgb24gMjAwMi0xMC0wNQorIyB0aGF0IDIwMDIgRFNUIGVuZGVkIHRoYXQgZGF5IGF0IG1pZG5pZ2h0LiAgR28gd2l0aCBNY0RvdyBmb3Igbm93LgorCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDAzLTAzLTE0KToKKyMgQWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cuZGF3bi5jb20vMjAwMy8wMy8wNy90b3AxNS5odG0KKyMgdGhlcmUgd2lsbCBiZSBubyBEU1QgaW4gUGFraXN0YW4gdGhpcyB5ZWFyOgorIworIyBJU0xBTUFCQUQsIE1hcmNoIDY6IEluZm9ybWF0aW9uIGFuZCBNZWRpYSBEZXZlbG9wbWVudCBNaW5pc3RlciBTaGVpa2gKKyMgUmFzaGlkIEFobWVkIG9uIFRodXJzZGF5IHNhaWQgdGhlIGNhYmluZXQgaGFkIHJldmVyc2VkIGEgcHJldmlvdXMKKyMgZGVjaXNpb24gdG8gYWR2YW5jZSBjbG9ja3MgYnkgb25lIGhvdXIgaW4gc3VtbWVyIGFuZCBwdXQgdGhlbSBiYWNrIGJ5CisjIG9uZSBob3VyIGluIHdpbnRlciB3aXRoIHRoZSBhaW0gb2Ygc2F2aW5nIGxpZ2h0IGhvdXJzIGFuZCBlbmVyZ3kuCisjCisjIFRoZSBtaW5pc3RlciB0b2xkIGEgbmV3cyBjb25mZXJlbmNlIHRoYXQgdGhlIGV4cGVyaW1lbnQgaGFkIHJhdGhlcgorIyBzaG93biA4IHBlciBjZW50IGhpZ2hlciBjb25zdW1wdGlvbiBvZiBlbGVjdHJpY2l0eS4KKworIyBGcm9tIEFsZXggS3JpdmVueXNoZXYgKDIwMDgtMDUtMTUpOgorIyAKKyMgSGVyZSBpcyBhbiBhcnRpY2xlIHRoYXQgUGFraXN0YW4gcGxhbiB0byBpbnRyb2R1Y2UgRGF5bGlnaHQgU2F2aW5nIFRpbWUgCisjIG9uIEp1bmUgMSwgMjAwOCBmb3IgMyBtb250aHMuCisjIAorIyAiLi4uIFRoZSBmZWRlcmFsIGNhYmluZXQgb24gV2VkbmVzZGF5IGFubm91bmNlZCBhIG5ldyBjb25zZXJ2YXRpb24gcGxhbiB0byBoZWxwIAorIyByZWR1Y2UgbG9hZCBzaGVkZGluZyBieSBhcHByb3ZpbmcgdGhlIGNsb3N1cmUgb2YgY29tbWVyY2lhbCBjZW50cmVzIGF0IDlwbSBhbmQgCisjIG1vdmluZyBjbG9ja3MgZm9yd2FyZCBieSBvbmUgaG91ciBmb3IgdGhlIG5leHQgdGhyZWUgbW9udGhzLiAKKyMgLi4uLiIKKyMgCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5uZXQvZHN0X25ld3MvZHN0X25ld3NfcGFraXN0YW4wMS5odG1sIj4KKyMgaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLm5ldC9kc3RfbmV3cy9kc3RfbmV3c19wYWtpc3RhbjAxLmh0bWwKKyMgPC9hPgorIyBPUgorIyA8YSBocmVmPSJodHRwOi8vd3d3LmRhaWx5dGltZXMuY29tLnBrL2RlZmF1bHQuYXNwP3BhZ2U9MjAwOCU1QzA1JTVDMTUlNUNzdG9yeV8xNS01LTIwMDhfcGcxXzQiPgorIyBodHRwOi8vd3d3LmRhaWx5dGltZXMuY29tLnBrL2RlZmF1bHQuYXNwP3BhZ2U9MjAwOCU1QzA1JTVDMTUlNUNzdG9yeV8xNS01LTIwMDhfcGcxXzQKKyMgPC9hPgorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgyMDA4LTA1LTE5KToKKyMgWFhYLS1taWRuaWdodCB0cmFuc2l0aW9ucyBpcyBhIGd1ZXNzOyAyMDA4IG9ubHkgaXMgYSBndWVzcy4KKworIyBGcm9tIEFsZXhhbmRlciBLcml2ZW55c2hldiAoMjAwOC0wOC0yOCk6CisjIFBha2lzdGFuIGdvdmVybm1lbnQgaGFzIGRlY2lkZWQgdG8ga2VlcCB0aGUgd2F0Y2hlcyBvbmUtaG91ciBhZHZhbmNlZAorIyBmb3IgYW5vdGhlciAyIG1vbnRocy0tcGxhbiB0byByZXR1cm4gdG8gU3RhbmRhcmQgVGltZSBvbiBPY3RvYmVyIDMxCisjIGluc3RlYWQgb2YgQXVndXN0IDMxLgorIworIyA8YSBocmVmPSJodHRwOi8vd3d3LndvcmxkdGltZXpvbmUuY29tL2RzdF9uZXdzL2RzdF9uZXdzX3Bha2lzdGFuMDIuaHRtbCI+CisjIGh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5jb20vZHN0X25ld3MvZHN0X25ld3NfcGFraXN0YW4wMi5odG1sCisjIDwvYT4KKyMgT1IKKyMgPGEgaHJlZj0iaHR0cDovL2RhaWx5bWFpbG5ld3MuY29tLzIwMDgwOC8yOC9uZXdzL2RtYnJuMDMuaHRtbCI+CisjIGh0dHA6Ly9kYWlseW1haWxuZXdzLmNvbS8yMDA4MDgvMjgvbmV3cy9kbWJybjAzLmh0bWwKKyMgPC9hPgorCisjIEZyb20gQWxleGFuZGVyIEtyaXZlbnlzaGV2ICgyMDA5LTA0LTA4KToKKyMgQmFzZWQgb24gcHJldmlvdXMgbWVkaWEgcmVwb3J0cyB0aGF0ICIuLi4gcHJvcG9zZWQgcGxhbiB0bworIyBhZHZhbmNlIGNsb2NrcyBieSBvbmUgaG91ciBmcm9tIE1heSAxIHdpbGwgY2F1c2UgZGlzdHVyYmFuY2UKKyMgdG8gdGhlIHdvcmtpbmcgc2NoZWR1bGVzIHJhdGhlciB0aGFuIGJyaW5naW5nIGRpc2NpcGxpbmUgaW4KKyMgb2ZmaWNpYWwgd29ya2luZy4iCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cudGhlbmV3cy5jb20ucGsvZGFpbHlfZGV0YWlsLmFzcD9pZD0xNzEyODAiPgorIyBodHRwOi8vd3d3LnRoZW5ld3MuY29tLnBrL2RhaWx5X2RldGFpbC5hc3A/aWQ9MTcxMjgwCisjIDwvYT4KKyMKKyMgcmVjZW50IG5ld3MgdGhhdCBpbnN0ZWFkIG9mIE1heSAyMDA5IC0gUGFraXN0YW4gcGxhbiB0bworIyBpbnRyb2R1Y2UgRFNUIGZyb20gQXByaWwgMTUsIDIwMDkKKyMKKyMgRllJOiBBc3NvY2lhdGVkIFByZXNzIE9mIFBha2lzdGFuCisjIEFwcmlsIDA4LCAyMDA5CisjIENhYmluZXQgb2theXMgcHJvcG9zYWwgdG8gYWR2YW5jZSBjbG9ja3MgYnkgb25lIGhvdXIgZnJvbSBBcHJpbCAxNQorIyA8YSBocmVmPSJodHRwOi8vd3d3LmFwcC5jb20ucGsvZW5fL2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdGFzaz12aWV3JmlkPTczMDQzJkl0ZW1pZD0xIj4KKyMgaHR0cDovL3d3dy5hcHAuY29tLnBrL2VuXy9pbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnRhc2s9dmlldyZpZD03MzA0MyZJdGVtaWQ9MQorIyA8L2E+CisjCisjIG9yCisjCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5jb20vZHN0X25ld3MvZHN0X25ld3NfcGFraXN0YW4wNS5odG1sIj4KKyMgaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLmNvbS9kc3RfbmV3cy9kc3RfbmV3c19wYWtpc3RhbjA1Lmh0bWwKKyMgPC9hPgorIworIyAuLi4uCisjIFRoZSBGZWRlcmFsIENhYmluZXQgb24gV2VkbmVzZGF5IGFwcHJvdmVkIHRoZSBwcm9wb3NhbCB0bworIyBhZHZhbmNlIGNsb2NrcyBpbiB0aGUgY291bnRyeSBieSBvbmUgaG91ciBmcm9tIEFwcmlsIDE1IHRvCisjIGNvbnNlcnZlIGVuZXJneSIKKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMjAwOS0wNC0xMCk6CisjIEFzc3VtZSBmb3Igbm93IHRoYXQgUGFraXN0YW4gd2lsbCBlbmQgRFNUIGluIDIwMDkgYXMgaXQgZGlkIGluIDIwMDguCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlIFBha2lzdGFuCTIwMDIJb25seQktCUFwcglTdW4+PTIJMDowMQkxOjAwCVMKK1J1bGUgUGFraXN0YW4JMjAwMglvbmx5CS0JT2N0CVN1bj49MgkwOjAxCTAJLQorUnVsZSBQYWtpc3RhbgkyMDA4CW9ubHkJLQlKdW4JMQkwOjAwCTE6MDAJUworUnVsZSBQYWtpc3RhbgkyMDA4CW9ubHkJLQlOb3YJMQkwOjAwCTAJLQorUnVsZSBQYWtpc3RhbgkyMDA5CW9ubHkJLQlBcHIJMTUJMDowMAkxOjAwCVMKK1J1bGUgUGFraXN0YW4JMjAwOQlvbmx5CS0JTm92CTEJMDowMAkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9LYXJhY2hpCTQ6Mjg6MTIgLQlMTVQJMTkwNworCQkJNTozMAktCUlTVAkxOTQyIFNlcAorCQkJNTozMAkxOjAwCUlTVAkxOTQ1IE9jdCAxNQorCQkJNTozMAktCUlTVAkxOTUxIFNlcCAzMAorCQkJNTowMAktCUtBUlQJMTk3MSBNYXIgMjYgIyBLYXJhY2hpIFRpbWUKKwkJCTU6MDAgUGFraXN0YW4JUEslc1QJIyBQYWtpc3RhbiBUaW1lCisKKyMgUGFsZXN0aW5lCisKKyMgRnJvbSBBbW9zIFNoYXBpciAoMTk5OC0wMi0xNSk6CisjCisjIEZyb20gMTkxNyB1bnRpbCAxOTQ4LTA1LTE1LCBhbGwgb2YgUGFsZXN0aW5lLCBpbmNsdWRpbmcgdGhlIHBhcnRzIG5vdworIyBrbm93biBhcyB0aGUgR2F6YSBTdHJpcCBhbmQgdGhlIFdlc3QgQmFuaywgd2FzIHVuZGVyIEJyaXRpc2ggcnVsZS4KKyMgVGhlcmVmb3JlIHRoZSBydWxlcyBnaXZlbiBmb3IgSXNyYWVsIGZvciB0aGF0IHBlcmlvZCwgYXBwbHkgdGhlcmUgdG9vLi4uCisjCisjIFRoZSBHYXphIFN0cmlwIHdhcyB1bmRlciBFZ3lwdGlhbiBydWxlIGJldHdlZW4gMTk0OC0wNS0xNSB1bnRpbCAxOTY3LTA2LTA1CisjIChleGNlcHQgYSBzaG9ydCBvY2N1cGF0aW9uIGJ5IElzcmFlbCBmcm9tIDE5NTYtMTEgdGlsbCAxOTU3LTAzLCBidXQgbm8KKyMgdGltZSB6b25lIHdhcyBhZmZlY3RlZCB0aGVuKS4gIEl0IHdhcyBuZXZlciBmb3JtYWxseSBhbm5leGVkIHRvIEVneXB0LAorIyB0aG91Z2guCisjCisjIFRoZSByZXN0IG9mIFBhbGVzdGluZSB3YXMgdW5kZXIgSm9yZGFuaWFuIHJ1bGUgYXQgdGhhdCB0aW1lLCBmb3JtYWxseQorIyBhbm5leGVkIGluIDE5NTAgYXMgdGhlIFdlc3QgQmFuayAoYW5kIHRoZSB3b3JkICJUcmFucyIgd2FzIGRyb3BwZWQgZnJvbQorIyB0aGUgY291bnRyeSdzIHByZXZpb3VzIG5hbWUgb2YgInRoZSBIYXNoZW1pdGUgS2luZ2RvbSBvZiB0aGUKKyMgVHJhbnMtSm9yZGFuIikuICBTbyB0aGUgcnVsZXMgZm9yIEpvcmRhbiBmb3IgdGhhdCB0aW1lIGFwcGx5LiAgTWFqb3IKKyMgdG93bnMgaW4gdGhhdCBhcmVhIGFyZSBOYWJsdXMgKFNoY2hlbSksIEVsLUhhbGlsIChIZWJyb24pLCBSYW1hbGxhaCwgYW5kCisjIEVhc3QgSmVydXNhbGVtLgorIworIyBCb3RoIGFyZWFzIHdlcmUgb2NjdXBpZWQgYnkgSXNyYWVsIGluIEp1bmUgMTk2NywgYnV0IG5vdCBhbm5leGVkIChleGNlcHQKKyMgZm9yIEVhc3QgSmVydXNhbGVtKS4gIFRoZXkgd2VyZSBvbiBJc3JhZWwgdGltZSBzaW5jZSB0aGVuOyB0aGVyZSBtaWdodAorIyBoYXZlIGJlZW4gYSBNaWxpdGFyeSBHb3Zlcm5vcidzIG9yZGVyIGFib3V0IHRpbWUgem9uZXMsIGJ1dCBJJ20gbm90IGF3YXJlCisjIG9mIGFueSAoc3VjaCBvcmRlcnMgbWF5IGhhdmUgYmVlbiBpc3N1ZWQgc2VtaS1hbm51YWxseSB3aGVuZXZlciBzdW1tZXIKKyMgdGltZSB3YXMgaW4gZWZmZWN0LCBidXQgbWF5YmUgdGhlIGxlZ2FsIGFzcGVjdCBvZiB0aW1lIHdhcyBqdXN0IG5lZ2xlY3RlZCkuCisjCisjIFRoZSBQYWxlc3RpbmlhbiBBdXRob3JpdHkgd2FzIGVzdGFibGlzaGVkIGluIDE5OTMsIGFuZCBnb3QgaG9sZCBvZiBtb3N0CisjIHRvd25zIGluIHRoZSBXZXN0IEJhbmsgYW5kIEdhemEgYnkgMTk5NS4gIEkga25vdyB0aGF0IGluIG9yZGVyIHRvCisjIGRlbW9uc3RyYXRlLi4uaW5kZXBlbmRlbmNlLCB0aGV5IGhhdmUgYmVlbiBzd2l0Y2hpbmcgdG8KKyMgc3VtbWVyIHRpbWUgYW5kIGJhY2sgb24gYSBkaWZmZXJlbnQgc2NoZWR1bGUgdGhhbiBJc3JhZWwncywgYnV0IEkgZG9uJ3QKKyMga25vdyB3aGVuIHRoaXMgd2FzIHN0YXJ0ZWQsIG9yIHdoYXQgYWxnb3JpdGhtIGlzIHVzZWQgKG1vc3QgbGlrZWx5IHRoZQorIyBKb3JkYW5pYW4gb25lKS4KKyMKKyMgVG8gc3VtbWFyaXplLCB0aGUgdGFibGUgc2hvdWxkIHByb2JhYmx5IGxvb2sgc29tZXRoaW5nIGxpa2UgdGhhdDoKKyMKKyMgQXJlYSBcIHdoZW4gfCAxOTE4LTE5NDcgfCAxOTQ4LTE5NjcgfCAxOTY3LTE5OTUgfCAxOTk2LQorIyAtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KKyMgSXNyYWVsICAgICAgfCBaaW9uICAgICAgfCBaaW9uICAgICAgfCBaaW9uICAgICAgfCBaaW9uCisjIFdlc3QgYmFuayAgIHwgWmlvbiAgICAgIHwgSm9yZGFuICAgIHwgWmlvbiAgICAgIHwgSm9yZGFuCisjIEdhemEgICAgICAgIHwgWmlvbiAgICAgIHwgRWd5cHQgICAgIHwgWmlvbiAgICAgIHwgSm9yZGFuCisjCisjIEkgZ3Vlc3MgbW9yZSBpbmZvIG1heSBiZSBhdmFpbGFibGUgZnJvbSB0aGUgUEEncyB3ZWIgcGFnZSAoaWYvd2hlbiB0aGV5CisjIGhhdmUgb25lKS4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgU2hhbmtzICYgUG90dGVuZ2VyIHdyaXRlIHRoYXQgR2F6YSBkaWQgbm90IG9ic2VydmUgRFNUIHVudGlsIDE5NTcsIGJ1dCBnbworIyB3aXRoIFNoYXBpciBhbmQgYXNzdW1lIHRoYXQgaXQgb2JzZXJ2ZWQgRFNUIGZyb20gMTk0MCB0aHJvdWdoIDE5NDcsCisjIGFuZCB0aGF0IGl0IHVzZWQgSm9yZGFuaWFuIHJ1bGVzIHN0YXJ0aW5nIGluIDE5OTYuCisjIFdlIGRvbid0IHlldCBuZWVkIGEgc2VwYXJhdGUgZW50cnkgZm9yIHRoZSBXZXN0IEJhbmssIHNpbmNlCisjIHRoZSBvbmx5IGRpZmZlcmVuY2VzIGJldHdlZW4gaXQgYW5kIEdhemEgdGhhdCB3ZSBrbm93IGFib3V0CisjIG9jY3VycmVkIGJlZm9yZSBvdXIgY3V0b2ZmIGRhdGUgb2YgMTk3MC4KKyMgSG93ZXZlciwgYXMgd2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24sIHdlIG1heSBuZWVkIHRvIGFkZCBlbnRyaWVzCisjIGZvciBwYXJ0cyBvZiB0aGUgV2VzdCBCYW5rIGFzIHRoZXkgdHJhbnNpdGlvbmVkIGZyb20gSXNyYWVsJ3MgcnVsZXMKKyMgdG8gUGFsZXN0aW5lJ3MgcnVsZXMuICBJZiB5b3UgaGF2ZSBtb3JlIGluZm8gYWJvdXQgdGhpcywgcGxlYXNlCisjIHNlbmQgaXQgdG8gdHpAZWxzaWUubmNpLm5paC5nb3YgZm9yIGluY29ycG9yYXRpb24gaW50byBmdXR1cmUgZWRpdGlvbnMuCisKKyMgRnJvbSBJSU5TIE5ld3MgU2VydmljZSAtIElzcmFlbCAtIDE5OTgtMDMtMjMgMTA6Mzg6MDcgSXNyYWVsIHRpbWUsCisjIGZvcndhcmRlZCBieSBFcGhyYWltIFNpbHZlcmJlcmc6CisjCisjIERlc3BpdGUgdGhlIGZhY3QgdGhhdCBJc3JhZWwgY2hhbmdlZCBvdmVyIHRvIGRheWxpZ2h0IHNhdmluZ3MgdGltZQorIyBsYXN0IHdlZWssIHRoZSBQTE8gQXV0aG9yaXR5IChQQSkgaGFzIGRlY2lkZWQgbm90IHRvIHR1cm4gaXRzIGNsb2NrcworIyBvbmUtaG91ciBmb3J3YXJkIGF0IHRoaXMgdGltZS4gIEFzIGEgc2lnbiBvZiBpbmRlcGVuZGVuY2UgZnJvbSBJc3JhZWxpIHJ1bGUsCisjIHRoZSBQQSBoYXMgZGVjaWRlZCB0byBpbXBsZW1lbnQgRFNUIGluIEFwcmlsLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTktMDktMjApOgorIyBEYW91ZCBLdXR0YWIgd3JpdGVzIGluCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuanBvc3QuY29tL2NvbS9BcmNoaXZlLzIyLkFwci4xOTk5L09waW5pb24vQXJ0aWNsZS0yLmh0bWwiPgorIyBIb2xpZGF5IGhhdm9jCisjIDwvYT4gKEplcnVzYWxlbSBQb3N0LCAxOTk5LTA0LTIyKSB0aGF0CisjIHRoZSBQYWxlc3RpbmlhbiBOYXRpb25hbCBBdXRob3JpdHkgY2hhbmdlZCB0byBEU1Qgb24gMTk5OS0wNC0xNS4KKyMgSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IHRoZXkgc3dpdGNoIGJhY2sgaW4gT2N0b2JlciAoc29ycnksIGZvcmdvdCB0aGUgc291cmNlKS4KKyMgRm9yIG5vdywgbGV0J3MgYXNzdW1lIHRoYXQgdGhlIHNwcmluZyBzd2l0Y2ggd2FzIGF0IDI0OjAwLAorIyBhbmQgdGhhdCB0aGV5IHN3aXRjaCBhdCAwOjAwIG9uIHRoZSAzcmQgRnJpZGF5cyBvZiBBcHJpbCBhbmQgT2N0b2Jlci4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA1LTExLTIyKToKKyMgU3RhcnRpbmcgMjAwNCB0cmFuc2l0aW9ucyBhcmUgZnJvbSBTdGVmZmVuIFRob3JzZW4ncyB3ZWIgc2l0ZSB0aW1lYW5kZGF0ZS5jb20uCisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDUtMTEtMjMpOgorIyBBIHVzZXIgZnJvbSBHYXphIHJlcG9ydGVkIHRoYXQgR2F6YSBtYWRlIHRoZSBjaGFuZ2UgZWFybHkgYmVjYXVzZSBvZgorIyB0aGUgUmFtYWRhbi4gIE5leHQgeWVhciBSYW1hZGFuIHdpbGwgYmUgZXZlbiBlYXJsaWVyLCBzbyBJIHRoaW5rCisjIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgbmV4dCB5ZWFyJ3MgZW5kIGRhdGUgd2lsbCBiZSBhcm91bmQgdHdvIHdlZWtzCisjIGVhcmxpZXItLXRoZSBzYW1lIGdvZXMgZm9yIEpvcmRhbi4KKworIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwNi0wOC0xNyk6CisjIEkgd2FzIGluZm9ybWVkIGJ5IGEgdXNlciBpbiBCZXRobGVoZW0gdGhhdCBpbiBCZXRobGVoZW0gaXQgc3RhcnRlZCB0aGUKKyMgc2FtZSBkYXkgYXMgSXNyYWVsLCBhbmQgYWZ0ZXIgY2hlY2tpbmcgd2l0aCBvdGhlciB1c2VycyBpbiB0aGUgYXJlYSwgSQorIyB3YXMgaW5mb3JtZWQgdGhhdCB0aGV5IHN0YXJ0ZWQgRFNUIG9uZSBkYXkgYWZ0ZXIgSXNyYWVsLiAgSSB3YXMgbm90CisjIGFibGUgdG8gZmluZCBhbnkgYXV0aG9yaXRhdGl2ZSBzb3VyY2VzIGF0IHRoZSB0aW1lLCBub3IgZGV0YWlscyBpZgorIyBHYXphIGNoYW5nZWQgYXMgd2VsbCwgYnV0IHByZXN1bWVkIEdhemEgdG8gZm9sbG93IHRoZSBzYW1lIHJ1bGVzIGFzCisjIHRoZSBXZXN0IEJhbmsuCisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDYtMDktMjYpOgorIyBhY2NvcmRpbmcgdG8gdGhlIFBhbGVzdGluZSBOZXdzIE5ldHdvcmsgKDIwMDYtMDktMTkpOgorIyBodHRwOi8vZW5nbGlzaC5wbm4ucHMvaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZ0YXNrPXZpZXcmaWQ9NTk2Jkl0ZW1pZD01CisjID4gVGhlIENvdW5jaWwgb2YgTWluaXN0ZXJzIGFubm91bmNlZCB0aGF0IHRoaXMgeWVhciBpdHMgd2ludGVyIHNjaGVkdWxlCisjID4gd2lsbCBiZWdpbiBlYXJseSwgYXMgb2YgbWlkbmlnaHQgVGh1cnNkYXkuICBJdCBpcyBhbHNvIHRpbWUgdG8gdHVybgorIyA+IGJhY2sgdGhlIGNsb2NrcyBmb3Igd2ludGVyLiAgRnJpZGF5IHdpbGwgYmVnaW4gYW4gaG91ciBsYXRlIHRoaXMgd2Vlay4KKyMgSSBndWVzcyBpdCBpcyBsaWtlbHkgdGhhdCBuZXh0IHllYXIncyBkYXRlIHdpbGwgYmUgbW92ZWQgYXMgd2VsbCwKKyMgYmVjYXVzZSBvZiB0aGUgUmFtYWRhbi4KKworIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNy0wOS0xOCk6CisjIEFjY29yZGluZyB0byBTdGVmZmVuIFRob3JzZW4ncyB3ZWIgc2l0ZSB0aGUgR2F6YSBTdHJpcCBhbmQgdGhlIHJlc3Qgb2YgdGhlCisjIFBhbGVzdGluaWFuIHRlcnJpdG9yaWVzIGxlZnQgRFNUIGVhcmx5IG9uIDEzLnRoLiBvZiBTZXB0ZW1iZXIgYXQgMjowMC4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA3LTA5LTIwKToKKyMgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IEdhemEgYW5kIHRoZSBXZXN0IEJhbmsgZGlzYWdyZWUgZXZlbiBvdmVyIHdoZW4KKyMgdGhlIHdlZWtlbmQgaXMgKFRodXJzZGF5K0ZyaWRheSB2ZXJzdXMgRnJpZGF5K1NhdHVyZGF5KSwgc28gSSdkIGJlIGEgYml0CisjIHN1cnByaXNlZCBpZiB0aGV5IGFncmVlZCBhYm91dCBEU1QuICBCdXQgZm9yIG5vdywgYXNzdW1lIHRoZXkgYWdyZWUuCisjIEZvciBsYWNrIG9mIGJldHRlciBpbmZvcm1hdGlvbiwgcHJlZGljdCB0aGF0IGZ1dHVyZSBjaGFuZ2VzIHdpbGwgYmUKKyMgdGhlIDJuZCBUaHVyc2RheSBvZiBTZXB0ZW1iZXIgYXQgMDI6MDAuCisKKyMgRnJvbSBBbGV4YW5kZXIgS3JpdmVueXNoZXYgKDIwMDgtMDgtMjgpOgorIyBIZXJlIGlzIGFuIGFydGljbGUsIHRoYXQgTWlkZWFzdCBydW5uaW5nIG9uIGRpZmZlcmVudCBjbG9ja3MgYXQgUmFtYWRhbi4KKyMKKyMgR2F6YSBTdHJpcCAoYXMgRWd5cHQpIGVuZGVkIERTVCBhdCBtaWRuaWdodCBUaHVyc2RheSAoQXVnIDI4LCAyMDA4KSwgd2hpbGUKKyMgdGhlIFdlc3QgQmFuayB3aWxsIGVuZCBEYXlsaWdodCBTYXZpbmcgVGltZSBhdCBtaWRuaWdodCBTdW5kYXkgKEF1ZyAzMSwgMjAwOCkuCisjCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ3VhcmRpYW4uY28udWsvd29ybGQvZmVlZGFydGljbGUvNzc1OTAwMSI+CisjIGh0dHA6Ly93d3cuZ3VhcmRpYW4uY28udWsvd29ybGQvZmVlZGFydGljbGUvNzc1OTAwMQorIyA8L2E+CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWJjbmV3cy5nby5jb20vSW50ZXJuYXRpb25hbC93aXJlU3Rvcnk/aWQ9NTY3NjA4NyI+CisjIGh0dHA6Ly93d3cuYWJjbmV3cy5nby5jb20vSW50ZXJuYXRpb25hbC93aXJlU3Rvcnk/aWQ9NTY3NjA4NworIyA8L2E+CisjIG9yCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5jb20vZHN0X25ld3MvZHN0X25ld3NfZ2F6YXN0cmlwMDEuaHRtbCI+CisjIGh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5jb20vZHN0X25ld3MvZHN0X25ld3NfZ2F6YXN0cmlwMDEuaHRtbAorIyA8L2E+CisKKyMgRnJvbSBBbGV4YW5kZXIgS3JpdmVueXNoZXYgKDIwMDktMDMtMjYpOgorIyBBY2NvcmRpbmcgdG8gdGhlIFBhbGVzdGluZSBOZXdzIE5ldHdvcmsgKGFyYWJpYy5wbm4ucHMpLCBQYWxlc3RpbmlhbgorIyBnb3Zlcm5tZW50IGRlY2lkZWQgdG8gc3RhcnQgRGF5bGlnaHQgVGltZSBvbiBUaHVyc2RheSBuaWdodCBNYXJjaAorIyAyNiBhbmQgY29udGludWUgdW50aWwgdGhlIG5pZ2h0IG9mIDI3IFNlcHRlbWJlciAyMDA5LgorIworIyAoaW4gQXJhYmljKQorIyA8YSBocmVmPSJodHRwOi8vYXJhYmljLnBubi5wcy9pbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnRhc2s9dmlldyZpZD01MDg1MCI+CisjIGh0dHA6Ly9hcmFiaWMucG5uLnBzL2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdGFzaz12aWV3JmlkPTUwODUwCisjIDwvYT4KKyMKKyMgb3IKKyMgKEVuZ2xpc2ggdHJhbnNsYXRpb24pCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5jb20vZHN0X25ld3MvZHN0X25ld3Nfd2VzdGJhbmswMS5odG1sIj4KKyMgaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLmNvbS9kc3RfbmV3cy9kc3RfbmV3c193ZXN0YmFuazAxLmh0bWwKKyMgPC9hPgorCisjIFRoZSBydWxlcyBmb3IgRWd5cHQgYXJlIHN0b2xlbiBmcm9tIHRoZSBgYWZyaWNhJyBmaWxlLgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUgRWd5cHRBc2lhCTE5NTcJb25seQktCU1heQkxMAkwOjAwCTE6MDAJUworUnVsZSBFZ3lwdEFzaWEJMTk1NwkxOTU4CS0JT2N0CSAxCTA6MDAJMAktCitSdWxlIEVneXB0QXNpYQkxOTU4CW9ubHkJLQlNYXkJIDEJMDowMAkxOjAwCVMKK1J1bGUgRWd5cHRBc2lhCTE5NTkJMTk2NwktCU1heQkgMQkxOjAwCTE6MDAJUworUnVsZSBFZ3lwdEFzaWEJMTk1OQkxOTY1CS0JU2VwCTMwCTM6MDAJMAktCitSdWxlIEVneXB0QXNpYQkxOTY2CW9ubHkJLQlPY3QJIDEJMzowMAkwCS0KKworUnVsZSBQYWxlc3RpbmUJMTk5OQkyMDA1CS0JQXByCUZyaT49MTUJMDowMAkxOjAwCVMKK1J1bGUgUGFsZXN0aW5lCTE5OTkJMjAwMwktCU9jdAlGcmk+PTE1CTA6MDAJMAktCitSdWxlIFBhbGVzdGluZQkyMDA0CW9ubHkJLQlPY3QJIDEJMTowMAkwCS0KK1J1bGUgUGFsZXN0aW5lCTIwMDUJb25seQktCU9jdAkgNAkyOjAwCTAJLQorUnVsZSBQYWxlc3RpbmUJMjAwNgkyMDA4CS0JQXByCSAxCTA6MDAJMTowMAlTCitSdWxlIFBhbGVzdGluZQkyMDA2CW9ubHkJLQlTZXAJMjIJMDowMAkwCS0KK1J1bGUgUGFsZXN0aW5lCTIwMDcJb25seQktCVNlcAlUaHU+PTgJMjowMAkwCS0KK1J1bGUgUGFsZXN0aW5lCTIwMDgJb25seQktCUF1ZwlsYXN0RnJpCTI6MDAJMAktCitSdWxlIFBhbGVzdGluZQkyMDA5CW1heAktCU1hcglsYXN0RnJpCTA6MDAJMTowMAlTCitSdWxlIFBhbGVzdGluZQkyMDA5CW1heAktCVNlcAlsYXN0TW9uCTI6MDAJMAktCisKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9HYXphCTI6MTc6NTIJLQlMTVQJMTkwMCBPY3QKKwkJCTI6MDAJWmlvbglFRVQJMTk0OCBNYXkgMTUKKwkJCTI6MDAgRWd5cHRBc2lhCUVFJXNUCTE5NjcgSnVuICA1CisJCQkyOjAwCVppb24JSSVzVAkxOTk2CisJCQkyOjAwCUpvcmRhbglFRSVzVAkxOTk5CisJCQkyOjAwIFBhbGVzdGluZQlFRSVzVAorCisjIFBhcmFjZWwgSXMKKyMgbm8gaW5mb3JtYXRpb24KKworIyBQaGlsaXBwaW5lcworIyBPbiAxODQ0LTA4LTE2LCBOYXJjaXNvIENsYXZlcmlhLCBnb3Zlcm5vci1nZW5lcmFsIG9mIHRoZQorIyBQaGlsaXBwaW5lcywgaXNzdWVkIGEgcHJvY2xhbWF0aW9uIGFubm91bmNpbmcgdGhhdCAxODQ0LTEyLTMwIHdhcyB0bworIyBiZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSAxODQ1LTAxLTAxLiAgUm9iZXJ0IEguIHZhbiBHZW50IGhhcyBhCisjIHRyYW5zY3JpcHQgb2YgdGhlIGRlY3JlZSBpbiA8aHR0cDovL3d3dy5waHlzLnV1Lm5sL352Z2VudC9pZGwvaWRsLmh0bT4uCisjIFRoZSByZXN0IG9mIHRoZSBkYXRhIGFyZSBmcm9tIFNoYW5rcyAmIFBvdHRlbmdlci4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTA0LTI1KToKKyMgVG9tb3Jyb3cncyBNYW5pbGEgU3RhbmRhcmQgcmVwb3J0cyB0aGF0IHRoZSBQaGlsaXBwaW5lcyBEZXBhcnRtZW50IG9mCisjIFRyYWRlIGFuZCBJbmR1c3RyeSBpcyBjb25zaWRlcmluZyBhZG9wdGluZyBEU1QgdGhpcyBKdW5lIHdoZW4gdGhlCisjIHJhaW55IHNlYXNvbiBiZWdpbnMuICBTZWUKKyMgPGh0dHA6Ly93d3cubWFuaWxhc3RhbmRhcmR0b2RheS5jb20vP3BhZ2U9cG9saXRpY3MwMl9hcHJpbDI2XzIwMDY+LgorIyBGb3Igbm93LCB3ZSdsbCBpZ25vcmUgdGhpcywgc2luY2UgaXQncyBub3QgZGVmaW5pdGUgYW5kIHdlIGxhY2sgZGV0YWlscy4KKyMKKyMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDYtMDQtMjYpOgorIyAuLi4gY2xhaW1zIHRoYXQgUGhpbGlwcGluZXMgaGFkIERTVCBsYXN0IHRpbWUgaW4gMTk5MDoKKyMgaHR0cDovL3N0b3J5LnBoaWxpcHBpbmV0aW1lcy5jb20vcC54L2N0LzkvaWQvMTQ1YmUyMGNjNmIxMjFjMC9jaWQvM2U1YmJjY2M3MzBkMjU4Yy8KKyMgW2Egc3RvcnkgZGF0ZWQgMjAwNi0wNC0yNSBieSBDcmlzIExhcmFubyBvZiBEb3cgSm9uZXMgTmV3c3dpcmVzLAorIyBidXQgbm8gZGV0YWlsc10KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJUGhpbAkxOTM2CW9ubHkJLQlOb3YJMQkwOjAwCTE6MDAJUworUnVsZQlQaGlsCTE5MzcJb25seQktCUZlYgkxCTA6MDAJMAktCitSdWxlCVBoaWwJMTk1NAlvbmx5CS0JQXByCTEyCTA6MDAJMTowMAlTCitSdWxlCVBoaWwJMTk1NAlvbmx5CS0JSnVsCTEJMDowMAkwCS0KK1J1bGUJUGhpbAkxOTc4CW9ubHkJLQlNYXIJMjIJMDowMAkxOjAwCVMKK1J1bGUJUGhpbAkxOTc4CW9ubHkJLQlTZXAJMjEJMDowMAkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQXNpYS9NYW5pbGEJLTE1OjU2OjAwIC0JTE1UCTE4NDQgRGVjIDMxCisJCQk4OjA0OjAwIC0JTE1UCTE4OTkgTWF5IDExCisJCQk4OjAwCVBoaWwJUEglc1QJMTk0MiBNYXkKKwkJCTk6MDAJLQlKU1QJMTk0NCBOb3YKKwkJCTg6MDAJUGhpbAlQSCVzVAorCisjIFFhdGFyCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvUWF0YXIJMzoyNjowOCAtCUxNVAkxOTIwCSMgQWwgRGF3aGFoIC8gRG9oYQorCQkJNDowMAktCUdTVAkxOTcyIEp1bgorCQkJMzowMAktCUFTVAorCisjIFNhdWRpIEFyYWJpYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL1JpeWFkaAkzOjA2OjUyIC0JTE1UCTE5NTAKKwkJCTM6MDAJLQlBU1QKKworIyBTaW5nYXBvcmUKKyMgVGhlIGRhdGEgaGVyZSBhcmUgdGFrZW4gZnJvbSBNb2sgTHkgWW5nICgyMDAzLTEwLTMwKQorIyA8aHR0cDovL3d3dy5tYXRoLm51cy5lZHUuc2cvYXNsYWtzZW4vdGVhY2hpbmcvdGltZXpvbmUuaHRtbD4uCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvU2luZ2Fwb3JlCTY6NTU6MjUgLQlMTVQJMTkwMSBKYW4gIDEKKwkJCTY6NTU6MjUJLQlTTVQJMTkwNSBKdW4gIDEgIyBTaW5nYXBvcmUgTS5ULgorCQkJNzowMAktCU1BTFQJMTkzMyBKYW4gIDEgIyBNYWxheWEgVGltZQorCQkJNzowMAkwOjIwCU1BTFNUCTE5MzYgSmFuICAxCisJCQk3OjIwCS0JTUFMVAkxOTQxIFNlcCAgMQorCQkJNzozMAktCU1BTFQJMTk0MiBGZWIgMTYKKwkJCTk6MDAJLQlKU1QJMTk0NSBTZXAgMTIKKwkJCTc6MzAJLQlNQUxUCTE5NjUgQXVnICA5ICMgaW5kZXBlbmRlbmNlCisJCQk3OjMwCS0JU0dUCTE5ODIgSmFuICAxICMgU2luZ2Fwb3JlIFRpbWUKKwkJCTg6MDAJLQlTR1QKKworIyBTcHJhdGx5IElzCisjIG5vIGluZm9ybWF0aW9uCisKKyMgU3JpIExhbmthCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTYtMDktMDMpOgorIyAiU3JpIExhbmthIGFkdmFuY2VzIGNsb2NrIGJ5IGFuIGhvdXIgdG8gYXZvaWQgYmxhY2tvdXQiCisjICh3d3cudmlydHVhbC1wYy5jb20vbGFua2F3ZWIvbmV3cy9pdGVtcy8yNDA1OTYtMi5odG1sLCAxOTk2LTA1LTI0LAorIyBubyBsb25nZXIgYXZhaWxhYmxlIGFzIG9mIDE5OTktMDgtMTcpCisjIHJlcG9ydGVkIGBgdGhlIGNvdW50cnkncyBzdGFuZGFyZCB0aW1lIHdpbGwgYmUgcHV0IGZvcndhcmQgYnkgb25lIGhvdXIgYXQKKyMgbWlkbmlnaHQgRnJpZGF5ICgxODMwIEdNVCkgYGluIHRoZSBsaWdodCBvZiB0aGUgcHJlc2VudCBwb3dlciBjcmlzaXMnLicnCisjCisjIEZyb20gRGhhcm1hc2lyaSBTZW5hbmF5YWtlLCBTcmkgTGFua2EgTWVkaWEgTWluaXN0ZXIgKDE5OTYtMTAtMjQpLCBhcyBxdW90ZWQKKyMgYnkgU2hhbWluZHJhIGluCisjIDxhIGhyZWY9Im5ld3M6NTRya2E1JG01aEBtdGluc2MwMS1tZ3Qub3BzLndvcmxkbmV0LmF0dC5uZXQiPgorIyBEYWlseSBOZXdzIC0gSG90IE5ld3MgU2VjdGlvbiAoMTk5Ni0xMC0yNikKKyMgPC9hPjoKKyMgV2l0aCBlZmZlY3QgZnJvbSAxMi4zMCBhLm0uIG9uIDI2dGggT2N0b2JlciAxOTk2CisjIFNyaSBMYW5rYSB3aWxsIGJlIHNpeCAoMDYpIGhvdXJzIGFoZWFkIG9mIEdNVC4KKworIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNi0wNC0xNCksIHF1b3RpbmcgU3JpIExhbmthIE5ld3MgT25saW5lCisjIDxodHRwOi8vbmV3cy5zaW5oYWxheWEuY29tL3dtdmlldy5waHA/QXJ0SUQ9MTEwMDI+ICgyMDA2LTA0LTEzKToKKyMgMDAzMCBocnMgb24gQXByaWwgMTUsIDIwMDYgKG1pZG5pZ2h0IG9mIEFwcmlsIDE0LCAyMDA2ICszMCBtaW51dGVzKQorIyBhdCBwcmVzZW50LCBiZWNvbWUgMjQwMCBob3VycyBvZiBBcHJpbCAxNCwgMjAwNiAobWlkbmlnaHQgb2YgQXByaWwgMTQsIDIwMDYpLgorCisjIEZyb20gUGV0ZXIgQXBwcyBhbmQgUmFuZ2EgU2lyaWxhIG9mIFJldXRlcnMgKDIwMDYtMDQtMTIpIGluOgorIyA8aHR0cDovL3RvZGF5LnJldXRlcnMuY28udWsvbmV3cy9uZXdzQXJ0aWNsZS5hc3B4P3R5cGU9c2NpZW5jZU5ld3Mmc3RvcnlJRD0yMDA2LTA0LTEyVDE3MjIyOFpfMDFfQ09MMjk1NzYyX1JUUklEU1RfMF9TQ0lFTkNFLVNSSUxBTktBLVRJTUUtREMuWE1MPgorIyBbVGhlIFRhbWlsIFRpZ2Vyc10gbmV2ZXIgYWNjZXB0ZWQgdGhlIG9yaWdpbmFsIDE5OTYgdGltZSBjaGFuZ2UgYW5kIHNpbXBseQorIyBrZXB0IHRoZWlyIGNsb2NrcyBzZXQgZml2ZSBhbmQgYSBoYWxmIGhvdXJzIGFoZWFkIG9mIEdyZWVud2ljaCBNZWFuCisjIFRpbWUgKEdNVCksIGluIGxpbmUgd2l0aCBuZWlnaGJvciBJbmRpYS4KKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wNC0xOCk6CisjIFBlb3BsZSB3aG8gbGl2ZSBpbiByZWdpb25zIHVuZGVyIFRhbWlsIGNvbnRyb2wgY2FuIHVzZSBbVFo9J0FzaWEvS29sa2F0YSddLAorIyBhcyB0aGF0IHpvbmUgaGFzIGFncmVlZCB3aXRoIHRoZSBUYW1pbCBhcmVhcyBzaW5jZSBvdXIgY3V0b2ZmIGRhdGUgb2YgMTk3MC4KKworIyBGcm9tIEsgU2V0aHUgKDIwMDYtMDQtMjUpOgorIyBJIHRoaW5rIHRoZSBhYmJyZXZpYXRpb24gTEtUIG9yaWdpbmF0ZWQgZnJvbSB0aGUgd29ybGQgb2YgY29tcHV0ZXJzIGF0CisjIHRoZSB0aW1lIG9mIG9yIHN1YnNlcXVlbnQgdG8gdGhlIHRpbWUgem9uZSBjaGFuZ2VzIGJ5IFNMIEdvdmVybm1lbnQKKyMgdHdpY2UgaW4gMTk5NiBhbmQgcHJvYmFibHkgU0wgR292ZXJubWVudCBvciBpdHMgc3RhbmRhcmRpemF0aW9uCisjIGFnZW5jaWVzIG5ldmVyIGRlY2xhcmVkIGFuIGFiYnJldmlhdGlvbiBhcyBhIG5hdGlvbmFsIHN0YW5kYXJkLgorIworIyBJIHJlY29sbGVjdCBiZWZvcmUgdGhlIHJlY2VudCBjaGFuZ2UgdGhlIGdvdmVybm1lbnQgYW5ub3VjZW1tZW50cworIyBtZW50aW9uaW5nIGl0IGFzIHNpbXBseSBjaGFuZ2luZyBTcmkgTGFua2EgU3RhbmRhcmQgVGltZSBvciBTcmkgTGFua2EKKyMgVGltZSBhbmQgbm8gbWVudGlvbiB3YXMgbWFkZSBhYm91dCB0aGUgYWJicmV2aWF0aW9uLgorIworIyBJZiB3ZSBsb29rIGF0IFNyaSBMYW5rYSBEZXBhcnRtZW50IG9mIEdvdmVybm1lbnQncyAiT2ZmaWNpYWwgTmV3cworIyBXZWJzaXRlIG9mIFNyaSBMYW5rYSIgLi4uIGh0dHA6Ly93d3cubmV3cy5say8gd2UgY2FuIHNlZSB0aGF0IHRoZXkKKyMgdXNlIFNMVCBhcyBhYmJyZXZpYXRpb24gaW4gdGltZSBzdGFtcCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbmV3cworIyBpdGVtLi4uLgorIworIyBXaXRoaW4gU3JpIExhbmthIEkgdGhpbmsgTEtUIGlzIHdlbGwga25vd24gYW1vbmcgY29tcHV0ZXIgdXNlcnMgYW5kCisjIGFkbWluc2l0cmF0b3JzLiAgSW4gbXkgb3BpbmlvbiBTTFQgbWF5IG5vdCBiZSBhIGdvb2QgY2hvaWNlIGJlY2F1c2UgdGhlCisjIG5hdGlvbidzIGxhcmdlc3QgdGVsY29tIC8gaW50ZXJuZXQgb3BlcmF0b3IgU3JpIExhbmthIFRlbGNvbSBpcyB3ZWxsCisjIGtub3duIGJ5IHRoYXQgYWJicmV2aWF0aW9uIC0gc2ltcGx5IGFzIFNMVCAodGhlcmUgSVAgZG9tYWlucyBhcmUKKyMgc2x0LmxrIGFuZCBzbHRuZXQubGspLgorIworIyBCdXQgaWYgaW5kZWVkIG91ciBnb3Zlcm5tZW50IGhhcyBhZG9wdGVkIFNMVCBhcyBzdGFuZGFyZCBhYmJyZXZpYXRpb24KKyMgKHRoYXQgd2UgaGF2ZSBub3Qga25vd24gc28gZmFyKSB0aGVuICBpdCBpcyBiZXR0ZXIgdGhhdCBpdCBiZSB1c2VkIGZvcgorIyBhbGwgY29tcHV0ZXJzLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDQtMjUpOgorIyBPbmUgcG9zc2liaWxpdHkgaXMgdGhhdCB3ZSB3YWl0IGZvciBhIGJpdCBmb3IgdGhlIGR1c3QgdG8gc2V0dGxlIGRvd24KKyMgYW5kIHRoZW4gc2VlIHdoYXQgcGVvcGxlIGFjdHVhbGx5IHNheSBpbiBwcmFjdGljZS4KKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL0NvbG9tYm8JNToxOToyNCAtCUxNVAkxODgwCisJCQk1OjE5OjMyCS0JTU1UCTE5MDYJIyBNb3JhdHV3YSBNZWFuIFRpbWUKKwkJCTU6MzAJLQlJU1QJMTk0MiBKYW4gIDUKKwkJCTU6MzAJMDozMAlJSFNUCTE5NDIgU2VwCisJCQk1OjMwCTE6MDAJSVNUCTE5NDUgT2N0IDE2IDI6MDAKKwkJCTU6MzAJLQlJU1QJMTk5NiBNYXkgMjUgMDowMAorCQkJNjozMAktCUxLVAkxOTk2IE9jdCAyNiAwOjMwCisJCQk2OjAwCS0JTEtUCTIwMDYgQXByIDE1IDA6MzAKKwkJCTU6MzAJLQlJU1QKKworIyBTeXJpYQorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJU3lyaWEJMTkyMAkxOTIzCS0JQXByCVN1bj49MTUJMjowMAkxOjAwCVMKK1J1bGUJU3lyaWEJMTkyMAkxOTIzCS0JT2N0CVN1bj49MQkyOjAwCTAJLQorUnVsZQlTeXJpYQkxOTYyCW9ubHkJLQlBcHIJMjkJMjowMAkxOjAwCVMKK1J1bGUJU3lyaWEJMTk2Mglvbmx5CS0JT2N0CTEJMjowMAkwCS0KK1J1bGUJU3lyaWEJMTk2MwkxOTY1CS0JTWF5CTEJMjowMAkxOjAwCVMKK1J1bGUJU3lyaWEJMTk2Mwlvbmx5CS0JU2VwCTMwCTI6MDAJMAktCitSdWxlCVN5cmlhCTE5NjQJb25seQktCU9jdAkxCTI6MDAJMAktCitSdWxlCVN5cmlhCTE5NjUJb25seQktCVNlcAkzMAkyOjAwCTAJLQorUnVsZQlTeXJpYQkxOTY2CW9ubHkJLQlBcHIJMjQJMjowMAkxOjAwCVMKK1J1bGUJU3lyaWEJMTk2NgkxOTc2CS0JT2N0CTEJMjowMAkwCS0KK1J1bGUJU3lyaWEJMTk2NwkxOTc4CS0JTWF5CTEJMjowMAkxOjAwCVMKK1J1bGUJU3lyaWEJMTk3NwkxOTc4CS0JU2VwCTEJMjowMAkwCS0KK1J1bGUJU3lyaWEJMTk4MwkxOTg0CS0JQXByCTkJMjowMAkxOjAwCVMKK1J1bGUJU3lyaWEJMTk4MwkxOTg0CS0JT2N0CTEJMjowMAkwCS0KK1J1bGUJU3lyaWEJMTk4Nglvbmx5CS0JRmViCTE2CTI6MDAJMTowMAlTCitSdWxlCVN5cmlhCTE5ODYJb25seQktCU9jdAk5CTI6MDAJMAktCitSdWxlCVN5cmlhCTE5ODcJb25seQktCU1hcgkxCTI6MDAJMTowMAlTCitSdWxlCVN5cmlhCTE5ODcJMTk4OAktCU9jdAkzMQkyOjAwCTAJLQorUnVsZQlTeXJpYQkxOTg4CW9ubHkJLQlNYXIJMTUJMjowMAkxOjAwCVMKK1J1bGUJU3lyaWEJMTk4OQlvbmx5CS0JTWFyCTMxCTI6MDAJMTowMAlTCitSdWxlCVN5cmlhCTE5ODkJb25seQktCU9jdAkxCTI6MDAJMAktCitSdWxlCVN5cmlhCTE5OTAJb25seQktCUFwcgkxCTI6MDAJMTowMAlTCitSdWxlCVN5cmlhCTE5OTAJb25seQktCVNlcAkzMAkyOjAwCTAJLQorUnVsZQlTeXJpYQkxOTkxCW9ubHkJLQlBcHIJIDEJMDowMAkxOjAwCVMKK1J1bGUJU3lyaWEJMTk5MQkxOTkyCS0JT2N0CSAxCTA6MDAJMAktCitSdWxlCVN5cmlhCTE5OTIJb25seQktCUFwcgkgOAkwOjAwCTE6MDAJUworUnVsZQlTeXJpYQkxOTkzCW9ubHkJLQlNYXIJMjYJMDowMAkxOjAwCVMKK1J1bGUJU3lyaWEJMTk5Mwlvbmx5CS0JU2VwCTI1CTA6MDAJMAktCisjIElBVEEgU1NJTSAoMTk5OC0wMikgc2F5cyAxOTk4LTA0LTAyOworIyAoMTk5OC0wOSkgc2F5cyAxOTk5LTAzLTI5IGFuZCAxOTk5LTA5LTI5OyAoMTk5OS0wMikgc2F5cyAxOTk5LTA0LTAyLAorIyAyMDAwLTA0LTAyLCBhbmQgMjAwMS0wNC0wMjsgKDE5OTktMDkpIHNheXMgMjAwMC0wMy0zMSBhbmQgMjAwMS0wMy0zMTsKKyMgKDIwMDYpIHNheXMgMjAwNi0wMy0zMSBhbmQgMjAwNi0wOS0yMjsKKyMgZm9yIG5vdyBpZ25vcmUgYWxsIHRoZXNlIGNsYWltcyBhbmQgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIsCisjIGV4Y2VwdCBmb3IgdGhlIDIwMDYtMDktMjIgY2xhaW0gKHdoaWNoIHNlZW1zIHJpZ2h0IGZvciBSYW1hZGFuKS4KK1J1bGUJU3lyaWEJMTk5NAkxOTk2CS0JQXByCSAxCTA6MDAJMTowMAlTCitSdWxlCVN5cmlhCTE5OTQJMjAwNQktCU9jdAkgMQkwOjAwCTAJLQorUnVsZQlTeXJpYQkxOTk3CTE5OTgJLQlNYXIJbGFzdE1vbgkwOjAwCTE6MDAJUworUnVsZQlTeXJpYQkxOTk5CTIwMDYJLQlBcHIJIDEJMDowMAkxOjAwCVMKKyMgRnJvbSBTdGVwaGVuIENvbGVib3VybmUgKDIwMDYtMDktMTgpOgorIyBBY2NvcmRpbmcgdG8gSUFUQSBkYXRhLCBTeXJpYSB3aWxsIGNoYW5nZSBEU1Qgb24gMjFzdCBTZXB0ZW1iZXIgWzIxOjAwIFVUQ10KKyMgdGhpcyB5ZWFyIFtvbmx5XS4uLi4gIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBSYW1hZGFuLCBsaWtlIEVneXB0LgorUnVsZQlTeXJpYQkyMDA2CW9ubHkJLQlTZXAJMjIJMDowMAkwCS0KKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNy0wMy0yOSk6CisjIFRvZGF5IHRoZSBBUCByZXBvcnRlZCAiU3lyaWEgd2lsbCBzd2l0Y2ggdG8gc3VtbWVydGltZSBhdCBtaWRuaWdodCBUaHVyc2RheS4iCisjIGh0dHA6Ly93d3cuaWh0LmNvbS9hcnRpY2xlcy9hcC8yMDA3LzAzLzI5L2FmcmljYS9NRS1HRU4tU3lyaWEtVGltZS1DaGFuZ2UucGhwCitSdWxlCVN5cmlhCTIwMDcJb25seQktCU1hcglsYXN0RnJpCTA6MDAJMTowMAlTCisjIEZyb20gSmVzcGVyIE5vcmdhcmQgKDIwMDctMTAtMjcpOgorIyBUaGUgc2lzdGVyIGNlbnRlciBJQ0FSREEgb2YgbXkgd29yayBDSU1NWVQgaXMgY29uZmlybWluZyB0aGF0IFN5cmlhIERTVCB3aWxsCisjIG5vdCB0YWtlIHBsYWNlIDEuc3QgTm92ZW1iZXIgYXQgMDowMCBvJ2Nsb2NrIGJ1dCAxLnN0IE5vdmVtYmVyIGF0IDI0OjAwIG9yCisjIHJhdGhlciBNaWRuaWdodCBiZXR3ZWVuIFRodXJzZGF5IGFuZCBGcmlkYXkuIFRoaXMgZG9lcyBtYWtlIG1vcmUgc2VuY2UgdGhhbgorIyBoYXZpbmcgaXQgYmV0d2VlbiBXZWRuZXNkYXkgYW5kIFRodXJzZGF5ICh0d28gd29ya2RheXMgaW4gU3lyaWEpIHNpbmNlIHRoZQorIyB3ZWVrZW5kIGluIFN5cmlhIGlzIG5vdCBTYXR1cmRheSBhbmQgU3VuZGF5LCBidXQgRnJpZGF5IGFuZCBTYXR1cmRheS4gU28gbm93CisjIGl0IGlzIGltcGxlbWVudGVkIGF0IG1pZG5pZ2h0IG9mIHRoZSBsYXN0IHdvcmtkYXkgYmVmb3JlIHdlZWtlbmQuLi4KKyMgCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA3LTEwLTI3KToKKyMgSmVzcGVyIE5vcmdhYXJkIFdlbGVuIHdyb3RlOgorIyAKKyMgPiAiV2ludGVyIGxvY2FsIHRpbWUgaW4gU3lyaWEgd2lsbCBiZSBvYnNlcnZlZCBhdCBtaWRuaWdodCBvZiBUaHVyc2RheSAxCisjID4gTm92ZW1iZXIgMjAwNywgYW5kIHRoZSBjbG9jayB3aWxsIGJlIHB1dCBiYWNrIDEgaG91ci4iCisjIAorIyBJIGZvdW5kIGNvbmZpcm1hdGlvbiBvbiB0aGlzIGluIHRoaXMgZ292LnN5LWFydGljbGUgKEFyYWJpYyk6CisjIGh0dHA6Ly93ZWhkYS5hbHdlaGRhLmdvdi5zeS9fcHJpbnRfdmVpdy5hc3A/RmlsZU5hbWU9MTI1MjE3MTA1MjAwNzA5MjYxMTEyNDcKKyMgCisjIHdoaWNoIHVzaW5nIEdvb2dsZSdzIHRyYW5zbGF0ZSB0b29scyBzYXlzOgorIyBDb3VuY2lsIG9mIE1pbmlzdGVycyBhbHNvIGFwcHJvdmVkIHRoZSBjb21tZW5jZW1lbnQgb2Ygd29yayBvbiAKKyMgaWRlbnRpZnlpbmcgdGhlIHdpbnRlciB0aW1lIGFzIG9mIEZyaWRheSwgMi8xMS8yMDA3IHdoZXJlIHRoZSA2MHRoIAorIyBtaW51dGUgZGVsYXkgYXQgbWlkbmlnaHQgVGh1cnNkYXkgMS8xMS8yMDA3LgorUnVsZQlTeXJpYQkyMDA3CW9ubHkJLQlOb3YJIEZyaT49MQkwOjAwCTAJLQorCisjIEZyb20gU3RlcGhlbiBDb2xlYm91cm5lICgyMDA4LTAzLTE3KToKKyMgRm9yIGV2ZXJ5b25lJ3MgaW5mbywgSSBzYXcgYW4gSUFUQSB0aW1lIHpvbmUgY2hhbmdlIGZvciBbU3lyaWFdIGZvcgorIyB0aGlzIG1vbnRoIChNYXJjaCAyMDA4KSBpbiB0aGUgbGFzdCBkYXkgb3Igc28uLi5UaGlzIGlzIHRoZSBkYXRhIElBVEEKKyMgYXJlIG5vdyB1c2luZzoKKyMgQ291bnRyeSAgICAgVGltZSBTdGFuZGFyZCAgIC0tLSBEU1QgU3RhcnQgLS0tICAgLS0tIERTVCBFbmQgLS0tICBEU1QKKyMgTmFtZSAgICAgICAgWm9uZSBWYXJpYXRpb24gICBUaW1lICAgIERhdGUgICAgICAgIFRpbWUgICAgRGF0ZQorIyBWYXJpYXRpb24KKyMgU3lyaWFuIEFyYWIKKyMgUmVwdWJsaWMgICAgU1kgICAgKzAyMDAgICAgICAyMjAwICAwM0FQUjA4ICAgICAgIDIxMDAgIDMwU0VQMDggICArMDMwMAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyMDAgIDAyQVBSMDkgICAgICAgMjEwMCAgMzBTRVAwOSAgICswMzAwCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIwMCAgMDFBUFIxMCAgICAgICAyMTAwICAzMFNFUDEwICAgKzAzMDAKKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMjAwOC0wMy0xNyk6CisjIEhlcmUncyBhIGxpbmsgdG8gRW5nbGlzaC1sYW5ndWFnZSBjb3ZlcmFnZSBieSB0aGUgU3lyaWFuIEFyYWIgTmV3cworIyBBZ2VuY3kgKFNBTkEpLi4uCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2FuYS5zeS9lbmcvMjEvMjAwOC8wMy8xMS8xNjUxNzMuaHRtIj4KKyMgaHR0cDovL3d3dy5zYW5hLnN5L2VuZy8yMS8yMDA4LzAzLzExLzE2NTE3My5odG0KKyMgPC9hPi4uLndoaWNoIHJlYWRzIChpbiBwYXJ0KSAiVGhlIENhYmluZXQgYXBwcm92ZWQgdGhlIHN1Z2dlc3Rpb24gb2YgdGhlCisjIE1pbmlzdHJ5IG9mIEVsZWN0cmljaXR5IHRvIGJlZ2luIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBvbiBGcmlkYXkgQXByaWwKKyMgNHRoLCBhZHZhbmNpbmcgY2xvY2tzIG9uZSBob3VyIGFoZWFkIG9uIG1pZG5pZ2h0IG9mIFRodXJzZGF5IEFwcmlsIDNyZC4iCisjIFNpbmNlIFN5cmlhIGlzIHR3byBob3VycyBlYXN0IG9mIFVUQywgdGhlIDIyMDAgYW5kIDIxMDAgdHJhbnNpdGlvbiB0aW1lcworIyBzaG93biBhYm92ZSBtYXRjaCB1cCB3aXRoIG1pZG5pZ2h0IGluIFN5cmlhLgorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgyMDA4LTAzLTE4KToKKyMgTXkgYnVlc3QgZ3Vlc3MgYXQgYSBTeXJpYW4gcnVsZSBpcyAidGhlIEZyaWRheSBuZWFyZXN0IEFwcmlsIDEiOworIyBjb2RpbmcgdGhhdCBpbnZvbHZlcyBlaXRoZXIgdXNpbmcgYSAiTWFyIEZyaT49MjkiIGNvbnN0cnVjdCB0aGF0IG9sZCB0aW1lIHpvbmUKKyMgY29tcGlsZXJzIGNhbid0IGhhbmRsZSAgb3IgaGF2aW5nIG11bHRpcGxlIFJ1bGVzIChhIGxhIElzcmFlbCkuCisjIEZvciBub3csIHVzZSAiQXByIEZyaT49MSIsIGFuZCBnbyB3aXRoIElBVEEgb24gYSB1bmlmb3JtIFNlcCAzMCBlbmQuCisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDgtMTAtMDcpOgorIyBTeXJpYSBoYXMgbm93IG9mZmljaWFsbHkgZGVjaWRlZCB0byBlbmQgRFNUIG9uIDIwMDgtMTEtMDEgdGhpcyB5ZWFyLAorIyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBhcnRpY2xlIGluIHRoZSBTeXJpYW4gQXJhYiBOZXdzIEFnZW5jeSAoU0FOQSkuCisjCisjIFRoZSBhcnRpY2xlIGlzIGluIEFyYWJpYywgYW5kIHNlZW1zIHRvIHRlbGwgdGhhdCB0aGV5IHdpbGwgZ28gYmFjayB0bworIyB3aW50ZXIgdGltZSBvbiAyMDA4LTExLTAxIGF0IDAwOjAwIGxvY2FsIGRheWxpZ2h0IHRpbWUgKGRlbGF5aW5nL3NldHRpbmcKKyMgY2xvY2tzIGJhY2sgNjAgbWludXRlcykuCisjCisjIDxhIGhyZWY9Imh0dHA6Ly9zYW5hLnN5L2FyYS8yLzIwMDgvMTAvMDcvMTk1NDU5Lmh0bSI+CisjIGh0dHA6Ly9zYW5hLnN5L2FyYS8yLzIwMDgvMTAvMDcvMTk1NDU5Lmh0bQorIyA8L2E+CisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDktMDMtMTkpOgorIyBTeXJpYSB3aWxsIHN0YXJ0IERTVCBvbiAyMDA5LTAzLTI3IDAwOjAwIHRoaXMgeWVhciBhY2NvcmRpbmcgdG8gbWFueSBzb3VyY2VzLAorIyB0d28gZXhhbXBsZXM6CisjCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2FuYS5zeS9lbmcvMjEvMjAwOS8wMy8xNy8yMTc1NjMuaHRtIj4KKyMgaHR0cDovL3d3dy5zYW5hLnN5L2VuZy8yMS8yMDA5LzAzLzE3LzIxNzU2My5odG0KKyMgPC9hPgorIyAoRW5nbGlzaCwgU3lyaWFuIEFyYWIgTmV3cyAjIEFnZW5jeSkKKyMgPGEgaHJlZj0iaHR0cDovL3RoYXdyYS5hbHdlaGRhLmdvdi5zeS9fVmlld19uZXdzMi5hc3A/RmlsZU5hbWU9OTQ0NTkyNTg3MjAwOTAzMTgwMTIyMDkiPgorIyBodHRwOi8vdGhhd3JhLmFsd2VoZGEuZ292LnN5L19WaWV3X25ld3MyLmFzcD9GaWxlTmFtZT05NDQ1OTI1ODcyMDA5MDMxODAxMjIwOQorIyA8L2E+CisjIChBcmFiaWMsIGdvdi1zaXRlKQorIworIyBXZSBoYXZlIG5vdCBmb3VuZCBhbnkgc291cmNlcyBzYXlpbmcgYW55dGhpbmcgYWJvdXQgd2hlbiBEU1QgZW5kcyB0aGlzIHllYXIuCisjCisjIE91ciBzdW1tYXJ5CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL25ld3MvdGltZS9zeXJpYS1kc3Qtc3RhcnRzLW1hcmNoLTI3LTIwMDkuaHRtbCI+CisjIGh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL25ld3MvdGltZS9zeXJpYS1kc3Qtc3RhcnRzLW1hcmNoLTI3LTIwMDkuaHRtbAorIyA8L2E+CisKK1J1bGUJU3lyaWEJMjAwOAlvbmx5CS0JQXByCUZyaT49MQkwOjAwCTE6MDAJUworUnVsZQlTeXJpYQkyMDA4CW1heAktCU5vdgkxCTA6MDAJMAktCitSdWxlCVN5cmlhCTIwMDkJbWF4CS0JTWFyCWxhc3RGcmkJMDowMAkxOjAwCVMKKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL0RhbWFzY3VzCTI6MjU6MTIgLQlMTVQJMTkyMAkjIERpbWFzaHEKKwkJCTI6MDAJU3lyaWEJRUUlc1QKKworIyBUYWppa2lzdGFuCisjIEZyb20gU2hhbmtzICYgUG90dGVuZ2VyLgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL0R1c2hhbmJlCTQ6MzU6MTIgLQlMTVQJMTkyNCBNYXkgIDIKKwkJCTU6MDAJLQlEVVNUCTE5MzAgSnVuIDIxICMgRHVzaGFuYmUgVGltZQorCQkJNjowMCBSdXNzaWFBc2lhIERVUyVzVAkxOTkxIE1hciAzMSAyOjAwcworCQkJNTowMAkxOjAwCURVU1NUCTE5OTEgU2VwICA5IDI6MDBzCisJCQk1OjAwCS0JVEpUCQkgICAgIyBUYWppa2lzdGFuIFRpbWUKKworIyBUaGFpbGFuZAorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL0Jhbmdrb2sJNjo0MjowNAktCUxNVAkxODgwCisJCQk2OjQyOjA0CS0JQk1UCTE5MjAgQXByICMgQmFuZ2tvayBNZWFuIFRpbWUKKwkJCTc6MDAJLQlJQ1QKKworIyBUdXJrbWVuaXN0YW4KKyMgRnJvbSBTaGFua3MgJiBQb3R0ZW5nZXIuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvQXNoZ2FiYXQJMzo1MzozMiAtCUxNVAkxOTI0IE1heSAgMiAjIG9yIEFzaGtoYWJhZAorCQkJNDowMAktCUFTSFQJMTkzMCBKdW4gMjEgIyBBc2hraGFiYWQgVGltZQorCQkJNTowMCBSdXNzaWFBc2lhCUFTSCVzVAkxOTkxIE1hciAzMSAyOjAwCisJCQk0OjAwIFJ1c3NpYUFzaWEJQVNIJXNUCTE5OTEgT2N0IDI3ICMgaW5kZXBlbmRlbmNlCisJCQk0OjAwIFJ1c3NpYUFzaWEJVE0lc1QJMTk5MiBKYW4gMTkgMjowMAorCQkJNTowMAktCVRNVAorCisjIFVuaXRlZCBBcmFiIEVtaXJhdGVzCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvRHViYWkJMzo0MToxMiAtCUxNVAkxOTIwCisJCQk0OjAwCS0JR1NUCisKKyMgVXpiZWtpc3RhbgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL1NhbWFya2FuZAk0OjI3OjEyIC0JTE1UCTE5MjQgTWF5ICAyCisJCQk0OjAwCS0JU0FNVAkxOTMwIEp1biAyMSAjIFNhbWFya2FuZCBUaW1lCisJCQk1OjAwCS0JU0FNVAkxOTgxIEFwciAgMQorCQkJNTowMAkxOjAwCVNBTVNUCTE5ODEgT2N0ICAxCisJCQk2OjAwCS0JVEFTVAkxOTgyIEFwciAgMSAjIFRhc2hrZW50IFRpbWUKKwkJCTU6MDAgUnVzc2lhQXNpYQlTQU0lc1QJMTk5MSBTZXAgIDEgIyBpbmRlcGVuZGVuY2UKKwkJCTU6MDAgUnVzc2lhQXNpYQlVWiVzVAkxOTkyCisJCQk1OjAwCS0JVVpUCitab25lCUFzaWEvVGFzaGtlbnQJNDozNzoxMiAtCUxNVAkxOTI0IE1heSAgMgorCQkJNTowMAktCVRBU1QJMTkzMCBKdW4gMjEgIyBUYXNoa2VudCBUaW1lCisJCQk2OjAwIFJ1c3NpYUFzaWEJVEFTJXNUCTE5OTEgTWFyIDMxIDI6MDAKKwkJCTU6MDAgUnVzc2lhQXNpYQlUQVMlc1QJMTk5MSBTZXAgIDEgIyBpbmRlcGVuZGVuY2UKKwkJCTU6MDAgUnVzc2lhQXNpYQlVWiVzVAkxOTkyCisJCQk1OjAwCS0JVVpUCisKKyMgVmlldG5hbQorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgyMDA4LTAzLTE4KToKKyMgVGhlIEVuZ2xpc2gtbGFuZ3VhZ2UgbmFtZSBvZiBWaWV0bmFtJ3MgbW9zdCBwb3B1bG91cyBjaXR5IGlzICJIbyBDaGkgTWluIENpdHkiOworIyB3ZSB1c2UgSG9fQ2hpX01pbmggYmVsb3cgdG8gYXZvaWQgYSBuYW1lIG9mIG1vcmUgdGhhbiAxNCBjaGFyYWN0ZXJzLgorCisjIEZyb20gU2hhbmtzICYgUG90dGVuZ2VyOgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL0hvX0NoaV9NaW5oCTc6MDY6NDAgLQlMTVQJMTkwNiBKdW4gIDkKKwkJCTc6MDY6MjAJLQlTTVQJMTkxMSBNYXIgMTEgMDowMSAjIFNhaWdvbiBNVD8KKwkJCTc6MDAJLQlJQ1QJMTkxMiBNYXkKKwkJCTg6MDAJLQlJQ1QJMTkzMSBNYXkKKwkJCTc6MDAJLQlJQ1QKKworIyBZZW1lbgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL0FkZW4JMzowMDo0OAktCUxNVAkxOTUwCisJCQkzOjAwCS0JQVNUCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvYXVzdHJhbGFzaWEgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvYXVzdHJhbGFzaWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjZmVjNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9hdXN0cmFsYXNpYQpAQCAtMCwwICsxLDE0NzcgQEAKKyMgPHByZT4KKyMgQCgjKWF1c3RyYWxhc2lhCTguMTEKKyMgVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyMgMjAwOS0wNS0xNyBieSBBcnRodXIgRGF2aWQgT2xzb24uCisKKyMgVGhpcyBmaWxlIGFsc28gaW5jbHVkZXMgUGFjaWZpYyBpc2xhbmRzLgorCisjIE5vdGVzIGFyZSBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQXVzdHJhbGlhCisKKyMgUGxlYXNlIHNlZSB0aGUgbm90ZXMgYmVsb3cgZm9yIHRoZSBjb250cm92ZXJzeSBhYm91dCAiRVNUIiB2ZXJzdXMgIkFFU1QiIGV0Yy4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJQXVzCTE5MTcJb25seQktCUphbgkgMQkwOjAxCTE6MDAJLQorUnVsZQlBdXMJMTkxNwlvbmx5CS0JTWFyCTI1CTI6MDAJMAktCitSdWxlCUF1cwkxOTQyCW9ubHkJLQlKYW4JIDEJMjowMAkxOjAwCS0KK1J1bGUJQXVzCTE5NDIJb25seQktCU1hcgkyOQkyOjAwCTAJLQorUnVsZQlBdXMJMTk0Mglvbmx5CS0JU2VwCTI3CTI6MDAJMTowMAktCitSdWxlCUF1cwkxOTQzCTE5NDQJLQlNYXIJbGFzdFN1bgkyOjAwCTAJLQorUnVsZQlBdXMJMTk0Mwlvbmx5CS0JT2N0CSAzCTI6MDAJMTowMAktCisjIEdvIHdpdGggV2hpdG1hbiBhbmQgdGhlIEF1c3RyYWxpYW4gTmF0aW9uYWwgU3RhbmRhcmRzIENvbW1pc3Npb24sIHdoaWNoCisjIHNheXMgVyBBdXN0cmFsaWEgZGlkbid0IHVzZSBEU1QgaW4gMTk0My8xOTQ0LiAgSWdub3JlIFdoaXRtYW4ncyBjbGFpbSB0aGF0CisjIDE5NDQvMTk0NSB3YXMganVzdCBsaWtlIDE5NDMvMTk0NC4KKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorIyBOb3J0aGVybiBUZXJyaXRvcnkKK1pvbmUgQXVzdHJhbGlhL0RhcndpbgkgODo0MzoyMCAtCUxNVAkxODk1IEZlYgorCQkJIDk6MDAJLQlDU1QJMTg5OSBNYXkKKwkJCSA5OjMwCUF1cwlDU1QKKyMgV2VzdGVybiBBdXN0cmFsaWEKKyMKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUFXCTE5NzQJb25seQktCU9jdAlsYXN0U3VuCTI6MDBzCTE6MDAJLQorUnVsZQlBVwkxOTc1CW9ubHkJLQlNYXIJU3VuPj0xCTI6MDBzCTAJLQorUnVsZQlBVwkxOTgzCW9ubHkJLQlPY3QJbGFzdFN1bgkyOjAwcwkxOjAwCS0KK1J1bGUJQVcJMTk4NAlvbmx5CS0JTWFyCVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJQVcJMTk5MQlvbmx5CS0JTm92CTE3CTI6MDBzCTE6MDAJLQorUnVsZQlBVwkxOTkyCW9ubHkJLQlNYXIJU3VuPj0xCTI6MDBzCTAJLQorUnVsZQlBVwkyMDA2CW9ubHkJLQlEZWMJIDMJMjowMHMJMTowMAktCitSdWxlCUFXCTIwMDcJMjAwOQktCU1hcglsYXN0U3VuCTI6MDBzCTAJLQorUnVsZQlBVwkyMDA3CTIwMDgJLQlPY3QJbGFzdFN1bgkyOjAwcwkxOjAwCS0KK1pvbmUgQXVzdHJhbGlhL1BlcnRoCSA3OjQzOjI0IC0JTE1UCTE4OTUgRGVjCisJCQkgODowMAlBdXMJV1NUCTE5NDMgSnVsCisJCQkgODowMAlBVwlXU1QKK1pvbmUgQXVzdHJhbGlhL0V1Y2xhCSA4OjM1OjI4IC0JTE1UCTE4OTUgRGVjCisJCQkgODo0NQlBdXMJQ1dTVAkxOTQzIEp1bAorCQkJIDg6NDUJQVcJQ1dTVAorCisjIFF1ZWVuc2xhbmQKKyMKKyMgRnJvbSBBbGV4IExpdmluZ3N0b24gKDE5OTYtMTEtMDEpOgorIyBJIGhhdmUgaGVhcmQgb3IgcmVhZCBtb3JlIHRoYW4gb25jZSB0aGF0IHNvbWUgcmVzb3J0IGlzbGFuZHMgb2ZmIHRoZSBjb2FzdAorIyBvZiBRdWVlbnNsYW5kIGNob3NlIHRvIGtlZXAgb2JzZXJ2aW5nIGRheWxpZ2h0LXNhdmluZyB0aW1lIGV2ZW4gYWZ0ZXIKKyMgUXVlZW5zbGFuZCBjZWFzZWQgdG8uCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTYtMTEtMjIpOgorIyBJQVRBIFNTSU0gKDE5OTMtMDIvMTk5NC0wOSkgc2F5IHRoYXQgdGhlIEhvbGlkYXkgSXNsYW5kcyAoSGF5bWFuLCBMaW5kZW1hbiwKKyMgSGFtaWx0b24pIG9ic2VydmVkIERTVCBmb3IgdHdvIHllYXJzIGFmdGVyIHRoZSByZXN0IG9mIFF1ZWVuc2xhbmQgc3RvcHBlZC4KKyMgSGFtaWx0b24gaXMgdGhlIGxhcmdlc3QsIGJ1dCB0aGVyZSBpcyBhbHNvIGEgSGFtaWx0b24gaW4gVmljdG9yaWEsCisjIHNvIHVzZSBMaW5kZW1hbi4KKyMKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUFRCTE5NzEJb25seQktCU9jdAlsYXN0U3VuCTI6MDBzCTE6MDAJLQorUnVsZQlBUQkxOTcyCW9ubHkJLQlGZWIJbGFzdFN1bgkyOjAwcwkwCS0KK1J1bGUJQVEJMTk4OQkxOTkxCS0JT2N0CWxhc3RTdW4JMjowMHMJMTowMAktCitSdWxlCUFRCTE5OTAJMTk5MgktCU1hcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUhvbGlkYXkJMTk5MgkxOTkzCS0JT2N0CWxhc3RTdW4JMjowMHMJMTowMAktCitSdWxlCUhvbGlkYXkJMTk5MwkxOTk0CS0JTWFyCVN1bj49MQkyOjAwcwkwCS0KK1pvbmUgQXVzdHJhbGlhL0JyaXNiYW5lCTEwOjEyOjA4IC0JTE1UCTE4OTUKKwkJCTEwOjAwCUF1cwlFU1QJMTk3MQorCQkJMTA6MDAJQVEJRVNUCitab25lIEF1c3RyYWxpYS9MaW5kZW1hbiAgOTo1NTo1NiAtCUxNVAkxODk1CisJCQkxMDowMAlBdXMJRVNUCTE5NzEKKwkJCTEwOjAwCUFRCUVTVAkxOTkyIEp1bAorCQkJMTA6MDAJSG9saWRheQlFU1QKKworIyBTb3V0aCBBdXN0cmFsaWEKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUFTCTE5NzEJMTk4NQktCU9jdAlsYXN0U3VuCTI6MDBzCTE6MDAJLQorUnVsZQlBUwkxOTg2CW9ubHkJLQlPY3QJMTkJMjowMHMJMTowMAktCitSdWxlCUFTCTE5ODcJMjAwNwktCU9jdAlsYXN0U3VuCTI6MDBzCTE6MDAJLQorUnVsZQlBUwkxOTcyCW9ubHkJLQlGZWIJMjcJMjowMHMJMAktCitSdWxlCUFTCTE5NzMJMTk4NQktCU1hcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUFTCTE5ODYJMTk4OQktCU1hcglTdW4+PTE1CTI6MDBzCTAJLQorUnVsZQlBUwkxOTkwCW9ubHkJLQlNYXIJU3VuPj0xOAkyOjAwcwkwCS0KK1J1bGUJQVMJMTk5MQlvbmx5CS0JTWFyCVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJQVMJMTk5Mglvbmx5CS0JTWFyCVN1bj49MTgJMjowMHMJMAktCitSdWxlCUFTCTE5OTMJb25seQktCU1hcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUFTCTE5OTQJb25seQktCU1hcglTdW4+PTE4CTI6MDBzCTAJLQorUnVsZQlBUwkxOTk1CTIwMDUJLQlNYXIJbGFzdFN1bgkyOjAwcwkwCS0KK1J1bGUJQVMJMjAwNglvbmx5CS0JQXByCVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJQVMJMjAwNwlvbmx5CS0JTWFyCWxhc3RTdW4JMjowMHMJMAktCitSdWxlCUFTCTIwMDgJbWF4CS0JQXByCVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJQVMJMjAwOAltYXgJLQlPY3QJU3VuPj0xCTI6MDBzCTE6MDAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBdXN0cmFsaWEvQWRlbGFpZGUJOToxNDoyMCAtCUxNVAkxODk1IEZlYgorCQkJOTowMAktCUNTVAkxODk5IE1heQorCQkJOTozMAlBdXMJQ1NUCTE5NzEKKwkJCTk6MzAJQVMJQ1NUCisKKyMgVGFzbWFuaWEKKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNS0wOC0xNik6CisjIDxodHRwOi8vd3d3LmJvbS5nb3YuYXUvY2xpbWF0ZS9hdmVyYWdlcy90YWJsZXMvZHN0X3RpbWVzLnNodG1sPgorIyBzYXlzIEtpbmcgSXNsYW5kIGRpZG4ndCBvYnNlcnZlIERTVCBmcm9tIFdXSUkgdW50aWwgbGF0ZSAxOTcxLgorIworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJQVQJMTk2Nwlvbmx5CS0JT2N0CVN1bj49MQkyOjAwcwkxOjAwCS0KK1J1bGUJQVQJMTk2OAlvbmx5CS0JTWFyCWxhc3RTdW4JMjowMHMJMAktCitSdWxlCUFUCTE5NjgJMTk4NQktCU9jdAlsYXN0U3VuCTI6MDBzCTE6MDAJLQorUnVsZQlBVAkxOTY5CTE5NzEJLQlNYXIJU3VuPj04CTI6MDBzCTAJLQorUnVsZQlBVAkxOTcyCW9ubHkJLQlGZWIJbGFzdFN1bgkyOjAwcwkwCS0KK1J1bGUJQVQJMTk3MwkxOTgxCS0JTWFyCVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJQVQJMTk4MgkxOTgzCS0JTWFyCWxhc3RTdW4JMjowMHMJMAktCitSdWxlCUFUCTE5ODQJMTk4NgktCU1hcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUFUCTE5ODYJb25seQktCU9jdAlTdW4+PTE1CTI6MDBzCTE6MDAJLQorUnVsZQlBVAkxOTg3CTE5OTAJLQlNYXIJU3VuPj0xNQkyOjAwcwkwCS0KK1J1bGUJQVQJMTk4Nwlvbmx5CS0JT2N0CVN1bj49MjIJMjowMHMJMTowMAktCitSdWxlCUFUCTE5ODgJMTk5MAktCU9jdAlsYXN0U3VuCTI6MDBzCTE6MDAJLQorUnVsZQlBVAkxOTkxCTE5OTkJLQlPY3QJU3VuPj0xCTI6MDBzCTE6MDAJLQorUnVsZQlBVAkxOTkxCTIwMDUJLQlNYXIJbGFzdFN1bgkyOjAwcwkwCS0KK1J1bGUJQVQJMjAwMAlvbmx5CS0JQXVnCWxhc3RTdW4JMjowMHMJMTowMAktCitSdWxlCUFUCTIwMDEJbWF4CS0JT2N0CVN1bj49MQkyOjAwcwkxOjAwCS0KK1J1bGUJQVQJMjAwNglvbmx5CS0JQXByCVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJQVQJMjAwNwlvbmx5CS0JTWFyCWxhc3RTdW4JMjowMHMJMAktCitSdWxlCUFUCTIwMDgJbWF4CS0JQXByCVN1bj49MQkyOjAwcwkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQXVzdHJhbGlhL0hvYmFydAk5OjQ5OjE2CS0JTE1UCTE4OTUgU2VwCisJCQkxMDowMAktCUVTVAkxOTE2IE9jdCAxIDI6MDAKKwkJCTEwOjAwCTE6MDAJRVNUCTE5MTcgRmViCisJCQkxMDowMAlBdXMJRVNUCTE5NjcKKwkJCTEwOjAwCUFUCUVTVAorWm9uZSBBdXN0cmFsaWEvQ3VycmllCTk6MzU6MjgJLQlMTVQJMTg5NSBTZXAKKwkJCTEwOjAwCS0JRVNUCTE5MTYgT2N0IDEgMjowMAorCQkJMTA6MDAJMTowMAlFU1QJMTkxNyBGZWIKKwkJCTEwOjAwCUF1cwlFU1QJMTk3MSBKdWwKKwkJCTEwOjAwCUFUCUVTVAorCisjIFZpY3RvcmlhCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlBVgkxOTcxCTE5ODUJLQlPY3QJbGFzdFN1bgkyOjAwcwkxOjAwCS0KK1J1bGUJQVYJMTk3Mglvbmx5CS0JRmViCWxhc3RTdW4JMjowMHMJMAktCitSdWxlCUFWCTE5NzMJMTk4NQktCU1hcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUFWCTE5ODYJMTk5MAktCU1hcglTdW4+PTE1CTI6MDBzCTAJLQorUnVsZQlBVgkxOTg2CTE5ODcJLQlPY3QJU3VuPj0xNQkyOjAwcwkxOjAwCS0KK1J1bGUJQVYJMTk4OAkxOTk5CS0JT2N0CWxhc3RTdW4JMjowMHMJMTowMAktCitSdWxlCUFWCTE5OTEJMTk5NAktCU1hcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUFWCTE5OTUJMjAwNQktCU1hcglsYXN0U3VuCTI6MDBzCTAJLQorUnVsZQlBVgkyMDAwCW9ubHkJLQlBdWcJbGFzdFN1bgkyOjAwcwkxOjAwCS0KK1J1bGUJQVYJMjAwMQkyMDA3CS0JT2N0CWxhc3RTdW4JMjowMHMJMTowMAktCitSdWxlCUFWCTIwMDYJb25seQktCUFwcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUFWCTIwMDcJb25seQktCU1hcglsYXN0U3VuCTI6MDBzCTAJLQorUnVsZQlBVgkyMDA4CW1heAktCUFwcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUFWCTIwMDgJbWF4CS0JT2N0CVN1bj49MQkyOjAwcwkxOjAwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQXVzdHJhbGlhL01lbGJvdXJuZSA5OjM5OjUyIC0JTE1UCTE4OTUgRmViCisJCQkxMDowMAlBdXMJRVNUCTE5NzEKKwkJCTEwOjAwCUFWCUVTVAorCisjIE5ldyBTb3V0aCBXYWxlcworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJQU4JMTk3MQkxOTg1CS0JT2N0CWxhc3RTdW4JMjowMHMJMTowMAktCitSdWxlCUFOCTE5NzIJb25seQktCUZlYgkyNwkyOjAwcwkwCS0KK1J1bGUJQU4JMTk3MwkxOTgxCS0JTWFyCVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJQU4JMTk4Mglvbmx5CS0JQXByCVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJQU4JMTk4MwkxOTg1CS0JTWFyCVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJQU4JMTk4NgkxOTg5CS0JTWFyCVN1bj49MTUJMjowMHMJMAktCitSdWxlCUFOCTE5ODYJb25seQktCU9jdAkxOQkyOjAwcwkxOjAwCS0KK1J1bGUJQU4JMTk4NwkxOTk5CS0JT2N0CWxhc3RTdW4JMjowMHMJMTowMAktCitSdWxlCUFOCTE5OTAJMTk5NQktCU1hcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUFOCTE5OTYJMjAwNQktCU1hcglsYXN0U3VuCTI6MDBzCTAJLQorUnVsZQlBTgkyMDAwCW9ubHkJLQlBdWcJbGFzdFN1bgkyOjAwcwkxOjAwCS0KK1J1bGUJQU4JMjAwMQkyMDA3CS0JT2N0CWxhc3RTdW4JMjowMHMJMTowMAktCitSdWxlCUFOCTIwMDYJb25seQktCUFwcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUFOCTIwMDcJb25seQktCU1hcglsYXN0U3VuCTI6MDBzCTAJLQorUnVsZQlBTgkyMDA4CW1heAktCUFwcglTdW4+PTEJMjowMHMJMAktCitSdWxlCUFOCTIwMDgJbWF4CS0JT2N0CVN1bj49MQkyOjAwcwkxOjAwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQXVzdHJhbGlhL1N5ZG5leQkxMDowNDo1MiAtCUxNVAkxODk1IEZlYgorCQkJMTA6MDAJQXVzCUVTVAkxOTcxCisJCQkxMDowMAlBTglFU1QKK1pvbmUgQXVzdHJhbGlhL0Jyb2tlbl9IaWxsIDk6MjU6NDggLQlMTVQJMTg5NSBGZWIKKwkJCTEwOjAwCS0JRVNUCTE4OTYgQXVnIDIzCisJCQk5OjAwCS0JQ1NUCTE4OTkgTWF5CisJCQk5OjMwCUF1cwlDU1QJMTk3MQorCQkJOTozMAlBTglDU1QJMjAwMAorCQkJOTozMAlBUwlDU1QKKworIyBMb3JkIEhvd2UgSXNsYW5kCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlMSAkxOTgxCTE5ODQJLQlPY3QJbGFzdFN1bgkyOjAwCTE6MDAJLQorUnVsZQlMSAkxOTgyCTE5ODUJLQlNYXIJU3VuPj0xCTI6MDAJMAktCitSdWxlCUxICTE5ODUJb25seQktCU9jdAlsYXN0U3VuCTI6MDAJMDozMAktCitSdWxlCUxICTE5ODYJMTk4OQktCU1hcglTdW4+PTE1CTI6MDAJMAktCitSdWxlCUxICTE5ODYJb25seQktCU9jdAkxOQkyOjAwCTA6MzAJLQorUnVsZQlMSAkxOTg3CTE5OTkJLQlPY3QJbGFzdFN1bgkyOjAwCTA6MzAJLQorUnVsZQlMSAkxOTkwCTE5OTUJLQlNYXIJU3VuPj0xCTI6MDAJMAktCitSdWxlCUxICTE5OTYJMjAwNQktCU1hcglsYXN0U3VuCTI6MDAJMAktCitSdWxlCUxICTIwMDAJb25seQktCUF1ZwlsYXN0U3VuCTI6MDAJMDozMAktCitSdWxlCUxICTIwMDEJMjAwNwktCU9jdAlsYXN0U3VuCTI6MDAJMDozMAktCitSdWxlCUxICTIwMDYJb25seQktCUFwcglTdW4+PTEJMjowMAkwCS0KK1J1bGUJTEgJMjAwNwlvbmx5CS0JTWFyCWxhc3RTdW4JMjowMAkwCS0KK1J1bGUJTEgJMjAwOAltYXgJLQlBcHIJU3VuPj0xCTI6MDAJMAktCitSdWxlCUxICTIwMDgJbWF4CS0JT2N0CVN1bj49MQkyOjAwCTA6MzAJLQorWm9uZSBBdXN0cmFsaWEvTG9yZF9Ib3dlIDEwOjM2OjIwIC0JTE1UCTE4OTUgRmViCisJCQkxMDowMAktCUVTVAkxOTgxIE1hcgorCQkJMTA6MzAJTEgJTEhTVAorCisjIEF1c3RyYWxpYW4gbWlzY2VsbGFueQorIworIyBBc2htb3JlIElzLCBDYXJ0aWVyCisjIG5vIGluZGlnZW5vdXMgaW5oYWJpdGFudHM7IG9ubHkgc2Vhc29uYWwgY2FyZXRha2VycworIyBubyB0aW1lcyBhcmUgc2V0CisjCisjIENvcmFsIFNlYSBJcworIyBubyBpbmRpZ2Vub3VzIGluaGFiaXRhbnRzOyBvbmx5IG1ldGVvcm9sb2dpc3RzCisjIG5vIHRpbWVzIGFyZSBzZXQKKyMKKyMgTWFjcXVhcmllCisjIHBlcm1hbmVudCBvY2N1cGF0aW9uIChzY2llbnRpZmljIHN0YXRpb24pIHNpbmNlIDE5NDg7CisjIHNlYWxpbmcgYW5kIHBlbmd1aW4gb2lsIHN0YXRpb24gb3BlcmF0ZWQgMTg4OC8xOTE3CisjIGxpa2UgQXVzdHJhbGlhL0hvYmFydAorCisjIENocmlzdG1hcworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBJbmRpYW4vQ2hyaXN0bWFzCTc6MDI6NTIgLQlMTVQJMTg5NSBGZWIKKwkJCTc6MDAJLQlDWFQJIyBDaHJpc3RtYXMgSXNsYW5kIFRpbWUKKworIyBDb29rIElzCisjIEZyb20gU2hhbmtzICYgUG90dGVuZ2VyOgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJQ29vawkxOTc4CW9ubHkJLQlOb3YJMTIJMDowMAkwOjMwCUhTCitSdWxlCUNvb2sJMTk3OQkxOTkxCS0JTWFyCVN1bj49MQkwOjAwCTAJLQorUnVsZQlDb29rCTE5NzkJMTk5MAktCU9jdAlsYXN0U3VuCTA6MDAJMDozMAlIUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBQYWNpZmljL1Jhcm90b25nYQktMTA6Mzk6MDQgLQlMTVQJMTkwMQkJIyBBdmFydWEKKwkJCS0xMDozMAktCUNLVAkxOTc4IE5vdiAxMgkjIENvb2sgSXMgVGltZQorCQkJLTEwOjAwCUNvb2sJQ0slc1QKKworIyBDb2NvcworIyBUaGVzZSBpc2xhbmRzIHdlcmUgcnVsZWQgYnkgdGhlIFJvc3MgZmFtaWx5IGZyb20gYWJvdXQgMTgzMCB0byAxOTc4LgorIyBXZSBkb24ndCBrbm93IHdoZW4gc3RhbmRhcmQgdGltZSB3YXMgaW50cm9kdWNlZDsgZm9yIG5vdywgd2UgZ3Vlc3MgMTkwMC4KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJSW5kaWFuL0NvY29zCTY6Mjc6NDAJLQlMTVQJMTkwMAorCQkJNjozMAktCUNDVAkjIENvY29zIElzbGFuZHMgVGltZQorCisjIEZpamkKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUZpamkJMTk5OAkxOTk5CS0JTm92CVN1bj49MQkyOjAwCTE6MDAJUworUnVsZQlGaWppCTE5OTkJMjAwMAktCUZlYglsYXN0U3VuCTM6MDAJMAktCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCVBhY2lmaWMvRmlqaQkxMTo1Mzo0MCAtCUxNVAkxOTE1IE9jdCAyNgkjIFN1dmEKKwkJCTEyOjAwCUZpamkJRkolc1QJIyBGaWppIFRpbWUKKworIyBGcmVuY2ggUG9seW5lc2lhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCVBhY2lmaWMvR2FtYmllcgkgLTg6NTk6NDggLQlMTVQJMTkxMiBPY3QJIyBSaWtpdGVhCisJCQkgLTk6MDAJLQlHQU1UCSMgR2FtYmllciBUaW1lCitab25lCVBhY2lmaWMvTWFycXVlc2FzIC05OjE4OjAwIC0JTE1UCTE5MTIgT2N0CisJCQkgLTk6MzAJLQlNQVJUCSMgTWFycXVlc2FzIFRpbWUKK1pvbmUJUGFjaWZpYy9UYWhpdGkJIC05OjU4OjE2IC0JTE1UCTE5MTIgT2N0CSMgUGFwZWV0ZQorCQkJLTEwOjAwCS0JVEFIVAkjIFRhaGl0aSBUaW1lCisjIENsaXBwZXJ0b24gKG5lYXIgTm9ydGggQW1lcmljYSkgaXMgYWRtaW5pc3RlcmVkIGZyb20gRnJlbmNoIFBvbHluZXNpYTsKKyMgaXQgaXMgdW5pbmhhYml0ZWQuCisKKyMgR3VhbQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlQYWNpZmljL0d1YW0JLTE0OjIxOjAwIC0JTE1UCTE4NDQgRGVjIDMxCisJCQkgOTozOTowMCAtCUxNVAkxOTAxCQkjIEFnYW5hCisJCQkxMDowMAktCUdTVAkyMDAwIERlYyAyMwkjIEd1YW0KKwkJCTEwOjAwCS0JQ2hTVAkjIENoYW1vcnJvIFN0YW5kYXJkIFRpbWUKKworIyBLaXJpYmF0aQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBQYWNpZmljL1RhcmF3YQkgMTE6MzI6MDQgLQlMTVQJMTkwMQkJIyBCYWlyaWtpCisJCQkgMTI6MDAJLQlHSUxUCQkgIyBHaWxiZXJ0IElzIFRpbWUKK1pvbmUgUGFjaWZpYy9FbmRlcmJ1cnkJLTExOjI0OjIwIC0JTE1UCTE5MDEKKwkJCS0xMjowMAktCVBIT1QJMTk3OSBPY3QgIyBQaG9lbml4IElzIFRpbWUKKwkJCS0xMTowMAktCVBIT1QJMTk5NQorCQkJIDEzOjAwCS0JUEhPVAorWm9uZSBQYWNpZmljL0tpcml0aW1hdGkJLTEwOjI5OjIwIC0JTE1UCTE5MDEKKwkJCS0xMDo0MAktCUxJTlQJMTk3OSBPY3QgIyBMaW5lIElzIFRpbWUKKwkJCS0xMDowMAktCUxJTlQJMTk5NQorCQkJIDE0OjAwCS0JTElOVAorCisjIE4gTWFyaWFuYSBJcworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBQYWNpZmljL1NhaXBhbgktMTQ6MTc6MDAgLQlMTVQJMTg0NCBEZWMgMzEKKwkJCSA5OjQzOjAwIC0JTE1UCTE5MDEKKwkJCSA5OjAwCS0JTVBUCTE5NjkgT2N0ICMgTiBNYXJpYW5hIElzIFRpbWUKKwkJCTEwOjAwCS0JTVBUCTIwMDAgRGVjIDIzCisJCQkxMDowMAktCUNoU1QJIyBDaGFtb3JybyBTdGFuZGFyZCBUaW1lCisKKyMgTWFyc2hhbGwgSXMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgUGFjaWZpYy9NYWp1cm8JMTE6MjQ6NDggLQlMTVQJMTkwMQorCQkJMTE6MDAJLQlNSFQJMTk2OSBPY3QgIyBNYXJzaGFsbCBJc2xhbmRzIFRpbWUKKwkJCTEyOjAwCS0JTUhUCitab25lIFBhY2lmaWMvS3dhamFsZWluCTExOjA5OjIwIC0JTE1UCTE5MDEKKwkJCTExOjAwCS0JTUhUCTE5NjkgT2N0CisJCQktMTI6MDAJLQlLV0FUCTE5OTMgQXVnIDIwCSMgS3dhamFsZWluIFRpbWUKKwkJCTEyOjAwCS0JTUhUCisKKyMgTWljcm9uZXNpYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBQYWNpZmljL1RydWsJMTA6MDc6MDggLQlMTVQJMTkwMQorCQkJMTA6MDAJLQlUUlVUCQkJIyBUcnVrIFRpbWUKK1pvbmUgUGFjaWZpYy9Qb25hcGUJMTA6MzI6NTIgLQlMTVQJMTkwMQkJIyBLb2xvbmlhCisJCQkxMTowMAktCVBPTlQJCQkjIFBvbmFwZSBUaW1lCitab25lIFBhY2lmaWMvS29zcmFlCTEwOjUxOjU2IC0JTE1UCTE5MDEKKwkJCTExOjAwCS0JS09TVAkxOTY5IE9jdAkjIEtvc3JhZSBUaW1lCisJCQkxMjowMAktCUtPU1QJMTk5OQorCQkJMTE6MDAJLQlLT1NUCisKKyMgTmF1cnUKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJUGFjaWZpYy9OYXVydQkxMTowNzo0MCAtCUxNVAkxOTIxIEphbiAxNQkjIFVhb2JlCisJCQkxMTozMAktCU5SVAkxOTQyIE1hciAxNQkjIE5hdXJ1IFRpbWUKKwkJCTk6MDAJLQlKU1QJMTk0NCBBdWcgMTUKKwkJCTExOjMwCS0JTlJUCTE5NzkgTWF5CisJCQkxMjowMAktCU5SVAorCisjIE5ldyBDYWxlZG9uaWEKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCU5DCTE5NzcJMTk3OAktCURlYwlTdW4+PTEJMDowMAkxOjAwCVMKK1J1bGUJTkMJMTk3OAkxOTc5CS0JRmViCTI3CTA6MDAJMAktCitSdWxlCU5DCTE5OTYJb25seQktCURlYwkgMQkyOjAwcwkxOjAwCVMKKyMgU2hhbmtzICYgUG90dGVuZ2VyIHNheSB0aGUgZm9sbG93aW5nIHdhcyBhdCAyOjAwOyBnbyB3aXRoIElBVEEuCitSdWxlCU5DCTE5OTcJb25seQktCU1hcgkgMgkyOjAwcwkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJUGFjaWZpYy9Ob3VtZWEJMTE6MDU6NDggLQlMTVQJMTkxMiBKYW4gMTMKKwkJCTExOjAwCU5DCU5DJXNUCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIE5ldyBaZWFsYW5kCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCU5aCTE5MjcJb25seQktCU5vdgkgNgkyOjAwCTE6MDAJUworUnVsZQlOWgkxOTI4CW9ubHkJLQlNYXIJIDQJMjowMAkwCU0KK1J1bGUJTloJMTkyOAkxOTMzCS0JT2N0CVN1bj49OAkyOjAwCTA6MzAJUworUnVsZQlOWgkxOTI5CTE5MzMJLQlNYXIJU3VuPj0xNQkyOjAwCTAJTQorUnVsZQlOWgkxOTM0CTE5NDAJLQlBcHIJbGFzdFN1bgkyOjAwCTAJTQorUnVsZQlOWgkxOTM0CTE5NDAJLQlTZXAJbGFzdFN1bgkyOjAwCTA6MzAJUworUnVsZQlOWgkxOTQ2CW9ubHkJLQlKYW4JIDEJMDowMAkwCVMKKyMgU2luY2UgMTk1NyBDaGF0aGFtIGhhcyBiZWVuIDQ1IG1pbnV0ZXMgYWhlYWQgb2YgTlosIGJ1dCB0aGVyZSdzIG5vCisjIGNvbnZlbmllbnQgbm90YXRpb24gZm9yIHRoaXMgc28gd2UgbXVzdCBkdXBsaWNhdGUgdGhlIFJ1bGUgbGluZXMuCitSdWxlCU5aCTE5NzQJb25seQktCU5vdglTdW4+PTEJMjowMHMJMTowMAlECitSdWxlCUNoYXRoYW0JMTk3NAlvbmx5CS0JTm92CVN1bj49MQkyOjQ1cwkxOjAwCUQKK1J1bGUJTloJMTk3NQlvbmx5CS0JRmViCWxhc3RTdW4JMjowMHMJMAlTCitSdWxlCUNoYXRoYW0JMTk3NQlvbmx5CS0JRmViCWxhc3RTdW4JMjo0NXMJMAlTCitSdWxlCU5aCTE5NzUJMTk4OAktCU9jdAlsYXN0U3VuCTI6MDBzCTE6MDAJRAorUnVsZQlDaGF0aGFtCTE5NzUJMTk4OAktCU9jdAlsYXN0U3VuCTI6NDVzCTE6MDAJRAorUnVsZQlOWgkxOTc2CTE5ODkJLQlNYXIJU3VuPj0xCTI6MDBzCTAJUworUnVsZQlDaGF0aGFtCTE5NzYJMTk4OQktCU1hcglTdW4+PTEJMjo0NXMJMAlTCitSdWxlCU5aCTE5ODkJb25seQktCU9jdAlTdW4+PTgJMjowMHMJMTowMAlECitSdWxlCUNoYXRoYW0JMTk4OQlvbmx5CS0JT2N0CVN1bj49OAkyOjQ1cwkxOjAwCUQKK1J1bGUJTloJMTk5MAkyMDA2CS0JT2N0CVN1bj49MQkyOjAwcwkxOjAwCUQKK1J1bGUJQ2hhdGhhbQkxOTkwCTIwMDYJLQlPY3QJU3VuPj0xCTI6NDVzCTE6MDAJRAorUnVsZQlOWgkxOTkwCTIwMDcJLQlNYXIJU3VuPj0xNQkyOjAwcwkwCVMKK1J1bGUJQ2hhdGhhbQkxOTkwCTIwMDcJLQlNYXIJU3VuPj0xNQkyOjQ1cwkwCVMKK1J1bGUJTloJMjAwNwltYXgJLQlTZXAJbGFzdFN1bgkyOjAwcwkxOjAwCUQKK1J1bGUJQ2hhdGhhbQkyMDA3CW1heAktCVNlcAlsYXN0U3VuCTI6NDVzCTE6MDAJRAorUnVsZQlOWgkyMDA4CW1heAktCUFwcglTdW4+PTEJMjowMHMJMAlTCitSdWxlCUNoYXRoYW0JMjAwOAltYXgJLQlBcHIJU3VuPj0xCTI6NDVzCTAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBQYWNpZmljL0F1Y2tsYW5kCTExOjM5OjA0IC0JTE1UCTE4NjggTm92ICAyCisJCQkxMTozMAlOWglOWiVzVAkxOTQ2IEphbiAgMQorCQkJMTI6MDAJTloJTlolc1QKK1pvbmUgUGFjaWZpYy9DaGF0aGFtCTEyOjEzOjQ4IC0JTE1UCTE5NTcgSmFuICAxCisJCQkxMjo0NQlDaGF0aGFtCUNIQSVzVAorCisKKyMgQXVja2xhbmQgSXMKKyMgdW5pbmhhYml0ZWQ7IE1hb3JpIGFuZCBNb3Jpb3JpLCBjb2xvbmlhbCBzZXR0bGVycywgcGFzdG9yYWxpc3RzLCBzZWFsZXJzLAorIyBhbmQgc2NpZW50aWZpYyBwZXJzb25uZWwgaGF2ZSB3aW50ZXJlZAorCisjIENhbXBiZWxsIEkKKyMgbWlub3Igd2hhbGluZyBzdGF0aW9ucyBvcGVyYXRlZCAxOTA5LzE5MTQKKyMgc2NpZW50aWZpYyBzdGF0aW9uIG9wZXJhdGVkIDE5NDEvMTk5NTsKKyMgcHJldmlvdXNseSB3aGFsZXJzLCBzZWFsZXJzLCBwYXN0b3JhbGlzdHMsIGFuZCBzY2llbnRpZmljIHBlcnNvbm5lbCB3aW50ZXJlZAorIyB3YXMgcHJvYmFibHkgbGlrZSBQYWNpZmljL0F1Y2tsYW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIE5pdWUKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJUGFjaWZpYy9OaXVlCS0xMToxOTo0MCAtCUxNVAkxOTAxCQkjIEFsb2ZpCisJCQktMTE6MjAJLQlOVVQJMTk1MQkjIE5pdWUgVGltZQorCQkJLTExOjMwCS0JTlVUCTE5NzggT2N0IDEKKwkJCS0xMTowMAktCU5VVAorCisjIE5vcmZvbGsKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJUGFjaWZpYy9Ob3Jmb2xrCTExOjExOjUyIC0JTE1UCTE5MDEJCSMgS2luZ3N0b24KKwkJCTExOjEyCS0JTk1UCTE5NTEJIyBOb3Jmb2xrIE1lYW4gVGltZQorCQkJMTE6MzAJLQlORlQJCSMgTm9yZm9sayBUaW1lCisKKyMgUGFsYXUgKEJlbGF1KQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBQYWNpZmljL1BhbGF1CTg6NTc6NTYgLQlMTVQJMTkwMQkJIyBLb3JvcgorCQkJOTowMAktCVBXVAkjIFBhbGF1IFRpbWUKKworIyBQYXB1YSBOZXcgR3VpbmVhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIFBhY2lmaWMvUG9ydF9Nb3Jlc2J5IDk6NDg6NDAgLQlMTVQJMTg4MAorCQkJOTo0ODozMgktCVBNTVQJMTg5NQkjIFBvcnQgTW9yZXNieSBNZWFuIFRpbWUKKwkJCTEwOjAwCS0JUEdUCQkjIFBhcHVhIE5ldyBHdWluZWEgVGltZQorCisjIFBpdGNhaXJuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIFBhY2lmaWMvUGl0Y2Fpcm4JLTg6NDA6MjAgLQlMTVQJMTkwMQkJIyBBZGFtc3Rvd24KKwkJCS04OjMwCS0JUE5UCTE5OTggQXByIDI3IDAwOjAwCisJCQktODowMAktCVBTVAkjIFBpdGNhaXJuIFN0YW5kYXJkIFRpbWUKKworIyBBbWVyaWNhbiBTYW1vYQorWm9uZSBQYWNpZmljL1BhZ29fUGFnbwkgMTI6Mzc6MTIgLQlMTVQJMTg3OSBKdWwgIDUKKwkJCS0xMToyMjo0OCAtCUxNVAkxOTExCisJCQktMTE6MzAJLQlTQU1UCTE5NTAJCSMgU2Ftb2EgVGltZQorCQkJLTExOjAwCS0JTlNUCTE5NjcgQXByCSMgTj1Ob21lCisJCQktMTE6MDAJLQlCU1QJMTk4MyBOb3YgMzAJIyBCPUJlcmluZworCQkJLTExOjAwCS0JU1NUCQkJIyBTPVNhbW9hCisKKyMgU2Ftb2EKK1pvbmUgUGFjaWZpYy9BcGlhCSAxMjozMzowNCAtCUxNVAkxODc5IEp1bCAgNQorCQkJLTExOjI2OjU2IC0JTE1UCTE5MTEKKwkJCS0xMTozMAktCVNBTVQJMTk1MAkJIyBTYW1vYSBUaW1lCisJCQktMTE6MDAJLQlXU1QJCQkjIFNhbW9hIFRpbWUKKworIyBTb2xvbW9uIElzCisjIGV4Y2x1ZGVzIEJvdWdhaW52aWxsZSwgZm9yIHdoaWNoIHNlZSBQYXB1YSBOZXcgR3VpbmVhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIFBhY2lmaWMvR3VhZGFsY2FuYWwgMTA6Mzk6NDggLQlMTVQJMTkxMiBPY3QJIyBIb25pYXJhCisJCQkxMTowMAktCVNCVAkjIFNvbG9tb24gSXMgVGltZQorCisjIFRva2VsYXUgSXMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJUGFjaWZpYy9GYWthb2ZvCS0xMToyNDo1NiAtCUxNVAkxOTAxCisJCQktMTA6MDAJLQlUS1QJIyBUb2tlbGF1IFRpbWUKKworIyBUb25nYQorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJVG9uZ2EJMTk5OQlvbmx5CS0JT2N0CSA3CTI6MDBzCTE6MDAJUworUnVsZQlUb25nYQkyMDAwCW9ubHkJLQlNYXIJMTkJMjowMHMJMAktCitSdWxlCVRvbmdhCTIwMDAJMjAwMQktCU5vdglTdW4+PTEJMjowMAkxOjAwCVMKK1J1bGUJVG9uZ2EJMjAwMQkyMDAyCS0JSmFuCWxhc3RTdW4JMjowMAkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgUGFjaWZpYy9Ub25nYXRhcHUJMTI6MTk6MjAgLQlMTVQJMTkwMQorCQkJMTI6MjAJLQlUT1QJMTk0MSAjIFRvbmdhIFRpbWUKKwkJCTEzOjAwCS0JVE9UCTE5OTkKKwkJCTEzOjAwCVRvbmdhCVRPJXNUCisKKyMgVHV2YWx1CisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIFBhY2lmaWMvRnVuYWZ1dGkJMTE6NTY6NTIgLQlMTVQJMTkwMQorCQkJMTI6MDAJLQlUVlQJIyBUdXZhbHUgVGltZQorCisKKyMgVVMgbWlub3Igb3V0bHlpbmcgaXNsYW5kcworCisjIEhvd2xhbmQsIEJha2VyCisjIEhvd2xhbmQgd2FzIG1pbmVkIGZvciBndWFubyBieSBBbWVyaWNhbiBjb21wYW5pZXMgMTg1Ny0xODc4IGFuZCBCcml0aXNoCisjIDE4ODYtMTg5MTsgQmFrZXIgd2FzIHNpbWlsYXIgYnV0IGV4YWN0IGRhdGVzIGFyZSBub3Qga25vd24uCisjIEluaGFiaXRlZCBieSBjaXZpbGlhbnMgMTkzNS0xOTQyOyBVLlMuIG1pbGl0YXJ5IGJhc2VzIDE5NDMtMTk0NDsKKyMgdW5pbmhhYml0ZWQgdGhlcmVhZnRlci4KKyMgSG93bGFuZCBvYnNlcnZlZCBIYXdhaWkgU3RhbmRhcmQgVGltZSAoVVRDLTEwOjMwKSBpbiAxOTM3OworIyBzZWUgcGFnZSAyMDYgb2YgRWxnZW4gTS4gTG9uZyBhbmQgTWFyaWUgSy4gTG9uZywKKyMgQW1lbGlhIEVhcmhhcnQ6IHRoZSBNeXN0ZXJ5IFNvbHZlZCwgU2ltb24gJiBTY2h1c3RlciAoMjAwMCkuCisjIFNvIG1vc3QgbGlrZWx5IEhvd2xhbmQgYW5kIEJha2VyIG9ic2VydmVkIEhhd2FpaSBUaW1lIGZyb20gMTkzNQorIyB1bnRpbCB0aGV5IHdlcmUgYWJhbmRvbmVkIGFmdGVyIHRoZSB3YXIuCisKKyMgSmFydmlzCisjIE1pbmVkIGZvciBndWFubyBieSBBbWVyaWNhbiBjb21wYW5pZXMgMTg1Ny0xODc5IGFuZCBCcml0aXNoIDE4ODM/LTE4OTE/LgorIyBJbmhhYml0ZWQgYnkgY2l2aWxpYW5zIDE5MzUtMTk0MjsgSUdZIHNjaWVudGlmaWMgYmFzZSAxOTU3LTE5NTg7CisjIHVuaW5oYWJpdGVkIHRoZXJlYWZ0ZXIuCisjIG5vIGluZm9ybWF0aW9uOyB3YXMgcHJvYmFibHkgbGlrZSBQYWNpZmljL0tpcml0aW1hdGkKKworIyBKb2huc3RvbgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBQYWNpZmljL0pvaG5zdG9uCS0xMDowMAktCUhTVAorCisjIEtpbmdtYW4KKyMgdW5pbmhhYml0ZWQKKworIyBNaWR3YXkKKyMKKyMgRnJvbSBNYXJrIEJyYWRlciAoMjAwNS0wMS0yMyk6CisjIFtGYWxsYWNpZXMgYW5kIEZhbnRhc2llcyBvZiBBaXIgVHJhbnNwb3J0IEhpc3RvcnksIGJ5IFIuRS5HLiBEYXZpZXMsCisjIHB1Ymxpc2hlZCAxOTk0IGJ5IFBhbGFkd3IgUHJlc3MsIE1jTGVhbiwgVkEsIFVTQTsgSVNCTiAwLTk2MjY0ODMtNS0zXQorIyByZXByb2R1Y2VkIGEgUGFuIEFtZXJpY2FuIEFpcndheXMgdGltZWFibGVzIGZyb20gMTkzNiwgZm9yIHRoZWlyIHdlZWtseQorIyAiT3JpZW50IEV4cHJlc3MiIGZsaWdodHMgYmV0d2VlbiBTYW4gRnJhbmNpc2NvIGFuZCBNYW5pbGEsIGFuZCBjb25uZWN0aW5nCisjIGZsaWdodHMgdG8gQ2hpY2FnbyBhbmQgdGhlIFVTIEVhc3QgQ29hc3QuICBBcyBpdCB1c2VzIHNvbWUgdGltZSB6b25lCisjIGRlc2lnbmF0aW9ucyB0aGF0IEkndmUgbmV2ZXIgc2VlbiBiZWZvcmU6Li4uLgorIyBGcmkuIDY6MzBBIEx2LiBIT05PTE9MVSAoUGVhcmwgSGFyYm9yKSwgSC5JLiAgIEguTC5ULiBBci4gNTozMFAgU3VuLgorIyAgIiAgIDM6MDBQIEFyLiBNSURXQVkgSVNMQU5EIC4gLiAuIC4gLiAuIC4gLiAuIE0uTC5ULiBMdi4gNjowMEEgICIKKyMKK1pvbmUgUGFjaWZpYy9NaWR3YXkJLTExOjQ5OjI4IC0JTE1UCTE5MDEKKwkJCS0xMTowMAktCU5TVAkxOTU2IEp1biAgMworCQkJLTExOjAwCTE6MDAJTkRUCTE5NTYgU2VwICAyCisJCQktMTE6MDAJLQlOU1QJMTk2NyBBcHIJIyBOPU5vbWUKKwkJCS0xMTowMAktCUJTVAkxOTgzIE5vdiAzMAkjIEI9QmVyaW5nCisJCQktMTE6MDAJLQlTU1QJCQkjIFM9U2Ftb2EKKworIyBQYWxteXJhCisjIHVuaW5oYWJpdGVkIHNpbmNlIFdvcmxkIFdhciBJSTsgd2FzIHByb2JhYmx5IGxpa2UgUGFjaWZpYy9LaXJpdGltYXRpCisKKyMgV2FrZQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlQYWNpZmljL1dha2UJMTE6MDY6MjggLQlMTVQJMTkwMQorCQkJMTI6MDAJLQlXQUtUCSMgV2FrZSBUaW1lCisKKworIyBWYW51YXR1CisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlWYW51YXR1CTE5ODMJb25seQktCVNlcAkyNQkwOjAwCTE6MDAJUworUnVsZQlWYW51YXR1CTE5ODQJMTk5MQktCU1hcglTdW4+PTIzCTA6MDAJMAktCitSdWxlCVZhbnVhdHUJMTk4NAlvbmx5CS0JT2N0CTIzCTA6MDAJMTowMAlTCitSdWxlCVZhbnVhdHUJMTk4NQkxOTkxCS0JU2VwCVN1bj49MjMJMDowMAkxOjAwCVMKK1J1bGUJVmFudWF0dQkxOTkyCTE5OTMJLQlKYW4JU3VuPj0yMwkwOjAwCTAJLQorUnVsZQlWYW51YXR1CTE5OTIJb25seQktCU9jdAlTdW4+PTIzCTA6MDAJMTowMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCVBhY2lmaWMvRWZhdGUJMTE6MTM6MTYgLQlMTVQJMTkxMiBKYW4gMTMJCSMgVmlsYQorCQkJMTE6MDAJVmFudWF0dQlWVSVzVAkjIFZhbnVhdHUgVGltZQorCisjIFdhbGxpcyBhbmQgRnV0dW5hCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCVBhY2lmaWMvV2FsbGlzCTEyOjE1OjIwIC0JTE1UCTE5MDEKKwkJCTEyOjAwCS0JV0ZUCSMgV2FsbGlzICYgRnV0dW5hIFRpbWUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIE5PVEVTCisKKyMgVGhpcyBkYXRhIGlzIGJ5IG5vIG1lYW5zIGF1dGhvcml0YXRpdmU7IGlmIHlvdSB0aGluayB5b3Uga25vdyBiZXR0ZXIsCisjIGdvIGFoZWFkIGFuZCBlZGl0IHRoZSBmaWxlIChhbmQgcGxlYXNlIHNlbmQgYW55IGNoYW5nZXMgdG8KKyMgdHpAZWxzaWUubmNpLm5paC5nb3YgZm9yIGdlbmVyYWwgdXNlIGluIHRoZSBmdXR1cmUpLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgorIyBBIGdvb2Qgc291cmNlIGZvciB0aW1lIHpvbmUgaGlzdG9yaWNhbCBkYXRhIG91dHNpZGUgdGhlIFUuUy4gaXMKKyMgVGhvbWFzIEcuIFNoYW5rcyBhbmQgUmlxdWUgUG90dGVuZ2VyLCBUaGUgSW50ZXJuYXRpb25hbCBBdGxhcyAoNnRoIGVkaXRpb24pLAorIyBTYW4gRGllZ286IEFDUyBQdWJsaWNhdGlvbnMsIEluYy4gKDIwMDMpLgorIworIyBHd2lsbGltIExhdyB3cml0ZXMgdGhhdCBhIGdvb2Qgc291cmNlCisjIGZvciByZWNlbnQgdGltZSB6b25lIGRhdGEgaXMgdGhlIEludGVybmF0aW9uYWwgQWlyIFRyYW5zcG9ydAorIyBBc3NvY2lhdGlvbidzIFN0YW5kYXJkIFNjaGVkdWxlcyBJbmZvcm1hdGlvbiBNYW51YWwgKElBVEEgU1NJTSksCisjIHB1Ymxpc2hlZCBzZW1pYW5udWFsbHkuICBMYXcgc2VudCBpbiBzZXZlcmFsIGhlbHBmdWwgc3VtbWFyaWVzCisjIG9mIHRoZSBJQVRBJ3MgZGF0YSBhZnRlciAxOTkwLgorIworIyBFeGNlcHQgd2hlcmUgb3RoZXJ3aXNlIG5vdGVkLCBTaGFua3MgJiBQb3R0ZW5nZXIgaXMgdGhlIHNvdXJjZSBmb3IKKyMgZW50cmllcyB0aHJvdWdoIDE5OTAsIGFuZCBJQVRBIFNTSU0gaXMgdGhlIHNvdXJjZSBmb3IgZW50cmllcyBhZnRlcndhcmRzLgorIworIyBBbm90aGVyIHNvdXJjZSBvY2Nhc2lvbmFsbHkgdXNlZCBpcyBFZHdhcmQgVy4gV2hpdG1hbiwgV29ybGQgVGltZSBEaWZmZXJlbmNlcywKKyMgV2hpdG1hbiBQdWJsaXNoaW5nIENvLCAyIE5pYWdhcmEgQXYsIEVhbGluZywgTG9uZG9uICh1bmRhdGVkKSwgd2hpY2gKKyMgSSBmb3VuZCBpbiB0aGUgVUNMQSBsaWJyYXJ5LgorIworIyBBIHJlbGlhYmxlIGFuZCBlbnRlcnRhaW5pbmcgc291cmNlIGFib3V0IHRpbWUgem9uZXMgaXMKKyMgRGVyZWsgSG93c2UsIEdyZWVud2ljaCB0aW1lIGFuZCBsb25naXR1ZGUsIFBoaWxpcCBXaWxzb24gUHVibGlzaGVycyAoMTk5NykuCisjCisjIEkgaW52ZW50ZWQgdGhlIGFiYnJldmlhdGlvbnMgbWFya2VkIGAqJyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlOworIyB0aGUgcmVzdCBhcmUgZnJvbSBlYXJsaWVyIHZlcnNpb25zIG9mIHRoaXMgZmlsZSwgb3IgZnJvbSBvdGhlciBzb3VyY2VzLgorIyBDb3JyZWN0aW9ucyBhcmUgd2VsY29tZSEKKyMJCXN0ZCBkc3QKKyMJCUxNVAlMb2NhbCBNZWFuIFRpbWUKKyMJICA4OjAwCVdTVCBXU1QJV2VzdGVybiBBdXN0cmFsaWEKKyMJICA4OjQ1CUNXU1QgQ1dTVCBDZW50cmFsIFdlc3Rlcm4gQXVzdHJhbGlhKgorIwkgIDk6MDAJSlNUCUphcGFuCisjCSAgOTozMAlDU1QgQ1NUCUNlbnRyYWwgQXVzdHJhbGlhCisjCSAxMDowMAlFU1QgRVNUCUVhc3Rlcm4gQXVzdHJhbGlhCisjCSAxMDowMAlDaFNUCUNoYW1vcnJvCisjCSAxMDozMAlMSFNUIExIU1QgTG9yZCBIb3dlKgorIwkgMTE6MzAJTlpNVCBOWlNUIE5ldyBaZWFsYW5kIHRocm91Z2ggMTk0NQorIwkgMTI6MDAJTlpTVCBOWkRUIE5ldyBaZWFsYW5kIDE5NDYtcHJlc2VudAorIwkgMTI6NDUJQ0hBU1QgQ0hBRFQgQ2hhdGhhbSoKKyMJLTExOjAwCVNTVAlTYW1vYQorIwktMTA6MDAJSFNUCUhhd2FpaQorIwktIDg6MDAJUFNUCVBpdGNhaXJuKgorIworIyBTZWUgdGhlIGBub3J0aGFtZXJpY2EnIGZpbGUgZm9yIEhhd2FpaS4KKyMgU2VlIHRoZSBgc291dGhhbWVyaWNhJyBmaWxlIGZvciBFYXN0ZXIgSSBhbmQgdGhlIEdhbGFwYWdvcyBJcy4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEF1c3RyYWxpYQorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDUtMTItMDgpOgorIyA8YSBocmVmPSJodHRwOi8vd3d3LmJvbS5nb3YuYXUvY2xpbWF0ZS9hdmVyYWdlcy90YWJsZXMvZHN0X3RpbWVzLnNodG1sIj4KKyMgSW1wbGVtZW50YXRpb24gRGF0ZXMgb2YgRGF5bGlnaHQgU2F2aW5nIFRpbWUgd2l0aGluIEF1c3RyYWxpYQorIyA8L2E+IHN1bW1hcml6ZXMgZGF5bGlnaHQgc2F2aW5nIGlzc3VlcyBpbiBBdXN0cmFsaWEuCisKKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDIwMDUtMTItMTIpOgorIyA8YSBocmVmPSJodHRwOi8vd3d3Lmxhd2xpbmsubnN3Lmdvdi5hdS9sYXdsaW5rL0NvcnBvcmF0ZS9sbF9hZ2RpbmZvLm5zZi9wYWdlcy9jb21tdW5pdHlfcmVsYXRpb25zX2RheWxpZ2h0X3NhdmluZyI+CisjIExhd2xpbmsgTlNXOkRheWxpZ2h0IFNhdmluZyBpbiBOZXcgU291dGggV2FsZXMKKyMgPC9hPiBjb3ZlcnMgTmV3IFNvdXRoIFdhbGVzIGluIHBhcnRpY3VsYXIuCisKKyMgRnJvbSBKb2huIE1hY2tpbiAoMTk5MS0wMy0wNik6CisjIFdlIGluIEF1c3RyYWxpYSBoYXZlIF9uZXZlcl8gcmVmZXJyZWQgdG8gRFNUIGFzIGBkYXlsaWdodCcgdGltZS4KKyMgSXQgaXMgY2FsbGVkIGBzdW1tZXInIHRpbWUuICBOb3cgYnkgYSBoYXBweSBjb2luY2lkZW5jZSwgYHN1bW1lcicKKyMgYW5kIGBzdGFuZGFyZCcgaGFwcGVuIHRvIHN0YXJ0IHdpdGggdGhlIHNhbWUgbGV0dGVyOyBoZW5jZSwgdGhlCisjIGFiYnJldmlhdGlvbiBkb2VzIF9ub3RfIGNoYW5nZS4uLgorIyBUaGUgbGVnaXNsYXRpb24gZG9lcyBub3QgYWN0dWFsbHkgZGVmaW5lIGFiYnJldmlhdGlvbnMsIGF0IGxlYXN0CisjIGluIHRoaXMgU3RhdGUsIGJ1dCB0aGUgYWJicmV2aWF0aW9uIGlzIGp1c3QgY29tbW9ubHkgdGFrZW4gdG8gYmUgdGhlCisjIGluaXRpYWxzIG9mIHRoZSBwaHJhc2UsIGFuZCB0aGUgbGVnaXNsYXRpb24gaGVyZSB1bmlmb3JtbHkgdXNlcworIyB0aGUgcGhyYXNlIGBzdW1tZXIgdGltZScgYW5kIGRvZXMgbm90IHVzZSB0aGUgcGhyYXNlIGBkYXlsaWdodAorIyB0aW1lJy4KKyMgQW5ub3VuY2VycyBvbiB0aGUgQ29tbW9ud2VhbHRoIHJhZGlvIG5ldHdvcmssIHRoZSBBQkMgKGZvciBBdXN0cmFsaWFuCisjIEJyb2FkY2FzdGluZyBDb21taXNzaW9uKSwgdXNlIHRoZSBwaHJhc2VzIGBFYXN0ZXJuIFN0YW5kYXJkIFRpbWUnCisjIG9yIGBFYXN0ZXJuIFN1bW1lciBUaW1lJy4gIChOb3RlLCB0aG91Z2gsIHRoYXQgYXMgSSBzYXkgaW4gdGhlCisjIGN1cnJlbnQgYXVzdHJhbGFzaWEgZmlsZSwgdGhlcmUgaXMgcmVhbGx5IG5vIHN1Y2ggdGhpbmcuKSAgQW5ub3VuY2VycworIyBvbiBpdHMgb3ZlcnNlYXMgc2VydmljZSwgUmFkaW8gQXVzdHJhbGlhLCB1c2UgdGhlIHNhbWUgcGhyYXNlcworIyBwcmVmaXhlZCBieSB0aGUgd29yZCBgQXVzdHJhbGlhbicgd2hlbiByZWZlcnJpbmcgdG8gbG9jYWwgdGltZXM7CisjIHRpbWUgYW5ub3VuY2VtZW50cyBvbiB0aGF0IHNlcnZpY2UsIG5hdHVyYWxseSBlbm91Z2gsIGFyZSBtYWRlIGluIFVUQy4KKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMTk5Mi0wMy0wOCk6CisjIEdpdmVuIHRoZSBhYm92ZSwgd2hhdCdzIGNob3NlbiBmb3IgeWVhci1yb3VuZCB1c2UgaXM6CisjCUNTVAlmb3IgYW55IHBsYWNlIG9wZXJhdGluZyBhdCBhIEdNVE9GRiBvZiA5OjMwCisjCVdTVAlmb3IgYW55IHBsYWNlIG9wZXJhdGluZyBhdCBhIEdNVE9GRiBvZiA4OjAwCisjCUVTVAlmb3IgYW55IHBsYWNlIG9wZXJhdGluZyBhdCBhIEdNVE9GRiBvZiAxMDowMAorCisjIEZyb20gQ2h1Y2sgU29wZXIgKDIwMDYtMDYtMDEpOgorIyBJIHJlY2VudGx5IGZvdW5kIHRoaXMgQXVzdHJhbGlhbiBnb3Zlcm5tZW50IHdlYiBwYWdlIG9uIHRpbWUgem9uZXM6CisjIDxodHRwOi8vd3d3LmF1c3RyYWxpYS5nb3YuYXUvYWJvdXQtYXVzdHJhbGlhLTEzdGltZT4KKyMgQW5kIHRoaXMgZ292ZXJubWVudCB3ZWIgcGFnZSBsaXN0cyB0aW1lIHpvbmUgbmFtZXMgYW5kIGFiYnJldmlhdGlvbnM6CisjIDxodHRwOi8vd3d3LmJvbS5nb3YuYXUvY2xpbWF0ZS9hdmVyYWdlcy90YWJsZXMvZGF5c2F2dG0uc2h0bWw+CisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMS0wNC0wNSksIHN1bW1hcml6aW5nIGEgbG9uZyBkaXNjdXNzaW9uIGFib3V0ICJFU1QiCisjIHZlcnN1cyAiQUVTVCIgZXRjLjoKKyMKKyMgSSBzZWUgdGhlIGZvbGxvd2luZyBwb2ludHMgb2YgZGlzcHV0ZToKKyMKKyMgKiBIb3cgaW1wb3J0YW50IGFyZSB1bmlxdWUgdGltZSB6b25lIGFiYnJldmlhdGlvbnM/CisjCisjICAgSGVyZSBJIHRlbmQgdG8gYWdyZWUgd2l0aCB0aGUgcG9pbnQgKG1vc3QgcmVjZW50bHkgbWFkZSBieSBDaHJpcworIyAgIE5ld21hbikgdGhhdCB1bmlxdWUgYWJicmV2aWF0aW9ucyBzaG91bGQgbm90IGJlIGVzc2VudGlhbCBmb3IgcHJvcGVyCisjICAgb3BlcmF0aW9uIG9mIHNvZnR3YXJlLiAgV2UgaGF2ZSBvdGhlciBpbnN0YW5jZXMgb2YgYW1iaWd1aXR5CisjICAgKGUuZy4gIklTVCIgZGVub3RpbmcgYm90aCAiSXNyYWVsIFN0YW5kYXJkIFRpbWUiIGFuZCAiSW5kaWFuCisjICAgU3RhbmRhcmQgVGltZSIpLCBhbmQgdGhleSBhcmUgbm90IGxpa2VseSB0byBnbyBhd2F5IGFueSB0aW1lIHNvb24uCisjICAgSW4gdGhlIG9sZCBkYXlzLCBzb21lIHNvZnR3YXJlIG1pc3Rha2VubHkgcmVsaWVkIG9uIHVuaXF1ZQorIyAgIGFiYnJldmlhdGlvbnMsIGJ1dCB0aGlzIGlzIGJlY29taW5nIGxlc3MgdHJ1ZSB3aXRoIHRpbWUsIGFuZCBJIGRvbid0CisjICAgdGhpbmsgaXQncyB0aGF0IGltcG9ydGFudCB0byBjYXRlciB0byBzdWNoIHNvZnR3YXJlIHRoZXNlIGRheXMuCisjCisjICAgT24gdGhlIG90aGVyIGhhbmQsIHRoZXJlIGlzIGFub3RoZXIgbW90aXZhdGlvbiBmb3IgdW5hbWJpZ3VvdXMKKyMgICBhYmJyZXZpYXRpb25zOiBpdCBjdXRzIGRvd24gb24gaHVtYW4gY29uZnVzaW9uLiAgVGhpcyBpcworIyAgIHBhcnRpY3VsYXJseSB0cnVlIGZvciBBdXN0cmFsaWEsIHdoZXJlICJFU1QiIGNhbiBtZWFuIG9uZSB0aGluZyBmb3IKKyMgICB0aW1lIFQgYW5kIGEgZGlmZmVyZW50IHRoaW5nIGZvciB0aW1lIFQgcGx1cyAxIHNlY29uZC4KKyMKKyMgKiBEb2VzIHRoZSByZWxldmFudCBsZWdpc2xhdGlvbiBpbmRpY2F0ZSB3aGljaCBhYmJyZXZpYXRpb25zIHNob3VsZCBiZSB1c2VkPworIworIyAgIEhlcmUgSSB0ZW5kIHRvIHRoaW5rIHRoYXQgdGhpbmdzIGFyZSBhIG1lc3MsIGp1c3QgYXMgdGhleSBhcmUgaW4KKyMgICBtYW55IG90aGVyIGNvdW50cmllcy4gIFdlIEFtZXJpY2FucyBhcmUgY3VycmVudGx5IGRpc2FncmVlaW5nIGFib3V0CisjICAgd2hpY2ggYWJicmV2aWF0aW9uIHRvIHVzZSBmb3IgdGhlIG5ld2x5IGxlZ2lzbGF0ZWQgQ2hhbW9ycm8gU3RhbmRhcmQKKyMgICBUaW1lLCBmb3IgZXhhbXBsZS4KKyMKKyMgICBQZXJzb25hbGx5LCBJIHdvdWxkIHByZWZlciB0byB1c2UgY29tbW9uIHByYWN0aWNlOyBJIHdvdWxkIGxpa2UgdG8KKyMgICByZWZlciB0byBsZWdpc2xhdGlvbiBvbmx5IGZvciBleGFtcGxlcyBvZiBjb21tb24gcHJhY3RpY2UsIG9yIGFzIGEKKyMgICB0aWVicmVha2VyLgorIworIyAqIERvIEF1c3RyYWxpYW5zIG1vcmUgb2Z0ZW4gdXNlICJFYXN0ZXJuIERheWxpZ2h0IFRpbWUiIG9yICJFYXN0ZXJuCisjICAgU3VtbWVyIFRpbWUiPyAgRG8gdGhleSB0eXBpY2FsbHkgcHJlZml4IHRoZSB0aW1lIHpvbmUgbmFtZXMgd2l0aAorIyAgIHRoZSB3b3JkICJBdXN0cmFsaWFuIj8KKyMKKyMgICBNeSBvd24gaW1wcmVzc2lvbiBpcyB0aGF0IGJvdGggIkRheWxpZ2h0IFRpbWUiIGFuZCAiU3VtbWVyIFRpbWUiIGFyZQorIyAgIGNvbW1vbiBhbmQgYXJlIHdpZGVseSB1bmRlcnN0b29kLCBidXQgdGhhdCAiU3VtbWVyIFRpbWUiIGlzIG1vcmUKKyMgICBwb3B1bGFyOyBhbmQgdGhhdCB0aGUgbGVhZGluZyAiQSIgaXMgYWxzbyBjb21tb24gYnV0IGlzIG9taXR0ZWQgbW9yZQorIyAgIG9mdGVuIHRoYW4gbm90LiAgSSBqdXN0IHVzZWQgQWx0YVZpc3RhIGFkdmFuY2VkIHNlYXJjaCBhbmQgZ290IHRoZQorIyAgIGZvbGxvd2luZyBjb3VudCBvZiBwYWdlIGhpdHM6CisjCisjICAgICAxLDEwMyAiRWFzdGVybiBTdW1tZXIgVGltZSIgQU5EIGRvbWFpbjphdQorIyAgICAgICA5NzEgIkF1c3RyYWxpYW4gRWFzdGVybiBTdW1tZXIgVGltZSIgQU5EIGRvbWFpbjphdQorIyAgICAgICA2MTMgIkVhc3Rlcm4gRGF5bGlnaHQgVGltZSIgQU5EIGRvbWFpbjphdQorIyAgICAgICAxMjcgIkF1c3RyYWxpYW4gRWFzdGVybiBEYXlsaWdodCBUaW1lIiBBTkQgZG9tYWluOmF1CisjCisjICAgSGVyZSAiU3VtbWVyIiBzZWVtcyBxdWl0ZSBhIGJpdCBtb3JlIHBvcHVsYXIgdGhhbiAiRGF5bGlnaHQiLAorIyAgIHBhcnRpY3VsYXJseSB3aGVuIHdlIGtub3cgdGhlIHRpbWUgem9uZSBpcyBBdXN0cmFsaWFuIGFuZCBub3QgVVMsCisjICAgc2F5LiAgVGhlICJBdXN0cmFsaWFuIiBwcmVmaXggc2VlbXMgdG8gYmUgcG9wdWxhciBmb3IgRWFzdGVybiBTdW1tZXIKKyMgICBUaW1lLCBidXQgdW5wb3B1bGFyIGZvciBFYXN0ZXJuIERheWxpZ2h0IFRpbWUuCisjCisjICAgRm9yIGFiYnJldmlhdGlvbnMsIHRvb2xzIGxpa2UgQWx0YVZpc3RhIGFyZSBsZXNzIHVzZWZ1bCBiZWNhdXNlIG9mCisjICAgYW1iaWd1aXR5LiAgTWFueSBoaXRzIGFyZSBub3QgcmVhbGx5IHRpbWUgem9uZXMsIHVuZm9ydHVuYXRlbHksIGFuZAorIyAgIG1hbnkgaGl0cyBkZW5vdGUgVVMgdGltZSB6b25lcyBhbmQgbm90IEF1c3RyYWxpYW4gb25lcy4gIEJ1dCBoZXJlCisjICAgYXJlIHRoZSBoaXQgY291bnRzIGFueXdheToKKyMKKyMgICAgIDE2MSwzMDQgIkVTVCIgYW5kIGRvbWFpbjphdQorIyAgICAgIDI1LDE1NiAiRURUIiBhbmQgZG9tYWluOmF1CisjICAgICAgMTgsMjYzICJBRVNUIiBhbmQgZG9tYWluOmF1CisjICAgICAgMTAsNDE2ICJBRURUIiBhbmQgZG9tYWluOmF1CisjCisjICAgICAgMTQsNTM4ICJDU1QiIGFuZCBkb21haW46YXUKKyMgICAgICAgNSw3MjggIkNEVCIgYW5kIGRvbWFpbjphdQorIyAgICAgICAgIDE3NiAiQUNTVCIgYW5kIGRvbWFpbjphdQorIyAgICAgICAgICAyOSAiQUNEVCIgYW5kIGRvbWFpbjphdQorIworIyAgICAgICA3LDUzOSAiV1NUIiBhbmQgZG9tYWluOmF1CisjICAgICAgICAgIDY4ICJBV1NUIiBhbmQgZG9tYWluOmF1CisjCisjICAgVGhpcyBkYXRhIHN1Z2dlc3QgdGhhdCBBdXN0cmFsaWFucyB0ZW5kIHRvIG9taXQgdGhlICJBIiBwcmVmaXggaW4KKyMgICBwcmFjdGljZS4gIFRoZSBzaXR1YXRpb24gZm9yICJTVCIgdmVyc3VzICJEVCIgaXMgbGVzcyBjbGVhciwgZ2l2ZW4KKyMgICB0aGUgYW1iaWd1aXRpZXMgaW52b2x2ZWQuCisjCisjICogSG93IGRvIEF1c3RyYWxpYW5zIGZlZWwgYWJvdXQgdGhlIGFiYnJldmlhdGlvbnMgaW4gdGhlIHR6IGRhdGFiYXNlPworIworIyAgIElmIHlvdSBqdXN0IGNvdW50IEF1c3RyYWxpYW5zIG9uIHRoaXMgbGlzdCwgSSBjb3VudCAyIGluIGZhdm9yIGFuZCAzCisjICAgYWdhaW5zdC4gIE9uZSBvZiB0aGUgImFnYWluc3QiIHZvdGVzIChEYXZpZCBLZWVnZWwpIGNvdW5zZWxlZCBkZWxheSwKKyMgICBzYXlpbmcgdGhhdCBib3RoIEFFU1QvQUVEVCBhbmQgRVNUL0VTVCBhcmUgd2lkZWx5IHVzZWQgYW5kCisjICAgdW5kZXJzdG9vZCBpbiBBdXN0cmFsaWEuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMTk5NS0xMi0xOSk6CisjIFNoYW5rcyAmIFBvdHRlbmdlciByZXBvcnQgMjowMCBmb3IgYWxsIGF1dHVtbiBjaGFuZ2VzIGluIEF1c3RyYWxpYSBhbmQgTlouCisjIE1hcmsgUHJpb3Igd3JpdGVzIHRoYXQgaGlzIG5ld3NwYXBlcgorIyByZXBvcnRzIHRoYXQgTlNXJ3MgZmFsbCAxOTk1IGNoYW5nZSB3aWxsIG9jY3VyIGF0IDI6MDAsCisjIGJ1dCBSb2JlcnQgRWx6IHNheXMgaXQncyBiZWVuIDM6MDAgaW4gVmljdG9yaWEgc2luY2UgMTk3MAorIyBhbmQgcGVyaGFwcyB0aGUgbmV3c3BhcGVyJ3MgYDI6MDAnIGlzIHJlZmVycmluZyB0byBzdGFuZGFyZCB0aW1lLgorIyBGb3Igbm93IHdlJ2xsIGNvbnRpbnVlIHRvIGFzc3VtZSAyOjAwcyBmb3IgY2hhbmdlcyBzaW5jZSAxOTYwLgorCisjIEZyb20gRXJpYyBVbGV2aWsgKDE5OTgtMDEtMDUpOgorIworIyBIZXJlIGFyZSBzb21lIFVSTHMgdG8gQXVzdHJhbGlhbiB0aW1lIGxlZ2lzbGF0aW9uLiBUaGVzZSBVUkxzIGFyZSBzdGFibGUsCisjIGFuZCBzaG91bGQgcHJvYmFibHkgYmUgaW5jbHVkZWQgaW4gdGhlIGRhdGEgZmlsZS4gVGhlcmUgYXJlIHByb2JhYmx5IG1vcmUKKyMgcmVsZXZhbnQgZW50cmllcyBpbiB0aGlzIGRhdGFiYXNlLgorIworIyBOU1cgKGluY2x1ZGluZyBMSEkgYW5kIEJyb2tlbiBIaWxsKToKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5hdXN0bGlpLmVkdS5hdS9hdS9sZWdpcy9uc3cvY29uc29sX2FjdC9zdGExOTg3MTM3L2luZGV4Lmh0bWwiPgorIyBTdGFuZGFyZCBUaW1lIEFjdCAxOTg3ICh1cGRhdGVkIDE5OTUtMDQtMDQpCisjIDwvYT4KKyMgQUNUCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXVzdGxpaS5lZHUuYXUvYXUvbGVnaXMvYWN0L2NvbnNvbF9hY3Qvc3Rhc3RhMTk3MjI3OS9pbmRleC5odG1sIj4KKyMgU3RhbmRhcmQgVGltZSBhbmQgU3VtbWVyIFRpbWUgQWN0IDE5NzIKKyMgPC9hPgorIyBTQQorIyA8YSBocmVmPSJodHRwOi8vd3d3LmF1c3RsaWkuZWR1LmF1L2F1L2xlZ2lzL3NhL2NvbnNvbF9hY3Qvc3RhMTg5ODEzNy9pbmRleC5odG1sIj4KKyMgU3RhbmRhcmQgVGltZSBBY3QsIDE4OTgKKyMgPC9hPgorCisjIEZyb20gRGF2aWQgR3Jvc3ogKDIwMDUtMDYtMTMpOgorIyBJdCB3YXMgYW5ub3VuY2VkIGxhc3Qgd2VlayB0aGF0IERheWxpZ2h0IFNhdmluZyB3b3VsZCBiZSBleHRlbmRlZCBieQorIyBvbmUgd2VlayBuZXh0IHllYXIgdG8gYWxsb3cgZm9yIHRoZSAyMDA2IENvbW1vbndlYWx0aCBHYW1lcy4KKyMgRGF5bGlnaHQgU2F2aW5nIGlzIG5vdyB0byBlbmQgZm9yIG5leHQgeWVhciBvbmx5IG9uIHRoZSBmaXJzdCBTdW5kYXkKKyMgaW4gQXByaWwgaW5zdGVhZCBvZiB0aGUgbGFzdCBTdW5kYXkgaW4gTWFyY2guCisjCisjIEZyb20gR3dpbGxpbSBMYXcgKDIwMDUtMDYtMTQpOgorIyBJIGRpZCBzb21lIEdvb2dsaW5nIGFuZCBmb3VuZCB0aGF0IGFsbCBvZiB0aG9zZSBzdGF0ZXMgKGFuZCB0ZXJyaXRvcnkpIHBsYW4KKyMgdG8gZXh0ZW5kIERTVCB0b2dldGhlciBpbiAyMDA2LgorIyBBQ1Q6IGh0dHA6Ly93d3cuY21kLmFjdC5nb3YuYXUvbWVkaWFyZWxlYXNlcy9maWxlcmVhZC5jZm0/ZmlsZT04Ni50eHQKKyMgTmV3IFNvdXRoIFdhbGVzOiBodHRwOi8vd3d3LnRoZWNvdXJpZXJtYWlsLm5ld3MuY29tLmF1L2NvbW1vbi9zdG9yeV9wYWdlLzAsNTkzNiwxNTUzODg2OSUyNTVFMTcwMiwwMC5odG1sCisjIFNvdXRoIEF1c3RyYWxpYTogaHR0cDovL3d3dy5uZXdzLmNvbS5hdS9zdG9yeS8wLDEwMTE3LDE1NTU1MDMxLTEyNDYsMDAuaHRtbAorIyBUYXNtYW5pYTogaHR0cDovL3d3dy5tZWRpYS50YXMuZ292LmF1L3JlbGVhc2UucGhwP2lkPTE0NzcyCisjIFZpY3RvcmlhOiBJIHdhc24ndCBhYmxlIHRvIGZpbmQgYW55dGhpbmcgc2VwYXJhdGUsIGJ1dCB0aGUgb3RoZXIgYXJ0aWNsZXMKKyMgYWxsdWRlIHRvIGl0LgorIyBCdXQgbm90IFF1ZWVuc2xhbmQKKyMgaHR0cDovL3d3dy5uZXdzLmNvbS5hdS9zdG9yeS8wLDEwMTE3LDE1NTY0MDMwLTEyNDgsMDAuaHRtbC4KKworIyBOb3J0aGVybiBUZXJyaXRvcnkKKworIyBGcm9tIEdlb3JnZSBTaGVwaGVyZCB2aWEgU2ltb24gV29vZGhlYWQgdmlhIFJvYmVydCBFbHogKDE5OTEtMDMtMDYpOgorIyAjIFRoZSBOT1JUSEVSTiBURVJSSVRPUlkuLiAgWyBDb3VydGVzeSBOLlQuIERlcHQgb2YgdGhlIENoaWVmIE1pbmlzdGVyIF0KKyMgIwkJCQkJWyBOb3YgMTk5MCBdCisjICMJTi5ULiBoYXZlIG5ldmVyIHV0aWxpc2VkIGFueSBEU1QgZHVlIHRvIHN1Yi10cm9waWNhbC90cm9waWNhbCBsb2NhdGlvbi4KKyMgLi4uCisjIFpvbmUgICAgICAgIEF1c3RyYWxpYS9Ob3J0aCAgICAgICAgIDk6MzAgICAgLSAgICAgICBDU1QKKworIyBGcm9tIEJyYWRsZXkgV2hpdGUgKDE5OTEtMDMtMDQpOgorIyBBIHJlY2VudCBleGNlcnB0IGZyb20gYW4gQXVzdHJhbGlhbiBuZXdzcGFwZXIuLi4KKyMgdGhlIE5vcnRoZXJuIFRlcnJpdG9yeSBkb1tlc10gbm90IGhhdmUgZGF5bGlnaHQgc2F2aW5nLgorCisjIFdlc3Rlcm4gQXVzdHJhbGlhCisKKyMgRnJvbSBHZW9yZ2UgU2hlcGhlcmQgdmlhIFNpbW9uIFdvb2RoZWFkIHZpYSBSb2JlcnQgRWx6ICgxOTkxLTAzLTA2KToKKyMgIyAgVGhlIHN0YXRlIG9mIFdFU1RFUk4gQVVTVFJBTElBLi4gIFsgQ291cnRlc3kgVy5BLiBkZXB0IFByZW1pZXIrQ2FiaW5ldCBdCisjICMJCQkJCQlbIE5vdiAxOTkwIF0KKyMgIwlXLkEuIHN1ZmZlcnMgZnJvbSBhIGdyZWF0IGRlYWwgb2YgcHVibGljIGFuZCBwb2xpdGljYWwgb3Bwb3NpdGlvbiB0bworIyAjCURTVCBpbiBwcmluY2lwbGUuIEEgYmlsbCBpcyBicm91Z2h0IGJlZm9yZSBwYXJsaWFtZW50IGluIG1vc3QgeWVhcnMsIGJ1dAorIyAjCXVzdWFsbHkgZGVmZWF0ZWQgZWl0aGVyIGluIHRoZSB1cHBlciBob3VzZSwgb3IgaW4gcGFydHkgY2F1Y3VzCisjICMJYmVmb3JlIHJlYWNoaW5nIHBhcmxpYW1lbnQuCisjIC4uLgorIyBab25lCUF1c3RyYWxpYS9XZXN0CQk4OjAwCUFXCSVzU1QKKyMgLi4uCisjIFJ1bGUJQVcJMTk3NAlvbmx5CS0JT2N0CWxhc3RTdW4JMjowMAkxOjAwCUQKKyMgUnVsZQlBVwkxOTc1CW9ubHkJLQlNYXIJU3VuPj0xCTM6MDAJMAlXCisjIFJ1bGUJQVcJMTk4Mwlvbmx5CS0JT2N0CWxhc3RTdW4JMjowMAkxOjAwCUQKKyMgUnVsZQlBVwkxOTg0CW9ubHkJLQlNYXIJU3VuPj0xCTM6MDAJMAlXCisKKyMgRnJvbSBCcmFkbGV5IFdoaXRlICgxOTkxLTAzLTA0KToKKyMgQSByZWNlbnQgZXhjZXJwdCBmcm9tIGFuIEF1c3RyYWxpYW4gbmV3c3BhcGVyLi4uCisjIFdlc3Rlcm4gQXVzdHJhbGlhLi4uZG9bZXNdIG5vdCBoYXZlIGRheWxpZ2h0IHNhdmluZy4KKworIyBGcm9tIEpvaG4gRC4gTmV3bWFuIHZpYSBCcmFkbGV5IFdoaXRlICgxOTkxLTExLTAyKToKKyMgV2VzdGVybiBBdXN0cmFsaWEgaXMgc3RpbGwgb24gIndpbnRlciB0aW1lIi4gU29tZSBESCBpbiBTeWRuZXkKKyMgcmFuZyBtZSBhdCBob21lIGEgZmV3IGRheXMgYWdvIGF0IDYuMDBhbS4gKEhlIGhhZCBqdXN0IGFycml2ZWQgYXQKKyMgd29yayBhdCA5LjAwYW0uKQorIyBXLkEuIGlzIHN3aXRjaGluZyB0byBTdW1tZXIgVGltZSBvbiBOb3YgMTd0aCBqdXN0IHRvIGNvbmZ1c2UKKyMgZXZlcnlib2R5IGFnYWluLgorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgxOTkyLTAzLTA4KToKKyMgVGhlIDE5OTIgZW5kaW5nIGRhdGUgdXNlZCBpbiB0aGUgcnVsZXMgaXMgYSBiZXN0IGd1ZXNzOworIyBpdCBtYXRjaGVzIHdoYXQgd2FzIHVzZWQgaW4gdGhlIHBhc3QuCisKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5ib20uZ292LmF1L2ZhcS9mYXFnZW4uaHRtIj4KKyMgVGhlIEF1c3RyYWxpYW4gQnVyZWF1IG9mIE1ldGVvcm9sb2d5IEZBUQorIyA8L2E+ICgxOTk5LTA5LTI3KSB3cml0ZXMgdGhhdCBHaWxlcyBNZXRlb3JvbG9naWNhbCBTdGF0aW9uIHVzZXMKKyMgU291dGggQXVzdHJhbGlhbiB0aW1lIGV2ZW4gdGhvdWdoIGl0J3MgbG9jYXRlZCBpbiBXZXN0ZXJuIEF1c3RyYWxpYS4KKworIyBRdWVlbnNsYW5kCisjIEZyb20gR2VvcmdlIFNoZXBoZXJkIHZpYSBTaW1vbiBXb29kaGVhZCB2aWEgUm9iZXJ0IEVseiAoMTk5MS0wMy0wNik6CisjICMgICBUaGUgc3RhdGUgb2YgUVVFRU5TTEFORC4uIFsgQ291cnRlc3kgUWxkLiBEZXB0IFByZW1pZXIgRWNvbiZUcmFkZSBEZXZlbCBdCisjICMJCQkJCQlbIERlYyAxOTkwIF0KKyMgLi4uCisjIFpvbmUJQXVzdHJhbGlhL1F1ZWVuc2xhbmQJMTA6MDAJQVEJJXNTVAorIyAuLi4KKyMgUnVsZQlBUQkxOTcxCW9ubHkJLQlPY3QJbGFzdFN1bgkyOjAwCTE6MDAJRAorIyBSdWxlCUFRCTE5NzIJb25seQktCUZlYglsYXN0U3VuCTM6MDAJMAlFCisjIFJ1bGUJQVEJMTk4OQltYXgJLQlPY3QJbGFzdFN1bgkyOjAwCTE6MDAJRAorIyBSdWxlCUFRCTE5OTAJbWF4CS0JTWFyCVN1bj49MQkzOjAwCTAJRQorCisjIEZyb20gQnJhZGxleSBXaGl0ZSAoMTk4OS0xMi0yNCk6CisjICJBdXN0cmFsaWEvUXVlZW5zbGFuZCIgbm93IG9ic2VydmVzIGRheWxpZ2h0IHRpbWUgKGkuZS4gZnJvbQorIyBPY3RvYmVyIDE5ODkpLgorCisjIEZyb20gQnJhZGxleSBXaGl0ZSAoMTk5MS0wMy0wNCk6CisjIEEgcmVjZW50IGV4Y2VycHQgZnJvbSBhbiBBdXN0cmFsaWFuIG5ld3NwYXBlci4uLgorIyAuLi5RdWVlbnNsYW5kLi4uW2hhc10gYWdyZWVkIHRvIGVuZCBkYXlsaWdodCBzYXZpbmcKKyMgYXQgM2FtIHRvbW9ycm93IChNYXJjaCAzKS4uLgorCisjIEZyb20gSm9obiBNYWNraW4gKDE5OTEtMDMtMDYpOgorIyBJIGNhbiBjZXJ0YWlubHkgY29uZmlybSBmb3IgbXkgcGFydCB0aGF0IERheWxpZ2h0IFNhdmluZyBpbiBOU1cgZGlkIGluIGZhY3QKKyMgZW5kIG9uIFN1bmRheSwgMyBNYXJjaC4gIEkgZG9uJ3Qga25vdyBhdCB3aGF0IGhvdXIsIHRob3VnaC4gIChJdCBzdXJwcmlzZWQKKyMgbWUuKQorCisjIEZyb20gQnJhZGxleSBXaGl0ZSAoMTk5Mi0wMy0wOCk6CisjIC4uLnRoZXJlIHdhcyByZWNlbnRseSBhIHJlZmVyZW5kdW0gaW4gUXVlZW5zbGFuZCB3aGljaCByZXN1bHRlZAorIyBpbiB0aGUgZXhwZXJpbWVudGFsIGRheWxpZ2h0IHNhdmluZyBzeXN0ZW0gYmVpbmcgYWJhbmRvbmVkLiBTbywgLi4uCisjIC4uLgorIyBSdWxlCVFMRAkxOTg5CTE5OTEJLQlPY3QJbGFzdFN1bgkyOjAwCTE6MDAJRAorIyBSdWxlCVFMRAkxOTkwCTE5OTIJLQlNYXIJU3VuPj0xCTM6MDAJMAlTCisjIC4uLgorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgxOTkyLTAzLTA4KToKKyMgVGhlIGNob3NlbiBydWxlcyB0aGUgdW5pb24gb2YgdGhlIDE5NzEvMTk3MiBjaGFuZ2UgYW5kIHRoZSAxOTg5LTE5OTIgY2hhbmdlcy4KKworIyBGcm9tIENocmlzdG9waGVyIEh1bnQgKDIwMDYtMTEtMjEpLCBhZnRlciBhbiBhZHZhbmNlIHdhcm5pbmcKKyMgZnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDYtMTEtMDEpOgorIyBXQSBhcmUgdHJpYWxpbmcgRFNUIGZvciB0aHJlZSB5ZWFycy4KKyMgPGh0dHA6Ly93d3cucGFybGlhbWVudC53YS5nb3YuYXUvcGFybGlhbWVudC9iaWxscy5uc2YvOUExQjE4MzE0NDQwM0RBNTQ4MjU3MjEyMDAwODhERjEvJEZpbGUvQmlsbDE3NS0xQi5wZGY+CisKKyMgRnJvbSBSaXZlcyBNY0RvdyAoMjAwMi0wNC0wOSk6CisjIFRoZSBtb3N0IGludGVyZXN0aW5nIHJlZ2lvbiBJIGhhdmUgZm91bmQgY29uc2lzdHMgb2YgdGhyZWUgdG93bnMgb24gdGhlCisjIHNvdXRoZXJuIGNvYXN0Li4uLiAgU291dGggQXVzdHJhbGlhIG9ic2VydmVzIGRheWxpZ2h0IHNhdmluZyB0aW1lOyBXZXN0ZXJuCisjIEF1c3RyYWxpYSBkb2VzIG5vdC4gIFRoZSB0d28gc3RhdGVzIGFyZSBvbmUgYW5kIGEgaGFsZiBob3VycyBhcGFydC4gIFRoZQorIyByZXNpZGVudHMgZGVjaWRlZCB0byBmb3JnZXQgYWJvdXQgdGhpcyBub25zZW5zZSBvZiBjaGFuZ2luZyB0aGUgY2xvY2sgc28KKyMgbXVjaCBhbmQgc2V0IHRoZSBsb2NhbCB0aW1lIDIwIGhvdXJzIGFuZCA0NSBtaW51dGVzIGZyb20gdGhlCisjIGludGVybmF0aW9uYWwgZGF0ZSBsaW5lLCBvciByaWdodCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB0aW1lIG9mIFNvdXRoCisjIEF1c3RyYWxpYSBhbmQgV2VzdGVybiBBdXN0cmFsaWEuLi4uCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDItMDQtMDkpOgorIyBUaGlzIGlzIGNvbmZpcm1lZCBieSB0aGUgc2VjdGlvbiBlbnRpdGxlZAorIyAiV2hhdCdzIHRoZSBkZWFsIHdpdGggdGltZSB6b25lcz8/PyIgaW4KKyMgPGh0dHA6Ly93d3cuZWFydGhzY2kudW5pbWVsYi5lZHUuYXUvfmF3YXRraW5zL251bGwuaHRtbD4uCisjCisjIEZyb20gQWxleCBMaXZpbmdzdG9uICgyMDA2LTEyLTA3KToKKyMgLi4uIGl0IHdhcyBqdXN0IG9uIGZvdXIgeWVhcnMgYWdvIHRoYXQgSSBkcm92ZSBhbG9uZyB0aGUgRXlyZSBIaWdod2F5LAorIyB3aGljaCBwYXNzZXMgdGhyb3VnaCBlYXN0ZXJuIFdlc3Rlcm4gQXVzdHJhbGlhIGNsb3NlIHRvIHRoZSBzb3V0aGVybgorIyBjb2FzdCBvZiB0aGUgY29udGluZW50LgorIworIyBJIHBhaWQgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIHRpbWUga2VwdCB0aGVyZS4gVGhlcmUgY2FuIGJlIG5vCisjIGRpc3B1dGUgdGhhdCBVVEMrMDg6NDUgd2FzIGNvbnNpZGVyZWQgInRoZSB0aW1lIiBmcm9tIHRoZSBib3JkZXIKKyMgdmlsbGFnZSBqdXN0IGluc2lkZSB0aGUgYm9yZGVyIHdpdGggU291dGggQXVzdHJhbGlhIHRvIGFzIGZhciB3ZXN0CisjIGFzIGp1c3QgZWFzdCBvZiBDYWlndW5hLiBUaGVyZSBjYW4gYWxzbyBiZSBubyBkaXNwdXRlIHRoYXQgRXVjbGEgaXMKKyMgdGhlIGxhcmdlc3QgcG9wdWxhdGlvbiBjZW50cmUgaW4gdGhpcyB6b25lLi4uLgorIworIyBOb3cgdGhhdCBXZXN0ZXJuIEF1c3RyYWxpYSBpcyBvYnNlcnZpbmcgZGF5bGlnaHQgc2F2aW5nLCB0aGUKKyMgcXVlc3Rpb24gYXJvc2Ugd2hldGhlciB0aGlzIHBhcnQgb2YgdGhlIHN0YXRlIHdvdWxkIGZvbGxvdyBzdWl0LiBJCisjIGp1c3QgY2FsbGVkIHRoZSBib3JkZXIgdmlsbGFnZSBhbmQgY29uZmlybWVkIHRoYXQgaW5kZWVkIHRoZXkgaGF2ZSwKKyMgbWVhbmluZyB0aGF0IHRoZXkgYXJlIG5vdyBvYnNlcnZpbmcgVVRDKzA5OjQ1LgorIworIyAoMjAwNi0xMi0wOSk6CisjIEkgcGVyc29uYWxseSBkb3VidCB0aGF0IGVpdGhlciBleHBlcmltZW50YXRpb24gd2l0aCBkYXlsaWdodCBzYXZpbmcKKyMgaW4gV0Egb3IgaXRzIGludHJvZHVjdGlvbiBpbiBTQSBoYWQgYW55dGhpbmcgdG8gZG8gd2l0aCB0aGUgZ2VuZXNpcworIyBvZiB0aGlzIHRpbWUgem9uZS4gIE15IGh1bmNoIGlzIHRoYXQgaXQncyBiZWVuIGFyb3VuZCBzaW5jZSB3ZWxsCisjIGJlZm9yZSAxOTc1LiAgSSByZW1lbWJlciBzZWVpbmcgaXQgbm90ZWQgb24gcm9hZCBtYXBzIGRlY2FkZXMgYWdvLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMTItMTUpOgorIyBGb3IgbGFjayBvZiBiZXR0ZXIgaW5mbywgYXNzdW1lIHRoZSB0cmFkaXRpb24gZGF0ZXMgYmFjayB0byB0aGUKKyMgaW50cm9kdWN0aW9uIG9mIHN0YW5kYXJkIHRpbWUgaW4gMTg5NS4KKworCisjIHNvdXRoZWFzdCBBdXN0cmFsaWEKKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNy0wNy0yMyk6CisjIFN0YXJ0aW5nIGF1dHVtbiAyMDA4IFZpY3RvcmlhLCBOU1csIFNvdXRoIEF1c3RyYWxpYSwgVGFzbWFuaWEgYW5kIHRoZSBBQ1QKKyMgZW5kIERTVCB0aGUgZmlyc3QgU3VuZGF5IGluIEFwcmlsIGFuZCBzdGFydCBEU1QgdGhlIGZpcnN0IFN1bmRheSBpbiBPY3RvYmVyLgorIyBodHRwOi8vd3d3LnRoZWFnZS5jb20uYXUvbmV3cy9uYXRpb25hbC9kYXlsaWdodC1zYXZpbmdzLXRvLXNwYW4tc2l4LW1vbnRocy8yMDA3LzA2LzI3LzExODI2MjM5NjY3MDMuaHRtbAorCisKKyMgU291dGggQXVzdHJhbGlhCisKKyMgRnJvbSBCcmFkbGV5IFdoaXRlICgxOTkxLTAzLTA0KToKKyMgQSByZWNlbnQgZXhjZXJwdCBmcm9tIGFuIEF1c3RyYWxpYW4gbmV3c3BhcGVyLi4uCisjIC4uLlNvdXRoIEF1c3RyYWxpYS4uLltoYXNdIGFncmVlZCB0byBlbmQgZGF5bGlnaHQgc2F2aW5nCisjIGF0IDNhbSB0b21vcnJvdyAoTWFyY2ggMykuLi4KKworIyBGcm9tIEdlb3JnZSBTaGVwaGVyZCB2aWEgU2ltb24gV29vZGhlYWQgdmlhIFJvYmVydCBFbHogKDE5OTEtMDMtMDYpOgorIyAjICAgVGhlIHN0YXRlIG9mIFNPVVRIIEFVU1RSQUxJQS4uLi5bIENvdXJ0ZXN5IG9mIFMuQS4gRGVwdCBvZiBMYWJvdXIgXQorIyAjCQkJCQkJWyBOb3YgMTk5MCBdCisjIC4uLgorIyBab25lCUF1c3RyYWxpYS9Tb3V0aAkJOTozMAlBUwklc1NUCisjIC4uLgorIyBSdWxlCSBBUwkxOTcxCW1heAktCU9jdAlsYXN0U3VuCTI6MDAJMTowMAlECisjIFJ1bGUJIEFTCTE5NzIJMTk4NQktCU1hcglTdW4+PTEJMzowMAkwCUMKKyMgUnVsZQkgQVMJMTk4NgkxOTkwCS0JTWFyCVN1bj49MTUJMzowMAkwCUMKKyMgUnVsZQkgQVMJMTk5MQltYXgJLQlNYXIJU3VuPj0xCTM6MDAJMAlDCisKKyMgRnJvbSBCcmFkbGV5IFdoaXRlICgxOTkyLTAzLTExKToKKyMgUmVjZW50IGNvcnJlc3BvbmRlbmNlIHdpdGggYSBmcmllbmQgaW4gQWRlbGFpZGUKKyMgY29udGFpbmVkIHRoZSBmb2xsb3dpbmcgZXhjaGFuZ2U6ICAiRHVlIHRvIHRoZSBBZGVsYWlkZSBGZXN0aXZhbCwKKyMgU291dGggQXVzdHJhbGlhIGRlbGF5cyBzZXR0aW5nIGJhY2sgb3VyIGNsb2NrcyBmb3IgYSBmZXcgd2Vla3MuIgorCisjIEZyb20gUm9iZXJ0IEVseiAoMTk5Mi0wMy0xMyk6CisjIEkgaGVhcmQgdGhhdCBhcHBhcmVudGx5IChvciBhdCBsZWFzdCwgaXQgYXBwZWFycyB0aGF0KQorIyBTb3V0aCBBdXMgd2lsbCBoYXZlIGFuIGV4dHJhIDMgd2Vla3MgZGF5bGlnaHQgc2F2aW5nIGV2ZXJ5IGV2ZW4KKyMgbnVtYmVyZWQgeWVhciAoZnJvbSAxOTkwKS4gIFRoYXQncyB3aGVuIHRoZSBBZGVsYWlkZSBGZXN0aXZhbAorIyBpcyBvbi4uLgorCisjIEZyb20gUm9iZXJ0IEVseiAoMTk5Mi0wMy0xNiwgMDA6NTc6MDcgKzEwMDApOgorIyBEU1QgZGlkbid0IGVuZCBpbiBBZGVsYWlkZSB0b2RheSAoeWVzdGVyZGF5KS4uLi4KKyMgQnV0IHdoZXRoZXIgaXQncyAiNHRoIFN1bmRheSIgb3IgIjJuZCBsYXN0IFN1bmRheSIgSSBoYXZlIG5vIGlkZWEgd2hhdGV2ZXIuLi4KKyMgKGl0J3MganVzdCBhcyBsaWtlbHkgdG8gYmUgInRoZSBTdW5kYXkgd2UgcGljayBmb3IgdGhpcyB5ZWFyIi4uLikuCisKKyMgRnJvbSBCcmFkbGV5IFdoaXRlICgxOTk0LTA0LTExKToKKyMgSWYgU3VuLCAxNSBNYXJjaCwgMTk5MiB3YXMgYXQgKzEwMzAgYXMga3JlIGFzc2VydHMsIGJ1dCB5ZXQgU3VuLCAyMCBNYXJjaCwKKyMgMTk5NCB3YXMgYXQgKzA5MzAgYXMgSm9obiBDb25ub2xseSdzIGN1c3RvbWVyIHNlZW1zIHRvIGFzc2VydCwgdGhlbiBJIGNhbgorIyBvbmx5IGNvbmNsdWRlIHRoYXQgdGhlIGFjdHVhbCBydWxlIGlzIG1vcmUgY29tcGxpY2F0ZWQuLi4uCisKKyMgRnJvbSBKb2huIFdhcmJ1cnRvbiAoMTk5NC0xMC0wNyk6CisjIFRoZSBuZXcgRGF5bGlnaHQgU2F2aW5ncyBkYXRlcyBmb3IgU291dGggQXVzdHJhbGlhIC4uLgorIyB3YXMgZ2F6ZXR0ZWQgaW4gdGhlIEdvdmVybm1lbnQgSGFuc2FyZCBvbiBTZXAgMjYgMTk5NC4uLi4KKyMgc3RhcnQgb24gbGFzdCBTdW5kYXkgaW4gT2N0b2JlciBhbmQgZW5kIGluIGxhc3Qgc3VuZGF5IGluIE1hcmNoLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDctMDctMjMpOgorIyBTZWUgInNvdXRoZWFzdCBBdXN0cmFsaWEiIGFib3ZlIGZvciAyMDA4IGFuZCBsYXRlci4KKworIyBUYXNtYW5pYQorCisjIFRoZSBydWxlcyBmb3IgMTk2NyB0aHJvdWdoIDE5OTEgd2VyZSByZXBvcnRlZCBieSBHZW9yZ2UgU2hlcGhlcmQKKyMgdmlhIFNpbW9uIFdvb2RoZWFkIHZpYSBSb2JlcnQgRWx6ICgxOTkxLTAzLTA2KToKKyMgIyAgVGhlIHN0YXRlIG9mIFRBU01BTklBLi4gW0NvdXJ0ZXN5IFRhc21hbmlhbiBEZXB0IG9mIFByZW1pZXIgKyBDYWJpbmV0IF0KKyMgIwkJCQkJWyBOb3YgMTk5MCBdCisKKyMgRnJvbSBCaWxsIEhhcnQgdmlhIEd1eSBIYXJyaXMgKDE5OTEtMTAtMTApOgorIyBPaCB5ZXMsIHRoZSBuZXcgZGF5bGlnaHQgc2F2aW5ncyBydWxlcyBhcmUgdW5pcXVlbHkgdGFzbWFuaWFuLCB3ZSBoYXZlCisjIDYgd2Vla3MgYSB5ZWFyIG5vdyB3aGVuIHdlIGFyZSBvdXQgb2Ygc3luYyB3aXRoIHRoZSByZXN0IG9mIEF1c3RyYWxpYQorIyAoYnV0IG5vdGhpbmcgbmV3IGFib3V0IHRoYXQpLgorCisjIEZyb20gQWxleCBMaXZpbmdzdG9uICgxOTk5LTEwLTA0KToKKyMgSSBoZWFyZCBvbiB0aGUgQUJDIChBdXN0cmFsaWFuIEJyb2FkY2FzdGluZyBDb3Jwb3JhdGlvbikgcmFkaW8gbmV3cyBvbiB0aGUKKyMgKGxvbmcpIHdlZWtlbmQgdGhhdCBUYXNtYW5pYSwgd2hpY2ggdXN1YWxseSBnb2VzIGl0cyBvd24gd2F5IGluIHRoaXMgcmVnYXJkLAorIyBoYXMgZGVjaWRlZCB0byBqb2luIHdpdGggbW9zdCBvZiBOU1csIHRoZSBBQ1QsIGFuZCBtb3N0IG9mIFZpY3RvcmlhCisjIChBdXN0cmFsaWEpIGFuZCBzdGFydCBkYXlsaWdodCBzYXZpbmcgb24gdGhlIGxhc3QgU3VuZGF5IGluIEF1Z3VzdCBpbiAyMDAwCisjIGluc3RlYWQgb2YgdGhlIGZpcnN0IFN1bmRheSBpbiBPY3RvYmVyLgorCisjIFNpbSBBbGFtICgyMDAwLTA3LTAzKSByZXBvcnRlZCBhIGxlZ2FsIGNpdGF0aW9uIGZvciB0aGUgMjAwMC8yMDAxIHJ1bGVzOgorIyBodHRwOi8vd3d3LnRoZWxhdy50YXMuZ292LmF1L2ZyYWd2aWV3LzQyKysxOTY4K0dTM0FARU4rMjAwMDA3MDMwMAorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDctMDctMjMpOgorIyBTZWUgInNvdXRoZWFzdCBBdXN0cmFsaWEiIGFib3ZlIGZvciAyMDA4IGFuZCBsYXRlci4KKworIyBWaWN0b3JpYQorCisjIFRoZSBydWxlcyBmb3IgMTk3MSB0aHJvdWdoIDE5OTEgd2VyZSByZXBvcnRlZCBieSBHZW9yZ2UgU2hlcGhlcmQKKyMgdmlhIFNpbW9uIFdvb2RoZWFkIHZpYSBSb2JlcnQgRWx6ICgxOTkxLTAzLTA2KToKKyMgIyAgIFRoZSBzdGF0ZSBvZiBWSUNUT1JJQS4uIFsgQ291cnRlc3kgb2YgVmljLiBEZXB0IG9mIFByZW1pZXIgKyBDYWJpbmV0IF0KKyMgIwkJCQkJCVsgTm92IDE5OTAgXQorCisjIEZyb20gU2NvdHQgSGFycmluZ3RvbiAoMjAwMS0wOC0yOSk6CisjIE9uIEtRRUQncyAiQ2l0eSBBcnRzIGFuZCBMZWN0dXJlcyIgcHJvZ3JhbSBsYXN0IG5pZ2h0IEkgaGVhcmQgYW4KKyMgaW50ZXJlc3Rpbmcgc3RvcnkgYWJvdXQgZGF5bGlnaHQgc2F2aW5ncyB0aW1lLiAgRHIuIEpvaG4gSGVpbGJyb24gd2FzCisjIGRpc2N1c3NpbmcgaGlzIGJvb2sgIlRoZSBTdW4gaW4gdGhlIENodXJjaDogQ2F0aGVkcmFscyBhcyBTb2xhcgorIyBPYnNlcnZhdG9yaWVzIlsxXSwgYW5kIGluIHBhcnRpY3VsYXIgdGhlIFNocmluZSBvZiBSZW1lbWJyYW5jZVsyXSBsb2NhdGVkCisjIGluIE1lbGJvdXJuZSwgQXVzdHJhbGlhLgorIworIyBBcHBhcmVudGx5IHRoZSBzaHJpbmUncyBtYWluIHB1cnBvc2UgaXMgYSBiZWFtIG9mIHN1bmxpZ2h0IHdoaWNoCisjIGlsbHVtaW5hdGVzIGEgc3BlY2lhbCBzcG90IG9uIHRoZSBmbG9vciBhdCB0aGUgMTF0aCBob3VyIG9mIHRoZSAxMXRoIGRheQorIyBvZiB0aGUgMTF0aCBtb250aCAoUmVtZW1icmFuY2UgRGF5KSBldmVyeSB5ZWFyIGluIG1lbW9yeSBvZiBBdXN0cmFsaWEncworIyBmYWxsZW4gV1dJIHNvbGRpZXJzLiAgQW5kIGlmIHlvdSBnbyB0aGVyZSBvbiBOb3YuIDExLCBhdCAxMWFtIGxvY2FsIHRpbWUsCisjIHlvdSB3aWxsIGluZGVlZCBzZWUgdGhlIHN1bmJlYW0gaWxsdW1pbmF0ZSB0aGUgc3BlY2lhbCBzcG90IGF0IHRoZQorIyBleHBlY3RlZCB0aW1lLgorIworIyBIb3dldmVyLCB0aGF0IGlzIG9ubHkgYmVjYXVzZSBvZiBzb21lIHNwZWNpYWwgbWlycm9yIGNvbnRyYXB0aW9uIHRoYXQgaGFkCisjIHRvIGJlIGVtcGxveWVkLCBzaW5jZSBkdWUgdG8gZGF5bGlnaHQgc2F2aW5ncyB0aW1lLCB0aGUgdHJ1ZSBzb2xhciB0aW1lIG9mCisjIHRoZSByZW1lbWJyYW5jZSBtb21lbnQgb2NjdXJzIG9uZSBob3VyIGxhdGVyIChvciBlYXJsaWVyPykuICBQZXJoYXBzCisjIHNvbWVvbmUgd2l0aCBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMganVyeS1yaWcgY2FuIHRlbGwgdXMgbW9yZS4KKyMKKyMgWzFdIGh0dHA6Ly93d3cuaHVwLmhhcnZhcmQuZWR1L2NhdGFsb2cvSEVJU1VOLmh0bWwKKyMgWzJdIGh0dHA6Ly93d3cuc2hyaW5lLm9yZy5hdQorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDctMDctMjMpOgorIyBTZWUgInNvdXRoZWFzdCBBdXN0cmFsaWEiIGFib3ZlIGZvciAyMDA4IGFuZCBsYXRlci4KKworIyBOZXcgU291dGggV2FsZXMKKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbjoKKyMgTmV3IFNvdXRoIFdhbGVzIGFuZCBzdWJqdXJpc2RpY3Rpb25zIGhhdmUgdGhlaXIgb3duIGlkZWFzIG9mIGEgZnVuIHRpbWUuCisjIEJhc2VkIG9uIGxhdyBsaWJyYXJ5IHJlc2VhcmNoIGJ5IEpvaG4gTWFja2luLAorIyB3aG8gbm90ZXM6CisjCUluIEF1c3RyYWxpYSwgdGltZSBpcyBub3QgbGVnaXNsYXRlZCBmZWRlcmFsbHksIGJ1dCByYXRoZXIgYnkgdGhlCisjCWluZGl2aWR1YWwgc3RhdGVzLiAgVGh1cywgd2hpbGUgc3VjaCB0ZXJtcyBhcyBgYEVhc3Rlcm4gU3RhbmRhcmQgVGltZScnCisjCVtJIG1lYW4sIG9mIGNvdXJzZSwgQXVzdHJhbGlhbiBFU1QsIG5vdCBhbnkgb3RoZXIga2luZF0gYXJlIGluIGNvbW1vbgorIwl1c2UsIF90aGV5IGhhdmUgTk8gUkVBTCBNRUFOSU5HXywgYXMgdGhleSBhcmUgbm90IGRlZmluZWQgaW4gdGhlCisjCWxlZ2lzbGF0aW9uLiAgVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kLgorIwlJIGhhdmUgcmVzZWFyY2hlZCBOZXcgU291dGggV2FsZXMgdGltZSBvbmx5Li4uCisKKyMgRnJvbSBFcmljIFVsZXZpayAoMTk5OS0wNS0yNik6CisjIERTVCB3aWxsIHN0YXJ0IGluIE5TVyBvbiB0aGUgbGFzdCBTdW5kYXkgb2YgQXVndXN0LCByYXRoZXIgdGhhbiB0aGUgdXN1YWwKKyMgT2N0b2JlciBpbiAyMDAwLiAgW1NlZTogTWF0dGhldyBNb29yZSwKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5zbWguY29tLmF1L25ld3MvOTkwNS8yNi9wYWdlb25lL3BhZ2VvbmU0Lmh0bWwiPgorIyBUd28gbW9udGhzIG1vcmUgZGF5bGlnaHQgc2F2aW5nCisjIDwvYT4KKyMgU3lkbmV5IE1vcm5pbmcgSGVyYWxkICgxOTk5LTA1LTI2KS5dCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMTk5OS0wOS0yNyk6CisjIFNlZSB0aGUgZm9sbG93aW5nIG9mZmljaWFsIE5TVyBzb3VyY2U6CisjIDxhIGhyZWY9Imh0dHA6Ly9kaXIuZ2lzLm5zdy5nb3YuYXUvY2dpLWJpbi9nZW5vYmplY3QvZG9jdW1lbnQvb3RoZXIvZGF5bGlnaHRzYXZpbmcvdGlnR21aIj4KKyMgRGF5bGlnaHQgU2F2aW5nIGluIE5ldyBTb3V0aCBXYWxlcy4KKyMgPC9hPgorIworIyBOYXJyYWJyaSBTaGlyZSAoTlNXKSBjb3VuY2lsIGhhcyBhbm5vdW5jZWQgaXQgd2lsbCBpZ25vcmUgdGhlIGV4dGVuc2lvbiBvZgorIyBkYXlsaWdodCBzYXZpbmcgbmV4dCB5ZWFyLiAgU2VlOgorIyA8YSBocmVmPSJodHRwOi8vYWJjLm5ldC5hdS9uZXdzL3JlZ2lvbmFscy9uZXdlbmcvbW9udGhseS9yZWdlbmctMjJqdWwxOTk5LTEuaHRtIj4KKyMgTmFycmFicmkgQ291bmNpbCB0byBpZ25vcmUgZGF5bGlnaHQgc2F2aW5nCisjIDwvYT4gKDE5OTktMDctMjIpLiAgRm9yIG5vdywgd2UnbGwgd2FpdCB0byBzZWUgaWYgdGhpcyByZWFsbHkgaGFwcGVucy4KKyMKKyMgVmljdG9yaWEgd2lsbCBmb2xsb3dpbmcgTlNXLiAgU2VlOgorIyA8YSBocmVmPSJodHRwOi8vYWJjLm5ldC5hdS9sb2NhbC9uZXdzL29seW1waWNzLzE5OTkvMDcvaXRlbTE5OTkwNzI4MTEyMzE0XzEuaHRtIj4KKyMgVmljIHRvIGV4dGVuZCBkYXlsaWdodCBzYXZpbmcKKyMgPC9hPiAoMTk5OS0wNy0yOCkuCisjCisjIEhvd2V2ZXIsIFNvdXRoIEF1c3RyYWxpYSByZWplY3RlZCB0aGUgRFNUIHJlcXVlc3QuICBTZWU6CisjIDxhIGhyZWY9Imh0dHA6Ly9hYmMubmV0LmF1L25ld3Mvb2x5bXBpY3MvMTk5OS8wNy9pdGVtMTk5OTA3MTkxNTE3NTRfMS5odG0iPgorIyBTb3V0aCBBdXN0cmFsaWEgcmVqZWN0cyBPbHltcGljcyBkYXlsaWdodCBzYXZpbmdzIHJlcXVlc3QKKyMgPC9hPiAoMTk5OS0wNy0xOSkuCisjCisjIFF1ZWVuc2xhbmQgYWxzbyB3aWxsIG5vdCBvYnNlcnZlIERTVCBmb3IgdGhlIE9seW1waWNzLiAgU2VlOgorIyA8YSBocmVmPSJodHRwOi8vYWJjLm5ldC5hdS9uZXdzL29seW1waWNzLzE5OTkvMDYvaXRlbTE5OTkwNjAxMTE0NjA4XzEuaHRtIj4KKyMgUWxkIHNheXMgbm8gdG8gZGF5bGlnaHQgc2F2aW5ncyBmb3IgT2x5bXBpY3MKKyMgPC9hPiAoMTk5OS0wNi0wMSksIHdoaWNoIHF1b3RlcyBRdWVlbnNsYW5kIFByZW1pZXIgUGV0ZXIgQmVhdHRpZSBhcyBzYXlpbmcKKyMgYGBMb29rIHlvdSd2ZSBnb3QgdG8gcmVtZW1iZXIgaW4gbXkgZmFtaWx5IHdoZW4gdGhpcyBjYW1lIHVwIGxhc3QgdGltZQorIyBJIHZvdGVkIGZvciBpdCwgbXkgd2lmZSB2b3RlZCBhZ2FpbnN0IGl0IGFuZCBzaGUgc2FpZCB0byBtZSBpdCdzIGFsbCB2ZXJ5CisjIHdlbGwgZm9yIHlvdSwgeW91IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZ2V0dGluZyB0aGUgY2hpbGRyZW4gb3V0IG9mCisjIGJlZCwgZ2V0dGluZyB0aGVtIHRvIHNjaG9vbCwgZ2V0dGluZyB0aGVtIHRvIHNsZWVwIGF0IG5pZ2h0LgorIyBJJ3ZlIGJlZW4gdGhyb3VnaCBhbGwgdGhpcyBhcmd1bWVudCBkb21lc3RpY2FsbHkuLi5teSB3aWZlIHJ1bGVzLicnCisjCisjIEJyb2tlbiBIaWxsIHdpbGwgc3RpY2sgd2l0aCBTb3V0aCBBdXN0cmFsaWFuIHRpbWUgaW4gMjAwMC4gIFNlZToKKyMgPGEgaHJlZj0iaHR0cDovL2FiYy5uZXQuYXUvbmV3cy9yZWdpb25hbHMvYnJva2VuaC9tb250aGx5L3JlZ2Jyb2stMjFqdWwxOTk5LTYuaHRtIj4KKyMgQnJva2VuIEhpbGwgdG8gYmUgYmVoaW5kIHRoZSB0aW1lcworIyA8L2E+ICgxOTk5LTA3LTIxKS4KKworIyBJQVRBIFNTSU0gKDE5OTgtMDkpIHNheXMgdGhhdCB0aGUgc3ByaW5nIDIwMDAgY2hhbmdlIGZvciBBdXN0cmFsaWFuCisjIENhcGl0YWwgVGVycml0b3J5LCBOZXcgU291dGggV2FsZXMgZXhjZXB0IExvcmQgSG93ZSBJc2xhbmQgYW5kIEJyb2tlbgorIyBIaWxsLCBhbmQgVmljdG9yaWEgd2lsbCBiZSBBdWd1c3QgMjcsIHByZXN1bWFibHkgZHVlIHRvIHRoZSBTeWRuZXkgT2x5bXBpY3MuCisKKyMgRnJvbSBFcmljIFVsZXZpaywgcmVmZXJyaW5nIHRvIFN5ZG5leSdzIFN1biBIZXJhbGQgKDIwMDAtMDgtMTMpLCBwYWdlIDI5OgorIyBUaGUgUXVlZW5zbGFuZCBQcmVtaWVyIFBldGVyIEJlYXR0aWUgaXMgZW5jb3VyYWdpbmcgbm9ydGhlcm4gTlNXCisjIHRvd25zIHRvIHVzZSBRdWVlbnNsYW5kIHRpbWUuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNy0wNy0yMyk6CisjIFNlZSAic291dGhlYXN0IEF1c3RyYWxpYSIgYWJvdmUgZm9yIDIwMDggYW5kIGxhdGVyLgorCisjIFlhbmNvd2lubmEKKworIyBGcm9tIEpvaG4gTWFja2luICgxOTg5LTAxLTA0KToKKyMgYEJyb2tlbiBIaWxsJyBtZWFucyB0aGUgQ291bnR5IG9mIFlhbmNvd2lubmEuCisKKyMgRnJvbSBHZW9yZ2UgU2hlcGhlcmQgdmlhIFNpbW9uIFdvb2RoZWFkIHZpYSBSb2JlcnQgRWx6ICgxOTkxLTAzLTA2KToKKyMgIyBZQU5DT1dJTk5BLi4gIFsgQ29uZmlybWF0aW9uIGNvdXJ0ZXN5IG9mIEJyb2tlbiBIaWxsIFBvc3RtYXN0ZXIgXQorIyAjCQkJCQlbIERlYyAxOTkwIF0KKyMgLi4uCisjICMgWWFuY293aW5uYSB1c2VzIENlbnRyYWwgU3RhbmRhcmQgVGltZSwgZGVzcGl0ZSBbaXRzXSBsb2NhdGlvbiBvbiB0aGUKKyMgIyBOZXcgU291dGggV2FsZXMgc2lkZSBvZiB0aGUgUy5BLiBib3JkZXIuIE1vc3QgYnVzaW5lc3MgYW5kIHNvY2lhbCBkZWFsaW5ncworIyAjIGFyZSB3aXRoIENTVCB6b25lcywgdGhlcmVmb3JlIENTVCBpcyBsZWdpc2xhdGVkIGJ5IGxvY2FsIGdvdmVybm1lbnQKKyMgIyBhbHRob3VnaCB0aGUgc3dpdGNoIHRvIFN1bW1lciBUaW1lIG9jY3VycyBpbiBsaW5lIHdpdGggTi5TLlcuIFRoZXJlIGhhdmUKKyMgIyBiZWVuIHllYXJzIHdoZW4gdGhpcyBkaWQgbm90IGFwcGx5LCBidXQgdGhlIGhpc3RvcmljYWwgZGF0YSBpcyBub3QKKyMgIyBwcmVzZW50bHkgYXZhaWxhYmxlLgorIyBab25lCUF1c3RyYWxpYS9ZYW5jb3dpbm5hCTk6MzAJIEFZCSVzU1QKKyMgLi4uCisjIFJ1bGUJIEFZCTE5NzEJMTk4NQktCU9jdAlsYXN0U3VuCTI6MDAJMTowMAlECisjIFJ1bGUJIEFZCTE5NzIJb25seQktCUZlYglsYXN0U3VuCTM6MDAJMAlDCisjIFtmb2xsb3dlZCBieSBvdGhlciBSdWxlc10KKworIyBMb3JkIEhvd2UgSXNsYW5kCisKKyMgRnJvbSBHZW9yZ2UgU2hlcGhlcmQgdmlhIFNpbW9uIFdvb2RoZWFkIHZpYSBSb2JlcnQgRWx6ICgxOTkxLTAzLTA2KToKKyMgTEhJLi4uCQlbIENvdXJ0ZXN5IG9mIFBhdWxpbmUgVmFuIFdpbnNlbiBdCisjCQkJCQlbIERlYyAxOTkwIF0KKyMgTG9yZCBIb3dlIElzbGFuZCBpcyBsb2NhdGVkIG9mZiB0aGUgTmV3IFNvdXRoIFdhbGVzIGNvYXN0LCBhbmQgaXMgaGFsZiBhbgorIyBob3VyIGFoZWFkIG9mIE5TVyB0aW1lLgorCisjIEZyb20gSmFtZXMgTG9uZXJnYW4sIFNlY3JldGFyeSwgTG9yZCBIb3dlIElzbGFuZCBCb2FyZCAoMjAwMC0wMS0yNyk6CisjIExvcmQgSG93ZSBJc2xhbmQgc3VtbWVyIHRpbWUgaW4gMjAwMC8yMDAxIHdpbGwgY29tbWVuY2Ugb24gdGhlIHNhbWUKKyMgZGF0ZSBhcyB0aGUgcmVzdCBvZiBOU1cgKGkuZS4gMjAwMC0wOC0yNykuICBGb3IgeW91ciBpbmZvcm1hdGlvbiB0aGUKKyMgTG9yZCBIb3dlIElzbGFuZCBCb2FyZCAoY29udHJvbGxpbmcgYXV0aG9yaXR5IGZvciB0aGUgSXNsYW5kKSBpcworIyBzZWVraW5nIHRoZSBjb21tdW5pdHkncyB2aWV3cyBvbiB2YXJpb3VzIG9wdGlvbnMgZm9yIHN1bW1lciB0aW1lCisjIGFycmFuZ2VtZW50cyBvbiB0aGUgSXNsYW5kLCBlLmcuIGFkdmFuY2UgY2xvY2tzIGJ5IDEgZnVsbCBob3VyCisjIGluc3RlYWQgb2Ygb25seSAzMCBtaW51dGVzLiAgRGVwZW5kYW50IG9uIHRoZSB3aXNoZXMgb2YgcmVzaWRlbnRzCisjIHRoZSBCb2FyZCBtYXkgYXBwcm9hY2ggdGhlIE5TVyBnb3Zlcm5tZW50IHRvIGNoYW5nZSB0aGUgZXhpc3RpbmcKKyMgYXJyYW5nZW1lbnRzLiAgVGhlIHN0YXJ0aW5nIGRhdGUgZm9yIHN1bW1lciB0aW1lIG9uIHRoZSBJc2xhbmQgd2lsbAorIyBob3dldmVyIGFsd2F5cyBjb2luY2lkZSB3aXRoIHRoZSByZXN0IG9mIE5TVy4KKworIyBGcm9tIEphbWVzIExvbmVyZ2FuLCBTZWNyZXRhcnksIExvcmQgSG93ZSBJc2xhbmQgQm9hcmQgKDIwMDAtMTAtMjUpOgorIyBMb3JkIEhvd2UgSXNsYW5kIGFkdmFuY2VzIGNsb2NrcyBieSAzMCBtaW51dGVzIGR1cmluZyBEU1QgaW4gTlNXIGFuZCByZXRhcmRzCisjIGNsb2NrcyBieSAzMCBtaW51dGVzIHdoZW4gRFNUIGZpbmlzaGVzLiBTaW5jZSBEU1Qgd2FzIG1vc3QgcmVjZW50bHkKKyMgaW50cm9kdWNlZCBpbiBOU1csIHRoZSAiY2hhbmdlb3ZlciIgdGltZSBvbiB0aGUgSXNsYW5kIGhhcyBiZWVuIDAyOjAwIGFzCisjIHNob3duIG9uIGNsb2NrcyBvbiBMSEkuIEkgZ3Vlc3MgdGhpcyBtZWFucyB0aGF0IGZvciAzMCBtaW51dGVzIGF0IHRoZSBzdGFydAorIyBvZiBEU1QsIExISSBpcyBhY3R1YWxseSAxIGhvdXIgYWhlYWQgb2YgdGhlIHJlc3Qgb2YgTlNXLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgorIyBGb3IgTG9yZCBIb3dlIGRhdGVzIHdlIHVzZSBTaGFua3MgJiBQb3R0ZW5nZXIgdGhyb3VnaCAxOTg5LCBhbmQKKyMgTG9uZXJnYW4gdGhlcmVhZnRlci4gIEZvciB0aW1lcyB3ZSB1c2UgTG9uZXJnYW4uCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNy0wNy0yMyk6CisjIFNlZSAic291dGhlYXN0IEF1c3RyYWxpYSIgYWJvdmUgZm9yIDIwMDggYW5kIGxhdGVyLgorCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA5LTA0LTI4KToKKyMgQWNjb3JkaW5nIHRvIHRoZSBvZmZpY2lhbCBwcmVzcyByZWxlYXNlLCBTb3V0aCBBdXN0cmFsaWEncyBleHRlbmRlZCBkYXlsaWdodCAKKyMgc2F2aW5nIHBlcmlvZCB3aWxsIGNvbnRpbnVlIHdpdGggdGhlIHNhbWUgcnVsZXMgYXMgdXNlZCBkdXJpbmcgdGhlIDIwMDgtMjAwOSAKKyMgc3VtbWVyIChzb3V0aGVybiBoZW1pc3BoZXJlKS4KKyMgCisjIEZyb20KKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5zYWZld29yay5zYS5nb3YuYXUvdXBsb2FkZWRfZmlsZXMvRGF5bGlnaHREYXRlc1NldC5wZGYiPgorIyBodHRwOi8vd3d3LnNhZmV3b3JrLnNhLmdvdi5hdS91cGxvYWRlZF9maWxlcy9EYXlsaWdodERhdGVzU2V0LnBkZgorIyA8L2E+CisjIFRoZSBleHRlbmRlZCBkYXlsaWdodCBzYXZpbmcgcGVyaW9kIHRoYXQgU291dGggQXVzdHJhbGlhIGhhcyBiZWVuIHRyaWFsbGluZyAKKyMgZm9yIG92ZXIgdGhlIGxhc3QgeWVhciBpcyBub3cgc2V0IHRvIGJlIG9uZ29pbmcuCisjIERheWxpZ2h0IHNhdmluZyB3aWxsIGNvbnRpbnVlIHRvIHN0YXJ0IG9uIHRoZSBmaXJzdCBTdW5kYXkgaW4gT2N0b2JlciBlYWNoIAorIyB5ZWFyIGFuZCBmaW5pc2ggb24gdGhlIGZpcnN0IFN1bmRheSBpbiBBcHJpbCB0aGUgZm9sbG93aW5nIHllYXIuCisjIEluZHVzdHJpYWwgUmVsYXRpb25zIE1pbmlzdGVyLCBQYXVsIENhaWNhLCBzYXlzIHRoaXMgcHJvdmlkZXMgU291dGggQXVzdHJhbGlhIAorIyB3aXRoIGEgY29uc2lzdGVudCBoYWxmIGhvdXIgdGltZSBkaWZmZXJlbmNlIHdpdGggTlNXLCBWaWN0b3JpYSwgVGFzbWFuaWEgYW5kIAorIyB0aGUgQUNUIGZvciBhbGwgNTIgd2Vla3Mgb2YgdGhlIHllYXIuLi4KKyMgCisjIFdlIGhhdmUgYSB3cmFwLXVwIGhlcmU6CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL25ld3MvdGltZS9zb3V0aC1hdXN0cmFsaWEtZXh0ZW5kcy1kc3QuaHRtbCI+CisjIGh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL25ld3MvdGltZS9zb3V0aC1hdXN0cmFsaWEtZXh0ZW5kcy1kc3QuaHRtbAorIyA8L2E+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgTmV3IFplYWxhbmQKKworIyBGcm9tIE1hcmsgRGF2aWVzICgxOTkwLTEwLTAzKToKKyMgdGhlIDE5ODkvOTAgeWVhciB3YXMgYSB0cmlhbCBvZiBhbiBleHRlbmRlZCAiZGF5bGlnaHQgc2F2aW5nIiBwZXJpb2QuCisjIFRoaXMgdHJpYWwgd2FzIGRlZW1lZCBzdWNjZXNzZnVsIGFuZCB0aGUgZXh0ZW5kZWQgcGVyaW9kIGFkb3B0ZWQgZm9yCisjIHN1YnNlcXVlbnQgeWVhcnMgKHdpdGggdGhlIGFkZGl0aW9uIG9mIGEgZnVydGhlciB3ZWVrIGF0IHRoZSBzdGFydCkuCisjIHNvdXJjZSAtLSBwaG9uZSBjYWxsIHRvIE1pbmlzdHJ5IG9mIEludGVybmFsIEFmZmFpcnMgSGVhZCBPZmZpY2UuCisKKyMgRnJvbSBHZW9yZ2UgU2hlcGhlcmQgdmlhIFNpbW9uIFdvb2RoZWFkIHZpYSBSb2JlcnQgRWx6ICgxOTkxLTAzLTA2KToKKyMgIyBUaGUgQ291bnRyeSBvZiBOZXcgWmVhbGFuZCAgIChBdXN0cmFsaWEncyBlYXN0IGlzbGFuZCAtKSBHZWUgdGhleSBoYXRlIHRoYXQhCisjICMJCQkJICAgb3IgaXMgQXVzdHJhbGlhIHRoZSB3ZXN0IGlzbGFuZCBvZiBOLlouCisjICMJWyBjb3VydGVzeSBvZiBHZW9mZiBUcmliYmxlLi4gQXVja2xhbmQgTi5aLiBdCisjICMJCQkJWyBOb3YgMTk5MCBdCisjIC4uLgorIyBSdWxlCU5aICAgICAgMTk3NCAgICAxOTg4CS0JT2N0CWxhc3RTdW4JMjowMAkxOjAwCUQKKyMgUnVsZQlOWgkxOTg5CW1heAktCU9jdAlTdW4+PTEJMjowMAkxOjAwCUQKKyMgUnVsZQlOWiAgICAgIDE5NzUgICAgMTk4OQktCU1hcglTdW4+PTEJMzowMAkwCVMKKyMgUnVsZQlOWgkxOTkwCW1heAktCU1hcglsYXN0U3VuCTM6MDAJMAlTCisjIC4uLgorIyBab25lCU5aCQkJMTI6MDAJTloJCU5aJXNUCSMgTmV3IFplYWxhbmQKKyMgWm9uZQlOWi1DSEFUCQkJMTI6NDUJLQkJTlotQ0hBVCAjIENoYXRoYW0gSXNsYW5kCisKKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDE5OTItMDMtMDgpOgorIyBUaGUgY2hvc2VuIHJ1bGVzIHVzZSB0aGUgRGF2aWVzIE9jdG9iZXIgOCB2YWx1ZXMgZm9yIHRoZSBzdGFydCBvZiBEU1QgaW4gMTk4OQorIyByYXRoZXIgdGhhbiB0aGUgT2N0b2JlciAxIHZhbHVlLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTUtMTItMTkpOworIyBTaGFuayAmIFBvdHRlbmdlciByZXBvcnQgMjowMCBmb3IgYWxsIGF1dHVtbiBjaGFuZ2VzIGluIEF1c3RyYWxpYSBhbmQgTlouCisjIFJvYmVydCBVemdhbGlzIHdyaXRlcyB0aGF0IHRoZSBOZXcgWmVhbGFuZCBEYXlsaWdodAorIyBTYXZpbmdzIFRpbWUgT3JkZXIgaW4gQ291bmNpbCBkYXRlZCAxOTkwLTA2LTE4IHNwZWNpZmllcyAyOjAwIHN0YW5kYXJkCisjIHRpbWUgb24gYm90aCB0aGUgZmlyc3QgU3VuZGF5IGluIE9jdG9iZXIgYW5kIHRoZSB0aGlyZCBTdW5kYXkgaW4gTWFyY2guCisjIEFzIHdpdGggQXVzdHJhbGlhLCB3ZSdsbCBhc3N1bWUgdGhlIHRyYWRpdGlvbiBpcyAyOjAwcywgbm90IDI6MDAuCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgorIyBUaGUgRGVwYXJ0bWVudCBvZiBJbnRlcm5hbCBBZmZhaXJzIChESUEpIG1haW50YWlucyBhIGJyaWVmIGhpc3RvcnksCisjIGFzIGRvZXMgQ2Fyb2wgU3F1aXJlczsgc2VlIHR6LWxpbmsuaHRtIGZvciB0aGUgZnVsbCByZWZlcmVuY2VzLgorIyBVc2UgdGhlc2Ugc291cmNlcyBpbiBwcmVmZXJlbmNlIHRvIFNoYW5rcyAmIFBvdHRlbmdlci4KKyMKKyMgRm9yIENoYXRoYW0sIElBVEEgU1NJTSAoMTk5MS8xOTk5KSBnaXZlcyB0aGUgTlogcnVsZXMgYnV0IHdpdGgKKyMgdHJhbnNpdGlvbnMgYXQgMjo0NSBsb2NhbCBzdGFuZGFyZCB0aW1lOyB0aGlzIGNvbmZpcm1zIHRoYXQgQ2hhdGhhbQorIyBpcyBhbHdheXMgZXhhY3RseSA0NSBtaW51dGVzIGFoZWFkIG9mIEF1Y2tsYW5kLgorCisjIEZyb20gQ29saW4gU2hhcnBsZXMgKDIwMDctMDQtMzApOgorIyBEU1Qgd2lsbCBub3cgc3RhcnQgb24gdGhlIGxhc3QgU3VuZGF5IGluIFNlcHRlbWJlciwgYW5kIGVuZCBvbiB0aGUKKyMgZmlyc3QgU3VuZGF5IGluIEFwcmlsLiAgVGhlIGNoYW5nZXMgdGFrZSBlZmZlY3QgdGhpcyB5ZWFyLCBtZWFuaW5nCisjIHRoYXQgRFNUIHdpbGwgYmVnaW4gb24gMjAwNy0wOS0zMCAyMDA4LTA0LTA2LgorIyBodHRwOi8vd3d3LmRpYS5nb3Z0Lm56L2RpYXdlYnNpdGUubnNmL3dwZ19VUkwvU2VydmljZXMtRGF5bGlnaHQtU2F2aW5nLURheWxpZ2h0LXNhdmluZy10by1iZS1leHRlbmRlZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyBGaWppCisKKyMgSG93c2Ugd3JpdGVzIChwIDE1MykgdGhhdCBpbiAxODc5IHRoZSBCcml0aXNoIGdvdmVybm9yIG9mIEZpamkKKyMgZW5hY3RlZCBhbiBvcmRpbmFuY2Ugc3RhbmRhcmRpemluZyB0aGUgaXNsYW5kcyBvbiBBbnRpcG9kZWFuIFRpbWUKKyMgaW5zdGVhZCBvZiB0aGUgQW1lcmljYW4gc3lzdGVtICh3aGljaCB3YXMgb25lIGRheSBiZWhpbmQpLgorCisjIEZyb20gUml2ZXMgTWNEb3cgKDE5OTgtMTAtMDgpOgorIyBGaWppIHdpbGwgaW50cm9kdWNlIERTVCBlZmZlY3RpdmUgMDIwMCBsb2NhbCB0aW1lLCAxOTk4LTExLTAxCisjIHVudGlsIDAzMDAgbG9jYWwgdGltZSAxOTk5LTAyLTI4LiAgRWFjaCB5ZWFyIHRoZSBEU1QgcGVyaW9kIHdpbGwKKyMgYmUgZnJvbSB0aGUgZmlyc3QgU3VuZGF5IGluIE5vdmVtYmVyIHVudGlsIHRoZSBsYXN0IFN1bmRheSBpbiBGZWJydWFyeS4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDAwLTAxLTA4KToKKyMgSUFUQSBTU0lNICgxOTk5LTA5KSBzYXlzIERTVCBlbmRzIDAxMDAgbG9jYWwgdGltZS4gIEdvIHdpdGggTWNEb3cuCisKKyMgRnJvbSB0aGUgQkJDIFdvcmxkIFNlcnZpY2UgKDE5OTgtMTAtMzEgMTE6MzIgVVRDKToKKyMgVGhlIEZpamlpYW4gZ292ZXJubWVudCBzYXlzIHRoZSBtYWluIHJlYXNvbnMgZm9yIHRoZSB0aW1lIGNoYW5nZSBpcyB0bworIyBpbXByb3ZlIHByb2R1Y3Rpdml0eSBhbmQgcmVkdWNlIHJvYWQgYWNjaWRlbnRzLiAgQnV0IGNvcnJlc3BvbmRlbnRzIHNheSBpdAorIyBhbHNvIGhvcGVzIHRoZSBtb3ZlIHdpbGwgYm9vc3QgRmlqaSdzIGFiaWxpdHkgdG8gY29tcGV0ZSB3aXRoIG90aGVyIHBhY2lmaWMKKyMgaXNsYW5kcyBpbiB0aGUgZWZmb3J0IHRvIGF0dHJhY3QgdG91cmlzdHMgdG8gd2l0bmVzcyB0aGUgZGF3bmluZyBvZiB0aGUgbmV3CisjIG1pbGxlbml1bS4KKworIyBodHRwOi8vd3d3LmZpamkuZ292LmZqL3ByZXNzLzIwMDBfMDkvMjAwMF8wOV8xMy0wNS5zaHRtbCAoMjAwMC0wOS0xMykKKyMgcmVwb3J0cyB0aGF0IEZpamkgaGFzIGRpc2NvbnRpbnVlZCBEU1QuCisKKyMgSm9obnN0b24KKworIyBKb2huc3RvbiBkYXRhIGlzIGZyb20gdXNubzE5OTUuCisKKworIyBLaXJpYmF0aQorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTYtMDEtMjIpOgorIyBUb2RheSdzIF9XYWxsIFN0cmVldCBKb3VybmFsXyAocGFnZSAxKSByZXBvcnRzIHRoYXQgS2lyaWJhdGkKKyMgYGBkZWNsYXJlZCBpdCB0aGUgc2FtZSBkYXkgdGhyb3VnaHQgdGhlIGNvdW50cnkgYXMgb2YgSmFuLiAxLCAxOTk1JycKKyMgYXMgcGFydCBvZiB0aGUgY29tcGV0aXRpb24gdG8gYmUgZmlyc3QgaW50byB0aGUgMjFzdCBjZW50dXJ5LgorCisKKyMgS3dhamFsZWluCisKKyMgSW4gY29tcC5yaXNrcyAxNC44NyAoMjYgQXVndXN0IDE5OTMpLCBQZXRlciBOZXVtYW5uIHdyaXRlczoKKyMgSSB3b25kZXIgd2hhdCBoYXBwZW5lZCBpbiBLd2FqYWxlaW4sIHdoZXJlIHRoZXJlIHdhcyBOTyBGcmlkYXksCisjIDE5OTMtMDgtMjAuICBUaHVyc2RheSBuaWdodCBhdCBtaWRuaWdodCBLd2FqYWxlaW4gc3dpdGNoZWQgc2lkZXMgd2l0aAorIyByZXNwZWN0IHRvIHRoZSBJbnRlcm5hdGlvbmFsIERhdGUgTGluZSwgdG8gcmVqb2luIGl0cyBmZWxsb3cgaXNsYW5kcywKKyMgZ29pbmcgZnJvbSAxMTo1OSBwLm0uIFRodXJzZGF5IHRvIDEyOjAwIG0uIFNhdHVyZGF5IGluIGEgYmxpbmsuCisKKworIyBOIE1hcmlhbmEgSXMsIEd1YW0KKworIyBIb3dzZSB3cml0ZXMgKHAgMTUzKSBgYFRoZSBTcGFuaWFyZHMsIG9uIHRoZSBvdGhlciBoYW5kLCByZWFjaGVkIHRoZQorIyBQaGlsaXBwaW5lcyBhbmQgdGhlIExhZHJvbmVzIGZyb20gQW1lcmljYSwnJyBhbmQgaW1wbGllcyB0aGF0IHRoZSBMYWRyb25lcworIyAobm93IGNhbGxlZCB0aGUgTWFyaWFuYXMpIGtlcHQgQW1lcmljYW4gZGF0ZSBmb3IgcXVpdGUgc29tZSB0aW1lLgorIyBGb3Igbm93LCB3ZSBhc3N1bWUgdGhlIExhZHJvbmVzIHN3aXRjaGVkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIFBoaWxpcHBpbmVzOworIyBzZWUgQXNpYS9NYW5pbGEuCisKKyMgVVMgUHVibGljIExhdyAxMDYtNTY0ICgyMDAwLTEyLTIzKSBtYWRlIFVUQysxMCB0aGUgb2ZmaWNpYWwgc3RhbmRhcmQgdGltZSwKKyMgdW5kZXIgdGhlIG5hbWUgIkNoYW1vcnJvIFN0YW5kYXJkIFRpbWUiLiAgVGhlcmUgaXMgbm8gb2ZmaWNpYWwgYWJicmV2aWF0aW9uLAorIyBidXQgQ29uZ3Jlc3NtYW4gUm9iZXJ0IEEuIFVuZGVyd29vZCwgYXV0aG9yIG9mIHRoZSBiaWxsIHRoYXQgYmVjYW1lIGxhdywKKyMgd3JvdGUgaW4gYSBwcmVzcyByZWxlYXNlICgyMDAwLTEyLTI3KSB0aGF0IGhlIHdpbGwgc2VlayB0aGUgdXNlIG9mICJDaFNUIi4KKworCisjIE1pY3JvbmVzaWEKKworIyBBbGFuIEV1Z2VuZSBEYXZpcyB3cml0ZXMgKDE5OTYtMDMtMTYpLAorIyBgYEkgYW0gY2VydGFpbiwgaGF2aW5nIGxpdmVkIHRoZXJlIGZvciB0aGUgcGFzdCBkZWNhZGUsIHRoYXQgIlRydWsiCisjIChub3cgcHJvcGVybHkga25vd24gYXMgQ2h1dWspIC4uLiBpcyBpbiB0aGUgdGltZSB6b25lIEdNVCsxMC4nJworIworIyBTaGFua3MgJiBQb3R0ZW5nZXIgd3JpdGUgdGhhdCBUcnVrIHN3aXRjaGVkIGZyb20gVVRDKzEwIHRvIFVUQysxMQorIyBvbiAxOTc4LTEwLTAxOyBpZ25vcmUgdGhpcyBmb3Igbm93LgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTktMTAtMjkpOgorIyBUaGUgRmVkZXJhdGVkIFN0YXRlcyBvZiBNaWNyb25lc2lhIFZpc2l0b3JzIEJvYXJkIHdyaXRlcyBpbgorIyA8YSBocmVmPSJodHRwOi8vd3d3LmZzbWdvdi5vcmcvaW5mby9jbG9ja3MuaHRtbCI+CisjIFRoZSBGZWRlcmF0ZWQgU3RhdGVzIG9mIE1pY3JvbmVzaWEgLSBWaXNpdG9yIEluZm9ybWF0aW9uCisjIDwvYT4gKDE5OTktMDEtMjYpCisjIHRoYXQgVHJ1ayBhbmQgWWFwIGFyZSBVVEMrMTAsIGFuZCBQb25hcGUgYW5kIEtvc3JhZSBhcmUgVVRDKzExLgorIyBXZSBkb24ndCBrbm93IHdoZW4gS29zcmFlIHN3aXRjaGVkIGZyb20gVVRDKzEyOyBhc3N1bWUgSmFudWFyeSAxIGZvciBub3cuCisKKworIyBNaWR3YXkKKworIyBGcm9tIENoYXJsZXMgVCBPJ0Nvbm5vciwgS01USCBESiAoMTk1NiksCisjIHF1b3RlZCBpbiB0aGUgS1RNSCBzZWN0aW9uIG9mIHRoZSBSYWRpbyBIZXJpdGFnZSBDb2xsZWN0aW9uCisjIDxodHRwOi8vcmFkaW9keC5jb20vc3BkeHIvS01USC5odG0+ICgyMDAyLTEyLTMxKToKKyMgRm9yIHRoZSBwYXN0IHR3byBtb250aHMgd2UndmUgYmVlbiBvbiB3aGF0IGlzIGtub3duIGFzIERheWxpZ2h0CisjIFNhdmluZyBUaW1lLiAgVGhpcyB0aW1lIGhhcyBwdXQgdXMgb24gYWlyIGF0IDVhbSBpbiB0aGUgbW9ybmluZywKKyMgeW91ciB0aW1lIGRvd24gdGhlcmUgaW4gTmV3IFplYWxhbmQuICBTdGFydGluZyBTZXB0ZW1iZXIgMiwgMTk1NgorIyB3ZSdsbCBhZ2FpbiBnbyBiYWNrIHRvIFN0YW5kYXJkIFRpbWUuICBUaGlzJ2xsIG1lYW4gdGhhdCB3ZSdsbCBnbyB0bworIyBhaXIgYXQgNmFtIHlvdXIgdGltZS4KKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMy0wMy0yMyk6CisjIFdlIGRvbid0IGtub3cgdGhlIGRhdGUgb2YgdGhhdCBxdW90ZSwgYnV0IHdlJ2xsIGd1ZXNzIHRoZXkKKyMgc3RhcnRlZCBEU1Qgb24gSnVuZSAzLiAgUG9zc2libHkgRFNUIHdhcyBvYnNlcnZlZCBvdGhlciB5ZWFycworIyBpbiBNaWR3YXksIGJ1dCB3ZSBoYXZlIG5vIHJlY29yZCBvZiBpdC4KKworCisjIFBpdGNhaXJuCisKKyMgRnJvbSBSaXZlcyBNY0RvdyAoMTk5OS0xMS0wOCk6CisjIEEgUHJvY2xhbWF0aW9uIHdhcyBzaWduZWQgYnkgdGhlIEdvdmVybm9yIG9mIFBpdGNhaXJuIG9uIHRoZSAyN3RoIE1hcmNoIDE5OTgKKyMgd2l0aCByZWdhcmQgdG8gUGl0Y2Fpcm4gU3RhbmRhcmQgVGltZS4gIFRoZSBQcm9jbGFtYXRpb24gaXMgYXMgZm9sbG93cy4KKyMKKyMJVGhlIGxvY2FsIHRpbWUgZm9yIGdlbmVyYWwgcHVycG9zZXMgaW4gdGhlIElzbGFuZHMgc2hhbGwgYmUKKyMJQ28tb3JkaW5hdGVkIFVuaXZlcnNhbCB0aW1lIG1pbnVzIDggaG91cnMgYW5kIHNoYWxsIGJlIGtub3duCisjCWFzIFBpdGNhaXJuIFN0YW5kYXJkIFRpbWUuCisjCisjIC4uLiBJIGhhdmUgYWxzbyBzZWVuIFBpdGNhaXJuIGxpc3RlZCBhcyBVVEMgbWludXMgOSBob3VycyBpbiBzZXZlcmFsCisjIHJlZmVyZW5jZXMsIGFuZCBjYW4gb25seSBhc3N1bWUgdGhhdCB0aGlzIHdhcyBhbiBlcnJvciBpbiBpbnRlcnByZXRhdGlvbgorIyBzb21laG93IGluIGxpZ2h0IG9mIHRoaXMgcHJvY2xhbWF0aW9uLgorCisjIEZyb20gUml2ZXMgTWNEb3cgKDE5OTktMTEtMDkpOgorIyBUaGUgUHJvY2xhbWF0aW9uIHJlZ2FyZGluZyBQaXRjYWlybiB0aW1lIGNhbWUgaW50byBlZmZlY3Qgb24gMjcgQXByaWwgMTk5OAorIyAuLi4gYXQgbWlkbmlnaHQuCisKKyMgRnJvbSBIb3dpZSBQaGVscHMgKDE5OTktMTEtMTApLCB3aG8gdGFsa2VkIHRvIGEgUGl0Y2Fpcm5lciB2aWEgc2hvcnR3YXZlOgorIyBCZXR0eSBDaHJpc3RpYW4gdG9sZCBtZSB5ZXN0ZXJkYXkgdGhhdCB0aGVpciBsb2NhbCB0aW1lIGlzIHRoZSBzYW1lIGFzCisjIFBhY2lmaWMgU3RhbmRhcmQgVGltZS4gVGhleSB1c2VkIHRvIGJlIDEvMiBob3VyIGRpZmZlcmVudCBmcm9tIHVzIGhlcmUgaW4KKyMgU2FjcmFtZW50byBidXQgaXQgd2FzIGNoYW5nZWQgYSBjb3VwbGUgb2YgeWVhcnMgYWdvLgorCisKKyMgU2Ftb2EKKworIyBIb3dzZSB3cml0ZXMgKHAgMTUzLCBjaXRpbmcgcCAxMCBvZiB0aGUgMTg4My0xMS0xOCBOZXcgWW9yayBIZXJhbGQpCisjIHRoYXQgaW4gMTg3OSB0aGUgS2luZyBvZiBTYW1vYSBkZWNpZGVkIHRvIGNoYW5nZQorIyBgYHRoZSBkYXRlIGluIGhpcyBraW5nZG9tIGZyb20gdGhlIEFudGlwb2RlYW4gdG8gdGhlIEFtZXJpY2FuIHN5c3RlbSwKKyMgb3JkYWluaW5nIC0tIGJ5IGEgbWFzdGVycGllY2Ugb2YgZGlwbG9tYXRpYyBmbGF0dGVyeSAtLSB0aGF0CisjIHRoZSBGb3VydGggb2YgSnVseSBzaG91bGQgYmUgY2VsZWJyYXRlZCB0d2ljZSBpbiB0aGF0IHllYXIuJycKKworCisjIFRvbmdhCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMTk5Ni0wMS0yMik6CisjIFRvZGF5J3MgX1dhbGwgU3RyZWV0IEpvdXJuYWxfIChwIDEpIHJlcG9ydHMgdGhhdCBgYFRvbmdhIGhhcyBiZWVuIHBsb3R0aW5nCisjIHRvIHNuZWFrIGFoZWFkIG9mIFtOZXcgWmVhbGFuZGVyc10gYnkgaW50cm9kdWNpbmcgZGF5bGlnaHQtc2F2aW5nIHRpbWUuJycKKyMgU2luY2UgS2lyaWJhdGkgaGFzIG1vdmVkIHRoZSBEYXRlIExpbmUgaXQncyBub3QgY2xlYXIgd2hhdCBUb25nYSB3aWxsIGRvLgorCisjIERvbiBNdW5kZWxsIHdyaXRlcyBpbiB0aGUgMTk5Ny0wMi0yMCBUb25nYSBDaHJvbmljbGUKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy50b25nYXRhcHUubmV0LnRvL3RvbmdhL2hvbWVsYW5kL3RpbWViZWdpbnMuaHRtIj4KKyMgSG93IFRvbmdhIGJlY2FtZSBgVGhlIExhbmQgd2hlcmUgVGltZSBCZWdpbnMnCisjIDwvYT46CisKKyMgVW50aWwgMTk0MSBUb25nYSBtYWludGFpbmVkIGEgc3RhbmRhcmQgdGltZSA1MCBtaW51dGVzIGFoZWFkIG9mIE5aU1QKKyMgMTIgaG91cnMgYW5kIDIwIG1pbnV0ZXMgYWhlYWQgb2YgR01ULiAgV2hlbiBOZXcgWmVhbGFuZCBhZGp1c3RlZCBpdHMKKyMgc3RhbmRhcmQgdGltZSBpbiAxOTQwcywgVG9uZ2EgaGFkIHRoZSBjaG9pY2Ugb2Ygc3VidHJhY3RpbmcgZnJvbSBpdHMKKyMgbG9jYWwgdGltZSB0byBjb21lIG9uIHRoZSBzYW1lIHN0YW5kYXJkIHRpbWUgYXMgTmV3IFplYWxhbmQgb3Igb2YKKyMgYWR2YW5jaW5nIGl0cyB0aW1lIHRvIG1haW50YWluIHRoZSBkaWZmZXJlbnRpYWwgb2YgMTMgZGVncmVlcworIyAoYXBwcm94aW1hdGVseSA1MCBtaW51dGVzIGFoZWFkIG9mIE5ldyBaZWFsYW5kIHRpbWUpLgorIworIyBCZWNhdXNlIEhpcyBNYWplc3R5IEtpbmcgVGF1ZmEnYWhhdSBUdXBvdSBJViwgdGhlbiBDcm93biBQcmluY2UKKyMgVHVuZ2ksIHByZWZlcnJlZCB0byBlbnN1cmUgVG9uZ2EncyB0aXRsZSBhcyB0aGUgbGFuZCB3aGVyZSB0aW1lCisjIGJlZ2lucywgdGhlIExlZ2lzbGF0aXZlIEFzc2VtYmx5IGFwcHJvdmVkIHRoZSBsYXR0ZXIgY2hhbmdlLgorIworIyBCdXQgc29tZSBvZiB0aGUgb2xkZXIsIG1vcmUgY29uc2VydmF0aXZlIG1lbWJlcnMgZnJvbSB0aGUgb3V0ZXIKKyMgaXNsYW5kcyBvYmplY3RlZC4gIklmIGF0IG1pZG5pZ2h0IG9uIERlYy4gMzEsIHdlIG1vdmUgYWhlYWQgNDAKKyMgbWludXRlcywgYXMgeW91ciBSb3lhbCBIaWdobmVzcyB3aXNoZXMsIHdoYXQgYmVjb21lcyBvZiB0aGUgNDAKKyMgbWludXRlcyB3ZSBoYXZlIGxvc3Q/IgorIworIyBUaGUgQ3Jvd24gUHJpbmNlLCBwcmVzZW50ZWQgYW4gdW5hbnN3ZXJhYmxlIGFyZ3VtZW50OiAiUmVtZW1iZXIgdGhhdAorIyBvbiB0aGUgV29ybGQgRGF5IG9mIFByYXllciwgeW91IHdvdWxkIGJlIHRoZSBmaXJzdCBwZW9wbGUgb24gRWFydGgKKyMgdG8gc2F5IHlvdXIgcHJheWVycyBpbiB0aGUgbW9ybmluZy4iCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIFNoYW5rcyAmIFBvdHRlbmdlciBzYXkgdGhlIHRyYW5zaXRpb24gd2FzIG9uIDE5NjgtMTAtMDE7IGdvIHdpdGggTXVuZGVsbC4KKworIyBGcm9tIEVyaWMgVWxldmlrICgxOTk5LTA1LTAzKToKKyMgVG9uZ2EncyBkaXJlY3RvciBvZiB0b3VyaXNtLCB3aG8gaXMgYWxzbyBzZWNyZXRhcnkgb2YgdGhlIE5hdGlvbmFsIE1pbGxlbml1bQorIyBDb21taXR0ZWUsIGhhcyBhIHBsYW4gdG8gZ2V0IFRvbmdhIGJhY2sgaW4gZnJvbnQuCisjIEhlIGhhcyBwcm9wb3NlZCBhIG9uZS1vZmYgbW92ZSB0byB0cm9waWNhbCBkYXlsaWdodCBzYXZpbmcgZm9yIFRvbmdhIGZyb20KKyMgT2N0b2JlciB0byBNYXJjaCwgd2hpY2ggaGFzIHdvbiBhcHByb3ZhbCBpbiBwcmluY2lwbGUgZnJvbSB0aGUgVG9uZ2FuCisjIEdvdmVybm1lbnQuCisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDE5OTktMDktMDkpOgorIyAqIFRvbmdhIHdpbGwgaW50cm9kdWNlIERTVCBpbiBOb3ZlbWJlcgorIworIyBJIHdhcyBnaXZlbiB0aGlzIGxpbmsgYnkgSm9obiBMZXR0czoKKyMgPGEgaHJlZj0iaHR0cDovL25ld3MuYmJjLmNvLnVrL2hpL2VuZ2xpc2gvd29ybGQvYXNpYS1wYWNpZmljL25ld3NpZF80MjQwMDAvNDI0NzY0LnN0bSI+CisjIGh0dHA6Ly9uZXdzLmJiYy5jby51ay9oaS9lbmdsaXNoL3dvcmxkL2FzaWEtcGFjaWZpYy9uZXdzaWRfNDI0MDAwLzQyNDc2NC5zdG0KKyMgPC9hPgorIworIyBJIGhhdmUgbm90IGJlZW4gYWJsZSB0byBmaW5kIGV4YWN0IGRhdGVzIGZvciB0aGUgdHJhbnNpdGlvbiBpbiBOb3ZlbWJlcgorIyB5ZXQuIEJ5IHJlYWRpbmcgdGhpcyBhcnRpY2xlIGl0IHNlZW1zIGxpa2UgRmlqaSB3aWxsIGJlIDE0IGhvdXJzIGFoZWFkCisjIG9mIFVUQyBhcyB3ZWxsLCBidXQgYXMgZmFyIGFzIEkga25vdyBGaWppIHdpbGwgb25seSBiZSAxMyBob3VycyBhaGVhZAorIyAoMTIgKyAxIGhvdXIgRFNUKS4KKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMTk5OS0wOS0yMCk6CisjIEFjY29yZGluZyB0byA8YSBocmVmPSJodHRwOi8vd3d3LnRvbmdhb25saW5lLmNvbS9uZXdzL3NlcHQxNzk5Lmh0bWwiPgorIyBodHRwOi8vd3d3LnRvbmdhb25saW5lLmNvbS9uZXdzL3NlcHQxNzk5Lmh0bWwKKyMgPC9hPjoKKyMgIkRheWxpZ2h0IFNhdmluZ3MgVGltZSB3aWxsIHRha2UgZWZmZWN0IG9uIE9jdC4gMiB0aHJvdWdoIEFwcmlsIDE1LCAyMDAwCisjIGFuZCBhbm51YWxseSB0aGVyZWFmdGVyIGZyb20gdGhlIGZpcnN0IFNhdHVyZGF5IGluIE9jdG9iZXIgdGhyb3VnaCB0aGUKKyMgdGhpcmQgU2F0dXJkYXkgb2YgQXByaWwuICBVbmRlciB0aGUgc3lzdGVtIGFwcHJvdmVkIGJ5IFByaXZ5IENvdW5jaWwgb24KKyMgU2VwdC4gMTAsIGNsb2NrcyBtdXN0IGJlIHR1cm5lZCBhaGVhZCBvbmUgaG91ciBvbiB0aGUgb3BlbmluZyBkYXkgYW5kCisjIHNldCBiYWNrIGFuIGhvdXIgb24gdGhlIGNsb3NpbmcgZGF0ZS4iCisjIEFsYXMsIG5vIGluZGljYXRpb24gb2YgdGhlIHRpbWUgb2YgZGF5LgorCisjIEZyb20gUml2ZXMgTWNEb3cgKDE5OTktMTAtMDYpOgorIyBUb25nYSBzdGFydGVkIGl0cyBEYXlsaWdodCBTYXZpbmcgb24gU2F0dXJkYXkgbW9ybmluZyBPY3RvYmVyIDJuZCBhdCAwMjAwYW0uCisjIERheWxpZ2h0IFNhdmluZyBlbmRzIG9uIEFwcmlsIDE2IGF0IDAzMDBhbSB3aGljaCBpcyBTdW5kYXkgbW9ybmluZy4KKworIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwMC0xMC0zMSk6CisjIEJhY2sgaW4gTWFyY2ggSSBmb3VuZCBhIG5vdGljZSBvbiB0aGUgd2Vic2l0ZSBodHRwOi8vd3d3LnRvbmdhb25saW5lLmNvbQorIyB0aGF0IFRvbmdhIGNoYW5nZWQgYmFjayB0byBzdGFuZGFyZCB0aW1lIG9uZSBtb250aCBlYXJseSwgb24gTWFyY2ggMTkKKyMgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgcmVwb3J0ZWQgZGF0ZSBBcHJpbCAxNi4gVW5mb3J0dW5hdGVseSwgdGhlIGFydGljbGUKKyMgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBvbiB0aGUgc2l0ZSwgYW5kIEkgZGlkIG5vdCBtYWtlIGEgY29weSBvZiB0aGUKKyMgdGV4dCwgYW5kIEkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcmVwb3J0IGl0IGhlcmUuCisjIChPcmlnaW5hbCBVUkwgd2FzOiBodHRwOi8vd3d3LnRvbmdhb25saW5lLmNvbS9uZXdzL21hcmNoMTYyMDAwLmh0bSApCisKKyMgRnJvbSBSaXZlcyBNY0RvdyAoMjAwMC0xMi0wMSk6CisjIFRvbmdhIGlzIG9ic2VydmluZyBEU1QgYXMgb2YgMjAwMC0xMS0wNCBhbmQgd2lsbCBzdG9wIG9uIDIwMDEtMDEtMjcuCisKKyMgRnJvbSBTaW9uZSBNb2FsYS1NYWZpICgyMDAxLTA5LTIwKSB2aWEgUml2ZXMgTWNEb3c6CisjIEF0IDI6MDBhbSBvbiB0aGUgZmlyc3QgU3VuZGF5IG9mIE5vdmVtYmVyLCB0aGUgc3RhbmRhcmQgdGltZSBpbiB0aGUgS2luZ2RvbQorIyBzaGFsbCBiZSBtb3ZlZCBmb3J3YXJkIGJ5IG9uZSBob3VyIHRvIDM6MDBhbS4gIEF0IDI6MDBhbSBvbiB0aGUgbGFzdCBTdW5kYXkKKyMgb2YgSmFudWFyeSB0aGUgc3RhbmRhcmQgdGltZSBpbiB0aGUgS2luZ2RvbSBzaGFsbCBiZSBtb3ZlZCBiYWNrd2FyZCBieSBvbmUKKyMgaG91ciB0byAxOjAwYW0uCisKKyMgRnJvbSBQdWx1ICdBbmF1ICgyMDAyLTExLTA1KToKKyMgVGhlIGxhdyB3YXMgZm9yIDMgeWVhcnMsIHN1cHBvc2VkbHkgdG8gZ2V0IHJlbmV3ZWQuICBJdCB3YXNuJ3QuCisKKworIyBXYWtlCisKKyMgRnJvbSBWZXJuaWNlIEFuZGVyc29uLCBQZXJzb25hbCBTZWNyZXRhcnkgdG8gUGhpbGlwIEplc3N1cCwKKyMgVVMgQW1iYXNzYWRvciBBdCBMYXJnZSAob3JhbCBoaXN0b3J5IGludGVydmlldywgMTk3MS0wMi0wMik6CisjCisjIFNhdHVyZGF5LCB0aGUgMTR0aCBbb2YgT2N0b2JlciwgMTk1MF0gLS0gLi4uICBUaGUgdGltZSB3YXMgYWxsIHRoZQorIyBtb3JlIGNvbmZ1c2luZyBhdCB0aGF0IHBvaW50LCBiZWNhdXNlIHdlIGhhZCBjcm9zc2VkIHRoZQorIyBJbnRlcm5hdGlvbmFsIERhdGUgTGluZSwgdGh1cyBnZXR0aW5nIHR3byBTdW5kYXlzLiAgRnVydGhlcm1vcmUsIHdlCisjIGRpc2NvdmVyZWQgdGhhdCBXYWtlIElzbGFuZCBoYWQgdHdvIGhvdXJzIG9mIGRheWxpZ2h0IHNhdmluZyB0aW1lCisjIG1ha2luZyBjYWxjdWxhdGlvbiBvZiB0aW1lIGluIFdhc2hpbmd0b24gZGlmZmljdWx0IGlmIG5vdCBhbG1vc3QKKyMgaW1wb3NzaWJsZS4KKyMKKyMgaHR0cDovL3d3dy50cnVtYW5saWJyYXJ5Lm9yZy93YWtlL21lZXRpbmcuaHRtCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMy0wMy0yMyk6CisjIFdlIGhhdmUgbm8gb3RoZXIgcmVwb3J0IG9mIERTVCBpbiBXYWtlIElzbGFuZCwgc28gb21pdCB0aGlzIGluZm8gZm9yIG5vdy4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoZSBJbnRlcm5hdGlvbmFsIERhdGUgTGluZQorCisjIEZyb20gR3dpbGxpbSBMYXcgKDIwMDAtMDEtMDMpOgorIworIyBUaGUgSW50ZXJuYXRpb25hbCBEYXRlIExpbmUgaXMgbm90IGRlZmluZWQgYnkgYW55IGludGVybmF0aW9uYWwgc3RhbmRhcmQsCisjIGNvbnZlbnRpb24sIG9yIHRyZWF0eS4gIE1hcG1ha2VycyBhcmUgZnJlZSB0byBkcmF3IGl0IGFzIHRoZXkgcGxlYXNlLgorIyBSZXB1dGFibGUgbWFwbWFrZXJzIHdpbGwgc2ltcGx5IGVuc3VyZSB0aGF0IGV2ZXJ5IHBvaW50IG9mIGxhbmQgYXBwZWFycyBvbgorIyB0aGUgY29ycmVjdCBzaWRlIG9mIHRoZSBJREwsIGFjY29yZGluZyB0byB0aGUgZGF0ZSBsZWdhbGx5IG9ic2VydmVkIHRoZXJlLgorIworIyBXaGVuIEtpcmliYXRpIGFkb3B0ZWQgYSB1bmlmb3JtIGRhdGUgaW4gMTk5NSwgdGhlcmVieSBtb3ZpbmcgdGhlIFBob2VuaXggYW5kCisjIExpbmUgSXNsYW5kcyB0byB0aGUgd2VzdCBzaWRlIG9mIHRoZSBJREwgKG9yLCBpZiB5b3UgcHJlZmVyLCBtb3ZpbmcgdGhlIElETAorIyB0byB0aGUgZWFzdCBzaWRlIG9mIHRoZSBQaG9lbml4IGFuZCBMaW5lIElzbGFuZHMpLCBJIHN1cHBvc2UgdGhhdCBtb3N0CisjIG1hcG1ha2VycyByZWRyZXcgdGhlIElETCBmb2xsb3dpbmcgdGhlIGJvdW5kYXJ5IG9mIEtpcmliYXRpLiAgRXZlbiB0aGF0IGxpbmUKKyMgaGFzIGEgcmF0aGVyIGFyYml0cmFyeSBuYXR1cmUuICBUaGUgc3RyYWlnaHQtbGluZSBib3VuZGFyaWVzIGJldHdlZW4gUGFjaWZpYworIyBpc2xhbmQgbmF0aW9ucyB0aGF0IGFyZSBzaG93biBvbiBtYW55IG1hcHMgYXJlIGJhc2VkIG9uIGFuIGludGVybmF0aW9uYWwKKyMgY29udmVudGlvbiwgYnV0IGFyZSBub3QgbGVnYWxseSBiaW5kaW5nIG5hdGlvbmFsIGJvcmRlcnMuLi4uIFRoZSBkYXRlIGlzCisjIGdvdmVybmVkIGJ5IHRoZSBJREw7IHRoZXJlZm9yZSwgZXZlbiBvbiB0aGUgaGlnaCBzZWFzLCB0aGVyZSBtYXkgYmUgc29tZQorIyBwbGFjZXMgYXMgbGF0ZSBhcyBmb3VydGVlbiBob3VycyBsYXRlciB0aGFuIFVUQy4gIEFuZCwgc2luY2UgdGhlIElETCBpcyBub3QKKyMgYW4gaW50ZXJuYXRpb25hbCBzdGFuZGFyZCwgdGhlcmUgYXJlIHNvbWUgcGxhY2VzIG9uIHRoZSBoaWdoIHNlYXMgd2hlcmUgdGhlCisjIGNvcnJlY3QgZGF0ZSBpcyBhbWJpZ3VvdXMuCisKKyMgRnJvbSBXaWtpcGVkaWEgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGltZV96b25lPiAoMjAwNS0wOC0zMSk6CisjIEJlZm9yZSAxOTIwLCBhbGwgc2hpcHMga2VwdCBsb2NhbCBhcHBhcmVudCB0aW1lIG9uIHRoZSBoaWdoIHNlYXMgYnkgc2V0dGluZworIyB0aGVpciBjbG9ja3MgYXQgbmlnaHQgb3IgYXQgdGhlIG1vcm5pbmcgc2lnaHQgc28gdGhhdCwgZ2l2ZW4gdGhlIHNoaXAncworIyBzcGVlZCBhbmQgZGlyZWN0aW9uLCBpdCB3b3VsZCBiZSAxMiBvJ2Nsb2NrIHdoZW4gdGhlIFN1biBjcm9zc2VkIHRoZSBzaGlwJ3MKKyMgbWVyaWRpYW4gKDEyIG8nY2xvY2sgPSBsb2NhbCBhcHBhcmVudCBub29uKS4gIER1cmluZyAxOTE3LCBhdCB0aGUKKyMgQW5nbG8tRnJlbmNoIENvbmZlcmVuY2Ugb24gVGltZS1rZWVwaW5nIGF0IFNlYSwgaXQgd2FzIHJlY29tbWVuZGVkIHRoYXQgYWxsCisjIHNoaXBzLCBib3RoIG1pbGl0YXJ5IGFuZCBjaXZpbGlhbiwgc2hvdWxkIGFkb3B0IGhvdXJseSBzdGFuZGFyZCB0aW1lIHpvbmVzCisjIG9uIHRoZSBoaWdoIHNlYXMuICBXaGVuZXZlciBhIHNoaXAgd2FzIHdpdGhpbiB0aGUgdGVycml0b3JpYWwgd2F0ZXJzIG9mIGFueQorIyBuYXRpb24gaXQgd291bGQgdXNlIHRoYXQgbmF0aW9uJ3Mgc3RhbmRhcmQgdGltZS4gIFRoZSBjYXB0YWluIHdhcyBwZXJtaXR0ZWQKKyMgdG8gY2hhbmdlIGhpcyBzaGlwJ3MgY2xvY2tzIGF0IGEgdGltZSBvZiBoaXMgY2hvaWNlIGZvbGxvd2luZyBoaXMgc2hpcCdzCisjIGVudHJ5IGludG8gYW5vdGhlciB6b25lIHRpbWUtLWhlIG9mdGVuIGNob3NlIG1pZG5pZ2h0LiAgVGhlc2Ugem9uZXMgd2VyZQorIyBhZG9wdGVkIGJ5IGFsbCBtYWpvciBmbGVldHMgYmV0d2VlbiAxOTIwIGFuZCAxOTI1IGJ1dCBub3QgYnkgbWFueQorIyBpbmRlcGVuZGVudCBtZXJjaGFudCBzaGlwcyB1bnRpbCBXb3JsZCBXYXIgSUkuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCwgdXNpbmcgcmVmZXJlbmNlcyBzdWdnZXN0ZWQgYnkgT3NjYXIgdmFuIFZsaWptZW4KKyMgKDIwMDUtMDMtMjApOgorIworIyBUaGUgQW1lcmljYW4gUHJhY3RpY2FsIE5hdmlnYXRvciAoMjAwMikKKyMgPGh0dHA6Ly9wb2xsdXgubnNzLm5pbWEubWlsL3B1YnMvcHVic19qX2Fwbl9zZWN0aW9ucy5odG1sP3JpZD0xODc+CisjIHRhbGtzIG9ubHkgYWJvdXQgdGhlIDE4MC1kZWdyZWUgbWVyaWRpYW4gd2l0aCByZXNwZWN0IHRvIHNoaXBzIGluCisjIGludGVybmF0aW9uYWwgd2F0ZXJzOyBpdCBpZ25vcmVzIHRoZSBpbnRlcm5hdGlvbmFsIGRhdGUgbGluZS4KZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9iYWNrd2FyZCBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9iYWNrd2FyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODk2OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL2JhY2t3YXJkCkBAIC0wLDAgKzEsMTE2IEBACisjIDxwcmU+CisjIEAoIyliYWNrd2FyZAk4LjgKKyMgVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyMgMjAwOS0wNS0xNyBieSBBcnRodXIgRGF2aWQgT2xzb24uCisKKyMgVGhpcyBmaWxlIHByb3ZpZGVzIGxpbmtzIGJldHdlZW4gY3VycmVudCBuYW1lcyBmb3IgdGltZSB6b25lcworIyBhbmQgdGhlaXIgb2xkIG5hbWVzLiAgTWFueSBuYW1lcyBjaGFuZ2VkIGluIGxhdGUgMTk5My4KKworTGluawlBZnJpY2EvQXNtYXJhCQlBZnJpY2EvQXNtZXJhCitMaW5rCUFmcmljYS9CYW1ha28JCUFmcmljYS9UaW1idWt0dQorTGluawlBbWVyaWNhL0FyZ2VudGluYS9DYXRhbWFyY2EJQW1lcmljYS9BcmdlbnRpbmEvQ29tb2RSaXZhZGF2aWEKK0xpbmsJQW1lcmljYS9BZGFrCQlBbWVyaWNhL0F0a2EKK0xpbmsJQW1lcmljYS9BcmdlbnRpbmEvQnVlbm9zX0FpcmVzCUFtZXJpY2EvQnVlbm9zX0FpcmVzCitMaW5rCUFtZXJpY2EvQXJnZW50aW5hL0NhdGFtYXJjYQlBbWVyaWNhL0NhdGFtYXJjYQorTGluawlBbWVyaWNhL0F0aWtva2FuCUFtZXJpY2EvQ29yYWxfSGFyYm91cgorTGluawlBbWVyaWNhL0FyZ2VudGluYS9Db3Jkb2JhCUFtZXJpY2EvQ29yZG9iYQorTGluawlBbWVyaWNhL1RpanVhbmEJCUFtZXJpY2EvRW5zZW5hZGEKK0xpbmsJQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpcwlBbWVyaWNhL0ZvcnRfV2F5bmUKK0xpbmsJQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpcwlBbWVyaWNhL0luZGlhbmFwb2xpcworTGluawlBbWVyaWNhL0FyZ2VudGluYS9KdWp1eQlBbWVyaWNhL0p1anV5CitMaW5rCUFtZXJpY2EvSW5kaWFuYS9Lbm94CUFtZXJpY2EvS25veF9JTgorTGluawlBbWVyaWNhL0tlbnR1Y2t5L0xvdWlzdmlsbGUJQW1lcmljYS9Mb3Vpc3ZpbGxlCitMaW5rCUFtZXJpY2EvQXJnZW50aW5hL01lbmRvemEJQW1lcmljYS9NZW5kb3phCitMaW5rCUFtZXJpY2EvUmlvX0JyYW5jbwlBbWVyaWNhL1BvcnRvX0FjcmUKK0xpbmsJQW1lcmljYS9BcmdlbnRpbmEvQ29yZG9iYQlBbWVyaWNhL1Jvc2FyaW8KK0xpbmsJQW1lcmljYS9TdF9UaG9tYXMJQW1lcmljYS9WaXJnaW4KK0xpbmsJQXNpYS9Bc2hnYWJhdAkJQXNpYS9Bc2hraGFiYWQKK0xpbmsJQXNpYS9DaG9uZ3FpbmcJCUFzaWEvQ2h1bmdraW5nCitMaW5rCUFzaWEvRGhha2EJCUFzaWEvRGFjY2EKK0xpbmsJQXNpYS9LYXRobWFuZHUJCUFzaWEvS2F0bWFuZHUKK0xpbmsJQXNpYS9Lb2xrYXRhCQlBc2lhL0NhbGN1dHRhCitMaW5rCUFzaWEvTWFjYXUJCUFzaWEvTWFjYW8KK0xpbmsJQXNpYS9KZXJ1c2FsZW0JCUFzaWEvVGVsX0F2aXYKK0xpbmsJQXNpYS9Ib19DaGlfTWluaAlBc2lhL1NhaWdvbgorTGluawlBc2lhL1RoaW1waHUJCUFzaWEvVGhpbWJ1CitMaW5rCUFzaWEvTWFrYXNzYXIJCUFzaWEvVWp1bmdfUGFuZGFuZworTGluawlBc2lhL1VsYWFuYmFhdGFyCUFzaWEvVWxhbl9CYXRvcgorTGluawlBdGxhbnRpYy9GYXJvZQkJQXRsYW50aWMvRmFlcm9lCitMaW5rCUV1cm9wZS9Pc2xvCQlBdGxhbnRpYy9KYW5fTWF5ZW4KK0xpbmsJQXVzdHJhbGlhL1N5ZG5leQlBdXN0cmFsaWEvQUNUCitMaW5rCUF1c3RyYWxpYS9TeWRuZXkJQXVzdHJhbGlhL0NhbmJlcnJhCitMaW5rCUF1c3RyYWxpYS9Mb3JkX0hvd2UJQXVzdHJhbGlhL0xISQorTGluawlBdXN0cmFsaWEvU3lkbmV5CUF1c3RyYWxpYS9OU1cKK0xpbmsJQXVzdHJhbGlhL0RhcndpbglBdXN0cmFsaWEvTm9ydGgKK0xpbmsJQXVzdHJhbGlhL0JyaXNiYW5lCUF1c3RyYWxpYS9RdWVlbnNsYW5kCitMaW5rCUF1c3RyYWxpYS9BZGVsYWlkZQlBdXN0cmFsaWEvU291dGgKK0xpbmsJQXVzdHJhbGlhL0hvYmFydAlBdXN0cmFsaWEvVGFzbWFuaWEKK0xpbmsJQXVzdHJhbGlhL01lbGJvdXJuZQlBdXN0cmFsaWEvVmljdG9yaWEKK0xpbmsJQXVzdHJhbGlhL1BlcnRoCQlBdXN0cmFsaWEvV2VzdAorTGluawlBdXN0cmFsaWEvQnJva2VuX0hpbGwJQXVzdHJhbGlhL1lhbmNvd2lubmEKK0xpbmsJQW1lcmljYS9SaW9fQnJhbmNvCUJyYXppbC9BY3JlCitMaW5rCUFtZXJpY2EvTm9yb25oYQkJQnJhemlsL0RlTm9yb25oYQorTGluawlBbWVyaWNhL1Nhb19QYXVsbwlCcmF6aWwvRWFzdAorTGluawlBbWVyaWNhL01hbmF1cwkJQnJhemlsL1dlc3QKK0xpbmsJQW1lcmljYS9IYWxpZmF4CQlDYW5hZGEvQXRsYW50aWMKK0xpbmsJQW1lcmljYS9XaW5uaXBlZwlDYW5hZGEvQ2VudHJhbAorTGluawlBbWVyaWNhL1JlZ2luYQkJQ2FuYWRhL0Vhc3QtU2Fza2F0Y2hld2FuCitMaW5rCUFtZXJpY2EvVG9yb250bwkJQ2FuYWRhL0Vhc3Rlcm4KK0xpbmsJQW1lcmljYS9FZG1vbnRvbglDYW5hZGEvTW91bnRhaW4KK0xpbmsJQW1lcmljYS9TdF9Kb2hucwlDYW5hZGEvTmV3Zm91bmRsYW5kCitMaW5rCUFtZXJpY2EvVmFuY291dmVyCUNhbmFkYS9QYWNpZmljCitMaW5rCUFtZXJpY2EvUmVnaW5hCQlDYW5hZGEvU2Fza2F0Y2hld2FuCitMaW5rCUFtZXJpY2EvV2hpdGVob3JzZQlDYW5hZGEvWXVrb24KK0xpbmsJQW1lcmljYS9TYW50aWFnbwlDaGlsZS9Db250aW5lbnRhbAorTGluawlQYWNpZmljL0Vhc3RlcgkJQ2hpbGUvRWFzdGVySXNsYW5kCitMaW5rCUFtZXJpY2EvSGF2YW5hCQlDdWJhCitMaW5rCUFmcmljYS9DYWlybwkJRWd5cHQKK0xpbmsJRXVyb3BlL0R1YmxpbgkJRWlyZQorTGluawlFdXJvcGUvTG9uZG9uCQlFdXJvcGUvQmVsZmFzdAorTGluawlFdXJvcGUvQ2hpc2luYXUJCUV1cm9wZS9UaXJhc3BvbAorTGluawlFdXJvcGUvTG9uZG9uCQlHQgorTGluawlFdXJvcGUvTG9uZG9uCQlHQi1FaXJlCitMaW5rCUV0Yy9HTVQJCQlHTVQrMAorTGluawlFdGMvR01UCQkJR01ULTAKK0xpbmsJRXRjL0dNVAkJCUdNVDAKK0xpbmsJRXRjL0dNVAkJCUdyZWVud2ljaAorTGluawlBc2lhL0hvbmdfS29uZwkJSG9uZ2tvbmcKK0xpbmsJQXRsYW50aWMvUmV5a2phdmlrCUljZWxhbmQKK0xpbmsJQXNpYS9UZWhyYW4JCUlyYW4KK0xpbmsJQXNpYS9KZXJ1c2FsZW0JCUlzcmFlbAorTGluawlBbWVyaWNhL0phbWFpY2EJCUphbWFpY2EKK0xpbmsJQXNpYS9Ub2t5bwkJSmFwYW4KK0xpbmsJUGFjaWZpYy9Ld2FqYWxlaW4JS3dhamFsZWluCitMaW5rCUFmcmljYS9Ucmlwb2xpCQlMaWJ5YQorTGluawlBbWVyaWNhL1RpanVhbmEJCU1leGljby9CYWphTm9ydGUKK0xpbmsJQW1lcmljYS9NYXphdGxhbglNZXhpY28vQmFqYVN1cgorTGluawlBbWVyaWNhL01leGljb19DaXR5CU1leGljby9HZW5lcmFsCitMaW5rCVBhY2lmaWMvQXVja2xhbmQJTloKK0xpbmsJUGFjaWZpYy9DaGF0aGFtCQlOWi1DSEFUCitMaW5rCUFtZXJpY2EvRGVudmVyCQlOYXZham8KK0xpbmsJQXNpYS9TaGFuZ2hhaQkJUFJDCitMaW5rCVBhY2lmaWMvUGFnb19QYWdvCVBhY2lmaWMvU2Ftb2EKK0xpbmsJUGFjaWZpYy9UcnVrCQlQYWNpZmljL1lhcAorTGluawlFdXJvcGUvV2Fyc2F3CQlQb2xhbmQKK0xpbmsJRXVyb3BlL0xpc2JvbgkJUG9ydHVnYWwKK0xpbmsJQXNpYS9UYWlwZWkJCVJPQworTGluawlBc2lhL1Nlb3VsCQlST0sKK0xpbmsJQXNpYS9TaW5nYXBvcmUJCVNpbmdhcG9yZQorTGluawlFdXJvcGUvSXN0YW5idWwJCVR1cmtleQorTGluawlFdGMvVUNUCQkJVUNUCitMaW5rCUFtZXJpY2EvQW5jaG9yYWdlCVVTL0FsYXNrYQorTGluawlBbWVyaWNhL0FkYWsJCVVTL0FsZXV0aWFuCitMaW5rCUFtZXJpY2EvUGhvZW5peAkJVVMvQXJpem9uYQorTGluawlBbWVyaWNhL0NoaWNhZ28JCVVTL0NlbnRyYWwKK0xpbmsJQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpcwlVUy9FYXN0LUluZGlhbmEKK0xpbmsJQW1lcmljYS9OZXdfWW9yawlVUy9FYXN0ZXJuCitMaW5rCVBhY2lmaWMvSG9ub2x1bHUJVVMvSGF3YWlpCitMaW5rCUFtZXJpY2EvSW5kaWFuYS9Lbm94CVVTL0luZGlhbmEtU3RhcmtlCitMaW5rCUFtZXJpY2EvRGV0cm9pdAkJVVMvTWljaGlnYW4KK0xpbmsJQW1lcmljYS9EZW52ZXIJCVVTL01vdW50YWluCitMaW5rCUFtZXJpY2EvTG9zX0FuZ2VsZXMJVVMvUGFjaWZpYworTGluawlQYWNpZmljL1BhZ29fUGFnbwlVUy9TYW1vYQorTGluawlFdGMvVVRDCQkJVVRDCitMaW5rCUV0Yy9VVEMJCQlVbml2ZXJzYWwKK0xpbmsJRXVyb3BlL01vc2NvdwkJVy1TVQorTGluawlFdGMvVVRDCQkJWnVsdQpkaWZmIC0tZ2l0IGEvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL2NoZWNrdGFiLmF3ayBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9jaGVja3RhYi5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4YmE3MwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9jaGVja3RhYi5hd2sKQEAgLTAsMCArMSwxNzQgQEAKKyMgQ2hlY2sgdHogdGFibGVzIGZvciBjb25zaXN0ZW5jeS4KKworIyBDb250cmlidXRlZCBieSBQYXVsIEVnZ2VydC4KKworQkVHSU4geworCUZTID0gIlx0IgorCisJaWYgKCFpc29fdGFibGUpIGlzb190YWJsZSA9ICJpc28zMTY2LnRhYiIKKwlpZiAoIXpvbmVfdGFibGUpIHpvbmVfdGFibGUgPSAiem9uZS50YWIiCisJaWYgKCF3YW50X3dhcm5pbmdzKSB3YW50X3dhcm5pbmdzID0gLTEKKworCSMgQSBzcGVjaWFsIChhbmQgd2UgaG9wZSB0ZW1wb3JhcnkpIGNhc2UuCisJdHp0YWJbIkFtZXJpY2EvTW9udHJlYWwiXSA9IDEKKworCXdoaWxlIChnZXRsaW5lIDxpc29fdGFibGUpIHsKKwkJaXNvX05SKysKKwkJaWYgKCQwIH4gL14jLykgY29udGludWUKKwkJaWYgKE5GICE9IDIpIHsKKwkJCXByaW50ZiAiJXM6JWQ6IHdyb25nIG51bWJlciBvZiBjb2x1bW5zXG4iLCBcCisJCQkJaXNvX3RhYmxlLCBpc29fTlIgPj4iL2Rldi9zdGRlcnIiCisJCQlzdGF0dXMgPSAxCisJCX0KKwkJY2MgPSAkMQorCQluYW1lID0gJDIKKwkJaWYgKGNjICF+IC9eW0EtWl1bQS1aXSQvKSB7CisJCQlwcmludGYgIiVzOiVkOiBpbnZhbGlkIGNvdW50cnkgY29kZSBgJXMnXG4iLCBcCisJCQkJaXNvX3RhYmxlLCBpc29fTlIsIGNjID4+Ii9kZXYvc3RkZXJyIgorCQkJc3RhdHVzID0gMQorCQl9CisJCWlmIChjYyA8PSBjYzApIHsKKwkJCWlmIChjYyA9PSBjYzApIHsKKwkJCQlzID0gImR1cGxpY2F0ZSI7CisJCQl9IGVsc2UgeworCQkJCXMgPSAib3V0IG9mIG9yZGVyIjsKKwkJCX0KKworCQkJcHJpbnRmICIlczolZDogY291bnRyeSBjb2RlIGAlcycgaXMgJXNcbiIsIFwKKwkJCQlpc29fdGFibGUsIGlzb19OUiwgY2MsIHMgXAorCQkJCT4+Ii9kZXYvc3RkZXJyIgorCQkJc3RhdHVzID0gMQorCQl9CisJCWNjMCA9IGNjCisJCWlmIChuYW1lMmNjW25hbWVdKSB7CisJCQlwcmludGYgIiVzOiVkOiBgJXMnIGFuZCBgJXMnIGhhdmUgdGhlIHNuYW1lIG5hbWVcbiIsIFwKKwkJCQlpc29fdGFibGUsIGlzb19OUiwgbmFtZTJjY1tuYW1lXSwgY2MgXAorCQkJCT4+Ii9kZXYvc3RkZXJyIgorCQkJc3RhdHVzID0gMQorCQl9CisJCW5hbWUyY2NbbmFtZV0gPSBjYworCQljYzJuYW1lW2NjXSA9IG5hbWUKKwkJY2MyTlJbY2NdID0gaXNvX05SCisJfQorCisJem9uZV90YWJsZSA9ICJ6b25lLnRhYiIKKwljYzAgPSAiIgorCisJd2hpbGUgKGdldGxpbmUgPHpvbmVfdGFibGUpIHsKKwkJem9uZV9OUisrCisJCWlmICgkMCB+IC9eIy8pIGNvbnRpbnVlCisJCWlmIChORiAhPSAzICYmIE5GICE9IDQpIHsKKwkJCXByaW50ZiAiJXM6JWQ6IHdyb25nIG51bWJlciBvZiBjb2x1bW5zXG4iLCBcCisJCQkJem9uZV90YWJsZSwgem9uZV9OUiA+PiIvZGV2L3N0ZGVyciIKKwkJCXN0YXR1cyA9IDEKKwkJfQorCQljYyA9ICQxCisJCWNvb3JkaW5hdGVzID0gJDIKKwkJdHogPSAkMworCQljb21tZW50cyA9ICQ0CisJCWlmIChjYyA8IGNjMCkgeworCQkJcHJpbnRmICIlczolZDogY291bnRyeSBjb2RlIGAlcycgaXMgb3V0IG9mIG9yZGVyXG4iLCBcCisJCQkJem9uZV90YWJsZSwgem9uZV9OUiwgY2MgPj4iL2Rldi9zdGRlcnIiCisJCQlzdGF0dXMgPSAxCisJCX0KKwkJY2MwID0gY2MKKwkJY2N0eiA9IGNjIHR6CisJCWNjdHp0YWJbY2N0el0gPSAxCisJCXR6dGFiW3R6XSA9IDEKKwkJdHoyY29tbWVudHNbY2N0el0gPSBjb21tZW50cworCQl0ejJOUlt0el0gPSB6b25lX05SCisJCWlmIChjYzJuYW1lW2NjXSkgeworCQkJY2NfdXNlZFtjY10rKworCQl9IGVsc2UgeworCQkJcHJpbnRmICIlczolZDogJXM6IHVua25vd24gY291bnRyeSBjb2RlXG4iLCBcCisJCQkJem9uZV90YWJsZSwgem9uZV9OUiwgY2MgPj4iL2Rldi9zdGRlcnIiCisJCQlzdGF0dXMgPSAxCisJCX0KKwkJaWYgKGNvb3JkaW5hdGVzICF+IC9eWy0rXVswLTldWzAtOV1bMC01XVswLTldWy0rXVswMV1bMC05XVswLTldWzAtNV1bMC05XSQvIFwKKwkJICAgICYmIGNvb3JkaW5hdGVzICF+IC9eWy0rXVswLTldWzAtOV1bMC01XVswLTldWzAtNV1bMC05XVstK11bMDFdWzAtOV1bMC05XVswLTVdWzAtOV1bMC01XVswLTldJC8pIHsKKwkJCXByaW50ZiAiJXM6JWQ6ICVzOiBpbnZhbGlkIGNvb3JkaW5hdGVzXG4iLCBcCisJCQkJem9uZV90YWJsZSwgem9uZV9OUiwgY29vcmRpbmF0ZXMgPj4iL2Rldi9zdGRlcnIiCisJCQlzdGF0dXMgPSAxCisJCX0KKwl9CisKKwlmb3IgKGNjdHogaW4gY2N0enRhYikgeworCQljYyA9IHN1YnN0ciAoY2N0eiwgMSwgMikKKwkJdHogPSBzdWJzdHIgKGNjdHosIDMpCisJCWlmIChjY191c2VkW2NjXSA9PSAxKSB7CisJCQlpZiAodHoyY29tbWVudHNbY2N0el0pIHsKKwkJCQlwcmludGYgIiVzOiVkOiB1bm5lY2Vzc2FyeSBjb21tZW50IGAlcydcbiIsIFwKKwkJCQkJem9uZV90YWJsZSwgdHoyTlJbdHpdLCBcCisJCQkJCXR6MmNvbW1lbnRzW2NjdHpdIFwKKwkJCQkJPj4iL2Rldi9zdGRlcnIiCisJCQkJc3RhdHVzID0gMQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCF0ejJjb21tZW50c1tjY3R6XSkgeworCQkJCXByaW50ZiAiJXM6JWQ6IG1pc3NpbmcgY29tbWVudFxuIiwgXAorCQkJCQl6b25lX3RhYmxlLCB0ejJOUlt0el0gPj4iL2Rldi9zdGRlcnIiCisJCQkJc3RhdHVzID0gMQorCQkJfQorCQl9CisJfQorCisJRlMgPSAiICIKK30KKworJDEgfiAvXiMvIHsgbmV4dCB9CisKK3sKKwl0eiA9IHJ1bGVzID0gIiIKKwlpZiAoJDEgPT0gIlpvbmUiKSB7CisJCXR6ID0gJDIKKwkJcnVsZVVzZWRbJDRdID0gMQorCX0gZWxzZSBpZiAoJDEgPT0gIkxpbmsiKSB7CisJCSMgSWdub3JlIExpbmsgY29tbWFuZHMgaWYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBiYXNlbmFtZXMKKwkJIyBhcmUgaWRlbnRpY2FsLCBlLmcuIEV1cm9wZS9Jc3RhbmJ1bCB2ZXJzdXMgQXNpYS9Jc3RhbmJ1bC4KKwkJc3JjID0gJDIKKwkJZHN0ID0gJDMKKwkJd2hpbGUgKChpID0gaW5kZXgoc3JjLCAiLyIpKSkgc3JjID0gc3Vic3RyKHNyYywgaSsxKQorCQl3aGlsZSAoKGkgPSBpbmRleChkc3QsICIvIikpKSBkc3QgPSBzdWJzdHIoZHN0LCBpKzEpCisJCWlmIChzcmMgIT0gZHN0KSB0eiA9ICQzCisJfSBlbHNlIGlmICgkMSA9PSAiUnVsZSIpIHsKKwkJcnVsZURlZmluZWRbJDJdID0gMQorCX0gZWxzZSB7CisJCXJ1bGVVc2VkWyQyXSA9IDEKKwl9CisJaWYgKHR6ICYmIHR6IH4gL1wvLykgeworCQlpZiAoIXR6dGFiW3R6XSkgeworCQkJcHJpbnRmICIlczogbm8gZGF0YSBmb3IgYCVzJ1xuIiwgem9uZV90YWJsZSwgdHogXAorCQkJCT4+Ii9kZXYvc3RkZXJyIgorCQkJc3RhdHVzID0gMQorCQl9CisJCXpvbmVTZWVuW3R6XSA9IDEKKwl9Cit9CisKK0VORCB7CisJZm9yICh0eiBpbiBydWxlRGVmaW5lZCkgeworCQlpZiAoIXJ1bGVVc2VkW3R6XSkgeworCQkJcHJpbnRmICIlczogUnVsZSBuZXZlciB1c2VkXG4iLCB0egorCQkJc3RhdHVzID0gMQorCQl9CisJfQorCWZvciAodHogaW4gdHoyY2MpIHsKKwkJaWYgKCF6b25lU2Vlblt0el0pIHsKKwkJCXByaW50ZiAiJXM6JWQ6IG5vIFpvbmUgdGFibGUgZm9yIGAlcydcbiIsIFwKKwkJCQl6b25lX3RhYmxlLCB0ejJOUlt0el0sIHR6ID4+Ii9kZXYvc3RkZXJyIgorCQkJc3RhdHVzID0gMQorCQl9CisJfQorCisJaWYgKDAgPCB3YW50X3dhcm5pbmdzKSB7CisJCWZvciAoY2MgaW4gY2MybmFtZSkgeworCQkJaWYgKCFjY191c2VkW2NjXSkgeworCQkJCXByaW50ZiAiJXM6JWQ6IHdhcm5pbmc6ICIgXAorCQkJCQkibm8gWm9uZSBlbnRyaWVzIGZvciAlcyAoJXMpXG4iLCBcCisJCQkJCWlzb190YWJsZSwgY2MyTlJbY2NdLCBjYywgY2MybmFtZVtjY10KKwkJCX0KKwkJfQorCX0KKworCWV4aXQgc3RhdHVzCit9CmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvZXRjZXRlcmEgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvZXRjZXRlcmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5MzY4MgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9ldGNldGVyYQpAQCAtMCwwICsxLDgzIEBACisjIDxwcmU+CisjIEAoIylldGNldGVyYQk4LjIKKyMgVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyMgMjAwOS0wNS0xNyBieSBBcnRodXIgRGF2aWQgT2xzb24uCisKKyMgVGhlc2UgZW50cmllcyBhcmUgbW9zdGx5IHByZXNlbnQgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgc28gdGhhdAorIyBwZW9wbGUgaW4gYXJlYXMgbm90IG90aGVyd2lzZSBjb3ZlcmVkIGJ5IHRoZSB0eiBmaWxlcyBjb3VsZCAiemljIC1sIgorIyB0byBhIHRpbWUgem9uZSB0aGF0IHdhcyByaWdodCBmb3IgdGhlaXIgYXJlYS4gIFRoZXNlIGRheXMsIHRoZQorIyB0eiBmaWxlcyBjb3ZlciBhbG1vc3QgYWxsIHRoZSBpbmhhYml0ZWQgd29ybGQsIGFuZCB0aGUgb25seSBwcmFjdGljYWwKKyMgbmVlZCBub3cgZm9yIHRoZSBlbnRyaWVzIHRoYXQgYXJlIG5vdCBvbiBVVEMgYXJlIGZvciBzaGlwcyBhdCBzZWEKKyMgdGhhdCBjYW5ub3QgdXNlIFBPU0lYIFRaIHNldHRpbmdzLgorCitab25lCUV0Yy9HTVQJCTAJLQlHTVQKK1pvbmUJRXRjL1VUQwkJMAktCVVUQworWm9uZQlFdGMvVUNUCQkwCS0JVUNUCisKKyMgVGhlIGZvbGxvd2luZyBsaW5rIHVzZXMgb2xkZXIgbmFtaW5nIGNvbnZlbnRpb25zLAorIyBidXQgaXQgYmVsb25ncyBoZXJlLCBub3QgaW4gdGhlIGZpbGUgYGJhY2t3YXJkJywKKyMgYXMgZnVuY3Rpb25zIGxpa2UgZ210aW1lIGxvYWQgdGhlICJHTVQiIGZpbGUgdG8gaGFuZGxlIGxlYXAgc2Vjb25kcyBwcm9wZXJseS4KKyMgV2Ugd2FudCB0aGlzIHRvIHdvcmsgZXZlbiBvbiBpbnN0YWxsYXRpb25zIHRoYXQgb21pdCB0aGUgb3RoZXIgb2xkZXIgbmFtZXMuCitMaW5rCUV0Yy9HTVQJCQkJR01UCisKK0xpbmsJRXRjL1VUQwkJCQlFdGMvVW5pdmVyc2FsCitMaW5rCUV0Yy9VVEMJCQkJRXRjL1p1bHUKKworTGluawlFdGMvR01UCQkJCUV0Yy9HcmVlbndpY2gKK0xpbmsJRXRjL0dNVAkJCQlFdGMvR01ULTAKK0xpbmsJRXRjL0dNVAkJCQlFdGMvR01UKzAKK0xpbmsJRXRjL0dNVAkJCQlFdGMvR01UMAorCisjIFdlIHVzZSBQT1NJWC1zdHlsZSBzaWducyBpbiB0aGUgWm9uZSBuYW1lcyBhbmQgdGhlIG91dHB1dCBhYmJyZXZpYXRpb25zLAorIyBldmVuIHRob3VnaCB0aGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiB3aGF0IG1hbnkgcGVvcGxlIGV4cGVjdC4KKyMgUE9TSVggaGFzIHBvc2l0aXZlIHNpZ25zIHdlc3Qgb2YgR3JlZW53aWNoLCBidXQgbWFueSBwZW9wbGUgZXhwZWN0CisjIHBvc2l0aXZlIHNpZ25zIGVhc3Qgb2YgR3JlZW53aWNoLiAgRm9yIGV4YW1wbGUsIFRaPSdFdGMvR01UKzQnIHVzZXMKKyMgdGhlIGFiYnJldmlhdGlvbiAiR01UKzQiIGFuZCBjb3JyZXNwb25kcyB0byA0IGhvdXJzIGJlaGluZCBVVEMKKyMgKGkuZS4gd2VzdCBvZiBHcmVlbndpY2gpIGV2ZW4gdGhvdWdoIG1hbnkgcGVvcGxlIHdvdWxkIGV4cGVjdCBpdCB0bworIyBtZWFuIDQgaG91cnMgYWhlYWQgb2YgVVRDIChpLmUuIGVhc3Qgb2YgR3JlZW53aWNoKS4KKyMKKyMgSW4gdGhlIGRyYWZ0IDUgb2YgUE9TSVggMTAwMy4xLTIwMHgsIHRoZSBhbmdsZSBicmFja2V0IG5vdGF0aW9uCisjICh3aGljaCBpcyBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGUgdHogY29kZSkgYWxsb3dzIGZvcgorIyBUWj0nPEdNVC00Pis0JzsgaWYgeW91IHdhbnQgdGltZSB6b25lIGFiYnJldmlhdGlvbnMgY29uZm9ybWluZyB0bworIyBJU08gODYwMSB5b3UgY2FuIHVzZSBUWj0nPC0wNDAwPis0Jy4gIFRodXMgdGhlIGNvbW1vbmx5LWV4cGVjdGVkCisjIG9mZnNldCBpcyBrZXB0IHdpdGhpbiB0aGUgYW5nbGUgYnJhY2tldCAoYW5kIGlzIHVzZWQgZm9yIGRpc3BsYXkpCisjIHdoaWxlIHRoZSBQT1NJWCBzaWduIGlzIGtlcHQgb3V0c2lkZSB0aGUgYW5nbGUgYnJhY2tldCAoYW5kIGlzIHVzZWQKKyMgZm9yIGNhbGN1bGF0aW9uKS4KKyMKKyMgRG8gbm90IHVzZSBhIFRaIHNldHRpbmcgbGlrZSBUWj0nR01UKzQnLCB3aGljaCBpcyBmb3VyIGhvdXJzIGJlaGluZAorIyBHTVQgYnV0IHVzZXMgdGhlIGNvbXBsZXRlbHkgbWlzbGVhZGluZyBhYmJyZXZpYXRpb24gIkdNVCIuCisKKyMgRWFybGllciBpbmNhcm5hdGlvbnMgb2YgdGhpcyBwYWNrYWdlIHdlcmUgbm90IFBPU0lYLWNvbXBsaWFudCwKKyMgYW5kIGhhZCBsaW5lcyBzdWNoIGFzCisjCQlab25lCUdNVC0xMgkJLTEyCS0JR01ULTEyMDAKKyMgV2UgZGlkIG5vdCB3YW50IHRoaW5ncyB0byBjaGFuZ2UgcXVpZXRseSBpZiBzb21lb25lIGFjY3VzdG9tZWQgdG8gdGhlIG9sZAorIyB3YXkgZG9lcyBhCisjCQl6aWMgLWwgR01ULTEyCisjIHNvIHdlIG1vdmVkIHRoZSBuYW1lcyBpbnRvIHRoZSBFdGMgc3ViZGlyZWN0b3J5LgorCitab25lCUV0Yy9HTVQtMTQJMTQJLQlHTVQtMTQJIyAxNCBob3VycyBhaGVhZCBvZiBHTVQKK1pvbmUJRXRjL0dNVC0xMwkxMwktCUdNVC0xMworWm9uZQlFdGMvR01ULTEyCTEyCS0JR01ULTEyCitab25lCUV0Yy9HTVQtMTEJMTEJLQlHTVQtMTEKK1pvbmUJRXRjL0dNVC0xMAkxMAktCUdNVC0xMAorWm9uZQlFdGMvR01ULTkJOQktCUdNVC05Citab25lCUV0Yy9HTVQtOAk4CS0JR01ULTgKK1pvbmUJRXRjL0dNVC03CTcJLQlHTVQtNworWm9uZQlFdGMvR01ULTYJNgktCUdNVC02Citab25lCUV0Yy9HTVQtNQk1CS0JR01ULTUKK1pvbmUJRXRjL0dNVC00CTQJLQlHTVQtNAorWm9uZQlFdGMvR01ULTMJMwktCUdNVC0zCitab25lCUV0Yy9HTVQtMgkyCS0JR01ULTIKK1pvbmUJRXRjL0dNVC0xCTEJLQlHTVQtMQorWm9uZQlFdGMvR01UKzEJLTEJLQlHTVQrMQorWm9uZQlFdGMvR01UKzIJLTIJLQlHTVQrMgorWm9uZQlFdGMvR01UKzMJLTMJLQlHTVQrMworWm9uZQlFdGMvR01UKzQJLTQJLQlHTVQrNAorWm9uZQlFdGMvR01UKzUJLTUJLQlHTVQrNQorWm9uZQlFdGMvR01UKzYJLTYJLQlHTVQrNgorWm9uZQlFdGMvR01UKzcJLTcJLQlHTVQrNworWm9uZQlFdGMvR01UKzgJLTgJLQlHTVQrOAorWm9uZQlFdGMvR01UKzkJLTkJLQlHTVQrOQorWm9uZQlFdGMvR01UKzEwCS0xMAktCUdNVCsxMAorWm9uZQlFdGMvR01UKzExCS0xMQktCUdNVCsxMQorWm9uZQlFdGMvR01UKzEyCS0xMgktCUdNVCsxMgpkaWZmIC0tZ2l0IGEvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL2V1cm9wZSBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9ldXJvcGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzOTIxNQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9ldXJvcGUKQEAgLTAsMCArMSwyNjQ5IEBACisjIDxwcmU+CisjIEAoIylldXJvcGUJOC4yMQorIyBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorIyAyMDA5LTA1LTE3IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKworIyBUaGlzIGRhdGEgaXMgYnkgbm8gbWVhbnMgYXV0aG9yaXRhdGl2ZTsgaWYgeW91IHRoaW5rIHlvdSBrbm93IGJldHRlciwKKyMgZ28gYWhlYWQgYW5kIGVkaXQgdGhlIGZpbGUgKGFuZCBwbGVhc2Ugc2VuZCBhbnkgY2hhbmdlcyB0bworIyB0ekBlbHNpZS5uY2kubmloLmdvdiBmb3IgZ2VuZXJhbCB1c2UgaW4gdGhlIGZ1dHVyZSkuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIEEgZ29vZCBzb3VyY2UgZm9yIHRpbWUgem9uZSBoaXN0b3JpY2FsIGRhdGEgb3V0c2lkZSB0aGUgVS5TLiBpcworIyBUaG9tYXMgRy4gU2hhbmtzIGFuZCBSaXF1ZSBQb3R0ZW5nZXIsIFRoZSBJbnRlcm5hdGlvbmFsIEF0bGFzICg2dGggZWRpdGlvbiksCisjIFNhbiBEaWVnbzogQUNTIFB1YmxpY2F0aW9ucywgSW5jLiAoMjAwMykuCisjCisjIEd3aWxsaW0gTGF3IHdyaXRlcyB0aGF0IGEgZ29vZCBzb3VyY2UKKyMgZm9yIHJlY2VudCB0aW1lIHpvbmUgZGF0YSBpcyB0aGUgSW50ZXJuYXRpb25hbCBBaXIgVHJhbnNwb3J0CisjIEFzc29jaWF0aW9uJ3MgU3RhbmRhcmQgU2NoZWR1bGVzIEluZm9ybWF0aW9uIE1hbnVhbCAoSUFUQSBTU0lNKSwKKyMgcHVibGlzaGVkIHNlbWlhbm51YWxseS4gIExhdyBzZW50IGluIHNldmVyYWwgaGVscGZ1bCBzdW1tYXJpZXMKKyMgb2YgdGhlIElBVEEncyBkYXRhIGFmdGVyIDE5OTAuCisjCisjIEV4Y2VwdCB3aGVyZSBvdGhlcndpc2Ugbm90ZWQsIFNoYW5rcyAmIFBvdHRlbmdlciBpcyB0aGUgc291cmNlIGZvcgorIyBlbnRyaWVzIHRocm91Z2ggMTk5MSwgYW5kIElBVEEgU1NJTSBpcyB0aGUgc291cmNlIGZvciBlbnRyaWVzIGFmdGVyd2FyZHMuCisjCisjIE90aGVyIHNvdXJjZXMgb2NjYXNpb25hbGx5IHVzZWQgaW5jbHVkZToKKyMKKyMJRWR3YXJkIFcuIFdoaXRtYW4sIFdvcmxkIFRpbWUgRGlmZmVyZW5jZXMsCisjCVdoaXRtYW4gUHVibGlzaGluZyBDbywgMiBOaWFnYXJhIEF2LCBFYWxpbmcsIExvbmRvbiAodW5kYXRlZCksCisjCXdoaWNoIEkgZm91bmQgaW4gdGhlIFVDTEEgbGlicmFyeS4KKyMKKyMJPGEgaHJlZj0iaHR0cDovL3d3dy5wZXR0c3dvb2R2aWxsYWdlLmNvLnVrL0RheWxpZ2h0X1NhdmluZ3NfV2lsbGlhbV9XaWxsZXR0LnBkZiI+CisjCVdpbGxpYW0gV2lsbGV0dCwgVGhlIFdhc3RlIG9mIERheWxpZ2h0LCAxOXRoIGVkaXRpb24KKyMJPC9hPiAoMTkxNC0wMykKKyMKKyMJQnJhemlsJ3MgRGVwYXJ0YW1lbnRvIFNlcnZpY28gZGEgSG9yYSAoRFNIKSwKKyMJPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSElTVEhWLmh0bSI+CisjCUhpc3Rvcnkgb2YgU3VtbWVyIFRpbWUKKyMJPC9hPiAoMTk5OC0wOS0yMSwgaW4gUG9ydHVndWVzZSkKKworIworIyBJIGludmVudGVkIHRoZSBhYmJyZXZpYXRpb25zIG1hcmtlZCBgKicgaW4gdGhlIGZvbGxvd2luZyB0YWJsZTsKKyMgdGhlIHJlc3QgYXJlIGZyb20gZWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUsIG9yIGZyb20gb3RoZXIgc291cmNlcy4KKyMgQ29ycmVjdGlvbnMgYXJlIHdlbGNvbWUhCisjICAgICAgICAgICAgICAgICAgIHN0ZCBkc3QgIDJkc3QKKyMgICAgICAgICAgICAgICAgICAgTE1UICAgICAgICAgICBMb2NhbCBNZWFuIFRpbWUKKyMgICAgICAgLTQ6MDAgICAgICAgQVNUIEFEVCAgICAgICBBdGxhbnRpYworIyAgICAgICAtMzowMCAgICAgICBXR1QgV0dTVCAgICAgIFdlc3Rlcm4gR3JlZW5sYW5kKgorIyAgICAgICAtMTowMCAgICAgICBFR1QgRUdTVCAgICAgIEVhc3Rlcm4gR3JlZW5sYW5kKgorIyAgICAgICAgMDowMCAgICAgICBHTVQgQlNUICBCRFNUIEdyZWVud2ljaCwgQnJpdGlzaCBTdW1tZXIKKyMgICAgICAgIDA6MDAgICAgICAgR01UIElTVCAgICAgICBHcmVlbndpY2gsIElyaXNoIFN1bW1lcgorIyAgICAgICAgMDowMCAgICAgICBXRVQgV0VTVCBXRU1UIFdlc3Rlcm4gRXVyb3BlCisjICAgICAgICAwOjE5OjMyLjEzIEFNVCBOU1QgICAgICAgQW1zdGVyZGFtLCBOZXRoZXJsYW5kcyBTdW1tZXIgKDE4MzUtMTkzNykqCisjICAgICAgICAwOjIwICAgICAgIE5FVCBORVNUICAgICAgTmV0aGVybGFuZHMgKDE5MzctMTk0MCkqCisjICAgICAgICAxOjAwICAgICAgIENFVCBDRVNUIENFTVQgQ2VudHJhbCBFdXJvcGUKKyMgICAgICAgIDE6MDA6MTQgICAgU0VUICAgICAgICAgICBTd2VkaXNoICgxODc5LTE4OTkpKgorIyAgICAgICAgMjowMCAgICAgICBFRVQgRUVTVCAgICAgIEVhc3Rlcm4gRXVyb3BlCisjICAgICAgICAzOjAwICAgICAgIE1TSyBNU0QgICAgICAgTW9zY293CisjCisjIEEgcmVsaWFibGUgYW5kIGVudGVydGFpbmluZyBzb3VyY2UgYWJvdXQgdGltZSB6b25lcywgZXNwZWNpYWxseSBpbiBCcml0YWluLAorIyBEZXJlayBIb3dzZSwgR3JlZW53aWNoIHRpbWUgYW5kIGxvbmdpdHVkZSwgUGhpbGlwIFdpbHNvbiBQdWJsaXNoZXJzICgxOTk3KS4KKworIyBGcm9tIFBldGVyIElsaWV2ZSAoMTk5NC0xMi0wNCksCisjIFRoZSBvcmlnaW5hbCBzaXggW0VVIG1lbWJlcnNdOiBCZWxnaXVtLCBGcmFuY2UsIChXZXN0KSBHZXJtYW55LCBJdGFseSwKKyMgTHV4ZW1ib3VyZywgdGhlIE5ldGhlcmxhbmRzLgorIyBQbHVzLCBmcm9tIDEgSmFuIDczOiBEZW5tYXJrLCBJcmVsYW5kLCBVbml0ZWQgS2luZ2RvbS4KKyMgUGx1cywgZnJvbSAxIEphbiA4MTogR3JlZWNlLgorIyBQbHVzLCBmcm9tIDEgSmFuIDg2OiBTcGFpbiwgUG9ydHVnYWwuCisjIFBsdXMsIGZyb20gMSBKYW4gOTU6IEF1c3RyaWEsIEZpbmxhbmQsIFN3ZWRlbi4gKE5vcndheSBuZWdvdGlhdGVkIHRlcm1zIGZvcgorIyBlbnRyeSBidXQgaW4gYSByZWZlcmVuZHVtIG9uIDI4IE5vdiA5NCB0aGUgcGVvcGxlIHZvdGVkIE5vIGJ5IDUyLjIlIHRvIDQ3LjglCisjIG9uIGEgdHVybm91dCBvZiA4OC42JS4gVGhpcyB3YXMgYWxtb3N0IHRoZSBzYW1lIHJlc3VsdCBhcyBOb3J3YXkncyBwcmV2aW91cworIyByZWZlcmVuZHVtIGluIDE5NzIsIHRoZXkgYXJlIHRoZSBvbmx5IGNvdW50cnkgdG8gaGF2ZSBzYWlkIE5vIHR3aWNlLgorIyBSZWZlcmVuZHVtcyBpbiB0aGUgb3RoZXIgdGhyZWUgY291bnRyaWVzIHZvdGVkIFllcy4pCisjIC4uLgorIyBFc3RvbmlhIC4uLiB1c2VzIEVVIGRhdGVzIGJ1dCBub3QgYXQgMDE6MDAgR01ULCB0aGV5IHVzZSBtaWRuaWdodCBHTVQuCisjIEkgZG9uJ3QgdGhpbmsgdGhleSBrbm93IHlldCB3aGF0IHRoZXkgd2lsbCBkbyBmcm9tIDE5OTYgb253YXJkcy4KKyMgLi4uCisjIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkgW2N1cnJlbnQgbWVtYmVycyB3aG8gYXJlIG5vdCB1c2luZyBFVSBydWxlc10uCisjIEEgRGlyZWN0aXZlIGhhcyB0aGUgZm9yY2Ugb2YgbGF3LCBtZW1iZXIgc3RhdGVzIGFyZSBvYmxpZ2VkIHRvIGVuYWN0CisjIG5hdGlvbmFsIGxhdyB0byBpbXBsZW1lbnQgaXQuIFRoZSBvbmx5IGNvbnRlbnRpb3VzIGlzc3VlIHdhcyB0aGUKKyMgZGlmZmVyZW50IGVuZCBkYXRlIGZvciB0aGUgVUsgYW5kIElyZWxhbmQsIGFuZCB0aGlzIHdhcyBhbHdheXMgYWxsb3dlZAorIyBpbiB0aGUgRGlyZWN0aXZlLgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCcml0YWluIChVbml0ZWQgS2luZ2RvbSkgYW5kIElyZWxhbmQgKEVpcmUpCisKKyMgRnJvbSBQZXRlciBJbGlldmUgKDE5OTQtMDctMDYpOgorIworIyBPbiAxNyBKYW4gMTk5NCB0aGUgSW5kZXBlbmRlbnQsIGEgVUsgcXVhbGl0eSBuZXdzcGFwZXIsIGhhZCBhIHBpZWNlIGFib3V0CisjIGhpc3RvcmljYWwgdmlzdGFzIGFsb25nIHRoZSBUaGFtZXMgaW4gd2VzdCBMb25kb24uIFRoZXJlIHdhcyBhIHBob3RvCisjIGFuZCBhIHNrZXRjaCBtYXAgc2hvd2luZyBzb21lIG9mIHRoZSBzaWdodGxpbmVzIGludm9sdmVkLiBPbmUgcGFyYWdyYXBoCisjIG9mIHRoZSB0ZXh0IHNhaWQ6CisjCisjIGBBbiBvbGQgc3RvbmUgb2JlbGlzayBtYXJraW5nIGEgZm9yZ290dGVuIHRlcnJlc3RyaWFsIG1lcmlkaWFuIHN0YW5kcworIyBiZXNpZGUgdGhlIHJpdmVyIGF0IEtldy4gSW4gdGhlIDE4dGggY2VudHVyeSwgYmVmb3JlIHRpbWUgYW5kIGxvbmdpdHVkZQorIyB3YXMgc3RhbmRhcmRpc2VkIGJ5IHRoZSBSb3lhbCBPYnNlcnZhdG9yeSBpbiBHcmVlbndpY2gsIHNjaG9sYXJzIG9ic2VydmVkCisjIHRoaXMgc3RvbmUgYW5kIHRoZSBtb3ZlbWVudCBvZiBzdGFycyBmcm9tIEtldyBPYnNlcnZhdG9yeSBuZWFyYnkuIFRoZXkKKyMgbWFkZSB0aGVpciBjYWxjdWxhdGlvbnMgYW5kIHNldCB0aGUgdGltZSBmb3IgdGhlIEhvcnNlIEd1YXJkcyBhbmQgUGFybGlhbWVudCwKKyMgYnV0IG5vdyB0aGUgc3RvbmUgaXMgb2JzY3VyZWQgYnkgc2NydWJ3b29kIGFuZCBjYW4gb25seSBiZSBzZWVuIGJ5IHdhbGtpbmcKKyMgYWxvbmcgdGhlIHRvd3BhdGggd2l0aGluIGEgZmV3IHlhcmRzIG9mIGl0LicKKyMKKyMgSSBoYXZlIGEgb25lIGluY2ggdG8gb25lIG1pbGUgbWFwIG9mIExvbmRvbiBhbmQgbXkgZXN0aW1hdGUgb2YgdGhlIHN0b25lJ3MKKyMgcG9zaXRpb24gaXMgNTEgZGVnLiAyOCcgMzAiIE4sIDAgZGVnLiAxOCcgNDUiIFcuIFRoZSBsb25naXR1ZGUgc2hvdWxkCisjIGJlIHdpdGhpbiBhYm91dCArLTIiLiBUaGUgT3JkbmFuY2UgU3VydmV5IGdyaWQgcmVmZXJlbmNlIGlzIFRRMTcyNzYxLgorIworIyBbVGhpcyB5aWVsZHMgR01UT0ZGID0gLTA6MDE6MTUgZm9yIExvbmRvbiBMTVQgaW4gdGhlIDE4dGggY2VudHVyeS5dCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMTk5My0xMS0xOCk6CisjCisjIEhvd3NlIHdyaXRlcyB0aGF0IEJyaXRhaW4gd2FzIHRoZSBmaXJzdCBjb3VudHJ5IHRvIHVzZSBzdGFuZGFyZCB0aW1lLgorIyBUaGUgcmFpbHdheXMgY2FyZWQgbW9zdCBhYm91dCB0aGUgaW5jb25zaXN0ZW5jaWVzIG9mIGxvY2FsIG1lYW4gdGltZSwKKyMgYW5kIGl0IHdhcyB0aGV5IHdobyBmb3JjZWQgYSB1bmlmb3JtIHRpbWUgb24gdGhlIGNvdW50cnkuCisjIFRoZSBvcmlnaW5hbCBpZGVhIHdhcyBjcmVkaXRlZCB0byBEci4gV2lsbGlhbSBIeWRlIFdvbGxhc3RvbiAoMTc2Ni0xODI4KQorIyBhbmQgd2FzIHBvcHVsYXJpemVkIGJ5IEFicmFoYW0gRm9sbGV0dCBPc2xlciAoMTgwOC0xOTAzKS4KKyMgVGhlIGZpcnN0IHJhaWx3YXkgdG8gYWRvcHQgTG9uZG9uIHRpbWUgd2FzIHRoZSBHcmVhdCBXZXN0ZXJuIFJhaWx3YXkKKyMgaW4gTm92ZW1iZXIgMTg0MDsgb3RoZXIgcmFpbHdheXMgZm9sbG93ZWQgc3VpdCwgYW5kIGJ5IDE4NDcgbW9zdAorIyAodGhvdWdoIG5vdCBhbGwpIHJhaWx3YXlzIHVzZWQgTG9uZG9uIHRpbWUuICBPbiAxODQ3LTA5LTIyIHRoZQorIyBSYWlsd2F5IENsZWFyaW5nIEhvdXNlLCBhbiBpbmR1c3RyeSBzdGFuZGFyZHMgYm9keSwgcmVjb21tZW5kZWQgdGhhdCBHTVQgYmUKKyMgYWRvcHRlZCBhdCBhbGwgc3RhdGlvbnMgYXMgc29vbiBhcyB0aGUgR2VuZXJhbCBQb3N0IE9mZmljZSBwZXJtaXR0ZWQgaXQuCisjIFRoZSB0cmFuc2l0aW9uIG9jY3VycmVkIG9uIDEyLTAxIGZvciB0aGUgTCZOVywgdGhlIENhbGVkb25pYW4sCisjIGFuZCBwcmVzdW1hYmx5IG90aGVyIHJhaWx3YXlzOyB0aGUgSmFudWFyeSAxODQ4IEJyYWRzaGF3J3MgbGlzdHMgbWFueQorIyByYWlsd2F5cyBhcyB1c2luZyBHTVQuICBCeSAxODU1IHRoZSB2YXN0IG1ham9yaXR5IG9mIHB1YmxpYworIyBjbG9ja3MgaW4gQnJpdGFpbiB3ZXJlIHNldCB0byBHTVQgKHRob3VnaCBzb21lLCBsaWtlIHRoZSBncmVhdCBjbG9jaworIyBvbiBUb20gVG93ZXIgYXQgQ2hyaXN0IENodXJjaCwgT3hmb3JkLCB3ZXJlIGZpdHRlZCB3aXRoIHR3byBtaW51dGUgaGFuZHMsCisjIG9uZSBmb3IgbG9jYWwgdGltZSBhbmQgb25lIGZvciBHTVQpLiAgVGhlIGxhc3QgbWFqb3IgaG9sZG91dCB3YXMgdGhlIGxlZ2FsCisjIHN5c3RlbSwgd2hpY2ggc3R1YmJvcm5seSBzdHVjayB0byBsb2NhbCB0aW1lIGZvciBtYW55IHllYXJzLCBsZWFkaW5nCisjIHRvIG9kZGl0aWVzIGxpa2UgcG9sbHMgb3BlbmluZyBhdCAwODoxMyBhbmQgY2xvc2luZyBhdCAxNjoxMy4KKyMgVGhlIGxlZ2FsIHN5c3RlbSBmaW5hbGx5IHN3aXRjaGVkIHRvIEdNVCB3aGVuIHRoZSBTdGF0dXRlcyAoRGVmaW5pdGlvbgorIyBvZiBUaW1lKSBBY3QgdG9vayBlZmZlY3Q7IGl0IHJlY2VpdmVkIHRoZSBSb3lhbCBBc3NlbnQgb24gMTg4MC0wOC0wMi4KKyMKKyMgSW4gdGhlIHRhYmxlcyBiZWxvdywgd2UgY29uZGVuc2UgdGhpcyBjb21wbGljYXRlZCBzdG9yeSBpbnRvIGEgc2luZ2xlCisjIHRyYW5zaXRpb24gZGF0ZSBmb3IgTG9uZG9uLCBuYW1lbHkgMTg0Ny0xMi0wMS4gIFdlIGRvbid0IGtub3cgYXMgbXVjaAorIyBhYm91dCBEdWJsaW4sIHNvIHdlIHVzZSAxODgwLTA4LTAyLCB0aGUgbGVnYWwgdHJhbnNpdGlvbiB0aW1lLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDMtMDktMjcpOgorIyBTdW1tZXIgVGltZSB3YXMgZmlyc3Qgc2VyaW91c2x5IHByb3Bvc2VkIGJ5IFdpbGxpYW0gV2lsbGV0dCAoMTg1Ny0xOTE1KSwKKyMgYSBMb25kb24gYnVpbGRlciBhbmQgbWVtYmVyIG9mIHRoZSBSb3lhbCBBc3Ryb25vbWljYWwgU29jaWV0eQorIyB3aG8gY2lyY3VsYXRlZCBhIHBhbXBobGV0IGBgVGhlIFdhc3RlIG9mIERheWxpZ2h0JycgKDE5MDcpCisjIHRoYXQgcHJvcG9zZWQgYWR2YW5jaW5nIGNsb2NrcyAyMCBtaW51dGVzIG9uIGVhY2ggb2YgZm91ciBTdW5kYXlzIGluIEFwcmlsLAorIyBhbmQgcmV0YXJkaW5nIHRoZW0gYnkgdGhlIHNhbWUgYW1vdW50IG9uIGZvdXIgU3VuZGF5cyBpbiBTZXB0ZW1iZXIuCisjIEEgYmlsbCB3YXMgZHJhZnRlZCBpbiAxOTA5IGFuZCBpbnRyb2R1Y2VkIGluIFBhcmxpYW1lbnQgc2V2ZXJhbCB0aW1lcywKKyMgYnV0IGl0IG1ldCB3aXRoIHJpZGljdWxlIGFuZCBvcHBvc2l0aW9uLCBlc3BlY2lhbGx5IGZyb20gZmFybWluZyBpbnRlcmVzdHMuCisjIExhdGVyIGVkaXRpb25zIG9mIHRoZSBwYW1waGxldCBwcm9wb3NlZCBvbmUtaG91ciBzdW1tZXIgdGltZSwgYW5kCisjIGl0IHdhcyBldmVudHVhbGx5IGFkb3B0ZWQgYXMgYSB3YXJ0aW1lIG1lYXN1cmUgaW4gMTkxNi4KKyMgU2VlOiBTdW1tZXIgVGltZSBBcnJpdmVzIEVhcmx5LCBUaGUgVGltZXMgKDIwMDAtMDUtMTgpLgorIyBBIG1vbnVtZW50IHRvIFdpbGxldHQgd2FzIHVudmVpbGVkIG9uIDE5MjctMDUtMjEsIGluIGFuIG9wZW4gc3BhY2UgaW4KKyMgYSA0NS1hY3JlIHdvb2QgbmVhciBDaGlzbGVodXJzdCwgS2VudCB0aGF0IHdhcyBwdXJjaGFzZWQgYnkgcG9wdWxhcgorIyBzdWJzY3JpcHRpb24gYW5kIG9wZW4gdG8gdGhlIHB1YmxpYy4gIE9uIHRoZSBzb3V0aCBmYWNlIG9mIHRoZSBtb25vbGl0aCwKKyMgZGVzaWduZWQgYnkgRy4gVy4gTWlsbGVyLCBpcyB0aGUgdGhlIFdpbGxpYW0gV2lsbGV0dCBNZW1vcmlhbCBTdW5kaWFsLAorIyB3aGljaCBpcyBwZXJtYW5lbnRseSBzZXQgdG8gU3VtbWVyIFRpbWUuCisKKyMgRnJvbSBXaW5zdG9uIENodXJjaGlsbCAoMTkzNC0wNC0yOCk6CisjIEl0IGlzIG9uZSBvZiB0aGUgcGFyYWRveGVzIG9mIGhpc3RvcnkgdGhhdCB3ZSBzaG91bGQgb3dlIHRoZSBib29uIG9mCisjIHN1bW1lciB0aW1lLCB3aGljaCBnaXZlcyBldmVyeSB5ZWFyIHRvIHRoZSBwZW9wbGUgb2YgdGhpcyBjb3VudHJ5CisjIGJldHdlZW4gMTYwIGFuZCAxNzAgaG91cnMgbW9yZSBkYXlsaWdodCBsZWlzdXJlLCB0byBhIHdhciB3aGljaAorIyBwbHVuZ2VkIEV1cm9wZSBpbnRvIGRhcmtuZXNzIGZvciBmb3VyIHllYXJzLCBhbmQgc2hvb2sgdGhlCisjIGZvdW5kYXRpb25zIG9mIGNpdmlsaXphdGlvbiB0aHJvdWdob3V0IHRoZSB3b3JsZC4KKyMJLS0gPGEgaHJlZj0iaHR0cDovL3d3dy53aW5zdG9uY2h1cmNoaWxsLm9yZy9maDExNHdpbGxldHQuaHRtIj4KKyMJIkEgU2lsZW50IFRvYXN0IHRvIFdpbGxpYW0gV2lsbGV0dCIsIFBpY3RvcmlhbCBXZWVrbHkKKyMJPC9hPgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTYtMDktMDMpOgorIyBUaGUgT0VEIFN1cHBsZW1lbnQgc2F5cyB0aGF0IHRoZSBFbmdsaXNoIG9yaWdpbmFsbHkgc2FpZCBgYERheWxpZ2h0IFNhdmluZycnCisjIHdoZW4gdGhleSB3ZXJlIGRlYmF0aW5nIHRoZSBhZG9wdGlvbiBvZiBEU1QgaW4gMTkwODsgYnV0IGJ5IDE5MTYgdGhpcworIyB0ZXJtIGFwcGVhcnMgb25seSBpbiBxdW90ZXMgdGFrZW4gZnJvbSBEU1QncyBvcHBvbmVudHMsIHdoZXJlYXMgdGhlCisjIHByb3BvbmVudHMgKHdobyBldmVudHVhbGx5IHdvbiB0aGUgYXJndW1lbnQpIGFyZSBxdW90ZWQgYXMgdXNpbmcgYGBTdW1tZXInJy4KKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMTk4OS0wMS0xOSk6CisjCisjIEEgc291cmNlIGF0IHRoZSBCcml0aXNoIEluZm9ybWF0aW9uIE9mZmljZSBpbiBOZXcgWW9yayBhdmVycyB0aGF0IGl0J3MKKyMga25vd24gYXMgIkJyaXRpc2giIFN1bW1lciBUaW1lIGluIGFsbCBwYXJ0cyBvZiB0aGUgVW5pdGVkIEtpbmdkb20uCisKKyMgRGF0ZTogNCBKYW4gODkgMDg6NTc6MjUgR01UIChXZWQpCisjIEZyb206IEpvbmF0aGFuIExlZmZsZXIKKyMgW0JyaXRpc2ggU3VtbWVyIFRpbWVdIGlzIGZpeGVkIGFubnVhbGx5IGJ5IEFjdCBvZiBQYXJsaWFtZW50LgorIyBJZiB5b3UgY2FuIHByZWRpY3Qgd2hhdCBQYXJsaWFtZW50IHdpbGwgZG8sIHlvdSBzaG91bGQgYmUgaW4KKyMgcG9saXRpY3MgbWFraW5nIGEgZm9ydHVuZSwgbm90IGNvbXB1dGluZy4KKworIyBGcm9tIENocmlzIENhcnJpZXIgKDE5OTYtMDYtMTQpOgorIyBJIHJlbWVtYmVyIHJlYWRpbmcgaW4gdmFyaW91cyB3YXJ0aW1lIGlzc3VlcyBvZiB0aGUgTG9uZG9uIFRpbWVzIHRoZQorIyBhY3JvbnltIEJEU1QgZm9yIEJyaXRpc2ggRG91YmxlIFN1bW1lciBUaW1lLiAgTG9vayBmb3IgdGhlIHB1Ymxpc2hlZAorIyB0aW1lIG9mIHN1bnJpc2UgYW5kIHN1bnNldCBpbiBUaGUgVGltZXMsIHdoZW4gQkRTVCB3YXMgaW4gZWZmZWN0LCBhbmQKKyMgaWYgeW91IGZpbmQgYSB6b25lIHJlZmVyZW5jZSBpdCB3aWxsIHNheSwgIkFsbCB0aW1lcyBCLkQuUy5ULiIKKworIyBGcm9tIEpvc2VwaCBTLiBNeWVycyAoMTk5OS0wOS0wMik6CisjIC4uLiBzb21lIG1pbGl0YXJ5IGNhYmxlcyAoV08gMjE5LzQxMDAgLSB0aGlzIGlzIGEgY29weSBmcm9tIHRoZQorIyBtYWluIFNIQUVGIGFyY2hpdmVzIGhlbGQgaW4gdGhlIFVTIE5hdGlvbmFsIEFyY2hpdmVzLCBTSEFFRi81MjUyLzgvNTE2KQorIyBhZ3JlZSB0aGF0IHRoZSB1c2FnZSBpcyBCRFNUICh0aGlzIGFwcGVhcnMgaW4gYSBtZXNzYWdlIGRhdGVkIDE3IEZlYiAxOTQ1KS4KKworIyBGcm9tIEpvc2VwaCBTLiBNeWVycyAoMjAwMC0xMC0wMyk6CisjIE9uIDE4dGggQXByaWwgMTk0MSwgU2lyIFN0ZXBoZW4gVGFsbGVudHMgb2YgdGhlIEJCQyB3cm90ZSB0byBTaXIKKyMgQWxleGFuZGVyIE1heHdlbGwgb2YgdGhlIEhvbWUgT2ZmaWNlIGFza2luZyB3aGV0aGVyIHRoZXJlIHdhcyBhbnkKKyMgb2ZmaWNpYWwgZGVzaWduYXRpb247IHRoZSByZXBseSBvZiB0aGUgMjFzdCB3YXMgdGhhdCB0aGVyZSB3YXNuJ3QKKyMgYnV0IGhlIGNvdWxkbid0IHRoaW5rIG9mIGFueXRoaW5nIGJldHRlciB0aGFuIHRoZSAiRG91YmxlIEJyaXRpc2gKKyMgU3VtbWVyIFRpbWUiIHRoYXQgdGhlIEJCQyBoYWQgYmVlbiB1c2luZyBpbmZvcm1hbGx5LgorIyBodHRwOi8vc3R1ZGVudC5jdXN1LmNhbS5hYy51ay9+anNtMjgvYnJpdGlzaC10aW1lL2JiYy0xOTQxMDQxOC5wbmcKKyMgaHR0cDovL3N0dWRlbnQuY3VzdS5jYW0uYWMudWsvfmpzbTI4L2JyaXRpc2gtdGltZS9oby0xOTQxMDQyMS5wbmcKKworIyBGcm9tIFNpciBBbGV4YW5kZXIgTWF4d2VsbCBpbiB0aGUgYWJvdmUtbWVudGlvbmVkIGxldHRlciAoMTk0MS0wNC0yMSk6CisjIFtOXW8gb2ZmaWNpYWwgZGVzaWduYXRpb24gaGFzIGFzIGZhciBhcyBJIGtub3cgYmVlbiBhZG9wdGVkIGZvciB0aGUgdGltZQorIyB3aGljaCBpcyB0byBiZSBpbnRyb2R1Y2VkIGluIE1heS4uLi4KKyMgSSBjYW5ub3QgdGhpbmsgb2YgYW55dGhpbmcgYmV0dGVyIHRoYW4gIkRvdWJsZSBCcml0aXNoIFN1bW1lciBUaW1lIgorIyB3aGljaCBjb3VsZCBub3QgYmUgc2FpZCB0byBydW4gY291bnRlciB0byBhbnkgb2ZmaWNpYWwgZGVzY3JpcHRpb24uCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMC0xMC0wMik6CisjIEhvd3NlIHdyaXRlcyAocCAxNTcpIGBEQlNUJyB0b28sIGJ1dCBgQkRTVCcgc2VlbXMgdG8gaGF2ZSBiZWVuIGNvbW1vbgorIyBhbmQgZm9sbG93cyB0aGUgbW9yZSB1c3VhbCBjb252ZW50aW9uIG9mIHB1dHRpbmcgdGhlIGxvY2F0aW9uIG5hbWUgZmlyc3QsCisjIHNvIHdlIHVzZSBgQkRTVCcuCisKKyMgUGV0ZXIgSWxpZXZlICgxOTk4LTA0LTE5KSBkZXNjcmliZWQgYXQgbGVuZ3RoCisjIHRoZSBoaXN0b3J5IG9mIHN1bW1lciB0aW1lIGxlZ2lzbGF0aW9uIGluIHRoZSBVbml0ZWQgS2luZ2RvbS4KKyMgU2luY2UgMTk5OCBKb3NlcGggUy4gTXllcnMgaGFzIGJlZW4gdXBkYXRpbmcKKyMgYW5kIGV4dGVuZGluZyB0aGlzIGxpc3QsIHdoaWNoIGNhbiBiZSBmb3VuZCBpbgorIyA8YSBocmVmPSJodHRwOi8vc3R1ZGVudC5jdXN1LmNhbS5hYy51ay9+anNtMjgvYnJpdGlzaC10aW1lLyI+CisjIEhpc3Rvcnkgb2YgbGVnYWwgdGltZSBpbiBCcml0YWluCisjIDwvYT4KKworIyBGcm9tIEpvc2VwaCBTLiBNeWVycyAoMTk5OC0wMS0wNik6CisjCisjIFRoZSBsZWdhbCB0aW1lIGluIHRoZSBVSyBvdXRzaWRlIG9mIHN1bW1lciB0aW1lIGlzIGRlZmluaXRlbHkgR01ULCBub3QgVVRDOworIyBzZWUgTG9yZCBUYW5sYXcncyBzcGVlY2gKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5wYXJsaWFtZW50LnRoZS1zdGF0aW9uZXJ5LW9mZmljZS5jby51ay9wYS9sZDE5OTY5Ny9sZGhhbnNyZC9wZHZuL2xkczk3L3RleHQvNzA2MTEtMjAuaHRtIzcwNjExLTIwX2hlYWQwIj4KKyMgKExvcmRzIEhhbnNhcmQgMTEgSnVuZSAxOTk3IGNvbHVtbnMgOTY0IHRvIDk3NikKKyMgPC9hPi4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMKKyMgRm9yIGxhY2sgb2Ygb3RoZXIgZGF0YSwgZm9sbG93IFNoYW5rcyAmIFBvdHRlbmdlciBmb3IgRWlyZSBpbiAxOTQwLTE5NDguCisjCisjIEdpdmVuIElsaWV2ZSBhbmQgTXllcnMncyBkYXRhLCB0aGUgZm9sbG93aW5nIGNsYWltcyBieSBTaGFua3MgJiBQb3R0ZW5nZXIKKyMgYXJlIGluY29ycmVjdDoKKyMgICAgICogV2FsZXMgZGlkIG5vdCBzd2l0Y2ggZnJvbSBHTVQgdG8gZGF5bGlnaHQgc2F2aW5nIHRpbWUgdW50aWwKKyMJMTkyMSBBcHIgMywgd2hlbiB0aGV5IGJlZ2FuIHRvIGNvbmZvcm0gd2l0aCB0aGUgcmVzdCBvZiBHcmVhdCBCcml0YWluLgorIyBBY3R1YWxseSwgV2FsZXMgd2FzIGlkZW50aWNhbCBhZnRlciAxODgwLgorIyAgICAgKiBFaXJlIGhhZCB0d28gdHJhbnNpdGlvbnMgb24gMTkxNiBPY3QgMS4KKyMgSXQgYWN0dWFsbHkganVzdCBoYWQgb25lIHRyYW5zaXRpb24uCisjICAgICAqIE5vcnRoZXJuIElyZWxhbmQgdXNlZCBzaW5nbGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgdGhyb3VnaG91dCBXVyBJSS4KKyMgQWN0dWFsbHksIGl0IGNvbmZvcm1lZCB0byBCcml0YWluLgorIyAgICAgKiBHQi1FaXJlIGNoYW5nZWQgc3RhbmRhcmQgdGltZSB0byAxIGhvdXIgYWhlYWQgb2YgR01UIG9uIDE5NjgtMDItMTguCisjIEFjdHVhbGx5LCB0aGF0IGRhdGUgc2F3IHRoZSB1c3VhbCBzd2l0Y2ggdG8gc3VtbWVyIHRpbWUuCisjIFN0YW5kYXJkIHRpbWUgd2FzIG5vdCBjaGFuZ2VkIHVudGlsIDE5NjgtMTAtMjcgKHRoZSBjbG9ja3MgZGlkbid0IGNoYW5nZSkuCisjCisjIEhlcmUgaXMgYW5vdGhlciBpbmNvcnJlY3QgY2xhaW0gYnkgU2hhbmtzICYgUG90dGVuZ2VyOgorIyAgICAgKiBKZXJzZXksIEd1ZXJuc2V5LCBhbmQgdGhlIElzbGUgb2YgTWFuIGRpZCBub3Qgc3dpdGNoIGZyb20gR01UCisjCXRvIGRheWxpZ2h0IHNhdmluZyB0aW1lIHVudGlsIDE5MjEgQXByIDMsIHdoZW4gdGhleSBiZWdhbiB0bworIwljb25mb3JtIHdpdGggR3JlYXQgQnJpdGFpbi4KKyMgUy5SLiZPLiAxOTE2LCBOby4gMzgyIGFuZCBITyA0NS8xMDgxMS8zMTIzNjQgKHF1b3RlZCBhYm92ZSkgc2F5IG90aGVyd2lzZS4KKyMKKyMgVGhlIGZvbGxvd2luZyBjbGFpbSBieSBTaGFua3MgJiBQb3R0ZW5nZXIgaXMgcG9zc2libGUgdGhvdWdoIGRvdWJ0ZnVsOworIyB3ZSdsbCBpZ25vcmUgaXQgZm9yIG5vdy4KKyMgICAgICogRHVibGluJ3MgMTk3MS0xMC0zMSBzd2l0Y2ggd2FzIGF0IDAyOjAwLCBldmVuIHRob3VnaCBMb25kb24ncyB3YXMgMDM6MDAuCisjCisjCisjIFdoaXRtYW4gc2F5cyBEdWJsaW4gTWVhbiBUaW1lIHdhcyAtMDoyNToyMSwgd2hpY2ggaXMgbW9yZSBwcmVjaXNlIHRoYW4KKyMgU2hhbmtzICYgUG90dGVuZ2VyLgorIyBQZXJoYXBzIHRoaXMgd2FzIER1bnNpbmsgT2JzZXJ2YXRvcnkgVGltZSwgYXMgRHVuc2luayBPYnNlcnZhdG9yeQorIyAoOCBrbSBOVyBvZiBEdWJsaW4ncyBjZW50ZXIpIHNlZW1pbmdseSB3YXMgdG8gRHVibGluIGFzIEdyZWVud2ljaCB3YXMKKyMgdG8gTG9uZG9uLiAgRm9yIGV4YW1wbGU6CisjCisjICAgIlRpbWViYWxsIG9uIHRoZSBiYWxsYXN0IG9mZmljZSBpcyBkb3duLiAgRHVuc2luayB0aW1lLiIKKyMgICAtLSBKYW1lcyBKb3ljZSwgVWx5c3NlcworCisjIEZyb20gSm9zZXBoIFMuIE15ZXJzICgyMDA1LTAxLTI2KToKKyMgSXJpc2ggbGF3cyBhcmUgYXZhaWxhYmxlIG9ubGluZSBhdCB3d3cuaXJpc2hzdGF0dXRlYm9vay5pZS4gIFRoZXNlIGluY2x1ZGUKKyMgdmFyaW91cyByZWxhdGluZyB0byBsZWdhbCB0aW1lLCBmb3IgZXhhbXBsZToKKyMKKyMgWlpBMTNZMTkyMy5odG1sIFpaQTEyWTE5MjQuaHRtbCBaWkE4WTE5MjUuaHRtbCBaWlNJVjIwUEcxMjY3Lmh0bWwKKyMKKyMgWlpTSTcxWTE5NDcuaHRtbCBaWlNJMTI4WTE5NDguaHRtbCBaWlNJMjNZMTk0OS5odG1sIFpaU0k0MVkxOTUwLmh0bWwKKyMgWlpTSTI3WTE5NTEuaHRtbCBaWlNJNzNZMTk1Mi5odG1sCisjCisjIFpaU0kxMVkxOTYxLmh0bWwgWlpTSTIzMlkxOTYxLmh0bWwgWlpTSTE4MlkxOTYyLmh0bWwKKyMgWlpTSTE2N1kxOTYzLmh0bWwgWlpTSTI1N1kxOTY0Lmh0bWwgWlpTSTE5OFkxOTY3Lmh0bWwKKyMgWlpBMjNZMTk2OC5odG1sIFpaQTE3WTE5NzEuaHRtbAorIworIyBaWlNJNjdZMTk4MS5odG1sIFpaU0kyMTJZMTk4Mi5odG1sIFpaU0k0NVkxOTg2Lmh0bWwKKyMgWlpTSTI2NFkxOTg4Lmh0bWwgWlpTSTUyWTE5OTAuaHRtbCBaWlNJMzcxWTE5OTIuaHRtbAorIyBaWlNJMzk1WTE5OTQuaHRtbCBaWlNJNDg0WTE5OTcuaHRtbCBaWlNJNTA2WTIwMDEuaHRtbAorIworIyBbVGhlc2UgYXJlIGFsbCByZWxhdGl2ZSB0byB0aGUgcm9vdCwgZS5nLiwgdGhlIGZpcnN0IGlzCisjIDxodHRwOi8vd3d3LmlyaXNoc3RhdHV0ZWJvb2suaWUvWlpBMTNZMTkyMy5odG1sPi5dCisjCisjIChUaGVzZSBhcmUgdGhvc2UgSSBmb3VuZCwgYnV0IHRoZXJlIGNvdWxkIGJlIG1vcmUuICBJbiBhbnkgY2FzZSB0aGVzZQorIyBzaG91bGQgYWxsb3cgdmFyaW91cyB1cGRhdGVzIHRvIHRoZSBjb21tZW50cyBpbiB0aGUgZXVyb3BlIGZpbGUgdG8gY292ZXIKKyMgdGhlIGxhd3MgYXBwbGljYWJsZSBpbiBJcmVsYW5kLikKKyMKKyMgKE5vdGUgdGhhdCB0aGUgdGltZSBpbiB0aGUgUmVwdWJsaWMgb2YgSXJlbGFuZCBzaW5jZSAxOTY4IGhhcyBiZWVuIGRlZmluZWQKKyMgaW4gdGVybXMgb2Ygc3RhbmRhcmQgdGltZSBiZWluZyBHTVQrMSB3aXRoIGEgcGVyaW9kIG9mIHdpbnRlciB0aW1lIHdoZW4gaXQKKyMgaXMgR01ULCByYXRoZXIgdGhhbiBzdGFuZGFyZCB0aW1lIGJlaW5nIEdNVCB3aXRoIGEgcGVyaW9kIG9mIHN1bW1lciB0aW1lCisjIGJlaW5nIEdNVCsxLikKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgxOTk5LTAzLTI4KToKKyMgQ2xpdmUgRmVhdGhlciAoPG5ld3M6ODU5ODQ1NzA2LjI2MDQzLjBAb2ZmaWNlLmRlbW9uLm5ldD4sIDE5OTctMDMtMzEpCisjIHJlcG9ydHMgdGhhdCBGb2xrZXN0b25lIChDaGVyaXRvbikgU2h1dHRsZSBUZXJtaW5hbCB1c2VzIENvbmNlc3Npb24gVGltZQorIyAoQ1QpLCBlcXVpdmFsZW50IHRvIEZyZW5jaCBjaXZpbCB0aW1lLgorIyBKdWxpYW4gSGlsbCAoPG5ld3M6MzYxMTgxMjguNUExNEB2aXJnaW4ubmV0PiwgMTk5OC0wOS0zMCkgcmVwb3J0cyB0aGF0CisjIHRyYWlucyBiZXR3ZWVuIERvbGxhbmRzIE1vb3IgKHRoZSBmcmVpZ2h0IGZhY2lsaXR5IG5leHQgZG9vcikKKyMgYW5kIEZyZXRodW4gcnVuIGluIENULgorIyBNeSBhZG1pdHRlZGx5IHVuaW5mb3JtZWQgZ3Vlc3MgaXMgdGhhdCB0aGUgdGVybWluYWwgaGFzIHR3byBhdXRob3JpdGllcywKKyMgdGhlIEZyZW5jaCBjb25jZXNzaW9uIG9wZXJhdG9ycyBhbmQgdGhlIEJyaXRpc2ggY2l2aWwgYXV0aG9yaXRpZXMsCisjIGFuZCB0aGF0IHRoZSB0aW1lIGRlcGVuZHMgb24gd2hvIHlvdSdyZSB0YWxraW5nIHRvLgorIyBJZiwgc2F5LCB0aGUgQnJpdGlzaCBwb2xpY2Ugd2VyZSBjYWxsZWQgdG8gdGhlIHN0YXRpb24gZm9yIHNvbWUgcmVhc29uLAorIyBJIHdvdWxkIGV4cGVjdCB0aGUgb2ZmaWNpYWwgcG9saWNlIHJlcG9ydCB0byB1c2UgR01UL0JTVCBhbmQgbm90IENFVC9DRVNULgorIyBUaGlzIGlzIGEgYm9yZGVybGluZSBjYXNlLCBidXQgZm9yIG5vdyBsZXQncyBzdGljayB0byBHTVQvQlNULgorCisjIEZyb20gYW4gYW5vbnltb3VzIGNvbnRyaWJ1dG9yICgxOTk2LTA2LTAyKToKKyMgVGhlIGxhdyBnb3Zlcm5pbmcgdGltZSBpbiBJcmVsYW5kIGlzIHVuZGVyIFN0YXR1dG9yeSBJbnN0cnVtZW50IFNJIDM5NS85NCwKKyMgd2hpY2ggZ2l2ZXMgZm9yY2UgdG8gRXVyb3BlYW4gVW5pb24gN3RoIENvdW5jaWwgRGlyZWN0aXZlICMgOTQvMjEvRUMuCisjIFVuZGVyIHRoaXMgZGlyZWN0aXZlLCB0aGUgTWluaXN0ZXIgZm9yIEp1c3RpY2UgaW4gSXJlbGFuZCBtYWtlcyBhcHByb3ByaWF0ZQorIyByZWd1bGF0aW9ucy4gSSBzcG9rZSB0aGlzIG1vcm5pbmcgd2l0aCB0aGUgU2VjcmV0YXJ5IG9mIHRoZSBEZXBhcnRtZW50IG9mCisjIEp1c3RpY2UgKHRlbCArMzUzIDEgNjc4IDk3MTEpIHdobyBjb25maXJtZWQgdG8gbWUgdGhhdCB0aGUgY29ycmVjdCBuYW1lIGlzCisjICJJcmlzaCBTdW1tZXIgVGltZSIsIGFiYnJldmlhdGVkIHRvICJJU1QiLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworIyBTdW1tZXIgVGltZSBBY3QsIDE5MTYKK1J1bGUJR0ItRWlyZQkxOTE2CW9ubHkJLQlNYXkJMjEJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTE2CW9ubHkJLQlPY3QJIDEJMjowMHMJMAlHTVQKKyMgUy5SLiZPLiAxOTE3LCBOby4gMzU4CitSdWxlCUdCLUVpcmUJMTkxNwlvbmx5CS0JQXByCSA4CTI6MDBzCTE6MDAJQlNUCitSdWxlCUdCLUVpcmUJMTkxNwlvbmx5CS0JU2VwCTE3CTI6MDBzCTAJR01UCisjIFMuUi4mTy4gMTkxOCwgTm8uIDI3NAorUnVsZQlHQi1FaXJlCTE5MTgJb25seQktCU1hcgkyNAkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5MTgJb25seQktCVNlcAkzMAkyOjAwcwkwCUdNVAorIyBTLlIuJk8uIDE5MTksIE5vLiAyOTcKK1J1bGUJR0ItRWlyZQkxOTE5CW9ubHkJLQlNYXIJMzAJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTE5CW9ubHkJLQlTZXAJMjkJMjowMHMJMAlHTVQKKyMgUy5SLiZPLiAxOTIwLCBOby4gNDU4CitSdWxlCUdCLUVpcmUJMTkyMAlvbmx5CS0JTWFyCTI4CTI6MDBzCTE6MDAJQlNUCisjIFMuUi4mTy4gMTkyMCwgTm8uIDE4NDQKK1J1bGUJR0ItRWlyZQkxOTIwCW9ubHkJLQlPY3QJMjUJMjowMHMJMAlHTVQKKyMgUy5SLiZPLiAxOTIxLCBOby4gMzYzCitSdWxlCUdCLUVpcmUJMTkyMQlvbmx5CS0JQXByCSAzCTI6MDBzCTE6MDAJQlNUCitSdWxlCUdCLUVpcmUJMTkyMQlvbmx5CS0JT2N0CSAzCTI6MDBzCTAJR01UCisjIFMuUi4mTy4gMTkyMiwgTm8uIDI2NAorUnVsZQlHQi1FaXJlCTE5MjIJb25seQktCU1hcgkyNgkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5MjIJb25seQktCU9jdAkgOAkyOjAwcwkwCUdNVAorIyBUaGUgU3VtbWVyIFRpbWUgQWN0LCAxOTIyCitSdWxlCUdCLUVpcmUJMTkyMwlvbmx5CS0JQXByCVN1bj49MTYJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTIzCTE5MjQJLQlTZXAJU3VuPj0xNgkyOjAwcwkwCUdNVAorUnVsZQlHQi1FaXJlCTE5MjQJb25seQktCUFwcglTdW4+PTkJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTI1CTE5MjYJLQlBcHIJU3VuPj0xNgkyOjAwcwkxOjAwCUJTVAorIyBUaGUgU3VtbWVyIFRpbWUgQWN0LCAxOTI1CitSdWxlCUdCLUVpcmUJMTkyNQkxOTM4CS0JT2N0CVN1bj49MgkyOjAwcwkwCUdNVAorUnVsZQlHQi1FaXJlCTE5MjcJb25seQktCUFwcglTdW4+PTkJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTI4CTE5MjkJLQlBcHIJU3VuPj0xNgkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5MzAJb25seQktCUFwcglTdW4+PTkJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTMxCTE5MzIJLQlBcHIJU3VuPj0xNgkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5MzMJb25seQktCUFwcglTdW4+PTkJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTM0CW9ubHkJLQlBcHIJU3VuPj0xNgkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5MzUJb25seQktCUFwcglTdW4+PTkJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTM2CTE5MzcJLQlBcHIJU3VuPj0xNgkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5MzgJb25seQktCUFwcglTdW4+PTkJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTM5CW9ubHkJLQlBcHIJU3VuPj0xNgkyOjAwcwkxOjAwCUJTVAorIyBTLlIuJk8uIDE5MzksIE5vLiAxMzc5CitSdWxlCUdCLUVpcmUJMTkzOQlvbmx5CS0JTm92CVN1bj49MTYJMjowMHMJMAlHTVQKKyMgUy5SLiZPLiAxOTQwLCBOby4gMTcyIGFuZCBOby4gMTg4MworUnVsZQlHQi1FaXJlCTE5NDAJb25seQktCUZlYglTdW4+PTIzCTI6MDBzCTE6MDAJQlNUCisjIFMuUi4mTy4gMTk0MSwgTm8uIDQ3NgorUnVsZQlHQi1FaXJlCTE5NDEJb25seQktCU1heQlTdW4+PTIJMTowMHMJMjowMAlCRFNUCitSdWxlCUdCLUVpcmUJMTk0MQkxOTQzCS0JQXVnCVN1bj49OQkxOjAwcwkxOjAwCUJTVAorIyBTLlIuJk8uIDE5NDIsIE5vLiA1MDYKK1J1bGUJR0ItRWlyZQkxOTQyCTE5NDQJLQlBcHIJU3VuPj0yCTE6MDBzCTI6MDAJQkRTVAorIyBTLlIuJk8uIDE5NDQsIE5vLiA5MzIKK1J1bGUJR0ItRWlyZQkxOTQ0CW9ubHkJLQlTZXAJU3VuPj0xNgkxOjAwcwkxOjAwCUJTVAorIyBTLlIuJk8uIDE5NDUsIE5vLiAzMTIKK1J1bGUJR0ItRWlyZQkxOTQ1CW9ubHkJLQlBcHIJTW9uPj0yCTE6MDBzCTI6MDAJQkRTVAorUnVsZQlHQi1FaXJlCTE5NDUJb25seQktCUp1bAlTdW4+PTkJMTowMHMJMTowMAlCU1QKKyMgUy5SLiZPLiAxOTQ1LCBOby4gMTIwOAorUnVsZQlHQi1FaXJlCTE5NDUJMTk0NgktCU9jdAlTdW4+PTIJMjowMHMJMAlHTVQKK1J1bGUJR0ItRWlyZQkxOTQ2CW9ubHkJLQlBcHIJU3VuPj05CTI6MDBzCTE6MDAJQlNUCisjIFRoZSBTdW1tZXIgVGltZSBBY3QsIDE5NDcKK1J1bGUJR0ItRWlyZQkxOTQ3CW9ubHkJLQlNYXIJMTYJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTQ3CW9ubHkJLQlBcHIJMTMJMTowMHMJMjowMAlCRFNUCitSdWxlCUdCLUVpcmUJMTk0Nwlvbmx5CS0JQXVnCTEwCTE6MDBzCTE6MDAJQlNUCitSdWxlCUdCLUVpcmUJMTk0Nwlvbmx5CS0JTm92CSAyCTI6MDBzCTAJR01UCisjIFN1bW1lciBUaW1lIE9yZGVyLCAxOTQ4IChTLkkuIDE5NDgvNDk1KQorUnVsZQlHQi1FaXJlCTE5NDgJb25seQktCU1hcgkxNAkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5NDgJb25seQktCU9jdAkzMQkyOjAwcwkwCUdNVAorIyBTdW1tZXIgVGltZSBPcmRlciwgMTk0OSAoUy5JLiAxOTQ5LzM3MykKK1J1bGUJR0ItRWlyZQkxOTQ5CW9ubHkJLQlBcHIJIDMJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTQ5CW9ubHkJLQlPY3QJMzAJMjowMHMJMAlHTVQKKyMgU3VtbWVyIFRpbWUgT3JkZXIsIDE5NTAgKFMuSS4gMTk1MC81MTgpCisjIFN1bW1lciBUaW1lIE9yZGVyLCAxOTUxIChTLkkuIDE5NTEvNDMwKQorIyBTdW1tZXIgVGltZSBPcmRlciwgMTk1MiAoUy5JLiAxOTUyLzQ1MSkKK1J1bGUJR0ItRWlyZQkxOTUwCTE5NTIJLQlBcHIJU3VuPj0xNAkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5NTAJMTk1MgktCU9jdAlTdW4+PTIxCTI6MDBzCTAJR01UCisjIHJldmVydCB0byB0aGUgcnVsZXMgb2YgdGhlIFN1bW1lciBUaW1lIEFjdCwgMTkyNQorUnVsZQlHQi1FaXJlCTE5NTMJb25seQktCUFwcglTdW4+PTE2CTI6MDBzCTE6MDAJQlNUCitSdWxlCUdCLUVpcmUJMTk1MwkxOTYwCS0JT2N0CVN1bj49MgkyOjAwcwkwCUdNVAorUnVsZQlHQi1FaXJlCTE5NTQJb25seQktCUFwcglTdW4+PTkJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTU1CTE5NTYJLQlBcHIJU3VuPj0xNgkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5NTcJb25seQktCUFwcglTdW4+PTkJMjowMHMJMTowMAlCU1QKK1J1bGUJR0ItRWlyZQkxOTU4CTE5NTkJLQlBcHIJU3VuPj0xNgkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5NjAJb25seQktCUFwcglTdW4+PTkJMjowMHMJMTowMAlCU1QKKyMgU3VtbWVyIFRpbWUgT3JkZXIsIDE5NjEgKFMuSS4gMTk2MS83MSkKKyMgU3VtbWVyIFRpbWUgKDE5NjIpIE9yZGVyLCAxOTYxIChTLkkuIDE5NjEvMjQ2NSkKKyMgU3VtbWVyIFRpbWUgT3JkZXIsIDE5NjMgKFMuSS4gMTk2My84MSkKK1J1bGUJR0ItRWlyZQkxOTYxCTE5NjMJLQlNYXIJbGFzdFN1bgkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5NjEJMTk2OAktCU9jdAlTdW4+PTIzCTI6MDBzCTAJR01UCisjIFN1bW1lciBUaW1lICgxOTY0KSBPcmRlciwgMTk2MyAoUy5JLiAxOTYzLzIxMDEpCisjIFN1bW1lciBUaW1lIE9yZGVyLCAxOTY0IChTLkkuIDE5NjQvMTIwMSkKKyMgU3VtbWVyIFRpbWUgT3JkZXIsIDE5NjcgKFMuSS4gMTk2Ny8xMTQ4KQorUnVsZQlHQi1FaXJlCTE5NjQJMTk2NwktCU1hcglTdW4+PTE5CTI6MDBzCTE6MDAJQlNUCisjIFN1bW1lciBUaW1lIE9yZGVyLCAxOTY4IChTLkkuIDE5NjgvMTE3KQorUnVsZQlHQi1FaXJlCTE5NjgJb25seQktCUZlYgkxOAkyOjAwcwkxOjAwCUJTVAorIyBUaGUgQnJpdGlzaCBTdGFuZGFyZCBUaW1lIEFjdCwgMTk2OAorIwkobm8gc3VtbWVyIHRpbWUpCisjIFRoZSBTdW1tZXIgVGltZSBBY3QsIDE5NzIKK1J1bGUJR0ItRWlyZQkxOTcyCTE5ODAJLQlNYXIJU3VuPj0xNgkyOjAwcwkxOjAwCUJTVAorUnVsZQlHQi1FaXJlCTE5NzIJMTk4MAktCU9jdAlTdW4+PTIzCTI6MDBzCTAJR01UCisjIFN1bW1lciBUaW1lIE9yZGVyLCAxOTgwIChTLkkuIDE5ODAvMTA4OSkKKyMgU3VtbWVyIFRpbWUgT3JkZXIsIDE5ODIgKFMuSS4gMTk4Mi8xNjczKQorIyBTdW1tZXIgVGltZSBPcmRlciwgMTk4NiAoUy5JLiAxOTg2LzIyMykKKyMgU3VtbWVyIFRpbWUgT3JkZXIsIDE5ODggKFMuSS4gMTk4OC85MzEpCitSdWxlCUdCLUVpcmUJMTk4MQkxOTk1CS0JTWFyCWxhc3RTdW4JMTowMHUJMTowMAlCU1QKK1J1bGUJR0ItRWlyZSAxOTgxCTE5ODkJLQlPY3QJU3VuPj0yMwkxOjAwdQkwCUdNVAorIyBTdW1tZXIgVGltZSBPcmRlciwgMTk4OSAoUy5JLiAxOTg5Lzk4NSkKKyMgU3VtbWVyIFRpbWUgT3JkZXIsIDE5OTIgKFMuSS4gMTk5Mi8xNzI5KQorIyBTdW1tZXIgVGltZSBPcmRlciAxOTk0IChTLkkuIDE5OTQvMjc5OCkKK1J1bGUJR0ItRWlyZSAxOTkwCTE5OTUJLQlPY3QJU3VuPj0yMgkxOjAwdQkwCUdNVAorIyBTdW1tZXIgVGltZSBPcmRlciAxOTk3IChTLkkuIDE5OTcvMjk4MikKKyMgU2VlIEVVIGZvciBydWxlcyBzdGFydGluZyBpbiAxOTk2LgorCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUV1cm9wZS9Mb25kb24JLTA6MDE6MTUgLQlMTVQJMTg0NyBEZWMgIDEgMDowMHMKKwkJCSAwOjAwCUdCLUVpcmUJJXMJMTk2OCBPY3QgMjcKKwkJCSAxOjAwCS0JQlNUCTE5NzEgT2N0IDMxIDI6MDB1CisJCQkgMDowMAlHQi1FaXJlCSVzCTE5OTYKKwkJCSAwOjAwCUVVCUdNVC9CU1QKK0xpbmsJRXVyb3BlL0xvbmRvbglFdXJvcGUvSmVyc2V5CitMaW5rCUV1cm9wZS9Mb25kb24JRXVyb3BlL0d1ZXJuc2V5CitMaW5rCUV1cm9wZS9Mb25kb24JRXVyb3BlL0lzbGVfb2ZfTWFuCitab25lCUV1cm9wZS9EdWJsaW4JLTA6MjU6MDAgLQlMTVQJMTg4MCBBdWcgIDIKKwkJCS0wOjI1OjIxIC0JRE1UCTE5MTYgTWF5IDIxIDI6MDAKKwkJCS0wOjI1OjIxIDE6MDAJSVNUCTE5MTYgT2N0ICAxIDI6MDBzCisJCQkgMDowMAlHQi1FaXJlCSVzCTE5MjEgRGVjICA2ICMgaW5kZXBlbmRlbmNlCisJCQkgMDowMAlHQi1FaXJlCUdNVC9JU1QJMTk0MCBGZWIgMjUgMjowMAorCQkJIDA6MDAJMTowMAlJU1QJMTk0NiBPY3QgIDYgMjowMAorCQkJIDA6MDAJLQlHTVQJMTk0NyBNYXIgMTYgMjowMAorCQkJIDA6MDAJMTowMAlJU1QJMTk0NyBOb3YgIDIgMjowMAorCQkJIDA6MDAJLQlHTVQJMTk0OCBBcHIgMTggMjowMAorCQkJIDA6MDAJR0ItRWlyZQlHTVQvSVNUCTE5NjggT2N0IDI3CisJCQkgMTowMAktCUlTVAkxOTcxIE9jdCAzMSAyOjAwdQorCQkJIDA6MDAJR0ItRWlyZQlHTVQvSVNUCTE5OTYKKwkJCSAwOjAwCUVVCUdNVC9JU1QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEV1cm9wZQorCisjIEVVIHJ1bGVzIGFyZSBmb3IgdGhlIEV1cm9wZWFuIFVuaW9uLCBwcmV2aW91c2x5IGtub3duIGFzIHRoZSBFQywgRUVDLAorIyBDb21tb24gTWFya2V0LCBldGMuCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUVVCTE5NzcJMTk4MAktCUFwcglTdW4+PTEJIDE6MDB1CTE6MDAJUworUnVsZQlFVQkxOTc3CW9ubHkJLQlTZXAJbGFzdFN1bgkgMTowMHUJMAktCitSdWxlCUVVCTE5NzgJb25seQktCU9jdAkgMQkgMTowMHUJMAktCitSdWxlCUVVCTE5NzkJMTk5NQktCVNlcAlsYXN0U3VuCSAxOjAwdQkwCS0KK1J1bGUJRVUJMTk4MQltYXgJLQlNYXIJbGFzdFN1bgkgMTowMHUJMTowMAlTCitSdWxlCUVVCTE5OTYJbWF4CS0JT2N0CWxhc3RTdW4JIDE6MDB1CTAJLQorIyBUaGUgbW9zdCByZWNlbnQgZGlyZWN0aXZlIGNvdmVycyB0aGUgeWVhcnMgc3RhcnRpbmcgaW4gMjAwMi4gIFNlZToKKyMgPGEgaHJlZj0iaHR0cDovL2V1cm9wYS5ldS5pbnQvZXVyLWxleC9lbi9saWYvZGF0LzIwMDAvZW5fMzAwTDAwODQuaHRtbCI+CisjIERpcmVjdGl2ZSAyMDAwLzg0L0VDIG9mIHRoZSBFdXJvcGVhbiBQYXJsaWFtZW50IGFuZCBvZiB0aGUgQ291bmNpbAorIyBvZiAxOSBKYW51YXJ5IDIwMDEgb24gc3VtbWVyLXRpbWUgYXJyYW5nZW1lbnRzLgorIyA8L2E+CisKKyMgVy1FdXIgZGlmZmVycyBmcm9tIEVVIG9ubHkgaW4gdGhhdCBXLUV1ciB1c2VzIHN0YW5kYXJkIHRpbWUuCitSdWxlCVctRXVyCTE5NzcJMTk4MAktCUFwcglTdW4+PTEJIDE6MDBzCTE6MDAJUworUnVsZQlXLUV1cgkxOTc3CW9ubHkJLQlTZXAJbGFzdFN1bgkgMTowMHMJMAktCitSdWxlCVctRXVyCTE5NzgJb25seQktCU9jdAkgMQkgMTowMHMJMAktCitSdWxlCVctRXVyCTE5NzkJMTk5NQktCVNlcAlsYXN0U3VuCSAxOjAwcwkwCS0KK1J1bGUJVy1FdXIJMTk4MQltYXgJLQlNYXIJbGFzdFN1bgkgMTowMHMJMTowMAlTCitSdWxlCVctRXVyCTE5OTYJbWF4CS0JT2N0CWxhc3RTdW4JIDE6MDBzCTAJLQorCisjIE9sZGVyIEMtRXVyIHJ1bGVzIGFyZSBmb3IgY29udmVuaWVuY2UgaW4gdGhlIHRhYmxlcy4KKyMgRnJvbSAxOTc3IG9uLCBDLUV1ciBkaWZmZXJzIGZyb20gRVUgb25seSBpbiB0aGF0IEMtRXVyIHVzZXMgc3RhbmRhcmQgdGltZS4KK1J1bGUJQy1FdXIJMTkxNglvbmx5CS0JQXByCTMwCTIzOjAwCTE6MDAJUworUnVsZQlDLUV1cgkxOTE2CW9ubHkJLQlPY3QJIDEJIDE6MDAJMAktCitSdWxlCUMtRXVyCTE5MTcJMTkxOAktCUFwcglNb24+PTE1CSAyOjAwcwkxOjAwCVMKK1J1bGUJQy1FdXIJMTkxNwkxOTE4CS0JU2VwCU1vbj49MTUJIDI6MDBzCTAJLQorUnVsZQlDLUV1cgkxOTQwCW9ubHkJLQlBcHIJIDEJIDI6MDBzCTE6MDAJUworUnVsZQlDLUV1cgkxOTQyCW9ubHkJLQlOb3YJIDIJIDI6MDBzCTAJLQorUnVsZQlDLUV1cgkxOTQzCW9ubHkJLQlNYXIJMjkJIDI6MDBzCTE6MDAJUworUnVsZQlDLUV1cgkxOTQzCW9ubHkJLQlPY3QJIDQJIDI6MDBzCTAJLQorUnVsZQlDLUV1cgkxOTQ0CTE5NDUJLQlBcHIJTW9uPj0xCSAyOjAwcwkxOjAwCVMKKyMgV2hpdG1hbiBnaXZlcyAxOTQ0IE9jdCA3OyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJQy1FdXIJMTk0NAlvbmx5CS0JT2N0CSAyCSAyOjAwcwkwCS0KKyMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDgtMDctMTMpOgorIworIyBJIGZvdW5kIHdoYXQgaXMgcHJvYmFibHkgYSB0eXBvIG9mIDI6MDAgd2hpY2ggc2hvdWxkIHBlcmhhcHMgYmUgMjowMHMKKyMgaW4gdGhlIEMtRXVyIHJ1bGUgZnJvbSB0eiBkYXRhYmFzZSB2ZXJzaW9uIDIwMDhkICh0aGlzIHBhcnQgd2FzCisjIGNvcnJlY3RlZCBpbiB2ZXJzaW9uIDIwMDhkKS4gVGhlIGNpcmN1bXN0YW5jaWFsIGV2aWRlbmNlIGlzIHNpbXBseSB0aGUKKyMgdHogZGF0YWJhc2UgaXRzZWxmLCBhcyBzZWVuIGJlbG93OgorIworIyBab25lIEV1cm9wZS9QYXJpcyAwOjA5OjIxIC0gTE1UIDE4OTEgTWFyIDE1ICAwOjAxCisjICAgIDA6MDAgRnJhbmNlIFdFJXNUIDE5NDUgU2VwIDE2ICAzOjAwCisjCisjIFpvbmUgRXVyb3BlL01vbmFjbyAwOjI5OjMyIC0gTE1UIDE4OTEgTWFyIDE1CisjICAgIDA6MDAgRnJhbmNlIFdFJXNUIDE5NDUgU2VwIDE2IDM6MDAKKyMKKyMgWm9uZSBFdXJvcGUvQmVsZ3JhZGUgMToyMjowMCAtIExNVCAxODg0CisjICAgIDE6MDAgMTowMCBDRVNUIDE5NDUgU2VwIDE2ICAyOjAwcworIworIyBSdWxlIEZyYW5jZSAxOTQ1IG9ubHkgLSBTZXAgMTYgIDM6MDAgMCAtCisjIFJ1bGUgQmVsZ2l1bSAxOTQ1IG9ubHkgLSBTZXAgMTYgIDI6MDBzIDAgLQorIyBSdWxlIE5ldGggMTk0NSBvbmx5IC0gU2VwIDE2IDI6MDBzIDAgLQorIworIyBUaGUgcnVsZSBsaW5lIHRvIGJlIGNoYW5nZWQgaXM6CisjCisjIFJ1bGUgQy1FdXIgMTk0NSBvbmx5IC0gU2VwIDE2ICAyOjAwIDAgLQorIworIyBJdCBzZWVtcyB0aGF0IFBhcmlzLCBNb25hY28sIFJ1bGUgRnJhbmNlLCBSdWxlIEJlbGdpdW0gYWxsIGFncmVlIG9uCisjIDI6MDAgc3RhbmRhcmQgdGltZSwgZS5nLiAzOjAwIGxvY2FsIHRpbWUuICBIb3dldmVyIHRoZXJlIGFyZSBubworIyBjb3VudHJpZXMgdGhhdCB1c2UgQy1FdXIgcnVsZXMgaW4gU2VwdGVtYmVyIDE5NDUsIHNvIHRoZSBvbmx5IGl0ZW1zCisjIGFmZmVjdGVkIGFyZSBhcHBhcmVudGx5IHRoZXNlIGZpY3RpY2lvdXMgem9uZXMgdGhhdCB0cmFuc2xhdGVzIGFjcm9ueW1zCisjIENFVCBhbmQgTUVUOgorIworIyBab25lIENFVCAgMTowMCBDLUV1ciBDRSVzVAorIyBab25lIE1FVCAgMTowMCBDLUV1ciBNRSVzVAorIworIyBJdCB0aGlzIGlzIHJpZ2h0IHRoZW4gdGhlIGNvcnJlY3RlZCB2ZXJzaW9uIHdvdWxkIGxvb2sgbGlrZToKKyMKKyMgUnVsZSBDLUV1ciAxOTQ1IG9ubHkgLSBTZXAgMTYgIDI6MDBzIDAgLQorIworIyBBIHNtYWxsIHN0ZXAgZm9yIG1hbmtpbmQgdGhvdWdoIDgtKQorUnVsZQlDLUV1cgkxOTQ1CW9ubHkJLQlTZXAJMTYJIDI6MDBzCTAJLQorUnVsZQlDLUV1cgkxOTc3CTE5ODAJLQlBcHIJU3VuPj0xCSAyOjAwcwkxOjAwCVMKK1J1bGUJQy1FdXIJMTk3Nwlvbmx5CS0JU2VwCWxhc3RTdW4JIDI6MDBzCTAJLQorUnVsZQlDLUV1cgkxOTc4CW9ubHkJLQlPY3QJIDEJIDI6MDBzCTAJLQorUnVsZQlDLUV1cgkxOTc5CTE5OTUJLQlTZXAJbGFzdFN1bgkgMjowMHMJMAktCitSdWxlCUMtRXVyCTE5ODEJbWF4CS0JTWFyCWxhc3RTdW4JIDI6MDBzCTE6MDAJUworUnVsZQlDLUV1cgkxOTk2CW1heAktCU9jdAlsYXN0U3VuCSAyOjAwcwkwCS0KKworIyBFLUV1ciBkaWZmZXJzIGZyb20gRVUgb25seSBpbiB0aGF0IEUtRXVyIHN3aXRjaGVzIGF0IG1pZG5pZ2h0IGxvY2FsIHRpbWUuCitSdWxlCUUtRXVyCTE5NzcJMTk4MAktCUFwcglTdW4+PTEJIDA6MDAJMTowMAlTCitSdWxlCUUtRXVyCTE5NzcJb25seQktCVNlcAlsYXN0U3VuCSAwOjAwCTAJLQorUnVsZQlFLUV1cgkxOTc4CW9ubHkJLQlPY3QJIDEJIDA6MDAJMAktCitSdWxlCUUtRXVyCTE5NzkJMTk5NQktCVNlcAlsYXN0U3VuCSAwOjAwCTAJLQorUnVsZQlFLUV1cgkxOTgxCW1heAktCU1hcglsYXN0U3VuCSAwOjAwCTE6MDAJUworUnVsZQlFLUV1cgkxOTk2CW1heAktCU9jdAlsYXN0U3VuCSAwOjAwCTAJLQorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlSdXNzaWEJMTkxNwlvbmx5CS0JSnVsCSAxCTIzOjAwCTE6MDAJTVNUCSMgTW9zY293IFN1bW1lciBUaW1lCitSdWxlCVJ1c3NpYQkxOTE3CW9ubHkJLQlEZWMJMjgJIDA6MDAJMAlNTVQJIyBNb3Njb3cgTWVhbiBUaW1lCitSdWxlCVJ1c3NpYQkxOTE4CW9ubHkJLQlNYXkJMzEJMjI6MDAJMjowMAlNRFNUCSMgTW9zY293IERvdWJsZSBTdW1tZXIgVGltZQorUnVsZQlSdXNzaWEJMTkxOAlvbmx5CS0JU2VwCTE2CSAxOjAwCTE6MDAJTVNUCitSdWxlCVJ1c3NpYQkxOTE5CW9ubHkJLQlNYXkJMzEJMjM6MDAJMjowMAlNRFNUCitSdWxlCVJ1c3NpYQkxOTE5CW9ubHkJLQlKdWwJIDEJIDI6MDAJMTowMAlTCitSdWxlCVJ1c3NpYQkxOTE5CW9ubHkJLQlBdWcJMTYJIDA6MDAJMAktCitSdWxlCVJ1c3NpYQkxOTIxCW9ubHkJLQlGZWIJMTQJMjM6MDAJMTowMAlTCitSdWxlCVJ1c3NpYQkxOTIxCW9ubHkJLQlNYXIJMjAJMjM6MDAJMjowMAlNICMgTWlkc3VtbWVyCitSdWxlCVJ1c3NpYQkxOTIxCW9ubHkJLQlTZXAJIDEJIDA6MDAJMTowMAlTCitSdWxlCVJ1c3NpYQkxOTIxCW9ubHkJLQlPY3QJIDEJIDA6MDAJMAktCisjIEFjdCBOby45MjUgb2YgdGhlIENvdW5jaWwgb2YgTWluaXN0ZXJzIG9mIHRoZSBVU1NSICgxOTgwLTEwLTI0KToKK1J1bGUJUnVzc2lhCTE5ODEJMTk4NAktCUFwcgkgMQkgMDowMAkxOjAwCVMKK1J1bGUJUnVzc2lhCTE5ODEJMTk4MwktCU9jdAkgMQkgMDowMAkwCS0KKyMgQWN0IE5vLjk2NyBvZiB0aGUgQ291bmNpbCBvZiBNaW5pc3RlcnMgb2YgdGhlIFVTU1IgKDE5ODQtMDktMTMpLCByZXBlYXRlZCBpbgorIyBBY3QgTm8uMjI3IG9mIHRoZSBDb3VuY2lsIG9mIE1pbmlzdGVycyBvZiB0aGUgVVNTUiAoMTk4OS0wMy0xNCk6CitSdWxlCVJ1c3NpYQkxOTg0CTE5OTEJLQlTZXAJbGFzdFN1bgkgMjowMHMJMAktCitSdWxlCVJ1c3NpYQkxOTg1CTE5OTEJLQlNYXIJbGFzdFN1bgkgMjowMHMJMTowMAlTCisjCitSdWxlCVJ1c3NpYQkxOTkyCW9ubHkJLQlNYXIJbGFzdFNhdAkgMjM6MDAJMTowMAlTCitSdWxlCVJ1c3NpYQkxOTkyCW9ubHkJLQlTZXAJbGFzdFNhdAkgMjM6MDAJMAktCitSdWxlCVJ1c3NpYQkxOTkzCW1heAktCU1hcglsYXN0U3VuCSAyOjAwcwkxOjAwCVMKK1J1bGUJUnVzc2lhCTE5OTMJMTk5NQktCVNlcAlsYXN0U3VuCSAyOjAwcwkwCS0KK1J1bGUJUnVzc2lhCTE5OTYJbWF4CS0JT2N0CWxhc3RTdW4JIDI6MDBzCTAJLQorCisjIFRoZXNlIGFyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCVdFVAkJMDowMAlFVQlXRSVzVAorWm9uZQlDRVQJCTE6MDAJQy1FdXIJQ0Ulc1QKK1pvbmUJTUVUCQkxOjAwCUMtRXVyCU1FJXNUCitab25lCUVFVAkJMjowMAlFVQlFRSVzVAorCisjIFByZXZpb3VzIGVkaXRpb25zIG9mIHRoaXMgZGF0YWJhc2UgdXNlZCBhYmJyZXZpYXRpb25zIGxpa2UgTUVUIERTVAorIyBmb3IgQ2VudHJhbCBFdXJvcGVhbiBTdW1tZXIgVGltZSwgYnV0IHRoaXMgZGlkbid0IGFncmVlIHdpdGggY29tbW9uIHVzYWdlLgorCisjIEZyb20gTWFya3VzIEt1aG4gKDE5OTYtMDctMTIpOgorIyBUaGUgb2ZmaWNpYWwgR2VybWFuIG5hbWVzIC4uLiBhcmUKKyMKKyMJTWl0dGVsZXVyb3BhZWlzY2hlIFplaXQgKE1FWikgICAgICAgICA9IFVUQyswMTowMAorIwlNaXR0ZWxldXJvcGFlaXNjaGUgU29tbWVyemVpdCAoTUVTWikgID0gVVRDKzAyOjAwCisjCisjIGFzIGRlZmluZWQgaW4gdGhlIEdlcm1hbiBUaW1lIEFjdCAoR2VzZXR6IHVlYmVyIGRpZSBaZWl0YmVzdGltbXVuZyAoWmVpdEcpLAorIyAxOTc4LTA3LTI1LCBCdW5kZXNnZXNldHpibGF0dCwgSmFocmdhbmcgMTk3OCwgVGVpbCBJLCBTLiAxMTEwLTExMTEpLi4uLgorIyBJIHdyb3RlIC4uLiB0byB0aGUgR2VybWFuIEZlZGVyYWwgUGh5c2ljYWwtVGVjaG5pY2FsIEluc3RpdHV0aW9uCisjCisjCVBoeXNpa2FsaXNjaC1UZWNobmlzY2hlIEJ1bmRlc2Fuc3RhbHQgKFBUQikKKyMJTGFib3JhdG9yaXVtIDQuNDEgIlplaXRlaW5oZWl0IgorIwlQb3N0ZmFjaCAzMzQ1CisjCUQtMzgwMjMgQnJhdW5zY2h3ZWlnCisjCXBob25lOiArNDkgNTMxIDU5Mi0wCisjCisjIC4uLiBJIHJlY2VpdmVkIHRvZGF5IGFuIGFuc3dlciBsZXR0ZXIgZnJvbSBEci4gUGV0ZXIgSGV0emVsLCBoZWFkIG9mIHRoZSBQVEIKKyMgZGVwYXJ0bWVudCBmb3IgdGltZSBhbmQgZnJlcXVlbmN5IHRyYW5zbWlzc2lvbi4gIEhlIGV4cGxhaW5lZCB0aGF0IHRoZQorIyBQVEIgdHJhbnNsYXRlcyBNRVogYW5kIE1FU1ogaW50byBFbmdsaXNoIGFzCisjCisjCUNlbnRyYWwgRXVyb3BlYW4gVGltZSAoQ0VUKSAgICAgICAgID0gVVRDKzAxOjAwCisjCUNlbnRyYWwgRXVyb3BlYW4gU3VtbWVyIFRpbWUgKENFU1QpID0gVVRDKzAyOjAwCisKKworIyBBbGJhbmlhCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlBbGJhbmlhCTE5NDAJb25seQktCUp1bgkxNgkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5NDIJb25seQktCU5vdgkgMgkzOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5NDMJb25seQktCU1hcgkyOQkyOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5NDMJb25seQktCUFwcgkxMAkzOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5NzQJb25seQktCU1heQkgNAkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5NzQJb25seQktCU9jdAkgMgkwOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5NzUJb25seQktCU1heQkgMQkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5NzUJb25seQktCU9jdAkgMgkwOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5NzYJb25seQktCU1heQkgMgkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5NzYJb25seQktCU9jdAkgMwkwOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5NzcJb25seQktCU1heQkgOAkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5NzcJb25seQktCU9jdAkgMgkwOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5NzgJb25seQktCU1heQkgNgkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5NzgJb25seQktCU9jdAkgMQkwOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5NzkJb25seQktCU1heQkgNQkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5NzkJb25seQktCVNlcAkzMAkwOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5ODAJb25seQktCU1heQkgMwkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5ODAJb25seQktCU9jdAkgNAkwOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5ODEJb25seQktCUFwcgkyNgkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5ODEJb25seQktCVNlcAkyNwkwOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5ODIJb25seQktCU1heQkgMgkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5ODIJb25seQktCU9jdAkgMwkwOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5ODMJb25seQktCUFwcgkxOAkwOjAwCTE6MDAJUworUnVsZQlBbGJhbmlhCTE5ODMJb25seQktCU9jdAkgMQkwOjAwCTAJLQorUnVsZQlBbGJhbmlhCTE5ODQJb25seQktCUFwcgkgMQkwOjAwCTE6MDAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvVGlyYW5lCTE6MTk6MjAgLQlMTVQJMTkxNAorCQkJMTowMAktCUNFVAkxOTQwIEp1biAxNgorCQkJMTowMAlBbGJhbmlhCUNFJXNUCTE5ODQgSnVsCisJCQkxOjAwCUVVCUNFJXNUCisKKyMgQW5kb3JyYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvQW5kb3JyYQkwOjA2OjA0IC0JTE1UCTE5MDEKKwkJCTA6MDAJLQlXRVQJMTk0NiBTZXAgMzAKKwkJCTE6MDAJLQlDRVQJMTk4NSBNYXIgMzEgMjowMAorCQkJMTowMAlFVQlDRSVzVAorCisjIEF1c3RyaWEKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKTogU2hhbmtzICYgUG90dGVuZ2VyIGdpdmUgMTkxOC0wNi0xNiBhbmQKKyMgMTk0NS0xMS0xOCwgYnV0IHRoZSBBdXN0cmlhbiBGZWRlcmFsIE9mZmljZSBvZiBNZXRyb2xvZ3kgYW5kCisjIFN1cnZleWluZyAoQkVWKSBnaXZlcyAxOTE4LTA5LTE2IGFuZCBmb3IgVmllbm5hIGdpdmVzIHRoZSAiYWxsZWdlZCIKKyMgZGF0ZSBvZiAxOTQ1LTA0LTEyIHdpdGggbm8gdGltZS4gIEZvciB0aGUgMTk4MC0wNC0wNiB0cmFuc2l0aW9uCisjIFNoYW5rcyAmIFBvdHRlbmdlciBnaXZlIDAyOjAwLCB0aGUgQkVWIDAwOjAwLiAgR28gd2l0aCB0aGUgQkVWLAorIyBhbmQgZ3Vlc3MgMDI6MDAgZm9yIDE5NDUtMDQtMTIuCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUF1c3RyaWEJMTkyMAlvbmx5CS0JQXByCSA1CTI6MDBzCTE6MDAJUworUnVsZQlBdXN0cmlhCTE5MjAJb25seQktCVNlcAkxMwkyOjAwcwkwCS0KK1J1bGUJQXVzdHJpYQkxOTQ2CW9ubHkJLQlBcHIJMTQJMjowMHMJMTowMAlTCitSdWxlCUF1c3RyaWEJMTk0NgkxOTQ4CS0JT2N0CVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJQXVzdHJpYQkxOTQ3CW9ubHkJLQlBcHIJIDYJMjowMHMJMTowMAlTCitSdWxlCUF1c3RyaWEJMTk0OAlvbmx5CS0JQXByCTE4CTI6MDBzCTE6MDAJUworUnVsZQlBdXN0cmlhCTE5ODAJb25seQktCUFwcgkgNgkwOjAwCTE6MDAJUworUnVsZQlBdXN0cmlhCTE5ODAJb25seQktCVNlcAkyOAkwOjAwCTAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvVmllbm5hCTE6MDU6MjAgLQlMTVQJMTg5MyBBcHIKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTkyMAorCQkJMTowMAlBdXN0cmlhCUNFJXNUCTE5NDAgQXByICAxIDI6MDBzCisJCQkxOjAwCUMtRXVyCUNFJXNUCTE5NDUgQXByICAyIDI6MDBzCisJCQkxOjAwCTE6MDAJQ0VTVAkxOTQ1IEFwciAxMiAyOjAwcworCQkJMTowMAktCUNFVAkxOTQ2CisJCQkxOjAwCUF1c3RyaWEJQ0Ulc1QJMTk4MQorCQkJMTowMAlFVQlDRSVzVAorCisjIEJlbGFydXMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJRXVyb3BlL01pbnNrCTE6NTA6MTYgLQlMTVQJMTg4MAorCQkJMTo1MAktCU1NVAkxOTI0IE1heSAyICMgTWluc2sgTWVhbiBUaW1lCisJCQkyOjAwCS0JRUVUCTE5MzAgSnVuIDIxCisJCQkzOjAwCS0JTVNLCTE5NDEgSnVuIDI4CisJCQkxOjAwCUMtRXVyCUNFJXNUCTE5NDQgSnVsICAzCisJCQkzOjAwCVJ1c3NpYQlNU0svTVNECTE5OTAKKwkJCTM6MDAJLQlNU0sJMTk5MSBNYXIgMzEgMjowMHMKKwkJCTI6MDAJMTowMAlFRVNUCTE5OTEgU2VwIDI5IDI6MDBzCisJCQkyOjAwCS0JRUVUCTE5OTIgTWFyIDI5IDA6MDBzCisJCQkyOjAwCTE6MDAJRUVTVAkxOTkyIFNlcCAyNyAwOjAwcworCQkJMjowMAlSdXNzaWEJRUUlc1QKKworIyBCZWxnaXVtCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTctMDctMDIpOgorIyBFbnRyaWVzIGZyb20gMTkxOCB0aHJvdWdoIDE5OTEgYXJlIHRha2VuIGZyb206CisjCUFubnVhaXJlIGRlIEwnT2JzZXJ2YXRvaXJlIFJveWFsIGRlIEJlbGdpcXVlLAorIwlBdmVudWUgQ2lyY3VsYWlyZSwgMywgQi0xMTgwIEJSVVhFTExFUywgQ0xWSUllIGFubmVlLCAxOTkxCisjCShJbXByaW1lcmllIEhBWUVaLCBzLnAuci5sLiwgUnVlIEZpbiwgNCwgMTA4MCBCUlVYRUxMRVMsIE1DTVhDKSwKKyMJcHAgOC05LgorIyBMTVQgYmVmb3JlIDE4OTIgd2FzIDA6MTc6MzAsIGFjY29yZGluZyB0byB0aGUgb2ZmaWNpYWwgam91cm5hbCBvZiBCZWxnaXVtOgorIwlNb25pdGV1ciBCZWxnZSwgU2FtZWRpIDMwIEF2cmlsIDE4OTIsIE4uMTIxLgorIyBUaGFua3MgdG8gUGFzY2FsIERlbG1vaXRpZSBmb3IgdGhlc2UgcmVmZXJlbmNlcy4KKyMgVGhlIDE5MTggcnVsZXMgYXJlIGxpc3RlZCBmb3IgY29tcGxldGVuZXNzOyB0aGV5IGFwcGx5IHRvIHVub2NjdXBpZWQgQmVsZ2l1bS4KKyMgQXNzdW1lIEJydXNzZWxzIHN3aXRjaGVkIHRvIFdFVCBpbiAxOTE4IHdoZW4gdGhlIGFybWlzdGljZSB0b29rIGVmZmVjdC4KKyMKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUJlbGdpdW0JMTkxOAlvbmx5CS0JTWFyCSA5CSAwOjAwcwkxOjAwCVMKK1J1bGUJQmVsZ2l1bQkxOTE4CTE5MTkJLQlPY3QJU2F0Pj0xCTIzOjAwcwkwCS0KK1J1bGUJQmVsZ2l1bQkxOTE5CW9ubHkJLQlNYXIJIDEJMjM6MDBzCTE6MDAJUworUnVsZQlCZWxnaXVtCTE5MjAJb25seQktCUZlYgkxNAkyMzowMHMJMTowMAlTCitSdWxlCUJlbGdpdW0JMTkyMAlvbmx5CS0JT2N0CTIzCTIzOjAwcwkwCS0KK1J1bGUJQmVsZ2l1bQkxOTIxCW9ubHkJLQlNYXIJMTQJMjM6MDBzCTE6MDAJUworUnVsZQlCZWxnaXVtCTE5MjEJb25seQktCU9jdAkyNQkyMzowMHMJMAktCitSdWxlCUJlbGdpdW0JMTkyMglvbmx5CS0JTWFyCTI1CTIzOjAwcwkxOjAwCVMKK1J1bGUJQmVsZ2l1bQkxOTIyCTE5MjcJLQlPY3QJU2F0Pj0xCTIzOjAwcwkwCS0KK1J1bGUJQmVsZ2l1bQkxOTIzCW9ubHkJLQlBcHIJMjEJMjM6MDBzCTE6MDAJUworUnVsZQlCZWxnaXVtCTE5MjQJb25seQktCU1hcgkyOQkyMzowMHMJMTowMAlTCitSdWxlCUJlbGdpdW0JMTkyNQlvbmx5CS0JQXByCSA0CTIzOjAwcwkxOjAwCVMKKyMgRFNIIHdyaXRlcyB0aGF0IGEgcm95YWwgZGVjcmVlIG9mIDE5MjYtMDItMjIgc3BlY2lmaWVkIHRoZSBTdW4gZm9sbG93aW5nIDNyZAorIyBTYXQgaW4gQXByIChleGNlcHQgaWYgaXQncyBFYXN0ZXIsIGluIHdoaWNoIGNhc2UgaXQncyBvbmUgU3VuZGF5IGVhcmxpZXIpLAorIyB0byBTdW4gZm9sbG93aW5nIDFzdCBTYXQgaW4gT2N0LCBhbmQgdGhhdCBhIHJveWFsIGRlY3JlZSBvZiAxOTI4LTA5LTE1CisjIGNoYW5nZWQgdGhlIHRyYW5zaXRpb24gdGltZXMgdG8gMDI6MDAgR01ULgorUnVsZQlCZWxnaXVtCTE5MjYJb25seQktCUFwcgkxNwkyMzowMHMJMTowMAlTCitSdWxlCUJlbGdpdW0JMTkyNwlvbmx5CS0JQXByCSA5CTIzOjAwcwkxOjAwCVMKK1J1bGUJQmVsZ2l1bQkxOTI4CW9ubHkJLQlBcHIJMTQJMjM6MDBzCTE6MDAJUworUnVsZQlCZWxnaXVtCTE5MjgJMTkzOAktCU9jdAlTdW4+PTIJIDI6MDBzCTAJLQorUnVsZQlCZWxnaXVtCTE5MjkJb25seQktCUFwcgkyMQkgMjowMHMJMTowMAlTCitSdWxlCUJlbGdpdW0JMTkzMAlvbmx5CS0JQXByCTEzCSAyOjAwcwkxOjAwCVMKK1J1bGUJQmVsZ2l1bQkxOTMxCW9ubHkJLQlBcHIJMTkJIDI6MDBzCTE6MDAJUworUnVsZQlCZWxnaXVtCTE5MzIJb25seQktCUFwcgkgMwkgMjowMHMJMTowMAlTCitSdWxlCUJlbGdpdW0JMTkzMwlvbmx5CS0JTWFyCTI2CSAyOjAwcwkxOjAwCVMKK1J1bGUJQmVsZ2l1bQkxOTM0CW9ubHkJLQlBcHIJIDgJIDI6MDBzCTE6MDAJUworUnVsZQlCZWxnaXVtCTE5MzUJb25seQktCU1hcgkzMQkgMjowMHMJMTowMAlTCitSdWxlCUJlbGdpdW0JMTkzNglvbmx5CS0JQXByCTE5CSAyOjAwcwkxOjAwCVMKK1J1bGUJQmVsZ2l1bQkxOTM3CW9ubHkJLQlBcHIJIDQJIDI6MDBzCTE6MDAJUworUnVsZQlCZWxnaXVtCTE5MzgJb25seQktCU1hcgkyNwkgMjowMHMJMTowMAlTCitSdWxlCUJlbGdpdW0JMTkzOQlvbmx5CS0JQXByCTE2CSAyOjAwcwkxOjAwCVMKK1J1bGUJQmVsZ2l1bQkxOTM5CW9ubHkJLQlOb3YJMTkJIDI6MDBzCTAJLQorUnVsZQlCZWxnaXVtCTE5NDAJb25seQktCUZlYgkyNQkgMjowMHMJMTowMAlTCitSdWxlCUJlbGdpdW0JMTk0NAlvbmx5CS0JU2VwCTE3CSAyOjAwcwkwCS0KK1J1bGUJQmVsZ2l1bQkxOTQ1CW9ubHkJLQlBcHIJIDIJIDI6MDBzCTE6MDAJUworUnVsZQlCZWxnaXVtCTE5NDUJb25seQktCVNlcAkxNgkgMjowMHMJMAktCitSdWxlCUJlbGdpdW0JMTk0Nglvbmx5CS0JTWF5CTE5CSAyOjAwcwkxOjAwCVMKK1J1bGUJQmVsZ2l1bQkxOTQ2CW9ubHkJLQlPY3QJIDcJIDI6MDBzCTAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvQnJ1c3NlbHMJMDoxNzozMCAtCUxNVAkxODgwCisJCQkwOjE3OjMwCS0JQk1UCTE4OTIgTWF5ICAxIDEyOjAwICMgQnJ1c3NlbHMgTVQKKwkJCTA6MDAJLQlXRVQJMTkxNCBOb3YgIDgKKwkJCTE6MDAJLQlDRVQJMTkxNiBNYXkgIDEgIDA6MDAKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTkxOCBOb3YgMTEgMTE6MDB1CisJCQkwOjAwCUJlbGdpdW0JV0Ulc1QJMTk0MCBNYXkgMjAgIDI6MDBzCisJCQkxOjAwCUMtRXVyCUNFJXNUCTE5NDQgU2VwICAzCisJCQkxOjAwCUJlbGdpdW0JQ0Ulc1QJMTk3NworCQkJMTowMAlFVQlDRSVzVAorCisjIEJvc25pYSBhbmQgSGVyemVnb3ZpbmEKKyMgc2VlIFNlcmJpYQorCisjIEJ1bGdhcmlhCisjCisjIEZyb20gUGxhbWVuIFNpbWVub3YgdmlhIFN0ZWZmZW4gVGhvcnNlbiAoMTk5OS0wOS0wOSk6CisjIEEgZG9jdW1lbnQgb2YgR292ZXJubWVudCBvZiBCdWxnYXJpYSAoTm8uOTQvMTk5Nykgc2F5czoKKyMgRUVUIC0tPiBFRVREU1QgaXMgaW4gMDM6MDAgTG9jYWwgdGltZSBpbiBsYXN0IFN1bmRheSBvZiBNYXJjaCAuLi4KKyMgRUVURFNUIC0tPiBFRVQgaXMgaW4gMDQ6MDAgTG9jYWwgdGltZSBpbiBsYXN0IFN1bmRheSBvZiBPY3RvYmVyCisjCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlCdWxnCTE5NzkJb25seQktCU1hcgkzMQkyMzowMAkxOjAwCVMKK1J1bGUJQnVsZwkxOTc5CW9ubHkJLQlPY3QJIDEJIDE6MDAJMAktCitSdWxlCUJ1bGcJMTk4MAkxOTgyCS0JQXByCVNhdD49MQkyMzowMAkxOjAwCVMKK1J1bGUJQnVsZwkxOTgwCW9ubHkJLQlTZXAJMjkJIDE6MDAJMAktCitSdWxlCUJ1bGcJMTk4MQlvbmx5CS0JU2VwCTI3CSAyOjAwCTAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvU29maWEJMTozMzoxNiAtCUxNVAkxODgwCisJCQkxOjU2OjU2CS0JSU1UCTE4OTQgTm92IDMwICMgSXN0YW5idWwgTVQ/CisJCQkyOjAwCS0JRUVUCTE5NDIgTm92ICAyICAzOjAwCisJCQkxOjAwCUMtRXVyCUNFJXNUCTE5NDUKKwkJCTE6MDAJLQlDRVQJMTk0NSBBcHIgMiAzOjAwCisJCQkyOjAwCS0JRUVUCTE5NzkgTWFyIDMxIDIzOjAwCisJCQkyOjAwCUJ1bGcJRUUlc1QJMTk4MiBTZXAgMjYgIDI6MDAKKwkJCTI6MDAJQy1FdXIJRUUlc1QJMTk5MQorCQkJMjowMAlFLUV1cglFRSVzVAkxOTk3CisJCQkyOjAwCUVVCUVFJXNUCisKKyMgQ3JvYXRpYQorIyBzZWUgU2VyYmlhCisKKyMgQ3lwcnVzCisjIFBsZWFzZSBzZWUgdGhlIGBhc2lhJyBmaWxlIGZvciBBc2lhL05pY29zaWEuCisKKyMgQ3plY2ggUmVwdWJsaWMKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUN6ZWNoCTE5NDUJb25seQktCUFwcgkgOAkyOjAwcwkxOjAwCVMKK1J1bGUJQ3plY2gJMTk0NQlvbmx5CS0JTm92CTE4CTI6MDBzCTAJLQorUnVsZQlDemVjaAkxOTQ2CW9ubHkJLQlNYXkJIDYJMjowMHMJMTowMAlTCitSdWxlCUN6ZWNoCTE5NDYJMTk0OQktCU9jdAlTdW4+PTEJMjowMHMJMAktCitSdWxlCUN6ZWNoCTE5NDcJb25seQktCUFwcgkyMAkyOjAwcwkxOjAwCVMKK1J1bGUJQ3plY2gJMTk0OAlvbmx5CS0JQXByCTE4CTI6MDBzCTE6MDAJUworUnVsZQlDemVjaAkxOTQ5CW9ubHkJLQlBcHIJIDkJMjowMHMJMTowMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUV1cm9wZS9QcmFndWUJMDo1Nzo0NCAtCUxNVAkxODUwCisJCQkwOjU3OjQ0CS0JUE1UCTE4OTEgT2N0ICAgICAjIFByYWd1ZSBNZWFuIFRpbWUKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTk0NCBTZXAgMTcgMjowMHMKKwkJCTE6MDAJQ3plY2gJQ0Ulc1QJMTk3OQorCQkJMTowMAlFVQlDRSVzVAorCisjIERlbm1hcmssIEZhcm9lIElzbGFuZHMsIGFuZCBHcmVlbmxhbmQKKworIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNS0wNC0yNik6CisjIGh0dHA6Ly93d3cuaHVtLmFhdS5kay9+cG9lL3RpZC90aW5lL0RhbnNrVGlkLmh0bSBzYXlzIHRoYXQgdGhlIGxhdworIyBbaW50cm9kdWNpbmcgc3RhbmRhcmQgdGltZV0gd2FzIGluIGVmZmVjdCBmcm9tIDE4OTQtMDEtMDEuLi4uCisjIFRoZSBwYWdlIGh0dHA6Ly93d3cucmV0c2luZm8uZGsvX0dFVERPQ0lfL0FDQ04vQTE4OTMwMDA4MzMwLVJFR0wKKyMgY29uZmlybXMgdGhpcywgYW5kIHN0YXRlcyB0aGF0IHRoZSBsYXcgd2FzIHB1dCBmb3J0aCAxODkzLTAzLTI5LgorIworIyBUaGUgRVUgdHJlYXR5IHdpdGggZWZmZWN0IGZyb20gMTk3MzoKKyMgaHR0cDovL3d3dy5yZXRzaW5mby5kay9fR0VURE9DSV8vQUNDTi9BMTk3MjIxMTAwMzAtUkVHTAorIworIyBUaGlzIHByb3Zva2VkIGEgbmV3IGxhdyBmcm9tIDE5NzQgdG8gbWFrZSBwb3NzaWJsZSBzdW1tZXIgdGltZSBjaGFuZ2VzCisjIGluIHN1YnNlcXVlbmV0IGRlY3JlZXMgd2l0aCB0aGUgbGF3CisjIGh0dHA6Ly93d3cucmV0c2luZm8uZGsvX0dFVERPQ0lfL0FDQ04vQTE5NzQwMDIyMzMwLVJFR0wKKyMKKyMgSXQgc2VlbXMgaG93ZXZlciB0aGF0IG5vIGRlY3JlZSB3YXMgc2V0IGZvcndhcmQgdW50aWwgMTk4MC4gIEkgaGF2ZQorIyBub3QgZm91bmQgYW55IGRlY3JlZSwgYnV0IGluIGFub3RoZXIgcmVsYXRlZCBsYXcsIHRoZSBlZmZlY3RpbmcgRFNUCisjIGNoYW5nZXMgYXJlIHN0YXRlZCBleHBsaWNpdGx5IHRvIGJlIGZyb20gMTk4MC0wNC0wNiBhdCAwMjowMCB0bworIyAxOTgwLTA5LTI4IGF0IDAyOjAwLiAgSWYgdGhpcyBpcyB0cnVlLCB0aGlzIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbQorIyB0aGUgRVUgcnVsZSBpbiB0aGF0IERTVCBydW5zIHRvIDAyOjAwLCBub3QgMDM6MDAuICBXZSBkb24ndCBrbm93CisjIHdoZW4gRGVubWFyayBiZWdhbiB1c2luZyB0aGUgRVUgcnVsZSBjb3JyZWN0bHksIGJ1dCB3ZSBoYXZlIG9ubHkKKyMgY29uZmlybWF0aW9uIG9mIHRoZSAxOTgwLXRpbWUsIHNvIEkgcHJlc3VtZSBpdCB3YXMgY29ycmVjdCBpbiAxOTgxOgorIyBUaGUgbGF3IGlzIGFib3V0IHRoZSBtYW5hZ2VtZW50IG9mIHRoZSBleHRyYSBob3VyLCBjb25jZXJuaW5nCisjIHdvcmtpbmcgaG91cnMgcmVwb3J0ZWQgYW5kIGVmZmVjdCBvbiBvYmxpZ2F0b3J5LXJlc3QgcnVsZXMgKHdoaWNoCisjIHdhcyBzdXNwZW5kZWQgb24gdGhhdCBuaWdodCk6CisjIGh0dHA6Ly93d3cucmV0c2luZm8uZGsvX0dFVERPQ0lfL0FDQ04vQzE5ODAxMTIwNTU0LVJFR0wKKworIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNS0wNi0xMSk6CisjIFRoZSBIZXJuaW5nIEZvbGtlYmxhZCAoMTk4MC0wOS0yNikgcmVwb3J0ZWQgdGhhdCB0aGUgbmlnaHQgYmV0d2VlbgorIyBTYXR1cmRheSBhbmQgU3VuZGF5IHRoZSBjbG9jayBpcyBzZXQgYmFjayBmcm9tIHRocmVlIHRvIHR3by4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA1LTA2LTExKToKKyMgSGVuY2UgdGhlICIwMjowMCIgb2YgdGhlIDE5ODAgbGF3IHJlZmVycyB0byBzdGFuZGFyZCB0aW1lLCBub3QKKyMgd2FsbC1jbG9jayB0aW1lLCBhbmQgc28gdGhlIEVVIHJ1bGVzIHdlcmUgaW4gZWZmZWN0IGluIDE5ODAuCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCURlbm1hcmsJMTkxNglvbmx5CS0JTWF5CTE0CTIzOjAwCTE6MDAJUworUnVsZQlEZW5tYXJrCTE5MTYJb25seQktCVNlcAkzMAkyMzowMAkwCS0KK1J1bGUJRGVubWFyawkxOTQwCW9ubHkJLQlNYXkJMTUJIDA6MDAJMTowMAlTCitSdWxlCURlbm1hcmsJMTk0NQlvbmx5CS0JQXByCSAyCSAyOjAwcwkxOjAwCVMKK1J1bGUJRGVubWFyawkxOTQ1CW9ubHkJLQlBdWcJMTUJIDI6MDBzCTAJLQorUnVsZQlEZW5tYXJrCTE5NDYJb25seQktCU1heQkgMQkgMjowMHMJMTowMAlTCitSdWxlCURlbm1hcmsJMTk0Nglvbmx5CS0JU2VwCSAxCSAyOjAwcwkwCS0KK1J1bGUJRGVubWFyawkxOTQ3CW9ubHkJLQlNYXkJIDQJIDI6MDBzCTE6MDAJUworUnVsZQlEZW5tYXJrCTE5NDcJb25seQktCUF1ZwkxMAkgMjowMHMJMAktCitSdWxlCURlbm1hcmsJMTk0OAlvbmx5CS0JTWF5CSA5CSAyOjAwcwkxOjAwCVMKK1J1bGUJRGVubWFyawkxOTQ4CW9ubHkJLQlBdWcJIDgJIDI6MDBzCTAJLQorIworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBFdXJvcGUvQ29wZW5oYWdlbgkgMDo1MDoyMCAtCUxNVAkxODkwCisJCQkgMDo1MDoyMCAtCUNNVAkxODk0IEphbiAgMSAjIENvcGVuaGFnZW4gTVQKKwkJCSAxOjAwCURlbm1hcmsJQ0Ulc1QJMTk0MiBOb3YgIDIgMjowMHMKKwkJCSAxOjAwCUMtRXVyCUNFJXNUCTE5NDUgQXByICAyIDI6MDAKKwkJCSAxOjAwCURlbm1hcmsJQ0Ulc1QJMTk4MAorCQkJIDE6MDAJRVUJQ0Ulc1QKK1pvbmUgQXRsYW50aWMvRmFyb2UJLTA6Mjc6MDQgLQlMTVQJMTkwOCBKYW4gMTEJIyBUb3JzaGF2bgorCQkJIDA6MDAJLQlXRVQJMTk4MQorCQkJIDA6MDAJRVUJV0Ulc1QKKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNC0xMC0zMSk6CisjIER1cmluZyBXb3JsZCBXYXIgSUksIEdlcm1hbnkgbWFpbnRhaW5lZCBzZWNyZXQgbWFubmVkIHdlYXRoZXIgc3RhdGlvbnMgaW4KKyMgRWFzdCBHcmVlbmxhbmQgYW5kIEZyYW56IEpvc2VmIExhbmQsIGJ1dCB3ZSBkb24ndCBrbm93IHRoZWlyIHRpbWUgem9uZXMuCisjIE15IHNvdXJjZSBmb3IgdGhpcyBpcyBXaWxoZWxtIERlZ2UncyBib29rIG1lbnRpb25lZCB1bmRlciBTdmFsYmFyZC4KKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIEdyZWVubGFuZCBqb2luZWQgdGhlIEVVIGFzIHBhcnQgb2YgRGVubWFyaywgb2J0YWluZWQgaG9tZSBydWxlIG9uIDE5NzktMDUtMDEsCisjIGFuZCBsZWZ0IHRoZSBFVSBvbiAxOTg1LTAyLTAxLiAgSXQgdGhlcmVmb3JlIHNob3VsZCBoYXZlIGJlZW4gdXNpbmcgRVUKKyMgcnVsZXMgYXQgbGVhc3QgdGhyb3VnaCAxOTg0LiAgU2hhbmtzICYgUG90dGVuZ2VyIHNheSBTY29yZXNieXN1bmQgYW5kIEdvZHRoYWIKKyMgdXNlZCBDLUV1ciBydWxlcyBhZnRlciAxOTgwLCBidXQgSUFUQSBTU0lNICgxOTkxLzE5OTYpIHNheXMgdGhleSB1c2UgRVUKKyMgcnVsZXMgc2luY2UgYXQgbGVhc3QgMTk5MS4gIEFzc3VtZSBFVSBydWxlcyBzaW5jZSAxOTgwLgorCisjIEZyb20gR3dpbGxpbiBMYXcgKDIwMDEtMDYtMDYpLCBjaXRpbmcKKyMgPGh0dHA6Ly93d3cuc3RhdGthcnQubm8vZWZzL2Vmc2hlZnRlci8yMDAxL2VmczUtMjAwMS5wZGY+ICgyMDAxLTAzLTE1KSwKKyMgYW5kIHdpdGggdHJhbnNsYXRpb25zIGNvcnJlY3RlZCBieSBTdGVmZmVuIFRob3JzZW46CisjCisjIEdyZWVubGFuZCBoYXMgZm91ciBsb2NhbCB0aW1lcywgYW5kIHRoZSByZWxhdGlvbiB0byBVVEMKKyMgaXMgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGltZSBsaW5lOgorIworIyBUaGUgbWlsaXRhcnkgem9uZSBuZWFyIFRodWxlCVVUQy00CisjIFN0YW5kYXJkIEdyZWVubGFuZCB0aW1lCVVUQy0zCisjIFNjb3Jlc2J5c3VuZAkJCVVUQy0xCisjIERhbm1hcmtzaGF2bgkJCVVUQworIworIyBJbiB0aGUgbWlsaXRhcnkgYXJlYSBuZWFyIFRodWxlIGFuZCBpbiBEYW5tYXJrc2hhdm4gRFNUIHdpbGwgbm90IGJlCisjIGludHJvZHVjZWQuCisKKyMgRnJvbSBSaXZlcyBNY0RvdyAoMjAwMS0xMS0wMSk6CisjCisjIEkgY29ycmVzcG9uZCByZWd1bGFybHkgd2l0aCB0aGUgRGFuc2sgUG9sYXJjZW50ZXIsIGFuZCB3cm90ZSB0aGVtIGF0CisjIHRoZSB0aW1lIHRvIGNsYXJpZnkgdGhlIHNpdHVhdGlvbiBpbiBUaHVsZS4gIFVuZm9ydHVuYXRlbHksIEkgaGF2ZQorIyBub3QgaGVhcmQgYmFjayBmcm9tIHRoZW0gcmVnYXJkaW5nIG15IHJlY2VudCBsZXR0ZXIuICBbQnV0IEkgaGF2ZQorIyBpbmZvIGZyb20gZWFybGllciBjb3JyZXNwb25kZW5jZS5dCisjCisjIEFjY29yZGluZyB0byB0aGUgY2VudGVyLCBhIHZlcnkgc21hbGwgbG9jYWwgdGltZSB6b25lIGFyb3VuZCBUaHVsZQorIyBBaXIgQmFzZSBrZWVwcyB0aGUgdGltZSBhY2NvcmRpbmcgdG8gVVRDLTQsIGltcGxlbWVudGluZyBkYXlsaWdodAorIyBzYXZpbmdzIHVzaW5nIE5vcnRoIEFtZXJpY2EgcnVsZXMsIGNoYW5naW5nIHRoZSB0aW1lIGF0IDAyOjAwIGxvY2FsIHRpbWUuLi4uCisjCisjIFRoZSBlYXN0IGNvYXN0IG9mIEdyZWVubGFuZCBub3J0aCBvZiB0aGUgY29tbXVuaXR5IG9mIFNjb3Jlc2J5c3VuZAorIyB1c2VzIFVUQyBpbiB0aGUgc2FtZSB3YXkgYXMgaW4gSWNlbGFuZCwgeWVhciByb3VuZCwgd2l0aCBubyBkc3QuCisjIFRoZXJlIGFyZSBqdXN0IGEgZmV3IHN0YXRpb25zIG9uIHRoaXMgY29hc3QsIGluY2x1ZGluZyB0aGUKKyMgRGFubWFya3NoYXZuIElDQU8gd2VhdGhlciBzdGF0aW9uIG1lbnRpb25lZCBpbiB5b3VyIFNlcHRlbWJlciAyOXRoCisjIGVtYWlsLiAgVGhlIG90aGVyIHN0YXRpb25zIGFyZSB0d28gc2xlZGdlIHBhdHJvbCBzdGF0aW9ucyBpbgorIyBNZXN0ZXJzdmlnIGFuZCBEYW5lYm9yZywgdGhlIGFpciBmb3JjZSBiYXNlIGF0IFN0YXRpb24gTm9yZCwgYW5kIHRoZQorIyBEUEMgcmVzZWFyY2ggc3RhdGlvbiBhdCBaYWNrZW5iZXJnLgorIworIyBTY29yZXNieXN1bmQgYW5kIHR3byBzbWFsbCB2aWxsYWdlcyBuZWFyYnkga2VlcCB0aW1lIFVUQy0xIGFuZCB1c2UKKyMgdGhlIHNhbWUgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIHBlcmlvZCBhcyBpbiBXZXN0IEdyZWVubGFuZCAoR29kdGhhYikuCisjCisjIFRoZSByZXN0IG9mIEdyZWVubGFuZCwgaW5jbHVkaW5nIEdvZHRoYWIgKHRoaXMgYXJlYSwgYWx0aG91Z2ggaXQKKyMgaW5jbHVkZXMgY2VudHJhbCBHcmVlbmxhbmQsIGlzIGtub3duIGFzIHdlc3QgR3JlZW5sYW5kKSwga2VlcHMgdGltZQorIyBVVEMtMywgd2l0aCBkYXlsaWdodCBzYXZpbmdzIG1ldGhvZHMgYWNjb3JkaW5nIHRvIEV1cm9wZWFuIHJ1bGVzLgorIworIyBJdCBpcyBjb21tb24gcHJvY2VkdXJlIHRvIHVzZSBVVEMgMCBpbiB0aGUgd2lsZGVybmVzcyBvZiBFYXN0IGFuZAorIyBOb3J0aCBHcmVlbmxhbmQsIGJlY2F1c2UgaXQgaXMgbWFpbmx5IEljZWxhbmRpYyBhaXJjcmFmdCBvcGVyYXRvcnMKKyMgbWFpbnRhaW5pbmcgdHJhZmZpYyBpbiB0aGVzZSBhcmVhcy4gIEhvd2V2ZXIsIHRoZSBvZmZpY2lhbCBzdGF0dXMgb2YKKyMgdGhpcyBhcmVhIGlzIHRoYXQgaXQgc3RpY2tzIHdpdGggR29kdGhhYiB0aW1lLiAgVGhpcyBhcmVhIG1pZ2h0IGJlCisjIGNvbnNpZGVyZWQgYSBkdWFsIHRpbWUgem9uZSBpbiBzb21lIHJlc3BlY3RzIGJlY2F1c2Ugb2YgdGhpcy4KKworIyBGcm9tIFJpdmVzIE1jRG93ICgyMDAxLTExLTE5KToKKyMgSSBoZWFyZCBiYWNrIGZyb20gc29tZW9uZSBzdGF0aW9uZWQgYXQgVGh1bGU7IHRoZSB0aW1lIGNoYW5nZSB0b29rIHBsYWNlCisjIHRoZXJlIGF0IDI6MDAgQU0uCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIEZyb20gMTk5NyBvbiB0aGUgQ0lBIG1hcCBzaG93cyBEYW5tYXJrc2hhdm4gb24gR01UOworIyB0aGUgMTk5NSBtYXAgYXMgbGlrZSBHb2R0aGFiLgorIyBGb3IgbGFjayBvZiBiZXR0ZXIgaW5mbywgYXNzdW1lIHRoZXkgd2VyZSBsaWtlIEdvZHRoYWIgYmVmb3JlIDE5OTYuCisjIHN0YXJ0a2FydC5ubyBzYXlzIFRodWxlIGRvZXMgbm90IG9ic2VydmUgRFNULCBidXQgdGhpcyBpcyBjbGVhcmx5IGFuIGVycm9yLAorIyBzbyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlciBmb3IgVGh1bGUgdHJhbnNpdGlvbnMgdW50aWwgdGhpcyB5ZWFyLgorIyBGb3IgMjAwNyBvbiBhc3N1bWUgVGh1bGUgd2lsbCBzdGF5IGluIHN5bmMgd2l0aCBVUyBEU1QgcnVsZXMuCisjCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlUaHVsZQkxOTkxCTE5OTIJLQlNYXIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlUaHVsZQkxOTkxCTE5OTIJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlUaHVsZQkxOTkzCTIwMDYJLQlBcHIJU3VuPj0xCTI6MDAJMTowMAlECitSdWxlCVRodWxlCTE5OTMJMjAwNgktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVRodWxlCTIwMDcJbWF4CS0JTWFyCVN1bj49OAkyOjAwCTE6MDAJRAorUnVsZQlUaHVsZQkyMDA3CW1heAktCU5vdglTdW4+PTEJMjowMAkwCVMKKyMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9EYW5tYXJrc2hhdm4gLTE6MTQ6NDAgLQlMTVQJMTkxNiBKdWwgMjgKKwkJCS0zOjAwCS0JV0dUCTE5ODAgQXByICA2IDI6MDAKKwkJCS0zOjAwCUVVCVdHJXNUCTE5OTYKKwkJCTA6MDAJLQlHTVQKK1pvbmUgQW1lcmljYS9TY29yZXNieXN1bmQgLTE6Mjc6NTIgLQlMTVQJMTkxNiBKdWwgMjggIyBJdHRvcXFvcnRvb3JtaWl0CisJCQktMjowMAktCUNHVAkxOTgwIEFwciAgNiAyOjAwCisJCQktMjowMAlDLUV1cglDRyVzVAkxOTgxIE1hciAyOQorCQkJLTE6MDAJRVUJRUclc1QKK1pvbmUgQW1lcmljYS9Hb2R0aGFiCS0zOjI2OjU2IC0JTE1UCTE5MTYgSnVsIDI4ICMgTnV1aworCQkJLTM6MDAJLQlXR1QJMTk4MCBBcHIgIDYgMjowMAorCQkJLTM6MDAJRVUJV0clc1QKK1pvbmUgQW1lcmljYS9UaHVsZQktNDozNTowOCAtCUxNVAkxOTE2IEp1bCAyOCAjIFBpdHVmZmlrIGFpciBiYXNlCisJCQktNDowMAlUaHVsZQlBJXNUCisKKyMgRXN0b25pYQorIyBGcm9tIFBldGVyIElsaWV2ZSAoMTk5NC0xMC0xNSk6CisjIEEgcmVsYXRpdmUgaW4gVGFsbGlubiBjb25maXJtcyB0aGUgYWNjdXJhY3kgb2YgdGhlIGRhdGEgZm9yIDE5ODkgb253YXJkcworIyBbdGhyb3VnaCAxOTk0XSBhbmQgZ2l2ZXMgdGhlIGxlZ2FsIGF1dGhvcml0eSBmb3IgaXQsCisjIGEgcmVndWxhdGlvbiBvZiB0aGUgR292ZXJubWVudCBvZiBFc3RvbmlhLCBOby4gMTExIG9mIDE5ODkuLi4uCisjCisjIEZyb20gUGV0ZXIgSWxpZXZlICgxOTk2LTEwLTI4KToKKyMgW0lBVEEgU1NJTSAoMTk5Mi8xOTk2KSBjbGFpbXMgdGhhdCB0aGUgQmFsdGljIHJlcHVibGljcyBzd2l0Y2ggYXQgMDE6MDBzLAorIyBidXQgYSByZWxhdGl2ZSBjb25maXJtcyB0aGF0IEVzdG9uaWEgc3RpbGwgc3dpdGNoZXMgYXQgMDI6MDBzLCB3cml0aW5nOl0KKyMgYGBJIGRvIG5vdCBba25vd10gZXhhY3RseSBidXQgdGhlcmUgYXJlIHNvbWUgbGl0dGxlIGRpZmZlcmVudAorIyAoY29uZnVzaW5nKSBydWxlcyBmb3IgSW50ZXJuYXRpb25hbCBBaXIgYW5kIFJhaWx3YXkgVHJhbnNwb3J0IFNjaGVkdWxlcworIyBjb252ZXJzaW9uIGluIFN1bmRheSBjb25uZWN0ZWQgd2l0aCBlbmQgb2Ygc3VtbWVyIHRpbWUgaW4gRXN0b25pYS4uLi4KKyMgQSBkaXNjdXNzaW9uIGlzIHJ1bm5pbmcgYWJvdXQgdGhlIHN1bW1lciB0aW1lIGVmZmljaWVuY3kgYW5kIGVmZmVjdCBvbgorIyBodW1hbiBwaHlzaW9sb2d5LiAgSXQgc2VlbXMgdGhhdCBFc3RvbmlhIG1heWJlIHdpbGwgbm90IGNoYW5nZSB0bworIyBzdW1tZXIgdGltZSBuZXh0IHNwcmluZy4nJworCisjIEZyb20gUGV0ZXIgSWxpZXZlICgxOTk4LTExLTA0KSwgaGVhdmlseSBlZGl0ZWQ6CisjIDxhIGhyZWY9Imh0dHA6Ly90cmlwLnJrLmVlL2NnaS1iaW4vdGh3PyR7QkFTRX09YWt0JiR7T09IVE1MfT1ydGQmVEE9MTk5OCZUTz0xJkFOPTEzOTAiPgorIyBUaGUgMTk5OC0wOS0yMiBFc3RvbmlhbiB0aW1lIGxhdworIyA8L2E+CisjIHJlZmVycyB0byB0aGUgRWlnaHRoIERpcmVjdGl2ZSBhbmQgY2l0ZXMgdGhlIGFzc29jaWF0aW9uIGFncmVlbWVudCBiZXR3ZWVuCisjIHRoZSBFVSBhbmQgRXN0b25pYSwgcmF0aWZpZWQgYnkgdGhlIEVzdG9uaWFuIGxhdyAoUlQgSUkgMTk5NSwgMjItLTI3LCAxMjApLgorIworIyBJIGFsc28gYXNrZWQgW215IHJlbGF0aXZlXSB3aGV0aGVyIHRoZXkgdXNlIGFueSBzdGFuZGFyZCBhYmJyZXZpYXRpb24KKyMgZm9yIHRoZWlyIHN0YW5kYXJkIGFuZCBzdW1tZXIgdGltZXMuIEhlIHNheXMgbm8sIHRoZXkgdXNlICJzdXZlYWVnIgorIyAoc3VtbWVyIHRpbWUpIGFuZCAidGFsdmVhZWciICh3aW50ZXIgdGltZSkuCisKKyMgRnJvbSA8YSBocmVmPSJodHRwOi8vd3d3LmJhbHRpY3RpbWVzLmNvbS8iPlRoZSBCYWx0aWMgVGltZXM8L2E+ICgxOTk5LTA5LTA5KQorIyB2aWEgU3RlZmZlbiBUaG9yc2VuOgorIyBUaGlzIHllYXIgd2lsbCBtYXJrIHRoZSBsYXN0IHRpbWUgRXN0b25pYSBzaGlmdHMgdG8gc3VtbWVyIHRpbWUsCisjIGEgY291bmNpbCBvZiB0aGUgcnVsaW5nIGNvYWxpdGlvbiBhbm5vdW5jZWQgU2VwdC4gNi4uLi4KKyMgQnV0IHdoYXQgdGhpcyBjb3VsZCBtZWFuIGZvciBFc3RvbmlhJ3MgY2hhbmNlcyBvZiBqb2luaW5nIHRoZSBFdXJvcGVhbgorIyBVbmlvbiBhcmUgc3RpbGwgdW5jbGVhci4gIEluIDE5OTQsIHRoZSBFVSBkZWNsYXJlZCBzdW1tZXIgdGltZSBjb21wdWxzb3J5CisjIGZvciBhbGwgbWVtYmVyIHN0YXRlcyB1bnRpbCAyMDAxLiAgQnJ1c3NlbHMgaGFzIHlldCB0byBkZWNpZGUgd2hhdCB0byBkbworIyBhZnRlciB0aGF0LgorCisjIEZyb20gTWFydCBPcnVhYXMgKDIwMDAtMDEtMjkpOgorIyBSZWd1bGF0aW9uIG5vLiAzMDEgKDE5OTktMTAtMTIpIG9ic29sZXRlcyBwcmV2aW91cyByZWd1bGF0aW9uCisjIG5vLiAyMDYgKDE5OTgtMDktMjIpIGFuZCB0aHVzIHN0aWNrcyBFc3RvbmlhIHRvICswMjowMCBHTVQgZm9yIGFsbAorIyB0aGUgeWVhciByb3VuZC4gIFRoZSByZWd1bGF0aW9uIGlzIGVmZmVjdGl2ZSAxOTk5LTExLTAxLgorCisjIEZyb20gVG9vbWFzIFNvb21lICgyMDAyLTAyLTIxKToKKyMgVGhlIEVzdG9uaWFuIGdvdmVybm1lbnQgaGFzIGNoYW5nZWQgb25jZSBhZ2FpbiB0aW1lem9uZSBwb2xpdGljcy4KKyMgTm93IHdlIGFyZSB1c2luZyBhZ2FpbiBFVSBydWxlcy4KKyMKKyMgRnJvbSBVcm1ldCBKYWFuZXMgKDIwMDItMDMtMjgpOgorIyBUaGUgbGVnaXNsYXRpdmUgcmVmZXJlbmNlIGlzIEdvdmVybm1lbnQgZGVjcmVlIE5vLiA4NCBvbiAyMDAyLTAyLTIxLgorCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUV1cm9wZS9UYWxsaW5uCTE6Mzk6MDAJLQlMTVQJMTg4MAorCQkJMTozOTowMAktCVRNVAkxOTE4IEZlYiAjIFRhbGxpbm4gTWVhbiBUaW1lCisJCQkxOjAwCUMtRXVyCUNFJXNUCTE5MTkgSnVsCisJCQkxOjM5OjAwCS0JVE1UCTE5MjEgTWF5CisJCQkyOjAwCS0JRUVUCTE5NDAgQXVnICA2CisJCQkzOjAwCS0JTVNLCTE5NDEgU2VwIDE1CisJCQkxOjAwCUMtRXVyCUNFJXNUCTE5NDQgU2VwIDIyCisJCQkzOjAwCVJ1c3NpYQlNU0svTVNECTE5ODkgTWFyIDI2IDI6MDBzCisJCQkyOjAwCTE6MDAJRUVTVAkxOTg5IFNlcCAyNCAyOjAwcworCQkJMjowMAlDLUV1cglFRSVzVAkxOTk4IFNlcCAyMgorCQkJMjowMAlFVQlFRSVzVAkxOTk5IE5vdiAgMQorCQkJMjowMAktCUVFVAkyMDAyIEZlYiAyMQorCQkJMjowMAlFVQlFRSVzVAorCisjIEZpbmxhbmQKKyMKKyMgRnJvbSBIYW5udSBTdHJhbmcgKDE5OTQtMDktMjUgMDY6MDM6MzcgVVRDKToKKyMgV2VsbCwgaGVyZSBpbiBIZWxzaW5raSB3ZSdyZSBqdXN0IGNoYW5naW5nIGZyb20gc3VtbWVyIHRpbWUgdG8gcmVndWxhciBvbmUsCisjIGFuZCBpdCdzIHN1cHBvc2VkIHRvIGNoYW5nZSBhdCA0YW0uLi4KKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIFNoYW5rcyAmIFBvdHRlbmdlciBzYXkgRmlubGFuZCBoYXMgc3dpdGNoZWQgYXQgMDI6MDAgc3RhbmRhcmQgdGltZQorIyBzaW5jZSAxOTgxLiAgR28gd2l0aCBTdHJhbmcgaW5zdGVhZC4KKyMKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUZpbmxhbmQJMTk0Mglvbmx5CS0JQXByCTMJMDowMAkxOjAwCVMKK1J1bGUJRmlubGFuZAkxOTQyCW9ubHkJLQlPY3QJMwkwOjAwCTAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvSGVsc2lua2kJMTozOTo1MiAtCUxNVAkxODc4IE1heSAzMQorCQkJMTozOTo1MgktCUhNVAkxOTIxIE1heSAgICAjIEhlbHNpbmtpIE1lYW4gVGltZQorCQkJMjowMAlGaW5sYW5kCUVFJXNUCTE5ODEgTWFyIDI5IDI6MDAKKwkJCTI6MDAJRVUJRUUlc1QKKworIyBBYWxhbmQgSXMKK0xpbmsJRXVyb3BlL0hlbHNpbmtpCUV1cm9wZS9NYXJpZWhhbW4KKworCisjIEZyYW5jZQorCisjIEZyb20gQ2lybyBEaXNjZXBvbG8gKDIwMDAtMTItMjApOgorIworIyBIZW5yaSBMZSBDb3JyZSwgUmVnaW1lcyBIb3JhaXJlcyBwb3VyIGxlIG1vbmRlIGVudGllciwgRWRpdGlvbnMKKyMgVHJhZGl0aW9ubmVsbGVzIC0gUGFyaXMgMiBib29rcywgMTk5MworIworIyBHYWJyaWVsLCBUcmFpdGUgZGUgbCdoZXVyZSBkYW5zIGxlIG1vbmRlLCBHdXkgVHJlZGFuaWVsIGVkaXRldXIsCisjIFBhcmlzLCAxOTkxCisjCisjIEZyYW5jb2lzZSBHYXVxdWVsaW4sIFByb2JsZW1lcyBkZSBsJ2hldXJlIHJlc29sdXMgZW4gYXN0cm9sb2dpZSwKKyMgR3V5IHRyZWRhbmllbCwgUGFyaXMgMTk4NworCisKKyMKKyMgU2hhbmsgJiBQb3R0ZW5nZXIgc2VlbSB0byB1c2UgYDI0OjAwJyBhbWJpZ3VvdXNseTsgcmVzb2x2ZSBpdCB3aXRoIFdoaXRtYW4uCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlGcmFuY2UJMTkxNglvbmx5CS0JSnVuCTE0CTIzOjAwcwkxOjAwCVMKK1J1bGUJRnJhbmNlCTE5MTYJMTkxOQktCU9jdAlTdW4+PTEJMjM6MDBzCTAJLQorUnVsZQlGcmFuY2UJMTkxNwlvbmx5CS0JTWFyCTI0CTIzOjAwcwkxOjAwCVMKK1J1bGUJRnJhbmNlCTE5MTgJb25seQktCU1hcgkgOQkyMzowMHMJMTowMAlTCitSdWxlCUZyYW5jZQkxOTE5CW9ubHkJLQlNYXIJIDEJMjM6MDBzCTE6MDAJUworUnVsZQlGcmFuY2UJMTkyMAlvbmx5CS0JRmViCTE0CTIzOjAwcwkxOjAwCVMKK1J1bGUJRnJhbmNlCTE5MjAJb25seQktCU9jdAkyMwkyMzowMHMJMAktCitSdWxlCUZyYW5jZQkxOTIxCW9ubHkJLQlNYXIJMTQJMjM6MDBzCTE6MDAJUworUnVsZQlGcmFuY2UJMTkyMQlvbmx5CS0JT2N0CTI1CTIzOjAwcwkwCS0KK1J1bGUJRnJhbmNlCTE5MjIJb25seQktCU1hcgkyNQkyMzowMHMJMTowMAlTCisjIERTSCB3cml0ZXMgdGhhdCBhIGxhdyBvZiAxOTIzLTA1LTI0IHNwZWNpZmllZCAzcmQgU2F0IGluIEFwciBhdCAyMzowMCB0byAxc3QKKyMgU2F0IGluIE9jdCBhdCAyNDowMDsgYW5kIHRoYXQgaW4gMTkzMCwgYmVjYXVzZSBvZiBFYXN0ZXIsIHRoZSB0cmFuc2l0aW9ucworIyB3ZXJlIEFwciAxMiBhbmQgT2N0IDUuICBHbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJRnJhbmNlCTE5MjIJMTkzOAktCU9jdAlTYXQ+PTEJMjM6MDBzCTAJLQorUnVsZQlGcmFuY2UJMTkyMwlvbmx5CS0JTWF5CTI2CTIzOjAwcwkxOjAwCVMKK1J1bGUJRnJhbmNlCTE5MjQJb25seQktCU1hcgkyOQkyMzowMHMJMTowMAlTCitSdWxlCUZyYW5jZQkxOTI1CW9ubHkJLQlBcHIJIDQJMjM6MDBzCTE6MDAJUworUnVsZQlGcmFuY2UJMTkyNglvbmx5CS0JQXByCTE3CTIzOjAwcwkxOjAwCVMKK1J1bGUJRnJhbmNlCTE5MjcJb25seQktCUFwcgkgOQkyMzowMHMJMTowMAlTCitSdWxlCUZyYW5jZQkxOTI4CW9ubHkJLQlBcHIJMTQJMjM6MDBzCTE6MDAJUworUnVsZQlGcmFuY2UJMTkyOQlvbmx5CS0JQXByCTIwCTIzOjAwcwkxOjAwCVMKK1J1bGUJRnJhbmNlCTE5MzAJb25seQktCUFwcgkxMgkyMzowMHMJMTowMAlTCitSdWxlCUZyYW5jZQkxOTMxCW9ubHkJLQlBcHIJMTgJMjM6MDBzCTE6MDAJUworUnVsZQlGcmFuY2UJMTkzMglvbmx5CS0JQXByCSAyCTIzOjAwcwkxOjAwCVMKK1J1bGUJRnJhbmNlCTE5MzMJb25seQktCU1hcgkyNQkyMzowMHMJMTowMAlTCitSdWxlCUZyYW5jZQkxOTM0CW9ubHkJLQlBcHIJIDcJMjM6MDBzCTE6MDAJUworUnVsZQlGcmFuY2UJMTkzNQlvbmx5CS0JTWFyCTMwCTIzOjAwcwkxOjAwCVMKK1J1bGUJRnJhbmNlCTE5MzYJb25seQktCUFwcgkxOAkyMzowMHMJMTowMAlTCitSdWxlCUZyYW5jZQkxOTM3CW9ubHkJLQlBcHIJIDMJMjM6MDBzCTE6MDAJUworUnVsZQlGcmFuY2UJMTkzOAlvbmx5CS0JTWFyCTI2CTIzOjAwcwkxOjAwCVMKK1J1bGUJRnJhbmNlCTE5MzkJb25seQktCUFwcgkxNQkyMzowMHMJMTowMAlTCitSdWxlCUZyYW5jZQkxOTM5CW9ubHkJLQlOb3YJMTgJMjM6MDBzCTAJLQorUnVsZQlGcmFuY2UJMTk0MAlvbmx5CS0JRmViCTI1CSAyOjAwCTE6MDAJUworIyBUaGUgRnJlbmNoIHJ1bGVzIGZvciAxOTQxLTE5NDQgd2VyZSBub3QgdXNlZCBpbiBQYXJpcywgYnV0IFNoYW5rcyAmIFBvdHRlbmdlcgorIyB3cml0ZSB0aGF0IHRoZXkgd2VyZSB1c2VkIGluIE1vbmFjbyBhbmQgaW4gbWFueSBGcmVuY2ggbG9jYXRpb25zLgorIyBMZSBDb3JyZSB3cml0ZXMgdGhhdCB0aGUgdXBwZXIgbGltaXQgb2YgdGhlIGZyZWUgem9uZSB3YXMgQXJuZWd1eSwgT3J0aGV6LAorIyBNb250LWRlLU1hcnNhbiwgQmF6YXMsIExhbmdvbiwgTGFtb3R0ZS1Nb250cmF2ZWwsIE1hcm91aWwsIExhCisjIFJvY2hlZm91Y2F1bHQsIENoYW1wYWduZS1Nb3V0b24sIExhIFJvY2hlLVBvc2F5LCBMYSBIYXllLURlY2FydGVzLAorIyBMb2NoZXMsIE1vbnRyaWNoYXJkLCBWaWVyem9uLCBCb3VyZ2VzLCBNb3VsaW5zLCBEaWdvaW4sCisjIFBhcmF5LWxlLU1vbmlhbCwgTW9udGNlYXUtbGVzLU1pbmVzLCBDaGFsb25zLXN1ci1TYW9uZSwgQXJib2lzLAorIyBEb2xlLCBNb3JleiwgU3QtQ2xhdWRlLCBhbmQgQ29sbG9nbmVzIChIYXV0ZS1TYXZpb2UpLgorUnVsZQlGcmFuY2UJMTk0MQlvbmx5CS0JTWF5CSA1CSAwOjAwCTI6MDAJTSAjIE1pZHN1bW1lcgorIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IHRoaXMgdHJhbnNpdGlvbiBvY2N1cnJlZCBhdCBPY3QgNiAxOjAwLAorIyBidXQgZ28gd2l0aCBEZW5pcyBFeGNvZmZpZXIgKDE5OTctMTItMTIpLAorIyB3aG8gcXVvdGVzIHRoZSBFcGhlbWVyaWRlcyBBc3Ryb25vbWlxdWVzIGZvciAxOTk4IGZyb20gQnVyZWF1IGRlcyBMb25naXR1ZGVzCisjIGFzIHNheWluZyA1LzEwLzQxIDIyaFVULgorUnVsZQlGcmFuY2UJMTk0MQlvbmx5CS0JT2N0CSA2CSAwOjAwCTE6MDAJUworUnVsZQlGcmFuY2UJMTk0Mglvbmx5CS0JTWFyCSA5CSAwOjAwCTI6MDAJTQorUnVsZQlGcmFuY2UJMTk0Mglvbmx5CS0JTm92CSAyCSAzOjAwCTE6MDAJUworUnVsZQlGcmFuY2UJMTk0Mwlvbmx5CS0JTWFyCTI5CSAyOjAwCTI6MDAJTQorUnVsZQlGcmFuY2UJMTk0Mwlvbmx5CS0JT2N0CSA0CSAzOjAwCTE6MDAJUworUnVsZQlGcmFuY2UJMTk0NAlvbmx5CS0JQXByCSAzCSAyOjAwCTI6MDAJTQorUnVsZQlGcmFuY2UJMTk0NAlvbmx5CS0JT2N0CSA4CSAxOjAwCTE6MDAJUworUnVsZQlGcmFuY2UJMTk0NQlvbmx5CS0JQXByCSAyCSAyOjAwCTI6MDAJTQorUnVsZQlGcmFuY2UJMTk0NQlvbmx5CS0JU2VwCTE2CSAzOjAwCTAJLQorIyBTaGFua3MgJiBQb3R0ZW5nZXIgZ2l2ZSBNYXIgMjggMjowMCBhbmQgU2VwIDI2IDM6MDA7CisjIGdvIHdpdGggRXhjb2ZmaWVyJ3MgMjgvMy83NiAwaFVUIGFuZCAyNS85Lzc2IDIzaFVULgorUnVsZQlGcmFuY2UJMTk3Nglvbmx5CS0JTWFyCTI4CSAxOjAwCTE6MDAJUworUnVsZQlGcmFuY2UJMTk3Nglvbmx5CS0JU2VwCTI2CSAxOjAwCTAJLQorIyBTaGFua3MgJiBQb3R0ZW5nZXIgZ2l2ZSAwOjA5OjIwIGZvciBQYXJpcyBNZWFuIFRpbWUsIGFuZCBXaGl0bWFuIDA6MDk6MDUsCisjIGJ1dCBIb3dzZSBxdW90ZXMgdGhlIGFjdHVhbCBGcmVuY2ggbGVnaXNsYXRpb24gYXMgc2F5aW5nIDA6MDk6MjEuCisjIEdvIHdpdGggSG93c2UuICBIb3dzZSB3cml0ZXMgdGhhdCB0aGUgdGltZSBpbiBGcmFuY2Ugd2FzIG9mZmljaWFsbHkgYmFzZWQKKyMgb24gUE1ULTA6MDk6MjEgdW50aWwgMTk3OC0wOC0wOSwgd2hlbiB0aGUgdGltZSBiYXNlIGZpbmFsbHkgc3dpdGNoZWQgdG8gVVRDLgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvUGFyaXMJMDowOToyMSAtCUxNVAkxODkxIE1hciAxNSAgMDowMQorCQkJMDowOToyMQktCVBNVAkxOTExIE1hciAxMSAgMDowMSAgIyBQYXJpcyBNVAorIyBTaGFua3MgJiBQb3R0ZW5nZXIgZ2l2ZSAxOTQwIEp1biAxNCAwOjAwOyBnbyB3aXRoIEV4Y29mZmllciBhbmQgTGUgQ29ycmUuCisJCQkwOjAwCUZyYW5jZQlXRSVzVAkxOTQwIEp1biAxNCAyMzowMAorIyBMZSBDb3JyZSBzYXlzIFBhcmlzIHN0dWNrIHdpdGggb2NjdXBpZWQtRnJhbmNlIHRpbWUgYWZ0ZXIgdGhlIGxpYmVyYXRpb247CisjIGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorCQkJMTowMAlDLUV1cglDRSVzVAkxOTQ0IEF1ZyAyNQorCQkJMDowMAlGcmFuY2UJV0Ulc1QJMTk0NSBTZXAgMTYgIDM6MDAKKwkJCTE6MDAJRnJhbmNlCUNFJXNUCTE5NzcKKwkJCTE6MDAJRVUJQ0Ulc1QKKworIyBHZXJtYW55CisKKyMgRnJvbSBNYXJrdXMgS3VobiAoMTk5OC0wOS0yOSk6CisjIFRoZSBHZXJtYW4gdGltZSB6b25lIHdlYiBzaXRlIGJ5IHRoZSBQaHlzaWthbGlzY2gtVGVjaG5pc2NoZQorIyBCdW5kZXNhbnN0YWx0IGNvbnRhaW5zIERTVCBpbmZvcm1hdGlvbiBiYWNrIHRvIDE5MTYuCisjIFtTZWUgdHotbGluay5odG0gZm9yIHRoZSBVUkwuXQorCisjIEZyb20gSm9lcmcgU2NoaWxsaW5nICgyMDAyLTEwLTIzKToKKyMgSW4gMTk0NSwgQmVybGluIHdhcyBzd2l0Y2hlZCB0byBNb3Njb3cgU3VtbWVyIHRpbWUgKEdNVCs0KSBieQorIyA8YSBocmVmPSJodHRwOi8vd3d3LmRobS5kZS9sZW1vL2h0bWwvYmlvZ3JhZmllbi9CZXJzYXJpbk5pa29sYWkvIj4KKyMgR2VuZXJhbCBbTmlrb2xhaV0gQmVyc2FyaW48L2E+LgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDMtMDMtMDgpOgorIyA8YSBocmVmPSJodHRwOi8vd3d3LnBhcmxhbWVudC1iZXJsaW4uZGUvcGRzLWZyYWt0aW9uLm5zZi83Mjc0NTkxMjdjOGI2NmVlODUyNTY2MjMwMDQ1OTA5OS9kZWZjNzdjYjc4NGYxODBhYzEyNTZjMmIwMDMwMjc0Yi8kRklMRS9iZXJzYXJpbnQucGRmIj4KKyMgaHR0cDovL3d3dy5wYXJsYW1lbnQtYmVybGluLmRlL3Bkcy1mcmFrdGlvbi5uc2YvNzI3NDU5MTI3YzhiNjZlZTg1MjU2NjIzMDA0NTkwOTkvZGVmYzc3Y2I3ODRmMTgwYWMxMjU2YzJiMDAzMDI3NGIvJEZJTEUvYmVyc2FyaW50LnBkZgorIyA8L2E+CisjIHNheXMgdGhhdCBCZXJzYXJpbiBpc3N1ZWQgYW4gb3JkZXIgdG8gdXNlIE1vc2NvdyB0aW1lIG9uIE1heSAyMC4KKyMgSG93ZXZlciwgTW9zY293IGRpZCBub3Qgb2JzZXJ2ZSBkYXlsaWdodCBzYXZpbmcgaW4gMTk0NSwgc28KKyMgdGhpcyB3YXMgZXF1aXZhbGVudCB0byBDRU1UIChHTVQrMyksIG5vdCBHTVQrNC4KKworCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlHZXJtYW55CTE5NDYJb25seQktCUFwcgkxNAkyOjAwcwkxOjAwCVMKK1J1bGUJR2VybWFueQkxOTQ2CW9ubHkJLQlPY3QJIDcJMjowMHMJMAktCitSdWxlCUdlcm1hbnkJMTk0NwkxOTQ5CS0JT2N0CVN1bj49MQkyOjAwcwkwCS0KKyMgaHR0cDovL3d3dy5wdGIuZGUvZGUvb3JnLzQvNDQvNDQxL3NhbHQuaHRtIHNheXMgdGhlIGZvbGxvd2luZyB0cmFuc2l0aW9uCisjIG9jY3VycmVkIGF0IDM6MDAgTUVaLCBub3QgdGhlIDI6MDAgTUVaIGdpdmVuIGluIFNoYW5rcyAmIFBvdHRlbmdlci4KKyMgR28gd2l0aCB0aGUgUFRCLgorUnVsZQlHZXJtYW55CTE5NDcJb25seQktCUFwcgkgNgkzOjAwcwkxOjAwCVMKK1J1bGUJR2VybWFueQkxOTQ3CW9ubHkJLQlNYXkJMTEJMjowMHMJMjowMAlNCitSdWxlCUdlcm1hbnkJMTk0Nwlvbmx5CS0JSnVuCTI5CTM6MDAJMTowMAlTCitSdWxlCUdlcm1hbnkJMTk0OAlvbmx5CS0JQXByCTE4CTI6MDBzCTE6MDAJUworUnVsZQlHZXJtYW55CTE5NDkJb25seQktCUFwcgkxMAkyOjAwcwkxOjAwCVMKKworUnVsZSBTb3ZpZXRab25lCTE5NDUJb25seQktCU1heQkyNAkyOjAwCTI6MDAJTSAjIE1pZHN1bW1lcgorUnVsZSBTb3ZpZXRab25lCTE5NDUJb25seQktCVNlcAkyNAkzOjAwCTE6MDAJUworUnVsZSBTb3ZpZXRab25lCTE5NDUJb25seQktCU5vdgkxOAkyOjAwcwkwCS0KKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvQmVybGluCTA6NTM6MjggLQlMTVQJMTg5MyBBcHIKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTk0NSBNYXkgMjQgMjowMAorCQkJMTowMCBTb3ZpZXRab25lCUNFJXNUCTE5NDYKKwkJCTE6MDAJR2VybWFueQlDRSVzVAkxOTgwCisJCQkxOjAwCUVVCUNFJXNUCisKKyMgR2VvcmdpYQorIyBQbGVhc2Ugc2VlIHRoZSAiYXNpYSIgZmlsZSBmb3IgQXNpYS9UYmlsaXNpLgorIyBIZXJvZG90dXMgKEhpc3RvcmllcywgSVYuNDUpIHNheXMgR2VvcmdpYSBub3J0aCBvZiB0aGUgUGhhc2lzIChub3cgUmlvbmkpCisjIGlzIGluIEV1cm9wZS4gIE91ciByZWZlcmVuY2UgbG9jYXRpb24gVGJpbGlzaSBpcyBpbiB0aGUgQXNpYW4gcGFydC4KKworIyBHaWJyYWx0YXIKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgRXVyb3BlL0dpYnJhbHRhcgktMDoyMToyNCAtCUxNVAkxODgwIEF1ZyAgMiAwOjAwcworCQkJMDowMAlHQi1FaXJlCSVzCTE5NTcgQXByIDE0IDI6MDAKKwkJCTE6MDAJLQlDRVQJMTk4MgorCQkJMTowMAlFVQlDRSVzVAorCisjIEdyZWVjZQorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKKyMgV2hpdG1hbiBnaXZlcyAxOTMyIEp1bCA1IC0gTm92IDE7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlHcmVlY2UJMTkzMglvbmx5CS0JSnVsCSA3CTA6MDAJMTowMAlTCitSdWxlCUdyZWVjZQkxOTMyCW9ubHkJLQlTZXAJIDEJMDowMAkwCS0KKyMgV2hpdG1hbiBnaXZlcyAxOTQxIEFwciAyNSAtID87IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlHcmVlY2UJMTk0MQlvbmx5CS0JQXByCSA3CTA6MDAJMTowMAlTCisjIFdoaXRtYW4gZ2l2ZXMgMTk0MiBGZWIgMiAtID87IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlHcmVlY2UJMTk0Mglvbmx5CS0JTm92CSAyCTM6MDAJMAktCitSdWxlCUdyZWVjZQkxOTQzCW9ubHkJLQlNYXIJMzAJMDowMAkxOjAwCVMKK1J1bGUJR3JlZWNlCTE5NDMJb25seQktCU9jdAkgNAkwOjAwCTAJLQorIyBXaGl0bWFuIGdpdmVzIDE5NDQgT2N0IDMgLSBPY3QgMzE7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlHcmVlY2UJMTk1Mglvbmx5CS0JSnVsCSAxCTA6MDAJMTowMAlTCitSdWxlCUdyZWVjZQkxOTUyCW9ubHkJLQlOb3YJIDIJMDowMAkwCS0KK1J1bGUJR3JlZWNlCTE5NzUJb25seQktCUFwcgkxMgkwOjAwcwkxOjAwCVMKK1J1bGUJR3JlZWNlCTE5NzUJb25seQktCU5vdgkyNgkwOjAwcwkwCS0KK1J1bGUJR3JlZWNlCTE5NzYJb25seQktCUFwcgkxMQkyOjAwcwkxOjAwCVMKK1J1bGUJR3JlZWNlCTE5NzYJb25seQktCU9jdAkxMAkyOjAwcwkwCS0KK1J1bGUJR3JlZWNlCTE5NzcJMTk3OAktCUFwcglTdW4+PTEJMjowMHMJMTowMAlTCitSdWxlCUdyZWVjZQkxOTc3CW9ubHkJLQlTZXAJMjYJMjowMHMJMAktCitSdWxlCUdyZWVjZQkxOTc4CW9ubHkJLQlTZXAJMjQJNDowMAkwCS0KK1J1bGUJR3JlZWNlCTE5NzkJb25seQktCUFwcgkgMQk5OjAwCTE6MDAJUworUnVsZQlHcmVlY2UJMTk3OQlvbmx5CS0JU2VwCTI5CTI6MDAJMAktCitSdWxlCUdyZWVjZQkxOTgwCW9ubHkJLQlBcHIJIDEJMDowMAkxOjAwCVMKK1J1bGUJR3JlZWNlCTE5ODAJb25seQktCVNlcAkyOAkwOjAwCTAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvQXRoZW5zCTE6MzQ6NTIgLQlMTVQJMTg5NSBTZXAgMTQKKwkJCTE6MzQ6NTIJLQlBTVQJMTkxNiBKdWwgMjggMDowMSAgICAgIyBBdGhlbnMgTVQKKwkJCTI6MDAJR3JlZWNlCUVFJXNUCTE5NDEgQXByIDMwCisJCQkxOjAwCUdyZWVjZQlDRSVzVAkxOTQ0IEFwciAgNAorCQkJMjowMAlHcmVlY2UJRUUlc1QJMTk4MQorCQkJIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IGl0IHN3aXRjaGVkIHRvIEMtRXVyIGluIDE5ODE7CisJCQkjIGdvIHdpdGggRVUgaW5zdGVhZCwgc2luY2UgR3JlZWNlIGpvaW5lZCBpdCBvbiBKYW4gMS4KKwkJCTI6MDAJRVUJRUUlc1QKKworIyBIdW5nYXJ5CisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlIdW5nYXJ5CTE5MTgJb25seQktCUFwcgkgMQkgMzowMAkxOjAwCVMKK1J1bGUJSHVuZ2FyeQkxOTE4CW9ubHkJLQlTZXAJMjkJIDM6MDAJMAktCitSdWxlCUh1bmdhcnkJMTkxOQlvbmx5CS0JQXByCTE1CSAzOjAwCTE6MDAJUworUnVsZQlIdW5nYXJ5CTE5MTkJb25seQktCVNlcAkxNQkgMzowMAkwCS0KK1J1bGUJSHVuZ2FyeQkxOTIwCW9ubHkJLQlBcHIJIDUJIDM6MDAJMTowMAlTCitSdWxlCUh1bmdhcnkJMTkyMAlvbmx5CS0JU2VwCTMwCSAzOjAwCTAJLQorUnVsZQlIdW5nYXJ5CTE5NDUJb25seQktCU1heQkgMQkyMzowMAkxOjAwCVMKK1J1bGUJSHVuZ2FyeQkxOTQ1CW9ubHkJLQlOb3YJIDMJIDA6MDAJMAktCitSdWxlCUh1bmdhcnkJMTk0Nglvbmx5CS0JTWFyCTMxCSAyOjAwcwkxOjAwCVMKK1J1bGUJSHVuZ2FyeQkxOTQ2CTE5NDkJLQlPY3QJU3VuPj0xCSAyOjAwcwkwCS0KK1J1bGUJSHVuZ2FyeQkxOTQ3CTE5NDkJLQlBcHIJU3VuPj00CSAyOjAwcwkxOjAwCVMKK1J1bGUJSHVuZ2FyeQkxOTUwCW9ubHkJLQlBcHIJMTcJIDI6MDBzCTE6MDAJUworUnVsZQlIdW5nYXJ5CTE5NTAJb25seQktCU9jdAkyMwkgMjowMHMJMAktCitSdWxlCUh1bmdhcnkJMTk1NAkxOTU1CS0JTWF5CTIzCSAwOjAwCTE6MDAJUworUnVsZQlIdW5nYXJ5CTE5NTQJMTk1NQktCU9jdAkgMwkgMDowMAkwCS0KK1J1bGUJSHVuZ2FyeQkxOTU2CW9ubHkJLQlKdW4JU3VuPj0xCSAwOjAwCTE6MDAJUworUnVsZQlIdW5nYXJ5CTE5NTYJb25seQktCVNlcAlsYXN0U3VuCSAwOjAwCTAJLQorUnVsZQlIdW5nYXJ5CTE5NTcJb25seQktCUp1bglTdW4+PTEJIDE6MDAJMTowMAlTCitSdWxlCUh1bmdhcnkJMTk1Nwlvbmx5CS0JU2VwCWxhc3RTdW4JIDM6MDAJMAktCitSdWxlCUh1bmdhcnkJMTk4MAlvbmx5CS0JQXByCSA2CSAxOjAwCTE6MDAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvQnVkYXBlc3QJMToxNjoyMCAtCUxNVAkxODkwIE9jdAorCQkJMTowMAlDLUV1cglDRSVzVAkxOTE4CisJCQkxOjAwCUh1bmdhcnkJQ0Ulc1QJMTk0MSBBcHIgIDYgIDI6MDAKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTk0NQorCQkJMTowMAlIdW5nYXJ5CUNFJXNUCTE5ODAgU2VwIDI4ICAyOjAwcworCQkJMTowMAlFVQlDRSVzVAorCisjIEljZWxhbmQKKyMKKyMgRnJvbSBBZGFtIERhdmlkICgxOTkzLTExLTA2KToKKyMgVGhlIG5hbWUgb2YgdGhlIHRpbWV6b25lIGluIEljZWxhbmQgZm9yIHN5c3RlbSAvIG1haWwgLyBuZXdzIHB1cnBvc2VzIGlzIEdNVC4KKyMKKyMgKDE5OTMtMTItMDUpOgorIyBUaGlzIG1hdGVyaWFsIGlzIHBhcmFwaHJhc2VkIGZyb20gdGhlIDE5ODggZWRpdGlvbiBvZiB0aGUgVW5pdmVyc2l0eSBvZgorIyBJY2VsYW5kIEFsbWFuYWsuCisjCisjIEZyb20gSmFudWFyeSAxc3QsIDE5MDggdGhlIHdob2xlIG9mIEljZWxhbmQgd2FzIHN0YW5kYXJkaXNlZCBhdCAxIGhvdXIKKyMgYmVoaW5kIEdNVC4gUHJldmlvdXNseSwgbG9jYWwgbWVhbiBzb2xhciB0aW1lIHdhcyB1c2VkIGluIGRpZmZlcmVudCBwYXJ0cworIyBvZiBJY2VsYW5kLCB0aGUgYWxtYW5hayBoYWQgYmVlbiBiYXNlZCBvbiBSZXlramF2aWsgbWVhbiBzb2xhciB0aW1lIHdoaWNoCisjIHdhcyAxIGhvdXIgYW5kIDI4IG1pbnV0ZXMgYmVoaW5kIEdNVC4KKyMKKyMgImZpcnN0IGRheSBvZiB3aW50ZXIiIHJlZmVycmVkIHRvIFtiZWxvd10gbWVhbnMgdGhlIGZpcnN0IGRheSBvZiB0aGUgMjYgd2Vla3MKKyMgb2Ygd2ludGVyLCBhY2NvcmRpbmcgdG8gdGhlIG9sZCBpY2VsYW5kaWMgY2FsZW5kYXIgdGhhdCBkYXRlcyBiYWNrIHRvIHRoZQorIyB0aW1lIHRoZSBub3JzZW1lbiBmaXJzdCBzZXR0bGVkIEljZWxhbmQuICBUaGUgZmlyc3QgZGF5IG9mIHdpbnRlciBpcyBhbHdheXMKKyMgU2F0dXJkYXksIGJ1dCBpcyBub3QgZGVwZW5kZW50IG9uIHRoZSBKdWxpYW4gb3IgR3JlZ29yaWFuIGNhbGVuZGFycy4KKyMKKyMgKDE5OTMtMTItMTApOgorIyBJIGhhdmUgYSByZWZlcmVuY2UgZnJvbSB0aGUgT3hmb3JkIEljZWxhbmRpYy1FbmdsaXNoIGRpY3Rpb25hcnkgZm9yIHRoZQorIyBiZWdpbm5pbmcgb2Ygd2ludGVyLCB3aGljaCB0aWVzIGl0IHRvIHRoZSBlY2NsZXNpYXN0aWNhbCBjYWxlbmRhciAoYW5kIHRodXMKKyMgdG8gdGhlIGp1bGlhbi9ncmVnb3JpYW4gY2FsZW5kYXIpIG92ZXIgdGhlIHBlcmlvZCBpbiBxdWVzdGlvbi4KKyMJdGhlIHdpbnRlciBiZWdpbnMgb24gdGhlIFNhdHVyZGF5IG5leHQgYmVmb3JlIFN0LiBMdWtlJ3MgZGF5CisjCShvbGQgc3R5bGUpLCBvciBvbiBTdC4gTHVrZSdzIGRheSwgaWYgYSBTYXR1cmRheS4KKyMgU3QuIEx1a2UncyBkYXkgb3VnaHQgdG8gYmUgdHJhY2VhYmxlIGZyb20gZWNjbGVzaWFzdGljYWwgc291cmNlcy4gIm9sZCBzdHlsZSIKKyMgbWlnaHQgYmUgYSByZWZlcmVuY2UgdG8gdGhlIEp1bGlhbiBjYWxlbmRhciBhcyBvcHBvc2VkIHRvIEdyZWdvcmlhbiwgb3IgaXQKKyMgbWlnaHQgbWVhbiBzb21ldGhpbmcgZWxzZSAoPz8/KS4KKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIFRoZSBJY2VsYW5kIEFsbWFuYWssIFNoYW5rcyAmIFBvdHRlbmdlciwgYW5kIFdoaXRtYW4gZGlzYWdyZWUgb24gbWFueSBwb2ludHMuCisjIFdlIGdvIHdpdGggdGhlIEFsbWFuYWssIGV4Y2VwdCBmb3Igb25lIGNsYWltIGZyb20gU2hhbmtzICYgUG90dGVuZ2VyLCBuYW1lbHkKKyMgdGhhdCBSZXlrYXZpayB3YXMgMjFXNTcgZnJvbSAxODM3IHRvIDE5MDgsIGxvY2FsIG1lYW4gdGltZSBiZWZvcmUgdGhhdC4KKyMKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUljZWxhbmQJMTkxNwkxOTE4CS0JRmViCTE5CTIzOjAwCTE6MDAJUworUnVsZQlJY2VsYW5kCTE5MTcJb25seQktCU9jdAkyMQkgMTowMAkwCS0KK1J1bGUJSWNlbGFuZAkxOTE4CW9ubHkJLQlOb3YJMTYJIDE6MDAJMAktCitSdWxlCUljZWxhbmQJMTkzOQlvbmx5CS0JQXByCTI5CTIzOjAwCTE6MDAJUworUnVsZQlJY2VsYW5kCTE5MzkJb25seQktCU5vdgkyOQkgMjowMAkwCS0KK1J1bGUJSWNlbGFuZAkxOTQwCW9ubHkJLQlGZWIJMjUJIDI6MDAJMTowMAlTCitSdWxlCUljZWxhbmQJMTk0MAlvbmx5CS0JTm92CSAzCSAyOjAwCTAJLQorUnVsZQlJY2VsYW5kCTE5NDEJb25seQktCU1hcgkgMgkgMTowMHMJMTowMAlTCitSdWxlCUljZWxhbmQJMTk0MQlvbmx5CS0JTm92CSAyCSAxOjAwcwkwCS0KK1J1bGUJSWNlbGFuZAkxOTQyCW9ubHkJLQlNYXIJIDgJIDE6MDBzCTE6MDAJUworUnVsZQlJY2VsYW5kCTE5NDIJb25seQktCU9jdAkyNQkgMTowMHMJMAktCisjIDE5NDMtMTk0NiAtIGZpcnN0IFN1bmRheSBpbiBNYXJjaCB1bnRpbCBmaXJzdCBTdW5kYXkgaW4gd2ludGVyCitSdWxlCUljZWxhbmQJMTk0MwkxOTQ2CS0JTWFyCVN1bj49MQkgMTowMHMJMTowMAlTCitSdWxlCUljZWxhbmQJMTk0MwkxOTQ4CS0JT2N0CVN1bj49MjIJIDE6MDBzCTAJLQorIyAxOTQ3LTE5NjcgLSBmaXJzdCBTdW5kYXkgaW4gQXByaWwgdW50aWwgZmlyc3QgU3VuZGF5IGluIHdpbnRlcgorUnVsZQlJY2VsYW5kCTE5NDcJMTk2NwktCUFwcglTdW4+PTEJIDE6MDBzCTE6MDAJUworIyAxOTQ5IE9jdCB0cmFuc2l0aW9uIGRlbGF5ZWQgYnkgMSB3ZWVrCitSdWxlCUljZWxhbmQJMTk0OQlvbmx5CS0JT2N0CTMwCSAxOjAwcwkwCS0KK1J1bGUJSWNlbGFuZAkxOTUwCTE5NjYJLQlPY3QJU3VuPj0yMgkgMTowMHMJMAktCitSdWxlCUljZWxhbmQJMTk2Nwlvbmx5CS0JT2N0CTI5CSAxOjAwcwkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQXRsYW50aWMvUmV5a2phdmlrCS0xOjI3OjI0IC0JTE1UCTE4MzcKKwkJCS0xOjI3OjQ4IC0JUk1UCTE5MDggIyBSZXlramF2aWsgTWVhbiBUaW1lPworCQkJLTE6MDAJSWNlbGFuZAlJUyVzVAkxOTY4IEFwciA3IDE6MDBzCisJCQkgMDowMAktCUdNVAorCisjIEl0YWx5CisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDEtMDMtMDYpOgorIyBTaWNpbHkgYW5kIFNhcmRpbmlhIGVhY2ggaGFkIHRoZWlyIG93biB0aW1lIHpvbmVzIGZyb20gMTg2NiB0byAxODkzLAorIyBjYWxsZWQgUGFsZXJtbyBUaW1lICgrMDA6NTM6MjgpIGFuZCBDYWdsaWFyaSBUaW1lICgrMDA6MzY6MzIpLgorIyBEdXJpbmcgV29ybGQgV2FyIElJLCBHZXJtYW4tY29udHJvbGxlZCBJdGFseSB1c2VkIEdlcm1hbiB0aW1lLgorIyBCdXQgdGhlc2UgZXZlbnRzIGFsbCBvY2N1cnJlZCBiZWZvcmUgdGhlIDE5NzAgY3V0b2ZmLAorIyBzbyByZWNvcmQgb25seSB0aGUgdGltZSBpbiBSb21lLgorIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgRm9yIEl0YWxpYW4gRFNUIHdlIGhhdmUgdGhyZWUgc291cmNlczogU2hhbmtzICYgUG90dGVuZ2VyLCBXaGl0bWFuLCBhbmQKKyMgRi4gUG9sbGFzdHJpCisjIDxhIGhyZWY9Imh0dHA6Ly90b2kuaXJpdGkuY25yLml0L3VrL2llbml0bHQuaHRtbCI+CisjIERheS1saWdodCBTYXZpbmcgVGltZSBpbiBJdGFseSAoMjAwNi0wMi0wMykKKyMgPC9hPgorIyAoYEZQJyBiZWxvdyksIHRha2VuIGZyb20gYW4gSXRhbGlhbiBOYXRpb25hbCBFbGVjdHJvdGVjaG5pY2FsIEluc3RpdHV0ZQorIyBwdWJsaWNhdGlvbi4gV2hlbiB0aGUgdGhyZWUgc291cmNlcyBkaXNhZ3JlZSwgZ3Vlc3Mgd2hvJ3MgcmlnaHQsIGFzIGZvbGxvd3M6CisjCisjIHllYXIJRlAJU2hhbmtzJlAuIChTKQlXaGl0bWFuIChXKQlHbyB3aXRoOgorIyAxOTE2CTA2LTAzCTA2LTAzIDI0OjAwCTA2LTAzIDAwOjAwCUZQICYgVworIwkwOS0zMAkwOS0zMCAyNDowMAkwOS0zMCAwMTowMAlGUDsgZ3Vlc3MgMjQ6MDBzCisjIDE5MTcJMDQtMDEJMDMtMzEgMjQ6MDAJMDMtMzEgMDA6MDAJRlAgJiBTCisjCTA5LTMwCTA5LTI5IDI0OjAwCTA5LTMwIDAxOjAwCUZQICYgVworIyAxOTE4CTAzLTA5CTAzLTA5IDI0OjAwCTAzLTA5IDAwOjAwCUZQICYgUworIwkxMC0wNgkxMC0wNSAyNDowMAkxMC0wNiAwMTowMAlGUCAmIFcKKyMgMTkxOQkwMy0wMQkwMy0wMSAyNDowMAkwMy0wMSAwMDowMAlGUCAmIFMKKyMJMTAtMDQJMTAtMDQgMjQ6MDAJMTAtMDQgMDE6MDAJRlA7IGd1ZXNzIDI0OjAwcworIyAxOTIwCTAzLTIwCTAzLTIwIDI0OjAwCTAzLTIwIDAwOjAwCUZQICYgUworIwkwOS0xOAkwOS0xOCAyNDowMAkxMC0wMSAwMTowMAlGUDsgZ3Vlc3MgMjQ6MDBzCisjIDE5NDQJMDQtMDIJMDQtMDMgMDI6MDAJCQlTIChzZWUgQy1FdXIpCisjCTA5LTE2CTEwLTAyIDAzOjAwCQkJRlA7IGd1ZXNzIDI0OjAwcworIyAxOTQ1CTA5LTE0CTA5LTE2IDI0OjAwCQkJRlA7IGd1ZXNzIDI0OjAwcworIyAxOTcwCTA1LTIxCTA1LTMxIDAwOjAwCQkJUworIwkwOS0yMAkwOS0yNyAwMDowMAkJCVMKKyMKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUl0YWx5CTE5MTYJb25seQktCUp1bgkgMwkwOjAwcwkxOjAwCVMKK1J1bGUJSXRhbHkJMTkxNglvbmx5CS0JT2N0CSAxCTA6MDBzCTAJLQorUnVsZQlJdGFseQkxOTE3CW9ubHkJLQlBcHIJIDEJMDowMHMJMTowMAlTCitSdWxlCUl0YWx5CTE5MTcJb25seQktCVNlcAkzMAkwOjAwcwkwCS0KK1J1bGUJSXRhbHkJMTkxOAlvbmx5CS0JTWFyCTEwCTA6MDBzCTE6MDAJUworUnVsZQlJdGFseQkxOTE4CTE5MTkJLQlPY3QJU3VuPj0xCTA6MDBzCTAJLQorUnVsZQlJdGFseQkxOTE5CW9ubHkJLQlNYXIJIDIJMDowMHMJMTowMAlTCitSdWxlCUl0YWx5CTE5MjAJb25seQktCU1hcgkyMQkwOjAwcwkxOjAwCVMKK1J1bGUJSXRhbHkJMTkyMAlvbmx5CS0JU2VwCTE5CTA6MDBzCTAJLQorUnVsZQlJdGFseQkxOTQwCW9ubHkJLQlKdW4JMTUJMDowMHMJMTowMAlTCitSdWxlCUl0YWx5CTE5NDQJb25seQktCVNlcAkxNwkwOjAwcwkwCS0KK1J1bGUJSXRhbHkJMTk0NQlvbmx5CS0JQXByCSAyCTI6MDAJMTowMAlTCitSdWxlCUl0YWx5CTE5NDUJb25seQktCVNlcAkxNQkwOjAwcwkwCS0KK1J1bGUJSXRhbHkJMTk0Nglvbmx5CS0JTWFyCTE3CTI6MDBzCTE6MDAJUworUnVsZQlJdGFseQkxOTQ2CW9ubHkJLQlPY3QJIDYJMjowMHMJMAktCitSdWxlCUl0YWx5CTE5NDcJb25seQktCU1hcgkxNgkwOjAwcwkxOjAwCVMKK1J1bGUJSXRhbHkJMTk0Nwlvbmx5CS0JT2N0CSA1CTA6MDBzCTAJLQorUnVsZQlJdGFseQkxOTQ4CW9ubHkJLQlGZWIJMjkJMjowMHMJMTowMAlTCitSdWxlCUl0YWx5CTE5NDgJb25seQktCU9jdAkgMwkyOjAwcwkwCS0KK1J1bGUJSXRhbHkJMTk2NgkxOTY4CS0JTWF5CVN1bj49MjIJMDowMAkxOjAwCVMKK1J1bGUJSXRhbHkJMTk2NgkxOTY5CS0JU2VwCVN1bj49MjIJMDowMAkwCS0KK1J1bGUJSXRhbHkJMTk2OQlvbmx5CS0JSnVuCSAxCTA6MDAJMTowMAlTCitSdWxlCUl0YWx5CTE5NzAJb25seQktCU1heQkzMQkwOjAwCTE6MDAJUworUnVsZQlJdGFseQkxOTcwCW9ubHkJLQlTZXAJbGFzdFN1bgkwOjAwCTAJLQorUnVsZQlJdGFseQkxOTcxCTE5NzIJLQlNYXkJU3VuPj0yMgkwOjAwCTE6MDAJUworUnVsZQlJdGFseQkxOTcxCW9ubHkJLQlTZXAJbGFzdFN1bgkxOjAwCTAJLQorUnVsZQlJdGFseQkxOTcyCW9ubHkJLQlPY3QJIDEJMDowMAkwCS0KK1J1bGUJSXRhbHkJMTk3Mwlvbmx5CS0JSnVuCSAzCTA6MDAJMTowMAlTCitSdWxlCUl0YWx5CTE5NzMJMTk3NAktCVNlcAlsYXN0U3VuCTA6MDAJMAktCitSdWxlCUl0YWx5CTE5NzQJb25seQktCU1heQkyNgkwOjAwCTE6MDAJUworUnVsZQlJdGFseQkxOTc1CW9ubHkJLQlKdW4JIDEJMDowMHMJMTowMAlTCitSdWxlCUl0YWx5CTE5NzUJMTk3NwktCVNlcAlsYXN0U3VuCTA6MDBzCTAJLQorUnVsZQlJdGFseQkxOTc2CW9ubHkJLQlNYXkJMzAJMDowMHMJMTowMAlTCitSdWxlCUl0YWx5CTE5NzcJMTk3OQktCU1heQlTdW4+PTIyCTA6MDBzCTE6MDAJUworUnVsZQlJdGFseQkxOTc4CW9ubHkJLQlPY3QJIDEJMDowMHMJMAktCitSdWxlCUl0YWx5CTE5NzkJb25seQktCVNlcAkzMAkwOjAwcwkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJRXVyb3BlL1JvbWUJMDo0OTo1NiAtCUxNVAkxODY2IFNlcCAyMgorCQkJMDo0OTo1NgktCVJNVAkxODkzIE5vdiAgMSAwOjAwcyAjIFJvbWUgTWVhbgorCQkJMTowMAlJdGFseQlDRSVzVAkxOTQyIE5vdiAgMiAyOjAwcworCQkJMTowMAlDLUV1cglDRSVzVAkxOTQ0IEp1bAorCQkJMTowMAlJdGFseQlDRSVzVAkxOTgwCisJCQkxOjAwCUVVCUNFJXNUCisKK0xpbmsJRXVyb3BlL1JvbWUJRXVyb3BlL1ZhdGljYW4KK0xpbmsJRXVyb3BlL1JvbWUJRXVyb3BlL1Nhbl9NYXJpbm8KKworIyBMYXR2aWEKKworIyBGcm9tIExpZW5lIEthbmVwZSAoMTk5OC0wOS0xNyk6CisKKyMgSSBhc2tlZCBhYm91dCB0aGlzIG1hdHRlciBTY2llbnRpZmljIFNlY3JldGFyeSBvZiB0aGUgSW5zdGl0dXRlIG9mIEFzdHJvbm9teQorIyBvZiBUaGUgVW5pdmVyc2l0eSBvZiBMYXR2aWEgRHIuIHBhZWQgTXIuIElsZ29uaXMgVmlsa3MuIEkgYWxzbyBzZWFyY2hlZCB0aGUKKyMgY29ycmVjdCBkYXRhIGluIGp1cmlkaWNhbCBhY3RzIGFuZCBJIGZvdW5kIHNvbWUganVyaWRpY2FsIGRvY3VtZW50cyBhYm91dAorIyBjaGFuZ2VzIGluIHRoZSBjb3VudGluZyBvZiB0aW1lIGluIExhdHZpYSBmcm9tIDE5ODEuLi4uCisjCisjIEFjdCBOby4zNSBvZiB0aGUgQ291bmNpbCBvZiBNaW5pc3RlcnMgb2YgTGF0dmlhbiBTU1Igb2YgMTk4MS0wMS0yMiAuLi4KKyMgYWNjb3JkaW5nIHRvIHRoZSBBY3QgTm8uOTI1IG9mIHRoZSBDb3VuY2lsIG9mIE1pbmlzdGVycyBvZiBVU1NSIG9mIDE5ODAtMTAtMjQKKyMgLi4uOiBhbGwgeWVhciByb3VuZCB0aGUgdGltZSBvZiAybmQgdGltZSB6b25lICsgMSBob3VyLCBpbiBhZGRpdGlvbiB0dXJuaW5nCisjIHRoZSBoYW5kcyBvZiB0aGUgY2xvY2sgMSBob3VyIGZvcndhcmQgb24gMSBBcHJpbCBhdCAwMDowMCAoR01UIDMxIE1hcmNoIDIxOjAwKQorIyBhbmQgMSBob3VyIGJhY2t3YXJkIG9uIHRoZSAxIE9jdG9iZXIgYXQgMDA6MDAgKEdNVCAzMCBTZXB0ZW1iZXIgMjA6MDApLgorIworIyBBY3QgTm8uNTkyIG9mIHRoZSBDb3VuY2lsIG9mIE1pbmlzdGVycyBvZiBMYXR2aWFuIFNTUiBvZiAxOTg0LTA5LTI0IC4uLgorIyBhY2NvcmRpbmcgdG8gdGhlIEFjdCBOby45Njcgb2YgdGhlIENvdW5jaWwgb2YgTWluaXN0ZXJzIG9mIFVTU1Igb2YgMTk4NC0wOS0xMworIyAuLi46IGFsbCB5ZWFyIHJvdW5kIHRoZSB0aW1lIG9mIDJuZCB0aW1lIHpvbmUgKyAxIGhvdXIsIGluIGFkZGl0aW9uIHR1cm5pbmcKKyMgdGhlIGhhbmRzIG9mIHRoZSBjbG9jayAxIGhvdXIgZm9yd2FyZCBvbiB0aGUgbGFzdCBTdW5kYXkgb2YgTWFyY2ggYXQgMDI6MDAKKyMgKEdNVCAyMzowMCBvbiB0aGUgcHJldmlvdXMgZGF5KSBhbmQgMSBob3VyIGJhY2t3YXJkIG9uIHRoZSBsYXN0IFN1bmRheSBvZgorIyBTZXB0ZW1iZXIgYXQgMDM6MDAgKEdNVCAyMzowMCBvbiB0aGUgcHJldmlvdXMgZGF5KS4KKyMKKyMgQWN0IE5vLjgxIG9mIHRoZSBDb3VuY2lsIG9mIE1pbmlzdGVycyBvZiBMYXR2aWFuIFNTUiBvZiAxOTg5LTAzLTIyIC4uLgorIyBhY2NvcmRpbmcgdG8gdGhlIEFjdCBOby4yMjcgb2YgdGhlIENvdW5jaWwgb2YgTWluaXN0ZXJzIG9mIFVTU1Igb2YgMTk4OS0wMy0xNAorIyAuLi46IHNpbmNlIHRoZSBsYXN0IFN1bmRheSBvZiBNYXJjaCAxOTg5IGluIExpdGh1YW5pYW4gU1NSLCBMYXR2aWFuIFNTUiwKKyMgRXN0b25pYW4gU1NSIGFuZCBLYWxpbmluZ3JhZCByZWdpb24gb2YgUnVzc2lhbiBGZWRlcmF0aW9uIGFsbCB5ZWFyIHJvdW5kIHRoZQorIyB0aW1lIG9mIDJuZCB0aW1lIHpvbmUgKE1vc2NvdyB0aW1lIG1pbnVzIG9uZSBob3VyKS4gT24gdGhlIHRlcnJpdG9yeSBvZiBMYXR2aWEKKyMgdHJhbnNpdGlvbiB0byBzdW1tZXIgdGltZSBpcyBwZXJmb3JtZWQgb24gdGhlIGxhc3QgU3VuZGF5IG9mIE1hcmNoIGF0IDAyOjAwCisjIChHTVQgMDA6MDApLCB0dXJuaW5nIHRoZSBoYW5kcyBvZiB0aGUgY2xvY2sgMSBob3VyIGZvcndhcmQuICBUaGUgZW5kIG9mCisjIGRheWxpZ2h0IHNhdmluZyB0aW1lIGlzIHBlcmZvcm1lZCBvbiB0aGUgbGFzdCBTdW5kYXkgb2YgU2VwdGVtYmVyIGF0IDAzOjAwCisjIChHTVQgMDA6MDApLCB0dXJuaW5nIHRoZSBoYW5kcyBvZiB0aGUgY2xvY2sgMSBob3VyIGJhY2t3YXJkLiBFeGNlcHRpb24gaXMKKyMgMTk4OS0wMy0yNiwgd2hlbiB3ZSBtdXN0IG5vdCB0dXJuIHRoZSBoYW5kcyBvZiB0aGUgY2xvY2suLi4uCisjCisjIFRoZSBSZWd1bGF0aW9ucyBvZiB0aGUgQ2FiaW5ldCBvZiBNaW5pc3RlcnMgb2YgdGhlIFJlcHVibGljIG9mIExhdHZpYSBvZgorIyAxOTk3LTAxLTIxIG9uIHRyYW5zaXRpb24gdG8gU3VtbWVyIHRpbWUgLi4uIGVzdGFibGlzaGVkIHRoZSBzYW1lIG9yZGVyIG9mCisjIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBzZXR0aW5ncyBhcyBpbiB0aGUgU3RhdGVzIG9mIHRoZSBFdXJvcGVhbiBVbmlvbi4KKworIyBGcm9tIEFuZHJlaSBJdmFub3YgKDIwMDAtMDMtMDYpOgorIyBUaGlzIHllYXIgTGF0dmlhIHdpbGwgbm90IHN3aXRjaCB0byBEYXlsaWdodCBTYXZpbmdzIFRpbWUgKGFzIHNwZWNpZmllZCBpbgorIyA8YSBocmVmPSJodHRwOi8vd3d3Lmx2LWxhaWtzLmx2L3d3d3Jha3N0aS8yMDAwLzA3MTA3Mi92ZDQuaHRtIj4KKyMgVGhlIFJlZ3VsYXRpb25zIG9mIHRoZSBDYWJpbmV0IG9mIE1pbmlzdGVycyBvZiB0aGUgUmVwLiBvZiBMYXR2aWEgb2YKKyMgMjktRmViLTIwMDAgKCM3OSk8L2E+LCBpbiBMYXR2aWFuIGZvciBzdWJzY3JpYmVycyBvbmx5KS4KKworIyA8YSBocmVmPSJodHRwOi8vd3d3LnJmZXJsLm9yZy9uZXdzbGluZS8yMDAxLzAxLzMtQ0VFL2NlZS0wMzAxMDEuaHRtbCI+CisjIEZyb20gUkZFL1JMIE5ld3NsaW5lICgyMDAxLTAxLTAzKSwgbm90ZWQgYWZ0ZXIgYSBoZWFkcy11cCBieSBSaXZlcyBNY0RvdzoKKyMgPC9hPgorIyBUaGUgTGF0dmlhbiBnb3Zlcm5tZW50IG9uIDIgSmFudWFyeSBkZWNpZGVkIHRoYXQgdGhlIGNvdW50cnkgd2lsbAorIyBpbnN0aXR1dGUgZGF5bGlnaHQtc2F2aW5nIHRpbWUgdGhpcyBzcHJpbmcsIExFVEEgcmVwb3J0ZWQuCisjIExhc3QgRmVicnVhcnkgdGhlIHRocmVlIEJhbHRpYyBzdGF0ZXMgZGVjaWRlZCBub3QgdG8gdHVybiBiYWNrIHRoZWlyCisjIGNsb2NrcyBvbmUgaG91ciBpbiB0aGUgc3ByaW5nLi4uLgorIyBNaW5pc3RlciBvZiBFY29ub215IEFpZ2FycyBLYWx2aXRpcyBub3RlZCB0aGF0IExhdHZpYSBoYWQgdG9vIGZldworIyBkYXlsaWdodCBob3VycyBhbmQgdGh1cyBkZWNpZGVkIHRvIGNvbXBseSB3aXRoIGEgZHJhZnQgRXVyb3BlYW4KKyMgQ29tbWlzc2lvbiBkaXJlY3RpdmUgdGhhdCBwcm92aWRlcyBmb3IgaW5zdGl0dXRpbmcgZGF5bGlnaHQtc2F2aW5nCisjIHRpbWUgaW4gRVUgY291bnRyaWVzIGJldHdlZW4gMjAwMiBhbmQgMjAwNi4gVGhlIExhdHZpYW4gZ292ZXJubWVudAorIyB1cmdlZCBMaXRodWFuaWEgYW5kIEVzdG9uaWEgdG8gYWRvcHQgYSBzaW1pbGFyIHRpbWUgcG9saWN5LCBidXQgaXQKKyMgYXBwZWFycyB0aGF0IHRoZXkgd2lsbCBub3QgZG8gc28uLi4uCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUxhdHZpYQkxOTg5CTE5OTYJLQlNYXIJbGFzdFN1bgkgMjowMHMJMTowMAlTCitSdWxlCUxhdHZpYQkxOTg5CTE5OTYJLQlTZXAJbGFzdFN1bgkgMjowMHMJMAktCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUV1cm9wZS9SaWdhCTE6MzY6MjQJLQlMTVQJMTg4MAorCQkJMTozNjoyNAktCVJNVAkxOTE4IEFwciAxNSAyOjAwICNSaWdhIE1lYW4gVGltZQorCQkJMTozNjoyNAkxOjAwCUxTVAkxOTE4IFNlcCAxNiAzOjAwICNMYXR2aWFuIFN1bW1lcgorCQkJMTozNjoyNAktCVJNVAkxOTE5IEFwciAgMSAyOjAwCisJCQkxOjM2OjI0CTE6MDAJTFNUCTE5MTkgTWF5IDIyIDM6MDAKKwkJCTE6MzY6MjQJLQlSTVQJMTkyNiBNYXkgMTEKKwkJCTI6MDAJLQlFRVQJMTk0MCBBdWcgIDUKKwkJCTM6MDAJLQlNU0sJMTk0MSBKdWwKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTk0NCBPY3QgMTMKKwkJCTM6MDAJUnVzc2lhCU1TSy9NU0QJMTk4OSBNYXIgbGFzdFN1biAyOjAwcworCQkJMjowMAkxOjAwCUVFU1QJMTk4OSBTZXAgbGFzdFN1biAyOjAwcworCQkJMjowMAlMYXR2aWEJRUUlc1QJMTk5NyBKYW4gMjEKKwkJCTI6MDAJRVUJRUUlc1QJMjAwMCBGZWIgMjkKKwkJCTI6MDAJLQlFRVQJMjAwMSBKYW4gIDIKKwkJCTI6MDAJRVUJRUUlc1QKKworIyBMaWVjaHRlbnN0ZWluCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUV1cm9wZS9WYWR1egkwOjM4OjA0IC0JTE1UCTE4OTQgSnVuCisJCQkxOjAwCS0JQ0VUCTE5ODEKKwkJCTE6MDAJRVUJQ0Ulc1QKKworIyBMaXRodWFuaWEKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgxOTk2LTExLTIyKToKKyMgSUFUQSBTU0lNICgxOTkyLzE5OTYpIHNheXMgTGl0aHVhbmlhIHVzZXMgVy1FdXIgcnVsZXMsIGJ1dCBzaW5jZSBpdCBpcworIyBrbm93biB0byBiZSB3cm9uZyBhYm91dCBFc3RvbmlhIGFuZCBMYXR2aWEsIGFzc3VtZSBpdCdzIHdyb25nIGhlcmUgdG9vLgorCisjIEZyb20gTWFyaXVzIEdlZG1pbmFzICgxOTk4LTA4LTA3KToKKyMgSSB3b3VsZCBsaWtlIHRvIGluZm9ybSB0aGF0IGluIHRoaXMgeWVhciBMaXRodWFuaWFuIHRpbWUgem9uZQorIyAoRXVyb3BlL1ZpbG5pdXMpIHdhcyBjaGFuZ2VkLgorCisjIEZyb20gPGEgaHJlZj0iaHR0cDovL3d3dy5lbHRhLmx0LyI+RUxUQTwvYT4gTm8uIDk3MiAoMjU4MikgKDE5OTktMDktMjkpLAorIyB2aWEgU3RlZmZlbiBUaG9yc2VuOgorIyBMaXRodWFuaWEgaGFzIHNoaWZ0ZWQgYmFjayB0byB0aGUgc2Vjb25kIHRpbWUgem9uZSAoR01UIHBsdXMgdHdvIGhvdXJzKQorIyB0byBiZSB2YWxpZCBoZXJlIHN0YXJ0aW5nIGZyb20gT2N0b2JlciAzMSwKKyMgYXMgZGVjaWRlZCBieSB0aGUgbmF0aW9uYWwgZ292ZXJubWVudCBvbiBXZWRuZXNkYXkuLi4uCisjIFRoZSBMaXRodWFuaWFuIGdvdmVybm1lbnQgYWxzbyBhbm5vdW5jZWQgcGxhbnMgdG8gY29uc2lkZXIgYQorIyBtb3Rpb24gdG8gZ2l2ZSB1cCBzaGlmdGluZyB0byBzdW1tZXIgdGltZSBpbiBzcHJpbmcsIGFzIGl0IHdhcworIyBhbHJlYWR5IGRvbmUgYnkgRXN0b25pYS4KKworIyBGcm9tIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnRvdXJpc20ubHQvaW5mb3JtYS9mZi5odG0iPgorIyBGYWN0IEZpbGUsIExpdGh1YW5pYW4gU3RhdGUgRGVwYXJ0bWVudCBvZiBUb3VyaXNtCisjIDwvYT4gKDIwMDAtMDMtMjcpOiBMb2NhbCB0aW1lIGlzIEdNVCsyIGhvdXJzIC4uLiwgbm8gZGF5bGlnaHQgc2F2aW5nLgorCisjIEZyb20gYSB1c2VyIHZpYSBLbGF1cyBNYXJ0ZW4gKDIwMDMtMDItMDcpOgorIyBBcyBhIGNhbmRpZGF0ZSBmb3IgbWVtYmVyc2hpcCBvZiB0aGUgRXVyb3BlYW4gVW5pb24sIExpdGh1YW5pYSB3aWxsCisjIG9ic2VydmUgU3VtbWVyIFRpbWUgaW4gMjAwMywgY2hhbmdpbmcgaXRzIGNsb2NrcyBhdCB0aGUgdGltZXMgbGFpZAorIyBkb3duIGluIEVVIERpcmVjdGl2ZSAyMDAwLzg0IG9mIDE5LkkuMDEgKGkuZS4gYXQgdGhlIHNhbWUgdGltZXMgYXMgaXRzCisjIG5laWdoYm91ciBMYXR2aWEpLiBUaGUgdGV4dCBvZiB0aGUgTGl0aHVhbmlhbiBnb3Zlcm5tZW50IE9yZGVyIG9mCisjIDcuWEkuMDIgdG8gdGhpcyBlZmZlY3QgY2FuIGJlIGZvdW5kIGF0CisjIGh0dHA6Ly93d3cubHJ2ay5sdC9udXQvMTEvbjE3NDkuaHRtCisKKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvVmlsbml1cwkxOjQxOjE2CS0JTE1UCTE4ODAKKwkJCTE6MjQ6MDAJLQlXTVQJMTkxNwkgICAgIyBXYXJzYXcgTWVhbiBUaW1lCisJCQkxOjM1OjM2CS0JS01UCTE5MTkgT2N0IDEwICMgS2F1bmFzIE1lYW4gVGltZQorCQkJMTowMAktCUNFVAkxOTIwIEp1bCAxMgorCQkJMjowMAktCUVFVAkxOTIwIE9jdCAgOQorCQkJMTowMAktCUNFVAkxOTQwIEF1ZyAgMworCQkJMzowMAktCU1TSwkxOTQxIEp1biAyNAorCQkJMTowMAlDLUV1cglDRSVzVAkxOTQ0IEF1ZworCQkJMzowMAlSdXNzaWEJTVNLL01TRAkxOTkxIE1hciAzMSAyOjAwcworCQkJMjowMAkxOjAwCUVFU1QJMTk5MSBTZXAgMjkgMjowMHMKKwkJCTI6MDAJQy1FdXIJRUUlc1QJMTk5OAorCQkJMjowMAktCUVFVAkxOTk4IE1hciAyOSAxOjAwdQorCQkJMTowMAlFVQlDRSVzVAkxOTk5IE9jdCAzMSAxOjAwdQorCQkJMjowMAktCUVFVAkyMDAzIEphbiAgMQorCQkJMjowMAlFVQlFRSVzVAorCisjIEx1eGVtYm91cmcKKyMgV2hpdG1hbiBkaXNhZ3JlZXMgd2l0aCBtb3N0IG9mIHRoZXNlIGRhdGVzIGluIG1pbm9yIHdheXM7CisjIGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJTHV4CTE5MTYJb25seQktCU1heQkxNAkyMzowMAkxOjAwCVMKK1J1bGUJTHV4CTE5MTYJb25seQktCU9jdAkgMQkgMTowMAkwCS0KK1J1bGUJTHV4CTE5MTcJb25seQktCUFwcgkyOAkyMzowMAkxOjAwCVMKK1J1bGUJTHV4CTE5MTcJb25seQktCVNlcAkxNwkgMTowMAkwCS0KK1J1bGUJTHV4CTE5MTgJb25seQktCUFwcglNb24+PTE1CSAyOjAwcwkxOjAwCVMKK1J1bGUJTHV4CTE5MTgJb25seQktCVNlcAlNb24+PTE1CSAyOjAwcwkwCS0KK1J1bGUJTHV4CTE5MTkJb25seQktCU1hcgkgMQkyMzowMAkxOjAwCVMKK1J1bGUJTHV4CTE5MTkJb25seQktCU9jdAkgNQkgMzowMAkwCS0KK1J1bGUJTHV4CTE5MjAJb25seQktCUZlYgkxNAkyMzowMAkxOjAwCVMKK1J1bGUJTHV4CTE5MjAJb25seQktCU9jdAkyNAkgMjowMAkwCS0KK1J1bGUJTHV4CTE5MjEJb25seQktCU1hcgkxNAkyMzowMAkxOjAwCVMKK1J1bGUJTHV4CTE5MjEJb25seQktCU9jdAkyNgkgMjowMAkwCS0KK1J1bGUJTHV4CTE5MjIJb25seQktCU1hcgkyNQkyMzowMAkxOjAwCVMKK1J1bGUJTHV4CTE5MjIJb25seQktCU9jdAlTdW4+PTIJIDE6MDAJMAktCitSdWxlCUx1eAkxOTIzCW9ubHkJLQlBcHIJMjEJMjM6MDAJMTowMAlTCitSdWxlCUx1eAkxOTIzCW9ubHkJLQlPY3QJU3VuPj0yCSAyOjAwCTAJLQorUnVsZQlMdXgJMTkyNAlvbmx5CS0JTWFyCTI5CTIzOjAwCTE6MDAJUworUnVsZQlMdXgJMTkyNAkxOTI4CS0JT2N0CVN1bj49MgkgMTowMAkwCS0KK1J1bGUJTHV4CTE5MjUJb25seQktCUFwcgkgNQkyMzowMAkxOjAwCVMKK1J1bGUJTHV4CTE5MjYJb25seQktCUFwcgkxNwkyMzowMAkxOjAwCVMKK1J1bGUJTHV4CTE5MjcJb25seQktCUFwcgkgOQkyMzowMAkxOjAwCVMKK1J1bGUJTHV4CTE5MjgJb25seQktCUFwcgkxNAkyMzowMAkxOjAwCVMKK1J1bGUJTHV4CTE5MjkJb25seQktCUFwcgkyMAkyMzowMAkxOjAwCVMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgRXVyb3BlL0x1eGVtYm91cmcJMDoyNDozNiAtCUxNVAkxOTA0IEp1bgorCQkJMTowMAlMdXgJQ0Ulc1QJMTkxOCBOb3YgMjUKKwkJCTA6MDAJTHV4CVdFJXNUCTE5MjkgT2N0ICA2IDI6MDBzCisJCQkwOjAwCUJlbGdpdW0JV0Ulc1QJMTk0MCBNYXkgMTQgMzowMAorCQkJMTowMAlDLUV1cglXRSVzVAkxOTQ0IFNlcCAxOCAzOjAwCisJCQkxOjAwCUJlbGdpdW0JQ0Ulc1QJMTk3NworCQkJMTowMAlFVQlDRSVzVAorCisjIE1hY2Vkb25pYQorIyBzZWUgU2VyYmlhCisKKyMgTWFsdGEKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCU1hbHRhCTE5NzMJb25seQktCU1hcgkzMQkwOjAwcwkxOjAwCVMKK1J1bGUJTWFsdGEJMTk3Mwlvbmx5CS0JU2VwCTI5CTA6MDBzCTAJLQorUnVsZQlNYWx0YQkxOTc0CW9ubHkJLQlBcHIJMjEJMDowMHMJMTowMAlTCitSdWxlCU1hbHRhCTE5NzQJb25seQktCVNlcAkxNgkwOjAwcwkwCS0KK1J1bGUJTWFsdGEJMTk3NQkxOTc5CS0JQXByCVN1bj49MTUJMjowMAkxOjAwCVMKK1J1bGUJTWFsdGEJMTk3NQkxOTgwCS0JU2VwCVN1bj49MTUJMjowMAkwCS0KK1J1bGUJTWFsdGEJMTk4MAlvbmx5CS0JTWFyCTMxCTI6MDAJMTowMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUV1cm9wZS9NYWx0YQkwOjU4OjA0IC0JTE1UCTE4OTMgTm92ICAyIDA6MDBzICMgVmFsbGV0dGEKKwkJCTE6MDAJSXRhbHkJQ0Ulc1QJMTk0MiBOb3YgIDIgMjowMHMKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTk0NSBBcHIgIDIgMjowMHMKKwkJCTE6MDAJSXRhbHkJQ0Ulc1QJMTk3MyBNYXIgMzEKKwkJCTE6MDAJTWFsdGEJQ0Ulc1QJMTk4MQorCQkJMTowMAlFVQlDRSVzVAorCisjIE1vbGRvdmEKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgQSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoaXMgZGF0YWJhc2UgZm9sbG93ZWQgU2hhbmtzICYgUG90dGVuZ2VyLCB3aG8gd3JpdGUKKyMgdGhhdCBUaXJhc3BvbCBzd2l0Y2hlZCB0byBNb3Njb3cgdGltZSBvbiAxOTkyLTAxLTE5IGF0IDAyOjAwLgorIyBIb3dldmVyLCB0aGlzIGlzIG1vc3QgbGlrZWx5IGFuIGVycm9yLCBhcyBNb2xkb3ZhIGRlY2xhcmVkIGluZGVwZW5kZW5jZQorIyBvbiAxOTkxLTA4LTI3ICh0aGUgMTk5Mi0wMS0xOSBkYXRlIGlzIHRoYXQgb2YgYSBSdXNzaWFuIGRlY3JlZSkuCisjIEluIGVhcmx5IDE5OTIgdGhlcmUgd2FzIGxhcmdlLXNjYWxlIGludGVyZXRobmljIHZpb2xlbmNlIGluIHRoZSBhcmVhCisjIGFuZCBpdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBSdXNzb3Bob25lcyBjb250aW51ZWQgdG8gb2JzZXJ2ZSBNb3Njb3cgdGltZS4KKyMgQnV0IFt0d28gcGVvcGxlXSBzZXBhcmF0ZWx5IHJlcG9ydGVkIHZpYQorIyBKZXNwZXIgTm9yZ2FhcmQgdGhhdCBhcyBvZiAyMDAxLTAxLTI0IFRpcmFzcG9sIHdhcyBsaWtlIENoaXNpbmF1LgorIyBUaGUgVGlyYXNwb2wgZW50cnkgaGFzIHRoZXJlZm9yZSBiZWVuIHJlbW92ZWQgZm9yIG5vdy4KKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvQ2hpc2luYXUJMTo1NToyMCAtCUxNVAkxODgwCisJCQkxOjU1CS0JQ01UCTE5MTggRmViIDE1ICMgQ2hpc2luYXUgTVQKKwkJCTE6NDQ6MjQJLQlCTVQJMTkzMSBKdWwgMjQgIyBCdWNoYXJlc3QgTVQKKwkJCTI6MDAJUm9tYW5pYQlFRSVzVAkxOTQwIEF1ZyAxNQorCQkJMjowMAkxOjAwCUVFU1QJMTk0MSBKdWwgMTcKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTk0NCBBdWcgMjQKKwkJCTM6MDAJUnVzc2lhCU1TSy9NU0QJMTk5MAorCQkJMzowMAktCU1TSwkxOTkwIE1heSA2CisJCQkyOjAwCS0JRUVUCTE5OTEKKwkJCTI6MDAJUnVzc2lhCUVFJXNUCTE5OTIKKwkJCTI6MDAJRS1FdXIJRUUlc1QJMTk5NworIyBTZWUgUm9tYW5pYSBjb21tZW50YXJ5IGZvciB0aGUgZ3Vlc3NlZCAxOTk3IHRyYW5zaXRpb24gdG8gRVUgcnVsZXMuCisJCQkyOjAwCUVVCUVFJXNUCisKKyMgTW9uYWNvCisjIFNoYW5rcyAmIFBvdHRlbmdlciBnaXZlIDA6MDk6MjAgZm9yIFBhcmlzIE1lYW4gVGltZTsgZ28gd2l0aCBIb3dzZSdzCisjIG1vcmUgcHJlY2lzZSAwOjA5OjIxLgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvTW9uYWNvCTA6Mjk6MzIgLQlMTVQJMTg5MSBNYXIgMTUKKwkJCTA6MDk6MjEJLQlQTVQJMTkxMSBNYXIgMTEgICAgIyBQYXJpcyBNZWFuIFRpbWUKKwkJCTA6MDAJRnJhbmNlCVdFJXNUCTE5NDUgU2VwIDE2IDM6MDAKKwkJCTE6MDAJRnJhbmNlCUNFJXNUCTE5NzcKKwkJCTE6MDAJRVUJQ0Ulc1QKKworIyBNb250ZW5lZ3JvCisjIHNlZSBTZXJiaWEKKworIyBOZXRoZXJsYW5kcworCisjIEhvd3NlIHdyaXRlcyB0aGF0IHRoZSBOZXRoZXJsYW5kcycgcmFpbHdheXMgdXNlZCBHTVQgYmV0d2VlbiAxODkyIGFuZCAxOTQwLAorIyBidXQgZm9yIG90aGVyIHB1cnBvc2VzIHRoZSBOZXRoZXJsYW5kcyB1c2VkIEFtc3RlcmRhbSBtZWFuIHRpbWUuCisKKyMgSG93ZXZlciwgUm9iZXJ0IEguIHZhbiBHZW50IHdyaXRlcyAoMjAwMS0wNC0wMSk6CisjIEhvd3NlJ3Mgc3RhdGVtZW50IGlzIG9ubHkgY29ycmVjdCB1cCB0byAxOTA5LiBGcm9tIDE5MDktMDUtMDEgKDAwOjAwOjAwCisjIEFtc3RlcmRhbSBtZWFuIHRpbWUpIG9ud2FyZHMsIHRoZSB3aG9sZSBvZiB0aGUgTmV0aGVybGFuZHMgKGluY2x1ZGluZworIyB0aGUgRHV0Y2ggcmFpbHdheXMpIHdhcyByZXF1aXJlZCBieSBsYXcgdG8gb2JzZXJ2ZSBBbXN0ZXJkYW0gbWVhbiB0aW1lCisjICgxOSBtaW51dGVzIDMyLjEzIHNlY29uZHMgYWhlYWQgb2YgR01UKS4gVGhpcyBoYWQgYWxyZWFkeSBiZWVuIHRoZQorIyBjb21tb24gcHJhY3RpY2UgKGV4Y2VwdCBmb3IgdGhlIHJhaWx3YXlzKSBmb3IgbWFueSBkZWNhZGVzIGJ1dCBpdCB3YXMKKyMgbm90IHVudGlsIDE5MDkgd2hlbiB0aGUgRHV0Y2ggZ292ZXJubWVudCBmaW5hbGx5IGRlZmluZWQgdGhpcyBieSBsYXcuCisjIE9uIDE5MzctMDctMDEgdGhpcyB3YXMgY2hhbmdlZCB0byAyMCBtaW51dGVzIChleGFjdGx5KSBhaGVhZCBvZiBHTVQgYW5kCisjIHdhcyBnZW5lcmFsbHkga25vd24gYXMgRHV0Y2ggVGltZSAoIk5lZGVybGFuZHNlIFRpamQiKS4KKyMKKyMgKDIwMDEtMDQtMDgpOgorIyAxODkyLTA1LTAxIHdhcyB0aGUgZGF0ZSB3aGVuIHRoZSBEdXRjaCByYWlsd2F5cyB3ZXJlIGJ5IGxhdyByZXF1aXJlZCB0bworIyBvYnNlcnZlIEdNVCB3aGlsZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBOZXRoZXJsYW5kcyBhZGhlcmVkIHRvIHRoZSBjb21tb24KKyMgcHJhY3RpY2Ugb2YgZm9sbG93aW5nIEFtc3RlcmRhbSBtZWFuIHRpbWUuCisjCisjICgyMDAxLTA0LTA5KToKKyMgSW4gMTgzNSB0aGUgYXV0aG9yaXRpZXMgb2YgdGhlIHByb3ZpbmNlIG9mIE5vcnRoIEhvbGxhbmQgcmVxdWVzdGVkIHRoZQorIyBtdW5pY2lwYWwgYXV0aG9yaXRpZXMgb2YgdGhlIHRvd25zIGFuZCBjaXRpZXMgaW4gdGhlIHByb3ZpbmNlIHRvIG9ic2VydmUKKyMgQW1zdGVyZGFtIG1lYW4gdGltZSBidXQgSSBkbyBub3Qga25vdyBpbiBob3cgbWFueSBjYXNlcyB0aGlzIHJlcXVlc3Qgd2FzCisjIGFjdHVhbGx5IGZvbGxvd2VkLgorIworIyBGcm9tIDE4NTIgb253YXJkcyB0aGUgRHV0Y2ggdGVsZWdyYXBoIG9mZmljZXMgd2VyZSBieSBsYXcgcmVxdWlyZWQgdG8KKyMgb2JzZXJ2ZSBBbXN0ZXJkYW0gbWVhbiB0aW1lLiBBcyB0aGUgdGltZSBzaWduYWxzIGZyb20gdGhlIG9ic2VydmF0b3J5IG9mCisjIExlaWRlbiB3ZXJlIGFsc28gZGlzdHJpYnV0ZWQgYnkgdGhlIHRlbGVncmFwaCBzeXN0ZW0sIEkgYXNzdW1lIHRoYXQgbW9zdAorIyBwbGFjZXMgbGlua2VkIHVwIHdpdGggdGhlIHRlbGVncmFwaCAoYW5kIHJhaWx3YXkpIHN5c3RlbSBhdXRvbWF0aWNhbGx5CisjIGFkb3B0ZWQgQW1zdGVyZGFtIG1lYW4gdGltZS4KKyMKKyMgQWx0aG91Z2ggdGhlIGVhcmx5IER1dGNoIHJhaWx3YXkgY29tcGFuaWVzIGluaXRpYWxseSBvYnNlcnZlZCBhIHZhcmlldHkKKyMgb2YgdGltZXMsIG1vc3Qgb2YgdGhlbSBoYWQgYWRvcHRlZCBBbXN0ZXJkYW0gbWVhbiB0aW1lIGJ5IDE4NTggYnV0IGl0CisjIHdhcyBub3QgdW50aWwgMTg2NiB3aGVuIHRoZXkgd2VyZSBhbGwgcmVxdWlyZWQgYnkgbGF3IHRvIG9ic2VydmUKKyMgQW1zdGVyZGFtIG1lYW4gdGltZS4KKworIyBUaGUgZGF0YSBiZWZvcmUgMTk0NSBhcmUgdGFrZW4gZnJvbQorIyA8aHR0cDovL3d3dy5waHlzLnV1Lm5sL352Z2VudC93ZXR0aWpkL3dldHRpamQuaHRtPi4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJTmV0aAkxOTE2CW9ubHkJLQlNYXkJIDEJMDowMAkxOjAwCU5TVAkjIE5ldGhlcmxhbmRzIFN1bW1lciBUaW1lCitSdWxlCU5ldGgJMTkxNglvbmx5CS0JT2N0CSAxCTA6MDAJMAlBTVQJIyBBbXN0ZXJkYW0gTWVhbiBUaW1lCitSdWxlCU5ldGgJMTkxNwlvbmx5CS0JQXByCTE2CTI6MDBzCTE6MDAJTlNUCitSdWxlCU5ldGgJMTkxNwlvbmx5CS0JU2VwCTE3CTI6MDBzCTAJQU1UCitSdWxlCU5ldGgJMTkxOAkxOTIxCS0JQXByCU1vbj49MQkyOjAwcwkxOjAwCU5TVAorUnVsZQlOZXRoCTE5MTgJMTkyMQktCVNlcAlsYXN0TW9uCTI6MDBzCTAJQU1UCitSdWxlCU5ldGgJMTkyMglvbmx5CS0JTWFyCWxhc3RTdW4JMjowMHMJMTowMAlOU1QKK1J1bGUJTmV0aAkxOTIyCTE5MzYJLQlPY3QJU3VuPj0yCTI6MDBzCTAJQU1UCitSdWxlCU5ldGgJMTkyMwlvbmx5CS0JSnVuCUZyaT49MQkyOjAwcwkxOjAwCU5TVAorUnVsZQlOZXRoCTE5MjQJb25seQktCU1hcglsYXN0U3VuCTI6MDBzCTE6MDAJTlNUCitSdWxlCU5ldGgJMTkyNQlvbmx5CS0JSnVuCUZyaT49MQkyOjAwcwkxOjAwCU5TVAorIyBGcm9tIDE5MjYgdGhyb3VnaCAxOTM5IERTVCBiZWdhbiAwNS0xNSwgZXhjZXB0IHRoYXQgaXQgd2FzIGRlbGF5ZWQgYnkgYSB3ZWVrCisjIGluIHllYXJzIHdoZW4gMDUtMTUgZmVsbCBpbiB0aGUgUGVudGVjb3N0IHdlZWtlbmQuCitSdWxlCU5ldGgJMTkyNgkxOTMxCS0JTWF5CTE1CTI6MDBzCTE6MDAJTlNUCitSdWxlCU5ldGgJMTkzMglvbmx5CS0JTWF5CTIyCTI6MDBzCTE6MDAJTlNUCitSdWxlCU5ldGgJMTkzMwkxOTM2CS0JTWF5CTE1CTI6MDBzCTE6MDAJTlNUCitSdWxlCU5ldGgJMTkzNwlvbmx5CS0JTWF5CTIyCTI6MDBzCTE6MDAJTlNUCitSdWxlCU5ldGgJMTkzNwlvbmx5CS0JSnVsCSAxCTA6MDAJMTowMAlTCitSdWxlCU5ldGgJMTkzNwkxOTM5CS0JT2N0CVN1bj49MgkyOjAwcwkwCS0KK1J1bGUJTmV0aAkxOTM4CTE5MzkJLQlNYXkJMTUJMjowMHMJMTowMAlTCitSdWxlCU5ldGgJMTk0NQlvbmx5CS0JQXByCSAyCTI6MDBzCTE6MDAJUworUnVsZQlOZXRoCTE5NDUJb25seQktCVNlcAkxNgkyOjAwcwkwCS0KKyMKKyMgQW1zdGVyZGFtIE1lYW4gVGltZSB3YXMgKzAwOjE5OjMyLjEzIGV4YWN0bHksIGJ1dCB0aGUgLjEzIGlzIG9taXR0ZWQKKyMgYmVsb3cgYmVjYXVzZSB0aGUgY3VycmVudCBmb3JtYXQgcmVxdWlyZXMgR01UT0ZGIHRvIGJlIGFuIGludGVnZXIuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEV1cm9wZS9BbXN0ZXJkYW0JMDoxOTozMiAtCUxNVAkxODM1CisJCQkwOjE5OjMyCU5ldGgJJXMJMTkzNyBKdWwgIDEKKwkJCTA6MjAJTmV0aAlORSVzVAkxOTQwIE1heSAxNiAwOjAwICMgRHV0Y2ggVGltZQorCQkJMTowMAlDLUV1cglDRSVzVAkxOTQ1IEFwciAgMiAyOjAwCisJCQkxOjAwCU5ldGgJQ0Ulc1QJMTk3NworCQkJMTowMAlFVQlDRSVzVAorCisjIE5vcndheQorIyBodHRwOi8vbWV0Lm5vL21ldC9tZXRfbGV4L3FfdS9zb21tZXJ0aWQuaHRtbCAoMjAwNC0wMSkgYWdyZWVzIHdpdGggU2hhbmtzICYKKyMgUG90dGVuZ2VyLgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJTm9yd2F5CTE5MTYJb25seQktCU1heQkyMgkxOjAwCTE6MDAJUworUnVsZQlOb3J3YXkJMTkxNglvbmx5CS0JU2VwCTMwCTA6MDAJMAktCitSdWxlCU5vcndheQkxOTQ1CW9ubHkJLQlBcHIJIDIJMjowMHMJMTowMAlTCitSdWxlCU5vcndheQkxOTQ1CW9ubHkJLQlPY3QJIDEJMjowMHMJMAktCitSdWxlCU5vcndheQkxOTU5CTE5NjQJLQlNYXIJU3VuPj0xNQkyOjAwcwkxOjAwCVMKK1J1bGUJTm9yd2F5CTE5NTkJMTk2NQktCVNlcAlTdW4+PTE1CTI6MDBzCTAJLQorUnVsZQlOb3J3YXkJMTk2NQlvbmx5CS0JQXByCTI1CTI6MDBzCTE6MDAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvT3NsbwkwOjQzOjAwIC0JTE1UCTE4OTUgSmFuICAxCisJCQkxOjAwCU5vcndheQlDRSVzVAkxOTQwIEF1ZyAxMCAyMzowMAorCQkJMTowMAlDLUV1cglDRSVzVAkxOTQ1IEFwciAgMiAgMjowMAorCQkJMTowMAlOb3J3YXkJQ0Ulc1QJMTk4MAorCQkJMTowMAlFVQlDRSVzVAorCisjIFN2YWxiYXJkICYgSmFuIE1heWVuCisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDEtMDUtMDEpOgorIyBBbHRob3VnaCBJIGNvdWxkIG5vdCBmaW5kIGl0IGV4cGxpY2l0bHksIGl0IHNlZW1zIHRoYXQgSmFuIE1heWVuIGFuZAorIyBTdmFsYmFyZCBoYXZlIGJlZW4gdXNpbmcgdGhlIHNhbWUgdGltZSBhcyBOb3J3YXkgYXQgbGVhc3Qgc2luY2UgdGhlCisjIHRpbWUgdGhleSB3ZXJlIGRlY2xhcmVkIGFzIHBhcnRzIG9mIE5vcndheS4gIFN2YWxiYXJkIHdhcyBkZWNsYXJlZAorIyBhcyBhIHBhcnQgb2YgTm9yd2F5IGJ5IGxhdyBvZiAxOTI1LTA3LTE3IG5vIDExLCBzZWN0aW9uIDQgYW5kIEphbgorIyBNYXllbiBieSBsYXcgb2YgMTkzMC0wMi0yNyBubyAyLCBzZWN0aW9uIDIuIChGcm9tCisjIGh0dHA6Ly93d3cubG92ZGF0YS5uby9hbGwvbmwtMTkyNTA3MTctMDExLmh0bWwgYW5kCisjIGh0dHA6Ly93d3cubG92ZGF0YS5uby9hbGwvbmwtMTkzMDAyMjctMDAyLmh0bWwpLiAgVGhlIGxhdy9yZWd1bGF0aW9uCisjIGZvciBub3JtYWwvc3RhbmRhcmQgdGltZSBpbiBOb3J3YXkgaXMgZnJvbSAxODk0LTA2LTI5IG5vIDEgKGNhbWUKKyMgaW50byBvcGVyYXRpb24gb24gMTg5NS0wMS0wMSkgYW5kIFN2YWxiYXJkL0phbiBNYXllbiBzZWVtIHRvIGJlIGEKKyMgcGFydCBvZiB0aGlzIGxhdyBzaW5jZSAxOTI1LzE5MzAuIChGcm9tCisjIGh0dHA6Ly93d3cubG92ZGF0YS5uby9hbGwvbmwtMTg5NDA2MjktMDAxLmh0bWwgKSBJIGhhdmUgbm90IGJlZW4KKyMgYWJsZSB0byBmaW5kIGlmIEphbiBNYXllbiB1c2VkIGEgZGlmZmVyZW50IHRpbWUgem9uZSAoZS5nLiAtMDEwMCkKKyMgYmVmb3JlIDE5MzAuIEphbiBNYXllbiBoYXMgb25seSBiZWVuICJpbmhhYml0YXRlZCIgc2luY2UgMTkyMSBieQorIyBOb3J3ZWdpYW4gbWV0ZW9yb2xvZ2lzdHMgYW5kIG1heWJlIHVzZWQgdGhlIHNhbWUgdGltZSBhcyBOb3J3YXkgZXZlcgorIyBzaW5jZSAxOTIxLiAgU3ZhbGJhcmQgKEFyY3RpYy9Mb25neWVhcmJ5ZW4pIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZQorIyBiZWZvcmUgMTg5NSwgYW5kIHRoZXJlZm9yZSBwcm9iYWJseSBjaGFuZ2VkIHRoZSBsb2NhbCB0aW1lIHNvbWV3aGVyZQorIyBiZXR3ZWVuIDE4OTUgYW5kIDE5MjUgKGluY2x1c2l2ZSkuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMS0wNS0wMSk6CisjCisjIEFjdHVhbGx5LCBKYW4gTWF5ZW4gd2FzIG5ldmVyIG9jY3VwaWVkIGJ5IEdlcm1hbnkgZHVyaW5nIFdvcmxkIFdhciBJSSwKKyMgc28gaXQgbXVzdCBoYXZlIGRpdmVyZ2VkIGZyb20gT3NsbyB0aW1lIGR1cmluZyB0aGUgd2FyLCBhcyBPc2xvIHdhcworIyBrZWVwaW5nIEJlcmxpbiB0aW1lLgorIworIyA8aHR0cDovL2hvbWUubm8ubmV0L2phbm1heWVuL2hpc3RvcnkuaHRtPiBzYXlzIHRoYXQgdGhlIG1ldGVvcm9sb2dpc3RzCisjIGJ1cm5lZCBkb3duIHRoZWlyIHN0YXRpb24gaW4gMTk0MCBhbmQgbGVmdCB0aGUgaXNsYW5kLCBidXQgcmV0dXJuZWQgaW4KKyMgMTk0MSB3aXRoIGEgc21hbGwgTm9yd2VnaWFuIGdhcnJpc29uIGFuZCBjb250aW51ZWQgb3BlcmF0aW9ucyBkZXNwaXRlCisjIGZyZXF1ZW50IGFpciB0dGFja3MgZnJvbSBHZXJtYW5zLiAgSW4gMTk0MyB0aGUgQW1lcmljYW5zIGVzdGFibGlzaGVkIGEKKyMgcmFkaW9sb2NhdGluZyBzdGF0aW9uIG9uIHRoZSBpc2xhbmQsIGNhbGxlZCAiQXRsYW50aWMgQ2l0eSIuICBQb3NzaWJseQorIyB0aGUgVVRDIG9mZnNldCBjaGFuZ2VkIGR1cmluZyB0aGUgd2FyLCBidXQgSSB0aGluayBpdCB1bmxpa2VseSB0aGF0CisjIEphbiBNYXllbiB1c2VkIEdlcm1hbiBkYXlsaWdodC1zYXZpbmcgcnVsZXMuCisjCisjIFN2YWxiYXJkIGlzIG1vcmUgY29tcGxpY2F0ZWQsIGFzIGl0IHdhcyByYWlkZWQgaW4gQXVndXN0IDE5NDEgYnkgYW4KKyMgQWxsaWVkIHBhcnR5IHRoYXQgZXZhY3VhdGVkIHRoZSBjaXZpbGlhbiBwb3B1bGF0aW9uIHRvIEVuZ2xhbmQgKHNheXMKKyMgPGh0dHA6Ly93d3cuYmFydGxlYnkuY29tLzY1L3N2L1N2YWxiYXJkLmh0bWw+KS4gIFRoZSBTdmFsYmFyZCBGQVEKKyMgPGh0dHA6Ly93d3cuc3ZhbGJhcmQuY29tL1N2YWxiYXJkRkFRLmh0bWw+IHNheXMgdGhhdCB0aGUgR2VybWFucyB3ZXJlCisjIGV4cGVsbGVkIG9uIDE5NDItMDUtMTQuICBIb3dldmVyLCBzbWFsbCBwYXJ0aWVzIG9mIEdlcm1hbnMgZGlkIHJldHVybiwKKyMgYW5kIGFjY29yZGluZyB0byBXaWxoZWxtIERlZ2UncyBib29rICJXYXIgTm9ydGggb2YgODAiICgxOTU0KQorIyA8aHR0cDovL3d3dy51Y2FsZ2FyeS5jYS9Vb2ZDL2RlcGFydG1lbnRzL1VQLzEtNTUyMzgvMS01NTIzOC0xMTAtMi5odG1sPgorIyB0aGUgR2VybWFuIGFybWVkIGZvcmNlcyBhdCB0aGUgU3ZhbGJhcmQgd2VhdGhlciBzdGF0aW9uIGNvZGUtbmFtZWQKKyMgSGF1ZGVnZW4gZGlkIG5vdCBzdXJyZW5kZXIgdG8gdGhlIEFsbGllcyB1bnRpbCBTZXB0ZW1iZXIgMTk0NS4KKyMKKyMgQWxsIHRoZXNlIGV2ZW50cyBwcmVkYXRlIG91ciBjdXRvZmYgZGF0ZSBvZiAxOTcwLiAgVW5sZXNzIHdlIGNhbgorIyBjb21lIHVwIHdpdGggbW9yZSBkZWZpbml0aXZlIGluZm8gYWJvdXQgdGhlIHRpbWVrZWVwaW5nIGR1cmluZyB0aGUKKyMgd2FyIHllYXJzIGl0J3MgcHJvYmFibHkgYmVzdCBqdXN0IGRvIGRvIHRoZSBmb2xsb3dpbmcgZm9yIG5vdzoKK0xpbmsJRXVyb3BlL09zbG8JQXJjdGljL0xvbmd5ZWFyYnllbgorCisjIFBvbGFuZAorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJUG9sYW5kCTE5MTgJMTkxOQktCVNlcAkxNgkyOjAwcwkwCS0KK1J1bGUJUG9sYW5kCTE5MTkJb25seQktCUFwcgkxNQkyOjAwcwkxOjAwCVMKK1J1bGUJUG9sYW5kCTE5NDQJb25seQktCUFwcgkgMwkyOjAwcwkxOjAwCVMKKyMgV2hpdG1hbiBnaXZlcyAxOTQ0IE5vdiAzMDsgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuCitSdWxlCVBvbGFuZAkxOTQ0CW9ubHkJLQlPY3QJIDQJMjowMAkwCS0KKyMgRm9yIDE5NDQtMTk0OCBXaGl0bWFuIGdpdmVzIHRoZSBwcmV2aW91cyBkYXk7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlQb2xhbmQJMTk0NQlvbmx5CS0JQXByCTI5CTA6MDAJMTowMAlTCitSdWxlCVBvbGFuZAkxOTQ1CW9ubHkJLQlOb3YJIDEJMDowMAkwCS0KKyMgRm9yIDE5NDYgb24gdGhlIHNvdXJjZSBpcyBLYXppbWllcnogQm9ya293c2tpLAorIyBUb3J1biBDZW50ZXIgZm9yIEFzdHJvbm9teSwgRGVwdC4gb2YgUmFkaW8gQXN0cm9ub215LCBOaWNvbGF1cyBDb3Blcm5pY3VzIFUuLAorIyA8aHR0cDovL3d3dy5hc3Ryby51bmkudG9ydW4ucGwvfmtiL0FydHlrdWx5L1UtUEEvQ3phczIuaHRtI3R0aF90QWIxPgorIyBUaGFua3MgdG8gUHJ6ZW15c2xhdyBBdWd1c3R5bmlhayAoMjAwNS0wNS0yOCkgZm9yIHRoaXMgcmVmZXJlbmNlLgorIyBIZSBhbHNvIGdpdmVzIHRoZXNlIGZ1cnRoZXIgcmVmZXJlbmNlczoKKyMgTW9uIFBvbCBuciAxMywgcG96IDE2MiAoMTk5NSkgPGh0dHA6Ly93d3cuYWJjLmNvbS5wbC9zZXJ3aXMvbXAvMTk5NS8wMTYyLmh0bT4KKyMgRHJ1ayBuciAyMTgwICgyMDAzKSA8aHR0cDovL3d3dy5zZW5hdC5nb3YucGwvazUvZG9rL3Nlam0vMDUzLzIxODAucGRmPgorUnVsZQlQb2xhbmQJMTk0Nglvbmx5CS0JQXByCTE0CTA6MDBzCTE6MDAJUworUnVsZQlQb2xhbmQJMTk0Nglvbmx5CS0JT2N0CSA3CTI6MDBzCTAJLQorUnVsZQlQb2xhbmQJMTk0Nwlvbmx5CS0JTWF5CSA0CTI6MDBzCTE6MDAJUworUnVsZQlQb2xhbmQJMTk0NwkxOTQ5CS0JT2N0CVN1bj49MQkyOjAwcwkwCS0KK1J1bGUJUG9sYW5kCTE5NDgJb25seQktCUFwcgkxOAkyOjAwcwkxOjAwCVMKK1J1bGUJUG9sYW5kCTE5NDkJb25seQktCUFwcgkxMAkyOjAwcwkxOjAwCVMKK1J1bGUJUG9sYW5kCTE5NTcJb25seQktCUp1bgkgMgkxOjAwcwkxOjAwCVMKK1J1bGUJUG9sYW5kCTE5NTcJMTk1OAktCVNlcAlsYXN0U3VuCTE6MDBzCTAJLQorUnVsZQlQb2xhbmQJMTk1OAlvbmx5CS0JTWFyCTMwCTE6MDBzCTE6MDAJUworUnVsZQlQb2xhbmQJMTk1OQlvbmx5CS0JTWF5CTMxCTE6MDBzCTE6MDAJUworUnVsZQlQb2xhbmQJMTk1OQkxOTYxCS0JT2N0CVN1bj49MQkxOjAwcwkwCS0KK1J1bGUJUG9sYW5kCTE5NjAJb25seQktCUFwcgkgMwkxOjAwcwkxOjAwCVMKK1J1bGUJUG9sYW5kCTE5NjEJMTk2NAktCU1heQlsYXN0U3VuCTE6MDBzCTE6MDAJUworUnVsZQlQb2xhbmQJMTk2MgkxOTY0CS0JU2VwCWxhc3RTdW4JMTowMHMJMAktCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUV1cm9wZS9XYXJzYXcJMToyNDowMCAtCUxNVAkxODgwCisJCQkxOjI0OjAwCS0JV01UCTE5MTUgQXVnICA1ICAgIyBXYXJzYXcgTWVhbiBUaW1lCisJCQkxOjAwCUMtRXVyCUNFJXNUCTE5MTggU2VwIDE2IDM6MDAKKwkJCTI6MDAJUG9sYW5kCUVFJXNUCTE5MjIgSnVuCisJCQkxOjAwCVBvbGFuZAlDRSVzVAkxOTQwIEp1biAyMyAyOjAwCisJCQkxOjAwCUMtRXVyCUNFJXNUCTE5NDQgT2N0CisJCQkxOjAwCVBvbGFuZAlDRSVzVAkxOTc3CisJCQkxOjAwCVctRXVyCUNFJXNUCTE5ODgKKwkJCTE6MDAJRVUJQ0Ulc1QKKworIyBQb3J0dWdhbAorIworIyBGcm9tIFJ1aSBQZWRybyBTYWxndWVpcm8gKDE5OTItMTEtMTIpOgorIyBQb3J0dWdhbCBoYXMgcmVjZW50bHkgKFNlcHRlbWJlciwgMjcpIGNoYW5nZWQgdGltZXpvbmUKKyMgKGZyb20gV0VUIHRvIE1FVCBvciBDRVQpIHRvIGhhcm1vbml6ZSB3aXRoIEVFQy4KKyMKKyMgTWFydGluIEJydWNrbWFubiAoMTk5Ni0wMi0yOSkgcmVwb3J0cyB2aWEgUGV0ZXIgSWxpZXZlCisjIHRoYXQgUG9ydHVnYWwgaXMgcmV2ZXJ0aW5nIHRvIDA6MDAgYnkgbm90IG1vdmluZyBpdHMgY2xvY2tzIHRoaXMgc3ByaW5nLgorIyBUaGUgbmV3IFByaW1lIE1pbmlzdGVyIHdhcyBmZWQgdXAgd2l0aCBnZXR0aW5nIHVwIGluIHRoZSBkYXJrIGluIHRoZSB3aW50ZXIuCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTYtMTEtMTIpOgorIyBJQVRBIFNTSU0gKDE5OTEtMDkpIHJlcG9ydHMgc2V2ZXJhbCAxOTkxLTA5IGFuZCAxOTkyLTA5IHRyYW5zaXRpb25zCisjIGF0IDAyOjAwdSwgbm90IDAxOjAwdS4gIEFzc3VtZSB0aGF0IHRoZXNlIGFyZSB0eXBvcy4KKyMgSUFUQSBTU0lNICgxOTkxLzE5OTIpIHJlcG9ydHMgdGhhdCB0aGUgQXpvcmVzIHdlcmUgYXQgLTE6MDAuCisjIElBVEEgU1NJTSAoMTk5My0wMikgc2F5cyArMDowMDsgbGF0ZXIgaXNzdWVzICh0aHJvdWdoIDE5OTYtMDkpIHNheSAtMTowMC4KKyMgR3Vlc3MgdGhhdCB0aGUgQXpvcmVzIGNoYW5nZWQgdG8gRVUgcnVsZXMgaW4gMTk5MiAoc2luY2UgdGhhdCdzIHdoZW4gUG9ydHVnYWwKKyMgaGFybW9uaXplZCB3aXRoIHRoZSBFVSksIGFuZCB0aGF0IHRoZXkgc3RheWVkICswOjAwIHRoYXQgd2ludGVyLgorIworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKKyMgRFNIIHdyaXRlcyB0aGF0IGRlc3BpdGUgRGVjcmVlIDEsNDY5ICgxOTE1KSwgdGhlIGNoYW5nZSB0byB0aGUgY2xvY2tzIHdhcyBub3QKKyMgZG9uZSBldmVyeSB5ZWFyLCBkZXBlbmRpbmcgb24gd2hhdCBTcGFpbiBkaWQsIGJlY2F1c2Ugb2YgcmFpbHJvYWQgc2NoZWR1bGVzLgorIyBHbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJUG9ydAkxOTE2CW9ubHkJLQlKdW4JMTcJMjM6MDAJMTowMAlTCisjIFdoaXRtYW4gZ2l2ZXMgMTkxNiBPY3QgMzE7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlQb3J0CTE5MTYJb25seQktCU5vdgkgMQkgMTowMAkwCS0KK1J1bGUJUG9ydAkxOTE3CW9ubHkJLQlGZWIJMjgJMjM6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5MTcJMTkyMQktCU9jdAkxNAkyMzowMHMJMAktCitSdWxlCVBvcnQJMTkxOAlvbmx5CS0JTWFyCSAxCTIzOjAwcwkxOjAwCVMKK1J1bGUJUG9ydAkxOTE5CW9ubHkJLQlGZWIJMjgJMjM6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5MjAJb25seQktCUZlYgkyOQkyMzowMHMJMTowMAlTCitSdWxlCVBvcnQJMTkyMQlvbmx5CS0JRmViCTI4CTIzOjAwcwkxOjAwCVMKK1J1bGUJUG9ydAkxOTI0CW9ubHkJLQlBcHIJMTYJMjM6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5MjQJb25seQktCU9jdAkxNAkyMzowMHMJMAktCitSdWxlCVBvcnQJMTkyNglvbmx5CS0JQXByCTE3CTIzOjAwcwkxOjAwCVMKK1J1bGUJUG9ydAkxOTI2CTE5MjkJLQlPY3QJU2F0Pj0xCTIzOjAwcwkwCS0KK1J1bGUJUG9ydAkxOTI3CW9ubHkJLQlBcHIJIDkJMjM6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5MjgJb25seQktCUFwcgkxNAkyMzowMHMJMTowMAlTCitSdWxlCVBvcnQJMTkyOQlvbmx5CS0JQXByCTIwCTIzOjAwcwkxOjAwCVMKK1J1bGUJUG9ydAkxOTMxCW9ubHkJLQlBcHIJMTgJMjM6MDBzCTE6MDAJUworIyBXaGl0bWFuIGdpdmVzIDE5MzEgT2N0IDg7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlQb3J0CTE5MzEJMTkzMgktCU9jdAlTYXQ+PTEJMjM6MDBzCTAJLQorUnVsZQlQb3J0CTE5MzIJb25seQktCUFwcgkgMgkyMzowMHMJMTowMAlTCitSdWxlCVBvcnQJMTkzNAlvbmx5CS0JQXByCSA3CTIzOjAwcwkxOjAwCVMKKyMgV2hpdG1hbiBnaXZlcyAxOTM0IE9jdCA1OyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJUG9ydAkxOTM0CTE5MzgJLQlPY3QJU2F0Pj0xCTIzOjAwcwkwCS0KKyMgU2hhbmtzICYgUG90dGVuZ2VyIGdpdmUgMTkzNSBBcHIgMzA7IGdvIHdpdGggV2hpdG1hbi4KK1J1bGUJUG9ydAkxOTM1CW9ubHkJLQlNYXIJMzAJMjM6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5MzYJb25seQktCUFwcgkxOAkyMzowMHMJMTowMAlTCisjIFdoaXRtYW4gZ2l2ZXMgMTkzNyBBcHIgMjsgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuCitSdWxlCVBvcnQJMTkzNwlvbmx5CS0JQXByCSAzCTIzOjAwcwkxOjAwCVMKK1J1bGUJUG9ydAkxOTM4CW9ubHkJLQlNYXIJMjYJMjM6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5MzkJb25seQktCUFwcgkxNQkyMzowMHMJMTowMAlTCisjIFdoaXRtYW4gZ2l2ZXMgMTkzOSBPY3QgNzsgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuCitSdWxlCVBvcnQJMTkzOQlvbmx5CS0JTm92CTE4CTIzOjAwcwkwCS0KK1J1bGUJUG9ydAkxOTQwCW9ubHkJLQlGZWIJMjQJMjM6MDBzCTE6MDAJUworIyBTaGFua3MgJiBQb3R0ZW5nZXIgZ2l2ZSAxOTQwIE9jdCA3OyBnbyB3aXRoIFdoaXRtYW4uCitSdWxlCVBvcnQJMTk0MAkxOTQxCS0JT2N0CSA1CTIzOjAwcwkwCS0KK1J1bGUJUG9ydAkxOTQxCW9ubHkJLQlBcHIJIDUJMjM6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5NDIJMTk0NQktCU1hcglTYXQ+PTgJMjM6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5NDIJb25seQktCUFwcgkyNQkyMjowMHMJMjowMAlNICMgTWlkc3VtbWVyCitSdWxlCVBvcnQJMTk0Mglvbmx5CS0JQXVnCTE1CTIyOjAwcwkxOjAwCVMKK1J1bGUJUG9ydAkxOTQyCTE5NDUJLQlPY3QJU2F0Pj0yNAkyMzowMHMJMAktCitSdWxlCVBvcnQJMTk0Mwlvbmx5CS0JQXByCTE3CTIyOjAwcwkyOjAwCU0KK1J1bGUJUG9ydAkxOTQzCTE5NDUJLQlBdWcJU2F0Pj0yNQkyMjowMHMJMTowMAlTCitSdWxlCVBvcnQJMTk0NAkxOTQ1CS0JQXByCVNhdD49MjEJMjI6MDBzCTI6MDAJTQorUnVsZQlQb3J0CTE5NDYJb25seQktCUFwcglTYXQ+PTEJMjM6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5NDYJb25seQktCU9jdAlTYXQ+PTEJMjM6MDBzCTAJLQorUnVsZQlQb3J0CTE5NDcJMTk0OQktCUFwcglTdW4+PTEJIDI6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5NDcJMTk0OQktCU9jdAlTdW4+PTEJIDI6MDBzCTAJLQorIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IERTVCB3YXMgb2JzZXJ2ZWQgaW4gMTk1MDsgZ28gd2l0aCBXaGl0bWFuLgorIyBXaGl0bWFuIGdpdmVzIE9jdCBsYXN0U3VuIGZvciAxOTUyIG9uOyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJUG9ydAkxOTUxCTE5NjUJLQlBcHIJU3VuPj0xCSAyOjAwcwkxOjAwCVMKK1J1bGUJUG9ydAkxOTUxCTE5NjUJLQlPY3QJU3VuPj0xCSAyOjAwcwkwCS0KK1J1bGUJUG9ydAkxOTc3CW9ubHkJLQlNYXIJMjcJIDA6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5NzcJb25seQktCVNlcAkyNQkgMDowMHMJMAktCitSdWxlCVBvcnQJMTk3OAkxOTc5CS0JQXByCVN1bj49MQkgMDowMHMJMTowMAlTCitSdWxlCVBvcnQJMTk3OAlvbmx5CS0JT2N0CSAxCSAwOjAwcwkwCS0KK1J1bGUJUG9ydAkxOTc5CTE5ODIJLQlTZXAJbGFzdFN1bgkgMTowMHMJMAktCitSdWxlCVBvcnQJMTk4MAlvbmx5CS0JTWFyCWxhc3RTdW4JIDA6MDBzCTE6MDAJUworUnVsZQlQb3J0CTE5ODEJMTk4MgktCU1hcglsYXN0U3VuCSAxOjAwcwkxOjAwCVMKK1J1bGUJUG9ydAkxOTgzCW9ubHkJLQlNYXIJbGFzdFN1bgkgMjowMHMJMTowMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCisjIFNoYW5rcyAmIFBvdHRlbmdlciBzYXkgdGhlIHRyYW5zaXRpb24gZnJvbSBMTVQgdG8gV0VUIG9jY3VycmVkIDE5MTEtMDUtMjQ7CisjIFdpbGxldHQgc2F5cyAxOTEyLTAxLTAxLiAgR28gd2l0aCBXaWxsZXR0LgorWm9uZQlFdXJvcGUvTGlzYm9uCS0wOjM2OjMyIC0JTE1UCTE4ODQKKwkJCS0wOjM2OjMyIC0JTE1UCTE5MTIgSmFuICAxICAjIExpc2JvbiBNZWFuIFRpbWUKKwkJCSAwOjAwCVBvcnQJV0Ulc1QJMTk2NiBBcHIgIDMgMjowMAorCQkJIDE6MDAJLQlDRVQJMTk3NiBTZXAgMjYgMTowMAorCQkJIDA6MDAJUG9ydAlXRSVzVAkxOTgzIFNlcCAyNSAxOjAwcworCQkJIDA6MDAJVy1FdXIJV0Ulc1QJMTk5MiBTZXAgMjcgMTowMHMKKwkJCSAxOjAwCUVVCUNFJXNUCTE5OTYgTWFyIDMxIDE6MDB1CisJCQkgMDowMAlFVQlXRSVzVAorWm9uZSBBdGxhbnRpYy9Bem9yZXMJLTE6NDI6NDAgLQlMTVQJMTg4NAkJIyBQb250YSBEZWxnYWRhCisJCQktMTo1NDozMiAtCUhNVAkxOTExIE1heSAyNCAgIyBIb3J0YSBNZWFuIFRpbWUKKwkJCS0yOjAwCVBvcnQJQVpPJXNUCTE5NjYgQXByICAzIDI6MDAgIyBBem9yZXMgVGltZQorCQkJLTE6MDAJUG9ydAlBWk8lc1QJMTk4MyBTZXAgMjUgMTowMHMKKwkJCS0xOjAwCVctRXVyCUFaTyVzVAkxOTkyIFNlcCAyNyAxOjAwcworCQkJIDA6MDAJRVUJV0Ulc1QJMTk5MyBNYXIgMjggMTowMHUKKwkJCS0xOjAwCUVVCUFaTyVzVAorWm9uZSBBdGxhbnRpYy9NYWRlaXJhCS0xOjA3OjM2IC0JTE1UCTE4ODQJCSMgRnVuY2hhbAorCQkJLTE6MDc6MzYgLQlGTVQJMTkxMSBNYXkgMjQgICMgRnVuY2hhbCBNZWFuIFRpbWUKKwkJCS0xOjAwCVBvcnQJTUFEJXNUCTE5NjYgQXByICAzIDI6MDAgIyBNYWRlaXJhIFRpbWUKKwkJCSAwOjAwCVBvcnQJV0Ulc1QJMTk4MyBTZXAgMjUgMTowMHMKKwkJCSAwOjAwCUVVCVdFJXNUCisKKyMgUm9tYW5pYQorIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgxOTk5LTEwLTA3KToKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5uaW5lb2Nsb2NrLnJvL1BPTC8xNzc4cG9sLmh0bWwiPgorIyBOaW5lIE8nY2xvY2s8L2E+ICgxOTk4LTEwLTIzKSByZXBvcnRzIHRoYXQgdGhlIHN3aXRjaCBvY2N1cnJlZCBhdAorIyAwNDowMCBsb2NhbCB0aW1lIGluIGZhbGwgMTk5OC4gIEZvciBsYWNrIG9mIGJldHRlciBpbmZvLAorIyBhc3N1bWUgdGhhdCBSb21hbmlhIGFuZCBNb2xkb3ZhIHN3aXRjaGVkIHRvIEVVIHJ1bGVzIGluIDE5OTcsCisjIHRoZSBzYW1lIHllYXIgYXMgQnVsZ2FyaWEuCisjCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlSb21hbmlhCTE5MzIJb25seQktCU1heQkyMQkgMDowMHMJMTowMAlTCitSdWxlCVJvbWFuaWEJMTkzMgkxOTM5CS0JT2N0CVN1bj49MQkgMDowMHMJMAktCitSdWxlCVJvbWFuaWEJMTkzMwkxOTM5CS0JQXByCVN1bj49MgkgMDowMHMJMTowMAlTCitSdWxlCVJvbWFuaWEJMTk3OQlvbmx5CS0JTWF5CTI3CSAwOjAwCTE6MDAJUworUnVsZQlSb21hbmlhCTE5NzkJb25seQktCVNlcAlsYXN0U3VuCSAwOjAwCTAJLQorUnVsZQlSb21hbmlhCTE5ODAJb25seQktCUFwcgkgNQkyMzowMAkxOjAwCVMKK1J1bGUJUm9tYW5pYQkxOTgwCW9ubHkJLQlTZXAJbGFzdFN1bgkgMTowMAkwCS0KK1J1bGUJUm9tYW5pYQkxOTkxCTE5OTMJLQlNYXIJbGFzdFN1bgkgMDowMHMJMTowMAlTCitSdWxlCVJvbWFuaWEJMTk5MQkxOTkzCS0JU2VwCWxhc3RTdW4JIDA6MDBzCTAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBFdXJvcGUvQnVjaGFyZXN0CTE6NDQ6MjQgLQlMTVQJMTg5MSBPY3QKKwkJCTE6NDQ6MjQJLQlCTVQJMTkzMSBKdWwgMjQJIyBCdWNoYXJlc3QgTVQKKwkJCTI6MDAJUm9tYW5pYQlFRSVzVAkxOTgxIE1hciAyOSAyOjAwcworCQkJMjowMAlDLUV1cglFRSVzVAkxOTkxCisJCQkyOjAwCVJvbWFuaWEJRUUlc1QJMTk5NAorCQkJMjowMAlFLUV1cglFRSVzVAkxOTk3CisJCQkyOjAwCUVVCUVFJXNUCisKKyMgUnVzc2lhCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIEV4Y2VwdCBmb3IgTW9zY293IGFmdGVyIDE5MTktMDctMDEsIEkgaW52ZW50ZWQgdGhlIHRpbWUgem9uZSBhYmJyZXZpYXRpb25zLgorIyBNb3Njb3cgdGltZSB6b25lIGFiYnJldmlhdGlvbnMgYWZ0ZXIgMTkxOS0wNy0wMSwgYW5kIE1vc2NvdyBydWxlcyBhZnRlciAxOTkxLAorIyBhcmUgZnJvbSBBbmRyZXkgQS4gQ2hlcm5vdi4gIFRoZSByZXN0IGlzIGZyb20gU2hhbmtzICYgUG90dGVuZ2VyLAorIyBleGNlcHQgd2UgZm9sbG93IENoZXJub3YncyByZXBvcnQgdGhhdCAxOTkyIERTVCB0cmFuc2l0aW9ucyB3ZXJlIFNhdAorIyAyMzowMCwgbm90IFN1biAwMjowMHMuCisjCisjIEZyb20gU3RhbmlzbGF3IEEuIEt1emlrb3dza2kgKDE5OTQtMDYtMjkpOgorIyBCdXQgbm93IGl0IGlzIHNvbWUgbW9udGhzIHNpbmNlIE5vdm9zaWJpcnNrIGlzIDMgaG91cnMgYWhlYWQgb2YgTW9zY293IQorIyBJIGRvIG5vdCBrbm93IHdoeSB0aGV5IGhhdmUgZGVjaWRlZCB0byBtYWtlIHRoaXMgY2hhbmdlOworIyBhcyBmYXIgYXMgSSByZW1lbWJlciBpdCB3YXMgZG9uZSBleGFjdGx5IGR1cmluZyB3aW50ZXItPnN1bW1lciBzd2l0Y2hpbmcKKyMgc28gd2UgKE5vdm9zaWJpcnNrKSBzaW1wbHkgZGlkIG5vdCBzd2l0Y2guCisjCisjIEZyb20gQW5kcmV5IEEuIENoZXJub3YgKDE5OTYtMTAtMDQpOgorIyBgTVNLJyBhbmQgYE1TRCcgd2VyZSBib3JuIGFuZCB1c2VkIGluaXRpYWxseSBvbiBNb3Njb3cgY29tcHV0ZXJzIHdpdGgKKyMgVU5JWC1saWtlIE9TZXMgYnkgc2V2ZXJhbCBkZXZlbG9wZXIgZ3JvdXBzIChlLmcuIERlbW9zIGdyb3VwLCBLaWFlIGdyb3VwKS4uLi4KKyMgVGhlIG5leHQgc3RlcCB3YXMgdGhlIFVVQ1AgbmV0d29yaywgdGhlIFJlbGNvbSBwcmVkZWNlc3NvcgorIyAodXNlZCBtYWlubHkgZm9yIG1haWwpLCBhbmQgTVNLL01TRCB3YXMgYWN0aXZlbHkgdXNlZCB0aGVyZS4KKyMKKyMgRnJvbSBDaHJpcyBDYXJyaWVyICgxOTk2LTEwLTMwKToKKyMgQWNjb3JkaW5nIHRvIGEgZnJpZW5kIG9mIG1pbmUgd2hvIHJvZGUgdGhlIFRyYW5zLVNpYmVyaWFuIFJhaWxyb2FkIGZyb20KKyMgTW9zY293IHRvIElya3V0c2sgaW4gMTk5NSwgcHVibGljIGFpciBhbmQgcmFpbCB0cmFuc3BvcnQgaW4gUnVzc2lhIC4uLgorIyBzdGlsbCBmb2xsb3dzIE1vc2NvdyB0aW1lLCBubyBtYXR0ZXIgd2hlcmUgaW4gUnVzc2lhIGl0IGlzIGxvY2F0ZWQuCisjCisjIEZvciBHcm96bnksIENoZWNobnlhLCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RvcnkgZnJvbQorIyBKb2huIERhbmlzemV3c2tpLCAiU2NhdmVuZ2VycyBpbiB0aGUgUnViYmxlIiwgTG9zIEFuZ2VsZXMgVGltZXMgKDIwMDEtMDItMDcpOgorIyBOZXdzLS1vZnRlbiBmYWxzZS0taXMgc3ByZWFkIGJ5IHdvcmQgb2YgbW91dGguICBBIHJ1bW9yIHRoYXQgaXQgd2FzCisjIHRpbWUgdG8gbW92ZSB0aGUgY2xvY2tzIGJhY2sgcHV0IHRoaXMgd2hvbGUgY2l0eSBvdXQgb2Ygc3luYyB3aXRoCisjIHRoZSByZXN0IG9mIFJ1c3NpYSBmb3IgdHdvIHdlZWtzLS1ldmVuIHNvbGRpZXJzIHN0YXRpb25lZCBoZXJlIGJlZ2FuCisjIGVuZm9yY2luZyBjdXJmZXcgYXQgdGhlIHdyb25nIHRpbWUuCisjCisjIEZyb20gR3dpbGxpbSBMYXcgKDIwMDEtMDYtMDUpOgorIyBUaGVyZSdzIGNvbnNpZGVyYWJsZSBldmlkZW5jZSB0aGF0IFNha2hhbGluIElzbGFuZCB1c2VkIHRvIGJlIGluCisjIFVUQysxMSwgYW5kIGhhcyBjaGFuZ2VkIHRvIFVUQysxMCwgaW4gdGhpcyBkZWNhZGUuICBJIHN0YXJ0IHdpdGggdGhlCisjIFNTSU0sIHdoaWNoIGxpc3RlZCBZdXpobm8tU2FraGFsaW5zayBpbiB6b25lIFJVMTAgYWxvbmcgd2l0aCBNYWdhZGFuCisjIHVudGlsIEZlYnJ1YXJ5IDE5OTcsIGFuZCB0aGVuIGluIFJVOSB3aXRoIEtoYWJhcm92c2sgYW5kIFZsYWRpdm9zdG9rCisjIHNpbmNlIFNlcHRlbWJlciAxOTk3Li4uLiAgQWx0aG91Z2ggdGhlIEt1cmlsIElzbGFuZHMgYXJlCisjIGFkbWluaXN0cmF0aXZlbHkgcGFydCBvZiBTYWtoYWxpbiBvYmxhc3QnLCB0aGV5IGFwcGVhciB0byBoYXZlCisjIHJlbWFpbmVkIG9uIFVUQysxMSBhbG9uZyB3aXRoIE1hZ2FkYW4uCisjCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCisjCisjIEthbGluaW5ncmFkc2theWEgb2JsYXN0Jy4KK1pvbmUgRXVyb3BlL0thbGluaW5ncmFkCSAxOjIyOjAwIC0JTE1UCTE4OTMgQXByCisJCQkgMTowMAlDLUV1cglDRSVzVAkxOTQ1CisJCQkgMjowMAlQb2xhbmQJQ0Ulc1QJMTk0NgorCQkJIDM6MDAJUnVzc2lhCU1TSy9NU0QJMTk5MSBNYXIgMzEgMjowMHMKKwkJCSAyOjAwCVJ1c3NpYQlFRSVzVAorIworIyBGcm9tIE9zY2FyIHZhbiBWbGlqbWVuICgyMDAxLTA4LTI1KTogW1RoaXMgcmVnaW9uIGNvbnNpc3RzIG9mXQorIyBSZXNwdWJsaWthIEFkeWdleWEsIEFya2hhbmdlbCdza2F5YSBvYmxhc3QnLAorIyBCZWxnb3JvZHNrYXlhIG9ibGFzdCcsIEJyeWFuc2theWEgb2JsYXN0JywgVmxhZGltaXJza2F5YSBvYmxhc3QnLAorIyBWb2xvZ29kc2theWEgb2JsYXN0JywgVm9yb25lemhza2F5YSBvYmxhc3QnLAorIyBSZXNwdWJsaWthIERhZ2VzdGFuLCBJdmFub3Zza2F5YSBvYmxhc3QnLCBSZXNwdWJsaWthIEluZ3VzaGV0aXlhLAorIyBLYWJhcmJpbm8tQmFsa2Fyc2theWEgUmVzcHVibGlrYSwgUmVzcHVibGlrYSBLYWxteWtpeWEsCisjIEthbHl6aHNrYXlhIG9ibGFzdCcsIFJlc3B1Ymxpa2EgS2FyYWNoYWV2by1DaGVya2Vzc2l5YSwKKyMgUmVzcHVibGlrYSBLYXJlbGl5YSwgUmVzcHVibGlrYSBLb21pLAorIyBLb3N0cm9tc2theWEgb2JsYXN0JywgS3Jhc25vZGFyc2tpaiBrcmFqLCBLdXJza2F5YSBvYmxhc3QnLAorIyBMZW5pbmdyYWRza2F5YSBvYmxhc3QnLCBMaXBldHNrYXlhIG9ibGFzdCcsIFJlc3B1Ymxpa2EgTWFyaWogRWwsCisjIFJlc3B1Ymxpa2EgTW9yZG92aXlhLCBNb3NrdmEsIE1vc2tvdnNrYXlhIG9ibGFzdCcsCisjIE11cm1hbnNrYXlhIG9ibGFzdCcsIE5lbmV0c2tpaiBhdnRvbm9tbnlqIG9rcnVnLAorIyBOaXpoZWdvcm9kc2theWEgb2JsYXN0JywgTm92Z29yb2Rza2F5YSBvYmxhc3QnLCBPcmxvdnNrYXlhIG9ibGFzdCcsCisjIFBlbnplbnNrYXlhIG9ibGFzdCcsIFBza292c2theWEgb2JsYXN0JywgUm9zdG92c2theWEgb2JsYXN0JywKKyMgUnlhemFuc2theWEgb2JsYXN0JywgU2Fua3QtUGV0ZXJidXJnLAorIyBSZXNwdWJsaWthIFNldmVybmF5YSBPc2V0aXlhLCBTbW9sZW5za2F5YSBvYmxhc3QnLAorIyBTdGF2cm9wb2wnc2tpaiBrcmFqLCBUYW1ib3Zza2F5YSBvYmxhc3QnLCBSZXNwdWJsaWthIFRhdGFyc3RhbiwKKyMgVHZlcnNrYXlhIG9ibGFzdCcsIFR5bCdza2F5YSBvYmxhc3QnLCBVbCd5YW5vdnNrYXlhIG9ibGFzdCcsCisjIENoZWNoZW5za2F5YSBSZXNwdWJsaWthLCBDaHV2YXNoc2theWEgb2JsYXN0JywKKyMgWWFyb3NsYXZza2F5YSBvYmxhc3QnCitab25lIEV1cm9wZS9Nb3Njb3cJIDI6MzA6MjAgLQlMTVQJMTg4MAorCQkJIDI6MzAJLQlNTVQJMTkxNiBKdWwgIDMgIyBNb3Njb3cgTWVhbiBUaW1lCisJCQkgMjozMDo0OCBSdXNzaWEJJXMJMTkxOSBKdWwgIDEgMjowMAorCQkJIDM6MDAJUnVzc2lhCU1TSy9NU0QJMTkyMiBPY3QKKwkJCSAyOjAwCS0JRUVUCTE5MzAgSnVuIDIxCisJCQkgMzowMAlSdXNzaWEJTVNLL01TRAkxOTkxIE1hciAzMSAyOjAwcworCQkJIDI6MDAJUnVzc2lhCUVFJXNUCTE5OTIgSmFuIDE5IDI6MDBzCisJCQkgMzowMAlSdXNzaWEJTVNLL01TRAorIworIyBBc3RyYWtoYW5za2F5YSBvYmxhc3QnLCBLaXJvdnNrYXlhIG9ibGFzdCcsIFNhcmF0b3Zza2F5YSBvYmxhc3QnLAorIyBWb2xnb2dyYWRza2F5YSBvYmxhc3QnLiAgU2hhbmtzICYgUG90dGVuZ2VyIHNheSBLaXJvdiBpcyBzdGlsbCBhdCArMDQwMAorIyBidXQgV2lraXBlZGlhICgyMDA2LTA1LTA5KSBzYXlzICswMzAwLiAgUGVyaGFwcyBpdCBzd2l0Y2hlZCBhZnRlciB0aGUKKyMgb3RoZXJzPyAgQnV0IHdlIGhhdmUgbm8gZGF0YS4KK1pvbmUgRXVyb3BlL1ZvbGdvZ3JhZAkgMjo1Nzo0MCAtCUxNVAkxOTIwIEphbiAgMworCQkJIDM6MDAJLQlUU0FUCTE5MjUgQXByICA2ICMgVHNhcml0c3luIFRpbWUKKwkJCSAzOjAwCS0JU1RBVAkxOTMwIEp1biAyMSAjIFN0YWxpbmdyYWQgVGltZQorCQkJIDQ6MDAJLQlTVEFUCTE5NjEgTm92IDExCisJCQkgNDowMAlSdXNzaWEJVk9MJXNUCTE5ODkgTWFyIDI2IDI6MDBzICMgVm9sZ29ncmFkIFQKKwkJCSAzOjAwCVJ1c3NpYQlWT0wlc1QJMTk5MSBNYXIgMzEgMjowMHMKKwkJCSA0OjAwCS0JVk9MVAkxOTkyIE1hciAyOSAyOjAwcworCQkJIDM6MDAJUnVzc2lhCVZPTCVzVAorIworIyBGcm9tIE9zY2FyIHZhbiBWbGlqbWVuICgyMDAxLTA4LTI1KTogW1RoaXMgcmVnaW9uIGNvbnNpc3RzIG9mXQorIyBTYW1hcnNrYXlhIG9ibGFzdCcsIFVkbXlydHNrYXlhIHJlc3B1Ymxpa2EKK1pvbmUgRXVyb3BlL1NhbWFyYQkgMzoyMDozNiAtCUxNVAkxOTE5IEp1bCAgMSAyOjAwCisJCQkgMzowMAktCVNBTVQJMTkzMCBKdW4gMjEKKwkJCSA0OjAwCS0JU0FNVAkxOTM1IEphbiAyNworCQkJIDQ6MDAJUnVzc2lhCUtVWSVzVAkxOTg5IE1hciAyNiAyOjAwcyAjIEt1eWJ5c2hldgorCQkJIDM6MDAJUnVzc2lhCUtVWSVzVAkxOTkxIE1hciAzMSAyOjAwcworCQkJIDI6MDAJUnVzc2lhCUtVWSVzVAkxOTkxIFNlcCAyOSAyOjAwcworCQkJIDM6MDAJLQlLVVlUCTE5OTEgT2N0IDIwIDM6MDAKKwkJCSA0OjAwCVJ1c3NpYQlTQU0lc1QJIyBTYW1hcmEgVGltZQorIworIyBGcm9tIE9zY2FyIHZhbiBWbGlqbWVuICgyMDAxLTA4LTI1KTogW1RoaXMgcmVnaW9uIGNvbnNpc3RzIG9mXQorIyBSZXNwdWJsaWthIEJhc2hrb3J0b3N0YW4sIEtvbWktUGVybXlhdHNraWogYXZ0b25vbW55aiBva3J1ZywKKyMgS3VyZ2Fuc2theWEgb2JsYXN0JywgT3JlbmJ1cmdza2F5YSBvYmxhc3QnLCBQZXJtc2theWEgb2JsYXN0JywKKyMgU3ZlcmRsb3Zza2F5YSBvYmxhc3QnLCBUeXVtZW5za2F5YSBvYmxhc3QnLAorIyBLaGFudHktTWFuc2tpanNraWogYXZ0b25vbW55aiBva3J1ZywgQ2hlbHlhYmluc2theWEgb2JsYXN0JywKKyMgWWFtYWxvLU5lbmV0c2tpaiBhdnRvbm9tbnlqIG9rcnVnLgorWm9uZSBBc2lhL1lla2F0ZXJpbmJ1cmcJIDQ6MDI6MjQgLQlMTVQJMTkxOSBKdWwgMTUgNDowMAorCQkJIDQ6MDAJLQlTVkVUCTE5MzAgSnVuIDIxICMgU3ZlcmRsb3ZzayBUaW1lCisJCQkgNTowMAlSdXNzaWEJU1ZFJXNUCTE5OTEgTWFyIDMxIDI6MDBzCisJCQkgNDowMAlSdXNzaWEJU1ZFJXNUCTE5OTIgSmFuIDE5IDI6MDBzCisJCQkgNTowMAlSdXNzaWEJWUVLJXNUCSMgWWVrYXRlcmluYnVyZyBUaW1lCisjCisjIEZyb20gT3NjYXIgdmFuIFZsaWptZW4gKDIwMDEtMDgtMjUpOiBbVGhpcyByZWdpb24gY29uc2lzdHMgb2ZdCisjIFJlc3B1Ymxpa2EgQWx0YWosIEFsdGFqc2tpaiBrcmFqLCBPbXNrYXlhIG9ibGFzdCcuCitab25lIEFzaWEvT21zawkJIDQ6NTM6MzYgLQlMTVQJMTkxOSBOb3YgMTQKKwkJCSA1OjAwCS0JT01TVAkxOTMwIEp1biAyMSAjIE9tc2sgVEltZQorCQkJIDY6MDAJUnVzc2lhCU9NUyVzVAkxOTkxIE1hciAzMSAyOjAwcworCQkJIDU6MDAJUnVzc2lhCU9NUyVzVAkxOTkyIEphbiAxOSAyOjAwcworCQkJIDY6MDAJUnVzc2lhCU9NUyVzVAorIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTA4LTE5KTogSSdtIGd1ZXNzaW5nIGFib3V0IFRvbXNrIGhlcmU7IGl0J3MKKyMgbm90IGNsZWFyIHdoZW4gaXQgc3dpdGNoZWQgZnJvbSArNyB0byArNi4KKyMgTm92b3NpYmlyc2theWEgb2JsYXN0JywgVG9tc2theWEgb2JsYXN0Jy4KK1pvbmUgQXNpYS9Ob3Zvc2liaXJzawkgNTozMTo0MCAtCUxNVAkxOTE5IERlYyAxNCA2OjAwCisJCQkgNjowMAktCU5PVlQJMTkzMCBKdW4gMjEgIyBOb3Zvc2liaXJzayBUaW1lCisJCQkgNzowMAlSdXNzaWEJTk9WJXNUCTE5OTEgTWFyIDMxIDI6MDBzCisJCQkgNjowMAlSdXNzaWEJTk9WJXNUCTE5OTIgSmFuIDE5IDI6MDBzCisJCQkgNzowMAlSdXNzaWEJTk9WJXNUCTE5OTMgTWF5IDIzICMgc2F5IFNoYW5rcyAmIFAuCisJCQkgNjowMAlSdXNzaWEJTk9WJXNUCisjCisjIEZyb20gT3NjYXIgdmFuIFZsaWptZW4gKDIwMDEtMDgtMjUpOiBbVGhpcyByZWdpb24gY29uc2lzdHMgb2ZdCisjIEtlbWVyb3Zza2F5YSBvYmxhc3QnLCBLcmFzbm95YXJza2lqIGtyYWosCisjIFRham15cnNraWogKERvbGdhbm8tTmVuZXRza2lqKSBhdnRvbm9tbnlqIG9rcnVnLAorIyBSZXNwdWJsaWthIFR1dmEsIFJlc3B1Ymxpa2EgS2hha2FzaXlhLCBFdmVua2lqc2tpaiBhdnRvbm9tbnlqIG9rcnVnLgorWm9uZSBBc2lhL0tyYXNub3lhcnNrCSA2OjExOjIwIC0JTE1UCTE5MjAgSmFuICA2CisJCQkgNjowMAktCUtSQVQJMTkzMCBKdW4gMjEgIyBLcmFzbm95YXJzayBUaW1lCisJCQkgNzowMAlSdXNzaWEJS1JBJXNUCTE5OTEgTWFyIDMxIDI6MDBzCisJCQkgNjowMAlSdXNzaWEJS1JBJXNUCTE5OTIgSmFuIDE5IDI6MDBzCisJCQkgNzowMAlSdXNzaWEJS1JBJXNUCisjCisjIEZyb20gT3NjYXIgdmFuIFZsaWptZW4gKDIwMDEtMDgtMjUpOiBbVGhpcyByZWdpb24gY29uc2lzdHMgb2ZdCisjIFJlc3B1Ymxpa2EgQnVyeWF0aXlhLCBJcmt1dHNrYXlhIG9ibGFzdCcsCisjIFVzdCctT3JkeW5za2lqIEJ1cnlhdHNraWogYXZ0b25vbW55aiBva3J1Zy4KK1pvbmUgQXNpYS9Jcmt1dHNrCSA2OjU3OjIwIC0JTE1UCTE4ODAKKwkJCSA2OjU3OjIwIC0JSU1UCTE5MjAgSmFuIDI1ICMgSXJrdXRzayBNZWFuIFRpbWUKKwkJCSA3OjAwCS0JSVJLVAkxOTMwIEp1biAyMSAjIElya3V0c2sgVGltZQorCQkJIDg6MDAJUnVzc2lhCUlSSyVzVAkxOTkxIE1hciAzMSAyOjAwcworCQkJIDc6MDAJUnVzc2lhCUlSSyVzVAkxOTkyIEphbiAxOSAyOjAwcworCQkJIDg6MDAJUnVzc2lhCUlSSyVzVAorIworIyBGcm9tIE9zY2FyIHZhbiBWbGlqbWVuICgyMDAzLTEwLTE4KTogW1RoaXMgcmVnaW9uIGNvbnNpc3RzIG9mXQorIyBBZ2luc2tpaiBCdXJ5YXRza2lqIGF2dG9ub21ueWogb2tydWcsIEFtdXJza2F5YSBvYmxhc3QnLAorIyBbcGFydHMgb2ZdIFJlc3B1Ymxpa2EgU2FraGEgKFlha3V0aXlhKSwgQ2hpdGluc2theWEgb2JsYXN0Jy4KKyMgVGhlIFNha2hhIGRpc3RyaWN0cyBhcmU6IEFsZGFuc2tpaiwgQW1naW5za2lqLCBBbmFiYXJza2lqLAorIyBCdWx1bnNraWosIFZlcmtobmVrb2x5bXNraWosIFZlcmtobmV2aWx5dWpza2lqLCBWaWx5dWpza2lqLCBHb3JueWosCisjIFpoaWdhbnNraWosIEtvYnlhanNraWosIExlbnNraWosIE1lZ2luby1LYW5nYWxhc3NraWosIE1pcm5pbnNraWosCisjIE5hbXNraWosIE55dXJiaW5za2lqLCBPbGVuZWtza2lqLCBPbGVrbWluc2tpaiwgU3JlZG5la29seW1za2lqLAorIyBTdW50YXJza2lqLCBUYXR0aW5za2lqLCBVc3QnLUFsZGFuc2tpaiwgS2hhbmdhbGFzc2tpaiwKKyMgQ2h1cmFwY2hpbnNraWosIEV2ZW5vLUJ5dGFudGFqc2tpai4KK1pvbmUgQXNpYS9ZYWt1dHNrCSA4OjM4OjQwIC0JTE1UCTE5MTkgRGVjIDE1CisJCQkgODowMAktCVlBS1QJMTkzMCBKdW4gMjEgIyBZYWt1dHNrIFRpbWUKKwkJCSA5OjAwCVJ1c3NpYQlZQUslc1QJMTk5MSBNYXIgMzEgMjowMHMKKwkJCSA4OjAwCVJ1c3NpYQlZQUslc1QJMTk5MiBKYW4gMTkgMjowMHMKKwkJCSA5OjAwCVJ1c3NpYQlZQUslc1QKKyMKKyMgRnJvbSBPc2NhciB2YW4gVmxpam1lbiAoMjAwMy0xMC0xOCk6IFtUaGlzIHJlZ2lvbiBjb25zaXN0cyBvZl0KKyMgRXZyZWpza2F5YSBhdnRvbm9tbmF5YSBvYmxhc3QnLCBLaGFiYXJvdnNraWoga3JhaiwgUHJpbW9yc2tpaiBrcmFqLAorIyBbcGFydHMgb2ZdIFJlc3B1Ymxpa2EgU2FraGEgKFlha3V0aXlhKS4KKyMgVGhlIFNha2hhIGRpc3RyaWN0cyBhcmU6IFZlcmtob3lhbnNraWosIFRvbXBvbnNraWosIFVzdCctTWFqc2tpaiwKKyMgVXN0Jy1ZYW5za2lqLgorWm9uZSBBc2lhL1ZsYWRpdm9zdG9rCSA4OjQ3OjQ0IC0JTE1UCTE5MjIgTm92IDE1CisJCQkgOTowMAktCVZMQVQJMTkzMCBKdW4gMjEgIyBWbGFkaXZvc3RvayBUaW1lCisJCQkxMDowMAlSdXNzaWEJVkxBJXNUCTE5OTEgTWFyIDMxIDI6MDBzCisJCQkgOTowMAlSdXNzaWEJVkxBJXNTVAkxOTkyIEphbiAxOSAyOjAwcworCQkJMTA6MDAJUnVzc2lhCVZMQSVzVAorIworIyBTYWtoYWxpbnNrYXlhIG9ibGFzdCcuCisjIFRoZSBab25lIG5hbWUgc2hvdWxkIGJlIFl1emhuby1TYWtoYWxpbnNrLCBidXQgdGhhdCdzIHRvbyBsb25nLgorWm9uZSBBc2lhL1Nha2hhbGluCSA5OjMwOjQ4IC0JTE1UCTE5MDUgQXVnIDIzCisJCQkgOTowMAktCUNKVAkxOTM4CisJCQkgOTowMAktCUpTVAkxOTQ1IEF1ZyAyNQorCQkJMTE6MDAJUnVzc2lhCVNBSyVzVAkxOTkxIE1hciAzMSAyOjAwcyAjIFNha2hhbGluIFQuCisJCQkxMDowMAlSdXNzaWEJU0FLJXNUCTE5OTIgSmFuIDE5IDI6MDBzCisJCQkxMTowMAlSdXNzaWEJU0FLJXNUCTE5OTcgTWFyIGxhc3RTdW4gMjowMHMKKwkJCTEwOjAwCVJ1c3NpYQlTQUslc1QKKyMKKyMgRnJvbSBPc2NhciB2YW4gVmxpam1lbiAoMjAwMy0xMC0xOCk6IFtUaGlzIHJlZ2lvbiBjb25zaXN0cyBvZl0KKyMgTWFnYWRhbnNrYXlhIG9ibGFzdCcsIFJlc3B1Ymxpa2EgU2FraGEgKFlha3V0aXlhKS4KKyMgUHJvYmFibHkgYWxzbzogS3VyaWwgSXNsYW5kcy4KKyMgVGhlIFNha2hhIGRpc3RyaWN0cyBhcmU6IEFieWpza2lqLCBBbGxhaWtob3Zza2lqLCBNb21za2lqLAorIyBOaXpobmVrb2x5bXNraWosIE9qbXlha29uc2tpai4KK1pvbmUgQXNpYS9NYWdhZGFuCTEwOjAzOjEyIC0JTE1UCTE5MjQgTWF5ICAyCisJCQkxMDowMAktCU1BR1QJMTkzMCBKdW4gMjEgIyBNYWdhZGFuIFRpbWUKKwkJCTExOjAwCVJ1c3NpYQlNQUclc1QJMTk5MSBNYXIgMzEgMjowMHMKKwkJCTEwOjAwCVJ1c3NpYQlNQUclc1QJMTk5MiBKYW4gMTkgMjowMHMKKwkJCTExOjAwCVJ1c3NpYQlNQUclc1QKKyMKKyMgRnJvbSBPc2NhciB2YW4gVmxpam1lbiAoMjAwMS0wOC0yNSk6IFtUaGlzIHJlZ2lvbiBjb25zaXN0cyBvZl0KKyMgS2FtY2hhdHNrYXlhIG9ibGFzdCcsIEtvcnlha3NraWogYXZ0b25vbW55aiBva3J1Zy4KKyMKKyMgVGhlIFpvbmUgbmFtZSBzaG91bGQgYmUgQXNpYS9QZXRyb3BhdmxvdnNrLUthbWNoYXRza2ksIGJ1dCB0aGF0J3MgdG9vIGxvbmcuCitab25lIEFzaWEvS2FtY2hhdGthCTEwOjM0OjM2IC0JTE1UCTE5MjIgTm92IDEwCisJCQkxMTowMAktCVBFVFQJMTkzMCBKdW4gMjEgIyBQLUsgVGltZQorCQkJMTI6MDAJUnVzc2lhCVBFVCVzVAkxOTkxIE1hciAzMSAyOjAwcworCQkJMTE6MDAJUnVzc2lhCVBFVCVzVAkxOTkyIEphbiAxOSAyOjAwcworCQkJMTI6MDAJUnVzc2lhCVBFVCVzVAorIworIyBDaHVrb3Rza2lqIGF2dG9ub21ueWogb2tydWcKK1pvbmUgQXNpYS9BbmFkeXIJMTE6NDk6NTYgLQlMTVQJMTkyNCBNYXkgIDIKKwkJCTEyOjAwCS0JQU5BVAkxOTMwIEp1biAyMSAjIEFuYWR5ciBUaW1lCisJCQkxMzowMAlSdXNzaWEJQU5BJXNUCTE5ODIgQXByICAxIDA6MDBzCisJCQkxMjowMAlSdXNzaWEJQU5BJXNUCTE5OTEgTWFyIDMxIDI6MDBzCisJCQkxMTowMAlSdXNzaWEJQU5BJXNUCTE5OTIgSmFuIDE5IDI6MDBzCisJCQkxMjowMAlSdXNzaWEJQU5BJXNUCisKKyMgU2VyYmlhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUV1cm9wZS9CZWxncmFkZQkxOjIyOjAwCS0JTE1UCTE4ODQKKwkJCTE6MDAJLQlDRVQJMTk0MSBBcHIgMTggMjM6MDAKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTk0NQorCQkJMTowMAktCUNFVAkxOTQ1IE1heSA4IDI6MDBzCisJCQkxOjAwCTE6MDAJQ0VTVAkxOTQ1IFNlcCAxNiAgMjowMHMKKyMgTWV0b2QgS296ZWxqIHJlcG9ydHMgdGhhdCB0aGUgbGVnYWwgZGF0ZSBvZgorIyB0cmFuc2l0aW9uIHRvIEVVIHJ1bGVzIHdhcyAxOTgyLTExLTI3LCBmb3IgYWxsIG9mIFl1Z29zbGF2aWEgYXQgdGhlIHRpbWUuCisjIFNoYW5rcyAmIFBvdHRlbmdlciBkb24ndCBnaXZlIGFzIG11Y2ggZGV0YWlsLCBzbyBnbyB3aXRoIEtvemVsai4KKwkJCTE6MDAJLQlDRVQJMTk4MiBOb3YgMjcKKwkJCTE6MDAJRVUJQ0Ulc1QKK0xpbmsgRXVyb3BlL0JlbGdyYWRlIEV1cm9wZS9ManVibGphbmEJIyBTbG92ZW5pYQorTGluayBFdXJvcGUvQmVsZ3JhZGUgRXVyb3BlL1BvZGdvcmljYQkjIE1vbnRlbmVncm8KK0xpbmsgRXVyb3BlL0JlbGdyYWRlIEV1cm9wZS9TYXJhamV2bwkjIEJvc25pYSBhbmQgSGVyemVnb3ZpbmEKK0xpbmsgRXVyb3BlL0JlbGdyYWRlIEV1cm9wZS9Ta29wamUJIyBNYWNlZG9uaWEKK0xpbmsgRXVyb3BlL0JlbGdyYWRlIEV1cm9wZS9aYWdyZWIJIyBDcm9hdGlhCisKKyMgU2xvdmFraWEKK0xpbmsgRXVyb3BlL1ByYWd1ZSBFdXJvcGUvQnJhdGlzbGF2YQorCisjIFNsb3ZlbmlhCisjIHNlZSBTZXJiaWEKKworIyBTcGFpbgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKKyMgRm9yIDE5MTctMTkxOSBXaGl0bWFuIGdpdmVzIEFwciBTYXQ+PTEgLSBPY3QgU2F0Pj0xOworIyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJU3BhaW4JMTkxNwlvbmx5CS0JTWF5CSA1CTIzOjAwcwkxOjAwCVMKK1J1bGUJU3BhaW4JMTkxNwkxOTE5CS0JT2N0CSA2CTIzOjAwcwkwCS0KK1J1bGUJU3BhaW4JMTkxOAlvbmx5CS0JQXByCTE1CTIzOjAwcwkxOjAwCVMKK1J1bGUJU3BhaW4JMTkxOQlvbmx5CS0JQXByCSA1CTIzOjAwcwkxOjAwCVMKKyMgV2hpdG1hbiBnaXZlcyAxOTIxIEZlYiAyOCAtIE9jdCAxNDsgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuCitSdWxlCVNwYWluCTE5MjQJb25seQktCUFwcgkxNgkyMzowMHMJMTowMAlTCisjIFdoaXRtYW4gZ2l2ZXMgMTkyNCBPY3QgMTQ7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlTcGFpbgkxOTI0CW9ubHkJLQlPY3QJIDQJMjM6MDBzCTAJLQorUnVsZQlTcGFpbgkxOTI2CW9ubHkJLQlBcHIJMTcJMjM6MDBzCTE6MDAJUworIyBXaGl0bWFuIHNheXMgbm8gRFNUIGluIDE5Mjk7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlTcGFpbgkxOTI2CTE5MjkJLQlPY3QJU2F0Pj0xCTIzOjAwcwkwCS0KK1J1bGUJU3BhaW4JMTkyNwlvbmx5CS0JQXByCSA5CTIzOjAwcwkxOjAwCVMKK1J1bGUJU3BhaW4JMTkyOAlvbmx5CS0JQXByCTE0CTIzOjAwcwkxOjAwCVMKK1J1bGUJU3BhaW4JMTkyOQlvbmx5CS0JQXByCTIwCTIzOjAwcwkxOjAwCVMKKyMgV2hpdG1hbiBnaXZlcyAxOTM3IEp1biAxNiwgMTkzOCBBcHIgMTYsIDE5NDAgQXByIDEzOworIyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJU3BhaW4JMTkzNwlvbmx5CS0JTWF5CTIyCTIzOjAwcwkxOjAwCVMKK1J1bGUJU3BhaW4JMTkzNwkxOTM5CS0JT2N0CVNhdD49MQkyMzowMHMJMAktCitSdWxlCVNwYWluCTE5MzgJb25seQktCU1hcgkyMgkyMzowMHMJMTowMAlTCitSdWxlCVNwYWluCTE5MzkJb25seQktCUFwcgkxNQkyMzowMHMJMTowMAlTCitSdWxlCVNwYWluCTE5NDAJb25seQktCU1hcgkxNgkyMzowMHMJMTowMAlTCisjIFdoaXRtYW4gc2F5cyBubyBEU1QgMTk0Mi0xOTQ1OyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJU3BhaW4JMTk0Mglvbmx5CS0JTWF5CSAyCTIyOjAwcwkyOjAwCU0gIyBNaWRzdW1tZXIKK1J1bGUJU3BhaW4JMTk0Mglvbmx5CS0JU2VwCSAxCTIyOjAwcwkxOjAwCVMKK1J1bGUJU3BhaW4JMTk0MwkxOTQ2CS0JQXByCVNhdD49MTMJMjI6MDBzCTI6MDAJTQorUnVsZQlTcGFpbgkxOTQzCW9ubHkJLQlPY3QJIDMJMjI6MDBzCTE6MDAJUworUnVsZQlTcGFpbgkxOTQ0CW9ubHkJLQlPY3QJMTAJMjI6MDBzCTE6MDAJUworUnVsZQlTcGFpbgkxOTQ1CW9ubHkJLQlTZXAJMzAJIDE6MDAJMTowMAlTCitSdWxlCVNwYWluCTE5NDYJb25seQktCVNlcAkzMAkgMDowMAkwCS0KK1J1bGUJU3BhaW4JMTk0OQlvbmx5CS0JQXByCTMwCTIzOjAwCTE6MDAJUworUnVsZQlTcGFpbgkxOTQ5CW9ubHkJLQlTZXAJMzAJIDE6MDAJMAktCitSdWxlCVNwYWluCTE5NzQJMTk3NQktCUFwcglTYXQ+PTEzCTIzOjAwCTE6MDAJUworUnVsZQlTcGFpbgkxOTc0CTE5NzUJLQlPY3QJU3VuPj0xCSAxOjAwCTAJLQorUnVsZQlTcGFpbgkxOTc2CW9ubHkJLQlNYXIJMjcJMjM6MDAJMTowMAlTCitSdWxlCVNwYWluCTE5NzYJMTk3NwktCVNlcAlsYXN0U3VuCSAxOjAwCTAJLQorUnVsZQlTcGFpbgkxOTc3CTE5NzgJLQlBcHIJIDIJMjM6MDAJMTowMAlTCitSdWxlCVNwYWluCTE5NzgJb25seQktCU9jdAkgMQkgMTowMAkwCS0KKyMgVGhlIGZvbGxvd2luZyBydWxlcyBhcmUgY29waWVkIGZyb20gTW9yb2NjbyBmcm9tIDE5NjcgdGhyb3VnaCAxOTc4LgorUnVsZSBTcGFpbkFmcmljYSAxOTY3CW9ubHkJLQlKdW4JIDMJMTI6MDAJMTowMAlTCitSdWxlIFNwYWluQWZyaWNhIDE5NjcJb25seQktCU9jdAkgMQkgMDowMAkwCS0KK1J1bGUgU3BhaW5BZnJpY2EgMTk3NAlvbmx5CS0JSnVuCTI0CSAwOjAwCTE6MDAJUworUnVsZSBTcGFpbkFmcmljYSAxOTc0CW9ubHkJLQlTZXAJIDEJIDA6MDAJMAktCitSdWxlIFNwYWluQWZyaWNhIDE5NzYJMTk3NwktCU1heQkgMQkgMDowMAkxOjAwCVMKK1J1bGUgU3BhaW5BZnJpY2EgMTk3Nglvbmx5CS0JQXVnCSAxCSAwOjAwCTAJLQorUnVsZSBTcGFpbkFmcmljYSAxOTc3CW9ubHkJLQlTZXAJMjgJIDA6MDAJMAktCitSdWxlIFNwYWluQWZyaWNhIDE5NzgJb25seQktCUp1bgkgMQkgMDowMAkxOjAwCVMKK1J1bGUgU3BhaW5BZnJpY2EgMTk3OAlvbmx5CS0JQXVnCSA0CSAwOjAwCTAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlFdXJvcGUvTWFkcmlkCS0wOjE0OjQ0IC0JTE1UCTE5MDEgSmFuICAxICAwOjAwcworCQkJIDA6MDAJU3BhaW4JV0Ulc1QJMTk0NiBTZXAgMzAKKwkJCSAxOjAwCVNwYWluCUNFJXNUCTE5NzkKKwkJCSAxOjAwCUVVCUNFJXNUCitab25lCUFmcmljYS9DZXV0YQktMDoyMToxNiAtCUxNVAkxOTAxCisJCQkgMDowMAktCVdFVAkxOTE4IE1heSAgNiAyMzowMAorCQkJIDA6MDAJMTowMAlXRVNUCTE5MTggT2N0ICA3IDIzOjAwCisJCQkgMDowMAktCVdFVAkxOTI0CisJCQkgMDowMAlTcGFpbglXRSVzVAkxOTI5CisJCQkgMDowMCBTcGFpbkFmcmljYSBXRSVzVCAxOTg0IE1hciAxNgorCQkJIDE6MDAJLQlDRVQJMTk4NgorCQkJIDE6MDAJRVUJQ0Ulc1QKK1pvbmUJQXRsYW50aWMvQ2FuYXJ5CS0xOjAxOjM2IC0JTE1UCTE5MjIgTWFyICMgTGFzIFBhbG1hcyBkZSBHcmFuIEMuCisJCQktMTowMAktCUNBTlQJMTk0NiBTZXAgMzAgMTowMCAjIENhbmFyaWVzIFRpbWUKKwkJCSAwOjAwCS0JV0VUCTE5ODAgQXByICA2IDA6MDBzCisJCQkgMDowMAkxOjAwCVdFU1QJMTk4MCBTZXAgMjggMDowMHMKKwkJCSAwOjAwCUVVCVdFJXNUCisjIElBVEEgU1NJTSAoMTk5Ni0wOSkgc2F5cyB0aGUgQ2FuYXJpZXMgc3dpdGNoIGF0IDI6MDB1LCBub3QgMTowMHUuCisjIElnbm9yZSB0aGlzIGZvciBub3csIGFzIHRoZSBDYW5hcmllcyBhcmUgcGFydCBvZiB0aGUgRVUuCisKKyMgU3dlZGVuCisKKyMgRnJvbSBJdmFuIE5pbHNzb24gKDIwMDEtMDQtMTMpLCBzdXBlcnNlZGluZyBTaGFua3MgJiBQb3R0ZW5nZXI6CisjCisjIFRoZSBsYXcgIlN2ZW5zayBmb3JmYXR0bmluZ3NzYW1saW5nIDE4NzgsIG5vIDE0IiBhYm91dCBzdGFuZGFyZCB0aW1lIGluIDE4Nzk6CisjIEZyb20gdGhlIGJlZ2lubmluZyBvZiAxODc5ICh0aGF0IGlzIDAxLTAxIDAwOjAwKSB0aGUgdGltZSBmb3IgYWxsCisjIHBsYWNlcyBpbiB0aGUgY291bnRyeSBpcyAidGhlIG1lYW4gc29sYXIgdGltZSBmb3IgdGhlIG1lcmlkaWFuIGF0CisjIHRocmVlIGRlZ3JlZXMsIG9yIHR3ZWx2ZSBtaW51dGVzIG9mIHRpbWUsIHRvIHRoZSB3ZXN0IG9mIHRoZQorIyBtZXJpZGlhbiBvZiB0aGUgT2JzZXJ2YXRvcnkgb2YgU3RvY2tob2xtIi4gIFRoZSBsYXcgaXMgZGF0ZWQgMTg3OC0wNS0zMS4KKyMKKyMgVGhlIG9ic2VydmF0b3J5IGF0IHRoYXQgdGltZSBoYWQgdGhlIG1lcmlkaWFuIDE4IGRlZ3JlZXMgMDMnIDMwIgorIyBlYXN0ZXJuIGxvbmdpdHVkZSA9IDAxOjEyOjE0IGluIHRpbWUuICBMZXNzIDEyIG1pbnV0ZXMgZ2l2ZXMgdGhlCisjIG5hdGlvbmFsIHN0YW5kYXJkIHRpbWUgYXMgMDE6MDA6MTQgYWhlYWQgb2YgR01ULi4uLgorIworIyBBYm91dCB0aGUgYmVnaW5uaW5nIG9mIENFVCBpbiBTd2VkZW4uIFRoZSBsYXd0ZXh0ICgiU3ZlbnNrCisjIGZvcmZhdHRuaW5nc3NhbWxpbmcgMTg5OSwgbm8gNDQiKSBzdGF0ZXMsIHRoYXQgImZyb20gdGhlIGJlZ2lubmluZworIyBvZiAxOTAwLi4uIC4uLiB0aGUgc2FtZSBhcyB0aGUgbWVhbiBzb2xhciB0aW1lIGZvciB0aGUgbWVyaWRpYW4gYXQKKyMgdGhlIGRpc3RhbmNlIG9mIG9uZSBob3VyIG9mIHRpbWUgZnJvbSB0aGUgbWVyaWRpYW4gb2YgdGhlIEVuZ2xpc2gKKyMgb2JzZXJ2YXRvcnkgYXQgR3JlZW53aWNoLCBvciBhdCAxMiBtaW51dGVzIDE0IHNlY29uZHMgdG8gdGhlIHdlc3QKKyMgZnJvbSB0aGUgbWVyaWRpYW4gb2YgdGhlIE9ic2VydmF0b3J5IG9mIFN0b2NraG9sbSIuIFRoZSBsYXcgaXMgZGF0ZWQKKyMgMTg5OS0wNi0xNi4gIEluIHNob3J0OiBBdCAxOTAwLTAxLTAxIDAwOjAwOjAwIHRoZSBuZXcgc3RhbmRhcmQgdGltZQorIyBpbiBTd2VkZW4gaXMgMDE6MDA6MDAgYWhlYWQgb2YgR01ULgorIworIyAxOTE2OiBUaGUgbGF3dGV4dCAoIlN2ZW5zayBmb3JmYXR0bmluZ3NzYW1saW5nIDE5MTYsIG5vIDEyNCIpIHN0YXRlcworIyB0aGF0ICIxOTE2LTA1LTE1IGlzIGNvbnNpZGVyZWQgdG8gYmVnaW4gb25lIGhvdXIgZWFybGllciIuIEl0IGlzCisjIHByZXR0eSBvYnZpb3VzIHRoYXQgYXQgMDUtMTQgMjM6MDAgdGhlIGNsb2NrcyBhcmUgc2V0IHRvIDA1LTE1IDAwOjAwLi4uLgorIyBGdXJ0aGVyIHRoZSBsYXcgc2F5cywgdGhhdCAiMTkxNi0wOS0zMCBpcyBjb25zaWRlcmVkIHRvIGVuZCBvbmUgaG91ciBsYXRlciIuCisjCisjIFRoZSBsYXdzIHJlZ3VsYXRpbmcgW0RTVF0gYXJlIGF2YWlsYWJsZSBvbiB0aGUgc2l0ZSBvZiB0aGUgU3dlZGlzaAorIyBQYXJsaWFtZW50IGJlZ2lubmluZyB3aXRoIDE5ODUgLSB0aGUgbGF3cyByZWd1bGF0aW5nIDE5ODAvMTk4NCBhcmUKKyMgbm90IGF2YWlsYWJsZSBvbiB0aGUgc2l0ZSAodG8gbXkga25vd2xlZGdlIHRoZXkgYXJlIG9ubHkgYXZhaWxhYmxlCisjIGluIFN3ZWRpc2gpOiA8aHR0cDovL3d3dy5yaWtzZGFnZW4uc2UvZW5nbGlzaC93b3JrL3Nmc3QuYXNwPiAodHlwZQorIyAic29tbWFydGlkIiB3aXRob3V0IHRoZSBxdW90ZXMgaW4gdGhlIGZpZWxkICJGcml0ZXh0IiBhbmQgdGhlbiBjbGljaworIyB0aGUgU29rLWJ1dHRvbikuCisjCisjICgyMDAxLTA1LTEzKToKKyMKKyMgSSBoYXZlIG5vdyBmb3VuZCBhIG5ld3NwYXBlciBzdGF0aW5nIHRoYXQgYXQgMTkxNi0xMC0wMSAwMTowMAorIyBzdW1tZXJ0aW1lIHRoZSBjaHVyY2gtY2xvY2tzIGV0YyB3ZXJlIHNldCBiYWNrIG9uZSBob3VyIHRvIHNob3cKKyMgMTkxNi0xMC0wMSAwMDowMCBzdGFuZGFyZCB0aW1lLiAgVGhlIGFydGljbGUgYWxzbyByZXBvcnRzIHRoYXQgc29tZQorIyBwZW9wbGUgdGhvdWdodCB0aGUgc3dpdGNoIHRvIHN0YW5kYXJkIHRpbWUgd291bGQgdGFrZSBwbGFjZSBhbHJlYWR5CisjIGF0IDE5MTYtMTAtMDEgMDA6MDAgc3VtbWVyIHRpbWUsIGJ1dCB0aGV5IGhhZCB0byB3YWl0IGZvciBhbm90aGVyCisjIGhvdXIgYmVmb3JlIHRoZSBldmVudCB0b29rIHBsYWNlLgorIworIyBTb3VyY2U6IFRoZSBuZXdzcGFwZXIgIkRhZ2VucyBOeWhldGVyIiwgMTkxNi0xMC0wMSwgcGFnZSA3IHVwcGVyIGxlZnQuCisKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgRXVyb3BlL1N0b2NraG9sbQkxOjEyOjEyIC0JTE1UCTE4NzkgSmFuICAxCisJCQkxOjAwOjE0CS0JU0VUCTE5MDAgSmFuICAxCSMgU3dlZGlzaCBUaW1lCisJCQkxOjAwCS0JQ0VUCTE5MTYgTWF5IDE0IDIzOjAwCisJCQkxOjAwCTE6MDAJQ0VTVAkxOTE2IE9jdCAgMSAwMTowMAorCQkJMTowMAktCUNFVAkxOTgwCisJCQkxOjAwCUVVCUNFJXNUCisKKyMgU3dpdHplcmxhbmQKKyMgRnJvbSBIb3dzZToKKyMgQnkgdGhlIGVuZCBvZiB0aGUgMTh0aCBjZW50dXJ5IGNsb2NrcyBhbmQgd2F0Y2hlcyBiZWNhbWUgY29tbW9ucGxhY2UKKyMgYW5kIHRoZWlyIHBlcmZvcm1hbmNlIGltcHJvdmVkIGVub3Jtb3VzbHkuICBDb21tdW5pdGllcyBiZWdhbiB0byBrZWVwCisjIG1lYW4gdGltZSBpbiBwcmVmZXJlbmNlIHRvIGFwcGFyZW50IHRpbWUgLS0gR2VuZXZhIGZyb20gMTc4MCAuLi4uCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworIyBGcm9tIFdoaXRtYW4gKHdobyB3cml0ZXMgYGBNaWRuaWdodD8nJyk6CisjIFJ1bGUJU3dpc3MJMTk0MAlvbmx5CS0JTm92CSAyCTA6MDAJMTowMAlTCisjIFJ1bGUJU3dpc3MJMTk0MAlvbmx5CS0JRGVjCTMxCTA6MDAJMAktCisjIEZyb20gU2hhbmtzICYgUG90dGVuZ2VyOgorIyBSdWxlCVN3aXNzCTE5NDEJMTk0MgktCU1heQlTdW4+PTEJMjowMAkxOjAwCVMKKyMgUnVsZQlTd2lzcwkxOTQxCTE5NDIJLQlPY3QJU3VuPj0xCTA6MDAJMAktCisKKyMgRnJvbSBBbG9pcyBUcmVpbmRsICgyMDA4LTEyLTE3KToKKyMgSSBoYXZlIHJlc2VhcmNoZWQgdGhlIERTVCB1c2FnZSBpbiBTd2l0emVybGFuZCBkdXJpbmcgdGhlIDE5NDBpZXMuCisjCisjIEFzIEkgd3JvdGUgaW4gYW4gZWFybGllciBtZXNzYWdlLCBJIHN1c3BlY3RlZCB0aGUgY3VycmVudCB0emRhdGEgdmFsdWVzCisjIHRvIGJlIHdyb25nLiBUaGlzIGlzIG5vdyB2ZXJpZmllZC4KKyMKKyMgSSBoYXZlIGZvdW5kIGNvcGllcyBvZiB0aGUgb3JpZ2luYWwgcnVsaW5nIGJ5IHRoZSBTd2lzcyBGZWRlcmFsCisjIGdvdmVybm1lbnQsIGluICdFaWRnZW5bb11zc2lzY2hlIEdlc2V0emVzc2FtbWx1bmcgMTk0MSBhbmQgMTk0MicgKFN3aXNzCisjIGZlZGVyYWwgbGF3IGNvbGxlY3Rpb24pLi4uCisjCisjIERTVCBiZWdhbiBvbiBNb25kYXkgNSBNYXkgMTk0MSwgMTowMCBhbSBieSBzaGlmdGluZyB0aGUgY2xvY2tzIHRvIDI6MDAgYW0KKyMgRFNUIGVuZGVkIG9uIE1vbmRheSA2IE9jdCAxOTQxLCAyOjAwIGFtIGJ5IHNoaWZ0aW5nIHRoZSBjbG9ja3MgdG8gMTowMCBhbS4KKyMKKyMgRFNUIGJlZ2FuIG9uIE1vbmRheSwgNCBNYXkgMTk0MiBhdCAwMTowMCBhbQorIyBEU1QgZW5kZWQgb24gTW9uZGF5LCA1IE9jdCAxOTQyIGF0IDAyOjAwIGFtCisjCisjIFRoZXJlIHdhcyBubyBEU1QgaW4gMTk0MCwgSSBoYXZlIGNoZWNrZWQgdGhlIGxhdyBjb2xsZWN0aW9uIGNhcmVmdWxseS4KKyMgSXQgaXMgYWxzbyBpbmRpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUgMTk0MiBlbnRyeSBpbiB0aGUgbGF3CisjIGNvbGxlY3Rpb24gcG9pbnRzIGJhY2sgdG8gMTk0MSBhcyBhIHJlZmVyZW5jZSwgYnV0IG5vIHJlZmVyZW5jZSB0byBhbnkKKyMgb3RoZXIgeWVhcnMgYXJlIG1hZGUuCisjCisjIE5ld3NwYXBlciBhcnRpY2xlcyBJIGhhdmUgcmVhZCBpbiB0aGUgYXJjaGl2ZXMgb24gNiBNYXkgMTk0MSByZXBvcnRlZAorIyBhYm91dCB0aGUgaW50cm9kdWN0aW9uIG9mIERTVCAoU29tbWVyemVpdCBpbiBHZXJtYW4pIGR1cmluZyB0aGUgcHJldmlvdXMKKyMgbmlnaHQgYXMgYW4gYWJzb2x1dGUgbm92ZWx0eSwgYmVjYXVzZSB0aGlzIHdhcyB0aGUgZmlyc3QgdGltZSB0aGF0IHN1Y2gKKyMgYSB0aGluZyBoYWQgaGFwcGVuZWQgaW4gU3dpdHplcmxhbmQuCisjCisjIEkgaGF2ZSBhbHNvIGNoZWNrZWQgMTkxNiwgYmVjYXVzZSBvbmUgYm9vayBzb3VyY2UgKEdhYnJpZWwsIFRyYWl0ZSBkZQorIyBsJ2hldXJlIGRhbnMgbGUgbW9uZGUpIGNsYWltcyB0aGF0IFN3aXR6ZXJsYW5kIGhhZCBEU1QgaW4gMTkxNi4gVGhpcyBpcworIyBmYWxzZSwgbm8gb2ZmaWNpYWwgZG9jdW1lbnQgY291bGQgYmUgZm91bmQuIFByb2JhYmx5IEdhYnJpZWwgZ290IG1pc2xlZAorIyBieSByZWZlcmVuY2VzIHRvIEdlcm1hbnksIHdoaWNoIGludHJvZHVjZWQgRFNUIGluIDE5MTYgZm9yIHRoZSBmaXJzdCB0aW1lLgorIworIyBUaGUgdHpkYXRhIHJ1bGVzIGZvciBTd2l0emVybGFuZCBtdXN0IGJlIGNoYW5nZWQgdG86CisjIFJ1bGUgIFN3aXNzICAgMTk0MSAgICAxOTQyICAgIC0gICAgICAgTWF5ICAgICBNb24+PTEgIDE6MDAgICAgMTowMCAgICBTCisjIFJ1bGUgIFN3aXNzICAgMTk0MSAgICAxOTQyICAgIC0gICAgICAgT2N0ICAgICBNb24+PTEgIDI6MDAgICAgMCAgICAgICAtCisjCisjIFRoZSAxOTQwIHJ1bGVzIG11c3QgYmUgZGVsZXRlZC4KKyMKKyMgT25lIGZ1cnRoZXIgZGV0YWlsIGZvciBTd2l0emVybGFuZCwgd2hpY2ggaXMgcHJvYmFibHkgb3V0IG9mIHNjb3BlIGZvcgorIyBtb3N0IHVzZXJzIG9mIHR6ZGF0YToKKyMgVGhlIHpvbmUgZmlsZQorIyBab25lICAgIEV1cm9wZS9adXJpY2ggICAwOjM0OjA4IC0gICAgICAgTE1UICAgICAxODQ4IFNlcCAxMgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgMDoyOTo0NCAtICAgICAgIEJNVCAgICAgMTg5NCBKdW4gI0Jlcm4gTWVhbiBUaW1lCisjICAgICAgICAgICAgICAgICAgICAgICAgICAxOjAwICAgIFN3aXNzICAgQ0Ulc1QgICAxOTgxCisjICAgICAgICAgICAgICAgICAgICAgICAgICAxOjAwICAgIEVVICAgICAgQ0Ulc1QKKyMgZGVzY3JpYmVzIGFsbCBvZiBTd2l0emVybGFuZCBjb3JyZWN0bHksIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorIyB0aGUgQ2FudG9uZSBHZW5ldmUgKEdlbmV2YSwgR2VuZikuIEJldHdlZW4gMTg0OCBhbmQgMTg5NCBHZW5ldmUgZGlkIG5vdAorIyBmb2xsb3cgQmVybiBNZWFuIFRpbWUgYnV0IGtlcHQgaXRzIG93biBsb2NhbCBtZWFuIHRpbWUuCisjIFRvIHJlcHJlc2VudCB0aGlzLCBhbiBleHRyYSB6b25lIHdvdWxkIGJlIG5lZWRlZC4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJU3dpc3MJMTk0MQkxOTQyCS0JTWF5CU1vbj49MQkxOjAwCTE6MDAJUworUnVsZQlTd2lzcwkxOTQxCTE5NDIJLQlPY3QJTW9uPj0xCTI6MDAJMAktCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUV1cm9wZS9adXJpY2gJMDozNDowOCAtCUxNVAkxODQ4IFNlcCAxMgorCQkJMDoyOTo0NAktCUJNVAkxODk0IEp1biAjIEJlcm4gTWVhbiBUaW1lCisJCQkxOjAwCVN3aXNzCUNFJXNUCTE5ODEKKwkJCTE6MDAJRVUJQ0Ulc1QKKworIyBUdXJrZXkKKworIyBGcm9tIEFtYXIgRGV2ZWdvd2RhICgyMDA3LTAxLTAzKToKKyMgVGhlIHRpbWUgem9uZSBydWxlcyBmb3IgSXN0YW5idWwsIFR1cmtleSBoYXZlIG5vdCBiZWVuIGNoYW5nZWQgZm9yIHllYXJzIG5vdy4KKyMgLi4uIFRoZSBsYXRlc3QgcnVsZXMgYXJlIGF2YWlsYWJsZSBhdCAtCisjIGh0dHA6Ly93d3cudGltZWFuZGRhdGUuY29tL3dvcmxkY2xvY2svdGltZXpvbmUuaHRtbD9uPTEwNworIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwNy0wMS0wMyk6CisjIEkgaGF2ZSBiZWVuIGFibGUgdG8gZmluZCBwcmVzcyByZWNvcmRzIGJhY2sgdG8gMTk5NiB3aGljaCBhbGwgc2F5IHRoYXQKKyMgRFNUIHN0YXJ0ZWQgMDE6MDAgbG9jYWwgdGltZSBhbmQgZW5kIGF0IDAyOjAwIGxvY2FsIHRpbWUuICBJIGFtIG5vdCBzdXJlCisjIHdoYXQgaGFwcGVuZWQgYmVmb3JlIHRoYXQuICBPbmUgZXhhbXBsZSBmb3IgZWFjaCB5ZWFyIGZyb20gMTk5NiB0byAyMDAxOgorIyBodHRwOi8vbmV3c3BvdC5ieWVnbS5nb3YudHIvYXJzaXYvMTk5Ni8yMS9ONC5odG0KKyMgaHR0cDovL3d3dy5ieWVnbS5nb3YudHIvWUFZSU5MQVJJTUlaL0NIUi9JTkc5Ny8wMy85N1gwM1gyNS5UWFQKKyMgaHR0cDovL3d3dy5ieWVnbS5nb3YudHIvWUFZSU5MQVJJTUlaL0NIUi9JTkc5OC8wMy85OFgwM1gwMi5IVE0KKyMgaHR0cDovL3d3dy5ieWVnbS5nb3YudHIvWUFZSU5MQVJJTUlaL0NIUi9JTkc5OS8xMC85OVgxMFgyNi5IVE0jJTIwMTYKKyMgaHR0cDovL3d3dy5ieWVnbS5nb3YudHIvWUFZSU5MQVJJTUlaL0NIUi9JTkcyMDAwLzAzLzAwWDAzWDA2LkhUTSMlMjAyMQorIyBodHRwOi8vd3d3LmJ5ZWdtLmdvdi50ci9ZQVlJTkxBUklNSVovQ0hSL0lORzIwMDEvMDMvMjN4MDN4MDEuSFRNIyUyMDI3CisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDctMDEtMDMpOgorIyBQcmVmZXIgdGhlIGFib3ZlIHNvdXJjZSB0byBTaGFua3MgJiBQb3R0ZW5nZXIgZm9yIHRpbWUgc3RhbXBzIGFmdGVyIDE5OTAuCisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDctMDMtMDkpOgorIyBTdGFydGluZyAyMDA3IHRob3VnaCwgaXQgc2VlbXMgdGhhdCB0aGV5IGFyZSBhZG9wdGluZyBFVSdzIDE6MDAgVVRDCisjIHN0YXJ0L2VuZCB0aW1lLCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBwYWdlICgyMDA3LTAzLTA3KToKKyMgaHR0cDovL3d3dy5udHZtc25iYy5jb20vbmV3cy80MDIwMjkuYXNwCisjIFRoZSBvZmZpY2lhbCBkb2N1bWVudCBpcyBsb2NhdGVkIGhlcmUgLSBpdCBpcyBpbiBUdXJraXNoLi4uOgorIyBodHRwOi8vcmVnYS5iYXNiYWthbmxpay5nb3YudHIvZXNraWxlci8yMDA3LzAzLzIwMDcwMzA3LTcuaHRtCisjIEkgd2FzIGFibGUgdG8gbG9jYXRlIHRoZSBmb2xsb3dpbmcgc2VlbWluZ2x5IG9mZmljaWFsIGRvY3VtZW50CisjIChvbiBhIG5vbi1nb3Zlcm5tZW50IHNlcnZlciB0aG91Z2gpIGRlc2NyaWJpbmcgZGF0ZXMgYmV0d2VlbiAyMDAyIGFuZCAyMDA2OgorIyBodHRwOi8vd3d3LmFsb21hbGl5ZS5jb20vYmtrXzIwMDJfMzc2OS5odG0KKworIyBGcm9tIFN1ZSBXaWxsaWFtcyAoMjAwOC0wOC0xMSk6CisjIEkgc3BvdHRlZCB0aGlzIG5ld3MgYXJ0aWNsZSBhYm91dCBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gVHVya2V5LgorIworIyA8YSBocmVmPSJodHRwOi8vd3d3Lmh1cnJpeWV0LmNvbS50ci9lbmdsaXNoL2RvbWVzdGljLzk2MjYxNzQuYXNwP3Njcj0xIj4KKyMgaHR0cDovL3d3dy5odXJyaXlldC5jb20udHIvZW5nbGlzaC9kb21lc3RpYy85NjI2MTc0LmFzcD9zY3I9MQorIyA8L2E+CisKKyMgRnJvbSBTdWUgV2lsbGlhbXMgKDIwMDgtMDgtMjApOgorIyBUaGlzIGFydGljbGUgc2F5cyB0aGF0IGFyb3VuZCB0aGUgZW5kIG9mIE1hcmNoIDIwMTEsIFR1cmtleSB3YW50cyB0bworIyBhZGp1c3QgdGhlIGNsb2NrcyBmb3J3YXJkIGJ5IDEvMiBob3VyIGFuZCBzdGF5IHRoYXQgd2F5IHBlcm1hbmVudGx5LgorIyBUaGUgYXJ0aWNsZSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIGEgY2hhbmdlIGluIHRpbWV6b25lIG9mZnNldCBpbiBhZGRpdGlvbgorIyB0byBzdG9wcGluZyBvYnNlcnZhbmNlIG9mIERTVC4KKyMgVGhpcyBwcm9wb3NhbCBoYXMgbm90IHlldCBiZWVuIGFwcHJvdmVkLgorIworIyBSZWFkIG1vcmUgaGVyZS4uLgorIworIyBUdXJrZXkgdG8gYWJhbmRvbiBkYXlsaWdodCBzYXZpbmcgdGltZSBpbiAyMDExCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cudHVya2lzaGRhaWx5bmV3cy5jb20udHIvYXJ0aWNsZS5waHA/ZW5ld3NpZD0xMTI5ODkiPgorIyBodHRwOi8vd3d3LnR1cmtpc2hkYWlseW5ld3MuY29tLnRyL2FydGljbGUucGhwP2VuZXdzaWQ9MTEyOTg5CisjIDwvYT4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJVHVya2V5CTE5MTYJb25seQktCU1heQkgMQkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTkxNglvbmx5CS0JT2N0CSAxCTA6MDAJMAktCitSdWxlCVR1cmtleQkxOTIwCW9ubHkJLQlNYXIJMjgJMDowMAkxOjAwCVMKK1J1bGUJVHVya2V5CTE5MjAJb25seQktCU9jdAkyNQkwOjAwCTAJLQorUnVsZQlUdXJrZXkJMTkyMQlvbmx5CS0JQXByCSAzCTA6MDAJMTowMAlTCitSdWxlCVR1cmtleQkxOTIxCW9ubHkJLQlPY3QJIDMJMDowMAkwCS0KK1J1bGUJVHVya2V5CTE5MjIJb25seQktCU1hcgkyNgkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTkyMglvbmx5CS0JT2N0CSA4CTA6MDAJMAktCisjIFdoaXRtYW4gZ2l2ZXMgMTkyMyBBcHIgMjggLSBTZXAgMTYgYW5kIG5vIERTVCBpbiAxOTI0LTE5MjU7CisjIGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlUdXJrZXkJMTkyNAlvbmx5CS0JTWF5CTEzCTA6MDAJMTowMAlTCitSdWxlCVR1cmtleQkxOTI0CTE5MjUJLQlPY3QJIDEJMDowMAkwCS0KK1J1bGUJVHVya2V5CTE5MjUJb25seQktCU1heQkgMQkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTk0MAlvbmx5CS0JSnVuCTMwCTA6MDAJMTowMAlTCitSdWxlCVR1cmtleQkxOTQwCW9ubHkJLQlPY3QJIDUJMDowMAkwCS0KK1J1bGUJVHVya2V5CTE5NDAJb25seQktCURlYwkgMQkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTk0MQlvbmx5CS0JU2VwCTIxCTA6MDAJMAktCitSdWxlCVR1cmtleQkxOTQyCW9ubHkJLQlBcHIJIDEJMDowMAkxOjAwCVMKKyMgV2hpdG1hbiBvbWl0cyB0aGUgbmV4dCB0d28gdHJhbnNpdGlvbiBhbmQgZ2l2ZXMgMTk0NSBPY3QgMTsKKyMgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuCitSdWxlCVR1cmtleQkxOTQyCW9ubHkJLQlOb3YJIDEJMDowMAkwCS0KK1J1bGUJVHVya2V5CTE5NDUJb25seQktCUFwcgkgMgkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTk0NQlvbmx5CS0JT2N0CSA4CTA6MDAJMAktCitSdWxlCVR1cmtleQkxOTQ2CW9ubHkJLQlKdW4JIDEJMDowMAkxOjAwCVMKK1J1bGUJVHVya2V5CTE5NDYJb25seQktCU9jdAkgMQkwOjAwCTAJLQorUnVsZQlUdXJrZXkJMTk0NwkxOTQ4CS0JQXByCVN1bj49MTYJMDowMAkxOjAwCVMKK1J1bGUJVHVya2V5CTE5NDcJMTk1MAktCU9jdAlTdW4+PTIJMDowMAkwCS0KK1J1bGUJVHVya2V5CTE5NDkJb25seQktCUFwcgkxMAkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTk1MAlvbmx5CS0JQXByCTE5CTA6MDAJMTowMAlTCitSdWxlCVR1cmtleQkxOTUxCW9ubHkJLQlBcHIJMjIJMDowMAkxOjAwCVMKK1J1bGUJVHVya2V5CTE5NTEJb25seQktCU9jdAkgOAkwOjAwCTAJLQorUnVsZQlUdXJrZXkJMTk2Mglvbmx5CS0JSnVsCTE1CTA6MDAJMTowMAlTCitSdWxlCVR1cmtleQkxOTYyCW9ubHkJLQlPY3QJIDgJMDowMAkwCS0KK1J1bGUJVHVya2V5CTE5NjQJb25seQktCU1heQkxNQkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTk2NAlvbmx5CS0JT2N0CSAxCTA6MDAJMAktCitSdWxlCVR1cmtleQkxOTcwCTE5NzIJLQlNYXkJU3VuPj0yCTA6MDAJMTowMAlTCitSdWxlCVR1cmtleQkxOTcwCTE5NzIJLQlPY3QJU3VuPj0yCTA6MDAJMAktCitSdWxlCVR1cmtleQkxOTczCW9ubHkJLQlKdW4JIDMJMTowMAkxOjAwCVMKK1J1bGUJVHVya2V5CTE5NzMJb25seQktCU5vdgkgNAkzOjAwCTAJLQorUnVsZQlUdXJrZXkJMTk3NAlvbmx5CS0JTWFyCTMxCTI6MDAJMTowMAlTCitSdWxlCVR1cmtleQkxOTc0CW9ubHkJLQlOb3YJIDMJNTowMAkwCS0KK1J1bGUJVHVya2V5CTE5NzUJb25seQktCU1hcgkzMAkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTk3NQkxOTc2CS0JT2N0CWxhc3RTdW4JMDowMAkwCS0KK1J1bGUJVHVya2V5CTE5NzYJb25seQktCUp1bgkgMQkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTk3NwkxOTc4CS0JQXByCVN1bj49MQkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTk3Nwlvbmx5CS0JT2N0CTE2CTA6MDAJMAktCitSdWxlCVR1cmtleQkxOTc5CTE5ODAJLQlBcHIJU3VuPj0xCTM6MDAJMTowMAlTCitSdWxlCVR1cmtleQkxOTc5CTE5ODIJLQlPY3QJTW9uPj0xMQkwOjAwCTAJLQorUnVsZQlUdXJrZXkJMTk4MQkxOTgyCS0JTWFyCWxhc3RTdW4JMzowMAkxOjAwCVMKK1J1bGUJVHVya2V5CTE5ODMJb25seQktCUp1bAkzMQkwOjAwCTE6MDAJUworUnVsZQlUdXJrZXkJMTk4Mwlvbmx5CS0JT2N0CSAyCTA6MDAJMAktCitSdWxlCVR1cmtleQkxOTg1CW9ubHkJLQlBcHIJMjAJMDowMAkxOjAwCVMKK1J1bGUJVHVya2V5CTE5ODUJb25seQktCVNlcAkyOAkwOjAwCTAJLQorUnVsZQlUdXJrZXkJMTk4NgkxOTkwCS0JTWFyCWxhc3RTdW4JMjowMHMJMTowMAlTCitSdWxlCVR1cmtleQkxOTg2CTE5OTAJLQlTZXAJbGFzdFN1bgkyOjAwcwkwCS0KK1J1bGUJVHVya2V5CTE5OTEJMjAwNgktCU1hcglsYXN0U3VuCTE6MDBzCTE6MDAJUworUnVsZQlUdXJrZXkJMTk5MQkxOTk1CS0JU2VwCWxhc3RTdW4JMTowMHMJMAktCitSdWxlCVR1cmtleQkxOTk2CTIwMDYJLQlPY3QJbGFzdFN1bgkxOjAwcwkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJRXVyb3BlL0lzdGFuYnVsCTE6NTU6NTIgLQlMTVQJMTg4MAorCQkJMTo1Njo1NgktCUlNVAkxOTEwIE9jdCAjIElzdGFuYnVsIE1lYW4gVGltZT8KKwkJCTI6MDAJVHVya2V5CUVFJXNUCTE5NzggT2N0IDE1CisJCQkzOjAwCVR1cmtleQlUUiVzVAkxOTg1IEFwciAyMCAjIFR1cmtleSBUaW1lCisJCQkyOjAwCVR1cmtleQlFRSVzVAkyMDA3CisJCQkyOjAwCUVVCUVFJXNUCitMaW5rCUV1cm9wZS9Jc3RhbmJ1bAlBc2lhL0lzdGFuYnVsCSMgSXN0YW5idWwgaXMgaW4gYm90aCBjb250aW5lbnRzLgorCisjIFVrcmFpbmUKKyMKKyMgRnJvbSBJZ29yIEthcnBvdiwgd2hvIHdvcmtzIGZvciB0aGUgVWtyYW5pYW4gTWluaXN0cnkgb2YgSnVzdGljZSwKKyMgdmlhIEdhcnJldHQgV29sbG1hbiAoMjAwMy0wMS0yNyk6CisjIEJUVywgSSd2ZSBmb3VuZCB0aGUgb2ZmaWNpYWwgZG9jdW1lbnQgb24gdGhpcyBtYXR0ZXIuIEl0J3MgZ292ZXJtZW50CisjIHJlZ3VsYXRpb25zIG51bWJlciA1MDksIE1heSAxMywgMTk5Ni4gSW4gbXkgcG9vciB0cmFuc2xhdGlvbiBpdCBzYXlzOgorIyAiVGltZSBpbiBVa3JhaW5lIGlzIHNldCB0byBzZWNvbmQgdGltZXpvbmUgKEtpZXYgdGltZSkuIEVhY2ggbGFzdCBTdW5kYXkKKyMgb2YgTWFyY2ggYXQgM2FtIHRoZSB0aW1lIGlzIGNoYW5naW5nIHRvIDRhbSBhbmQgZWFjaCBsYXN0IFN1bmRheSBvZgorIyBPY3RvYmVyIHRoZSB0aW1lIGF0IDRhbSBpcyBjaGFuZ2luZyB0byAzYW0iCisKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KKyMgTW9zdCBvZiBVa3JhaW5lIHNpbmNlIDE5NzAgaGFzIGJlZW4gbGlrZSBLaWV2LgorIyAiS3lpdiIgaXMgdGhlIHRyYW5zbGl0ZXJhdGlvbiBvZiB0aGUgVWtyYWluaWFuIG5hbWUsIGJ1dAorIyAiS2lldiIgaXMgbW9yZSBjb21tb24gaW4gRW5nbGlzaC4KK1pvbmUgRXVyb3BlL0tpZXYJMjowMjowNCAtCUxNVAkxODgwCisJCQkyOjAyOjA0CS0JS01UCTE5MjQgTWF5ICAyICMgS2lldiBNZWFuIFRpbWUKKwkJCTI6MDAJLQlFRVQJMTkzMCBKdW4gMjEKKwkJCTM6MDAJLQlNU0sJMTk0MSBTZXAgMjAKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTk0MyBOb3YgIDYKKwkJCTM6MDAJUnVzc2lhCU1TSy9NU0QJMTk5MAorCQkJMzowMAktCU1TSwkxOTkwIEp1bCAgMSAyOjAwCisJCQkyOjAwCS0JRUVUCTE5OTIKKwkJCTI6MDAJRS1FdXIJRUUlc1QJMTk5NQorCQkJMjowMAlFVQlFRSVzVAorIyBSdXRoZW5pYSB1c2VkIENFVCAxOTkwLzE5OTEuCisjICJVemhob3JvZCIgaXMgdGhlIHRyYW5zbGl0ZXJhdGlvbiBvZiB0aGUgVWtyYWluaWFuIG5hbWUsIGJ1dAorIyAiVXpoZ29yb2QiIGlzIG1vcmUgY29tbW9uIGluIEVuZ2xpc2guCitab25lIEV1cm9wZS9Vemhnb3JvZAkxOjI5OjEyIC0JTE1UCTE4OTAgT2N0CisJCQkxOjAwCS0JQ0VUCTE5NDAKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTk0NCBPY3QKKwkJCTE6MDAJMTowMAlDRVNUCTE5NDQgT2N0IDI2CisJCQkxOjAwCS0JQ0VUCTE5NDUgSnVuIDI5CisJCQkzOjAwCVJ1c3NpYQlNU0svTVNECTE5OTAKKwkJCTM6MDAJLQlNU0sJMTk5MCBKdWwgIDEgMjowMAorCQkJMTowMAktCUNFVAkxOTkxIE1hciAzMSAzOjAwCisJCQkyOjAwCS0JRUVUCTE5OTIKKwkJCTI6MDAJRS1FdXIJRUUlc1QJMTk5NQorCQkJMjowMAlFVQlFRSVzVAorIyBaYXBvcm96aCd5ZSBhbmQgZWFzdGVybiBMdWdhbnNrIG9ibGFzdHMgb2JzZXJ2ZWQgRFNUIDE5OTAvMTk5MS4KKyMgIlphcG9yaXpoaWEiIGlzIHRoZSB0cmFuc2xpdGVyYXRpb24gb2YgdGhlIFVrcmFpbmlhbiBuYW1lLCBidXQKKyMgIlphcG9yb3poJ3llIiBpcyBtb3JlIGNvbW1vbiBpbiBFbmdsaXNoLiAgVXNlIHRoZSBjb21tb24gRW5nbGlzaAorIyBzcGVsbGluZywgZXhjZXB0IG9taXQgdGhlIGFwb3N0cm9waGUgYXMgaXQgaXMgbm90IGFsbG93ZWQgaW4KKyMgcG9ydGFibGUgUG9zaXggZmlsZSBuYW1lcy4KK1pvbmUgRXVyb3BlL1phcG9yb3poeWUJMjoyMDo0MCAtCUxNVAkxODgwCisJCQkyOjIwCS0JQ1VUCTE5MjQgTWF5ICAyICMgQ2VudHJhbCBVa3JhaW5lIFQKKwkJCTI6MDAJLQlFRVQJMTkzMCBKdW4gMjEKKwkJCTM6MDAJLQlNU0sJMTk0MSBBdWcgMjUKKwkJCTE6MDAJQy1FdXIJQ0Ulc1QJMTk0MyBPY3QgMjUKKwkJCTM6MDAJUnVzc2lhCU1TSy9NU0QJMTk5MSBNYXIgMzEgMjowMAorCQkJMjowMAlFLUV1cglFRSVzVAkxOTk1CisJCQkyOjAwCUVVCUVFJXNUCisjIENlbnRyYWwgQ3JpbWVhIHVzZWQgTW9zY293IHRpbWUgMTk5NC8xOTk3LgorWm9uZSBFdXJvcGUvU2ltZmVyb3BvbAkyOjE2OjI0IC0JTE1UCTE4ODAKKwkJCTI6MTYJLQlTTVQJMTkyNCBNYXkgIDIgIyBTaW1mZXJvcG9sIE1lYW4gVAorCQkJMjowMAktCUVFVAkxOTMwIEp1biAyMQorCQkJMzowMAktCU1TSwkxOTQxIE5vdgorCQkJMTowMAlDLUV1cglDRSVzVAkxOTQ0IEFwciAxMworCQkJMzowMAlSdXNzaWEJTVNLL01TRAkxOTkwCisJCQkzOjAwCS0JTVNLCTE5OTAgSnVsICAxIDI6MDAKKwkJCTI6MDAJLQlFRVQJMTk5MgorIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgVGhlIF9FY29ub21pc3RfICgxOTk0LTA1LTI4LCBwIDQ1KSByZXBvcnRzIHRoYXQgY2VudHJhbCBDcmltZWEgc3dpdGNoZWQKKyMgZnJvbSBLaWV2IHRvIE1vc2NvdyB0aW1lIHNvbWV0aW1lIGFmdGVyIHRoZSBKYW51YXJ5IDE5OTQgZWxlY3Rpb25zLgorIyBTaGFua3MgKDE5OTkpIHNheXMgYGBkYXRlIG9mIGNoYW5nZSB1bmNlcnRhaW4nJywgYnV0IGltcGxpZXMgdGhhdCBpdCBoYXBwZW5lZAorIyBzb21ldGltZSBiZXR3ZWVuIHRoZSAxOTk0IERTVCBzd2l0Y2hlcy4gIFNoYW5rcyAmIFBvdHRlbmdlciBzaW1wbHkgc2F5CisjIDE5OTQtMDktMjUgMDM6MDAsIGJ1dCB0aGF0IGNhbid0IGJlIHJpZ2h0LiAgRm9yIG5vdywgZ3Vlc3MgaXQKKyMgY2hhbmdlZCBpbiBNYXkuCisJCQkyOjAwCUUtRXVyCUVFJXNUCTE5OTQgTWF5CisjIEZyb20gSUFUQSBTU0lNICgxOTk0LzE5OTcpLCB3aGljaCBhbHNvIHNheXMgdGhhdCBLZXJjaCBpcyBzdGlsbCBsaWtlIEtpZXYuCisJCQkzOjAwCUUtRXVyCU1TSy9NU0QJMTk5NiBNYXIgMzEgMzowMHMKKwkJCTM6MDAJMTowMAlNU0QJMTk5NiBPY3QgMjcgMzowMHMKKyMgSUFUQSBTU0lNICgxOTk3LTA5KSBzYXlzIENyaW1lYSBzd2l0Y2hlZCB0byBFRVQvRUVTVC4KKyMgQXNzdW1lIGl0IGhhcHBlbmVkIGluIE1hcmNoIGJ5IG5vdCBjaGFuZ2luZyB0aGUgY2xvY2tzLgorCQkJMzowMAlSdXNzaWEJTVNLL01TRAkxOTk3CisJCQkzOjAwCS0JTVNLCTE5OTcgTWFyIGxhc3RTdW4gMTowMHUKKwkJCTI6MDAJRVUJRUUlc1QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIE9uZSBzb3VyY2Ugc2hvd3MgdGhhdCBCdWxnYXJpYSwgQ3lwcnVzLCBGaW5sYW5kLCBhbmQgR3JlZWNlIG9ic2VydmUgRFNUIGZyb20KKyMgdGhlIGxhc3QgU3VuZGF5IGluIE1hcmNoIHRvIHRoZSBsYXN0IFN1bmRheSBpbiBTZXB0ZW1iZXIgaW4gMTk4Ni4KKyMgVGhlIHNvdXJjZSBzaG93cyBSb21hbmlhIGNoYW5naW5nIGEgZGF5IGxhdGVyIHRoYW4gZXZlcnlib2R5IGVsc2UuCisjCisjIEFjY29yZGluZyB0byBCZXJuYXJkIFNpZWxvZmYncyBzb3VyY2UsIFBvbGFuZCBpcyBpbiB0aGUgTUVUIHRpbWUgem9uZSBidXQKKyMgdXNlcyB0aGUgV0UgRFNUIHJ1bGVzLiAgVGhlIFdlc3Rlcm4gVVNTUiB1c2VzIEVFVCsxIGFuZCBNRSBEU1QgcnVsZXMuCisjIEJlcm5hcmQgU2llbG9mZidzIHNvdXJjZSBjbGFpbXMgUm9tYW5pYSBzd2l0Y2hlcyBvbiB0aGUgc2FtZSBkYXksIGJ1dCBhdAorIyAwMDowMCBzdGFuZGFyZCB0aW1lIChpLmUuLCAwMTowMCBEU1QpLiAgSXQgYWxzbyBjbGFpbXMgdGhhdCBUdXJrZXkKKyMgc3dpdGNoZXMgb24gdGhlIHNhbWUgZGF5LCBidXQgc3dpdGNoZXMgb24gYXQgMDE6MDAgc3RhbmRhcmQgdGltZQorIyBhbmQgb2ZmIGF0IDAwOjAwIHN0YW5kYXJkIHRpbWUgKGkuZS4sIDAxOjAwIERTVCkKKworIyAuLi4KKyMgRGF0ZTogV2VkLCAyOCBKYW4gODcgMTY6NTY6MjcgLTAxMDAKKyMgRnJvbTogVG9tIEhvZm1hbm4KKyMgLi4uCisjCisjIC4uLnRoZSBFdXJvcGVhbiB0aW1lIHJ1bGVzIGFyZS4uLnN0YW5kYXJkaXplZCBzaW5jZSAxOTgxLCB3aGVuCisjIG1vc3QgRXVyb3BlYW4gY291blt0cl1pZXMgc3RhcnRlZCBEU1QuICBCZWZvcmUgdGhhdCB5ZWFyLCBvbmx5CisjIGEgZmV3IGNvdW50cmllcyAoVUssIEZyYW5jZSwgSXRhbHkpIGhhZCBEU1QsIGVhY2ggYWNjb3JkaW5nCisjIHRvIG93biBuYXRpb25hbCBydWxlcy4gIEluIDE5ODEsIGhvd2V2ZXIsIERTVCBzdGFydGVkIG9uCisjICdBcHIgZmlyc3RTdW4nLCBhbmQgbm90IG9uICdNYXIgbGFzdFN1bicgYXMgaW4gdGhlIGZvbGxvd2luZworIyB5ZWFycy4uLgorIyBCdXQgYWxzbyBzaW5jZSAxOTgxIHRoZXJlIGFyZSBzb21lIG1vcmUgbmF0aW9uYWwgZXhjZXB0aW9ucworIyB0aGFuIGxpc3RlZCBpbiAnZXVyb3BlJzogU3dpdHplcmxhbmQsIGZvciBleGFtcGxlLCBqb2luZWQgRFNUCisjIG9uZSB5ZWFyIGxhdGVyLCBEZW5tYXJrIGVuZGVkIERTVCBvbiAnT2N0IDEnIGluc3RlYWQgb2YgJ1NlcAorIyBsYXN0U3VuJyBpbiAxOTgxLS0tSSBkb24ndCBrbm93IGhvdyB0aGV5IGhhbmRsZSBub3cuCisjCisjIEZpbmFsbHksIERTVCBpc3QgYWx3YXlzIGZyb20gJ0FwciAxJyB0byAnT2N0IDEnIGluIHRoZQorIyBTb3ZpZXQgVW5pb24gKGFzIGZhciBhcyBJIGtub3cpLgorIworIyBUb20gSG9mbWFubiwgU2NpZW50aWZpYyBDb21wdXRlciBDZW50ZXIsIENJQkEtR0VJR1kgQUcsCisjIDQwMDIgQmFzbGUsIFN3aXR6ZXJsYW5kCisjIC4uLgorCisjIC4uLgorIyBEYXRlOiBXZWQsIDQgRmViIDg3IDIyOjM1OjIyICswMTAwCisjIEZyb206IERpayBULiBXaW50ZXIKKyMgLi4uCisjCisjIFRoZSBpbmZvcm1hdGlvbiBmcm9tIFRvbSBIb2ZtYW5uIGlzIChhcyBmYXIgYXMgSSBrbm93KSBub3QgZW50aXJlbHkgY29ycmVjdC4KKyMgQWZ0ZXIgYSByZXF1ZXN0IGZyb20gY2hvbmdvIGF0IGFtZGFobCBJIHRyaWVkIHRvIHJldHJpZXZlIGFsbCBpbmZvcm1hdGlvbgorIyBhYm91dCBEU1QgaW4gRXVyb3BlLiAgSSB3YXMgYWJsZSB0byBmaW5kIGFsbCBmcm9tIGFib3V0IDE5NjkuCisjCisjIC4uLnN0YW5kYXJkaXphdGlvbiBvbiBEU1QgaW4gRXVyb3BlIHN0YXJ0ZWQgaW4gYWJvdXQgMTk3NyB3aXRoIHN3aXRjaGVzIG9uCisjIGZpcnN0IFN1bmRheSBpbiBBcHJpbCBhbmQgbGFzdCBTdW5kYXkgaW4gU2VwdGVtYmVyLi4uCisjIEluIDE5ODEgVUsgam9pbmVkIEV1cm9wZSBpbnNvZmFyIHRoYXQKKyMgdGhlIHN0YXJ0aW5nIGRheSBmb3IgYm90aCBzaGlmdGVkIHRvIGxhc3QgU3VuZGF5IGluIE1hcmNoLiAgQW5kIGZyb20gMTk4MgorIyB0aGUgd2hvbGUgb2YgRXVyb3BlIHVzZWQgRFNULCB3aXRoIHN3aXRjaCBkYXRlcyBBcHJpbCAxIGFuZCBPY3RvYmVyIDEgaW4KKyMgdGhlIFNvdltpXWV0IFVuaW9uLiAgSW4gMTk4NSB0aGUgU1UgcmV2ZXJ0ZWQgdG8gc3RhbmRhcmQgRXVyb3BlW2FdbiBzd2l0Y2gKKyMgZGF0ZXMuLi4KKyMKKyMgSXQgc2hvdWxkIGFsc28gYmUgcmVtZW1iZXJlZCB0aGF0IHRpbWUtem9uZXMgYXJlIG5vdCBjb25zdGFudHM7IGUuZy4KKyMgUG9ydHVnYWwgc3dpdGNoZWQgaW4gMTk3NiBmcm9tIE1FVCAob3IgQ0VUKSB0byBXRVQgd2l0aCBEU1QuLi4KKyMgTm90ZSBhbHNvIHRoYXQgdGhvdWdoIHRoZXJlIHdlcmUgcnVsZXMgZm9yIHN3aXRjaCBkYXRlcyBub3QKKyMgYWxsIGNvdW50cmllcyBhYmlkZWQgdG8gdGhlc2UgZGF0ZXMsIGFuZCBtYW55IGluZGl2aWR1YWwgZGV2aWF0aW9ucworIyBvY2N1cnJlZCwgdGhvdWdoIG5vdCBzaW5jZSAxOTgyIEkgYmVsaWV2ZS4gIEFub3RoZXIgbm90ZTogaXQgaXMgYWx3YXlzCisjIGFzc3VtZWQgdGhhdCBEU1QgaXMgMSBob3VyIGFoZWFkIG9mIG5vcm1hbCB0aW1lLCB0aGlzIG5lZWQgbm90IGJlIHRoZQorIyBjYXNlOyBhdCBsZWFzdCBpbiB0aGUgTmV0aGVybGFuZHMgdGhlcmUgaGF2ZSBiZWVuIHRpbWVzIHdoZW4gRFNUIHdhcyAyIGhvdXJzCisjIGluIGFkdmFuY2Ugb2Ygbm9ybWFsIHRpbWUuCisjCisjIC4uLgorIyBkaWsgdC4gd2ludGVyLCBjd2ksIGFtc3RlcmRhbSwgbmVkZXJsYW5kCisjIC4uLgorCisjIEZyb20gQm9iIERldmluZSAoMTk4OC0wMS0yOCk6CisjIC4uLgorIyBHcmVlY2U6IExhc3QgU3VuZGF5IGluIEFwcmlsIHRvIGxhc3QgU3VuZGF5IGluIFNlcHRlbWJlciAoaWZmeSBvbiBkYXRlcykuCisjIFNpbmNlIDE5NzguICBDaGFuZ2UgYXQgbWlkbmlnaHQuCisjIC4uLgorIyBNb25hY286IGhhcyBzYW1lIERTVCBhcyBGcmFuY2UuCisjIC4uLgpkaWZmIC0tZ2l0IGEvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL2ZhY3RvcnkgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvZmFjdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjRjY2MwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL2ZhY3RvcnkKQEAgLTAsMCArMSwxMSBAQAorIyA8cHJlPgorIyBAKCMpZmFjdG9yeQk4LjIKKyMgVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyMgMjAwOS0wNS0xNyBieSBBcnRodXIgRGF2aWQgT2xzb24uCisKKyMgRm9yIGNvbXBhbmllcyB3aG8gZG9uJ3Qgd2FudCB0byBwdXQgdGltZSB6b25lIHNwZWNpZmljYXRpb24gaW4KKyMgdGhlaXIgaW5zdGFsbGF0aW9uIHByb2NlZHVyZXMuICBXaGVuIHVzZXJzIHJ1biBkYXRlLCB0aGV5J2xsIGdldCB0aGUgbWVzc2FnZS4KKyMgQWxzbyB1c2VmdWwgZm9yIHRoZSAiY29tcC5zb3VyY2VzIiB2ZXJzaW9uLgorCisjIFpvbmUJTkFNRQlHTVRPRkYJUlVMRVMJRk9STUFUCitab25lCUZhY3RvcnkJMAktICJMb2NhbCB0aW1lIHpvbmUgbXVzdCBiZSBzZXQtLXNlZSB6aWMgbWFudWFsIHBhZ2UiCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvaXNvMzE2Ni50YWIgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvaXNvMzE2Ni50YWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhMjU5MgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9pc28zMTY2LnRhYgpAQCAtMCwwICsxLDI3MSBAQAorIyA8cHJlPgorIyBAKCMpaXNvMzE2Ni50YWIJOC42CisjIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiwgc28gY2xhcmlmaWVkIGFzIG9mCisjIDIwMDktMDUtMTcgYnkgQXJ0aHVyIERhdmlkIE9sc29uLgorIyBJU08gMzE2NiBhbHBoYS0yIGNvdW50cnkgY29kZXMKKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wOS0yNyk6CisjCisjIFRoaXMgZmlsZSBjb250YWlucyBhIHRhYmxlIHdpdGggdGhlIGZvbGxvd2luZyBjb2x1bW5zOgorIyAxLiAgSVNPIDMxNjYtMSBhbHBoYS0yIGNvdW50cnkgY29kZSwgY3VycmVudCBhcyBvZgorIyAgICAgSVNPIDMxNjYtMSBOZXdzbGV0dGVyIFZJLTEgKDIwMDctMDktMjEpLiAgU2VlOgorIyAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9lbi9wcm9kcy1zZXJ2aWNlcy9pc28zMTY2bWEvaW5kZXguaHRtbCI+CisjICAgICBJU08gMzE2NiBNYWludGVuYW5jZSBhZ2VuY3kgKElTTyAzMTY2L01BKQorIyAgICAgPC9hPi4KKyMgMi4gIFRoZSB1c3VhbCBFbmdsaXNoIG5hbWUgZm9yIHRoZSBjb3VudHJ5LAorIyAgICAgY2hvc2VuIHNvIHRoYXQgYWxwaGFiZXRpYyBzb3J0aW5nIG9mIHN1YnNldHMgcHJvZHVjZXMgaGVscGZ1bCBsaXN0cy4KKyMgICAgIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBFbmdsaXNoIG5hbWUgaW4gdGhlIElTTyAzMTY2IHRhYmxlcy4KKyMKKyMgQ29sdW1ucyBhcmUgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHRhYi4KKyMgVGhlIHRhYmxlIGlzIHNvcnRlZCBieSBjb3VudHJ5IGNvZGUuCisjCisjIExpbmVzIGJlZ2lubmluZyB3aXRoIGAjJyBhcmUgY29tbWVudHMuCisjCisjY291bnRyeS0KKyNjb2RlCWNvdW50cnkgbmFtZQorQUQJQW5kb3JyYQorQUUJVW5pdGVkIEFyYWIgRW1pcmF0ZXMKK0FGCUFmZ2hhbmlzdGFuCitBRwlBbnRpZ3VhICYgQmFyYnVkYQorQUkJQW5ndWlsbGEKK0FMCUFsYmFuaWEKK0FNCUFybWVuaWEKK0FOCU5ldGhlcmxhbmRzIEFudGlsbGVzCitBTwlBbmdvbGEKK0FRCUFudGFyY3RpY2EKK0FSCUFyZ2VudGluYQorQVMJU2Ftb2EgKEFtZXJpY2FuKQorQVQJQXVzdHJpYQorQVUJQXVzdHJhbGlhCitBVwlBcnViYQorQVgJQWFsYW5kIElzbGFuZHMKK0FaCUF6ZXJiYWlqYW4KK0JBCUJvc25pYSAmIEhlcnplZ292aW5hCitCQglCYXJiYWRvcworQkQJQmFuZ2xhZGVzaAorQkUJQmVsZ2l1bQorQkYJQnVya2luYSBGYXNvCitCRwlCdWxnYXJpYQorQkgJQmFocmFpbgorQkkJQnVydW5kaQorQkoJQmVuaW4KK0JMCVN0IEJhcnRoZWxlbXkKK0JNCUJlcm11ZGEKK0JOCUJydW5laQorQk8JQm9saXZpYQorQlIJQnJhemlsCitCUwlCYWhhbWFzCitCVAlCaHV0YW4KK0JWCUJvdXZldCBJc2xhbmQKK0JXCUJvdHN3YW5hCitCWQlCZWxhcnVzCitCWglCZWxpemUKK0NBCUNhbmFkYQorQ0MJQ29jb3MgKEtlZWxpbmcpIElzbGFuZHMKK0NECUNvbmdvIChEZW0uIFJlcC4pCitDRglDZW50cmFsIEFmcmljYW4gUmVwLgorQ0cJQ29uZ28gKFJlcC4pCitDSAlTd2l0emVybGFuZAorQ0kJQ290ZSBkJ0l2b2lyZQorQ0sJQ29vayBJc2xhbmRzCitDTAlDaGlsZQorQ00JQ2FtZXJvb24KK0NOCUNoaW5hCitDTwlDb2xvbWJpYQorQ1IJQ29zdGEgUmljYQorQ1UJQ3ViYQorQ1YJQ2FwZSBWZXJkZQorQ1gJQ2hyaXN0bWFzIElzbGFuZAorQ1kJQ3lwcnVzCitDWglDemVjaCBSZXB1YmxpYworREUJR2VybWFueQorREoJRGppYm91dGkKK0RLCURlbm1hcmsKK0RNCURvbWluaWNhCitETwlEb21pbmljYW4gUmVwdWJsaWMKK0RaCUFsZ2VyaWEKK0VDCUVjdWFkb3IKK0VFCUVzdG9uaWEKK0VHCUVneXB0CitFSAlXZXN0ZXJuIFNhaGFyYQorRVIJRXJpdHJlYQorRVMJU3BhaW4KK0VUCUV0aGlvcGlhCitGSQlGaW5sYW5kCitGSglGaWppCitGSwlGYWxrbGFuZCBJc2xhbmRzCitGTQlNaWNyb25lc2lhCitGTwlGYXJvZSBJc2xhbmRzCitGUglGcmFuY2UKK0dBCUdhYm9uCitHQglCcml0YWluIChVSykKK0dECUdyZW5hZGEKK0dFCUdlb3JnaWEKK0dGCUZyZW5jaCBHdWlhbmEKK0dHCUd1ZXJuc2V5CitHSAlHaGFuYQorR0kJR2licmFsdGFyCitHTAlHcmVlbmxhbmQKK0dNCUdhbWJpYQorR04JR3VpbmVhCitHUAlHdWFkZWxvdXBlCitHUQlFcXVhdG9yaWFsIEd1aW5lYQorR1IJR3JlZWNlCitHUwlTb3V0aCBHZW9yZ2lhICYgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHMKK0dUCUd1YXRlbWFsYQorR1UJR3VhbQorR1cJR3VpbmVhLUJpc3NhdQorR1kJR3V5YW5hCitISwlIb25nIEtvbmcKK0hNCUhlYXJkIElzbGFuZCAmIE1jRG9uYWxkIElzbGFuZHMKK0hOCUhvbmR1cmFzCitIUglDcm9hdGlhCitIVAlIYWl0aQorSFUJSHVuZ2FyeQorSUQJSW5kb25lc2lhCitJRQlJcmVsYW5kCitJTAlJc3JhZWwKK0lNCUlzbGUgb2YgTWFuCitJTglJbmRpYQorSU8JQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5CitJUQlJcmFxCitJUglJcmFuCitJUwlJY2VsYW5kCitJVAlJdGFseQorSkUJSmVyc2V5CitKTQlKYW1haWNhCitKTwlKb3JkYW4KK0pQCUphcGFuCitLRQlLZW55YQorS0cJS3lyZ3l6c3RhbgorS0gJQ2FtYm9kaWEKK0tJCUtpcmliYXRpCitLTQlDb21vcm9zCitLTglTdCBLaXR0cyAmIE5ldmlzCitLUAlLb3JlYSAoTm9ydGgpCitLUglLb3JlYSAoU291dGgpCitLVwlLdXdhaXQKK0tZCUNheW1hbiBJc2xhbmRzCitLWglLYXpha2hzdGFuCitMQQlMYW9zCitMQglMZWJhbm9uCitMQwlTdCBMdWNpYQorTEkJTGllY2h0ZW5zdGVpbgorTEsJU3JpIExhbmthCitMUglMaWJlcmlhCitMUwlMZXNvdGhvCitMVAlMaXRodWFuaWEKK0xVCUx1eGVtYm91cmcKK0xWCUxhdHZpYQorTFkJTGlieWEKK01BCU1vcm9jY28KK01DCU1vbmFjbworTUQJTW9sZG92YQorTUUJTW9udGVuZWdybworTUYJU3QgTWFydGluIChGcmVuY2ggcGFydCkKK01HCU1hZGFnYXNjYXIKK01ICU1hcnNoYWxsIElzbGFuZHMKK01LCU1hY2Vkb25pYQorTUwJTWFsaQorTU0JTXlhbm1hciAoQnVybWEpCitNTglNb25nb2xpYQorTU8JTWFjYXUKK01QCU5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcworTVEJTWFydGluaXF1ZQorTVIJTWF1cml0YW5pYQorTVMJTW9udHNlcnJhdAorTVQJTWFsdGEKK01VCU1hdXJpdGl1cworTVYJTWFsZGl2ZXMKK01XCU1hbGF3aQorTVgJTWV4aWNvCitNWQlNYWxheXNpYQorTVoJTW96YW1iaXF1ZQorTkEJTmFtaWJpYQorTkMJTmV3IENhbGVkb25pYQorTkUJTmlnZXIKK05GCU5vcmZvbGsgSXNsYW5kCitORwlOaWdlcmlhCitOSQlOaWNhcmFndWEKK05MCU5ldGhlcmxhbmRzCitOTwlOb3J3YXkKK05QCU5lcGFsCitOUglOYXVydQorTlUJTml1ZQorTloJTmV3IFplYWxhbmQKK09NCU9tYW4KK1BBCVBhbmFtYQorUEUJUGVydQorUEYJRnJlbmNoIFBvbHluZXNpYQorUEcJUGFwdWEgTmV3IEd1aW5lYQorUEgJUGhpbGlwcGluZXMKK1BLCVBha2lzdGFuCitQTAlQb2xhbmQKK1BNCVN0IFBpZXJyZSAmIE1pcXVlbG9uCitQTglQaXRjYWlybgorUFIJUHVlcnRvIFJpY28KK1BTCVBhbGVzdGluZQorUFQJUG9ydHVnYWwKK1BXCVBhbGF1CitQWQlQYXJhZ3VheQorUUEJUWF0YXIKK1JFCVJldW5pb24KK1JPCVJvbWFuaWEKK1JTCVNlcmJpYQorUlUJUnVzc2lhCitSVwlSd2FuZGEKK1NBCVNhdWRpIEFyYWJpYQorU0IJU29sb21vbiBJc2xhbmRzCitTQwlTZXljaGVsbGVzCitTRAlTdWRhbgorU0UJU3dlZGVuCitTRwlTaW5nYXBvcmUKK1NICVN0IEhlbGVuYQorU0kJU2xvdmVuaWEKK1NKCVN2YWxiYXJkICYgSmFuIE1heWVuCitTSwlTbG92YWtpYQorU0wJU2llcnJhIExlb25lCitTTQlTYW4gTWFyaW5vCitTTglTZW5lZ2FsCitTTwlTb21hbGlhCitTUglTdXJpbmFtZQorU1QJU2FvIFRvbWUgJiBQcmluY2lwZQorU1YJRWwgU2FsdmFkb3IKK1NZCVN5cmlhCitTWglTd2F6aWxhbmQKK1RDCVR1cmtzICYgQ2FpY29zIElzCitURAlDaGFkCitURglGcmVuY2ggU291dGhlcm4gJiBBbnRhcmN0aWMgTGFuZHMKK1RHCVRvZ28KK1RICVRoYWlsYW5kCitUSglUYWppa2lzdGFuCitUSwlUb2tlbGF1CitUTAlFYXN0IFRpbW9yCitUTQlUdXJrbWVuaXN0YW4KK1ROCVR1bmlzaWEKK1RPCVRvbmdhCitUUglUdXJrZXkKK1RUCVRyaW5pZGFkICYgVG9iYWdvCitUVglUdXZhbHUKK1RXCVRhaXdhbgorVFoJVGFuemFuaWEKK1VBCVVrcmFpbmUKK1VHCVVnYW5kYQorVU0JVVMgbWlub3Igb3V0bHlpbmcgaXNsYW5kcworVVMJVW5pdGVkIFN0YXRlcworVVkJVXJ1Z3VheQorVVoJVXpiZWtpc3RhbgorVkEJVmF0aWNhbiBDaXR5CitWQwlTdCBWaW5jZW50CitWRQlWZW5lenVlbGEKK1ZHCVZpcmdpbiBJc2xhbmRzIChVSykKK1ZJCVZpcmdpbiBJc2xhbmRzIChVUykKK1ZOCVZpZXRuYW0KK1ZVCVZhbnVhdHUKK1dGCVdhbGxpcyAmIEZ1dHVuYQorV1MJU2Ftb2EgKHdlc3Rlcm4pCitZRQlZZW1lbgorWVQJTWF5b3R0ZQorWkEJU291dGggQWZyaWNhCitaTQlaYW1iaWEKK1pXCVppbWJhYndlCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvbGVhcHNlY29uZHMgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvbGVhcHNlY29uZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzNDNjMAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9sZWFwc2Vjb25kcwpAQCAtMCwwICsxLDg3IEBACisjIDxwcmU+CisjIEAoIylsZWFwc2Vjb25kcwk4LjgKKyMgVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyMgMjAwOS0wNS0xNyBieSBBcnRodXIgRGF2aWQgT2xzb24uCisKKyMgQWxsb3dhbmNlIGZvciBsZWFwc2Vjb25kcyBhZGRlZCB0byBlYWNoIHRpbWV6b25lIGZpbGUuCisKKyMgVGhlIEludGVybmF0aW9uYWwgRWFydGggUm90YXRpb24gU2VydmljZSBwZXJpb2RpY2FsbHkgdXNlcyBsZWFwIHNlY29uZHMKKyMgdG8ga2VlcCBVVEMgdG8gd2l0aGluIDAuOSBzIG9mIFVUMQorIyAod2hpY2ggbWVhc3VyZXMgdGhlIHRydWUgYW5ndWxhciBvcmllbnRhdGlvbiBvZiB0aGUgZWFydGggaW4gc3BhY2UpOyBzZWUKKyMgVGVycnkgSiBRdWlubiwgVGhlIEJJUE0gYW5kIHRoZSBhY2N1cmF0ZSBtZWFzdXJlIG9mIHRpbWUsCisjIFByb2MgSUVFRSA3OSwgNyAoSnVseSAxOTkxKSwgODk0LTkwNS4KKyMgVGhlcmUgd2VyZSBubyBsZWFwIHNlY29uZHMgYmVmb3JlIDE5NzIsIGJlY2F1c2UgdGhlIG9mZmljaWFsIG1lY2hhbmlzbQorIyBhY2NvdW50aW5nIGZvciB0aGUgZGlzY3JlcGFuY3kgYmV0d2VlbiBhdG9taWMgdGltZSBhbmQgdGhlIGVhcnRoJ3Mgcm90YXRpb24KKyMgZGlkIG5vdCBleGlzdCB1bnRpbCB0aGUgZWFybHkgMTk3MHMuCisKKyMgVGhlIGNvcnJlY3Rpb24gKCsgb3IgLSkgaXMgbWFkZSBhdCB0aGUgZ2l2ZW4gdGltZSwgc28gbGluZXMKKyMgd2lsbCB0eXBpY2FsbHkgbG9vayBsaWtlOgorIwlMZWFwCVlFQVIJTU9OCURBWQkyMzo1OTo2MAkrCVIvUworIyBvcgorIwlMZWFwCVlFQVIJTU9OCURBWQkyMzo1OTo1OQktCVIvUworCisjIElmIHRoZSBsZWFwc2Vjb25kIGlzIFJvbGxpbmcgKFIpIHRoZSBnaXZlbiB0aW1lIGlzIGxvY2FsIHRpbWUKKyMgSWYgdGhlIGxlYXBzZWNvbmQgaXMgU3RhdGlvbmFyeSAoUykgdGhlIGdpdmVuIHRpbWUgaXMgVVRDCisKKyMgTGVhcAlZRUFSCU1PTlRICURBWQlISDpNTTpTUwlDT1JSCVIvUworTGVhcAkxOTcyCUp1bgkzMAkyMzo1OTo2MAkrCVMKK0xlYXAJMTk3MglEZWMJMzEJMjM6NTk6NjAJKwlTCitMZWFwCTE5NzMJRGVjCTMxCTIzOjU5OjYwCSsJUworTGVhcAkxOTc0CURlYwkzMQkyMzo1OTo2MAkrCVMKK0xlYXAJMTk3NQlEZWMJMzEJMjM6NTk6NjAJKwlTCitMZWFwCTE5NzYJRGVjCTMxCTIzOjU5OjYwCSsJUworTGVhcAkxOTc3CURlYwkzMQkyMzo1OTo2MAkrCVMKK0xlYXAJMTk3OAlEZWMJMzEJMjM6NTk6NjAJKwlTCitMZWFwCTE5NzkJRGVjCTMxCTIzOjU5OjYwCSsJUworTGVhcAkxOTgxCUp1bgkzMAkyMzo1OTo2MAkrCVMKK0xlYXAJMTk4MglKdW4JMzAJMjM6NTk6NjAJKwlTCitMZWFwCTE5ODMJSnVuCTMwCTIzOjU5OjYwCSsJUworTGVhcAkxOTg1CUp1bgkzMAkyMzo1OTo2MAkrCVMKK0xlYXAJMTk4NwlEZWMJMzEJMjM6NTk6NjAJKwlTCitMZWFwCTE5ODkJRGVjCTMxCTIzOjU5OjYwCSsJUworTGVhcAkxOTkwCURlYwkzMQkyMzo1OTo2MAkrCVMKK0xlYXAJMTk5MglKdW4JMzAJMjM6NTk6NjAJKwlTCitMZWFwCTE5OTMJSnVuCTMwCTIzOjU5OjYwCSsJUworTGVhcAkxOTk0CUp1bgkzMAkyMzo1OTo2MAkrCVMKK0xlYXAJMTk5NQlEZWMJMzEJMjM6NTk6NjAJKwlTCitMZWFwCTE5OTcJSnVuCTMwCTIzOjU5OjYwCSsJUworTGVhcAkxOTk4CURlYwkzMQkyMzo1OTo2MAkrCVMKK0xlYXAJMjAwNQlEZWMJMzEJMjM6NTk6NjAJKwlTCitMZWFwCTIwMDgJRGVjCTMxCTIzOjU5OjYwCSsJUworCisjIElOVEVSTkFUSU9OQUwgRUFSVEggUk9UQVRJT04gQU5EIFJFRkVSRU5DRSBTWVNURU1TIFNFUlZJQ0UgKElFUlMpCisjCisjIFNFUlZJQ0UgSU5URVJOQVRJT05BTCBERSBMQSBST1RBVElPTiBURVJSRVNUUkUgRVQgREVTIFNZU1RFTUVTIERFIFJFRkVSRU5DRQorIworIyBTRVJWSUNFIERFIExBIFJPVEFUSU9OIFRFUlJFU1RSRQorIyBPQlNFUlZBVE9JUkUgREUgUEFSSVMKKyMgNjEsIEF2LiBkZSBsJ09ic2VydmF0b2lyZSA3NTAxNCBQQVJJUyAoRnJhbmNlKQorIyBUZWwuICAgICAgOiAzMyAoMCkgMSA0MCA1MSAyMiAyOQorIyBGQVggICAgICAgOiAzMyAoMCkgMSA0MCA1MSAyMiA5MQorIyBJbnRlcm5ldCAgOiBzZXJ2aWNlcy5pZXJzQG9ic3BtLmZyCisjCisjIFBhcmlzLCAxNSBKYW51YXJ5IDIwMDkKKyMKKyMgQnVsbGV0aW4gQyAzNworIworIyBUbyBhdXRob3JpdGllcyByZXNwb25zaWJsZQorIyBmb3IgdGhlIG1lYXN1cmVtZW50IGFuZAorIyBkaXN0cmlidXRpb24gb2YgdGltZQorIworIyBJTkZPUk1BVElPTiBPTiBVVEMgLSBUQUkKKyMKKyMgTk8gcG9zaXRpdmUgbGVhcCBzZWNvbmQgd2lsbCBiZSBpbnRyb2R1Y2VkIGF0IHRoZSBlbmQgb2YgSnVuZSAyMDA5LgorIyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIFVUQyBhbmQgdGhlCisjIEludGVybmF0aW9uYWwgQXRvbWljIFRpbWUgVEFJIGlzIDoJCQorIworIyBmcm9tIDIwMDkgSmFudWFyeSAxLCAwaCBVVEMsIHVudGlsIGZ1cnRoZXIgbm90aWNlIDogVVRDLVRBSSA9IC0zNCBzCisjCisjIExlYXAgc2Vjb25kcyBjYW4gYmUgaW50cm9kdWNlZCBpbiBVVEMgYXQgdGhlIGVuZCBvZiB0aGUgbW9udGhzIG9mIERlY2VtYmVyCisjIG9yIEp1bmUsICBkZXBlbmRpbmcgb24gdGhlIGV2b2x1dGlvbiBvZiBVVDEtVEFJLiBCdWxsZXRpbiBDIGlzIG1haWxlZCBldmVyeQorIyBzaXggbW9udGhzLCBlaXRoZXIgdG8gYW5ub3VuY2UgYSB0aW1lIHN0ZXAgaW4gVVRDLCBvciB0byBjb25maXJtIHRoYXQgdGhlcmUKKyMgd2lsbCBiZSBubyB0aW1lIHN0ZXAgYXQgdGhlIG5leHQgcG9zc2libGUgZGF0ZS4KKyMKKyMgRGFuaWVsIEdBTUJJUworIyBIZWFkCQkJCisjIEVhcnRoIE9yaWVudGF0aW9uIENlbnRlciBvZiB0aGUgSUVSUworIyBPYnNlcnZhdG9pcmUgZGUgUGFyaXMsIEZyYW5jZQpkaWZmIC0tZ2l0IGEvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL25vcnRoYW1lcmljYSBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9ub3J0aGFtZXJpY2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2OTIyZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9ub3J0aGFtZXJpY2EKQEAgLTAsMCArMSwyNjgwIEBACisjIDxwcmU+CisjIEAoIylub3J0aGFtZXJpY2EJOC4yOAorIyBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorIyAyMDA5LTA1LTE3IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKworIyBhbHNvIGluY2x1ZGVzIENlbnRyYWwgQW1lcmljYSBhbmQgdGhlIENhcmliYmVhbgorCisjIFRoaXMgZGF0YSBpcyBieSBubyBtZWFucyBhdXRob3JpdGF0aXZlOyBpZiB5b3UgdGhpbmsgeW91IGtub3cgYmV0dGVyLAorIyBnbyBhaGVhZCBhbmQgZWRpdCB0aGUgZmlsZSAoYW5kIHBsZWFzZSBzZW5kIGFueSBjaGFuZ2VzIHRvCisjIHR6QGVsc2llLm5jaS5uaWguZ292IGZvciBnZW5lcmFsIHVzZSBpbiB0aGUgZnV0dXJlKS4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgxOTk5LTAzLTIyKToKKyMgQSByZWxpYWJsZSBhbmQgZW50ZXJ0YWluaW5nIHNvdXJjZSBhYm91dCB0aW1lIHpvbmVzIGlzCisjIERlcmVrIEhvd3NlLCBHcmVlbndpY2ggdGltZSBhbmQgbG9uZ2l0dWRlLCBQaGlsaXAgV2lsc29uIFB1Ymxpc2hlcnMgKDE5OTcpLgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVW5pdGVkIFN0YXRlcworCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTktMDMtMzEpOgorIyBIb3dzZSB3cml0ZXMgKHBwIDEyMS0xMjUpIHRoYXQgdGltZSB6b25lcyB3ZXJlIGludmVudGVkIGJ5CisjIFByb2Zlc3NvciBDaGFybGVzIEZlcmRpbmFuZCBEb3dkICgxODI1LTE5MDQpLAorIyBQcmluY2lwYWwgb2YgVGVtcGxlIEdyb3ZlIExhZGllcycgU2VtaW5hcnkgKFNhcmF0b2dhIFNwcmluZ3MsIE5ZKS4KKyMgSGlzIHBhbXBobGV0IGBgQSBTeXN0ZW0gb2YgTmF0aW9uYWwgVGltZSBmb3IgUmFpbHJvYWRzJycgKDE4NzApCisjIHdhcyB0aGUgcmVzdWx0IG9mIGhpcyBwcm9wb3NhbHMgYXQgdGhlIENvbnZlbnRpb24gb2YgUmFpbHJvYWQgVHJ1bmsgTGluZXMKKyMgaW4gTmV3IFlvcmsgQ2l0eSAoMTg2OS0xMCkuICBIaXMgMTg3MCBwcm9wb3NhbCB3YXMgYmFzZWQgb24gV2FzaGluZ3RvbiwgREMsCisjIGJ1dCBpbiAxODcyLTA1IGhlIG1vdmVkIHRoZSBwcm9wb3NlZCBvcmlnaW4gdG8gR3JlZW53aWNoLgorIyBIaXMgcHJvcG9zYWwgd2FzIGFkb3B0ZWQgYnkgdGhlIHJhaWxyb2FkcyBvbiAxODgzLTExLTE4IGF0IDEyOjAwLAorIyBhbmQgdGhlIG1vc3Qgb2YgdGhlIGNvdW50cnkgc29vbiBmb2xsb3dlZCBzdWl0LgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDUtMDQtMTYpOgorIyBUaGF0IDE4ODMgdHJhbnNpdGlvbiBvY2N1cnJlZCBhdCAxMjowMCBuZXcgdGltZSwgbm90IGF0IDEyOjAwIG9sZCB0aW1lLgorIyBTZWUgcCA0NiBvZiBEYXZpZCBQcmVyYXUsIFNlaXplIHRoZSBkYXlsaWdodCwgVGh1bmRlcidzIE1vdXRoIFByZXNzICgyMDA1KS4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgQSBnb29kIHNvdXJjZSBmb3IgdGltZSB6b25lIGhpc3RvcmljYWwgZGF0YSBpbiB0aGUgVVMgaXMKKyMgVGhvbWFzIEcuIFNoYW5rcywgVGhlIEFtZXJpY2FuIEF0bGFzICg1dGggZWRpdGlvbiksCisjIFNhbiBEaWVnbzogQUNTIFB1YmxpY2F0aW9ucywgSW5jLiAoMTk5MSkuCisjIE1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgZXJyYXRhIHNoZWV0OyB0aGUgYm9vayBpcyBzb21ld2hhdCB1c2VsZXNzIHdpdGhvdXQgaXQuCisjIEl0IGlzIHRoZSBzb3VyY2UgZm9yIG1vc3Qgb2YgdGhlIHByZS0xOTkxIFVTIGVudHJpZXMgYmVsb3cuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMS0wMy0wNik6CisjIERheWxpZ2h0IFNhdmluZyBUaW1lIHdhcyBmaXJzdCBzdWdnZXN0ZWQgYXMgYSBqb2tlIGJ5IEJlbmphbWluIEZyYW5rbGluCisjIGluIGhpcyB3aGltc2ljYWwgZXNzYXkgYGBBbiBFY29ub21pY2FsIFByb2plY3QgZm9yIERpbWluaXNoaW5nIHRoZSBDb3N0CisjIG9mIExpZ2h0JycgcHVibGlzaGVkIGluIHRoZSBKb3VybmFsIGRlIFBhcmlzICgxNzg0LTA0LTI2KS4KKyMgTm90IGV2ZXJ5b25lIGlzIGhhcHB5IHdpdGggdGhlIHJlc3VsdHM6CisjCisjCUkgZG9uJ3QgcmVhbGx5IGNhcmUgaG93IHRpbWUgaXMgcmVja29uZWQgc28gbG9uZyBhcyB0aGVyZSBpcyBzb21lCisjCWFncmVlbWVudCBhYm91dCBpdCwgYnV0IEkgb2JqZWN0IHRvIGJlaW5nIHRvbGQgdGhhdCBJIGFtIHNhdmluZworIwlkYXlsaWdodCB3aGVuIG15IHJlYXNvbiB0ZWxscyBtZSB0aGF0IEkgYW0gZG9pbmcgbm90aGluZyBvZiB0aGUga2luZC4KKyMJSSBldmVuIG9iamVjdCB0byB0aGUgaW1wbGljYXRpb24gdGhhdCBJIGFtIHdhc3Rpbmcgc29tZXRoaW5nCisjCXZhbHVhYmxlIGlmIEkgc3RheSBpbiBiZWQgYWZ0ZXIgdGhlIHN1biBoYXMgcmlzZW4uICBBcyBhbiBhZG1pcmVyCisjCW9mIG1vb25saWdodCBJIHJlc2VudCB0aGUgYm9zc3kgaW5zaXN0ZW5jZSBvZiB0aG9zZSB3aG8gd2FudCB0bworIwlyZWR1Y2UgbXkgdGltZSBmb3IgZW5qb3lpbmcgaXQuICBBdCB0aGUgYmFjayBvZiB0aGUgRGF5bGlnaHQgU2F2aW5nCisjCXNjaGVtZSBJIGRldGVjdCB0aGUgYm9ueSwgYmx1ZS1maW5nZXJlZCBoYW5kIG9mIFB1cml0YW5pc20sIGVhZ2VyCisjCXRvIHB1c2ggcGVvcGxlIGludG8gYmVkIGVhcmxpZXIsIGFuZCBnZXQgdGhlbSB1cCBlYXJsaWVyLCB0byBtYWtlCisjCXRoZW0gaGVhbHRoeSwgd2VhbHRoeSBhbmQgd2lzZSBpbiBzcGl0ZSBvZiB0aGVtc2VsdmVzLgorIworIwktLSBSb2JlcnRzb24gRGF2aWVzLCBUaGUgZGlhcnkgb2YgU2FtdWVsIE1hcmNoYmFua3MsCisjCSAgIENsYXJrZSwgSXJ3aW4gKDE5NDcpLCBYSVgsIFN1bmRheQorIworIyBGb3IgbW9yZSBhYm91dCB0aGUgZmlyc3QgdGVuIHllYXJzIG9mIERTVCBpbiB0aGUgVW5pdGVkIFN0YXRlcywgc2VlCisjIFJvYmVydCBHYXJsYW5kJ3MgPGEgaHJlZj0iaHR0cDovL3d3dy5jbHBnaC5vcmcvZXhoaWJpdC9kc3QuaHRtbCI+CisjIFRlbiB5ZWFycyBvZiBkYXlsaWdodCBzYXZpbmcgZnJvbSB0aGUgUGl0dHNidXJnaCBzdGFuZHBvaW50CisjIChDYXJuZWdpZSBMaWJyYXJ5IG9mIFBpdHRzYnVyZ2gsIDE5MjcpPC9hPi4KKyMKKyMgU2hhbmtzIHNheXMgdGhhdCBEU1Qgd2FzIGNhbGxlZCAiV2FyIFRpbWUiIGluIHRoZSBVUyBpbiAxOTE4IGFuZCAxOTE5LgorIyBIb3dldmVyLCBEU1Qgd2FzIGltcG9zZWQgYnkgdGhlIFN0YW5kYXJkIFRpbWUgQWN0IG9mIDE5MTgsIHdoaWNoCisjIHdhcyB0aGUgZmlyc3QgbmF0aW9ud2lkZSBsZWdhbCB0aW1lIHN0YW5kYXJkLCBhbmQgYXBwYXJlbnRseQorIyB0aW1lIHdhcyBqdXN0IGNhbGxlZCAiU3RhbmRhcmQgVGltZSIgb3IgIkRheWxpZ2h0IFNhdmluZyBUaW1lIi4KKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbjoKKyMgVVMgRGF5bGlnaHQgU2F2aW5nIFRpbWUgZW5kZWQgb24gdGhlIGxhc3QgU3VuZGF5IG9mICpPY3RvYmVyKiBpbiAxOTc0LgorIyBTZWUsIGZvciBleGFtcGxlLCB0aGUgZnJvbnQgcGFnZSBvZiB0aGUgU2F0dXJkYXksIDE5NzQtMTAtMjYKKyMgYW5kIFN1bmRheSwgMTk3NC0xMC0yNyBlZGl0aW9ucyBvZiB0aGUgV2FzaGluZ3RvbiBQb3N0LgorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uOgorIyBCZWZvcmUgdGhlIFVuaWZvcm0gVGltZSBBY3Qgb2YgMTk2NiB0b29rIGVmZmVjdCBpbiAxOTY3LCBvYnNlcnZhbmNlIG9mCisjIERheWxpZ2h0IFNhdmluZyBUaW1lIGluIHRoZSBVUyB3YXMgYnkgbG9jYWwgb3B0aW9uLCBleGNlcHQgZHVyaW5nIHdhcnRpbWUuCisKKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDIwMDAtMDktMjUpOgorIyBMYXN0IG5pZ2h0IEkgaGVhcmQgcGFydCBvZiBhIHJlYnJvYWRjYXN0IG9mIGEgMTk0NSBBcmNoIE9ib2xlciByYWRpbyBkcmFtYS4KKyMgSW4gdGhlIGludHJvZHVjdGlvbiwgT2JvbGVyIHNwb2tlIG9mICJFYXN0ZXJuIFBlYWNlIFRpbWUuIgorIyBBbiBBbHRhVmlzdGEgc2VhcmNoIHR1cm5lZCB1cAorIyA8YSBocmVmPSJodHRwOi8vcm93YXl0b24ub3JnL3Jocy9oc3RhdWc0NS5odG1sIj46CisjICJXaGVuIHRoZSB0aW1lIGlzIGFubm91bmNlZCBvdmVyIHRoZSByYWRpbyBub3csIGl0IGlzICdFYXN0ZXJuIFBlYWNlCisjIFRpbWUnIGluc3RlYWQgb2YgdGhlIG9sZCBmYW1pbGlhciAnRWFzdGVybiBXYXIgVGltZS4nICBQZWFjZSBpcyB3b25kZXJmdWwuIgorIyA8L2E+IChBdWd1c3QgMTk0NSkgYnkgd2F5IG9mIGNvbmZpcm1hdGlvbi4KKworIyBGcm9tIEpvc2VwaCBHYWxsYW50IGNpdGluZworIyBHZW9yZ2UgSC4gRG91Z2xhcywgX1RoZSBFYXJseSBEYXlzIG9mIFJhZGlvIEJyb2FkY2FzdGluZ18gKDE5ODcpOgorIyBBdCA3IFAuTS4gKEVhc3Rlcm4gV2FyIFRpbWUpIFtvbiAxOTQ1LTA4LTE0XSwgdGhlIG5ldHdvcmtzIHdlcmUgc2V0CisjIHRvIHN3aXRjaCB0byBMb25kb24gZm9yIEF0dGxlZSdzIGFkZHJlc3MsIGJ1dCB0aGUgQW1lcmljYW4gcGVvcGxlCisjIG5ldmVyIGdvdCB0byBoZWFyIGhpcyBzcGVlY2ggbGl2ZS4gQWNjb3JkaW5nIHRvIG9uZSBwcmVzcyBhY2NvdW50LAorIyBDQlMnIEJvYiBUcm91dCB3YXMgZmlyc3QgdG8gYW5ub3VuY2UgdGhlIHdvcmQgb2YgSmFwYW4ncyBzdXJyZW5kZXIsCisjIGJ1dCBhIGZldyBzZWNvbmRzIGxhdGVyLCBOQkMsIEFCQyBhbmQgTXV0dWFsIGFsc28gZmxhc2hlZCB0aGUgd29yZAorIyBvZiBzdXJyZW5kZXIsIGFsbCBvZiB3aG9tIGludGVycnVwdGluZyB0aGUgYmVsbHMgb2YgQmlnIEJlbiBpbgorIyBMb25kb24gd2hpY2ggd2VyZSB0byBwcmVjZWRlIE1yLiBBdHRsZWUncyBzcGVlY2guCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMy0wMi0wOSk6IEl0IHdhcyBSb2JlcnQgU3QgSm9obiwgbm90IEJvYiBUcm91dC4gIEZyb20KKyMgTXlybmEgT2xpdmVyJ3Mgb2JpdHVhcnkgb2YgU3QgSm9obiBvbiBwYWdlIEIxNiBvZiB0b2RheSdzIExvcyBBbmdlbGVzIFRpbWVzOgorIworIyAuLi4gYSB3YXItd2VhcnkgVS5TLiBjbHVuZyB0byByYWRpb3MsIGF3YWl0aW5nIHdvcmQgb2YgSmFwYW4ncyBzdXJyZW5kZXIuCisjIEFueSBhbm5vdW5jZW1lbnQgZnJvbSBBc2lhIHdvdWxkIHJlYWNoIFN0LiBKb2huJ3MgTmV3IFlvcmsgbmV3c3Jvb20gb24gYQorIyB3aXJlIHNlcnZpY2UgdGVsZXR5cGUgbWFjaGluZSwgd2hpY2ggaGFkIHByZXNjcmliZWQgc2lnbmFscyBmb3IgbWFqb3IgbmV3cy4KKyMgQXNzb2NpYXRlZCBQcmVzcywgZm9yIGV4YW1wbGUsIHdvdWxkIHJpbmcgZml2ZSBiZWxscyBiZWZvcmUgc3Bld2luZyBvdXQKKyMgdHlwZWQgY29weSBvZiBhbiBpbXBvcnRhbnQgc3RvcnksIGFuZCAxMCBiZWxscyBmb3IgbmV3cyAib2YgdHJhbnNjZW5kZW50YWwKKyMgaW1wb3J0YW5jZS4iCisjCisjIE9uIEF1Zy4gMTQsIHN0YWxsaW5nIHdoaWxlIHRhbGtpbmcgc3RlYWRpbHkgaW50byB0aGUgTkJDIG5ldHdvcmtzJyBvcGVuCisjIG1pY3JvcGhvbmUsIFN0LiBKb2huIGhlYXJkIGZpdmUgYmVsbHMgYW5kIHdhaXRlZCBvbmx5IHRvIGhlYXIgYSBzaXh0aCBiZWxsLAorIyBiZWZvcmUgYW5ub3VuY2luZyBjb25maWRlbnRseTogIkxhZGllcyBhbmQgZ2VudGxlbWVuLCBXb3JsZCBXYXIgSUkgaXMgb3Zlci4KKyMgVGhlIEphcGFuZXNlIGhhdmUgYWdyZWVkIHRvIG91ciBzdXJyZW5kZXIgdGVybXMuIgorIworIyBIZSBoYWQgc2NvcmVkIGEgMjAtc2Vjb25kIHNjb29wIG9uIG90aGVyIGJyb2FkY2FzdGVycy4KKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMjAwNS0wOC0yMik6CisjIFBhdWwgaGFzIGJlZW4gY2FyZWZ1bCB0byB1c2UgdGhlICJVUyIgcnVsZXMgb25seSBpbiB0aG9zZSBsb2NhdGlvbnMKKyMgdGhhdCBhcmUgcGFydCBvZiB0aGUgVW5pdGVkIFN0YXRlczsgdGhpcyByZWZsZWN0cyB0aGUgcmVhbCBzY29wZSBvZgorIyBVLlMuIGdvdmVybm1lbnQgYWN0aW9uLiAgU28gZXZlbiB0aG91Z2ggdGhlICJVUyIgcnVsZXMgaGF2ZSBjaGFuZ2VkCisjIGluIHRoZSBsYXRlc3QgcmVsZWFzZSwgb3RoZXIgY291bnRyaWVzIHdvbid0IGJlIGFmZmVjdGVkLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlVUwkxOTE4CTE5MTkJLQlNYXIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlVUwkxOTE4CTE5MTkJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlVUwkxOTQyCW9ubHkJLQlGZWIJOQkyOjAwCTE6MDAJVyAjIFdhcgorUnVsZQlVUwkxOTQ1CW9ubHkJLQlBdWcJMTQJMjM6MDB1CTE6MDAJUCAjIFBlYWNlCitSdWxlCVVTCTE5NDUJb25seQktCVNlcAkzMAkyOjAwCTAJUworUnVsZQlVUwkxOTY3CTIwMDYJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlVUwkxOTY3CTE5NzMJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlVUwkxOTc0CW9ubHkJLQlKYW4JNgkyOjAwCTE6MDAJRAorUnVsZQlVUwkxOTc1CW9ubHkJLQlGZWIJMjMJMjowMAkxOjAwCUQKK1J1bGUJVVMJMTk3NgkxOTg2CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJVVMJMTk4NwkyMDA2CS0JQXByCVN1bj49MQkyOjAwCTE6MDAJRAorUnVsZQlVUwkyMDA3CW1heAktCU1hcglTdW4+PTgJMjowMAkxOjAwCUQKK1J1bGUJVVMJMjAwNwltYXgJLQlOb3YJU3VuPj0xCTI6MDAJMAlTCisKKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24sIDIwMDUtMTItMTkKKyMgV2UgZ2VuZXJhdGUgdGhlIGZpbGVzIHNwZWNpZmllZCBiZWxvdyB0byBndWFyZCBhZ2FpbnN0IG9sZCBmaWxlcyB3aXRoCisjIG9ic29sZXRlIGluZm9ybWF0aW9uIGJlaW5nIGxlZnQgaW4gdGhlIHRpbWUgem9uZSBiaW5hcnkgZGlyZWN0b3J5LgorIyBXZSBsaW1pdCB0aGUgbGlzdCB0byBuYW1lcyB0aGF0IGhhdmUgYXBwZWFyZWQgaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YKKyMgdGhpcyB0aW1lIHpvbmUgcGFja2FnZS4KKyMgV2UgZG8gdGhlc2UgYXMgc2VwYXJhdGUgWm9uZXMgcmF0aGVyIHRoYW4gYXMgTGlua3MgdG8gYXZvaWQgcHJvYmxlbXMgaWYKKyMgYSBwYXJ0aWN1bGFyIHBsYWNlIGNoYW5nZXMgd2hldGhlciBpdCBvYnNlcnZlcyBEU1QuCisjIFdlIHB1dCB0aGVzZSBzcGVjaWZpY2F0aW9ucyBoZXJlIGluIHRoZSBub3J0aGFtZXJpY2EgZmlsZSBib3RoIHRvCisjIGluY3JlYXNlIHRoZSBjaGFuY2VzIHRoYXQgdGhleSdsbCBhY3R1YWxseSBnZXQgY29tcGlsZWQgYW5kIHRvCisjIGF2b2lkIHRoZSBuZWVkIHRvIGR1cGxpY2F0ZSB0aGUgVVMgcnVsZXMgaW4gYW5vdGhlciBmaWxlLgorCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUVTVAkJIC01OjAwCS0JRVNUCitab25lCU1TVAkJIC03OjAwCS0JTVNUCitab25lCUhTVAkJLTEwOjAwCS0JSFNUCitab25lCUVTVDVFRFQJCSAtNTowMAlVUwlFJXNUCitab25lCUNTVDZDRFQJCSAtNjowMAlVUwlDJXNUCitab25lCU1TVDdNRFQJCSAtNzowMAlVUwlNJXNUCitab25lCVBTVDhQRFQJCSAtODowMAlVUwlQJXNUCisKKyMgRnJvbSBCb2IgRGV2aW5lICgxOTg4LTAxLTI4KToKKyMgLi4uQWxhc2thIChhbmQgSGF3YWlpKSBoYWQgdGhlIHRpbWV6b25lIG5hbWVzIGNoYW5nZWQgaW4gMTk2Ny4KKyMgICAgb2xkCQkJIG5ldworIyAgICBQYWNpZmljIFN0YW5kYXJkIFRpbWUoUFNUKSAgLXNhbWUtCisjICAgIFl1a29uIFN0YW5kYXJkIFRpbWUoWVNUKSAgICAtc2FtZS0KKyMgICAgQ2VudHJhbCBBbGFza2EgUy5ULiAoQ0FUKSAgIEFsYXNrYS1IYXdhaWkgU3RbYW5dZGFyZCBUaW1lIChBSFNUKQorIyAgICBOb21lIFN0YW5kYXJkIFRpbWUgKE5UKSAgICAgQmVyaW5nIFN0YW5kYXJkIFRpbWUgKEJTVCkKKyMKKyMgLi4uQWxhc2thJ3MgdGltZXpvbmUgbGluZXMgd2VyZSByZWRyYXduIGluIDE5ODMgdG8gZ2l2ZSBvbmx5IDIgdHouCisjICAgIFRoZSBZU1Qgem9uZSBub3cgY292ZXJzIG5lYXJseSBhbGwgb2YgdGhlIHN0YXRlLCBBSFNUIGp1c3QgcGFydAorIyAgICBvZiB0aGUgQWxldXRpYW4gaXNsYW5kcy4gICBObyBEU1QuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMTk5NS0xMi0xOSk6CisjIFRoZSB0YWJsZXMgYmVsb3cgdXNlIGBOU1QnLCBub3QgYE5UJywgZm9yIE5vbWUgU3RhbmRhcmQgVGltZS4KKyMgSSBpbnZlbnRlZCBgQ0FXVCcgZm9yIENlbnRyYWwgQWxhc2thIFdhciBUaW1lLgorCisjIEZyb20gVS4gUy4gTmF2YWwgT2JzZXJ2YXRvcnkgKDE5ODktMDEtMTkpOgorIyBVU0EgIEVBU1RFUk4gICAgICAgNSBIICBCRUhJTkQgVVRDICAgIE5FVyBZT1JLLCBXQVNISU5HVE9OCisjIFVTQSAgRUFTVEVSTiAgICAgICA0IEggIEJFSElORCBVVEMgICAgQVBSIDMgLSBPQ1QgMzAKKyMgVVNBICBDRU5UUkFMICAgICAgIDYgSCAgQkVISU5EIFVUQyAgICBDSElDQUdPLCBIT1VTVE9OCisjIFVTQSAgQ0VOVFJBTCAgICAgICA1IEggIEJFSElORCBVVEMgICAgQVBSIDMgLSBPQ1QgMzAKKyMgVVNBICBNT1VOVEFJTiAgICAgIDcgSCAgQkVISU5EIFVUQyAgICBERU5WRVIKKyMgVVNBICBNT1VOVEFJTiAgICAgIDYgSCAgQkVISU5EIFVUQyAgICBBUFIgMyAtIE9DVCAzMAorIyBVU0EgIFBBQ0lGSUMgICAgICAgOCBIICBCRUhJTkQgVVRDICAgIEwuQS4sIFNBTiBGUkFOQ0lTQ08KKyMgVVNBICBQQUNJRklDICAgICAgIDcgSCAgQkVISU5EIFVUQyAgICBBUFIgMyAtIE9DVCAzMAorIyBVU0EgIEFMQVNLQSBTVEQgICAgOSBIICBCRUhJTkQgVVRDICAgIE1PU1QgT0YgQUxBU0tBICAgICAoQUtTVCkKKyMgVVNBICBBTEFTS0EgU1REICAgIDggSCAgQkVISU5EIFVUQyAgICBBUFIgMyAtIE9DVCAzMCAoQUtEVCkKKyMgVVNBICBBTEVVVElBTiAgICAgMTAgSCAgQkVISU5EIFVUQyAgICBJU0xBTkRTIFdFU1QgT0YgMTcwVworIyBVU0EgIC0gIiAtICAgICAgICAgOSBIICBCRUhJTkQgVVRDICAgIEFQUiAzIC0gT0NUIDMwCisjIFVTQSAgSEFXQUlJICAgICAgIDEwIEggIEJFSElORCBVVEMKKyMgVVNBICBCRVJJTkcgICAgICAgMTEgSCAgQkVISU5EIFVUQyAgICBTQU1PQSwgTUlEV0FZCisKKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDE5ODktMDEtMjEpOgorIyBUaGUgYWJvdmUgZGF0ZXMgYXJlIGZvciAxOTg4LgorIyBOb3RlIHRoZSAiQUtTVCIgYW5kICJBS0RUIiBhYmJyZXZpYXRpb25zLCB0aGUgY2xhaW0gdGhhdCB0aGVyZSdzCisjIG5vIERTVCBpbiBTYW1vYSwgYW5kIHRoZSBjbGFpbSB0aGF0IHRoZXJlIGlzIERTVCBpbiBBbGFza2EgYW5kIHRoZQorIyBBbGV1dGlhbnMuCisKKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDE5ODgtMDItMTMpOgorIyBMZWdhbCBzdGFuZGFyZCB0aW1lIHpvbmUgbmFtZXMsIGZyb20gVW5pdGVkIFN0YXRlcyBDb2RlICgxOTgyIEVkaXRpb24gYW5kCisjIFN1cHBsZW1lbnQgSUlJKSwgVGl0bGUgMTUsIENoYXB0ZXIgNiwgU2VjdGlvbiAyNjAgYW5kIGZvcndhcmQuICBGaXJzdCwgbmFtZXMKKyMgdXAgdG8gMTk2Ny0wNC0wMSAod2hlbiBtb3N0IHByb3Zpc2lvbnMgb2YgdGhlIFVuaWZvcm0gVGltZSBBY3Qgb2YgMTk2NgorIyB0b29rIGVmZmVjdCksIGFzIGV4cGxhaW5lZCBpbiBzZWN0aW9ucyAyNjMgYW5kIDI2MToKKyMJKG5vbmUpCisjCVVuaXRlZCBTdGF0ZXMgc3RhbmRhcmQgZWFzdGVybiB0aW1lCisjCVVuaXRlZCBTdGF0ZXMgc3RhbmRhcmQgbW91bnRhaW4gdGltZQorIwlVbml0ZWQgU3RhdGVzIHN0YW5kYXJkIGNlbnRyYWwgdGltZQorIwlVbml0ZWQgU3RhdGVzIHN0YW5kYXJkIFBhY2lmaWMgdGltZQorIwkobm9uZSkKKyMJVW5pdGVkIFN0YXRlcyBzdGFuZGFyZCBBbGFza2EgdGltZQorIwkobm9uZSkKKyMgTmV4dCwgbmFtZXMgZnJvbSAxOTY3LTA0LTAxIHVudGlsIDE5ODMtMTEtMzAgKHRoZSBkYXRlIGZvcgorIyBwdWJsaWMgbGF3IDk4LTE4MSk6CisjCUF0bGFudGljIHN0YW5kYXJkIHRpbWUKKyMJZWFzdGVybiBzdGFuZGFyZCB0aW1lCisjCWNlbnRyYWwgc3RhbmRhcmQgdGltZQorIwltb3VudGFpbiBzdGFuZGFyZCB0aW1lCisjCVBhY2lmaWMgc3RhbmRhcmQgdGltZQorIwlZdWtvbiBzdGFuZGFyZCB0aW1lCisjCUFsYXNrYS1IYXdhaWkgc3RhbmRhcmQgdGltZQorIwlCZXJpbmcgc3RhbmRhcmQgdGltZQorIyBBbmQgYWZ0ZXIgMTk4My0xMS0zMDoKKyMJQXRsYW50aWMgc3RhbmRhcmQgdGltZQorIwllYXN0ZXJuIHN0YW5kYXJkIHRpbWUKKyMJY2VudHJhbCBzdGFuZGFyZCB0aW1lCisjCW1vdW50YWluIHN0YW5kYXJkIHRpbWUKKyMJUGFjaWZpYyBzdGFuZGFyZCB0aW1lCisjCUFsYXNrYSBzdGFuZGFyZCB0aW1lCisjCUhhd2FpaS1BbGV1dGlhbiBzdGFuZGFyZCB0aW1lCisjCVNhbW9hIHN0YW5kYXJkIHRpbWUKKyMgVGhlIGxhdyBkb2Vzbid0IGdpdmUgYWJicmV2aWF0aW9ucy4KKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMC0wMS0wOCksIGZvbGxvd2luZyBhIGhlYWRzLXVwIGZyb20gUml2ZXMgTWNEb3c6CisjIFB1YmxpYyBsYXcgMTA2LTU2NCAoMjAwMC0xMi0yMykgaW50cm9kdWNlZCB0aGUgYWJicmV2aWF0aW9uCisjICJDaGFtb3JybyBTdGFuZGFyZCBUaW1lIiBmb3IgdGltZSBpbiBHdWFtIGFuZCB0aGUgTm9ydGhlcm4gTWFyaWFuYXMuCisjIFNlZSB0aGUgZmlsZSAiYXVzdHJhbGFzaWEiLgorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uLCAyMDA1LTA4LTA5CisjIFRoZSBmb2xsb3dpbmcgd2FzIHNpZ25lZCBpbnRvIGxhdyBvbiAyMDA1LTA4LTA4LgorIworIyBILlIuIDYsIEVuZXJneSBQb2xpY3kgQWN0IG9mIDIwMDUsIFNFQy4gMTEwLiBEQVlMSUdIVCBTQVZJTkdTLgorIyAgIChhKSBBbWVuZG1lbnQtIFNlY3Rpb24gMyhhKSBvZiB0aGUgVW5pZm9ybSBUaW1lIEFjdCBvZiAxOTY2ICgxNQorIyAgIFUuUy5DLiAyNjBhKGEpKSBpcyBhbWVuZGVkLS0KKyMgICAgICgxKSBieSBzdHJpa2luZyBgZmlyc3QgU3VuZGF5IG9mIEFwcmlsJyBhbmQgaW5zZXJ0aW5nIGBzZWNvbmQKKyMgICAgIFN1bmRheSBvZiBNYXJjaCc7IGFuZAorIyAgICAgKDIpIGJ5IHN0cmlraW5nIGBsYXN0IFN1bmRheSBvZiBPY3RvYmVyJyBhbmQgaW5zZXJ0aW5nIGBmaXJzdAorIyAgICAgU3VuZGF5IG9mIE5vdmVtYmVyJy4KKyMgICAoYikgRWZmZWN0aXZlIERhdGUtIFN1YnNlY3Rpb24gKGEpIHNoYWxsIHRha2UgZWZmZWN0IDEgeWVhciBhZnRlciB0aGUKKyMgICBkYXRlIG9mIGVuYWN0bWVudCBvZiB0aGlzIEFjdCBvciBNYXJjaCAxLCAyMDA3LCB3aGljaGV2ZXIgaXMgbGF0ZXIuCisjICAgKGMpIFJlcG9ydCB0byBDb25ncmVzcy0gTm90IGxhdGVyIHRoYW4gOSBtb250aHMgYWZ0ZXIgdGhlIGVmZmVjdGl2ZQorIyAgIGRhdGUgc3RhdGVkIGluIHN1YnNlY3Rpb24gKGIpLCB0aGUgU2VjcmV0YXJ5IHNoYWxsIHJlcG9ydCB0byBDb25ncmVzcworIyAgIG9uIHRoZSBpbXBhY3Qgb2YgdGhpcyBzZWN0aW9uIG9uIGVuZXJneSBjb25zdW1wdGlvbiBpbiB0aGUgVW5pdGVkCisjICAgU3RhdGVzLgorIyAgIChkKSBSaWdodCB0byBSZXZlcnQtIENvbmdyZXNzIHJldGFpbnMgdGhlIHJpZ2h0IHRvIHJldmVydCB0aGUKKyMgICBEYXlsaWdodCBTYXZpbmcgVGltZSBiYWNrIHRvIHRoZSAyMDA1IHRpbWUgc2NoZWR1bGVzIG9uY2UgdGhlCisjICAgRGVwYXJ0bWVudCBzdHVkeSBpcyBjb21wbGV0ZS4KKworIyBVUyBlYXN0ZXJuIHRpbWUsIHJlcHJlc2VudGVkIGJ5IE5ldyBZb3JrCisKKyMgQ29ubmVjdGljdXQsIERlbGF3YXJlLCBEaXN0cmljdCBvZiBDb2x1bWJpYSwgbW9zdCBvZiBGbG9yaWRhLAorIyBHZW9yZ2lhLCBzb3V0aGVhc3QgSW5kaWFuYSAoRGVhcmJvcm4gYW5kIE9oaW8gY291bnRpZXMpLCBlYXN0ZXJuIEtlbnR1Y2t5CisjIChleGNlcHQgQW1lcmljYS9LZW50dWNreS9Mb3Vpc3ZpbGxlIGJlbG93KSwgTWFpbmUsIE1hcnlsYW5kLCBNYXNzYWNodXNldHRzLAorIyBOZXcgSGFtcHNoaXJlLCBOZXcgSmVyc2V5LCBOZXcgWW9yaywgTm9ydGggQ2Fyb2xpbmEsIE9oaW8sCisjIFBlbm5zeWx2YW5pYSwgUmhvZGUgSXNsYW5kLCBTb3V0aCBDYXJvbGluYSwgZWFzdGVybiBUZW5uZXNzZWUsCisjIFZlcm1vbnQsIFZpcmdpbmlhLCBXZXN0IFZpcmdpbmlhCisKKyMgRnJvbSBEYXZlIENhbnRvciAoMjAwNC0xMS0wMik6CisjIEVhcmx5IHRoaXMgc3VtbWVyIEkgaGFkIHRoZSBvY2Nhc2lvbiB0byB2aXNpdCB0aGUgTW91bnQgV2FzaGluZ3RvbgorIyBPYnNlcnZhdG9yeSB3ZWF0aGVyIHN0YXRpb24gYXRvcCAob2YgY291cnNlISkgTW91bnQgV2FzaGluZ3RvbiBbLCBOSF0uLi4uCisjIE9uZSBvZiB0aGUgc3RhZmYgbWVtYmVycyBzYWlkIHRoYXQgdGhlIHN0YXRpb24gd2FzIG9uIEVhc3Rlcm4gU3RhbmRhcmQgVGltZQorIyBhbmQgZGlkbid0IGNoYW5nZSB0aGVpciBjbG9ja3MgZm9yIERheWxpZ2h0IFNhdmluZyAuLi4gc28gdGhhdCB0aGVpcgorIyByZXBvcnRzIHdpbGwgYWx3YXlzIGhhdmUgdGltZXMgd2hpY2ggYXJlIDUgaG91cnMgYmVoaW5kIFVUQy4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA1LTA4LTI2KToKKyMgQWNjb3JkaW5nIHRvIHRvZGF5J3MgSHVudHN2aWxsZSBUaW1lcworIyA8aHR0cDovL3d3dy5hbC5jb20vbmV3cy9odW50c3ZpbGxldGltZXMvaW5kZXguc3NmPy9iYXNlL25ld3MvMTEyNTA0Nzc4MzIyODMyMC54bWwmY29sbD0xPgorIyBhIGZldyB0b3ducyBvbiBBbGFiYW1hJ3MgImVhc3Rlcm4gYm9yZGVyIHdpdGggR2VvcmdpYSwgc3VjaCBhcyBQaGVuaXggQ2l0eQorIyBpbiBSdXNzZWxsIENvdW50eSwgTGFuZXR0IGluIENoYW1iZXJzIENvdW50eSBhbmQgc29tZSB0b3ducyBpbiBMZWUgQ291bnR5LAorIyBzZXQgdGhlaXIgd2F0Y2hlcyBhbmQgY2xvY2tzIG9uIEVhc3Rlcm4gdGltZS4iICBJdCBxdW90ZXMgSC5ILiAiQnViYmEiCisjIFJvYmVydHMsIGNpdHkgYWRtaW5pc3RyYXRvciBpbiBQaGVuaXggQ2l0eS4gYXMgc2F5aW5nICJXZSBhcmUgaW4gdGhlIENlbnRyYWwKKyMgdGltZSB6b25lLCBidXQgd2UgZG8gZ28gYnkgdGhlIEVhc3Rlcm4gdGltZSB6b25lIGJlY2F1c2Ugc28gbWFueSBwZW9wbGUgd29yaworIyBpbiBDb2x1bWJ1cy4iCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUgorUnVsZQlOWUMJMTkyMAlvbmx5CS0JTWFyCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJTllDCTE5MjAJb25seQktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCU5ZQwkxOTIxCTE5NjYJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlOWUMJMTkyMQkxOTU0CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJTllDCTE5NTUJMTk2NgktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvTmV3X1lvcmsJLTQ6NTY6MDIgLQlMTVQJMTg4MyBOb3YgMTggMTI6MDM6NTgKKwkJCS01OjAwCVVTCUUlc1QJMTkyMAorCQkJLTU6MDAJTllDCUUlc1QJMTk0MgorCQkJLTU6MDAJVVMJRSVzVAkxOTQ2CisJCQktNTowMAlOWUMJRSVzVAkxOTY3CisJCQktNTowMAlVUwlFJXNUCisKKyMgVVMgY2VudHJhbCB0aW1lLCByZXByZXNlbnRlZCBieSBDaGljYWdvCisKKyMgQWxhYmFtYSwgQXJrYW5zYXMsIEZsb3JpZGEgcGFuaGFuZGxlIChCYXksIENhbGhvdW4sIEVzY2FtYmlhLAorIyBHdWxmLCBIb2xtZXMsIEphY2tzb24sIE9rYWxvb3NhLCBTYW50YSBSb3NhLCBXYWx0b24sIGFuZAorIyBXYXNoaW5ndG9uIGNvdW50aWVzKSwgSWxsaW5vaXMsIHdlc3Rlcm4gSW5kaWFuYQorIyAoR2lic29uLCBKYXNwZXIsIExha2UsIExhUG9ydGUsIE5ld3RvbiwgUG9ydGVyLCBQb3NleSwgU3BlbmNlciwKKyMgVmFuZGVyYnVyZ2gsIGFuZCBXYXJyaWNrIGNvdW50aWVzKSwgSW93YSwgbW9zdCBvZiBLYW5zYXMsIHdlc3Rlcm4KKyMgS2VudHVja3ksIExvdWlzaWFuYSwgTWlubmVzb3RhLCBNaXNzaXNzaXBwaSwgTWlzc291cmksIGVhc3Rlcm4KKyMgTmVicmFza2EsIGVhc3Rlcm4gTm9ydGggRGFrb3RhLCBPa2xhaG9tYSwgZWFzdGVybiBTb3V0aCBEYWtvdGEsCisjIHdlc3Rlcm4gVGVubmVzc2VlLCBtb3N0IG9mIFRleGFzLCBXaXNjb25zaW4KKworIyBGcm9tIExhcnJ5IE0uIFNtaXRoICgyMDA2LTA0LTI2KSByZSBXaXNjb25zaW46CisjIGh0dHA6Ly93d3cubGVnaXMuc3RhdGUud2kudXMvc3RhdHV0ZXMvU3RhdDAxNzUucGRmIC4uLgorIyBpcyBjdXJyZW50bHkgZW5mb3JjZWQgYXQgdGhlIDAxOjAwIHRpbWUgb2YgY2hhbmdlLiAgQmVjYXVzZSB0aGUgbG9jYWwKKyMgImJhciB0aW1lIiBpbiB0aGUgc3RhdGUgY29ycmVzcG9uZHMgdG8gMDI6MDAsIGEgbnVtYmVyIG9mIGNpdGF0aW9ucworIyBhcmUgaXNzdWVkIGZvciB0aGUgInNhbGUgb2YgY2xhc3MgJ0InIGFsY29ob2wgYWZ0ZXIgcHJvaGliaXRlZAorIyBob3VycyIgd2l0aGluIHRoZSBkZXZpYXRlZCBob3VyIG9mIHRoaXMgY2hhbmdlIGV2ZXJ5IHllYXIuLi4uCisjCisjIEZyb20gRG91Z2xhcyBSLiBCb21iZXJnICgyMDA3LTAzLTEyKToKKyMgV2lzY29uc2luIGhhcyBlbmFjdGVkIChuZWFybHkgZWxldmVudGgtaG91cikgbGVnaXNsYXRpb24gdG8gZ2V0IFdJCisjIFN0YXR1ZSAxNzUgY2xvc2VyIGluIHN5bmNoIHdpdGggdGhlIFVTIENvbmdyZXNzJyBpbnRlbnQuLi4uCisjIGh0dHA6Ly93d3cubGVnaXMuc3RhdGUud2kudXMvMjAwNy9kYXRhL2FjdHMvMDdBY3QzLnBkZgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIKK1J1bGUJQ2hpY2FnbwkxOTIwCW9ubHkJLQlKdW4JMTMJMjowMAkxOjAwCUQKK1J1bGUJQ2hpY2FnbwkxOTIwCTE5MjEJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlDaGljYWdvCTE5MjEJb25seQktCU1hcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCUNoaWNhZ28JMTkyMgkxOTY2CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJQ2hpY2FnbwkxOTIyCTE5NTQJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlDaGljYWdvCTE5NTUJMTk2NgktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvQ2hpY2FnbwktNTo1MDozNiAtCUxNVAkxODgzIE5vdiAxOCAxMjowOToyNAorCQkJLTY6MDAJVVMJQyVzVAkxOTIwCisJCQktNjowMAlDaGljYWdvCUMlc1QJMTkzNiBNYXIgIDEgMjowMAorCQkJLTU6MDAJLQlFU1QJMTkzNiBOb3YgMTUgMjowMAorCQkJLTY6MDAJQ2hpY2FnbwlDJXNUCTE5NDIKKwkJCS02OjAwCVVTCUMlc1QJMTk0NgorCQkJLTY6MDAJQ2hpY2FnbwlDJXNUCTE5NjcKKwkJCS02OjAwCVVTCUMlc1QKKyMgT2xpdmVyIENvdW50eSwgTkQgc3dpdGNoZWQgZnJvbSBtb3VudGFpbiB0byBjZW50cmFsIHRpbWUgb24gMTk5Mi0xMC0yNS4KK1pvbmUgQW1lcmljYS9Ob3J0aF9EYWtvdGEvQ2VudGVyIC02OjQ1OjEyIC0gTE1UCTE4ODMgTm92IDE4IDEyOjE0OjQ4CisJCQktNzowMAlVUwlNJXNUCTE5OTIgT2N0IDI1IDAyOjAwCisJCQktNjowMAlVUwlDJXNUCisjIE1vcnRvbiBDb3VudHksIE5ELCBzd2l0Y2hlZCBmcm9tIG1vdW50YWluIHRvIGNlbnRyYWwgdGltZSBvbgorIyAyMDAzLTEwLTI2LCBleGNlcHQgZm9yIHRoZSBhcmVhIGFyb3VuZCBNYW5kYW4gd2hpY2ggd2FzIGFscmVhZHkgY2VudHJhbCB0aW1lLgorIyBTZWUgPGh0dHA6Ly9kbXNlcy5kb3QuZ292L2RvY2ltYWdlcy9wNjMvMTM1ODE4LnBkZj4uCisjIE9mZmljaWFsbHkgdGhpcyBzd2l0Y2ggYWxzbyBpbmNsdWRlZCBwYXJ0IG9mIFNpb3V4IENvdW50eSwgYW5kCisjIEpvbmVzLCBNZWxsZXR0ZSwgYW5kIFRvZGQgQ291bnRpZXMgaW4gU291dGggRGFrb3RhOworIyBidXQgaW4gcHJhY3RpY2UgdGhlc2Ugb3RoZXIgY291bnRpZXMgd2VyZSBhbHJlYWR5IG9ic2VydmluZyBjZW50cmFsIHRpbWUuCisjIFNlZSA8aHR0cDovL3d3dy5lcGEuZ292L2ZlZHJnc3RyL0VQQS1JTVBBQ1QvMjAwMy9PY3RvYmVyL0RheS0yOC9pMjcwNTYuaHRtPi4KK1pvbmUgQW1lcmljYS9Ob3J0aF9EYWtvdGEvTmV3X1NhbGVtIC02OjQ1OjM5IC0gTE1UIDE4ODMgTm92IDE4IDEyOjE0OjIxCisJCQktNzowMAlVUwlNJXNUCTIwMDMgT2N0IDI2IDAyOjAwCisJCQktNjowMAlVUwlDJXNUCisKKyMgVVMgbW91bnRhaW4gdGltZSwgcmVwcmVzZW50ZWQgYnkgRGVudmVyCisjCisjIENvbG9yYWRvLCBmYXIgd2VzdGVybiBLYW5zYXMsIE1vbnRhbmEsIHdlc3Rlcm4KKyMgTmVicmFza2EsIE5ldmFkYSBib3JkZXIgKEphY2twb3QsIE93eWhlZSwgYW5kIE1vdW50YWluIENpdHkpLAorIyBOZXcgTWV4aWNvLCBzb3V0aHdlc3Rlcm4gTm9ydGggRGFrb3RhLAorIyB3ZXN0ZXJuIFNvdXRoIERha290YSwgZmFyIHdlc3Rlcm4gVGV4YXMgKEVsIFBhc28gQ291bnR5LCBIdWRzcGV0aCBDb3VudHksCisjIGFuZCBQaW5lIFNwcmluZ3MgYW5kIE5pY2tlbCBDcmVlayBpbiBDdWxiZXJzb24gQ291bnR5KSwgVXRhaCwgV3lvbWluZworIworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSCitSdWxlCURlbnZlcgkxOTIwCTE5MjEJLQlNYXIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlEZW52ZXIJMTkyMAlvbmx5CS0JT2N0CWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJRGVudmVyCTE5MjEJb25seQktCU1heQkyMgkyOjAwCTAJUworUnVsZQlEZW52ZXIJMTk2NQkxOTY2CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJRGVudmVyCTE5NjUJMTk2NgktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvRGVudmVyCS02OjU5OjU2IC0JTE1UCTE4ODMgTm92IDE4IDEyOjAwOjA0CisJCQktNzowMAlVUwlNJXNUCTE5MjAKKwkJCS03OjAwCURlbnZlcglNJXNUCTE5NDIKKwkJCS03OjAwCVVTCU0lc1QJMTk0NgorCQkJLTc6MDAJRGVudmVyCU0lc1QJMTk2NworCQkJLTc6MDAJVVMJTSVzVAorCisjIFVTIFBhY2lmaWMgdGltZSwgcmVwcmVzZW50ZWQgYnkgTG9zIEFuZ2VsZXMKKyMKKyMgQ2FsaWZvcm5pYSwgbm9ydGhlcm4gSWRhaG8gKEJlbmV3YWgsIEJvbm5lciwgQm91bmRhcnksIENsZWFyd2F0ZXIsCisjIElkYWhvLCBLb290ZW5haSwgTGF0YWgsIExld2lzLCBOZXogUGVyY2UsIGFuZCBTaG9zaG9uZSBjb3VudGllcywKKyMgYW5kIHRoZSBub3J0aGVybiB0aHJlZS1xdWFydGVycyBvZiBJZGFobyBjb3VudHkpLAorIyBtb3N0IG9mIE5ldmFkYSwgbW9zdCBvZiBPcmVnb24sIGFuZCBXYXNoaW5ndG9uCisjCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIKK1J1bGUJQ0EJMTk0OAlvbmx5CS0JTWFyCTE0CTI6MDAJMTowMAlECitSdWxlCUNBCTE5NDkJb25seQktCUphbgkgMQkyOjAwCTAJUworUnVsZQlDQQkxOTUwCTE5NjYJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlDQQkxOTUwCTE5NjEJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlDQQkxOTYyCTE5NjYJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL0xvc19BbmdlbGVzIC03OjUyOjU4IC0JTE1UCTE4ODMgTm92IDE4IDEyOjA3OjAyCisJCQktODowMAlVUwlQJXNUCTE5NDYKKwkJCS04OjAwCUNBCVAlc1QJMTk2NworCQkJLTg6MDAJVVMJUCVzVAorCisjIEFsYXNrYQorIyBBSyVzVCBpcyB0aGUgbW9kZXJuIGFiYnJldmlhdGlvbiBmb3IgLTk6MDAgcGVyIFVTTk8uCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDEtMDUtMzApOgorIyBIb3dzZSB3cml0ZXMgdGhhdCBBbGFza2Egc3dpdGNoZWQgZnJvbSB0aGUgSnVsaWFuIHRvIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIsCisjIGFuZCBmcm9tIGVhc3Qtb2YtR01UIHRvIHdlc3Qtb2YtR01UIGRheXMsIHdoZW4gdGhlIFVTIGJvdWdodCBpdCBmcm9tIFJ1c3NpYS4KKyMgVGhpcyB3YXMgb24gMTg2Ny0xMC0xOCwgYSBGcmlkYXk7IHRoZSBwcmV2aW91cyBkYXkgd2FzIDE4NjctMTAtMDYgSnVsaWFuLAorIyBhbHNvIGEgRnJpZGF5LiAgSW5jbHVkZSBvbmx5IHRoZSB0aW1lIHpvbmUgcGFydCBvZiB0aGlzIHRyYW5zaXRpb24sCisjIGlnbm9yaW5nIHRoZSBzd2l0Y2ggZnJvbSBKdWxpYW4gdG8gR3JlZ29yaWFuLCBzaW5jZSB3ZSBjYW4ndCByZXByZXNlbnQKKyMgdGhlIEp1bGlhbiBjYWxlbmRhci4KKyMKKyMgQXMgZmFyIGFzIHdlIGtub3csIG5vbmUgb2YgdGhlIGV4YWN0IGxvY2F0aW9ucyBtZW50aW9uZWQgYmVsb3cgd2VyZQorIyBwZXJtYW5lbnRseSBpbmhhYml0ZWQgaW4gMTg2NyBieSBhbnlvbmUgdXNpbmcgZWl0aGVyIGNhbGVuZGFyLgorIyAoWWFrdXRhdCB3YXMgY29sb25pemVkIGJ5IHRoZSBSdXNzaWFucyBpbiAxNzk5LCBidXQgdGhlIHNldHRsZW1lbnQKKyMgd2FzIGRlc3Ryb3llZCBpbiAxODA1IGJ5IGEgWWFrdXRhdC1rb24gd2FyIHBhcnR5LikgIEhvd2V2ZXIsIHRoZXJlCisjIHdlcmUgbmVhcmJ5IGluaGFiaXRhbnRzIGluIHNvbWUgY2FzZXMgYW5kIGZvciBvdXIgcHVycG9zZXMgcGVyaGFwcworIyBpdCdzIGJlc3QgdG8gc2ltcGx5IHVzZSB0aGUgb2ZmaWNpYWwgdHJhbnNpdGlvbi4KKyMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9KdW5lYXUJIDE1OjAyOjE5IC0JTE1UCTE4NjcgT2N0IDE4CisJCQkgLTg6NTc6NDEgLQlMTVQJMTkwMCBBdWcgMjAgMTI6MDAKKwkJCSAtODowMAktCVBTVAkxOTQyCisJCQkgLTg6MDAJVVMJUCVzVAkxOTQ2CisJCQkgLTg6MDAJLQlQU1QJMTk2OQorCQkJIC04OjAwCVVTCVAlc1QJMTk4MyBPY3QgMzAgMjowMAorCQkJIC05OjAwCVVTCVklc1QJMTk4MyBOb3YgMzAKKwkJCSAtOTowMAlVUwlBSyVzVAorWm9uZSBBbWVyaWNhL1lha3V0YXQJIDE0OjQxOjA1IC0JTE1UCTE4NjcgT2N0IDE4CisJCQkgLTk6MTg6NTUgLQlMTVQJMTkwMCBBdWcgMjAgMTI6MDAKKwkJCSAtOTowMAktCVlTVAkxOTQyCisJCQkgLTk6MDAJVVMJWSVzVAkxOTQ2CisJCQkgLTk6MDAJLQlZU1QJMTk2OQorCQkJIC05OjAwCVVTCVklc1QJMTk4MyBOb3YgMzAKKwkJCSAtOTowMAlVUwlBSyVzVAorWm9uZSBBbWVyaWNhL0FuY2hvcmFnZQkgMTQ6MDA6MjQgLQlMTVQJMTg2NyBPY3QgMTgKKwkJCSAtOTo1OTozNiAtCUxNVAkxOTAwIEF1ZyAyMCAxMjowMAorCQkJLTEwOjAwCS0JQ0FUCTE5NDIKKwkJCS0xMDowMAlVUwlDQVQvQ0FXVCAxOTQ1IEF1ZyAxNCAyMzowMHUKKwkJCS0xMDowMAlVUwlDQVQvQ0FQVCAxOTQ2ICMgUGVhY2UKKwkJCS0xMDowMAktCUNBVAkxOTY3IEFwcgorCQkJLTEwOjAwCS0JQUhTVAkxOTY5CisJCQktMTA6MDAJVVMJQUglc1QJMTk4MyBPY3QgMzAgMjowMAorCQkJIC05OjAwCVVTCVklc1QJMTk4MyBOb3YgMzAKKwkJCSAtOTowMAlVUwlBSyVzVAorWm9uZSBBbWVyaWNhL05vbWUJIDEyOjU4OjIxIC0JTE1UCTE4NjcgT2N0IDE4CisJCQktMTE6MDE6MzggLQlMTVQJMTkwMCBBdWcgMjAgMTI6MDAKKwkJCS0xMTowMAktCU5TVAkxOTQyCisJCQktMTE6MDAJVVMJTiVzVAkxOTQ2CisJCQktMTE6MDAJLQlOU1QJMTk2NyBBcHIKKwkJCS0xMTowMAktCUJTVAkxOTY5CisJCQktMTE6MDAJVVMJQiVzVAkxOTgzIE9jdCAzMCAyOjAwCisJCQkgLTk6MDAJVVMJWSVzVAkxOTgzIE5vdiAzMAorCQkJIC05OjAwCVVTCUFLJXNUCitab25lIEFtZXJpY2EvQWRhawkgMTI6MTM6MjEgLQlMTVQJMTg2NyBPY3QgMTgKKwkJCS0xMTo0NjozOCAtCUxNVAkxOTAwIEF1ZyAyMCAxMjowMAorCQkJLTExOjAwCS0JTlNUCTE5NDIKKwkJCS0xMTowMAlVUwlOJXNUCTE5NDYKKwkJCS0xMTowMAktCU5TVAkxOTY3IEFwcgorCQkJLTExOjAwCS0JQlNUCTE5NjkKKwkJCS0xMTowMAlVUwlCJXNUCTE5ODMgT2N0IDMwIDI6MDAKKwkJCS0xMDowMAlVUwlBSCVzVAkxOTgzIE5vdiAzMAorCQkJLTEwOjAwCVVTCUhBJXNUCisjIFRoZSBmb2xsb3dpbmcgc3dpdGNoZXMgZG9uJ3QgcXVpdGUgbWFrZSBvdXIgMTk3MCBjdXRvZmYuCisjCisjIFNoYW5rcyB3cml0ZXMgdGhhdCBwYXJ0IG9mIHNvdXRod2VzdCBBbGFza2EgKGUuZy4gQW5pYWspCisjIHN3aXRjaGVkIGZyb20gLTExOjAwIHRvIC0xMDowMCBvbiAxOTY4LTA5LTIyIGF0IDAyOjAwLAorIyBhbmQgYW5vdGhlciBwYXJ0IChlLmcuIEFraWFrKSBtYWRlIHRoZSBzYW1lIHN3aXRjaCBmaXZlIHdlZWtzIGxhdGVyLgorIworIyBGcm9tIERhdmlkIEZsYXRlciAoMjAwNC0xMS0wOSk6CisjIEluIGUtbWFpbCwgMjAwNC0xMS0wMiwgUmF5IEh1ZHNvbiwgaGlzdG9yaWFuL2xpYWlzb24gdG8gdGhlIFVuYWxhc2thCisjIEhpc3RvcmljIFByZXNlcnZhdGlvbiBDb21taXNzaW9uLCBwcm92aWRlZCB0aGlzIGluZm9ybWF0aW9uLCB3aGljaAorIyBzdWdnZXN0cyB0aGF0IFVuYWxhc2thIGRldmlhdGVkIGZyb20gc3RhdHV0b3J5IHRpbWUgZnJvbSBlYXJseSAxOTY3CisjIHBvc3NpYmx5IHVudGlsIDE5ODM6CisjCisjICBNaW51dGVzIG9mIHRoZSBVbmFsYXNrYSBDaXR5IENvdW5jaWwgTWVldGluZywgSmFudWFyeSAxMCwgMTk2NzoKKyMgICJFeGNlcHQgZm9yIFN0LiBQYXVsIGFuZCBBa3V0YW4sIFVuYWxhc2thIGlzIHRoZSBvbmx5IGltcG9ydGFudAorIyAgbG9jYXRpb24gbm90IG9uIEFsYXNrYSBTdGFuZGFyZCBUaW1lLiAgVGhlIGZvbGxvd2luZyByZXNvbHV0aW9uIHdhcworIyAgbWFkZSBieSBXaWxsaWFtIFJvYmluc29uIGFuZCBzZWNvbmRlZCBieSBIZW5yeSBTd2Fuc29uOiAgQmUgaXQKKyMgIHJlc29sdmVkIHRoYXQgdGhlIENpdHkgb2YgVW5hbGFza2EgaGVyZWJ5IGdvZXMgdG8gQWxhc2thIFN0YW5kYXJkCisjICBUaW1lIGFzIG9mIG1pZG5pZ2h0IEZyaWRheSwgSmFudWFyeSAxMywgMTk2NyAoMSBBLk0uIFNhdHVyZGF5LAorIyAgSmFudWFyeSAxNCwgQWxhc2thIFN0YW5kYXJkIFRpbWUuKSAgVGhpcyByZXNvbHV0aW9uIHdhcyBwYXNzZWQgd2l0aAorIyAgdGhyZWUgdm90ZXMgZm9yIGFuZCBvbmUgYWdhaW5zdC4iCisKKyMgSGF3YWlpCisjCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uOgorIyBBbmQgdGhlbiB0aGVyZSdzIEhhd2FpaS4KKyMgRFNUIHdhcyBvYnNlcnZlZCBmb3Igb25lIGRheSBpbiAxOTMzOworIyBzdGFuZGFyZCB0aW1lIHdhcyBjaGFuZ2VkIGJ5IGhhbGYgYW4gaG91ciBpbiAxOTQ3OworIyBpdCdzIGFsd2F5cyBzdGFuZGFyZCBhcyBvZiAxOTg2LgorIworIyBGcm9tIFBhdWwgRWdnZXJ0OgorIyBTaGFua3Mgc2F5cyB0aGUgMTkzMyBleHBlcmltZW50IGxhc3RlZCBmb3IgdGhyZWUgd2Vla3MuICBHbyB3aXRoIFNoYW5rcy4KKyMKK1pvbmUgUGFjaWZpYy9Ib25vbHVsdQktMTA6MzE6MjYgLQlMTVQJMTkwMCBKYW4gIDEgMTI6MDAKKwkJCS0xMDozMAktCUhTVAkxOTMzIEFwciAzMCAyOjAwCisJCQktMTA6MzAJMTowMAlIRFQJMTkzMyBNYXkgMjEgMjowMAorCQkJLTEwOjMwCVVTCUglc1QJMTk0NyBKdW4gIDggMjowMAorCQkJLTEwOjAwCS0JSFNUCisKKyMgTm93IHdlIHR1cm4gdG8gVVMgYXJlYXMgdGhhdCBoYXZlIGRpdmVyZ2VkIGZyb20gdGhlIGNvbnNlbnN1cyBzaW5jZSAxOTcwLgorCisjIEFyaXpvbmEgbW9zdGx5IHVzZXMgTVNULgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDItMTAtMjApOgorIworIyBUaGUgaW5mb3JtYXRpb24gaW4gdGhlIHJlc3Qgb2YgdGhpcyBwYXJhZ3JhcGggaXMgZGVyaXZlZCBmcm9tIHRoZQorIyA8YSBocmVmPSJodHRwOi8vd3d3LmRsYXByLmxpYi5hei51cy9saW5rcy9kYXlsaWdodC5odG0iPgorIyBEYXlsaWdodCBTYXZpbmcgVGltZSB3ZWIgcGFnZSAoMjAwMi0wMS0yMyk8L2E+IG1haW50YWluZWQgYnkgdGhlCisjIEFyaXpvbmEgU3RhdGUgTGlicmFyeSwgQXJjaGl2ZXMgYW5kIFB1YmxpYyBSZWNvcmRzLgorIyBCZXR3ZWVuIDE5NDQtMDEtMDEgYW5kIDE5NDQtMDQtMDEgdGhlIFN0YXRlIG9mIEFyaXpvbmEgdXNlZCBzdGFuZGFyZAorIyB0aW1lLCBidXQgYnkgZmVkZXJhbCBsYXcgcmFpbHJvYWRzLCBhaXJsaW5lcywgYnVzIGxpbmVzLCBtaWxpdGFyeQorIyBwZXJzb25uZWwsIGFuZCBzb21lIGVuZ2FnZWQgaW4gaW50ZXJzdGF0ZSBjb21tZXJjZSBjb250aW51ZWQgdG8KKyMgb2JzZXJ2ZSB3YXIgKGkuZS4sIGRheWxpZ2h0IHNhdmluZykgdGltZS4gIFRoZSAxOTQ0LTAzLTE3IFBob2VuaXgKKyMgR2F6ZXR0ZSBzYXlzIHRoYXQgd2FzIHRoZSBkYXRlIHRoZSBsYXcgY2hhbmdlZCwgYW5kIHRoYXQgMDQtMDEgd2FzCisjIHRoZSBkYXRlIHRoZSBzdGF0ZSdzIGNsb2NrcyB3b3VsZCBjaGFuZ2UuICBJbiAxOTQ1IHRoZSBTdGF0ZSBvZgorIyBBcml6b25hIHVzZWQgc3RhbmRhcmQgdGltZSBhbGwgeWVhciwgYWdhaW4gd2l0aCBleGNlcHRpb25zIG9ubHkgYXMKKyMgbWFuZGF0ZWQgYnkgZmVkZXJhbCBsYXcuICBBcml6b25hIG9ic2VydmVkIERTVCBpbiAxOTY3LCBidXQgQXJpem9uYQorIyBMYXdzIDE5NjgsIGNoLiAxODMgKGVmZmVjdGl2ZSAxOTY4LTAzLTIxKSByZXBlYWxlZCBEU1QuCisjCisjIFNoYW5rcyBzYXlzIHRoZSAxOTQ0IGV4cGVyaW1lbnQgY2FtZSB0byBhbiBlbmQgb24gMTk0NC0wMy0xNy4KKyMgR28gd2l0aCB0aGUgQXJpem9uYSBTdGF0ZSBMaWJyYXJ5IGluc3RlYWQuCisKK1pvbmUgQW1lcmljYS9QaG9lbml4CS03OjI4OjE4IC0JTE1UCTE4ODMgTm92IDE4IDExOjMxOjQyCisJCQktNzowMAlVUwlNJXNUCTE5NDQgSmFuICAxIDAwOjAxCisJCQktNzowMAktCU1TVAkxOTQ0IEFwciAgMSAwMDowMQorCQkJLTc6MDAJVVMJTSVzVAkxOTQ0IE9jdCAgMSAwMDowMQorCQkJLTc6MDAJLQlNU1QJMTk2NworCQkJLTc6MDAJVVMJTSVzVAkxOTY4IE1hciAyMQorCQkJLTc6MDAJLQlNU1QKKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDE5ODgtMDItMTMpOgorIyBBIHdyaXRlciBmcm9tIHRoZSBJbnRlciBUcmliYWwgQ291bmNpbCBvZiBBcml6b25hLCBJbmMuLAorIyBub3RlcyBpbiBwcml2YXRlIGNvcnJlc3BvbmRlbmNlIGRhdGVkIDE5ODctMTItMjggdGhhdCAiUHJlc2VudGx5LCBvbmx5IHRoZQorIyBOYXZham8gTmF0aW9uIHBhcnRpY2lwYXRlcyBpbiB0aGUgRGF5bGlnaHQgU2F2aW5nIFRpbWUgcG9saWN5LCBkdWUgdG8gaXRzCisjIGxhcmdlIHNpemUgYW5kIGxvY2F0aW9uIGluIHRocmVlIHN0YXRlcy4iICAoVGhlICJvbmx5IiBtZWFucyB0aGF0IG90aGVyCisjIHRyaWJhbCBuYXRpb25zIGRvbid0IHVzZSBEU1QuKQorCitMaW5rIEFtZXJpY2EvRGVudmVyIEFtZXJpY2EvU2hpcHJvY2sKKworIyBTb3V0aGVybiBJZGFobyAoQWRhLCBBZGFtcywgQmFubm9jaywgQmVhciBMYWtlLCBCaW5naGFtLCBCbGFpbmUsCisjIEJvaXNlLCBCb25uZXZpbGxlLCBCdXR0ZSwgQ2FtYXMsIENhbnlvbiwgQ2FyaWJvdSwgQ2Fzc2lhLCBDbGFyaywKKyMgQ3VzdGVyLCBFbG1vcmUsIEZyYW5rbGluLCBGcmVtb250LCBHZW0sIEdvb2RpbmcsIEplZmZlcnNvbiwgSmVyb21lLAorIyBMZW1oaSwgTGluY29sbiwgTWFkaXNvbiwgTWluaWRva2EsIE9uZWlkYSwgT3d5aGVlLCBQYXlldHRlLCBQb3dlciwKKyMgVGV0b24sIFR3aW4gRmFsbHMsIFZhbGxleSwgV2FzaGluZ3RvbiBjb3VudGllcywgYW5kIHRoZSBzb3V0aGVybgorIyBxdWFydGVyIG9mIElkYWhvIGNvdW50eSkgYW5kIGVhc3Rlcm4gT3JlZ29uIChtb3N0IG9mIE1hbGhldXIgQ291bnR5KQorIyBzd2l0Y2hlZCBmb3VyIHdlZWtzIGxhdGUgaW4gMTk3NC4KKyMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9Cb2lzZQktNzo0NDo0OSAtCUxNVAkxODgzIE5vdiAxOCAxMjoxNToxMQorCQkJLTg6MDAJVVMJUCVzVAkxOTIzIE1heSAxMyAyOjAwCisJCQktNzowMAlVUwlNJXNUCTE5NzQKKwkJCS03OjAwCS0JTVNUCTE5NzQgRmViICAzIDI6MDAKKwkJCS03OjAwCVVTCU0lc1QKKworIyBJbmRpYW5hCisjCisjIEZvciBhIG1hcCBvZiBJbmRpYW5hJ3MgdGltZSB6b25lIHJlZ2lvbnMsIHNlZToKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5tY2NzYy5lZHUvdGltZS5odG1sIj4KKyMgV2hhdCB0aW1lIGlzIGl0IGluIEluZGlhbmE/CisjIDwvYT4gKDIwMDYtMDMtMDEpCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDctMDgtMTcpOgorIyBTaW5jZSAxOTcwLCBtb3N0IG9mIEluZGlhbmEgaGFzIGJlZW4gbGlrZSBBbWVyaWNhL0luZGlhbmEvSW5kaWFuYXBvbGlzLAorIyB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uczoKKyMKKyMgLSBHaWJzb24sIEphc3BlciwgTGFrZSwgTGFQb3J0ZSwgTmV3dG9uLCBQb3J0ZXIsIFBvc2V5LCBTcGVuY2VyLAorIyAgIFZhbmRlbmJ1cmdoLCBhbmQgV2FycmljayBjb3VudGllcyBoYXZlIGJlZW4gbGlrZSBBbWVyaWNhL0NoaWNhZ28uCisjCisjIC0gRGVhcmJvcm4gYW5kIE9oaW8gY291bnRpZXMgaGF2ZSBiZWVuIGxpa2UgQW1lcmljYS9OZXdfWW9yay4KKyMKKyMgLSBDbGFyaywgRmxveWQsIGFuZCBIYXJyaXNvbiBjb3VudGllcyBoYXZlIGJlZW4gbGlrZQorIyAgIEFtZXJpY2EvS2VudHVja3kvTG91aXN2aWxsZS4KKyMKKyMgLSBDcmF3Zm9yZCwgRGF2aWVzcywgRHVib2lzLCBLbm94LCBNYXJ0aW4sIFBlcnJ5LCBQaWtlLCBQdWxhc2tpLCBTdGFya2UsCisjICAgYW5kIFN3aXR6ZXJsYW5kIGNvdW50aWVzIGhhdmUgdGhlaXIgb3duIHRpbWUgem9uZSBoaXN0b3JpZXMgYXMgbm90ZWQgYmVsb3cuCisjCisjIFNoYW5rcyBwYXJ0aXRpb25lZCBJbmRpYW5hIGludG8gMzQ1IHJlZ2lvbnMsIGVhY2ggd2l0aCBpdHMgb3duIHRpbWUgaGlzdG9yeSwKKyMgYW5kIHdyb3RlIGBgRXZlbiBuZXdzcGFwZXIgcmVwb3J0cyBwcmVzZW50IGNvbnRyYWRpY3RvcnkgaW5mb3JtYXRpb24uJycKKyMgVGhvc2UgSG9vc2llcnMhICBTdWNoIGEgZmxpZ2h0eSBhbmQgY2hhbmdlYWJsZSBwZW9wbGUhCisjIEZvcnR1bmF0ZWx5LCBtb3N0IG9mIHRoZSBjb21wbGV4aXR5IG9jY3VycmVkIGJlZm9yZSBvdXIgY3V0b2ZmIGRhdGUgb2YgMTk3MC4KKyMKKyMgT3RoZXIgdGhhbiBJbmRpYW5hcG9saXMsIHRoZSBJbmRpYW5hIHBsYWNlIG5hbWVzIGFyZSBzbyBub25kZXNjcmlwdAorIyB0aGF0IHRoZXkgd291bGQgYmUgYW1iaWd1b3VzIGlmIHdlIGxlZnQgdGhlbSBhdCB0aGUgYEFtZXJpY2EnIGxldmVsLgorIyBTbyB3ZSByZWx1Y3RhbnRseSBwdXQgdGhlbSBhbGwgaW4gYSBzdWJkaXJlY3RvcnkgYEFtZXJpY2EvSW5kaWFuYScuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNS0wOC0xNik6CisjIGh0dHA6Ly93d3cubWNjc2MuZWR1L3RpbWUuaHRtbCBzYXlzIHRoYXQgSW5kaWFuYSB3aWxsIHVzZSBEU1Qgc3RhcnRpbmcgMjAwNi4KKworIyBGcm9tIE5hdGhhbiBTdHJhdHRvbiBUcmVhZHdheSAoMjAwNi0wMy0zMCk6CisjIGh0dHA6Ly93d3cuZG90Lmdvdi9hZmZhaXJzL2RvdDA0MDYuaHRtIFszNzA1IEJdCisjIEZyb20gRGVib3JhaCBHb2xkc21pdGggKDIwMDYtMDEtMTgpOgorIyBodHRwOi8vZG1zZXMuZG90Lmdvdi9kb2NpbWFnZXMvcGRmOTUvMzgyMzI5X3dlYi5wZGYgWzIuOSBNQl0KKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMS0yMCk6CisjIEl0IHNheXMgIkRPVCBpcyByZWxvY2F0aW5nIHRoZSB0aW1lIHpvbmUgYm91bmRhcnkgaW4gSW5kaWFuYSB0byBtb3ZlIFN0YXJrZSwKKyMgUHVsYXNraSwgS25veCwgRGF2aWVzcywgTWFydGluLCBQaWtlLCBEdWJvaXMsIGFuZCBQZXJyeSBDb3VudGllcyBmcm9tIHRoZQorIyBFYXN0ZXJuIFRpbWUgWm9uZSB0byB0aGUgQ2VudHJhbCBUaW1lIFpvbmUuLi4uIFRoZSBlZmZlY3RpdmUgZGF0ZSBvZgorIyB0aGlzIHJ1bGUgaXMgMjpPTyBhLm0uIEVTVCBTdW5kYXksIEFwcmlsIDIsIDIwMDYsIHdoaWNoIGlzIHRoZQorIyBjaGFuZ2VvdmVyIGRhdGUgZnJvbSBzdGFuZGFyZCB0aW1lIHRvIERheWxpZ2h0IFNhdmluZyBUaW1lLiIKKyMgU3RyaWN0bHkgc3BlYWtpbmcsIHRoaXMgbWVhbnMgdGhlIGFmZmVjdGVkIGNvdW50aWVzIHdpbGwgY2hhbmdlIHRoZWlyCisjIGNsb2NrcyB0d2ljZSB0aGF0IG5pZ2h0LCBidXQgdGhpcyBvYnZpb3VzbHkgaXMgaW4gZXJyb3IuICBUaGUgaW50ZW50CisjIGlzIHRoYXQgMDE6NTk6NTkgRVNUIGJlIGZvbGxvd2VkIGJ5IDAyOjAwOjAwIENEVC4KKworIyBGcm9tIEd3aWxsaW0gTGF3ICgyMDA3LTAyLTEwKToKKyMgVGhlIEFzc29jaWF0ZWQgUHJlc3MgaGFzIGJlZW4gcmVwb3J0aW5nIHRoYXQgUHVsYXNraSBDb3VudHksIEluZGlhbmEgaXMKKyMgZ29pbmcgdG8gc3dpdGNoIGZyb20gQ2VudHJhbCB0byBFYXN0ZXJuIFRpbWUgb24gTWFyY2ggMTEsIDIwMDcuLi4uCisjIGh0dHA6Ly93d3cuaW5keXN0YXIuY29tL2FwcHMvcGJjcy5kbGwvYXJ0aWNsZT9BSUQ9LzIwMDcwMjA3L0xPQ0FMMTkwMTA4LzcwMjA3MDUyNC8wL0xPQ0FMCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUgorUnVsZSBJbmRpYW5hcG9saXMgMTk0MQlvbmx5CS0JSnVuCTIyCTI6MDAJMTowMAlECitSdWxlIEluZGlhbmFwb2xpcyAxOTQxCTE5NTQJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZSBJbmRpYW5hcG9saXMgMTk0NgkxOTU0CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpcyAtNTo0NDozOCAtIExNVCAxODgzIE5vdiAxOCAxMjoxNToyMgorCQkJLTY6MDAJVVMJQyVzVAkxOTIwCisJCQktNjowMCBJbmRpYW5hcG9saXMgQyVzVAkxOTQyCisJCQktNjowMAlVUwlDJXNUCTE5NDYKKwkJCS02OjAwIEluZGlhbmFwb2xpcyBDJXNUCTE5NTUgQXByIDI0IDI6MDAKKwkJCS01OjAwCS0JRVNUCTE5NTcgU2VwIDI5IDI6MDAKKwkJCS02OjAwCS0JQ1NUCTE5NTggQXByIDI3IDI6MDAKKwkJCS01OjAwCS0JRVNUCTE5NjkKKwkJCS01OjAwCVVTCUUlc1QJMTk3MQorCQkJLTU6MDAJLQlFU1QJMjAwNgorCQkJLTU6MDAJVVMJRSVzVAorIworIyBFYXN0ZXJuIENyYXdmb3JkIENvdW50eSwgSW5kaWFuYSwgbGVmdCBpdHMgY2xvY2tzIGFsb25lIGluIDE5NzQsCisjIGFzIHdlbGwgYXMgZnJvbSAxOTc2IHRocm91Z2ggMjAwNS4KKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUgorUnVsZQlNYXJlbmdvCTE5NTEJb25seQktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCU1hcmVuZ28JMTk1MQlvbmx5CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJTWFyZW5nbwkxOTU0CTE5NjAJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlNYXJlbmdvCTE5NTQJMTk2MAktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvSW5kaWFuYS9NYXJlbmdvIC01OjQ1OjIzIC0JTE1UCTE4ODMgTm92IDE4IDEyOjE0OjM3CisJCQktNjowMAlVUwlDJXNUCTE5NTEKKwkJCS02OjAwCU1hcmVuZ28JQyVzVAkxOTYxIEFwciAzMCAyOjAwCisJCQktNTowMAktCUVTVAkxOTY5CisJCQktNTowMAlVUwlFJXNUCTE5NzQgSmFuICA2IDI6MDAKKwkJCS02OjAwCTE6MDAJQ0RUCTE5NzQgT2N0IDI3IDI6MDAKKwkJCS01OjAwCVVTCUUlc1QJMTk3NgorCQkJLTU6MDAJLQlFU1QJMjAwNgorCQkJLTU6MDAJVVMJRSVzVAorIworIyBEYXZpZXNzLCBEdWJvaXMsIEtub3gsIGFuZCBNYXJ0aW4gQ291bnRpZXMsIEluZGlhbmEsCisjIHN3aXRjaGVkIGZyb20gZWFzdGVybiB0byBjZW50cmFsIHRpbWUgaW4gQXByaWwgMjAwNiwgdGhlbiBzd2l0Y2hlZCBiYWNrCisjIGluIE5vdmVtYmVyIDIwMDcuCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIKK1J1bGUgVmluY2VubmVzCTE5NDYJb25seQktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlIFZpbmNlbm5lcwkxOTQ2CW9ubHkJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZSBWaW5jZW5uZXMJMTk1MwkxOTU0CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUgVmluY2VubmVzCTE5NTMJMTk1OQktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlIFZpbmNlbm5lcwkxOTU1CW9ubHkJLQlNYXkJIDEJMDowMAkxOjAwCUQKK1J1bGUgVmluY2VubmVzCTE5NTYJMTk2MwktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlIFZpbmNlbm5lcwkxOTYwCW9ubHkJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworUnVsZSBWaW5jZW5uZXMJMTk2MQlvbmx5CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUgVmluY2VubmVzCTE5NjIJMTk2MwktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvSW5kaWFuYS9WaW5jZW5uZXMgLTU6NTA6MDcgLSBMTVQJMTg4MyBOb3YgMTggMTI6MDk6NTMKKwkJCS02OjAwCVVTCUMlc1QJMTk0NgorCQkJLTY6MDAgVmluY2VubmVzCUMlc1QJMTk2NCBBcHIgMjYgMjowMAorCQkJLTU6MDAJLQlFU1QJMTk2OQorCQkJLTU6MDAJVVMJRSVzVAkxOTcxCisJCQktNTowMAktCUVTVAkyMDA2IEFwciAgMiAyOjAwCisJCQktNjowMAlVUwlDJXNUCTIwMDcgTm92ICA0IDI6MDAKKwkJCS01OjAwCVVTCUUlc1QKKyMKKyMgUGVycnkgQ291bnR5LCBJbmRpYW5hLCBzd2l0Y2hlZCBmcm9tIGVhc3Rlcm4gdG8gY2VudHJhbCB0aW1lIGluIEFwcmlsIDIwMDYuCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIKK1J1bGUgUGVycnkJMTk0Nglvbmx5CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUgUGVycnkJMTk0Nglvbmx5CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUgUGVycnkJMTk1MwkxOTU0CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUgUGVycnkJMTk1MwkxOTU5CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUgUGVycnkJMTk1NQlvbmx5CS0JTWF5CSAxCTA6MDAJMTowMAlECitSdWxlIFBlcnJ5CTE5NTYJMTk2MwktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlIFBlcnJ5CTE5NjAJb25seQktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlIFBlcnJ5CTE5NjEJb25seQktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlIFBlcnJ5CTE5NjIJMTk2MwktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvSW5kaWFuYS9UZWxsX0NpdHkgLTU6NDc6MDMgLSBMTVQJMTg4MyBOb3YgMTggMTI6MTI6NTcKKwkJCS02OjAwCVVTCUMlc1QJMTk0NgorCQkJLTY6MDAgUGVycnkJQyVzVAkxOTY0IEFwciAyNiAyOjAwCisJCQktNTowMAktCUVTVAkxOTY5CisJCQktNTowMAlVUwlFJXNUCTE5NzEKKwkJCS01OjAwCS0JRVNUCTIwMDYgQXByICAyIDI6MDAKKwkJCS02OjAwCVVTCUMlc1QKKyMKKyMgUGlrZSBDb3VudHksIEluZGlhbmEgbW92ZWQgZnJvbSBjZW50cmFsIHRvIGVhc3Rlcm4gdGltZSBpbiAxOTc3LAorIyB0aGVuIHN3aXRjaGVkIGJhY2sgaW4gMjAwNiwgdGhlbiBzd2l0Y2hlZCBiYWNrIGFnYWluIGluIDIwMDcuCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIKK1J1bGUJUGlrZQkxOTU1CW9ubHkJLQlNYXkJIDEJMDowMAkxOjAwCUQKK1J1bGUJUGlrZQkxOTU1CTE5NjAJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlQaWtlCTE5NTYJMTk2NAktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCVBpa2UJMTk2MQkxOTY0CS0JT2N0CWxhc3RTdW4JMjowMAkwCVMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9JbmRpYW5hL1BldGVyc2J1cmcgLTU6NDk6MDcgLSBMTVQJMTg4MyBOb3YgMTggMTI6MTA6NTMKKwkJCS02OjAwCVVTCUMlc1QJMTk1NQorCQkJLTY6MDAJUGlrZQlDJXNUCTE5NjUgQXByIDI1IDI6MDAKKwkJCS01OjAwCS0JRVNUCTE5NjYgT2N0IDMwIDI6MDAKKwkJCS02OjAwCVVTCUMlc1QJMTk3NyBPY3QgMzAgMjowMAorCQkJLTU6MDAJLQlFU1QJMjAwNiBBcHIgIDIgMjowMAorCQkJLTY6MDAJVVMJQyVzVAkyMDA3IE5vdiAgNCAyOjAwCisJCQktNTowMAlVUwlFJXNUCisjCisjIFN0YXJrZSBDb3VudHksIEluZGlhbmEgbW92ZWQgZnJvbSBjZW50cmFsIHRvIGVhc3Rlcm4gdGltZSBpbiAxOTkxLAorIyB0aGVuIHN3aXRjaGVkIGJhY2sgaW4gMjAwNi4KKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDE5OTEtMTAtMjgpOgorIyBBbiBhcnRpY2xlIG9uIHBhZ2UgQTMgb2YgdGhlIFN1bmRheSwgMTk5MS0xMC0yNyBXYXNoaW5ndG9uIFBvc3QKKyMgbm90ZXMgdGhhdCBTdGFya2UgQ291bnR5IHN3aXRjaGVkIGZyb20gQ2VudHJhbCB0aW1lIHRvIEVhc3Rlcm4gdGltZSBhcyBvZgorIyAxOTkxLTEwLTI3LgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSCitSdWxlCVN0YXJrZQkxOTQ3CTE5NjEJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlTdGFya2UJMTk0NwkxOTU0CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJU3RhcmtlCTE5NTUJMTk1NgktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVN0YXJrZQkxOTU3CTE5NTgJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlTdGFya2UJMTk1OQkxOTYxCS0JT2N0CWxhc3RTdW4JMjowMAkwCVMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9JbmRpYW5hL0tub3ggLTU6NDY6MzAgLQlMTVQJMTg4MyBOb3YgMTggMTI6MTM6MzAKKwkJCS02OjAwCVVTCUMlc1QJMTk0NworCQkJLTY6MDAJU3RhcmtlCUMlc1QJMTk2MiBBcHIgMjkgMjowMAorCQkJLTU6MDAJLQlFU1QJMTk2MyBPY3QgMjcgMjowMAorCQkJLTY6MDAJVVMJQyVzVAkxOTkxIE9jdCAyNyAyOjAwCisJCQktNTowMAktCUVTVAkyMDA2IEFwciAgMiAyOjAwCisJCQktNjowMAlVUwlDJXNUCisjCisjIFB1bGFza2kgQ291bnR5LCBJbmRpYW5hLCBzd2l0Y2hlZCBmcm9tIGVhc3Rlcm4gdG8gY2VudHJhbCB0aW1lIGluCisjIEFwcmlsIDIwMDYgYW5kIHRoZW4gc3dpdGNoZWQgYmFjayBpbiBNYXJjaCAyMDA3LgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSCitSdWxlCVB1bGFza2kJMTk0NgkxOTYwCS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJUHVsYXNraQkxOTQ2CTE5NTQJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlQdWxhc2tpCTE5NTUJMTk1NgktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVB1bGFza2kJMTk1NwkxOTYwCS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9JbmRpYW5hL1dpbmFtYWMgLTU6NDY6MjUgLSBMTVQJMTg4MyBOb3YgMTggMTI6MTM6MzUKKwkJCS02OjAwCVVTCUMlc1QJMTk0NgorCQkJLTY6MDAJUHVsYXNraQlDJXNUCTE5NjEgQXByIDMwIDI6MDAKKwkJCS01OjAwCS0JRVNUCTE5NjkKKwkJCS01OjAwCVVTCUUlc1QJMTk3MQorCQkJLTU6MDAJLQlFU1QJMjAwNiBBcHIgIDIgMjowMAorCQkJLTY6MDAJVVMJQyVzVAkyMDA3IE1hciAxMSAyOjAwCisJCQktNTowMAlVUwlFJXNUCisjCisjIFN3aXR6ZXJsYW5kIENvdW50eSwgSW5kaWFuYSwgZGlkIG5vdCBvYnNlcnZlIERTVCBmcm9tIDE5NzMgdGhyb3VnaCAyMDA1LgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL0luZGlhbmEvVmV2YXkgLTU6NDA6MTYgLQlMTVQJMTg4MyBOb3YgMTggMTI6MTk6NDQKKwkJCS02OjAwCVVTCUMlc1QJMTk1NCBBcHIgMjUgMjowMAorCQkJLTU6MDAJLQlFU1QJMTk2OQorCQkJLTU6MDAJVVMJRSVzVAkxOTczCisJCQktNTowMAktCUVTVAkyMDA2CisJCQktNTowMAlVUwlFJXNUCisKKyMgUGFydCBvZiBLZW50dWNreSBsZWZ0IGl0cyBjbG9ja3MgYWxvbmUgaW4gMTk3NC4KKyMgVGhpcyBhbHNvIGluY2x1ZGVzIENsYXJrLCBGbG95ZCwgYW5kIEhhcnJpc29uIGNvdW50aWVzIGluIEluZGlhbmEuCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIKK1J1bGUgTG91aXN2aWxsZQkxOTIxCW9ubHkJLQlNYXkJMQkyOjAwCTE6MDAJRAorUnVsZSBMb3Vpc3ZpbGxlCTE5MjEJb25seQktCVNlcAkxCTI6MDAJMAlTCitSdWxlIExvdWlzdmlsbGUJMTk0MQkxOTYxCS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUgTG91aXN2aWxsZQkxOTQxCW9ubHkJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZSBMb3Vpc3ZpbGxlCTE5NDYJb25seQktCUp1bgkyCTI6MDAJMAlTCitSdWxlIExvdWlzdmlsbGUJMTk1MAkxOTU1CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUgTG91aXN2aWxsZQkxOTU2CTE5NjAJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL0tlbnR1Y2t5L0xvdWlzdmlsbGUgLTU6NDM6MDIgLQlMTVQJMTg4MyBOb3YgMTggMTI6MTY6NTgKKwkJCS02OjAwCVVTCUMlc1QJMTkyMQorCQkJLTY6MDAgTG91aXN2aWxsZSBDJXNUCTE5NDIKKwkJCS02OjAwCVVTCUMlc1QJMTk0NgorCQkJLTY6MDAgTG91aXN2aWxsZSBDJXNUCTE5NjEgSnVsIDIzIDI6MDAKKwkJCS01OjAwCS0JRVNUCTE5NjgKKwkJCS01OjAwCVVTCUUlc1QJMTk3NCBKYW4gIDYgMjowMAorCQkJLTY6MDAJMTowMAlDRFQJMTk3NCBPY3QgMjcgMjowMAorCQkJLTU6MDAJVVMJRSVzVAorIworIyBXYXluZSBDb3VudHksIEtlbnR1Y2t5CisjCisjIEZyb20KKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5sYWtlLWN1bWJlcmxhbmQuY29tL2xpZmUvYXJjaGl2ZS9uZXdzOTkwMTI5dGltZS5zaHRtbCI+CisjIExha2UgQ3VtYmVybGFuZCBMSUZFCisjIDwvYT4gKDE5OTktMDEtMjkpIHZpYSBXS1lNLTEwMS43OgorIyBDbGludG9uIENvdW50eSBoYXMgam9pbmVkIFdheW5lIENvdW50eSBpbiBhc2tpbmcgdGhlIERvVCB0byBjaGFuZ2UgZnJvbQorIyB0aGUgQ2VudHJhbCB0byB0aGUgRWFzdGVybiB0aW1lIHpvbmUuLi4uICBUaGUgV2F5bmUgQ291bnR5IGdvdmVybm1lbnQgbWFkZQorIyB0aGUgc2FtZSByZXF1ZXN0IGluIERlY2VtYmVyLiAgQW5kIHdoaWxlIFJ1c3NlbGwgQ291bnR5IG9mZmljaWFscyBoYXZlIG5vdAorIyB0YWtlbiBhY3Rpb24sIHRoZSBtYWpvcml0eSBvZiByZXNwb25kZW50cyB0byBhIHBvbGwgY29uZHVjdGVkIHRoZXJlIGluCisjIEF1Z3VzdCBpbmRpY2F0ZWQgdGhleSB3b3VsZCBsaWtlIHRvIGNoYW5nZSB0byAiZmFzdCB0aW1lIiBhbHNvLgorIyBUaGUgdGhyZWUgTGFrZSBDdW1iZXJsYW5kIGNvdW50aWVzIGFyZSB0aGUgZmFydGhlc3QgZWFzdCBvZiBhbnkgVS5TLgorIyBsb2NhdGlvbiBpbiB0aGUgQ2VudHJhbCB0aW1lIHpvbmUuCisjCisjIEZyb20gUmljaCBXYWxlcyAoMjAwMC0wOC0yOSk6CisjIEFmdGVyIHByb2xvbmdlZCBkZWJhdGUsIGFuZCBkZXNwaXRlIGNvbnRpbnVpbmcgZGVlcCBkaWZmZXJlbmNlcyBvZiBvcGluaW9uLAorIyBXYXluZSBDb3VudHkgKGNlbnRyYWwgS2VudHVja3kpIGlzIHN3aXRjaGluZyBmcm9tIENlbnRyYWwgKC0wNjAwKSB0byBFYXN0ZXJuCisjICgtMDUwMCkgdGltZS4gIFRoZXkgd29uJ3QgImZhbGwgYmFjayIgdGhpcyB5ZWFyLiAgU2VlIFNhcmEgU2hpcGxleSwKKyMgVGhlIGRpZmZlcmVuY2UgYW4gaG91ciBtYWtlcywgTmFuZG8gVGltZXMgKDIwMDAtMDgtMjkgMTU6MzMgLTA0MDApLgorIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDAxLTA3LTE2KToKKyMgVGhlIGZpbmFsIHJ1bGUgd2FzIHB1Ymxpc2hlZCBpbiB0aGUKKyMgPGEgaHJlZj0iaHR0cDovL2Zyd2ViZ2F0ZS5hY2Nlc3MuZ3BvLmdvdi9jZ2ktYmluL2dldGRvYy5jZ2k/ZGJuYW1lPTIwMDBfcmVnaXN0ZXImZG9jaWQ9ZnIxN2F1MDAtMjIiPgorIyBGZWRlcmFsIFJlZ2lzdGVyIDY1LCAxNjAgKDIwMDAtMDgtMTcpLCBwYWdlIDUwMTU0LTUwMTU4LgorIyA8L2E+CisjCitab25lIEFtZXJpY2EvS2VudHVja3kvTW9udGljZWxsbyAtNTozOToyNCAtIExNVAkxODgzIE5vdiAxOCAxMjoyMDozNgorCQkJLTY6MDAJVVMJQyVzVAkxOTQ2CisJCQktNjowMAktCUNTVAkxOTY4CisJCQktNjowMAlVUwlDJXNUCTIwMDAgT2N0IDI5ICAyOjAwCisJCQktNTowMAlVUwlFJXNUCisKKworIyBGcm9tIFJpdmVzIE1jRG93ICgyMDAwLTA4LTMwKToKKyMgSGVyZSAuLi4gYXJlIGFsbCB0aGUgY2hhbmdlcyBpbiB0aGUgVVMgc2luY2UgMTk4NS4KKyMgS2Vhcm55IENvdW50eSwgS1MgKHB1dCBhbGwgb2YgY291bnR5IG9uIGNlbnRyYWw7CisjCXByZXZpb3VzbHkgc3BsaXQgYmV0d2VlbiBNU1QgYW5kIENTVCkgLi4uIDE5OTAtMTAKKyMgU3RhcmtlIENvdW50eSwgSU4gKGZyb20gQ1NUIHRvIEVTVCkgLi4uIDE5OTEtMTAKKyMgT2xpdmVyIENvdW50eSwgTkQgKGZyb20gTVNUIHRvIENTVCkgLi4uIDE5OTItMTAKKyMgV2VzdCBXZW5kb3ZlciwgTlYgKGZyb20gUFNUIFRPIE1TVCkgLi4uIDE5OTktMTAKKyMgV2F5bmUgQ291bnR5LCBLWSAoZnJvbSBDU1QgdG8gRVNUKSAuLi4gMjAwMC0xMAorIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDAxLTA3LTE3KToKKyMgV2UgZG9uJ3Qga25vdyB3aGVyZSB0aGUgbGluZSB1c2VkIHRvIGJlIHdpdGhpbiBLZWFybnkgQ291bnR5LCBLUywKKyMgc28gb21pdCB0aGF0IGNoYW5nZSBmb3Igbm93LgorIyBTZWUgQW1lcmljYS9JbmRpYW5hL0tub3ggZm9yIHRoZSBTdGFya2UgQ291bnR5LCBJTiBjaGFuZ2UuCisjIFNlZSBBbWVyaWNhL05vcnRoX0Rha290YS9DZW50ZXIgZm9yIHRoZSBPbGl2ZXIgQ291bnR5LCBORCBjaGFuZ2UuCisjIFdlc3QgV2VuZG92ZXIsIE5WIG9mZmljaWFsbHkgc3dpdGNoZWQgZnJvbSBQYWNpZmljIHRvIG1vdW50YWluIHRpbWUgb24KKyMgMTk5OS0xMC0zMS4gIFNlZSB0aGUKKyMgPGEgaHJlZj0iaHR0cDovL2Zyd2ViZ2F0ZS5hY2Nlc3MuZ3BvLmdvdi9jZ2ktYmluL2dldGRvYy5jZ2k/ZGJuYW1lPTE5OTlfcmVnaXN0ZXImZG9jaWQ9ZnIyMW9jOTktMTUiPgorIyBGZWRlcmFsIFJlZ2lzdGVyIDY0LCAyMDMgKDE5OTktMTAtMjEpLCBwYWdlIDU2NzA1LTU2NzA3LgorIyA8L2E+CisjIEhvd2V2ZXIsIHRoZSBGZWRlcmFsIFJlZ2lzdGVyIHNheXMgdGhhdCBXZXN0IFdlbmRvdmVyIGFscmVhZHkgb3BlcmF0ZWQKKyMgb24gbW91bnRhaW4gdGltZSwgYW5kIHRoZSBydWxlIG1lcmVseSBtYWRlIHRoaXMgb2ZmaWNpYWw7CisjIGhlbmNlIGEgc2VwYXJhdGUgdHogZW50cnkgaXMgbm90IG5lZWRlZC4KKworIyBNaWNoaWdhbgorIworIyBGcm9tIEJvYiBEZXZpbmUgKDE5ODgtMDEtMjgpOgorIyBNaWNoaWdhbiBkaWRuJ3Qgb2JzZXJ2ZSBEU1QgZnJvbSAxOTY4IHRvIDE5NzMuCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTktMDMtMzEpOgorIyBTaGFua3Mgd3JpdGVzIHRoYXQgTWljaGlnYW4gc3RhcnRlZCB1c2luZyBzdGFuZGFyZCB0aW1lIG9uIDE4ODUtMDktMTgsCisjIGJ1dCBIb3dzZSB3cml0ZXMgKHBwIDEyNC0xMjUsIHJlZmVycmluZyB0byBQb3B1bGFyIEFzdHJvbm9teSwgMTkwMS0wMSkKKyMgdGhhdCBEZXRyb2l0IGtlcHQKKyMKKyMJbG9jYWwgdGltZSB1bnRpbCAxOTAwIHdoZW4gdGhlIENpdHkgQ291bmNpbCBkZWNyZWVkIHRoYXQgY2xvY2tzIHNob3VsZAorIwliZSBwdXQgYmFjayB0d2VudHktZWlnaHQgbWludXRlcyB0byBDZW50cmFsIFN0YW5kYXJkIFRpbWUuICBIYWxmIHRoZQorIwljaXR5IG9iZXllZCwgaGFsZiByZWZ1c2VkLiAgQWZ0ZXIgY29uc2lkZXJhYmxlIGRlYmF0ZSwgdGhlIGRlY2lzaW9uCisjCXdhcyByZXNjaW5kZWQgYW5kIHRoZSBjaXR5IHJldmVydGVkIHRvIFN1biB0aW1lLiAgQSBkZXJpc2l2ZSBvZmZlciB0bworIwllcmVjdCBhIHN1bmRpYWwgaW4gZnJvbnQgb2YgdGhlIGNpdHkgaGFsbCB3YXMgcmVmZXJyZWQgdG8gdGhlCisjCUNvbW1pdHRlZSBvbiBTZXdlcnMuICBUaGVuLCBpbiAxOTA1LCBDZW50cmFsIHRpbWUgd2FzIGFkb3B0ZWQKKyMJYnkgY2l0eSB2b3RlLgorIworIyBUaGlzIHN0b3J5IGlzIHRvbyBlbnRlcnRhaW5pbmcgdG8gYmUgZmFsc2UsIHNvIGdvIHdpdGggSG93c2Ugb3ZlciBTaGFua3MuCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDEtMDMtMDYpOgorIyBHYXJsYW5kICgxOTI3KSB3cml0ZXMgYGBDbGV2ZWxhbmQgYW5kIERldHJvaXQgYWR2YW5jZWQgdGhlaXIgY2xvY2tzCisjIG9uZSBob3VyIGluIDE5MTQuJycgIFRoaXMgY2hhbmdlIGlzIG5vdCBpbiBTaGFua3MuICBXZSBoYXZlIG5vIG1vcmUKKyMgaW5mbywgc28gb21pdCB0aGlzIGZvciBub3cuCisjCisjIE1vc3Qgb2YgTWljaGlnYW4gb2JzZXJ2ZWQgRFNUIGZyb20gMTk3MyBvbiwgYnV0IHdhcyBhIGJpdCBsYXRlIGluIDE5NzUuCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIKK1J1bGUJRGV0cm9pdAkxOTQ4CW9ubHkJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlEZXRyb2l0CTE5NDgJb25seQktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCURldHJvaXQJMTk2Nwlvbmx5CS0JSnVuCTE0CTI6MDAJMTowMAlECitSdWxlCURldHJvaXQJMTk2Nwlvbmx5CS0JT2N0CWxhc3RTdW4JMjowMAkwCVMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9EZXRyb2l0CS01OjMyOjExIC0JTE1UCTE5MDUKKwkJCS02OjAwCS0JQ1NUCTE5MTUgTWF5IDE1IDI6MDAKKwkJCS01OjAwCS0JRVNUCTE5NDIKKwkJCS01OjAwCVVTCUUlc1QJMTk0NgorCQkJLTU6MDAJRGV0cm9pdAlFJXNUCTE5NzMKKwkJCS01OjAwCVVTCUUlc1QJMTk3NQorCQkJLTU6MDAJLQlFU1QJMTk3NSBBcHIgMjcgMjowMAorCQkJLTU6MDAJVVMJRSVzVAorIworIyBEaWNraW5zb24sIEdvZ2ViaWMsIElyb24sIGFuZCBNZW5vbWluZWUgQ291bnRpZXMsIE1pY2hpZ2FuLAorIyBzd2l0Y2hlZCBmcm9tIEVTVCB0byBDU1QvQ0RUIGluIDE5NzMuCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIKK1J1bGUgTWVub21pbmVlCTE5NDYJb25seQktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlIE1lbm9taW5lZQkxOTQ2CW9ubHkJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZSBNZW5vbWluZWUJMTk2Nglvbmx5CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUgTWVub21pbmVlCTE5NjYJb25seQktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvTWVub21pbmVlCS01OjUwOjI3IC0JTE1UCTE4ODUgU2VwIDE4IDEyOjAwCisJCQktNjowMAlVUwlDJXNUCTE5NDYKKwkJCS02OjAwIE1lbm9taW5lZQlDJXNUCTE5NjkgQXByIDI3IDI6MDAKKwkJCS01OjAwCS0JRVNUCTE5NzMgQXByIDI5IDI6MDAKKwkJCS02OjAwCVVTCUMlc1QKKworIyBOYXZhc3NhCisjIGFkbWluaXN0ZXJlZCBieSB0aGUgVVMgRmlzaCBhbmQgV2lsZGxpZmUgU2VydmljZQorIyBjbGFpbWVkIGJ5IFVTIHVuZGVyIHRoZSBwcm92aXNpb25zIG9mIHRoZSAxODU2IEd1YW5vIElzbGFuZHMgQWN0CisjIGFsc28gY2xhaW1lZCBieSBIYWl0aQorIyBvY2N1cGllZCAxODU3LzE5MDAgYnkgdGhlIE5hdmFzc2EgUGhvc3BoYXRlIENvCisjIFVTIGxpZ2h0aG91c2UgMTkxNy8xOTk2LTA5CisjIGN1cnJlbnRseSB1bmluaGFiaXRlZAorIyBzZWUgTWFyayBGaW5lbWFuLCBgYEFuIElzbGUgUmljaCBpbiBHdWFubyBhbmQgRGlzY29yZCcnLAorIyBfTG9zIEFuZ2VsZXMgVGltZXNfICgxOTk4LTExLTEwKSwgQTEsIEExMDsgaXQgY2l0ZXMKKyMgSmltbXkgU2thZ2dzLCBfVGhlIEdyZWF0IEd1YW5vIFJ1c2hfICgxOTk0KS4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgorIyBBIGdvb2Qgc291cmNlIGZvciB0aW1lIHpvbmUgaGlzdG9yaWNhbCBkYXRhIG91dHNpZGUgdGhlIFUuUy4gaXMKKyMgVGhvbWFzIEcuIFNoYW5rcyBhbmQgUmlxdWUgUG90dGVuZ2VyLCBUaGUgSW50ZXJuYXRpb25hbCBBdGxhcyAoNnRoIGVkaXRpb24pLAorIyBTYW4gRGllZ286IEFDUyBQdWJsaWNhdGlvbnMsIEluYy4gKDIwMDMpLgorIworIyBHd2lsbGltIExhdyB3cml0ZXMgdGhhdCBhIGdvb2Qgc291cmNlCisjIGZvciByZWNlbnQgdGltZSB6b25lIGRhdGEgaXMgdGhlIEludGVybmF0aW9uYWwgQWlyIFRyYW5zcG9ydAorIyBBc3NvY2lhdGlvbidzIFN0YW5kYXJkIFNjaGVkdWxlcyBJbmZvcm1hdGlvbiBNYW51YWwgKElBVEEgU1NJTSksCisjIHB1Ymxpc2hlZCBzZW1pYW5udWFsbHkuICBMYXcgc2VudCBpbiBzZXZlcmFsIGhlbHBmdWwgc3VtbWFyaWVzCisjIG9mIHRoZSBJQVRBJ3MgZGF0YSBhZnRlciAxOTkwLgorIworIyBFeGNlcHQgd2hlcmUgb3RoZXJ3aXNlIG5vdGVkLCBTaGFua3MgJiBQb3R0ZW5nZXIgaXMgdGhlIHNvdXJjZSBmb3IKKyMgZW50cmllcyB0aHJvdWdoIDE5OTAsIGFuZCBJQVRBIFNTSU0gaXMgdGhlIHNvdXJjZSBmb3IgZW50cmllcyBhZnRlcndhcmRzLgorIworIyBPdGhlciBzb3VyY2VzIG9jY2FzaW9uYWxseSB1c2VkIGluY2x1ZGU6CisjCisjCUVkd2FyZCBXLiBXaGl0bWFuLCBXb3JsZCBUaW1lIERpZmZlcmVuY2VzLAorIwlXaGl0bWFuIFB1Ymxpc2hpbmcgQ28sIDIgTmlhZ2FyYSBBdiwgRWFsaW5nLCBMb25kb24gKHVuZGF0ZWQpLAorIwl3aGljaCBJIGZvdW5kIGluIHRoZSBVQ0xBIGxpYnJhcnkuCisjCisjCTxhIGhyZWY9Imh0dHA6Ly93d3cucGV0dHN3b29kdmlsbGFnZS5jby51ay9EYXlsaWdodF9TYXZpbmdzX1dpbGxpYW1fV2lsbGV0dC5wZGYiPgorIwlXaWxsaWFtIFdpbGxldHQsIFRoZSBXYXN0ZSBvZiBEYXlsaWdodCwgMTl0aCBlZGl0aW9uCisjCTwvYT4gKDE5MTQtMDMpCisjCisjIFNlZSB0aGUgYGV1cm9wZScgZmlsZSBmb3IgR3JlZW5sYW5kLgorCisjIENhbmFkYQorCisjIEZyb20gQWxhaW4gTGFCb250PGUnPiAoMTk5NC0xMS0xNCk6CisjIEkgcG9zdCBoZXJlIHRoZSB0aW1lIHpvbmUgYWJicmV2aWF0aW9ucyBzdGFuZGFyZGl6ZWQgaW4gQ2FuYWRhCisjIGZvciBib3RoIEVuZ2xpc2ggYW5kIEZyZW5jaCBpbiB0aGUgQ0FOL0NTQS1aMjM0LjQtODkgc3RhbmRhcmQuLi4uCisjCisjCVVUQwlTdGFuZGFyZCB0aW1lCURheWxpZ2h0IHNhdmluZ3MgdGltZQorIwlvZmZzZXQJRnJlbmNoCUVuZ2xpc2gJRnJlbmNoCUVuZ2xpc2gKKyMJLTI6MzAJLQktCUhBVAlORFQKKyMJLTMJLQktCUhBQQlBRFQKKyMJLTM6MzAJSE5UCU5TVAktCS0KKyMJLTQJSE5BCUFTVAlIQUUJRURUCisjCS01CUhORQlFU1QJSEFDCUNEVAorIwktNglITkMJQ1NUCUhBUglNRFQKKyMJLTcJSE5SCU1TVAlIQVAJUERUCisjCS04CUhOUAlQU1QJSEFZCVlEVAorIwktOQlITlkJWVNUCS0JLQorIworIwlITjogSGV1cmUgTm9ybWFsZQlTVDogU3RhbmRhcmQgVGltZQorIwlIQTogSGV1cmUgQXZhbmM8ZSc+ZQlEVDogRGF5bGlnaHQgc2F2aW5nIFRpbWUKKyMKKyMJQTogZGUgbCdBdGxhbnRpcXVlCUF0bGFudGljCisjCUM6IGR1IENlbnRyZQkJQ2VudHJhbAorIwlFOiBkZSBsJ0VzdAkJRWFzdGVybgorIwlNOgkJCU1vdW50YWluCisjCU46CQkJTmV3Zm91bmRsYW5kCisjCVA6IGR1IFBhY2lmaXF1ZQkJUGFjaWZpYworIwlSOiBkZXMgUm9jaGV1c2VzCisjCVQ6IGRlIFRlcnJlLU5ldXZlCisjCVk6IGR1IFl1a29uCQlZdWtvbgorIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgxOTk0LTExLTIyKToKKyMgQWxhcywgdGhpcyBzb3J0IG9mIHRoaW5nIG11c3QgYmUgaGFuZGxlZCBieSBsb2NhbGl6YXRpb24gc29mdHdhcmUuCisKKyMgVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIHRoZSBkYXRhIGZvciBDYW5hZGEgYXJlIGFsbCBmcm9tIFNoYW5rcworIyAmIFBvdHRlbmdlci4KKworIyBGcm9tIENocmlzIFdhbHRvbiAoMjAwNi0wNC0wMSwgMjAwNi0wNC0yNSwgMjAwNi0wNi0yNiwgMjAwNy0wMS0zMSwKKyMgMjAwNy0wMy0wMSk6CisjIFRoZSBCcml0aXNoIENvbHVtYmlhIGdvdmVybm1lbnQgYW5ub3VuY2VkIHllc3RlcmRheSB0aGF0IGl0IHdpbGwKKyMgYWRqdXN0IGRheWxpZ2h0IHNhdmluZ3MgbmV4dCB5ZWFyIHRvIGFsaWduIHdpdGggY2hhbmdlcyBpbiB0aGUKKyMgVS5TLiBhbmQgdGhlIHJlc3Qgb2YgQ2FuYWRhLi4uLgorIyBodHRwOi8vd3d3Mi5uZXdzLmdvdi5iYy5jYS9uZXdzX3JlbGVhc2VzXzIwMDUtMjAwOS8yMDA2QUcwMDE0LTAwMDMzMC5odG0KKyMgLi4uCisjIE5vdmEgU2NvdGlhCisjIERheWxpZ2h0IHNhdmluZyB0aW1lIHdpbGwgYmUgZXh0ZW5kZWQgYnkgZm91ciB3ZWVrcyBzdGFydGluZyBpbiAyMDA3Li4uLgorIyBodHRwOi8vd3d3Lmdvdi5ucy5jYS9qdXN0L3JlZ3VsYXRpb25zL3JnMi8yMDA2L21hMTIwNi5wZGYKKyMKKyMgW0ZvciBOZXcgQnJ1bnN3aWNrXSB0aGUgbmV3IGxlZ2lzbGF0aW9uIGRpY3RhdGVzIHRoYXQgdGhlIHRpbWUgY2hhbmdlIGlzIHRvCisjIGJlIGRvbmUgYXQgMDI6MDAgaW5zdGVhZCBvZiAwMDowMS4KKyMgaHR0cDovL3d3dy5nbmIuY2EvMDA2Mi9hY3RzL0JCQS0yMDA2L0NoYXAtMTkucGRmCisjIC4uLgorIyBNYW5pdG9iYSBoYXMgdHJhZGl0aW9uYWxseSBjaGFuZ2VkIHRoZSBjbG9jayBldmVyeSBmYWxsIGF0IDAzOjAwLgorIyBBcyBvZiAyMDA2LCB0aGUgdHJhbnNpdGlvbiBpcyB0byB0YWtlIHBsYWNlIG9uZSBob3VyIGVhcmxpZXIgYXQgMDI6MDAuCisjIGh0dHA6Ly93ZWIyLmdvdi5tYi5jYS9sYXdzL3N0YXR1dGVzL2Njc20vbzAzMGUucGhwCisjIC4uLgorIyBbQWxiZXJ0YSwgT250YXJpbywgUXVlYmVjXSB3aWxsIGZvbGxvdyBVUyBydWxlcy4KKyMgaHR0cDovL3d3dy5xcC5nb3YuYWIuY2EvZG9jdW1lbnRzL3NwcmluZy9DSDAzXzA2LkNGTQorIyBodHRwOi8vd3d3LmUtbGF3cy5nb3Yub24uY2EvREJMYXdzL1NvdXJjZS9SZWdzL0VuZ2xpc2gvMjAwNi9SMDYxMTFfZS5odG0KKyMgaHR0cDovL3d3dzIucHVibGljYXRpb25zZHVxdWViZWMuZ291di5xYy5jYS9keW5hbWljU2VhcmNoL3RlbGVjaGFyZ2UucGhwP3R5cGU9NSZmaWxlPTIwMDZDMzlBLlBERgorIyAuLi4KKyMgUC5FLkkuIHdpbGwgZm9sbG93IFVTIHJ1bGVzLi4uLgorIyBodHRwOi8vd3d3LmFzc2VtYmx5LnBlLmNhL2JpbGxzL3BkZl9jaGFwdGVyLzYyLzMvY2hhcHRlci00MS5wZGYKKyMgLi4uCisjIFByb3ZpbmNlIG9mIE5ld2ZvdW5kbGFuZCBhbmQgTGFicmFkb3IuLi4uCisjIGh0dHA6Ly93d3cuaG9hLmdvdi5ubC5jYS9ob2EvYmlsbHMvQmlsbDA2MzQuaHRtCisjIC4uLgorIyBZdWtvbgorIyBodHRwOi8vd3d3Lmdvdi55ay5jYS9sZWdpc2xhdGlvbi9yZWdzL29pYzIwMDZfMTI3LnBkZgorIyAuLi4KKyMgTi5XLlQuIHdpbGwgZm9sbG93IFVTIHJ1bGVzLiAgV2hvZXZlciBtYWludGFpbnMgdGhlIGdvdmVybm1lbnQgd2ViIHNpdGUKKyMgZG9lcyBub3Qgc2VlbSB0byBiZWxpZXZlIGluIGJvb2ttYXJrcy4gIFRvIHNlZSB0aGUgbmV3cyByZWxlYXNlLCBjbGljayB0aGUKKyMgZm9sbG93aW5nIGxpbmsgYW5kIHNlYXJjaCBmb3IgIkRheWxpZ2h0IFNhdmluZ3MgVGltZSBDaGFuZ2UiLiAgUHJlc3MgdGhlCisjICJEYXlsaWdodCBTYXZpbmdzIFRpbWUgQ2hhbmdlIiBsaW5rOyBpdCB3aWxsIGZpcmUgb2ZmIGEgcG9wdXAgdXNpbmcKKyMgSmF2YVNjcmlwdC4KKyMgaHR0cDovL3d3dy5leGVjLmdvdi5udC5jYS9jdXJyZW50bmV3cy9jdXJyZW50UFIuYXNwP21vZGU9YXJjaGl2ZQorIyAuLi4KKyMgTnVuYXZ1dAorIyBBbiBhbWVuZG1lbnQgdG8gdGhlIEludGVycHJldGF0aW9uIEFjdCB3YXMgcmVnaXN0ZXJlZCBvbiBGZWJydWFyeSAxOS8yMDA3Li4uLgorIyBodHRwOi8vYWN0aW9uLmF0dGF2aWsuY2EvaG9tZS9qdXN0aWNlLWduL2F0dGFjaC8yMDA3L2dhejAycGFydDIucGRmCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wNC0yNSk6CisjIEguIERhdmlkIE1hdHRoZXdzIGFuZCBNYXJ5IFZpbmNlbnQncyBtYXAKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5jYW5hZGlhbmdlb2dyYXBoaWMuY2EvTWFnYXppbmUvU085OC9nZW9tYXAuYXNwIj4KKyMgIkl0J3MgYWJvdXQgVElNRSIsIF9DYW5hZGlhbiBHZW9ncmFwaGljXyAoU2VwdGVtYmVyLU9jdG9iZXIgMTk5OCkKKyMgPC9hPiBjb250YWlucyBkZXRhaWxlZCBib3VuZGFyaWVzIGZvciByZWdpb25zIG9ic2VydmluZyBub25zdGFuZGFyZAorIyB0aW1lIGFuZCBkYXlsaWdodCBzYXZpbmcgdGltZSBhcnJhbmdlbWVudHMgaW4gQ2FuYWRhIGNpcmNhIDE5OTguCisjCisjIElOTVMsIHRoZSBJbnN0aXR1dGUgZm9yIE5hdGlvbmFsIE1lYXN1cmVtZW50IFN0YW5kYXJkcyBpbiBPdHRhd2EsIGhhcyA8YQorIyBocmVmPSJodHRwOi8vaW5tcy1pZW5tLm5yYy1jbnJjLmdjLmNhL2VuL3RpbWVfc2VydmljZXMvZGF5bGlnaHRfc2F2aW5nX2UucGhwIj4KKyMgaW5mb3JtYXRpb24gYWJvdXQgc3RhbmRhcmQgYW5kIGRheWxpZ2h0IHNhdmluZyB0aW1lIHpvbmVzIGluIENhbmFkYS4KKyMgPC9hPiAodXBkYXRlZCBwZXJpb2RpY2FsbHkpLgorIyBJdHMgdW5vZmZpY2lhbCBpbmZvcm1hdGlvbiBpcyBvZnRlbiB0YWtlbiBmcm9tIE1hdHRoZXdzIGFuZCBWaW5jZW50LgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDYtMjcpOgorIyBGb3Igbm93LCBhc3N1bWUgYWxsIG9mIERTVC1vYnNlcnZpbmcgQ2FuYWRhIHdpbGwgZmFsbCBpbnRvIGxpbmUgd2l0aCB0aGUKKyMgbmV3IFVTIERTVCBydWxlcywKKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJQ2FuYWRhCTE5MTgJb25seQktCUFwcgkxNAkyOjAwCTE6MDAJRAorUnVsZQlDYW5hZGEJMTkxOAlvbmx5CS0JT2N0CTMxCTI6MDAJMAlTCitSdWxlCUNhbmFkYQkxOTQyCW9ubHkJLQlGZWIJIDkJMjowMAkxOjAwCVcgIyBXYXIKK1J1bGUJQ2FuYWRhCTE5NDUJb25seQktCUF1ZwkxNAkyMzowMHUJMTowMAlQICMgUGVhY2UKK1J1bGUJQ2FuYWRhCTE5NDUJb25seQktCVNlcAkzMAkyOjAwCTAJUworUnVsZQlDYW5hZGEJMTk3NAkxOTg2CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJQ2FuYWRhCTE5NzQJMjAwNgktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCUNhbmFkYQkxOTg3CTIwMDYJLQlBcHIJU3VuPj0xCTI6MDAJMTowMAlECitSdWxlCUNhbmFkYQkyMDA3CW1heAktCU1hcglTdW4+PTgJMjowMAkxOjAwCUQKK1J1bGUJQ2FuYWRhCTIwMDcJbWF4CS0JTm92CVN1bj49MQkyOjAwCTAJUworCisKKyMgTmV3Zm91bmRsYW5kIGFuZCBMYWJyYWRvcgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDAtMTAtMDIpOgorIyBNYXR0aGV3cyBhbmQgVmluY2VudCAoMTk5OCkgd3JpdGUgdGhhdCBMYWJyYWRvciBzaG91bGQgdXNlIE5TVC9ORFQsCisjIGJ1dCB0aGUgb25seSBwYXJ0IG9mIExhYnJhZG9yIHRoYXQgZm9sbG93cyB0aGUgcnVsZXMgaXMgdGhlCisjIHNvdXRoZWFzdCBjb3JuZXIsIGluY2x1ZGluZyBQb3J0IEhvcGUgU2ltcHNvbiBhbmQgTWFyeSdzIEhhcmJvdXIsCisjIGJ1dCBleGNsdWRpbmcsIHNheSwgQmxhY2sgVGlja2xlLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlTdEpvaG5zCTE5MTcJb25seQktCUFwcgkgOAkyOjAwCTE6MDAJRAorUnVsZQlTdEpvaG5zCTE5MTcJb25seQktCVNlcAkxNwkyOjAwCTAJUworIyBXaGl0bWFuIGdpdmVzIDE5MTkgQXByIDUgYW5kIDE5MjAgQXByIDU7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlTdEpvaG5zCTE5MTkJb25seQktCU1heQkgNQkyMzowMAkxOjAwCUQKK1J1bGUJU3RKb2hucwkxOTE5CW9ubHkJLQlBdWcJMTIJMjM6MDAJMAlTCisjIEZvciAxOTMxLTE5MzUgV2hpdG1hbiBnaXZlcyBBcHIgc2FtZSBkYXRlOyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJU3RKb2hucwkxOTIwCTE5MzUJLQlNYXkJU3VuPj0xCTIzOjAwCTE6MDAJRAorUnVsZQlTdEpvaG5zCTE5MjAJMTkzNQktCU9jdAlsYXN0U3VuCTIzOjAwCTAJUworIyBGb3IgMTkzNi0xOTQxIFdoaXRtYW4gZ2l2ZXMgTWF5IFN1bj49OCBhbmQgT2N0IFN1bj49MTsgZ28gd2l0aCBTaGFua3MgJgorIyBQb3R0ZW5nZXIuCitSdWxlCVN0Sm9obnMJMTkzNgkxOTQxCS0JTWF5CU1vbj49OQkwOjAwCTE6MDAJRAorUnVsZQlTdEpvaG5zCTE5MzYJMTk0MQktCU9jdAlNb24+PTIJMDowMAkwCVMKKyMgV2hpdG1hbiBnaXZlcyB0aGUgZm9sbG93aW5nIHRyYW5zaXRpb25zOgorIyAxOTQyIDAzLTAxLzEyLTMxLCAxOTQzIDA1LTMwLzA5LTA1LCAxOTQ0IDA3LTEwLzA5LTAyLCAxOTQ1IDAxLTAxLzEwLTA3CisjIGJ1dCBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlciBhbmQgYXNzdW1lIHRoZXkgdXNlZCBDYW5hZGlhbiBydWxlcy4KKyMgRm9yIDE5NDYtOSBXaGl0bWFuIGdpdmVzIE1heSA1LDQsOSwxIC0gT2N0IDEsNSwzLDIsIGFuZCBmb3IgMTk1MCBoZSBnaXZlcworIyBBcHIgMzAgLSBTZXAgMjQ7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlTdEpvaG5zCTE5NDYJMTk1MAktCU1heQlTdW4+PTgJMjowMAkxOjAwCUQKK1J1bGUJU3RKb2hucwkxOTQ2CTE5NTAJLQlPY3QJU3VuPj0yCTI6MDAJMAlTCitSdWxlCVN0Sm9obnMJMTk1MQkxOTg2CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJU3RKb2hucwkxOTUxCTE5NTkJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlTdEpvaG5zCTE5NjAJMTk4NgktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDAtMTAtMDIpOgorIyBJTk1TICgyMDAwLTA5LTEyKSBzYXlzIHRoYXQsIHNpbmNlIDE5ODggYXQgbGVhc3QsIE5ld2ZvdW5kbGFuZCBzd2l0Y2hlcworIyBhdCAwMDowMSBsb2NhbCB0aW1lLiAgRm9yIG5vdywgYXNzdW1lIGl0IHN0YXJ0ZWQgaW4gMTk4Ny4KK1J1bGUJU3RKb2hucwkxOTg3CW9ubHkJLQlBcHIJU3VuPj0xCTA6MDEJMTowMAlECitSdWxlCVN0Sm9obnMJMTk4NwkyMDA2CS0JT2N0CWxhc3RTdW4JMDowMQkwCVMKK1J1bGUJU3RKb2hucwkxOTg4CW9ubHkJLQlBcHIJU3VuPj0xCTA6MDEJMjowMAlERAorUnVsZQlTdEpvaG5zCTE5ODkJMjAwNgktCUFwcglTdW4+PTEJMDowMQkxOjAwCUQKK1J1bGUJU3RKb2hucwkyMDA3CW1heAktCU1hcglTdW4+PTgJMDowMQkxOjAwCUQKK1J1bGUJU3RKb2hucwkyMDA3CW1heAktCU5vdglTdW4+PTEJMDowMQkwCVMKKyMKKyMgU3QgSm9obidzIGhhcyBhbiBhcG9zdHJvcGhlLCBidXQgUG9zaXggZmlsZSBuYW1lcyBjYW4ndCBoYXZlIGFwb3N0cm9waGVzLgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL1N0X0pvaG5zCS0zOjMwOjUyIC0JTE1UCTE4ODQKKwkJCS0zOjMwOjUyIFN0Sm9obnMgTiVzVAkxOTE4CisJCQktMzozMDo1MiBDYW5hZGEJTiVzVAkxOTE5CisJCQktMzozMDo1MiBTdEpvaG5zIE4lc1QJMTkzNSBNYXIgMzAKKwkJCS0zOjMwCVN0Sm9obnMJTiVzVAkxOTQyIE1heSAxMQorCQkJLTM6MzAJQ2FuYWRhCU4lc1QJMTk0NgorCQkJLTM6MzAJU3RKb2hucwlOJXNUCisKKyMgbW9zdCBvZiBlYXN0IExhYnJhZG9yCisKKyMgVGhlIG5hbWUgYEhhcHB5IFZhbGxleS1Hb29zZSBCYXknIGlzIHRvbyBsb25nOyB1c2UgYEdvb3NlIEJheScuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvR29vc2VfQmF5CS00OjAxOjQwIC0JTE1UCTE4ODQgIyBIYXBweSBWYWxsZXktR29vc2UgQmF5CisJCQktMzozMDo1MiAtCU5TVAkxOTE4CisJCQktMzozMDo1MiBDYW5hZGEgTiVzVAkxOTE5CisJCQktMzozMDo1MiAtCU5TVAkxOTM1IE1hciAzMAorCQkJLTM6MzAJLQlOU1QJMTkzNgorCQkJLTM6MzAJU3RKb2hucwlOJXNUCTE5NDIgTWF5IDExCisJCQktMzozMAlDYW5hZGEJTiVzVAkxOTQ2CisJCQktMzozMAlTdEpvaG5zCU4lc1QJMTk2NiBNYXIgMTUgMjowMAorCQkJLTQ6MDAJU3RKb2hucwlBJXNUCisKKworIyB3ZXN0IExhYnJhZG9yLCBOb3ZhIFNjb3RpYSwgUHJpbmNlIEVkd2FyZCBJCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIFNoYW5rcyAmIFBvdHRlbmdlciB3cml0ZSB0aGF0IHNpbmNlIDE5NzAgbW9zdCBvZiB0aGlzIHJlZ2lvbiBoYXMgYmVlbiBsaWtlCisjIEhhbGlmYXguICBNYW55IGxvY2FsZXMgZGlkIG5vdCBvYnNlcnZlIHBlYWNldGltZSBEU1QgdW50aWwgMTk3MjsKKyMgR2xhY2UgQmF5LCBOUyBpcyB0aGUgbGFyZ2VzdCB0aGF0IHdlIGtub3cgb2YuCisjIFNoYW5rcyAmIFBvdHRlbmdlciBhbHNvIHdyaXRlIHRoYXQgTGl2ZXJwb29sLCBOUyB3YXMgdGhlIG9ubHkgdG93bgorIyBpbiBDYW5hZGEgdG8gb2JzZXJ2ZSBEU1QgaW4gMTk3MSBidXQgbm90IDE5NzA7IGZvciBub3cgd2UnbGwgYXNzdW1lCisjIHRoaXMgaXMgYSB0eXBvLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlIYWxpZmF4CTE5MTYJb25seQktCUFwcgkgMQkwOjAwCTE6MDAJRAorUnVsZQlIYWxpZmF4CTE5MTYJb25seQktCU9jdAkgMQkwOjAwCTAJUworUnVsZQlIYWxpZmF4CTE5MjAJb25seQktCU1heQkgOQkwOjAwCTE6MDAJRAorUnVsZQlIYWxpZmF4CTE5MjAJb25seQktCUF1ZwkyOQkwOjAwCTAJUworUnVsZQlIYWxpZmF4CTE5MjEJb25seQktCU1heQkgNgkwOjAwCTE6MDAJRAorUnVsZQlIYWxpZmF4CTE5MjEJMTkyMgktCVNlcAkgNQkwOjAwCTAJUworUnVsZQlIYWxpZmF4CTE5MjIJb25seQktCUFwcgkzMAkwOjAwCTE6MDAJRAorUnVsZQlIYWxpZmF4CTE5MjMJMTkyNQktCU1heQlTdW4+PTEJMDowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTIzCW9ubHkJLQlTZXAJIDQJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTI0CW9ubHkJLQlTZXAJMTUJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTI1CW9ubHkJLQlTZXAJMjgJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTI2CW9ubHkJLQlNYXkJMTYJMDowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTI2CW9ubHkJLQlTZXAJMTMJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTI3CW9ubHkJLQlNYXkJIDEJMDowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTI3CW9ubHkJLQlTZXAJMjYJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTI4CTE5MzEJLQlNYXkJU3VuPj04CTA6MDAJMTowMAlECitSdWxlCUhhbGlmYXgJMTkyOAlvbmx5CS0JU2VwCSA5CTA6MDAJMAlTCitSdWxlCUhhbGlmYXgJMTkyOQlvbmx5CS0JU2VwCSAzCTA6MDAJMAlTCitSdWxlCUhhbGlmYXgJMTkzMAlvbmx5CS0JU2VwCTE1CTA6MDAJMAlTCitSdWxlCUhhbGlmYXgJMTkzMQkxOTMyCS0JU2VwCU1vbj49MjQJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTMyCW9ubHkJLQlNYXkJIDEJMDowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTMzCW9ubHkJLQlBcHIJMzAJMDowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTMzCW9ubHkJLQlPY3QJIDIJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTM0CW9ubHkJLQlNYXkJMjAJMDowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTM0CW9ubHkJLQlTZXAJMTYJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTM1CW9ubHkJLQlKdW4JIDIJMDowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTM1CW9ubHkJLQlTZXAJMzAJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTM2CW9ubHkJLQlKdW4JIDEJMDowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTM2CW9ubHkJLQlTZXAJMTQJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTM3CTE5MzgJLQlNYXkJU3VuPj0xCTA6MDAJMTowMAlECitSdWxlCUhhbGlmYXgJMTkzNwkxOTQxCS0JU2VwCU1vbj49MjQJMDowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTM5CW9ubHkJLQlNYXkJMjgJMDowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTQwCTE5NDEJLQlNYXkJU3VuPj0xCTA6MDAJMTowMAlECitSdWxlCUhhbGlmYXgJMTk0NgkxOTQ5CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTQ2CTE5NDkJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlIYWxpZmF4CTE5NTEJMTk1NAktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCUhhbGlmYXgJMTk1MQkxOTU0CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJSGFsaWZheAkxOTU2CTE5NTkJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlIYWxpZmF4CTE5NTYJMTk1OQktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCUhhbGlmYXgJMTk2MgkxOTczCS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJSGFsaWZheAkxOTYyCTE5NzMJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL0hhbGlmYXgJLTQ6MTQ6MjQgLQlMTVQJMTkwMiBKdW4gMTUKKwkJCS00OjAwCUhhbGlmYXgJQSVzVAkxOTE4CisJCQktNDowMAlDYW5hZGEJQSVzVAkxOTE5CisJCQktNDowMAlIYWxpZmF4CUElc1QJMTk0MiBGZWIgIDkgMjowMHMKKwkJCS00OjAwCUNhbmFkYQlBJXNUCTE5NDYKKwkJCS00OjAwCUhhbGlmYXgJQSVzVAkxOTc0CisJCQktNDowMAlDYW5hZGEJQSVzVAorWm9uZSBBbWVyaWNhL0dsYWNlX0JheQktMzo1OTo0OCAtCUxNVAkxOTAyIEp1biAxNQorCQkJLTQ6MDAJQ2FuYWRhCUElc1QJMTk1MworCQkJLTQ6MDAJSGFsaWZheAlBJXNUCTE5NTQKKwkJCS00OjAwCS0JQVNUCTE5NzIKKwkJCS00OjAwCUhhbGlmYXgJQSVzVAkxOTc0CisJCQktNDowMAlDYW5hZGEJQSVzVAorCisjIE5ldyBCcnVuc3dpY2sKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA3LTAxLTMxKToKKyMgVGhlIFRpbWUgRGVmaW5pdGlvbiBBY3QgPGh0dHA6Ly93d3cuZ25iLmNhLzAwNjIvUERGLWFjdHMvdC0wNi5wZGY+CisjIHNheXMgdGhleSBjaGFuZ2VkIGF0IDAwOjAxIHRocm91Z2ggMjAwNiwgYW5kCisjIDxodHRwOi8vd3d3LmNhbmxpaS5vcmcvbmIvbGF3cy9zdGEvdC02LzIwMDMwMTI3L3dob2xlLmh0bWw+IG1ha2VzIGl0CisjIGNsZWFyIHRoYXQgdGhpcyB3YXMgdGhlIGNhc2Ugc2luY2UgYXQgbGVhc3QgMTk5My4KKyMgRm9yIG5vdywgYXNzdW1lIGl0IHN0YXJ0ZWQgaW4gMTk5My4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJTW9uY3RvbgkxOTMzCTE5MzUJLQlKdW4JU3VuPj04CTE6MDAJMTowMAlECitSdWxlCU1vbmN0b24JMTkzMwkxOTM1CS0JU2VwCVN1bj49OAkxOjAwCTAJUworUnVsZQlNb25jdG9uCTE5MzYJMTkzOAktCUp1bglTdW4+PTEJMTowMAkxOjAwCUQKK1J1bGUJTW9uY3RvbgkxOTM2CTE5MzgJLQlTZXAJU3VuPj0xCTE6MDAJMAlTCitSdWxlCU1vbmN0b24JMTkzOQlvbmx5CS0JTWF5CTI3CTE6MDAJMTowMAlECitSdWxlCU1vbmN0b24JMTkzOQkxOTQxCS0JU2VwCVNhdD49MjEJMTowMAkwCVMKK1J1bGUJTW9uY3RvbgkxOTQwCW9ubHkJLQlNYXkJMTkJMTowMAkxOjAwCUQKK1J1bGUJTW9uY3RvbgkxOTQxCW9ubHkJLQlNYXkJIDQJMTowMAkxOjAwCUQKK1J1bGUJTW9uY3RvbgkxOTQ2CTE5NzIJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlNb25jdG9uCTE5NDYJMTk1NgktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCU1vbmN0b24JMTk1NwkxOTcyCS0JT2N0CWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJTW9uY3RvbgkxOTkzCTIwMDYJLQlBcHIJU3VuPj0xCTA6MDEJMTowMAlECitSdWxlCU1vbmN0b24JMTk5MwkyMDA2CS0JT2N0CWxhc3RTdW4JMDowMQkwCVMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9Nb25jdG9uCS00OjE5OjA4IC0JTE1UCTE4ODMgRGVjICA5CisJCQktNTowMAktCUVTVAkxOTAyIEp1biAxNQorCQkJLTQ6MDAJQ2FuYWRhCUElc1QJMTkzMworCQkJLTQ6MDAJTW9uY3RvbglBJXNUCTE5NDIKKwkJCS00OjAwCUNhbmFkYQlBJXNUCTE5NDYKKwkJCS00OjAwCU1vbmN0b24JQSVzVAkxOTczCisJCQktNDowMAlDYW5hZGEJQSVzVAkxOTkzCisJCQktNDowMAlNb25jdG9uCUElc1QJMjAwNworCQkJLTQ6MDAJQ2FuYWRhCUElc1QKKworIyBRdWViZWMKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTA3LTA5KToKKyMgU2hhbmtzICYgUG90dGVuZ2VyIHdyaXRlIHRoYXQgc2luY2UgMTk3MCBtb3N0IG9mIFF1ZWJlYyBoYXMgYmVlbgorIyBsaWtlIE1vbnRyZWFsLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDYtMjcpOgorIyBNYXR0aGV3cyBhbmQgVmluY2VudCAoMTk5OCkgYWxzbyB3cml0ZSB0aGF0IFF1ZWJlYyBlYXN0IG9mIHRoZSAtNjMKKyMgbWVyaWRpYW4gaXMgc3VwcG9zZWQgdG8gb2JzZXJ2ZSBBU1QsIGJ1dCByZXNpZGVudHMgYXMgZmFyIGVhc3QgYXMKKyMgTmF0YXNocXVhbiB1c2UgRVNUL0VEVCwgYW5kIHJlc2lkZW50cyBlYXN0IG9mIE5hdGFzaHF1YW4gdXNlIEFTVC4KKyMgSW4gIk9mZmljaWFsIHRpbWUgaW4gUXVlYmVjIiB0aGUgUXVlYmVjIGRlcGFydG1lbnQgb2YganVzdGljZSB3cml0ZXMgaW4KKyMgaHR0cDovL3d3dy5qdXN0aWNlLmdvdXYucWMuY2EvZW5nbGlzaC9wdWJsaWNhdGlvbnMvZ2VuZXJhbGUvdGVtcHMtcmVnbC0xLWEuaHRtCisjIHRoYXQgIlRoZSByZXNpZGVudHMgb2YgdGhlIE11bmljaXBhbGl0eSBvZiB0aGUKKyMgQ290ZS1Ob3JkLWR1LUdvbGZlLVNhaW50LUxhdXJlbnQgYW5kIHRoZSBtdW5pY2lwYWxpdGllcyBvZiBTYWludC1BdWd1c3RpbiwKKyMgQm9ubmUtRXNwZXJhbmNlIGFuZCBCbGFuYy1TYWJsb24gYXBwbHkgdGhlIE9mZmljaWFsIFRpbWUgQWN0IGFzIGl0IGlzCisjIHdyaXR0ZW4gYW5kIHVzZSBBdGxhbnRpYyBzdGFuZGFyZCB0aW1lIGFsbCB5ZWFyIHJvdW5kLiBUaGUgc2FtZSBhcHBsaWVzIHRvCisjIHRoZSByZXNpZGVudHMgb2YgdGhlIE5hdGl2ZSBmYWNpbGl0aWVzIGFsb25nIHRoZSBsb3dlciBOb3J0aCBTaG9yZS4iCisjIDxodHRwOi8vd3d3LmFzc25hdC5xYy5jYS9lbmcvMzdsZWdpc2xhdHVyZTIvUHJvamV0cy1sb2kvUHVibGljcy8wNi1hMDAyLmh0bT4KKyMgc2F5cyB0aGlzIGNvbW1vbiBwcmFjdGljZSB3YXMgY29kaWZpZWQgaW50byBsYXcgYXMgb2YgMjAwNy4KKyMgRm9yIGxhY2sgb2YgYmV0dGVyIGluZm8sIGd1ZXNzIHRoaXMgcHJhY3RpY2UgYmVnYW4gYXJvdW5kIDE5NzAsIGNvbnRyYSB0bworIyBTaGFua3MgJiBQb3R0ZW5nZXIgd2hvIGhhdmUgdGhpcyByZWdpb24gb2JzZXJ2aW5nIEFTVC9BRFQuCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCU1vbnQJMTkxNwlvbmx5CS0JTWFyCTI1CTI6MDAJMTowMAlECitSdWxlCU1vbnQJMTkxNwlvbmx5CS0JQXByCTI0CTA6MDAJMAlTCitSdWxlCU1vbnQJMTkxOQlvbmx5CS0JTWFyCTMxCTI6MzAJMTowMAlECitSdWxlCU1vbnQJMTkxOQlvbmx5CS0JT2N0CTI1CTI6MzAJMAlTCitSdWxlCU1vbnQJMTkyMAlvbmx5CS0JTWF5CSAyCTI6MzAJMTowMAlECitSdWxlCU1vbnQJMTkyMAkxOTIyCS0JT2N0CVN1bj49MQkyOjMwCTAJUworUnVsZQlNb250CTE5MjEJb25seQktCU1heQkgMQkyOjAwCTE6MDAJRAorUnVsZQlNb250CTE5MjIJb25seQktCUFwcgkzMAkyOjAwCTE6MDAJRAorUnVsZQlNb250CTE5MjQJb25seQktCU1heQkxNwkyOjAwCTE6MDAJRAorUnVsZQlNb250CTE5MjQJMTkyNgktCVNlcAlsYXN0U3VuCTI6MzAJMAlTCitSdWxlCU1vbnQJMTkyNQkxOTI2CS0JTWF5CVN1bj49MQkyOjAwCTE6MDAJRAorIyBUaGUgMTkyNy10by0xOTM3IHJ1bGVzIGNhbiBiZSBleHByZXNzZWQgbW9yZSBzaW1wbHkgYXMKKyMgUnVsZQlNb250CTE5MjcJMTkzNwktCUFwcglsYXN0U2F0CTI0OjAwCTE6MDAJRAorIyBSdWxlCU1vbnQJMTkyNwkxOTM3CS0JU2VwCWxhc3RTYXQJMjQ6MDAJMAlTCisjIFRoZSBydWxlcyBiZWxvdyBhdm9pZCB1c2Ugb2YgMjQ6MDAKKyMgKHdoaWNoIHByZS0xOTk4IHZlcnNpb25zIG9mIHppYyBjYW5ub3QgaGFuZGxlKS4KK1J1bGUJTW9udAkxOTI3CW9ubHkJLQlNYXkJMQkwOjAwCTE6MDAJRAorUnVsZQlNb250CTE5MjcJMTkzMgktCVNlcAlsYXN0U3VuCTA6MDAJMAlTCitSdWxlCU1vbnQJMTkyOAkxOTMxCS0JQXByCWxhc3RTdW4JMDowMAkxOjAwCUQKK1J1bGUJTW9udAkxOTMyCW9ubHkJLQlNYXkJMQkwOjAwCTE6MDAJRAorUnVsZQlNb250CTE5MzMJMTk0MAktCUFwcglsYXN0U3VuCTA6MDAJMTowMAlECitSdWxlCU1vbnQJMTkzMwlvbmx5CS0JT2N0CTEJMDowMAkwCVMKK1J1bGUJTW9udAkxOTM0CTE5MzkJLQlTZXAJbGFzdFN1bgkwOjAwCTAJUworUnVsZQlNb250CTE5NDYJMTk3MwktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCU1vbnQJMTk0NQkxOTQ4CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJTW9udAkxOTQ5CTE5NTAJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlNb250CTE5NTEJMTk1NgktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCU1vbnQJMTk1NwkxOTczCS0JT2N0CWxhc3RTdW4JMjowMAkwCVMKKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL0JsYW5jLVNhYmxvbiAtMzo0ODoyOCAtCUxNVAkxODg0CisJCQktNDowMAlDYW5hZGEJQSVzVAkxOTcwCisJCQktNDowMAktCUFTVAorWm9uZSBBbWVyaWNhL01vbnRyZWFsCS00OjU0OjE2IC0JTE1UCTE4ODQKKwkJCS01OjAwCU1vbnQJRSVzVAkxOTE4CisJCQktNTowMAlDYW5hZGEJRSVzVAkxOTE5CisJCQktNTowMAlNb250CUUlc1QJMTk0MiBGZWIgIDkgMjowMHMKKwkJCS01OjAwCUNhbmFkYQlFJXNUCTE5NDYKKwkJCS01OjAwCU1vbnQJRSVzVAkxOTc0CisJCQktNTowMAlDYW5hZGEJRSVzVAorCisKKyMgT250YXJpbworCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDctMDkpOgorIyBTaGFua3MgJiBQb3R0ZW5nZXIgd3JpdGUgdGhhdCBzaW5jZSAxOTcwIG1vc3Qgb2YgT250YXJpbyBoYXMgYmVlbiBsaWtlCisjIFRvcm9udG8uCisjIFRodW5kZXIgQmF5IHNraXBwZWQgRFNUIGluIDE5NzMuCisjIE1hbnkgc21hbGxlciBsb2NhbGVzIGRpZCBub3Qgb2JzZXJ2ZSBwZWFjZXRpbWUgRFNUIHVudGlsIDE5NzQ7CisjIE5pcGlnb24gKEVTVCkgYW5kIFJhaW55IFJpdmVyIChDU1QpIGFyZSB0aGUgbGFyZ2VzdCB0aGF0IHdlIGtub3cgb2YuCisjIEZhciB3ZXN0IE9udGFyaW8gaXMgbGlrZSBXaW5uaXBlZzsgZmFyIGVhc3QgUXVlYmVjIGlzIGxpa2UgSGFsaWZheC4KKworIyBGcm9tIE1hcmsgQnJhZGVyICgyMDAzLTA3LTI2KToKKyMgW0FjY29yZGluZyB0byB0aGUgVG9yb250byBTdGFyXSBPcmlsbGlhLCBPbnRhcmlvLCBhZG9wdGVkIERTVAorIyBlZmZlY3RpdmUgU2F0dXJkYXksIDE5MTItMDYtMjIsIDIyOjAwOyB0aGUgYXJ0aWNsZSBtZW50aW9ucyB0aGF0CisjIFBvcnQgQXJ0aHVyIChub3cgcGFydCBvZiBUaHVuZGVyIEJheSwgT250YXJpbykgYXMgd2VsbCBhcyBNb29zZSBKYXcKKyMgaGF2ZSBhbHJlYWR5IGRvbmUgc28uICBJbiBPcmlsbGlhIERTVCB3YXMgdG8gcnVuIHVudGlsIFNhdHVyZGF5LAorIyAxOTEyLTA4LTMxIChubyB0aW1lIG1lbnRpb25lZCksIGJ1dCBpdCB3YXMgbWV0IHdpdGggY29uc2lkZXJhYmxlCisjIGhvc3RpbGl0eSBmcm9tIGNlcnRhaW4gc2VnbWVudHMgb2YgdGhlIHB1YmxpYywgYW5kIHdhcyByZXZva2VkIGFmdGVyCisjIG9ubHkgdHdvIHdlZWtzIC0tIEkgY29waWVkIGl0IGFzIFNhdHVyZGF5LCAxOTEyLTA3LTA3LCAyMjowMCwgYnV0CisjIHByZXN1bWFibHkgdGhhdCBzaG91bGQgYmUgLTA3LTA2LiAgKDE5MTItMDYtMTksIC0wNy0xMjsgYWxzbyBsZXR0ZXJzCisjIGVhcmxpZXIgaW4gSnVuZSkuCisjCisjIEtlbm9yYSwgT250YXJpbywgd2FzIHRvIGFiYW5kb24gRFNUIG9uIDE5MTQtMDYtMDEgKC0wNS0yMSkuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMTk5Ny0xMC0xNyk6CisjIE1hcmsgQnJhZGVyIHdyaXRlcyB0aGF0IGFuIGFydGljbGUgaW4gdGhlIDE5OTctMTAtMTQgVG9yb250byBTdGFyCisjIHNheXMgdGhhdCBBdGlrb2thbiwgT250YXJpbyBjdXJyZW50bHkgZG9lcyBub3Qgb2JzZXJ2ZSBEU1QsCisjIGJ1dCB3aWxsIHZvdGUgb24gMTEtMTAgd2hldGhlciB0byB1c2UgRVNUL0VEVC4KKyMgSGUgYWxzbyB3cml0ZXMgdGhhdCB0aGUKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5nb3Yub24uY2EvTUJTL2VuZ2xpc2gvcHVibGljYXRpb25zL3N0YXRyZWdzL2NvbnR0ZXh0Lmh0bWwiPgorIyBPbnRhcmlvIFRpbWUgQWN0ICgxOTkwLCBDaGFwdGVyIFQuOSkKKyMgPC9hPgorIyBzYXlzIHRoYXQgT250YXJpbyBlYXN0IG9mIDkwVyB1c2VzIEVTVC9FRFQsIGFuZCB3ZXN0IG9mIDkwVyB1c2VzIENTVC9DRFQuCisjIE9mZmljaWFsbHkgQXRpa29rYW4gaXMgdGhlcmVmb3JlIG9uIENTVC9DRFQsIGFuZCBtb3N0IGxpa2VseSB0aGlzIHJlcG9ydAorIyBjb25jZXJucyBhIG5vbi1vZmZpY2lhbCB0aW1lIG9ic2VydmVkIGFzIGEgbWF0dGVyIG9mIGxvY2FsIHByYWN0aWNlLgorIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDAwLTEwLTAyKToKKyMgTWF0dGhld3MgYW5kIFZpbmNlbnQgKDE5OTgpIHdyaXRlIHRoYXQgQXRpa29rYW4sIFBpY2tsZSBMYWtlLCBhbmQKKyMgTmV3IE9zbmFidXJnaCBvYnNlcnZlIENTVCBhbGwgeWVhciwgdGhhdCBCaWcgVHJvdXQgTGFrZSBvYnNlcnZlcworIyBDU1QvQ0RULCBhbmQgdGhhdCBVcHNhbGEgYW5kIFNoZWJhbmRvd2FuIG9ic2VydmUgRVNUL0VEVCwgYWxsIGluCisjIHZpb2xhdGlvbiBvZiB0aGUgb2ZmaWNpYWwgT250YXJpbyBydWxlcy4KKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wNy0wOSk6CisjIENocmlzIFdhbHRvbiAoMjAwNi0wNy0wNikgbWVudGlvbmVkIGFuIGFydGljbGUgYnkgU3RlcGhhbmllIE1hY0xlbGxhbiBpbiB0aGUKKyMgMjAwNS0wNy0yMSBDaHJvbmljbGUtSm91cm5hbCwgd2hpY2ggc2FpZDoKKyMKKyMJVGhlIGNsb2NrcyBpbiBBdGlrb2thbiBzdGF5IHNldCBvbiBzdGFuZGFyZCB0aW1lIHllYXItcm91bmQuCisjCVRoaXMgbWVhbnMgdGhleSBzcGVuZCBhYm91dCBoYWxmIHRoZSB0aW1lIG9uIGNlbnRyYWwgdGltZSBhbmQKKyMJdGhlIG90aGVyIGhhbGYgb24gZWFzdGVybiB0aW1lLgorIworIwlGb3IgdGhlIG1vc3QgcGFydCwgdGhlIHN5c3RlbSB3b3JrcywgTWF5b3IgRGVubmlzIEJyb3duIHNhaWQuCisjCisjCSJUaGUgbWFqb3JpdHkgb2YgYnVzaW5lc3NlcyBpbiBBdGlrb2thbiBkZWFsIG1vcmUgd2l0aCBFYXN0ZXJuCisjCUNhbmFkYSwgYnV0IHRoZXJlIGFyZSBzb21lIHRoYXQgZGVhbCB3aXRoIFdlc3Rlcm4gQ2FuYWRhLCIgaGUKKyMJc2FpZC4gICJJIGRvbid0IHNlZSBhbnkgY2hhbmdlcyBoYXBwZW5pbmcgaGVyZS4iCisjCisjIFdhbHRvbiBhbHNvIHdyaXRlcyAiU3VwcG9zZWRseSBQaWNrbGUgTGFrZSBhbmQgTWlzaGtlZWdvZ2FtYW5nCisjIFtOZXcgT3NuYWJ1cmdoXSBmb2xsb3cgdGhlIHNhbWUgcHJhY3RpY2UuIgorCisjIEZyb20gR2FycnkgTWNLaW5ub24gKDIwMDYtMDctMTQpIHZpYSBDaHJpcyBXYWx0b246CisjIEkgY2hhdHRlZCB3aXRoIGEgbWVtYmVyIG9mIG15IGJvYXJkIHdobyBoYXMgYW4gb3V0c3RhbmRpbmcgbWVtb3J5CisjIGFuZCBhIGxvbmcgaGlzdG9yeSBpbiBBdGlrb2thbiAoYW5kIGluIHRoZSB0ZWxlY29tIGluZHVzdHJ5KSBhbmQgaGUKKyMgY2FuIHNheSBmb3IgY2VydGFpbiB0aGF0IEF0aWtva2FuIGhhcyBiZWVuIHByYWN0aWNpbmcgdGhlIGN1cnJlbnQKKyMgdGltZSBrZWVwaW5nIHNpbmNlIDE5NTIsIGF0IGxlYXN0LgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDctMTcpOgorIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IHRoYXQgQXRpa29rYW4gaGFzIGFncmVlZCB3aXRoIFJhaW55IFJpdmVyCisjIGV2ZXIgc2luY2Ugc3RhbmRhcmQgdGltZSB3YXMgaW50cm9kdWNlZCwgYnV0IHRoZSBpbmZvcm1hdGlvbiBmcm9tCisjIE1jS2lubm9uIHNvdW5kcyBtb3JlIGF1dGhvcml0YXRpdmUuICBGb3Igbm93LCBhc3N1bWUgdGhhdCBBdGlrb2thbgorIyBzd2l0Y2hlZCB0byBFU1QgaW1tZWRpYXRlbHkgYWZ0ZXIgV1dJSSBlcmEgZGF5bGlnaHQgc2F2aW5nIHRpbWUKKyMgZW5kZWQuICBUaGlzIG1hdGNoZXMgdGhlIG9sZCAobGVzcy1wb3B1bG91cykgQW1lcmljYS9Db3JhbF9IYXJib3VyCisjIGVudHJ5IHNpbmNlIG91ciBjdXRvZmYgZGF0ZSBvZiAxOTcwLCBzbyB3ZSBjYW4gbW92ZQorIyBBbWVyaWNhL0NvcmFsX0hhcmJvdXIgdG8gdGhlICdiYWNrd2FyZCcgZmlsZS4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJVG9yb250bwkxOTE5CW9ubHkJLQlNYXIJMzAJMjM6MzAJMTowMAlECitSdWxlCVRvcm9udG8JMTkxOQlvbmx5CS0JT2N0CTI2CTA6MDAJMAlTCitSdWxlCVRvcm9udG8JMTkyMAlvbmx5CS0JTWF5CSAyCTI6MDAJMTowMAlECitSdWxlCVRvcm9udG8JMTkyMAlvbmx5CS0JU2VwCTI2CTA6MDAJMAlTCitSdWxlCVRvcm9udG8JMTkyMQlvbmx5CS0JTWF5CTE1CTI6MDAJMTowMAlECitSdWxlCVRvcm9udG8JMTkyMQlvbmx5CS0JU2VwCTE1CTI6MDAJMAlTCitSdWxlCVRvcm9udG8JMTkyMgkxOTIzCS0JTWF5CVN1bj49OAkyOjAwCTE6MDAJRAorIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IDE5MjMtMDktMTk7IGFzc3VtZSBpdCdzIGEgdHlwbyBhbmQgdGhhdCAiLTE2IgorIyB3YXMgbWVhbnQuCitSdWxlCVRvcm9udG8JMTkyMgkxOTI2CS0JU2VwCVN1bj49MTUJMjowMAkwCVMKK1J1bGUJVG9yb250bwkxOTI0CTE5MjcJLQlNYXkJU3VuPj0xCTI6MDAJMTowMAlECisjIFRoZSAxOTI3LXRvLTE5MzkgcnVsZXMgY2FuIGJlIGV4cHJlc3NlZCBtb3JlIHNpbXBseSBhcworIyBSdWxlCVRvcm9udG8JMTkyNwkxOTM3CS0JU2VwCVN1bj49MjUJMjowMAkwCVMKKyMgUnVsZQlUb3JvbnRvCTE5MjgJMTkzNwktCUFwcglTdW4+PTI1CTI6MDAJMTowMAlECisjIFJ1bGUJVG9yb250bwkxOTM4CTE5NDAJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorIyBSdWxlCVRvcm9udG8JMTkzOAkxOTM5CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKKyMgVGhlIHJ1bGVzIGJlbG93IGF2b2lkIHVzZSBvZiBTdW4+PTI1CisjICh3aGljaCBwcmUtMjAwNCB2ZXJzaW9ucyBvZiB6aWMgY2Fubm90IGhhbmRsZSkuCitSdWxlCVRvcm9udG8JMTkyNwkxOTMyCS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJVG9yb250bwkxOTI4CTE5MzEJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlUb3JvbnRvCTE5MzIJb25seQktCU1heQkxCTI6MDAJMTowMAlECitSdWxlCVRvcm9udG8JMTkzMwkxOTQwCS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJVG9yb250bwkxOTMzCW9ubHkJLQlPY3QJMQkyOjAwCTAJUworUnVsZQlUb3JvbnRvCTE5MzQJMTkzOQktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVRvcm9udG8JMTk0NQkxOTQ2CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJVG9yb250bwkxOTQ2CW9ubHkJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlUb3JvbnRvCTE5NDcJMTk0OQktCUFwcglsYXN0U3VuCTA6MDAJMTowMAlECitSdWxlCVRvcm9udG8JMTk0NwkxOTQ4CS0JU2VwCWxhc3RTdW4JMDowMAkwCVMKK1J1bGUJVG9yb250bwkxOTQ5CW9ubHkJLQlOb3YJbGFzdFN1bgkwOjAwCTAJUworUnVsZQlUb3JvbnRvCTE5NTAJMTk3MwktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCVRvcm9udG8JMTk1MAlvbmx5CS0JTm92CWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJVG9yb250bwkxOTUxCTE5NTYJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IFRvcm9udG8gZW5kZWQgRFNUIGEgd2VlayBlYXJseSBpbiAxOTcxLAorIyBuYW1lbHkgb24gMTk3MS0xMC0yNCwgYnV0IE1hcmsgQnJhZGVyIHdyb3RlICgyMDAzLTA1LTMxKSB0aGF0IHRoaXMKKyMgaXMgd3JvbmcsIGFuZCB0aGF0IGhlIGhhZCBjb25maXJtZWQgaXQgYnkgY2hlY2tpbmcgdGhlIDE5NzEtMTAtMzAKKyMgVG9yb250byBTdGFyLCB3aGljaCBzYWlkIHRoYXQgRFNUIHdhcyBlbmRpbmcgMTk3MS0xMC0zMSBhcyB1c3VhbC4KK1J1bGUJVG9yb250bwkxOTU3CTE5NzMJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDMtMDctMjcpOgorIyBXaWxsZXR0ICgxOTE0LTAzKSB3cml0ZXMgKHAuIDE3KSAiSW4gdGhlIENpdGllcyBvZiBGb3J0IFdpbGxpYW0sIGFuZAorIyBQb3J0IEFydGh1ciwgT250YXJpbywgdGhlIHByaW5jaXBsZSBvZiB0aGUgQmlsbCBoYXMgYmVlbiBpbgorIyBvcGVyYXRpb24gZm9yIHRoZSBwYXN0IHRocmVlIHllYXJzLCBhbmQgaW4gdGhlIENpdHkgb2YgTW9vc2UgSmF3LAorIyBTYXNrYXRjaGV3YW4sIGZvciBvbmUgeWVhci4iCisKKyMgRnJvbSBEYXZpZCBCcnlhbiB2aWEgVG9yeSBUcm9ucnVkLCBEaXJlY3Rvci9DdXJhdG9yLAorIyBUaHVuZGVyIEJheSBNdXNldW0gKDIwMDMtMTEtMTIpOgorIyBUaGVyZSBpcyBzb21lIHN1Z2dlc3Rpb24sIGhvd2V2ZXIsIHRoYXQsIGJ5LWxhdyBvciBub3QsIGRheWxpZ2h0CisjIHNhdmluZ3MgdGltZSB3YXMgYmVpbmcgcHJhY3RpY2VkIGluIEZvcnQgV2lsbGlhbSBhbmQgUG9ydCBBcnRodXIKKyMgYmVmb3JlIDE5MDkuLi4uIFtJXW4gMTkxMCwgdGhlIGxpbmUgYmV0d2VlbiB0aGUgRWFzdGVybiBhbmQgQ2VudHJhbAorIyBUaW1lIFpvbmVzIHdhcyBwZXJtYW5lbnRseSBtb3ZlZCBhYm91dCB0d28gaHVuZHJlZCBtaWxlcyB3ZXN0IHRvCisjIGluY2x1ZGUgdGhlIFRodW5kZXIgQmF5IGFyZWEuLi4uICBXaGVuIENhbmFkYSBhZG9wdGVkIGRheWxpZ2h0CisjIHNhdmluZ3MgdGltZSBpbiAxOTE2LCBGb3J0IFdpbGxpYW0gYW5kIFBvcnQgQXJ0aHVyLCBoYXZpbmcgZG9uZSBzbworIyBhbHJlYWR5LCBkaWQgbm90IGNoYW5nZSB0aGVpciBjbG9ja3MuLi4uICBEdXJpbmcgdGhlIFNlY29uZCBXb3JsZAorIyBXYXIsLi4uIFt0XWhlIGNpdGllcyBhZ3JlZWQgdG8gaW1wbGVtZW50IERTVCBkdXJpbmcgdGhlIHN1bW1lcgorIyBtb250aHMgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHdhciB5ZWFycy4KKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL1Rvcm9udG8JLTU6MTc6MzIgLQlMTVQJMTg5NQorCQkJLTU6MDAJQ2FuYWRhCUUlc1QJMTkxOQorCQkJLTU6MDAJVG9yb250bwlFJXNUCTE5NDIgRmViICA5IDI6MDBzCisJCQktNTowMAlDYW5hZGEJRSVzVAkxOTQ2CisJCQktNTowMAlUb3JvbnRvCUUlc1QJMTk3NAorCQkJLTU6MDAJQ2FuYWRhCUUlc1QKK1pvbmUgQW1lcmljYS9UaHVuZGVyX0JheSAtNTo1NzowMCAtCUxNVAkxODk1CisJCQktNjowMAktCUNTVAkxOTEwCisJCQktNTowMAktCUVTVAkxOTQyCisJCQktNTowMAlDYW5hZGEJRSVzVAkxOTcwCisJCQktNTowMAlNb250CUUlc1QJMTk3MworCQkJLTU6MDAJLQlFU1QJMTk3NAorCQkJLTU6MDAJQ2FuYWRhCUUlc1QKK1pvbmUgQW1lcmljYS9OaXBpZ29uCS01OjUzOjA0IC0JTE1UCTE4OTUKKwkJCS01OjAwCUNhbmFkYQlFJXNUCTE5NDAgU2VwIDI5CisJCQktNTowMAkxOjAwCUVEVAkxOTQyIEZlYiAgOSAyOjAwcworCQkJLTU6MDAJQ2FuYWRhCUUlc1QKK1pvbmUgQW1lcmljYS9SYWlueV9SaXZlciAtNjoxODoxNiAtCUxNVAkxODk1CisJCQktNjowMAlDYW5hZGEJQyVzVAkxOTQwIFNlcCAyOQorCQkJLTY6MDAJMTowMAlDRFQJMTk0MiBGZWIgIDkgMjowMHMKKwkJCS02OjAwCUNhbmFkYQlDJXNUCitab25lIEFtZXJpY2EvQXRpa29rYW4JLTY6MDY6MjggLQlMTVQJMTg5NQorCQkJLTY6MDAJQ2FuYWRhCUMlc1QJMTk0MCBTZXAgMjkKKwkJCS02OjAwCTE6MDAJQ0RUCTE5NDIgRmViICA5IDI6MDBzCisJCQktNjowMAlDYW5hZGEJQyVzVAkxOTQ1IFNlcCAzMCAyOjAwCisJCQktNTowMAktCUVTVAorCisKKyMgTWFuaXRvYmEKKworIyBGcm9tIFJvYiBEb3VnbGFzICgyMDA2LTA0LTA2KToKKyMgdGhlIG9sZCBNYW5pdG9iYSBUaW1lIEFjdCAtIGFzIGFtZW5kZWQgYnkgQmlsbCAyLCBhc3NlbnRlZCB0bworIyBNYXJjaCAyNywgMTk4NyAuLi4gc2FpZCAuLi4KKyMgImJldHdlZW4gdHdvIG8nY2xvY2sgQ2VudHJhbCBTdGFuZGFyZCBUaW1lIGluIHRoZSBtb3JuaW5nIG9mCisjIHRoZSBmaXJzdCBTdW5kYXkgb2YgQXByaWwgb2YgZWFjaCB5ZWFyIGFuZCB0d28gbydjbG9jayBDZW50cmFsCisjIFN0YW5kYXJkIFRpbWUgaW4gdGhlIG1vcm5pbmcgb2YgdGhlIGxhc3QgU3VuZGF5IG9mIE9jdG9iZXIgbmV4dAorIyBmb2xsb3dpbmcsIG9uZSBob3VyIGluIGFkdmFuY2Ugb2YgQ2VudHJhbCBTdGFuZGFyZCBUaW1lLiIuLi4KKyMgSSBiZWxpZXZlIHRoYXQgdGhlIEVuZ2xpc2ggbGVnaXNsYXRpb24gW29mIHRoZSBvbGQgdGltZSBhY3RdIGhhZCA9CisjIGJlZW4gYXNzZW50ZWQgdG8gKE1hcmNoIDIyLCAxOTY3KS4uLi4KKyMgQWxzbywgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIHRoZXJlIHdhcyBubyBvcmRlci1pbi1jb3VuY2lsIHZhcnlpbmcKKyMgdGhlIHRpbWUgb2YgRGF5bGlnaHQgU2F2aW5nIFRpbWUgZm9yIDIwMDUgYW5kIHNvIHRoZSBwcm92aXNpb25zIG9mCisjIHRoZSAxOTg3IHZlcnNpb24gd291bGQgYXBwbHkgLSB0aGUgY2hhbmdlb3ZlciB3YXMgYXQgMjowMCBDZW50cmFsCisjIFN0YW5kYXJkIFRpbWUgKGkuZS4gbm90IHVudGlsIDM6MDAgQ2VudHJhbCBEYXlsaWdodCBUaW1lKS4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTA0LTEwKToKKyMgU2hhbmtzICYgUG90dGVuZ2VyIHNheSBNYW5pdG9iYSBzd2l0Y2hlZCBhdCAwMjowMCAobm90IDAyOjAwcykKKyMgc3RhcnRpbmcgMTk2Ni4gIFNpbmNlIDAyOjAwcyBpcyBjbGVhcmx5IGNvcnJlY3QgZm9yIDE5Njcgb24sIGFzc3VtZQorIyBpdCB3YXMgYWxzbyAwMjowMHMgaW4gMTk2Ni4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJV2lubgkxOTE2CW9ubHkJLQlBcHIJMjMJMDowMAkxOjAwCUQKK1J1bGUJV2lubgkxOTE2CW9ubHkJLQlTZXAJMTcJMDowMAkwCVMKK1J1bGUJV2lubgkxOTE4CW9ubHkJLQlBcHIJMTQJMjowMAkxOjAwCUQKK1J1bGUJV2lubgkxOTE4CW9ubHkJLQlPY3QJMzEJMjowMAkwCVMKK1J1bGUJV2lubgkxOTM3CW9ubHkJLQlNYXkJMTYJMjowMAkxOjAwCUQKK1J1bGUJV2lubgkxOTM3CW9ubHkJLQlTZXAJMjYJMjowMAkwCVMKK1J1bGUJV2lubgkxOTQyCW9ubHkJLQlGZWIJIDkJMjowMAkxOjAwCVcgIyBXYXIKK1J1bGUJV2lubgkxOTQ1CW9ubHkJLQlBdWcJMTQJMjM6MDB1CTE6MDAJUCAjIFBlYWNlCitSdWxlCVdpbm4JMTk0NQlvbmx5CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJV2lubgkxOTQ2CW9ubHkJLQlNYXkJMTIJMjowMAkxOjAwCUQKK1J1bGUJV2lubgkxOTQ2CW9ubHkJLQlPY3QJMTMJMjowMAkwCVMKK1J1bGUJV2lubgkxOTQ3CTE5NDkJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlXaW5uCTE5NDcJMTk0OQktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVdpbm4JMTk1MAlvbmx5CS0JTWF5CSAxCTI6MDAJMTowMAlECitSdWxlCVdpbm4JMTk1MAlvbmx5CS0JU2VwCTMwCTI6MDAJMAlTCitSdWxlCVdpbm4JMTk1MQkxOTYwCS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJV2lubgkxOTUxCTE5NTgJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlXaW5uCTE5NTkJb25seQktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVdpbm4JMTk2MAlvbmx5CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJV2lubgkxOTYzCW9ubHkJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlXaW5uCTE5NjMJb25seQktCVNlcAkyMgkyOjAwCTAJUworUnVsZQlXaW5uCTE5NjYJMTk4NgktCUFwcglsYXN0U3VuCTI6MDBzCTE6MDAJRAorUnVsZQlXaW5uCTE5NjYJMjAwNQktCU9jdAlsYXN0U3VuCTI6MDBzCTAJUworUnVsZQlXaW5uCTE5ODcJMjAwNQktCUFwcglTdW4+PTEJMjowMHMJMTowMAlECisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvV2lubmlwZWcJLTY6Mjg6MzYgLQlMTVQJMTg4NyBKdWwgMTYKKwkJCS02OjAwCVdpbm4JQyVzVAkyMDA2CisJCQktNjowMAlDYW5hZGEJQyVzVAorCisKKyMgU2Fza2F0Y2hld2FuCisKKyMgRnJvbSBNYXJrIEJyYWRlciAoMjAwMy0wNy0yNik6CisjIFRoZSBmaXJzdCBhY3R1YWwgYWRvcHRpb24gb2YgRFNUIGluIENhbmFkYSB3YXMgYXQgdGhlIG11bmljaXBhbAorIyBsZXZlbC4gIEFzIHRoZSBbVG9yb250b10gU3RhciBwdXQgaXQgKDE5MTItMDYtMDcpLCAiV2hpbGUgcGVvcGxlCisjIGVsc2V3aGVyZSBoYXZlIGxvbmcgYmVlbiB0YWxraW5nIG9mIGxlZ2lzbGF0aW9uIHRvIHNhdmUgZGF5bGlnaHQsCisjIHRoZSBjaXR5IG9mIE1vb3NlIEphdyBbU2Fza2F0Y2hld2FuXSBoYXMgYWN0ZWQgb24gaXRzIG93biBob29rLiIKKyMgRFNUIGluIE1vb3NlIEphdyBiZWdhbiBvbiBTYXR1cmRheSwgMTkxMi0wNi0wMSAobm8gdGltZSBtZW50aW9uZWQ6CisjIHByZXN1bWFibHkgbGF0ZSBldmVuaW5nLCBhcyBiZWxvdyksIGFuZCB3b3VsZCBydW4gdW50aWwgInRoZSBlbmQgb2YKKyMgdGhlIHN1bW1lciIuICBUaGUgZGlzY3JlcGFuY3kgYmV0d2VlbiBtdW5pY2lwYWwgdGltZSBhbmQgcmFpbHJvYWQKKyMgdGltZSB3YXMgbm90ZWQuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMy0wNy0yNyk6CisjIFdpbGxldHQgKDE5MTQtMDMpIG5vdGVzIHRoYXQgRFNUICJoYXMgYmVlbiBpbiBvcGVyYXRpb24gLi4uIGluIHRoZQorIyBDaXR5IG9mIE1vb3NlIEphdywgU2Fza2F0Y2hld2FuLCBmb3Igb25lIHllYXIuIgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgorIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IHRoYXQgc2luY2UgMTk3MCB0aGlzIHJlZ2lvbiBoYXMgbW9zdGx5IGJlZW4gYXMgUmVnaW5hLgorIyBTb21lIHdlc3Rlcm4gdG93bnMgKGUuZy4gU3dpZnQgQ3VycmVudCkgc3dpdGNoZWQgZnJvbSBNU1QvTURUIHRvIENTVCBpbiAxOTcyLgorIyBPdGhlciB3ZXN0ZXJuIHRvd25zIChlLmcuIExsb3lkbWluc3RlcikgYXJlIGxpa2UgRWRtb250b24uCisjIE1hdHRoZXdzIGFuZCBWaW5jZW50ICgxOTk4KSB3cml0ZSB0aGF0IERlbmFyZSBCZWFjaCBhbmQgQ3JlaWdodG9uCisjIGFyZSBsaWtlIFdpbm5pcGVnLCBpbiB2aW9sYXRpb24gb2YgU2Fza2F0Y2hld2FuIGxhdy4KKworIyBGcm9tIFcuIEpvbmVzICgxOTkyLTExLTA2KToKKyMgVGhlLiAuIC5iZWxvdyBpcyBiYXNlZCBvbiBpbmZvcm1hdGlvbiBJIGdvdCBmcm9tIG91ciBsYXcgbGlicmFyeSwgdGhlCisjIHByb3ZpbmNpYWwgYXJjaGl2ZXMsIGFuZCB0aGUgcHJvdmluY2lhbCBDb21tdW5pdHkgU2VydmljZXMgZGVwYXJ0bWVudC4KKyMgQSBwcmVjaXNlIGhpc3Rvcnkgd291bGQgcmVxdWlyZSBkaWdnaW5nIHRocm91Z2ggbmV3c3BhcGVyIGFyY2hpdmVzLCBhbmQKKyMgc2luY2UgeW91IGRpZG4ndCBzYXkgd2hhdCB5b3Ugd2FudGVkLCBJIGRpZG4ndCBib3RoZXIuCisjCisjIFNhc2thdGNoZXdhbiBpcyBzcGxpdCBieSBhIHRpbWUgem9uZSBtZXJpZGlhbiAoMTA1VykgYW5kIG92ZXIgdGhlIHllYXJzCisjIHRoZSBib3VuZGFyeSBiZWNhbWUgcHJldHR5IHJhZ2dlZCBhcyBjb21tdW5pdGllcyBuZWFyIGl0IHJlZXZhbHVhdGVkCisjIHRoZWlyIGFmZmlsaWF0aW9ucyBpbiBvbmUgZGlyZWN0aW9uIG9yIHRoZSBvdGhlci4gIEluIDE5NjUgYSBwcm92aW5jaWFsCisjIHJlZmVyZW5kdW0gZmF2b3VyZWQgbGVnaXNsYXRpbmcgY29tbW9uIHRpbWUgcHJhY3RpY2VzLgorIworIyBPbiAxNSBBcHJpbCAxOTY2IHRoZSBUaW1lIEFjdCAoYy4gVC0xNCwgUmV2aXNlZCBTdGF0dXRlcyBvZgorIyBTYXNrYXRjaGV3YW4gMTk3OCkgd2FzIHByb2NsYWltZWQsIGFuZCBlc3RhYmxpc2hlZCB0aGF0IHRoZSBlYXN0ZXJuCisjIHBhcnQgb2YgU2Fza2F0Y2hld2FuIHdvdWxkIHVzZSBDU1QgeWVhciByb3VuZCwgdGhhdCBkaXN0cmljdHMgaW4KKyMgbm9ydGh3ZXN0IFNhc2thdGNoZXdhbiB3b3VsZCBieSBkZWZhdWx0IGZvbGxvdyBDU1QgYnV0IGNvdWxkIG9wdCB0bworIyBmb2xsb3cgTW91bnRhaW4gVGltZSBydWxlcyAodGh1cyAxIGhvdXIgZGlmZmVyZW5jZSBpbiB0aGUgd2ludGVyIGFuZAorIyB6ZXJvIGluIHRoZSBzdW1tZXIpLCBhbmQgdGhhdCBkaXN0cmljdHMgaW4gc291dGh3ZXN0IFNhc2thdGNoZXdhbiB3b3VsZAorIyBieSBkZWZhdWx0IGZvbGxvdyBNVCBidXQgY291bGQgb3B0IHRvIGZvbGxvdyBDU1QuCisjCisjIEl0IHRvb2sgYSBmZXcgeWVhcnMgZm9yIHRoZSBkdXN0IHRvIHNldHRsZSAoSSBrbm93IG9uZSBzdG9yeSBvZiBhIHRvd24KKyMgb24gb25lIHRpbWUgem9uZSBoYXZpbmcgaXRzIHNjaG9vbCBpbiBhbm90aGVyLCBzdWNoIHRoYXQgYSBtb20gaGFkIHRvCisjIHNlcnZlIGhlciBmYW1pbHkgbHVuY2ggaW4gdHdvIHNoaWZ0cyksIGJ1dCBwcmVzZW50bHkgaXQgc2VlbXMgdGhhdCBvbmx5CisjIGEgZmV3IHRvd25zIG9uIHRoZSBib3JkZXIgd2l0aCBBbGJlcnRhIChlLmcuIExsb3lkbWluc3RlcikgZm9sbG93IE1UCisjIHJ1bGVzIGFueSBtb3JlOyBhbGwgb3RoZXIgZGlzdHJpY3RzIGFwcGVhciB0byBoYXZlIHVzZWQgQ1NUIHllYXIgcm91bmQKKyMgc2luY2Ugc29tZXRpbWUgaW4gdGhlIDE5NjBzLgorCisjIEZyb20gQ2hyaXMgV2FsdG9uICgyMDA2LTA2LTI2KToKKyMgVGhlIFNhc2thdGNoZXdhbiB0aW1lIGFjdCB3aGljaCB3YXMgbGFzdCB1cGRhdGVkIGluIDE5OTYgaXMgYWJvdXQgMzAgcGFnZXMKKyMgbG9uZyBhbmQgcmF0aGVyIHBhaW5mdWwgdG8gcmVhZC4KKyMgaHR0cDovL3d3dy5xcC5nb3Yuc2suY2EvZG9jdW1lbnRzL0VuZ2xpc2gvU3RhdHV0ZXMvU3RhdHV0ZXMvVDE0LnBkZgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlSZWdpbmEJMTkxOAlvbmx5CS0JQXByCTE0CTI6MDAJMTowMAlECitSdWxlCVJlZ2luYQkxOTE4CW9ubHkJLQlPY3QJMzEJMjowMAkwCVMKK1J1bGUJUmVnaW5hCTE5MzAJMTkzNAktCU1heQlTdW4+PTEJMDowMAkxOjAwCUQKK1J1bGUJUmVnaW5hCTE5MzAJMTkzNAktCU9jdAlTdW4+PTEJMDowMAkwCVMKK1J1bGUJUmVnaW5hCTE5MzcJMTk0MQktCUFwcglTdW4+PTgJMDowMAkxOjAwCUQKK1J1bGUJUmVnaW5hCTE5MzcJb25seQktCU9jdAlTdW4+PTgJMDowMAkwCVMKK1J1bGUJUmVnaW5hCTE5MzgJb25seQktCU9jdAlTdW4+PTEJMDowMAkwCVMKK1J1bGUJUmVnaW5hCTE5MzkJMTk0MQktCU9jdAlTdW4+PTgJMDowMAkwCVMKK1J1bGUJUmVnaW5hCTE5NDIJb25seQktCUZlYgkgOQkyOjAwCTE6MDAJVyAjIFdhcgorUnVsZQlSZWdpbmEJMTk0NQlvbmx5CS0JQXVnCTE0CTIzOjAwdQkxOjAwCVAgIyBQZWFjZQorUnVsZQlSZWdpbmEJMTk0NQlvbmx5CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJUmVnaW5hCTE5NDYJb25seQktCUFwcglTdW4+PTgJMjowMAkxOjAwCUQKK1J1bGUJUmVnaW5hCTE5NDYJb25seQktCU9jdAlTdW4+PTgJMjowMAkwCVMKK1J1bGUJUmVnaW5hCTE5NDcJMTk1NwktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCVJlZ2luYQkxOTQ3CTE5NTcJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlSZWdpbmEJMTk1OQlvbmx5CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJUmVnaW5hCTE5NTkJb25seQktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCisjCitSdWxlCVN3aWZ0CTE5NTcJb25seQktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCVN3aWZ0CTE5NTcJb25seQktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVN3aWZ0CTE5NTkJMTk2MQktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCVN3aWZ0CTE5NTkJb25seQktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVN3aWZ0CTE5NjAJMTk2MQktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvUmVnaW5hCS02OjU4OjM2IC0JTE1UCTE5MDUgU2VwCisJCQktNzowMAlSZWdpbmEJTSVzVAkxOTYwIEFwciBsYXN0U3VuIDI6MDAKKwkJCS02OjAwCS0JQ1NUCitab25lIEFtZXJpY2EvU3dpZnRfQ3VycmVudCAtNzoxMToyMCAtCUxNVAkxOTA1IFNlcAorCQkJLTc6MDAJQ2FuYWRhCU0lc1QJMTk0NiBBcHIgbGFzdFN1biAyOjAwCisJCQktNzowMAlSZWdpbmEJTSVzVAkxOTUwCisJCQktNzowMAlTd2lmdAlNJXNUCTE5NzIgQXByIGxhc3RTdW4gMjowMAorCQkJLTY6MDAJLQlDU1QKKworCisjIEFsYmVydGEKKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJRWRtCTE5MTgJMTkxOQktCUFwcglTdW4+PTgJMjowMAkxOjAwCUQKK1J1bGUJRWRtCTE5MTgJb25seQktCU9jdAkzMQkyOjAwCTAJUworUnVsZQlFZG0JMTkxOQlvbmx5CS0JTWF5CTI3CTI6MDAJMAlTCitSdWxlCUVkbQkxOTIwCTE5MjMJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlFZG0JMTkyMAlvbmx5CS0JT2N0CWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJRWRtCTE5MjEJMTkyMwktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCUVkbQkxOTQyCW9ubHkJLQlGZWIJIDkJMjowMAkxOjAwCVcgIyBXYXIKK1J1bGUJRWRtCTE5NDUJb25seQktCUF1ZwkxNAkyMzowMHUJMTowMAlQICMgUGVhY2UKK1J1bGUJRWRtCTE5NDUJb25seQktCVNlcAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCUVkbQkxOTQ3CW9ubHkJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlFZG0JMTk0Nwlvbmx5CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJRWRtCTE5NjcJb25seQktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCUVkbQkxOTY3CW9ubHkJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlFZG0JMTk2OQlvbmx5CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJRWRtCTE5NjkJb25seQktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCUVkbQkxOTcyCTE5ODYJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlFZG0JMTk3MgkyMDA2CS0JT2N0CWxhc3RTdW4JMjowMAkwCVMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9FZG1vbnRvbgktNzozMzo1MiAtCUxNVAkxOTA2IFNlcAorCQkJLTc6MDAJRWRtCU0lc1QJMTk4NworCQkJLTc6MDAJQ2FuYWRhCU0lc1QKKworCisjIEJyaXRpc2ggQ29sdW1iaWEKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgU2hhbmtzICYgUG90dGVuZ2VyIHdyaXRlIHRoYXQgc2luY2UgMTk3MCBtb3N0IG9mIHRoaXMgcmVnaW9uIGhhcworIyBiZWVuIGxpa2UgVmFuY291dmVyLgorIyBEYXdzb24gQ3JlZWsgdXNlcyBNU1QuICBNdWNoIG9mIGVhc3QgQkMgaXMgbGlrZSBFZG1vbnRvbi4KKyMgTWF0dGhld3MgYW5kIFZpbmNlbnQgKDE5OTgpIHdyaXRlIHRoYXQgQ3Jlc3RvbiBpcyBsaWtlIERhd3NvbiBDcmVlay4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJVmFuYwkxOTE4CW9ubHkJLQlBcHIJMTQJMjowMAkxOjAwCUQKK1J1bGUJVmFuYwkxOTE4CW9ubHkJLQlPY3QJMzEJMjowMAkwCVMKK1J1bGUJVmFuYwkxOTQyCW9ubHkJLQlGZWIJIDkJMjowMAkxOjAwCVcgIyBXYXIKK1J1bGUJVmFuYwkxOTQ1CW9ubHkJLQlBdWcJMTQJMjM6MDB1CTE6MDAJUCAjIFBlYWNlCitSdWxlCVZhbmMJMTk0NQlvbmx5CS0JU2VwCTMwCTI6MDAJMAlTCitSdWxlCVZhbmMJMTk0NgkxOTg2CS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJVmFuYwkxOTQ2CW9ubHkJLQlPY3QJMTMJMjowMAkwCVMKK1J1bGUJVmFuYwkxOTQ3CTE5NjEJLQlTZXAJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlWYW5jCTE5NjIJMjAwNgktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvVmFuY291dmVyCS04OjEyOjI4IC0JTE1UCTE4ODQKKwkJCS04OjAwCVZhbmMJUCVzVAkxOTg3CisJCQktODowMAlDYW5hZGEJUCVzVAorWm9uZSBBbWVyaWNhL0Rhd3Nvbl9DcmVlayAtODowMDo1NiAtCUxNVAkxODg0CisJCQktODowMAlDYW5hZGEJUCVzVAkxOTQ3CisJCQktODowMAlWYW5jCVAlc1QJMTk3MiBBdWcgMzAgMjowMAorCQkJLTc6MDAJLQlNU1QKKworCisjIE5vcnRod2VzdCBUZXJyaXRvcmllcywgTnVuYXZ1dCwgWXVrb24KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgRGF3c29uIHN3aXRjaGVkIHRvIFBTVCBpbiAxOTczLiAgSW51dmlrIHN3aXRjaGVkIHRvIE1TVCBpbiAxOTc5LgorIyBNYXRoZXcgRW5nbGFuZGVyICgxOTk2LTEwLTA3KSBnaXZlcyB0aGUgZm9sbG93aW5nIHJlZnM6CisjCSogMTk2Ny4gUGFyYWdyYXBoIDI4KDM0KShnKSBvZiB0aGUgSW50ZXJwcmV0YXRpb24gQWN0LCBTLkMuIDE5NjctNjgsCisjCWMuIDcgZGVmaW5lcyBZdWtvbiBzdGFuZGFyZCB0aW1lIGFzIFVUQy05LiAgVGhpcyBpcyBzdGlsbCB2YWxpZDsKKyMJc2VlIEludGVycHJldGF0aW9uIEFjdCwgUi5TLkMuIDE5ODUsIGMuIEktMjEsIHMuIDM1KDEpLgorIwkqIEMuTy4gMTk3My8yMTQgc3dpdGNoZWQgWXVrb24gdG8gUFNUIG9uIDE5NzMtMTAtMjggMDA6MDAuCisjCSogTy5JLkMuIDE5ODAvMDIgZXN0YWJsaXNoZWQgRFNULgorIwkqIE8uSS5DLiAxOTg3LzA1NiBjaGFuZ2VkIERTVCB0byBBcHIgZmlyc3RTdW4gMjowMCB0byBPY3QgbGFzdFN1biAyOjAwLgorIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IFl1a29uJ3MgMTk3My0xMC0yOCBzd2l0Y2ggd2FzIGF0IDI6MDA7IGdvCisjIHdpdGggRW5nbGFuZGVyLgorIyBGcm9tIENocmlzIFdhbHRvbiAoMjAwNi0wNi0yNik6CisjIEhlcmUgaXMgYSBsaW5rIHRvIHRoZSBvbGQgZGF5bGlnaHQgc2F2aW5nIHBvcnRpb24gb2YgdGhlIGludGVycHJldGF0aW9uCisjIGFjdCB3aGljaCB3YXMgbGFzdCB1cGRhdGVkIGluIDE5ODc6CisjIGh0dHA6Ly93d3cuZ292LnlrLmNhL2xlZ2lzbGF0aW9uL3JlZ3Mvb2ljMTk4N18wNTYucGRmCisKKyMgRnJvbSBSaXZlcyBNY0RvdyAoMTk5OS0wOS0wNCk6CisjIE51bmF2dXQgLi4uIG1vdmVkIC4uLiB0byBpbmNvcnBvcmF0ZSB0aGUgd2hvbGUgdGVycml0b3J5IGludG8gb25lIHRpbWUgem9uZS4KKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5udW5hdHNpYXEuY29tL251bmF2dXQvbnZ0OTA5MDNfMTMuaHRtbCI+CisjIE51bmF2dXQgbW92ZXMgdG8gc2luZ2xlIHRpbWUgem9uZSBPY3QuIDMxCisjIDwvYT4KKyMKKyMgRnJvbSBBbnRvaW5lIExlY2EgKDE5OTktMDktMDYpOgorIyBXZSB0aGVuIG5lZWQgdG8gY3JlYXRlIGEgbmV3IHRpbWV6b25lIGZvciB0aGUgS2l0aWttZW90IHJlZ2lvbiBvZiBOdW5hdnV0CisjIHRvIGRpZmZlcmVudGlhdGUgaXQgZnJvbSB0aGUgWWVsbG93a25pZmUgcmVnaW9uLgorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTktMDktMjApOgorIyA8YSBocmVmPSJodHRwOi8vd3d3Lm51bmF2dXQuY29tL2Jhc2ljZmFjdHMvZW5nbGlzaC9iYXNpY2ZhY3RzXzF0ZXJyaXRvcnkuaHRtbCI+CisjIEJhc2ljIEZhY3RzOiBUaGUgTmV3IFRlcnJpdG9yeQorIyA8L2E+ICgxOTk5KSByZXBvcnRzIHRoYXQgUGFuZ25pcnR1bmcgb3BlcmF0ZXMgb24gZWFzdGVybiB0aW1lLAorIyBhbmQgdGhhdCBDb3JhbCBIYXJib3VyIGRvZXMgbm90IG9ic2VydmUgRFNULiAgV2UgZG9uJ3Qga25vdyB3aGVuCisjIFBhbmduaXJ0dW5nIHN3aXRjaGVkIHRvIGVhc3Rlcm4gdGltZTsgd2UnbGwgZ3Vlc3MgMTk5NS4KKworIyBGcm9tIFJpdmVzIE1jRG93ICgxOTk5LTExLTA4KToKKyMgT24gT2N0b2JlciAzMSwgd2hlbiB0aGUgcmVzdCBvZiBOdW5hdnV0IHdlbnQgdG8gQ2VudHJhbCB0aW1lLAorIyBQYW5nbmlydHVuZyB3b2JibGVkLiAgSGVyZSBpcyB0aGUgcmVzdWx0IG9mIHRoZWlyIHdvYmJsZToKKyMKKyMgVGhlIGZvbGxvd2luZyBidXNpbmVzc2VzIGFuZCBvcmdhbml6YXRpb25zIGluIFBhbmduaXJ0dW5nIHVzZSBDZW50cmFsIFRpbWU6CisjCisjCUZpcnN0IEFpciwgUG93ZXIgQ29ycCwgTnVuYXZ1dCBDb25zdHJ1Y3Rpb24sIEhlYWx0aCBDZW50ZXIsIFJDTVAsCisjCUVhc3Rlcm4gQXJjdGljIE5hdGlvbmFsIFBhcmtzLCBBICYgRCBTcGVjaWFsaXN0CisjCisjIFRoZSBmb2xsb3dpbmcgYnVzaW5lc3NlcyBhbmQgb3JnYW5pemF0aW9ucyBpbiBQYW5nbmlydHVuZyB1c2UgRWFzdGVybiBUaW1lOgorIworIwlIYW1sZXQgb2ZmaWNlLCBBbGwgb3RoZXIgYnVzaW5lc3NlcywgQm90aCBzY2hvb2xzLCBBaXJwb3J0IG9wZXJhdG9yCisjCisjIFRoaXMgaGFzIG1hZGUgZm9yIGFuIGludGVyZXN0aW5nIHNpdHVhdGlvbiB0aGVyZSwgd2hpY2ggd2FycmFudGVkIHRoZSBuZXdzLgorIyBObyBvbmUgdGhlcmUgdGhhdCBJIHNwb2tlIHdpdGggc2VlbXMgY29uY2VybmVkLCBvciBoYXMgcGxhbnMgdG8KKyMgY2hhbmdlIHRoZSBsb2NhbCBtZXRob2RzIG9mIGtlZXBpbmcgdGltZSwgYXMgaXQgZXZpZGVudGx5IGRvZXMgbm90CisjIHJlYWxseSBpbnRlcmZlcmUgd2l0aCBhbnkgYWN0aXZpdGllcyBvciBtYWtlIHRoaW5ncyBkaWZmaWN1bHQgbG9jYWxseS4KKyMgVGhleSBwbGFuIHRvIGNlbGVicmF0ZSBOZXcgWWVhcidzIHR1cm4tb3ZlciB0d2ljZSwgb25lIGhvdXIgYXBhcnQsCisjIHNvIGl0IGFwcGVhcnMgdGhhdCB0aGUgc2l0dWF0aW9uIHdpbGwgbGFzdCBhdCBsZWFzdCB0aGF0IGxvbmcuCisjIFRoZSBOdW5hdnV0IEludGVyZ292ZXJubWVudGFsIEFmZmFpcnMgaG9wZXMgdGhhdCB0aGV5IHdpbGwgImNvbWUgdG8KKyMgdGhlaXIgc2Vuc2VzIiwgYnV0IHRoZSBsb2NhbHMgZXZpZGVudGx5IGRvbid0IHNlZSBhbnkgcHJvYmxlbSB3aXRoCisjIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMuCisKKyMgRnJvbSBNaWNoYWVsYSBSb2RyaWd1ZSwgd3JpdGluZyBpbiB0aGUKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5udW5hdHNpYXEuY29tL2FyY2hpdmVzL251bmF2dXQ5OTExMzAvbnZ0OTExMTlfMTcuaHRtbCI+CisjIE51bmF0c2lhcSBOZXdzICgxOTk5LTExLTE5KTwvYT46CisjIENseWRlIFJpdmVyLCBQYW5nbmlydHVuZyBhbmQgU2FuaWtpbHVhcSBub3cgb3BlcmF0ZSB3aXRoIHR3byB0aW1lIHpvbmVzLAorIyBjZW50cmFsIC0gb3IgTnVuYXZ1dCB0aW1lIC0gZm9yIGdvdmVybm1lbnQgb2ZmaWNlcywgYW5kIGVhc3Rlcm4gdGltZQorIyBmb3IgbXVuaWNpcGFsIG9mZmljZXMgYW5kIHNjaG9vbHMuLi4uICBJZ2xvb2xpayBbd2FzIHNpbWlsYXIgYnV0IHRoZW5dCisjIG1hZGUgdGhlIHN3aXRjaCB0byBjZW50cmFsIHRpbWUgb24gU2F0dXJkYXksIE5vdi4gNi4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDAwLTEwLTAyKToKKyMgTWF0dGhld3MgYW5kIFZpbmNlbnQgKDE5OTgpIHNheSB0aGUgZm9sbG93aW5nLCBidXQgd2UgbGFjayBoaXN0b3JpZXMKKyMgZm9yIHRoZXNlIHBvdGVudGlhbCBuZXcgWm9uZXMuCisjCisjIFRoZSBDYW5hZGlhbiBGb3JjZXMgc3RhdGlvbiBhdCBBbGVydCB1c2VzIEVhc3Rlcm4gVGltZSB3aGlsZSB0aGUKKyMgaGFuZGZ1bCBvZiByZXNpZGVudHMgYXQgdGhlIEV1cmVrYSB3ZWF0aGVyIHN0YXRpb24gW2luIHRoZSBDZW50cmFsCisjIHpvbmVdIHNraXAgZGF5bGlnaHQgc2F2aW5ncy4gIEJhZmZpbiBJc2xhbmQsIHdoaWNoIGlzIGNyb3NzZWQgYnkgdGhlCisjIENlbnRyYWwsIEVhc3Rlcm4gYW5kIEF0bGFudGljIFRpbWUgem9uZXMgb25seSB1c2VzIEVhc3Rlcm4gVGltZS4KKyMgR2pvYSBIYXZlbiwgVGFsb3lvYWsgYW5kIFBlbGx5IEJheSBhbGwgdXNlIE1vdW50YWluIGluc3RlYWQgb2YKKyMgQ2VudHJhbCBUaW1lIGFuZCBTb3V0aGFtcHRvbiBJc2xhbmQgW2luIHRoZSBDZW50cmFsIHpvbmVdIGlzIG5vdAorIyByZXF1aXJlZCB0byB1c2UgZGF5bGlnaHQgc2F2aW5ncy4KKworIyBGcm9tCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cubnVuYXRzaWFxLmNvbS9hcmNoaXZlcy9udW5hdnV0MDAxMTMwL252dDIxMTEwXzAyLmh0bWwiPgorIyBOdW5hdnV0IG5vdyBoYXMgdHdvIHRpbWUgem9uZXMKKyMgPC9hPiAoMjAwMC0xMS0xMCk6CisjIFRoZSBOdW5hdnV0IGdvdmVybm1lbnQgd291bGQgYWxsb3cgaXRzIGVtcGxveWVlcyBpbiBLdWdsdWt0dWsgYW5kCisjIENhbWJyaWRnZSBCYXkgdG8gb3BlcmF0ZSBvbiBjZW50cmFsIHRpbWUgeWVhci1yb3VuZCwgcHV0dGluZyB0aGVtCisjIG9uZSBob3VyIGJlaGluZCB0aGUgcmVzdCBvZiBOdW5hdnV0IGZvciBzaXggbW9udGhzIGR1cmluZyB0aGUgd2ludGVyLgorIyBBdCB0aGUgZW5kIG9mIE9jdG9iZXIgdGhlIHR3byBjb21tdW5pdGllcyBoYWQgcmViZWxsZWQgYWdhaW5zdAorIyBOdW5hdnV0J3MgdW5pZmllZCB0aW1lIHpvbmUsIHJlZnVzaW5nIHRvIHNoaWZ0IHRvIGVhc3Rlcm4gdGltZSB3aXRoCisjIHRoZSByZXN0IG9mIHRoZSB0ZXJyaXRvcnkgZm9yIHRoZSB3aW50ZXIuICBDYW1icmlkZ2UgQmF5IHJlbWFpbmVkIG9uCisjIGNlbnRyYWwgdGltZSwgd2hpbGUgS3VnbHVrdHVrLCBldmVuIGZhcnRoZXIgd2VzdCwgcmV2ZXJ0ZWQgdG8KKyMgbW91bnRhaW4gdGltZSwgd2hpY2ggdGhleSBoYWQgdXNlZCBiZWZvcmUgdGhlIGFkdmVudCBvZiBOdW5hdnV0J3MKKyMgdW5pZmllZCB0aW1lIHpvbmUgaW4gMTk5OS4KKyMKKyMgRnJvbSBSaXZlcyBNY0RvdyAoMjAwMS0wMS0yMCksIHF1b3RpbmcgdGhlIE51bmF2dXQgZ292ZXJubWVudDoKKyMgVGhlIHByZWNlZGluZyBkZWNpc2lvbiBjYW1lIGludG8gZWZmZWN0IGF0IG1pZG5pZ2h0LCBTYXR1cmRheSBOb3YgNCwgMjAwMC4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDAwLTEyLTA0KToKKyMgTGV0J3MganVzdCBrZWVwIHRyYWNrIG9mIHRoZSBvZmZpY2lhbCB0aW1lcyBmb3Igbm93LgorCisjIEZyb20gUml2ZXMgTWNEb3cgKDIwMDEtMDMtMDcpOgorIyBUaGUgcHJlbWllciBvZiBOdW5hdnV0IGhhcyBpc3N1ZWQgYSBtaW5pc3RlcmlhbCBzdGF0ZW1lbnQgYWR2aXNpbmcKKyMgdGhhdCBlZmZlY3RpdmUgMjAwMS0wNC0wMSwgdGhlIHRlcnJpdG9yeSBvZiBOdW5hdnV0IHdpbGwgcmV2ZXJ0CisjIGJhY2sgdG8gdGhyZWUgdGltZSB6b25lcyAobW91bnRhaW4sIGNlbnRyYWwsIGFuZCBlYXN0ZXJuKS4gIE9mIHRoZQorIyBjaXRpZXMgaW4gTnVuYXZ1dCwgQ29yYWwgSGFyYm9yIGlzIHRoZSBvbmx5IG9uZSB0aGF0IEkga25vdyBvZiB0aGF0CisjIGhhcyBzYWlkIGl0IHdpbGwgbm90IG9ic2VydmUgZHN0LCBzdGF5aW5nIG9uIEVTVCB5ZWFyIHJvdW5kLiAgSSdtCisjIGNoZWNraW5nIGZvciBtb3JlIGluZm8sIGFuZCB3aWxsIGdldCBiYWNrIHRvIHlvdSBpZiBJIGNvbWUgdXAgd2l0aAorIyBtb3JlLgorIyBbQWxzbyBzZWUgPGh0dHA6Ly93d3cubnVuYXRzaWFxLmNvbS9udW5hdnV0L252dDEwMzA5XzA2Lmh0bWw+ICgyMDAxLTAzLTA5KS5dCisKKyMgRnJvbSBHd2lsbGltIExhdyAoMjAwNS0wNS0yMSk6CisjIEFjY29yZGluZyB0byBtYXBzIGF0CisjIGh0dHA6Ly9pbm1zLWllbm0ubnJjLWNucmMuZ2MuY2EvaW1hZ2VzL3RpbWVfc2VydmljZXMvVFowMVNXRS5qcGcKKyMgaHR0cDovL2lubXMtaWVubS5ucmMtY25yYy5nYy5jYS9pbWFnZXMvdGltZV9zZXJ2aWNlcy9UWjAxU1NFLmpwZworIyAoYm90aCBkYXRlZCAyMDAzKSwgYW5kCisjIGh0dHA6Ly93d3cuY2FuYWRpYW5nZW9ncmFwaGljLmNhL01hZ2F6aW5lL1NPOTgvZ2VvbWFwLmFzcAorIyAoZnJvbSBhIDE5OTggQ2FuYWRpYW4gR2VvZ3JhcGhpYyBhcnRpY2xlKSwgdGhlIGRlIGZhY3RvIGFuZCBkZSBqdXJlIHRpbWUKKyMgZm9yIFNvdXRoYW1wdG9uIElzbGFuZCAoYXQgdGhlIG5vcnRoIGVuZCBvZiBIdWRzb24gQmF5KSBpcyBVVEMtNSBhbGwgeWVhcgorIyByb3VuZC4gIFVzaW5nIEdvb2dsZSwgaXQncyBlYXN5IHRvIGZpbmQgb3RoZXIgd2Vic2l0ZXMgdGhhdCBjb25maXJtIHRoaXMuCisjIEkgd2Fzbid0IGFibGUgdG8gZmluZCBob3cgZmFyIGJhY2sgdGhpcyB0aW1lIHJlZ2ltZW4gZ29lcywgYnV0IHNpbmNlIGl0CisjIHByZWRhdGVzIHRoZSBjcmVhdGlvbiBvZiBOdW5hdnV0LCBpdCBwcm9iYWJseSBnb2VzIGJhY2sgbWFueSB5ZWFycy4uLi4KKyMgVGhlIEludWt0aXR1dCBuYW1lIG9mIENvcmFsIEhhcmJvdXIgaXMgU2FsbGl0LCBidXQgaXQncyByYXJlbHkgdXNlZC4KKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNS0wNy0yNik6CisjIEZvciBsYWNrIG9mIGJldHRlciBpbmZvcm1hdGlvbiwgYXNzdW1lIHRoYXQgU291dGhhbXB0b24gSXNsYW5kIG9ic2VydmVkCisjIGRheWxpZ2h0IHNhdmluZyBvbmx5IGR1cmluZyB3YXJ0aW1lLgorCisjIEZyb20gQ2hyaXMgV2FsdG9uICgyMDA3LTAzLTAxKToKKyMgLi4uIHRoZSBjb21tdW5pdHkgb2YgUmVzb2x1dGUgKGxvY2F0ZWQgb24gQ29ybndhbGxpcyBJc2xhbmQgaW4KKyMgTnVuYXZ1dCkgbW92ZWQgZnJvbSBDZW50cmFsIFRpbWUgdG8gRWFzdGVybiBUaW1lIGxhc3QgTm92ZW1iZXIuCisjIEJhc2ljYWxseSB0aGUgY29tbXVuaXR5IGRpZCBub3QgY2hhbmdlIGl0cyBjbG9ja3MgYXQgdGhlIGVuZCBvZgorIyBkYXlsaWdodCBzYXZpbmcuLi4uCisjIGh0dHA6Ly93d3cubm5zbC5jb20vZnJhbWVzL25ld3NwYXBlcnMvMjAwNi0xMS9ub3YxM18wNm5vbmUuaHRtbAorCisjIEZyb20gQ2hyaXMgV2FsdG9uICgyMDA3LTAzLTE0KToKKyMgVG9kYXkgSSBwaG9uZWQgdGhlICJoYW1sZXQgb2ZmaWNlIiB0byBmaW5kIG91dCB3aGF0IFJlc29sdXRlIHdhcyBkb2luZyB3aXRoCisjIGl0cyBjbG9ja3MuCisjCisjIFRoZSBpbmRpdmlkdWFsIHRoYXQgYW5zd2VyZWQgdGhlIHBob25lIGNvbmZpcm1lZCB0aGF0IHRoZSBjbG9ja3MgZGlkIG5vdAorIyBtb3ZlIGF0IHRoZSBlbmQgb2YgZGF5bGlnaHQgc2F2aW5nIG9uIE9jdG9iZXIgMjkvMjAwNi4gIEhlIGFsc28gdG9sZCBtZSB0aGF0CisjIHRoZSBjbG9ja3MgZGlkIG5vdCBtb3ZlIHRoaXMgcGFzdCB3ZWVrZW5kIChNYXJjaCAxMS8yMDA3KS4uLi4KKworIyBGcm9tIENocmlzIFdhbHRvbiAoMjAwOC0xMS0xMyk6CisjIC4uLnRoZSByZXNpZGVudHMgb2YgUmVzb2x1dGUgYmVsaWV2ZSB0aGF0IHRoZXkgYXJlIGNoYW5naW5nICJ0aW1lIHpvbmVzIgorIyB0d2ljZSBhIHllYXIuICBJbiB3aW50ZXIgbW9udGhzLCBsb2NhbCB0aW1lIGlzIHF1YWxpZmllZCB3aXRoICJFYXN0ZXJuCisjIFRpbWUiIHdoaWNoIGlzIHJlYWxseSAiRWFzdGVybiBTdGFuZGFyZCBUaW1lIChVVEMtNSkiLiAgSW4gc3VtbWVyCisjIG1vbnRocywgbG9jYWwgdGltZSBpcyBxdWFsaWZpZWQgd2l0aCAiQ2VudHJhbCBUaW1lIiB3aGljaCBpcyByZWFsbHkKKyMgIkNlbnRyYWwgRGF5bGlnaHQgVGltZSAoVVRDLTUpIi4uLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlOVF9ZSwkxOTE4CW9ubHkJLQlBcHIJMTQJMjowMAkxOjAwCUQKK1J1bGUJTlRfWUsJMTkxOAlvbmx5CS0JT2N0CTI3CTI6MDAJMAlTCitSdWxlCU5UX1lLCTE5MTkJb25seQktCU1heQkyNQkyOjAwCTE6MDAJRAorUnVsZQlOVF9ZSwkxOTE5CW9ubHkJLQlOb3YJIDEJMDowMAkwCVMKK1J1bGUJTlRfWUsJMTk0Mglvbmx5CS0JRmViCSA5CTI6MDAJMTowMAlXICMgV2FyCitSdWxlCU5UX1lLCTE5NDUJb25seQktCUF1ZwkxNAkyMzowMHUJMTowMAlQICMgUGVhY2UKK1J1bGUJTlRfWUsJMTk0NQlvbmx5CS0JU2VwCTMwCTI6MDAJMAlTCitSdWxlCU5UX1lLCTE5NjUJb25seQktCUFwcglsYXN0U3VuCTA6MDAJMjowMAlERAorUnVsZQlOVF9ZSwkxOTY1CW9ubHkJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlOVF9ZSwkxOTgwCTE5ODYJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlOVF9ZSwkxOTgwCTIwMDYJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlOVF9ZSwkxOTg3CTIwMDYJLQlBcHIJU3VuPj0xCTI6MDAJMTowMAlECisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCisjIGFrYSBQYW5uaXF0dXVxCitab25lIEFtZXJpY2EvUGFuZ25pcnR1bmcgMAktCXp6egkxOTIxICMgdHJhZGluZyBwb3N0IGVzdC4KKwkJCS00OjAwCU5UX1lLCUElc1QJMTk5NSBBcHIgU3VuPj0xIDI6MDAKKwkJCS01OjAwCUNhbmFkYQlFJXNUCTE5OTkgT2N0IDMxIDI6MDAKKwkJCS02OjAwCUNhbmFkYQlDJXNUCTIwMDAgT2N0IDI5IDI6MDAKKwkJCS01OjAwCUNhbmFkYQlFJXNUCisjIGZvcm1lcmx5IEZyb2Jpc2hlciBCYXkKK1pvbmUgQW1lcmljYS9JcWFsdWl0CTAJLQl6enoJMTk0MiBBdWcgIyBGcm9iaXNoZXIgQmF5IGVzdC4KKwkJCS01OjAwCU5UX1lLCUUlc1QJMTk5OSBPY3QgMzEgMjowMAorCQkJLTY6MDAJQ2FuYWRhCUMlc1QJMjAwMCBPY3QgMjkgMjowMAorCQkJLTU6MDAJQ2FuYWRhCUUlc1QKKyMgYWthIFFhdXN1aXR0dXEKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCVJlc29sdXRlIDIwMDYJbWF4CS0JTm92CVN1bj49MQkyOjAwCTAJRVMKK1J1bGUJUmVzb2x1dGUgMjAwNwltYXgJLQlNYXIJU3VuPj04CTI6MDAJMAlDRAorWm9uZSBBbWVyaWNhL1Jlc29sdXRlCTAJLQl6enoJMTk0NyBBdWcgMzEgIyBSZXNvbHV0ZSBmb3VuZGVkCisJCQktNjowMAlOVF9ZSwlDJXNUCTIwMDAgT2N0IDI5IDI6MDAKKwkJCS01OjAwCS0JRVNUCTIwMDEgQXByICAxIDM6MDAKKwkJCS02OjAwCUNhbmFkYQlDJXNUCTIwMDYgT2N0IDI5IDI6MDAKKwkJCS01OjAwCVJlc29sdXRlCSVzVAorIyBha2EgS2FuZ2lxaW5pcQorWm9uZSBBbWVyaWNhL1Jhbmtpbl9JbmxldCAwCS0Jenp6CTE5NTcgIyBSYW5raW4gSW5sZXQgZm91bmRlZAorCQkJLTY6MDAJTlRfWUsJQyVzVAkyMDAwIE9jdCAyOSAyOjAwCisJCQktNTowMAktCUVTVAkyMDAxIEFwciAgMSAzOjAwCisJCQktNjowMAlDYW5hZGEJQyVzVAorIyBha2EgSXFhbHVrdHV1dHRpYXEKK1pvbmUgQW1lcmljYS9DYW1icmlkZ2VfQmF5IDAJLQl6enoJMTkyMCAjIHRyYWRpbmcgcG9zdCBlc3QuPworCQkJLTc6MDAJTlRfWUsJTSVzVAkxOTk5IE9jdCAzMSAyOjAwCisJCQktNjowMAlDYW5hZGEJQyVzVAkyMDAwIE9jdCAyOSAyOjAwCisJCQktNTowMAktCUVTVAkyMDAwIE5vdiAgNSAwOjAwCisJCQktNjowMAktCUNTVAkyMDAxIEFwciAgMSAzOjAwCisJCQktNzowMAlDYW5hZGEJTSVzVAorWm9uZSBBbWVyaWNhL1llbGxvd2tuaWZlIDAJLQl6enoJMTkzNSAjIFllbGxvd2tuaWZlIGZvdW5kZWQ/CisJCQktNzowMAlOVF9ZSwlNJXNUCTE5ODAKKwkJCS03OjAwCUNhbmFkYQlNJXNUCitab25lIEFtZXJpY2EvSW51dmlrCTAJLQl6enoJMTk1MyAjIEludXZpayBmb3VuZGVkCisJCQktODowMAlOVF9ZSwlQJXNUCTE5NzkgQXByIGxhc3RTdW4gMjowMAorCQkJLTc6MDAJTlRfWUsJTSVzVAkxOTgwCisJCQktNzowMAlDYW5hZGEJTSVzVAorWm9uZSBBbWVyaWNhL1doaXRlaG9yc2UJLTk6MDA6MTIgLQlMTVQJMTkwMCBBdWcgMjAKKwkJCS05OjAwCU5UX1lLCVklc1QJMTk2NiBKdWwgMSAyOjAwCisJCQktODowMAlOVF9ZSwlQJXNUCTE5ODAKKwkJCS04OjAwCUNhbmFkYQlQJXNUCitab25lIEFtZXJpY2EvRGF3c29uCS05OjE3OjQwIC0JTE1UCTE5MDAgQXVnIDIwCisJCQktOTowMAlOVF9ZSwlZJXNUCTE5NzMgT2N0IDI4IDA6MDAKKwkJCS04OjAwCU5UX1lLCVAlc1QJMTk4MAorCQkJLTg6MDAJQ2FuYWRhCVAlc1QKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgTWV4aWNvCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMS0wMy0wNSk6CisjIFRoZSBJbnZlc3RpZ2F0aW9uIGFuZCBBbmFseXNpcyBTZXJ2aWNlIG9mIHRoZQorIyBNZXhpY2FuIExpYnJhcnkgb2YgQ29uZ3Jlc3MgKE1Mb0MpIGhhcyBwdWJsaXNoZWQgYQorIyA8YSBocmVmPSJodHRwOi8vd3d3LmNkZGhjdS5nb2IubXgvYmlibGlvdC9wdWJsaWNhL2ludmV5YW5hL3BvbGlzb2MvaG9ydmVyLyI+CisjIGhpc3Rvcnkgb2YgTWV4aWNhbiBsb2NhbCB0aW1lIChpbiBTcGFuaXNoKQorIyA8L2E+LgorIworIyBIZXJlIGFyZSB0aGUgZGlzY3JlcGFuY2llcyBiZXR3ZWVuIFNoYW5rcyAmIFBvdHRlbmdlciAoUyZQKSBhbmQgdGhlIE1Mb0MuCisjIChJbiBhbGwgY2FzZXMgd2UgZ28gd2l0aCB0aGUgTUxvQy4pCisjIFMmUCByZXBvcnQgdGhhdCBCYWphIHdhcyBhdCAtODowMCBpbiAxOTIyLzE5MjMuCisjIFMmUCBzYXkgdGhlIDE5MzAgdHJhbnNpdGlvbiBpbiBCYWphIHdhcyAxOTMwLTExLTE2LgorIyBTJlAgcmVwb3J0IG5vIERTVCBkdXJpbmcgc3VtbWVyIDE5MzEuCisjIFMmUCByZXBvcnQgYSB0cmFuc2l0aW9uIGF0IDE5MzItMDMtMzAgMjM6MDAsIG5vdCAxOTMyLTA0LTAxLgorCisjIEZyb20gR3dpbGxpbSBMYXcgKDIwMDEtMDItMjApOgorIyBUaGVyZSBhcmUgc29tZSBvdGhlciBkaXNjcmVwYW5jaWVzIGJldHdlZW4gdGhlIERlY3JlZXMgcGFnZSBhbmQgdGhlCisjIHR6IGRhdGFiYXNlLiAgSSB0aGluayB0aGV5IGNhbiBiZXN0IGJlIGV4cGxhaW5lZCBieSBzdXBwb3NpbmcgdGhhdAorIyB0aGUgcmVzZWFyY2hlcnMgd2hvIHByZXBhcmVkIHRoZSBEZWNyZWVzIHBhZ2UgZmFpbGVkIHRvIGZpbmQgc29tZSBvZgorIyB0aGUgcmVsZXZhbnQgZG9jdW1lbnRzLgorCisjIEZyb20gQWxhbiBQZXJyeSAoMTk5Ni0wMi0xNSk6CisjIEEgZ3V5IGZyb20gb3VyIE1leGljbyBzdWJzaWRpYXJ5IGZpbmFsbHkgZm91bmQgdGhlIFByZXNpZGVudGlhbCBEZWNyZWUKKyMgb3V0bGluaW5nIHRoZSB0aW1lem9uZSBjaGFuZ2VzIGluIE1leGljby4KKyMKKyMgLS0tLS0tLS0tLS0tLSBCZWdpbiBGb3J3YXJkZWQgTWVzc2FnZSAtLS0tLS0tLS0tLS0tCisjCisjIEkgZmluYWxseSBnb3QgbXkgaGFuZHMgb24gdGhlIE9mZmljaWFsIFByZXNpZGVudGlhbCBEZWNyZWUgdGhhdCBzZXRzIHVwIHRoZQorIyBydWxlcyBmb3IgdGhlIERTVCBjaGFuZ2VzLiBUaGUgcnVsZXMgYXJlOgorIworIyAxLiBUaGUgY291bnRyeSBpcyBkaXZpZGVkIGluIDMgdGltZXpvbmVzOgorIyAgICAtIEJhamEgQ2FsaWZvcm5pYSBOb3J0ZSAodGhlIE1leGljby9CYWphTm9ydGUgVFopCisjICAgIC0gQmFqYSBDYWxpZm9ybmlhIFN1ciwgTmF5YXJpdCwgU2luYWxvYSBhbmQgU29ub3JhICh0aGUgTWV4aWNvL0JhamFTdXIgVFopCisjICAgIC0gVGhlIHJlc3Qgb2YgdGhlIGNvdW50cnkgKHRoZSBNZXhpY28vR2VuZXJhbCBUWikKKyMKKyMgMi4gRnJvbSB0aGUgZmlyc3QgU3VuZGF5IGluIEFwcmlsIGF0IDI6MDAgQU0gdG8gdGhlIGxhc3QgU3VuZGF5IGluIE9jdG9iZXIKKyMgICAgYXQgMjowMCBBTSwgdGhlIHRpbWVzIGluIGVhY2ggem9uZSBhcmUgYXMgZm9sbG93czoKKyMgICAgQmFqYU5vcnRlOiBHTVQrNworIyAgICBCYWphU3VyOiAgIEdNVCs2CisjICAgIEdlbmVyYWw6ICAgR01UKzUKKyMKKyMgMy4gVGhlIHJlc3Qgb2YgdGhlIHllYXIsIHRoZSB0aW1lcyBhcmUgYXMgZm9sbG93czoKKyMgICAgQmFqYU5vcnRlOiBHTVQrOAorIyAgICBCYWphU3VyOiAgIEdNVCs3CisjICAgIEdlbmVyYWw6ICAgR01UKzYKKyMKKyMgVGhlIERlY3JlZSB3YXMgcHVibGlzaGVkIGluIE1leGljbydzIE9mZmljaWFsIE5ld3NwYXBlciBvbiBKYW51YXJ5IDR0aC4KKyMKKyMgLS0tLS0tLS0tLS0tLS0gRW5kIEZvcndhcmRlZCBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTYtMDYtMTIpOgorIyBGb3IgYW4gRW5nbGlzaCB0cmFuc2xhdGlvbiBvZiB0aGUgZGVjcmVlLCBzZWUKKyMgPGEgaHJlZj0iaHR0cDovL21leGljby10cmF2ZWwuY29tL2V4dHJhL3RpbWV6b25lX2VuZy5odG1sIj4KKyMgYGBEaWFyaW8gT2ZpY2lhbDogVGltZSBab25lIENoYW5nZW92ZXInJyAoMTk5Ni0wMS0wNCkuCisjIDwvYT4KKworIyBGcm9tIFJpdmVzIE1jRG93ICgxOTk4LTEwLTA4KToKKyMgVGhlIFN0YXRlIG9mIFF1aW50YW5hIFJvbyBoYXMgcmV2ZXJ0ZWQgYmFjayB0byBjZW50cmFsIFNURCBhbmQgRFNUIHRpbWVzCisjIChpLmUuIFVUQyAtMDYwMCBhbmQgLTA1MDAgYXMgb2YgMTk5OC0wOC0wMikuCisKKyMgRnJvbSBSaXZlcyBNY0RvdyAoMjAwMC0wMS0xMCk6CisjIEVmZmVjdGl2ZSBBcHJpbCA0LCAxOTk5IGF0IDI6MDAgQU0gbG9jYWwgdGltZSwgU29ub3JhIGNoYW5nZWQgdG8gdGhlIHRpbWUKKyMgem9uZSA1IGhvdXJzIGZyb20gdGhlIEludGVybmF0aW9uYWwgRGF0ZSBMaW5lLCBhbmQgd2lsbCBub3Qgb2JzZXJ2ZSBkYXlsaWdodAorIyBzYXZpbmdzIHRpbWUgc28gYXMgdG8gc3RheSBvbiB0aGUgc2FtZSB0aW1lIHpvbmUgYXMgdGhlIHNvdXRoZXJuIHBhcnQgb2YKKyMgQXJpem9uYSB5ZWFyIHJvdW5kLgorCisjIEZyb20gSmVzcGVyIE5vcmdhYXJkLCB0cmFuc2xhdGluZworIyA8aHR0cDovL3d3dy5yZWZvcm1hLmNvbS9uYWNpb25hbC9hcnRpY3Vsby8wNjQzMjcvPiAoMjAwMS0wMS0xNyk6CisjIEluIE9heGFjYSwgdGhlIDU1LjAwMCB0ZWFjaGVycyBmcm9tIHRoZSBTZWN0aW9uIDIyIG9mIHRoZSBOYXRpb25hbAorIyBTeW5kaWNhdGUgb2YgRWR1Y2F0aW9uIFdvcmtlcnMsIHJlZnVzZSB0byBhcHBseSBkYXlsaWdodCBzYXZpbmcgZWFjaAorIyB5ZWFyLCBzbyB0aGF0IHRoZSBtb3JlIHRoYW4gMTAsMDAwIHNjaG9vbHMgd29yayBhdCBub3JtYWwgaG91ciB0aGUKKyMgd2hvbGUgeWVhci4KKworIyBGcm9tIEd3aWxsaW0gTGF3ICgyMDAxLTAxLTE5KToKKyMgPGh0dHA6Ly93d3cucmVmb3JtYS5jb20vbmVnb2Npb3NfeV9kaW5lcm8vYXJ0aWN1bG8vMDY0NDgxLz4gLi4uIHNheXMKKyMgKHRyYW5zbGF0ZWQpOi4uLgorIyBKYW51YXJ5IDE3LCAyMDAwIC0gVGhlIEVuZXJneSBTZWNyZXRhcnksIEVybmVzdG8gTWFydGVucywgYW5ub3VuY2VkCisjIHRoYXQgU3VtbWVyIFRpbWUgd2lsbCBiZSByZWR1Y2VkIGZyb20gc2V2ZW4gdG8gZml2ZSBtb250aHMsIHN0YXJ0aW5nCisjIHRoaXMgeWVhci4uLi4KKyMgPGh0dHA6Ly93d3cucHVibGljby5jb20ubXgvc2NyaXB0cy90ZXh0bzMuYXNwP2FjdGlvbj1wYWdpbmEmcGFnPTIxJnBvcz1wJnNlY2M9bmFjaSZkYXRlPTAxLzE3LzIwMDE+CisjIFt0cmFuc2xhdGVkXSwgc2F5cyAic3VtbWVyIHRpbWUgd2lsbCAuLi4gdGFrZSBlZmZlY3Qgb24gdGhlIGZpcnN0IFN1bmRheQorIyBpbiBNYXksIGFuZCBlbmQgb24gdGhlIGxhc3QgU3VuZGF5IG9mIFNlcHRlbWJlci4KKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMjAwMS0wMS0yNSk6CisjIFRoZSAyMDAxLTAxLTI0IHRyYWRpdGlvbmFsIFdhc2hpbmd0b24gUG9zdCBjb250YWluZWQgdGhlIHBhZ2Ugb25lCisjIHN0b3J5ICJUaW1lbHkgSXNzdWUgRGl2aWRlcyBNZXhpY2Fucy4iLi4uCisjIGh0dHA6Ly93d3cud2FzaGluZ3RvbnBvc3QuY29tL3dwLWR5bi9hcnRpY2xlcy9BMzczODMtMjAwMUphbjIzLmh0bWwKKyMgLi4uIE1leGljbyBDaXR5IE1heW9yIExvcGV6IE9icmFkb3IgIi4uLmlzIHRocmVhdGVuaW5nIHRvIGtlZXAKKyMgTWV4aWNvIENpdHkgYW5kIGl0cyAyMCBtaWxsaW9uIHJlc2lkZW50cyBvbiBhIGRpZmZlcmVudCB0aW1lIHRoYW4KKyMgdGhlIHJlc3Qgb2YgdGhlIGNvdW50cnkuLi4iIEluIHBhcnRpY3VsYXIsIExvcGV6IE9icmFkb3Igd291bGQgYWJvbGlzaAorIyBvYnNlcnZhdGlvbiBvZiBEYXlsaWdodCBTYXZpbmcgVGltZS4KKworIyA8YSBocmVmPSJodHRwOi8vd3d3LmNvbmFlLmdvYi5teC9haG9ycm8vZGVjcmV0b2hvcnZlcjIwMDEuaHRtbCNkZWNyZSI+CisjIE9mZmljaWFsIHN0YXR1dGUgcHVibGlzaGVkIGJ5IHRoZSBFbmVyZ3kgRGVwYXJ0bWVudAorIyA8L2E+ICgyMDAxLTAyLTAxKSBzaG93cyBCYWphIGFuZCBDaGloYXVodWEgYXMgc3RpbGwgdXNpbmcgVVMgRFNUIHJ1bGVzLAorIyBhbmQgU29ub3JhIHdpdGggbm8gRFNULiAgVGhpcyB3YXMgcmVwb3J0ZWQgYnkgSmVzcGVyIE5vcmdhYXJkICgyMDAxLTAyLTAzKS4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDAxLTAzLTAzKToKKyMKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5sYXRpbWVzLmNvbS9uZXdzL25hdGlvbi8yMDAxMDMwMy90MDAwMDE4NzY2Lmh0bWwiPgorIyBKYW1lcyBGLiBTbWl0aCB3cml0ZXMgaW4gdG9kYXkncyBMQSBUaW1lcworIyA8L2E+CisjICogU29ub3JhIHdpbGwgY29udGludWUgdG8gb2JzZXJ2ZSBzdGFuZGFyZCB0aW1lLgorIyAqIExhc3Qgd2VlayBNZXhpY28gQ2l0eSdzIG1heW9yIEFuZHJlcyBNYW51ZWwgTG9wZXogT2JyYWRvciBkZWNyZWVkIHRoYXQKKyMgICB0aGUgRmVkZXJhbCBEaXN0cmljdCB3aWxsIG5vdCBhZG9wdCBEU1QuCisjICogNCBvZiAxNiBkaXN0cmljdCBsZWFkZXJzIGFubm91bmNlZCB0aGV5J2xsIGlnbm9yZSB0aGUgZGVjcmVlLgorIyAqIFRoZSBkZWNyZWUgZG9lcyBub3QgYWZmZWN0IGZlZGVyYWwtY29udHJvbGxlZCBmYWNpbGl0aWVzIGluY2x1ZGluZworIyAgIHRoZSBhaXJwb3J0LCBiYW5rcywgaG9zcGl0YWxzLCBhbmQgc2Nob29scy4KKyMKKyMgRm9yIG5vdyB3ZSdsbCBhc3N1bWUgdGhhdCB0aGUgRmVkZXJhbCBEaXN0cmljdCB3aWxsIGJvdyB0byBmZWRlcmFsIHJ1bGVzLgorCisjIEZyb20gSmVzcGVyIE5vcmdhYXJkICgyMDAxLTA0LTAxKToKKyMgSSBmb3VuZCBzb21lIHJlZmVyZW5jZXMgdG8gdGhlIE1leGljYW4gYXBwbGljYXRpb24gb2YgZGF5bGlnaHQKKyMgc2F2aW5nLCB3aGljaCBtb2RpZmllcyB3aGF0IEkgaGFkIGFscmVhZHkgc2VudCB5b3UsIHN0YXRpbmcgZWFybGllcgorIyB0aGF0IGEgbnVtYmVyIG9mIG5vcnRoZXJuIE1leGljYW4gc3RhdGVzIHdvdWxkIGdvIG9uIGRheWxpZ2h0CisjIHNhdmluZy4gVGhlIG1vZGlmaWNhdGlvbiByZXZlcnRzIHRoaXMgdG8gb25seSBjb3ZlciBCYWphIENhbGlmb3JuaWEKKyMgKE5vcnRlKSwgd2hpbGUgYWxsIG90aGVyIHN0YXRlcyAoZXhjZXB0IFNvbm9yYSwgd2hvIGhhcyBubyBkYXlsaWdodAorIyBzYXZpbmcgYWxsIHllYXIpIHdpbGwgZm9sbG93IHRoZSBvcmlnaW5hbCBkZWNyZWUgb2YgcHJlc2lkZW50CisjIFZpY2VudGUgRm94LCBzdGFydGluZyBkYXlsaWdodCBzYXZpbmcgTWF5IDYsIDIwMDEgYW5kIGVuZGluZworIyBTZXB0ZW1iZXIgMzAsIDIwMDEuCisjIFJlZmVyZW5jZXM6ICJEaWFyaW8gZGUgTW9udGVycmV5IiA8d3d3LmRpYXJpb2RlbW9udGVycmV5LmNvbS9pbmRleC5hc3A+CisjIFBhbGFicmEgPGh0dHA6Ly9wYWxhYnJhLmluZm9zZWwuY29tLzAxMDMzMS9wcmltZXJhL3BwcmkzMTAxLnBkZj4gKDIwMDEtMDMtMzEpCisKKyMgRnJvbSBSZXV0ZXJzICgyMDAxLTA5LTA0KToKKyMgTWV4aWNvJ3MgU3VwcmVtZSBDb3VydCBvbiBUdWVzZGF5IGRlY2xhcmVkIHRoYXQgZGF5bGlnaHQgc2F2aW5ncyB3YXMKKyMgdW5jb25zdGl0dXRpb25hbCBpbiBNZXhpY28gQ2l0eSwgY3JlYXRpbmcgdGhlIHBvc3NpYmlsaXR5IHRoZQorIyBjYXBpdGFsIHdpbGwgYmUgaW4gYSBkaWZmZXJlbnQgdGltZSB6b25lIGZyb20gdGhlIHJlc3Qgb2YgdGhlIG5hdGlvbgorIyBuZXh0IHllYXIuLi4uICBUaGUgU3VwcmVtZSBDb3VydCdzIHJ1bGluZyB0YWtlcyBlZmZlY3QgYXQgMjowMAorIyBhLm0uICgwODAwIEdNVCkgb24gU2VwdC4gMzAsIHdoZW4gTWV4aWNvIGlzIHNjaGVkdWxlZCB0byByZXZlcnQgdG8KKyMgc3RhbmRhcmQgdGltZS4gIlRoaXMgaXMgc28gcmVzaWRlbnRzIG9mIHRoZSBGZWRlcmFsIERpc3RyaWN0IGFyZSBub3QKKyMgc3ViamVjdCB0byB1bmV4cGVjdGVkIHRpbWUgY2hhbmdlcywiIGEgc3RhdGVtZW50IGZyb20gdGhlIGNvdXJ0IHNhaWQuCisKKyMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDItMDMtMTIpOgorIyAuLi4gY29uc3VsdGluZyBteSBsb2NhbCBncm9jZXJ5IHN0b3JlKCEpIGFuZCBteSBjb3dvcmtlcnMsIHRoZXkgYWxsIGluc2lzdGVkCisjIHRoYXQgYSBuZXcgZGVjaXNpb24gaGFkIGJlZW4gbWFkZSB0byByZWluc3RhdGUgVVMgc3R5bGUgRFNUIGluIE1leGljby4uLi4KKyMgaHR0cDovL3d3dy5jb25hZS5nb2IubXgvYWhvcnJvL2hvcmF2ZXIyMDAxX20xXzIwMDIuaHRtbCAoMjAwMi0wMi0yMCkKKyMgY29uZmlybXMgdGhpcy4gIFNvbm9yYSBhcyB1c3VhbCBpcyB0aGUgb25seSBzdGF0ZSB3aGVyZSBEU1QgaXMgbm90IGFwcGxpZWQuCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCU1leGljbwkxOTM5CW9ubHkJLQlGZWIJNQkwOjAwCTE6MDAJRAorUnVsZQlNZXhpY28JMTkzOQlvbmx5CS0JSnVuCTI1CTA6MDAJMAlTCitSdWxlCU1leGljbwkxOTQwCW9ubHkJLQlEZWMJOQkwOjAwCTE6MDAJRAorUnVsZQlNZXhpY28JMTk0MQlvbmx5CS0JQXByCTEJMDowMAkwCVMKK1J1bGUJTWV4aWNvCTE5NDMJb25seQktCURlYwkxNgkwOjAwCTE6MDAJVyAjIFdhcgorUnVsZQlNZXhpY28JMTk0NAlvbmx5CS0JTWF5CTEJMDowMAkwCVMKK1J1bGUJTWV4aWNvCTE5NTAJb25seQktCUZlYgkxMgkwOjAwCTE6MDAJRAorUnVsZQlNZXhpY28JMTk1MAlvbmx5CS0JSnVsCTMwCTA6MDAJMAlTCitSdWxlCU1leGljbwkxOTk2CTIwMDAJLQlBcHIJU3VuPj0xCTI6MDAJMTowMAlECitSdWxlCU1leGljbwkxOTk2CTIwMDAJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlNZXhpY28JMjAwMQlvbmx5CS0JTWF5CVN1bj49MQkyOjAwCTE6MDAJRAorUnVsZQlNZXhpY28JMjAwMQlvbmx5CS0JU2VwCWxhc3RTdW4JMjowMAkwCVMKK1J1bGUJTWV4aWNvCTIwMDIJbWF4CS0JQXByCVN1bj49MQkyOjAwCTE6MDAJRAorUnVsZQlNZXhpY28JMjAwMgltYXgJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorIyBRdWludGFuYSBSb28KK1pvbmUgQW1lcmljYS9DYW5jdW4JLTU6NDc6MDQgLQlMTVQJMTkyMiBKYW4gIDEgIDA6MTI6NTYKKwkJCS02OjAwCS0JQ1NUCTE5ODEgRGVjIDIzCisJCQktNTowMAlNZXhpY28JRSVzVAkxOTk4IEF1ZyAgMiAgMjowMAorCQkJLTY6MDAJTWV4aWNvCUMlc1QKKyMgQ2FtcGVjaGUsIFl1Y2F0YW4KK1pvbmUgQW1lcmljYS9NZXJpZGEJLTU6NTg6MjggLQlMTVQJMTkyMiBKYW4gIDEgIDA6MDE6MzIKKwkJCS02OjAwCS0JQ1NUCTE5ODEgRGVjIDIzCisJCQktNTowMAktCUVTVAkxOTgyIERlYyAgMgorCQkJLTY6MDAJTWV4aWNvCUMlc1QKKyMgQ29haHVpbGEsIER1cmFuZ28sIE51ZXZvIExlb24sIFRhbWF1bGlwYXMKK1pvbmUgQW1lcmljYS9Nb250ZXJyZXkJLTY6NDE6MTYgLQlMTVQJMTkyMSBEZWMgMzEgMjM6MTg6NDQKKwkJCS02OjAwCS0JQ1NUCTE5ODgKKwkJCS02OjAwCVVTCUMlc1QJMTk4OQorCQkJLTY6MDAJTWV4aWNvCUMlc1QKKyMgQ2VudHJhbCBNZXhpY28KK1pvbmUgQW1lcmljYS9NZXhpY29fQ2l0eSAtNjozNjozNiAtCUxNVAkxOTIyIEphbiAgMSAgMDoyMzoyNAorCQkJLTc6MDAJLQlNU1QJMTkyNyBKdW4gMTAgMjM6MDAKKwkJCS02OjAwCS0JQ1NUCTE5MzAgTm92IDE1CisJCQktNzowMAktCU1TVAkxOTMxIE1heSAgMSAyMzowMAorCQkJLTY6MDAJLQlDU1QJMTkzMSBPY3QKKwkJCS03OjAwCS0JTVNUCTE5MzIgQXByICAxCisJCQktNjowMAlNZXhpY28JQyVzVAkyMDAxIFNlcCAzMCAwMjowMAorCQkJLTY6MDAJLQlDU1QJMjAwMiBGZWIgMjAKKwkJCS02OjAwCU1leGljbwlDJXNUCisjIENoaWh1YWh1YQorWm9uZSBBbWVyaWNhL0NoaWh1YWh1YQktNzowNDoyMCAtCUxNVAkxOTIxIERlYyAzMSAyMzo1NTo0MAorCQkJLTc6MDAJLQlNU1QJMTkyNyBKdW4gMTAgMjM6MDAKKwkJCS02OjAwCS0JQ1NUCTE5MzAgTm92IDE1CisJCQktNzowMAktCU1TVAkxOTMxIE1heSAgMSAyMzowMAorCQkJLTY6MDAJLQlDU1QJMTkzMSBPY3QKKwkJCS03OjAwCS0JTVNUCTE5MzIgQXByICAxCisJCQktNjowMAktCUNTVAkxOTk2CisJCQktNjowMAlNZXhpY28JQyVzVAkxOTk4CisJCQktNjowMAktCUNTVAkxOTk4IEFwciBTdW4+PTEgMzowMAorCQkJLTc6MDAJTWV4aWNvCU0lc1QKKyMgU29ub3JhCitab25lIEFtZXJpY2EvSGVybW9zaWxsbwktNzoyMzo1MiAtCUxNVAkxOTIxIERlYyAzMSAyMzozNjowOAorCQkJLTc6MDAJLQlNU1QJMTkyNyBKdW4gMTAgMjM6MDAKKwkJCS02OjAwCS0JQ1NUCTE5MzAgTm92IDE1CisJCQktNzowMAktCU1TVAkxOTMxIE1heSAgMSAyMzowMAorCQkJLTY6MDAJLQlDU1QJMTkzMSBPY3QKKwkJCS03OjAwCS0JTVNUCTE5MzIgQXByICAxCisJCQktNjowMAktCUNTVAkxOTQyIEFwciAyNAorCQkJLTc6MDAJLQlNU1QJMTk0OSBKYW4gMTQKKwkJCS04OjAwCS0JUFNUCTE5NzAKKwkJCS03OjAwCU1leGljbwlNJXNUCTE5OTkKKwkJCS03OjAwCS0JTVNUCisjIEJhamEgQ2FsaWZvcm5pYSBTdXIsIE5heWFyaXQsIFNpbmFsb2EKK1pvbmUgQW1lcmljYS9NYXphdGxhbgktNzowNTo0MCAtCUxNVAkxOTIxIERlYyAzMSAyMzo1NDoyMAorCQkJLTc6MDAJLQlNU1QJMTkyNyBKdW4gMTAgMjM6MDAKKwkJCS02OjAwCS0JQ1NUCTE5MzAgTm92IDE1CisJCQktNzowMAktCU1TVAkxOTMxIE1heSAgMSAyMzowMAorCQkJLTY6MDAJLQlDU1QJMTkzMSBPY3QKKwkJCS03OjAwCS0JTVNUCTE5MzIgQXByICAxCisJCQktNjowMAktCUNTVAkxOTQyIEFwciAyNAorCQkJLTc6MDAJLQlNU1QJMTk0OSBKYW4gMTQKKwkJCS04OjAwCS0JUFNUCTE5NzAKKwkJCS03OjAwCU1leGljbwlNJXNUCisjIEJhamEgQ2FsaWZvcm5pYQorWm9uZSBBbWVyaWNhL1RpanVhbmEJLTc6NDg6MDQgLQlMTVQJMTkyMiBKYW4gIDEgIDA6MTE6NTYKKwkJCS03OjAwCS0JTVNUCTE5MjQKKwkJCS04OjAwCS0JUFNUCTE5MjcgSnVuIDEwIDIzOjAwCisJCQktNzowMAktCU1TVAkxOTMwIE5vdiAxNQorCQkJLTg6MDAJLQlQU1QJMTkzMSBBcHIgIDEKKwkJCS04OjAwCTE6MDAJUERUCTE5MzEgU2VwIDMwCisJCQktODowMAktCVBTVAkxOTQyIEFwciAyNAorCQkJLTg6MDAJMTowMAlQV1QJMTk0NSBBdWcgMTQgMjM6MDB1CisJCQktODowMAkxOjAwCVBQVAkxOTQ1IE5vdiAxMiAjIFBlYWNlCisJCQktODowMAktCVBTVAkxOTQ4IEFwciAgNQorCQkJLTg6MDAJMTowMAlQRFQJMTk0OSBKYW4gMTQKKwkJCS04OjAwCS0JUFNUCTE5NTQKKwkJCS04OjAwCUNBCVAlc1QJMTk2MQorCQkJLTg6MDAJLQlQU1QJMTk3NgorCQkJLTg6MDAJVVMJUCVzVAkxOTk2CisJCQktODowMAlNZXhpY28JUCVzVAkyMDAxCisJCQktODowMAlVUwlQJXNUCTIwMDIgRmViIDIwCisJCQktODowMAlNZXhpY28JUCVzVAorIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgRm9ybWVybHkgdGhlcmUgd2FzIGFuIEFtZXJpY2EvRW5zZW5hZGEgem9uZSwgd2hpY2ggZGlmZmVyZWQgZnJvbQorIyBBbWVyaWNhL1RpanVhbmEgb25seSBpbiB0aGF0IGl0IGRpZCBub3Qgb2JzZXJ2ZSBEU1QgZnJvbSAxOTc2CisjIHRocm91Z2ggMTk5NS4gIFRoaXMgd2FzIGFzIHBlciBTaGFua3MgKDE5OTkpLiAgQnV0IFNoYW5rcyAmIFBvdHRlbmdlciBzYXkKKyMgRW5zZW5hZGEgZGlkIG5vdCBvYnNlcnZlIERTVCBmcm9tIDE5NDggdGhyb3VnaCAxOTc1LiAgR3V5IEhhcnJpcyByZXBvcnRzCisjIHRoYXQgdGhlIDE5ODcgT0FHIHNheXMgIk9ubHkgRW5zZW5hZGEsIE1leGljYWxlLCBTYW4gRmVsaXBlIGFuZAorIyBUaWp1YW5hIG9ic2VydmUgRFNULCIgd2hpY2ggYWdyZWVzIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyIGJ1dCBpbXBsaWVzIHRoYXQKKyMgRFNULW9ic2VydmFuY2Ugd2FzIGEgdG93bi1ieS10b3duIG1hdHRlciBiYWNrIHRoZW4uICBUaGlzIGNvbmNlcm5zCisjIGRhdGEgYWZ0ZXIgMTk3MCBzbyBtb3N0IGxpa2VseSB0aGVyZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIFpvbmUKKyMgb3RoZXIgdGhhbiBBbWVyaWNhL1RpanVhbmEgZm9yIEJhamEsIGJ1dCBpdCdzIG5vdCBjbGVhciB5ZXQgd2hhdCBpdHMKKyMgbmFtZSBvciBjb250ZW50cyBzaG91bGQgYmUuCisjCisjIFJldmlsbGFnaWdlZG8gSXMKKyMgbm8gaW5mb3JtYXRpb24KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEFuZ3VpbGxhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvQW5ndWlsbGEJLTQ6MTI6MTYgLQlMTVQJMTkxMiBNYXIgMgorCQkJLTQ6MDAJLQlBU1QKKworIyBBbnRpZ3VhIGFuZCBCYXJidWRhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFtZXJpY2EvQW50aWd1YQktNDowNzoxMiAtCUxNVAkxOTEyIE1hciAyCisJCQktNTowMAktCUVTVAkxOTUxCisJCQktNDowMAktCUFTVAorCisjIEJhaGFtYXMKKyMKKyMgRnJvbSBTdWUgV2lsbGlhbXMgKDIwMDYtMTItMDcpOgorIyBUaGUgQmFoYW1hcyBhbm5vdW5jZWQgYWJvdXQgYSBtb250aCBhZ28gdGhhdCB0aGV5IHBsYW4gdG8gY2hhbmdlIHRoZWlyIERTVAorIyBydWxlcyB0byBzeW5jIHdpdGggdGhlIFUuUy4gc3RhcnRpbmcgaW4gMjAwNy4uLi4KKyMgaHR0cDovL3d3dy5qb25lc2JhaGFtYXMuY29tLz9jPTQ1JmE9MTA0MTIKKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJQmFoYW1hcwkxOTY0CTE5NzUJLQlPY3QJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlCYWhhbWFzCTE5NjQJMTk3NQktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFtZXJpY2EvTmFzc2F1CS01OjA5OjI0IC0JTE1UCTE5MTIgTWFyIDIKKwkJCS01OjAwCUJhaGFtYXMJRSVzVAkxOTc2CisJCQktNTowMAlVUwlFJXNUCisKKyMgQmFyYmFkb3MKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUJhcmIJMTk3Nwlvbmx5CS0JSnVuCTEyCTI6MDAJMTowMAlECitSdWxlCUJhcmIJMTk3NwkxOTc4CS0JT2N0CVN1bj49MQkyOjAwCTAJUworUnVsZQlCYXJiCTE5NzgJMTk4MAktCUFwcglTdW4+PTE1CTI6MDAJMTowMAlECitSdWxlCUJhcmIJMTk3OQlvbmx5CS0JU2VwCTMwCTI6MDAJMAlTCitSdWxlCUJhcmIJMTk4MAlvbmx5CS0JU2VwCTI1CTI6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvQmFyYmFkb3MJLTM6NTg6MjggLQlMTVQJMTkyNAkJIyBCcmlkZ2V0b3duCisJCQktMzo1ODoyOCAtCUJNVAkxOTMyCSAgIyBCcmlkZ2V0b3duIE1lYW4gVGltZQorCQkJLTQ6MDAJQmFyYglBJXNUCisKKyMgQmVsaXplCisjIFdoaXRtYW4gZW50aXJlbHkgZGlzYWdyZWVzIHdpdGggU2hhbmtzOyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUJlbGl6ZQkxOTE4CTE5NDIJLQlPY3QJU3VuPj0yCTA6MDAJMDozMAlIRAorUnVsZQlCZWxpemUJMTkxOQkxOTQzCS0JRmViCVN1bj49OQkwOjAwCTAJUworUnVsZQlCZWxpemUJMTk3Mwlvbmx5CS0JRGVjCSA1CTA6MDAJMTowMAlECitSdWxlCUJlbGl6ZQkxOTc0CW9ubHkJLQlGZWIJIDkJMDowMAkwCVMKK1J1bGUJQmVsaXplCTE5ODIJb25seQktCURlYwkxOAkwOjAwCTE6MDAJRAorUnVsZQlCZWxpemUJMTk4Mwlvbmx5CS0JRmViCTEyCTA6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFtZXJpY2EvQmVsaXplCS01OjUyOjQ4IC0JTE1UCTE5MTIgQXByCisJCQktNjowMAlCZWxpemUJQyVzVAorCisjIEJlcm11ZGEKKworIyBGcm9tIERhbiBKb25lcywgcmVwb3J0aW5nIGluIFRoZSBSb3lhbCBHYXpldHRlICgyMDA2LTA2LTI2KToKKworIyBOZXh0IHllYXIsIGhvd2V2ZXIsIGNsb2NrcyBpbiB0aGUgVVMgd2lsbCBnbyBmb3J3YXJkIG9uIHRoZSBzZWNvbmQgU3VuZGF5CisjIGluIE1hcmNoLCB1bnRpbCB0aGUgZmlyc3QgU3VuZGF5IGluIE5vdmVtYmVyLiAgQW5kLCBhZnRlciB0aGUgVGltZSBab25lCisjIChTZWFzb25hbCBWYXJpYXRpb24pIEJpbGwgMjAwNiB3YXMgcGFzc2VkIGluIHRoZSBIb3VzZSBvZiBBc3NlbWJseSBvbgorIyBGcmlkYXksIHRoZSBzYW1lIHRoaW5nIHdpbGwgaGFwcGVuIGluIEJlcm11ZGEuCisjIGh0dHA6Ly93d3cudGhlcm95YWxnYXpldHRlLmNvbS9hcHBzL3BiY3MuZGxsL2FydGljbGU/QUlEPS8yMDA2MDUyOS9ORVdTLzEwNTI5MDEzNQorCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEF0bGFudGljL0Jlcm11ZGEJLTQ6MTk6MDQgLQlMTVQJMTkzMCBKYW4gIDEgMjowMCAgICAjIEhhbWlsdG9uCisJCQktNDowMAktCUFTVAkxOTc0IEFwciAyOCAyOjAwCisJCQktNDowMAlCYWhhbWFzCUElc1QJMTk3NgorCQkJLTQ6MDAJVVMJQSVzVAorCisjIENheW1hbiBJcworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBbWVyaWNhL0NheW1hbgktNToyNTozMiAtCUxNVAkxODkwCQkjIEdlb3JnZXRvd24KKwkJCS01OjA3OjEyIC0JS01UCTE5MTIgRmViICAgICMgS2luZ3N0b24gTWVhbiBUaW1lCisJCQktNTowMAktCUVTVAorCisjIENvc3RhIFJpY2EKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUNSCTE5NzkJMTk4MAktCUZlYglsYXN0U3VuCTA6MDAJMTowMAlECitSdWxlCUNSCTE5NzkJMTk4MAktCUp1bglTdW4+PTEJMDowMAkwCVMKK1J1bGUJQ1IJMTk5MQkxOTkyCS0JSmFuCVNhdD49MTUJMDowMAkxOjAwCUQKKyMgSUFUQSBTU0lNICgxOTkxLTA5KSBzYXlzIHRoZSBmb2xsb3dpbmcgd2FzIGF0IDE6MDA7CisjIGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlDUgkxOTkxCW9ubHkJLQlKdWwJIDEJMDowMAkwCVMKK1J1bGUJQ1IJMTk5Mglvbmx5CS0JTWFyCTE1CTA6MDAJMAlTCisjIFRoZXJlIGFyZSB0b28gbWFueSBTYW4gSm9zZXMgZWxzZXdoZXJlLCBzbyB3ZSdsbCB1c2UgYENvc3RhIFJpY2EnLgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL0Nvc3RhX1JpY2EJLTU6MzY6MjAgLQlMTVQJMTg5MAkJIyBTYW4gSm9zZQorCQkJLTU6MzY6MjAgLQlTSk1UCTE5MjEgSmFuIDE1ICMgU2FuIEpvc2UgTWVhbiBUaW1lCisJCQktNjowMAlDUglDJXNUCisjIENvY28KKyMgbm8gaW5mb3JtYXRpb247IHByb2JhYmx5IGxpa2UgQW1lcmljYS9Db3N0YV9SaWNhCisKKyMgQ3ViYQorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgxOTk5LTAzLTI5KToKKyMgVGhlIDE5OTktMDMtMjggZXhoaWJpdGlvbiBiYXNlYmFsbCBnYW1lIGhlbGQgaW4gSGF2YW5hLCBDdWJhLCBiZXR3ZWVuCisjIHRoZSBDdWJhbiBOYXRpb25hbCBUZWFtIGFuZCB0aGUgQmFsdGltb3JlIE9yaW9sZXMgd2FzIGNhcnJpZWQgbGl2ZSBvbgorIyB0aGUgT3Jpb2xlcyBSYWRpbyBOZXR3b3JrLCBpbmNsdWRpbmcgYWZmaWxpYXRlIFdUT1AgaW4gV2FzaGluZ3RvbiwgREMuCisjIER1cmluZyB0aGUgZ2FtZSwgcGxheS1ieS1wbGF5IGFubm91bmNlciBKaW0gSHVudGVyIG5vdGVkIHRoYXQKKyMgIldlJ2xsIGJlIGxvc2luZyB0d28gaG91cnMgb2Ygc2xlZXAuLi5DdWJhIHN3aXRjaGVkIHRvIERheWxpZ2h0IFNhdmluZworIyBUaW1lIHRvZGF5LiIgIChUaGUgInR3byBob3VyIiByZW1hcmsgcmVmZXJyZWQgdG8gbG9zaW5nIG9uZSBob3VyIG9mCisjIHNsZWVwIG9uIDE5OTktMDMtMjgtLXdoZW4gdGhlIGFubm91bmNlcnMgd2VyZSBpbiBDdWJhIGFzIGl0IHN3aXRjaGVkCisjIHRvIERTVC0tYW5kIG9uZSBtb3JlIGhvdXIgb24gMTk5OS0wNC0wNC0td2hlbiB0aGUgYW5ub3VuY2VycyB3aWxsIGhhdmUKKyMgcmV0dXJuZWQgdG8gQmFsdGltb3JlLCB3aGljaCBzd2l0Y2hlcyBvbiB0aGF0IGRhdGUuKQorCisjIEZyb20gRXZlcnQgdmFuIGRlciBWZWVyIHZpYSBTdGVmZmVuIFRob3JzZW4gKDIwMDQtMTAtMjgpOgorIyBDdWJhIGlzIG5vdCBnb2luZyBiYWNrIHRvIHN0YW5kYXJkIHRpbWUgdGhpcyB5ZWFyLgorIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgaHR0cDovL3d3dy5ncmFubWEuY3UvaW5nbGVzLzIwMDQvc2VwdGllbWJyZS9qdWV2MzAvNDFtZWRpZC1pLmh0bWwKKyMgc2F5cyB0aGF0IGl0J3MgZHVlIHRvIGEgcHJvYmxlbSBhdCB0aGUgQW50b25pbyBHdWl0ZXJhcworIyB0aGVybW9lbGVjdHJpYyBwbGFudCwgYW5kIHNheXMgIlRoaXMgT2N0b2JlciB0aGVyZSB3aWxsIGJlIG5vIHJldHVybgorIyB0byBub3JtYWwgaG91cnMgKGFmdGVyIGRheWxpZ2h0IHNhdmluZyB0aW1lKSIuCisjIEZvciBub3csIGxldCdzIGFzc3VtZSB0aGF0IGl0J3MgYSB0ZW1wb3JhcnkgbWVhc3VyZS4KKworIyBGcm9tIENhcmxvcyBBLiBDYXJuZXJvIERlbGdhZG8gKDIwMDUtMTEtMTIpOgorIyBUaGlzIHllYXIgKGp1c3QgbGlrZSBpbiAyMDA0LTIwMDUpIHRoZXJlJ3Mgbm8gY2hhbmdlIGluIHRpbWUgem9uZQorIyBhZGp1c3RtZW50IGluIEN1YmEuICBXZSB3aWxsIHN0YXkgaW4gZGF5bGlnaHQgc2F2aW5nIHRpbWU6CisjIGh0dHA6Ly93d3cuZ3Jhbm1hLmN1L2VzcGFub2wvMjAwNS9ub3ZpZW1icmUvbWllcjkvaG9yYXJpby5odG1sCisKKyMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDYtMTAtMjEpOgorIyBBbiBhcnRpY2xlIGluIEdSQU5NQSBJTlRFUk5BQ0lPTkFMIGNsYWltcyB0aGF0IEN1YmEgd2lsbCBlbmQKKyMgdGhlIDMgeWVhcnMgb2YgcGVybWFuZW50IERTVCBuZXh0IHdlZWtlbmQsIHNlZQorIyBodHRwOi8vd3d3LmdyYW5tYS5jdS9pbmdsZXMvMjAwNi9vY3R1YnJlL2x1bjE2LzQzaG9yYXJpby5odG1sCisjICJPbiBTYXR1cmRheSBuaWdodCwgT2N0b2JlciAyOCBnb2luZyBpbnRvIFN1bmRheSwgT2N0b2JlciAyOSwgYXQgMDE6MDAsCisjIHdhdGNoZXMgc2hvdWxkIGJlIHNldCBiYWNrIG9uZSBob3VyIC0tIGdvaW5nIGJhY2sgdG8gMDA6MDAgaG91cnMgLS0gcmV0dXJuaW5nCisjIHRvIHRoZSBub3JtYWwgc2NoZWR1bGUuLi4uCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNy0wMy0wMik6CisjIGh0dHA6Ly93d3cuZ3Jhbm1hLmN1YmF3ZWIuY3UvZW5nbGlzaC9uZXdzL2FydDg5Lmh0bWwsIGRhdGVkIHllc3RlcmRheSwKKyMgc2F5cyBDdWJhbiBjbG9ja3Mgd2lsbCBhZHZhbmNlIGF0IG1pZG5pZ2h0IG9uIE1hcmNoIDEwLgorIyBGb3IgbGFjayBvZiBiZXR0ZXIgaW5mb3JtYXRpb24sIGFzc3VtZSBDdWJhIHdpbGwgdXNlIFVTIHJ1bGVzLAorIyBleGNlcHQgdGhhdCBpdCBzd2l0Y2hlcyBhdCBtaWRuaWdodCBzdGFuZGFyZCB0aW1lIGFzIHVzdWFsLgorIworIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwNy0xMC0yNSk6CisjIENhcmxvcyBBbGJlcnRvIEZvbnNlY2EgQXJhdXogaW5mb3JtZWQgbWUgdGhhdCBDdWJhIHdpbGwgZW5kIERTVCBvbmUgd2VlayAKKyMgZWFybGllciAtIG9uIHRoZSBsYXN0IFN1bmRheSBvZiBPY3RvYmVyLCBqdXN0IGxpa2UgaW4gMjAwNi4KKyMgCisjIEhlIHN1cHBsaWVkIHRoZXNlIHJlZmVyZW5jZXM6CisjIAorIyBodHRwOi8vd3d3LnByZW5zYWxhdGluYS5jb20ubXgvYXJ0aWNsZS5hc3A/SUQ9JTdCNENDMzJDMUItQTlGNy00MkZCLThBMDctODYzMUFGQzkyM0FGJTdEJmxhbmd1YWdlPUVTCisjIGh0dHA6Ly9hY3R1YWxpZGFkLnRlcnJhLmVzL3NvY2llZGFkL2FydGljdWxvL2N1YmFfbGxhbWFfYWhvcnJhcl9lbmVyZ2lhX2NhbWJpb18xOTU3MDQ0Lmh0bQorIyAKKyMgRnJvbSBBbGV4IEtyeXZlbmlzaGV2ICgyMDA3LTEwLTI1KToKKyMgSGVyZSBpcyBhbHNvIGFydGljbGUgZnJvbSBHcmFubWEgKEN1YmEpOgorIyAKKyMgW1JlZ2lyYV0gZWwgSG9yYXJpbyBOb3JtYWwgZGVzZGUgZWwgW3Byb3hpbW9dIGRvbWluZ28gMjggZGUgb2N0dWJyZQorIyBodHRwOi8vd3d3LmdyYW5tYS5jdWJhd2ViLmN1LzIwMDcvMTAvMjQvbmFjaW9uYWwvYXJ0aWMwNy5odG1sCisjIAorIyBodHRwOi8vd3d3LndvcmxkdGltZXpvbmUuY29tL2RzdF9uZXdzL2RzdF9uZXdzX2N1YmEwMy5odG1sCisKKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDIwMDgtMDMtMDkpOgorIyBJJ20gaW4gTWFyeWxhbmQgd2hpY2ggaXMgbm93IG9ic2VydmluZyBVbml0ZWQgU3RhdGVzIEVhc3Rlcm4gRGF5bGlnaHQKKyMgVGltZS4gQXQgOTo0NCBsb2NhbCB0aW1lIEkgdXNlZCBSZWFsUGxheWVyIHRvIGxpc3RlbiB0bworIyA8YSBocmVmPSJodHRwOi8vbWVkaWEuZW5ldC5jdS9yYWRpb3JlbG9qIj4KKyMgaHR0cDovL21lZGlhLmVuZXQuY3UvcmFkaW9yZWxvagorIyA8L2E+LCBhIEN1YmFuIGluZm9ybWF0aW9uIHN0YXRpb24sIGFuZCBoZWFyZAorIyB0aGUgdGltZSBhbm5vdW5jZWQgYXMgIm9jaG8gY3VhcmVudGEgeSBjdWF0cm8iICgiZWlnaHQgZm9ydHktZm91ciIpLAorIyBpbmRpY2F0aW5nIHRoYXQgQ3ViYSBpcyBzdGlsbCBvbiBzdGFuZGFyZCB0aW1lLgorCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA4LTAzLTEyKToKKyMgSXQgc2VlbXMgdGhhdCBDdWJhIHdpbGwgc3RhcnQgRFNUIG9uIFN1bmRheSwgMjAwNy0wMy0xNi4uLgorIyBJdCB3YXMgYW5ub3VuY2VkIHllc3RlcmRheSwgYWNjb3JkaW5nIHRvIHRoaXMgc291cmNlIChpbiBTcGFuaXNoKToKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5ubmMuY3ViYXdlYi5jdS9tYXJ6by0yMDA4L2NpZW4tMS0xMS0zLTA4Lmh0bSI+CisjIGh0dHA6Ly93d3cubm5jLmN1YmF3ZWIuY3UvbWFyem8tMjAwOC9jaWVuLTEtMTEtMy0wOC5odG0KKyMgPC9hPgorIworIyBTb21lIG1vcmUgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBpcyBwb3N0ZWQgaGVyZToKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vbmV3cy90aW1lL2N1YmEtc3RhcnRzLWRzdC1tYXJjaC0xNi5odG1sIj4KKyMgaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vbmV3cy90aW1lL2N1YmEtc3RhcnRzLWRzdC1tYXJjaC0xNi5odG1sCisjIDwvYT4KKyMKKyMgVGhlIGFydGljbGUgYWxzbyBzYXlzIHRoYXQgQ3ViYSBoYXMgYmVlbiBvYnNlcnZpbmcgRFNUIHNpbmNlIDE5NjMsCisjIHdoaWxlIFNoYW5rcyAoYW5kIHR6ZGF0YSkgaGFzIDE5NjUgYXMgdGhlIGZpcnN0IGRhdGUgKGV4Y2VwdCBpbiB0aGUKKyMgMTk0MCdzKS4gTWFueSBvdGhlciB3ZWIgcGFnZXMgaW4gQ3ViYSBhbHNvIGNsYWltIHRoYXQgaXQgaGFzIGJlZW4KKyMgb2JzZXJ2ZWQgc2luY2UgMTk2MywgYnV0IHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAxOTcwIC0gYW4gZXhjZXB0aW9uCisjIHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIHR6ZGF0YS9TaGFua3MuIFNvIHRoZXJlIGlzIGEgY2hhbmNlIHdlIG5lZWQgdG8KKyMgY2hhbmdlIHNvbWUgaGlzdG9yaWMgcmVjb3JkcyBhcyB3ZWxsLgorIworIyBPbmUgZXhhbXBsZToKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5yYWRpb2hjLmN1L2VzcGFub2wvbm90aWNpYXMvbWFyMDcvMTFtYXIvaG9yLmh0bSI+CisjIGh0dHA6Ly93d3cucmFkaW9oYy5jdS9lc3Bhbm9sL25vdGljaWFzL21hcjA3LzExbWFyL2hvci5odG0KKyMgPC9hPgorCisjIEZyb20gSmVzcGVyIE5vcmdhYXJkIFdlbGVuICgyMDA4LTAzLTEzKToKKyMgVGhlIEN1YmFuIHRpbWUgY2hhbmdlIGhhcyBqdXN0IGJlZW4gY29uZmlybWVkIG9uIHRoZSBtb3N0IGF1dGhvcml0YXRpdmUKKyMgd2ViIHNpdGUsIHRoZSBHcmFubWEuICBQbGVhc2UgY2hlY2sgb3V0CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ3Jhbm1hLmN1YmF3ZWIuY3UvMjAwOC8wMy8xMy9uYWNpb25hbC9hcnRpYzEwLmh0bWwiPgorIyBodHRwOi8vd3d3LmdyYW5tYS5jdWJhd2ViLmN1LzIwMDgvMDMvMTMvbmFjaW9uYWwvYXJ0aWMxMC5odG1sCisjIDwvYT4KKyMKKyMgQmFzaWNhbGx5IGFzIGV4cGVjdGVkIGFmdGVyIFN0ZWZmZW4gVGhvcnNlbnMgaW5mb3JtYXRpb24sIHRoZSBjaGFuZ2UKKyMgd2lsbCB0YWtlIHBsYWNlIG1pZG5pZ2h0IGJldHdlZW4gU2F0dXJkYXkgYW5kIFN1bmRheS4KKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMjAwOC0wMy0xMik6CisjIEFzc3VtZSBTdW4+PTE1ICh0aGlyZCBTdW5kYXkpIGdvaW5nIGZvcndhcmQuCisKKyMgRnJvbSBBbGV4YW5kZXIgS3JpdmVueXNoZXYgKDIwMDktMDMtMDQpCisjIEFjY29yZGluZyB0byB0aGUgUmFkaW8gUmVsb2ogLSBDdWJhIHdpbGwgc3RhcnQgRGF5bGlnaHQgU2F2aW5nIFRpbWUgb24KKyMgbWlkbmlnaHQgYmV0d2VlbiBTYXR1cmRheSwgTWFyY2ggMDcsIDIwMDkgYW5kIFN1bmRheSwgTWFyY2ggMDgsIDIwMDktCisjIG5vdCBvbiBtaWRuaWdodCBNYXJjaCAxNCAvIE1hcmNoIDE1IGFzIHByZXZpb3VzbHkgdGhvdWdodC4KKyMKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLmNvbS9kc3RfbmV3cy9kc3RfbmV3c19jdWJhMDUuaHRtbCI+CisjIGh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5jb20vZHN0X25ld3MvZHN0X25ld3NfY3ViYTA1Lmh0bWwKKyMgKGluIFNwYW5pc2gpCisjIDwvYT4KKworIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMjAwOS0wMy0wOSkKKyMgSSBsaXN0ZW5lZCBvdmVyIHRoZSBJbnRlcm5ldCB0bworIyA8YSBocmVmPSJodHRwOi8vbWVkaWEuZW5ldC5jdS9yZWFkaW9yZWxvaiI+CisjIGh0dHA6Ly9tZWRpYS5lbmV0LmN1L3JlYWRpb3JlbG9qCisjIDwvYT4KKyMgdGhpcyBtb3JuaW5nOyB3aGVuIGl0IHdhcyAxMDowNSBhLiBtLiBoZXJlIGluIEJldGhlc2RhLCBNYXJ5bGFuZCB0aGUKKyMgdGhlIHRpbWUgd2FzIGFubm91bmNlZCBhcyAiZGlleiBjaW5jbyItLXRoZSBzYW1lIHRpbWUgYXMgaGVyZSwgaW5kaWNhdGluZworIyB0aGF0IGhhcyBpbmRlZWQgc3dpdGNoZWQgdG8gRFNULiBBc3N1bWUgc2Vjb25kIFN1bmRheSBmcm9tIDIwMDkgZm9yd2FyZC4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJQ3ViYQkxOTI4CW9ubHkJLQlKdW4JMTAJMDowMAkxOjAwCUQKK1J1bGUJQ3ViYQkxOTI4CW9ubHkJLQlPY3QJMTAJMDowMAkwCVMKK1J1bGUJQ3ViYQkxOTQwCTE5NDIJLQlKdW4JU3VuPj0xCTA6MDAJMTowMAlECitSdWxlCUN1YmEJMTk0MAkxOTQyCS0JU2VwCVN1bj49MQkwOjAwCTAJUworUnVsZQlDdWJhCTE5NDUJMTk0NgktCUp1bglTdW4+PTEJMDowMAkxOjAwCUQKK1J1bGUJQ3ViYQkxOTQ1CTE5NDYJLQlTZXAJU3VuPj0xCTA6MDAJMAlTCitSdWxlCUN1YmEJMTk2NQlvbmx5CS0JSnVuCTEJMDowMAkxOjAwCUQKK1J1bGUJQ3ViYQkxOTY1CW9ubHkJLQlTZXAJMzAJMDowMAkwCVMKK1J1bGUJQ3ViYQkxOTY2CW9ubHkJLQlNYXkJMjkJMDowMAkxOjAwCUQKK1J1bGUJQ3ViYQkxOTY2CW9ubHkJLQlPY3QJMgkwOjAwCTAJUworUnVsZQlDdWJhCTE5NjcJb25seQktCUFwcgk4CTA6MDAJMTowMAlECitSdWxlCUN1YmEJMTk2NwkxOTY4CS0JU2VwCVN1bj49OAkwOjAwCTAJUworUnVsZQlDdWJhCTE5NjgJb25seQktCUFwcgkxNAkwOjAwCTE6MDAJRAorUnVsZQlDdWJhCTE5NjkJMTk3NwktCUFwcglsYXN0U3VuCTA6MDAJMTowMAlECitSdWxlCUN1YmEJMTk2OQkxOTcxCS0JT2N0CWxhc3RTdW4JMDowMAkwCVMKK1J1bGUJQ3ViYQkxOTcyCTE5NzQJLQlPY3QJOAkwOjAwCTAJUworUnVsZQlDdWJhCTE5NzUJMTk3NwktCU9jdAlsYXN0U3VuCTA6MDAJMAlTCitSdWxlCUN1YmEJMTk3OAlvbmx5CS0JTWF5CTcJMDowMAkxOjAwCUQKK1J1bGUJQ3ViYQkxOTc4CTE5OTAJLQlPY3QJU3VuPj04CTA6MDAJMAlTCitSdWxlCUN1YmEJMTk3OQkxOTgwCS0JTWFyCVN1bj49MTUJMDowMAkxOjAwCUQKK1J1bGUJQ3ViYQkxOTgxCTE5ODUJLQlNYXkJU3VuPj01CTA6MDAJMTowMAlECitSdWxlCUN1YmEJMTk4NgkxOTg5CS0JTWFyCVN1bj49MTQJMDowMAkxOjAwCUQKK1J1bGUJQ3ViYQkxOTkwCTE5OTcJLQlBcHIJU3VuPj0xCTA6MDAJMTowMAlECitSdWxlCUN1YmEJMTk5MQkxOTk1CS0JT2N0CVN1bj49OAkwOjAwcwkwCVMKK1J1bGUJQ3ViYQkxOTk2CW9ubHkJLQlPY3QJIDYJMDowMHMJMAlTCitSdWxlCUN1YmEJMTk5Nwlvbmx5CS0JT2N0CTEyCTA6MDBzCTAJUworUnVsZQlDdWJhCTE5OTgJMTk5OQktCU1hcglsYXN0U3VuCTA6MDBzCTE6MDAJRAorUnVsZQlDdWJhCTE5OTgJMjAwMwktCU9jdAlsYXN0U3VuCTA6MDBzCTAJUworUnVsZQlDdWJhCTIwMDAJMjAwNAktCUFwcglTdW4+PTEJMDowMHMJMTowMAlECitSdWxlCUN1YmEJMjAwNgltYXgJLQlPY3QJbGFzdFN1bgkwOjAwcwkwCVMKK1J1bGUJQ3ViYQkyMDA3CW9ubHkJLQlNYXIJU3VuPj04CTA6MDBzCTE6MDAJRAorUnVsZQlDdWJhCTIwMDgJb25seQktCU1hcglTdW4+PTE1CTA6MDBzCTE6MDAJRAorUnVsZQlDdWJhCTIwMDkJbWF4CS0JTWFyCVN1bj49OAkwOjAwcwkxOjAwCUQKKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBbWVyaWNhL0hhdmFuYQktNToyOToyOCAtCUxNVAkxODkwCisJCQktNToyOTozNiAtCUhNVAkxOTI1IEp1bCAxOSAxMjowMCAjIEhhdmFuYSBNVAorCQkJLTU6MDAJQ3ViYQlDJXNUCisKKyMgRG9taW5pY2EKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9Eb21pbmljYQktNDowNTozNiAtCUxNVAkxOTExIEp1bCAxIDA6MDEJCSMgUm9zZWF1CisJCQktNDowMAktCUFTVAorCisjIERvbWluaWNhbiBSZXB1YmxpYworCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDAwLTEwLTMwKToKKyMgRW5yaXF1ZSBNb3JhbGVzIHJlcG9ydGVkIHRvIG1lIHRoYXQgdGhlIERvbWluaWNhbiBSZXB1YmxpYyBoYXMgY2hhbmdlZCB0aGUKKyMgdGltZSB6b25lIHRvIEVhc3Rlcm4gU3RhbmRhcmQgVGltZSBhcyBvZiBTdW5kYXkgMjkgYXQgMiBhbS4uLi4KKyMgaHR0cDovL3d3dy5saXN0aW4uY29tLmRvL2FudGVzLzI2MTAwMC9yZXB1YmxpY2EvcHJpbmNpLmh0bWwKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDAwLTEyLTA0KToKKyMgVGhhdCBVUkwgKDIwMDAtMTAtMjYsIGluIFNwYW5pc2gpIHNheXMgdGhleSBwbGFubmVkIHRvIHVzZSBVUy1zdHlsZSBEU1QuCisKKyMgRnJvbSBSaXZlcyBNY0RvdyAoMjAwMC0xMi0wMSk6CisjIERvbWluaWNhbiBSZXB1YmxpYyBjaGFuZ2VkIGl0cyBtaW5kIGFuZCBwcmVzaWRlbnRpYWwgZGVjcmVlIG9uIFR1ZXNkYXksCisjIE5vdmVtYmVyIDI4LCAyMDAwLCB3aXRoIGEgbmV3IGRlY3JlZS4gIE9uIFN1bmRheSwgRGVjZW1iZXIgMyBhdCAxOjAwIEFNIHRoZQorIyBEb21pbmljYW4gUmVwdWJsaWMgd2lsbCBiZSByZXZlcnRpbmcgdG8gOCBob3VycyBmcm9tIHRoZSBJbnRlcm5hdGlvbmFsIERhdGUKKyMgTGluZSwgYW5kIHdpbGwgbm90IGJlIHVzaW5nIERTVCBpbiB0aGUgZm9yZXNlZWFibGUgZnV0dXJlLiAgVGhlIHJlYXNvbiB0aGV5CisjIGRlY2lkZWQgdG8gdXNlIERTVCB3YXMgdG8gYmUgaW4gc3luY2ggd2l0aCBQdWVydG8gUmljbywgd2hvIHdhcyBhbHNvIGdvaW5nCisjIHRvIGltcGxlbWVudCBEU1QuICBXaGVuIFB1ZXJ0byBSaWNvIGRpZG4ndCBpbXBsZW1lbnQgRFNULCB0aGUgcHJlc2lkZW50CisjIGRlY2lkZWQgdG8gcmV2ZXJ0LgorCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCURSCTE5NjYJb25seQktCU9jdAkzMAkwOjAwCTE6MDAJRAorUnVsZQlEUgkxOTY3CW9ubHkJLQlGZWIJMjgJMDowMAkwCVMKK1J1bGUJRFIJMTk2OQkxOTczCS0JT2N0CWxhc3RTdW4JMDowMAkwOjMwCUhECitSdWxlCURSCTE5NzAJb25seQktCUZlYgkyMQkwOjAwCTAJUworUnVsZQlEUgkxOTcxCW9ubHkJLQlKYW4JMjAJMDowMAkwCVMKK1J1bGUJRFIJMTk3MgkxOTc0CS0JSmFuCTIxCTA6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvU2FudG9fRG9taW5nbyAtNDozOTozNiAtCUxNVAkxODkwCisJCQktNDo0MAktCVNETVQJMTkzMyBBcHIgIDEgMTI6MDAgIyBTLiBEb20uIE1UCisJCQktNTowMAlEUglFJXNUCTE5NzQgT2N0IDI3CisJCQktNDowMAktCUFTVAkyMDAwIE9jdCAyOSAwMjowMAorCQkJLTU6MDAJVVMJRSVzVAkyMDAwIERlYyAgMyAwMTowMAorCQkJLTQ6MDAJLQlBU1QKKworIyBFbCBTYWx2YWRvcgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlTYWx2CTE5ODcJMTk4OAktCU1heQlTdW4+PTEJMDowMAkxOjAwCUQKK1J1bGUJU2FsdgkxOTg3CTE5ODgJLQlTZXAJbGFzdFN1bgkwOjAwCTAJUworIyBUaGVyZSBhcmUgdG9vIG1hbnkgU2FuIFNhbHZhZG9ycyBlbHNld2hlcmUsIHNvIHVzZSBBbWVyaWNhL0VsX1NhbHZhZG9yCisjIGluc3RlYWQgb2YgQW1lcmljYS9TYW5fU2FsdmFkb3IuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvRWxfU2FsdmFkb3IgLTU6NTY6NDggLQlMTVQJMTkyMQkJIyBTYW4gU2FsdmFkb3IKKwkJCS02OjAwCVNhbHYJQyVzVAorCisjIEdyZW5hZGEKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQW1lcmljYS9HcmVuYWRhCS00OjA3OjAwIC0JTE1UCTE5MTEgSnVsCSMgU3QgR2VvcmdlJ3MKKwkJCS00OjAwCS0JQVNUCisKKyMgR3VhZGVsb3VwZQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL0d1YWRlbG91cGUJLTQ6MDY6MDggLQlMTVQJMTkxMSBKdW4gOAkjIFBvaW50ZSBhIFBpdHJlCisJCQktNDowMAktCUFTVAorIyBTdCBCYXJ0aGVsZW15CitMaW5rIEFtZXJpY2EvR3VhZGVsb3VwZQlBbWVyaWNhL1N0X0JhcnRoZWxlbXkKKyMgU3QgTWFydGluIChGcmVuY2ggcGFydCkKK0xpbmsgQW1lcmljYS9HdWFkZWxvdXBlCUFtZXJpY2EvTWFyaWdvdAorCisjIEd1YXRlbWFsYQorIworIyBGcm9tIEd3aWxsaW0gTGF3ICgyMDA2LTA0LTIyKSwgYWZ0ZXIgYSBoZWFkcy11cCBmcm9tIE9zY2FyIHZhbiBWbGlqbWVuOgorIyBEaWFyaW8gQ28gTGF0aW5vLCBhdAorIyBodHRwOi8vd3d3LmRpYXJpb2NvbGF0aW5vLmNvbS9pbnRlcm5hY2lvbmFsZXMvZGV0YWxsZXMuYXNwP05ld3NJRD04MDc5LAorIyBzYXlzIGluIGFuIGFydGljbGUgZGF0ZWQgMjAwNi0wNC0xOSB0aGF0IHRoZSBHdWF0ZW1hbGFuIGdvdmVybm1lbnQgaGFkCisjIGRlY2lkZWQgb24gdGhhdCBkYXRlIHRvIGFkdmFuY2Ugb2ZmaWNpYWwgdGltZSBieSA2MCBtaW51dGVzLCB0byBsZXNzZW4gdGhlCisjIGltcGFjdCBvZiB0aGUgZWxldmF0ZWQgY29zdCBvZiBvaWwuLi4uICBEYXlsaWdodCBzYXZpbmcgdGltZSB3aWxsIGxhc3QgZnJvbQorIyAyMDA2LTA0LTI5IDI0OjAwIChHdWF0ZW1hbGFuIHN0YW5kYXJkIHRpbWUpIHRvIDIwMDYtMDktMzAgKHRpbWUgdW5zcGVjaWZpZWQpLgorIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTA2LTIyKToKKyMgVGhlIE1pbmlzdHJ5IG9mIEVuZXJneSBhbmQgTWluZXMsIHByZXNzIHJlbGVhc2UgQ1AtMTUvMjAwNgorIyAoMjAwNi0wNC0xOSksIHNheXMgRFNUIGVuZHMgYXQgMjQ6MDAuICBTZWUKKyMgPGh0dHA6Ly93d3cuc2llY2Eub3JnLmd0L1NpdGlvX3B1YmxpY28vRW5lcmdldGljb3MvRG9jL01lZGlkYXMvQ2FtYmlvX0hvcmFyaW9fTmFjXzE5MDQwNi5wZGY+LgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlHdWF0CTE5NzMJb25seQktCU5vdgkyNQkwOjAwCTE6MDAJRAorUnVsZQlHdWF0CTE5NzQJb25seQktCUZlYgkyNAkwOjAwCTAJUworUnVsZQlHdWF0CTE5ODMJb25seQktCU1heQkyMQkwOjAwCTE6MDAJRAorUnVsZQlHdWF0CTE5ODMJb25seQktCVNlcAkyMgkwOjAwCTAJUworUnVsZQlHdWF0CTE5OTEJb25seQktCU1hcgkyMwkwOjAwCTE6MDAJRAorUnVsZQlHdWF0CTE5OTEJb25seQktCVNlcAkgNwkwOjAwCTAJUworUnVsZQlHdWF0CTIwMDYJb25seQktCUFwcgkzMAkwOjAwCTE6MDAJRAorUnVsZQlHdWF0CTIwMDYJb25seQktCU9jdAkgMQkwOjAwCTAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL0d1YXRlbWFsYQktNjowMjowNCAtCUxNVAkxOTE4IE9jdCA1CisJCQktNjowMAlHdWF0CUMlc1QKKworIyBIYWl0aQorIyBGcm9tIEd3aWxsaW0gTGF3ICgyMDA1LTA0LTE1KToKKyMgUmlzdG8gTy4gTnlrYW5lbiB3cm90ZSBtZSB0aGF0IEhhaXRpIGlzIG5vdyBvbiBEU1QuCisjIEkgc2VhcmNoZWQgZm9yIGNvbmZpcm1hdGlvbiwgYW5kIEkgZm91bmQgYQorIyA8YSBocmVmPSJodHRwOi8vd3d3LmhhaXRpYW5jb25zdWxhdGUub3JnL3RpbWUuZG9jIj4gcHJlc3MgcmVsZWFzZQorIyBvbiB0aGUgV2ViIHBhZ2Ugb2YgdGhlIEhhaXRpYW4gQ29uc3VsYXRlIGluIENoaWNhZ28gKDIwMDUtMDMtMzEpLAorIyA8L2E+LiAgVHJhbnNsYXRlZCBmcm9tIEZyZW5jaCwgaXQgc2F5czoKKyMKKyMgICJUaGUgUHJpbWUgTWluaXN0ZXIncyBDb21tdW5pY2F0aW9uIE9mZmljZSBub3RpZmllcyB0aGUgcHVibGljIGluIGdlbmVyYWwKKyMgICBhbmQgdGhlIHByZXNzIGluIHBhcnRpY3VsYXIgdGhhdCwgZm9sbG93aW5nIGEgZGVjaXNpb24gb2YgdGhlIEludGVyaW9yCisjICAgTWluaXN0cnkgYW5kIHRoZSBUZXJyaXRvcmlhbCBDb2xsZWN0aXZpdGllcyBbSSBzdXBwb3NlIHRoYXQgbWVhbnMgdGhlCisjICAgcHJvdmluY2VzXSwgSGFpdGkgd2lsbCBtb3ZlIHRvIEVhc3Rlcm4gRGF5bGlnaHQgVGltZSBpbiB0aGUgbmlnaHQgZnJvbSBuZXh0CisjICAgU2F0dXJkYXkgdGhlIDJuZCB0byBTdW5kYXkgdGhlIDNyZC4KKyMKKyMgICJDb25zZXF1ZW50bHksIHRoZSBQcmltZSBNaW5pc3RlcidzIENvbW11bmljYXRpb24gT2ZmaWNlIHdpc2hlcyB0byBpbmZvcm0KKyMgICB0aGUgcG9wdWxhdGlvbiB0aGF0IHRoZSBjb3VudHJ5J3MgY2xvY2tzIHdpbGwgYmUgc2V0IGZvcndhcmQgb25lIGhvdXIKKyMgICBzdGFydGluZyBhdCBtaWRuaWdodC4gIFRoaXMgcHJvdmlzaW9uIHdpbGwgaG9sZCB1bnRpbCB0aGUgbGFzdCBTYXR1cmRheSBpbgorIyAgIE9jdG9iZXIgMjAwNS4KKyMKKyMgICJQb3J0LWF1LVByaW5jZSwgTWFyY2ggMzEsIDIwMDUiCisjCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA2LTA0LTA0KToKKyMgSSBoYXZlIGJlZW4gaW5mb3JtZWQgYnkgdXNlcnMgdGhhdCBIYWl0aSBvYnNlcnZlcyBEU1QgdGhpcyB5ZWFyIGxpa2UKKyMgbGFzdCB5ZWFyLCBzbyB0aGUgY3VycmVudCAib25seSIgcnVsZSBmb3IgMjAwNSBtaWdodCBiZSBjaGFuZ2VkIHRvIGEKKyMgIm1heCIgcnVsZSBvciB0byBsYXN0IHVudGlsIDIwMDYuIChXaG8ga25vd3MgaWYgdGhleSB3aWxsIG9ic2VydmUgRFNUCisjIG5leHQgeWVhciBvciBpZiB0aGV5IHdpbGwgZXh0ZW5kIHRoZWlyIERTVCBsaWtlIFVTL0NhbmFkYSBuZXh0IHllYXIpLgorIworIyBJIGhhdmUgZm91bmQgdGhpcyBhcnRpY2xlIGFib3V0IGl0IChpbiBGcmVuY2gpOgorIyBodHRwOi8vd3d3LmhhaXRpcHJlc3NuZXR3b3JrLmNvbS9uZXdzLmNmbT9hcnRpY2xlSUQ9NzYxMgorIworIyBUaGUgcmVhc29uIHNlZW1zIHRvIGJlIGFuIGVuZXJneSBjcmlzaXMuCisKKyMgRnJvbSBTdGVwaGVuIENvbGVib3VybmUgKDIwMDctMDItMjIpOgorIyBTb21lIElBVEEgaW5mbzogSGFpdGkgd29uJ3QgYmUgaGF2aW5nIERTVCBpbiAyMDA3LgorCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUhhaXRpCTE5ODMJb25seQktCU1heQk4CTA6MDAJMTowMAlECitSdWxlCUhhaXRpCTE5ODQJMTk4NwktCUFwcglsYXN0U3VuCTA6MDAJMTowMAlECitSdWxlCUhhaXRpCTE5ODMJMTk4NwktCU9jdAlsYXN0U3VuCTA6MDAJMAlTCisjIFNoYW5rcyAmIFBvdHRlbmdlciBzYXkgQVQgaXMgMjowMCwgYnV0IElBVEEgU1NJTSAoMTk5MS8xOTk3KSBzYXlzIDE6MDBzLgorIyBHbyB3aXRoIElBVEEuCitSdWxlCUhhaXRpCTE5ODgJMTk5NwktCUFwcglTdW4+PTEJMTowMHMJMTowMAlECitSdWxlCUhhaXRpCTE5ODgJMTk5NwktCU9jdAlsYXN0U3VuCTE6MDBzCTAJUworUnVsZQlIYWl0aQkyMDA1CTIwMDYJLQlBcHIJU3VuPj0xCTA6MDAJMTowMAlECitSdWxlCUhhaXRpCTIwMDUJMjAwNgktCU9jdAlsYXN0U3VuCTA6MDAJMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvUG9ydC1hdS1QcmluY2UgLTQ6NDk6MjAgLQlMTVQJMTg5MAorCQkJLTQ6NDkJLQlQUE1UCTE5MTcgSmFuIDI0IDEyOjAwICMgUC1hLVAgTVQKKwkJCS01OjAwCUhhaXRpCUUlc1QKKworIyBIb25kdXJhcworIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IDE5MjEgSmFuIDE7IGdvIHdpdGggV2hpdG1hbidzIG1vcmUgcHJlY2lzZSBBcHIgMS4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTA1LTA1KToKKyMgd29ybGR0aW1lem9uZS5jb20gcmVwb3J0cyBhIDIwMDYtMDUtMDIgU3BhbmlzaC1sYW5ndWFnZSBBUCBhcnRpY2xlCisjIHNheWluZyBIb25kdXJhcyB3aWxsIHN0YXJ0IHVzaW5nIERTVCBtaWRuaWdodCBTYXR1cmRheSwgZWZmZWN0aXZlIDQKKyMgbW9udGhzIHVudGlsIFNlcHRlbWJlci4gIExhIFRyaWJ1bmEgcmVwb3J0ZWQgdG9kYXkKKyMgPGh0dHA6Ly93d3cubGF0cmlidW5hLmhuLzk5Mjk5Lmh0bWw+IHRoYXQgTWFudWVsIFplbGF5YSwgdGhlIHByZXNpZGVudAorIyBvZiBIb25kdXJhcywgcmVmdXNlZCB0byBiYWNrIGRvd24gb24gdGhpcy4KKworIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNi0wOC0wOCk6CisjIEl0IHNlZW1zIHRoYXQgSG9uZHVyYXMgaGFzIHJldHVybmVkIGZyb20gRFNUIHRvIHN0YW5kYXJkIHRpbWUgdGhpcyBNb25kYXkgYXQKKyMgMDA6MDAgaG91cnMgKHByb2xvbmdpbmcgU3VuZGF5IHRvIDI1IGhvdXJzIGR1cmF0aW9uKS4KKyMgaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLmNvbS9kc3RfbmV3cy9kc3RfbmV3c19ob25kdXJhczA0Lmh0bWwKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTA4LTA4KToKKyMgQWxzbyBzZWUgRGlhcmlvIEVsIEhlcmFsZG8sIFRoZSBjb3VudHJ5IHJldHVybnMgdG8gc3RhbmRhcmQgdGltZSAoMjAwNi0wOC0wOCkKKyMgPGh0dHA6Ly93d3cuZWxoZXJhbGRvLmhuL25vdGEucGhwP25pZD01NDk0MSZzZWM9MTI+LgorIyBJdCBtZW50aW9ucyBleGVjdXRpdmUgZGVjcmVlIDE4LTIwMDYuCisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDYtMDgtMTcpOgorIyBIb25kdXJhcyB3aWxsIG9ic2VydmUgRFNUIGZyb20gMjAwNyB0byAyMDA5LCBleGFjdCBkYXRlcyBhcmUgbm90CisjIHB1Ymxpc2hlZCwgSSBoYXZlIGxvY2F0ZWQgdGhpcyBhdXRob3JpdGF0aXZlIHNvdXJjZToKKyMgaHR0cDovL3d3dy5wcmVzaWRlbmNpYS5nb2IuaG4vbm90aWNpYS5hc3B4P25JZD00NworCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA3LTAzLTMwKToKKyMgaHR0cDovL3d3dy5sYXByZW5zYWhuLmNvbS9wYWlzX25vdGEucGhwP2lkMDQ5NjI9NzM4NgorIyBTbyBpdCBzZWVtcyB0aGF0IEhvbmR1cmFzIHdpbGwgbm90IGVudGVyIERTVCB0aGlzIHllYXIuLi4uCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUhvbmQJMTk4NwkxOTg4CS0JTWF5CVN1bj49MQkwOjAwCTE6MDAJRAorUnVsZQlIb25kCTE5ODcJMTk4OAktCVNlcAlsYXN0U3VuCTA6MDAJMAlTCitSdWxlCUhvbmQJMjAwNglvbmx5CS0JTWF5CVN1bj49MQkwOjAwCTE6MDAJRAorUnVsZQlIb25kCTIwMDYJb25seQktCUF1ZwlNb24+PTEJMDowMAkwCVMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9UZWd1Y2lnYWxwYSAtNTo0ODo1MiAtCUxNVAkxOTIxIEFwcgorCQkJLTY6MDAJSG9uZAlDJXNUCisjCisjIEdyZWF0IFN3YW4gSSBjZWRlZCBieSBVUyB0byBIb25kdXJhcyBpbiAxOTcyCisKKyMgSmFtYWljYQorCisjIEZyb20gQm9iIERldmluZSAoMTk4OC0wMS0yOCk6CisjIEZvbGxvd3MgVVMgcnVsZXMuCisKKyMgRnJvbSBVLiBTLiBOYXZhbCBPYnNlcnZhdG9yeSAoMTk4OS0wMS0xOSk6CisjIEpBTUFJQ0EgICAgICAgICAgICAgNSBIICBCRUhJTkQgVVRDCisKKyMgRnJvbSBTaGFua3MgJiBQb3R0ZW5nZXI6CisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFtZXJpY2EvSmFtYWljYQktNTowNzoxMiAtCUxNVAkxODkwCQkjIEtpbmdzdG9uCisJCQktNTowNzoxMiAtCUtNVAkxOTEyIEZlYiAgICAjIEtpbmdzdG9uIE1lYW4gVGltZQorCQkJLTU6MDAJLQlFU1QJMTk3NCBBcHIgMjggMjowMAorCQkJLTU6MDAJVVMJRSVzVAkxOTg0CisJCQktNTowMAktCUVTVAorCisjIE1hcnRpbmlxdWUKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9NYXJ0aW5pcXVlCS00OjA0OjIwIC0gICAgICBMTVQJMTg5MAkJIyBGb3J0LWRlLUZyYW5jZQorCQkJLTQ6MDQ6MjAgLQlGRk1UCTE5MTEgTWF5ICAgICAjIEZvcnQtZGUtRnJhbmNlIE1UCisJCQktNDowMAktCUFTVAkxOTgwIEFwciAgNgorCQkJLTQ6MDAJMTowMAlBRFQJMTk4MCBTZXAgMjgKKwkJCS00OjAwCS0JQVNUCisKKyMgTW9udHNlcnJhdAorIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgSW4gMTk5NSB2b2xjYW5pYyBlcnVwdGlvbnMgZm9yY2VkIGV2YWN1YXRpb24gb2YgUGx5bW91dGgsIHRoZSBjYXBpdGFsLgorIyB3b3JsZC5nYXpldHRlZXIuY29tIHNheXMgQ29yayBIaWxsIGlzIHRoZSBtb3N0IHBvcHVsb3VzIGxvY2F0aW9uIG5vdy4KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9Nb250c2VycmF0CS00OjA4OjUyIC0JTE1UCTE5MTEgSnVsIDEgMDowMSAgICMgQ29yayBIaWxsCisJCQktNDowMAktCUFTVAorCisjIE5pY2FyYWd1YQorIworIyBUaGlzIHVzZXMgU2hhbmtzICYgUG90dGVuZ2VyIGZvciB0aW1lcyBiZWZvcmUgMjAwNS4KKyMKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDUtMDQtMTIpOgorIyBJJ3ZlIGdvdCByZXBvcnRzIGZyb20gOCBkaWZmZXJlbnQgcGVvcGxlIHRoYXQgTmljYXJhZ3VhIGp1c3Qgc3RhcnRlZAorIyBEU1Qgb24gU3VuZGF5IDIwMDUtMDQtMTAsIGluIG9yZGVyIHRvIHNhdmUgZW5lcmd5IGJlY2F1c2Ugb2YKKyMgZXhwZW5zaXZlIHBldHJvbGV1bS4gIFRoZSBleGFjdCBlbmQgZGF0ZSBmb3IgRFNUIGlzIG5vdCB5ZXQKKyMgYW5ub3VuY2VkLCBvbmx5ICJTZXB0ZW1iZXIiIGJ1dCBzb21lIHNpdGVzIGFsc28gc2F5ICJtaWQtU2VwdGVtYmVyIi4KKyMgU29tZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBvbiB0aGUgUHJlc2lkZW50J3Mgb2ZmaWNpYWwgc2l0ZToKKyMgaHR0cDovL3d3dy5wcmVzaWRlbmNpYS5nb2IubmkvUHJlc2lkZW5jaWEvRmlsZXNfaW5kZXgvU2VjcmV0YXJpYS9Ob3RhcyUyMGRlJTIwUHJlbnNhL1ByZXNpZGVudGUvMjAwNS9BQlJJTC9Hb2JpZXJuby1kZS1uaWNhcmFndWEtYWRlbGFudGEtaG9yYS1vZmljaWFsLTA2YWJyaWwuaHRtCisjIFRoZSBEZWNyZWUsIG5vIDIzLTIwMDUgaXMgYXZhaWxhYmxlIGhlcmU6CisjIGh0dHA6Ly93d3cucHJlc2lkZW5jaWEuZ29iLm5pL2J1c2NhZG9yX2dhY2V0YS9CRC9ERUNSRVRPUy8yMDA1L0RlY3JldG8lMjAyMy0yMDA1JTIwU2UlMjBhZGVsYW50YSUyMGVuJTIwdW5hJTIwaG9yYSUyMGVuJTIwdG9kbyUyMGVsJTIwdGVycml0b3JpbyUyMG5hY2lvbmFsJTIwYXBhcnRpciUyMGRlJTIwbGFzJTIwMjRob3JhcyUyMGRlbCUyMDA5JTIwZGUlMjBBYnJpbC5wZGYKKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNS0wNS0wMSk6CisjIFRoZSBkZWNyZWUgZG9lc24ndCBzYXkgYW55dGhpbmcgYWJvdXQgZGF5bGlnaHQgc2F2aW5nLCBidXQgZm9yIG5vdyBsZXQncworIyBhc3N1bWUgdGhhdCBpdCBpcyBkYXlsaWdodCBzYXZpbmcuLi4uCisjCisjIEZyb20gR3dpbGxpbSBMYXcgKDIwMDUtMDQtMjEpOgorIyBUaGUgQXNzb2NpYXRlZCBQcmVzcyBzdG9yeSBvbiB0aGUgdGltZSBjaGFuZ2UsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdAorIyBodHRwOi8vd3d3LmxhcGFsbWFpbnRlcmFjdGl2by5jb20vZ3VpYXMvY29udGVudC9nZW4vYXAvQW1lcmljYV9MYXRpbmEvQU1DX0dFTl9OSUNBUkFHVUFfSE9SQS5odG1sCisjIGFuZCBlbHNld2hlcmUsIHNheXMgKGZpZnRoIHBhcmFncmFwaCwgdHJhbnNsYXRlZCBmcm9tIFNwYW5pc2gpOiAgIlRoZSBsYXN0CisjIHRpbWUgdGhhdCBhIGNoYW5nZSBvZiBjbG9ja3Mgd2FzIGFwcGxpZWQgdG8gc2F2ZSBlbmVyZ3kgd2FzIGluIHRoZSB5ZWFyIDIwMDAKKyMgZHVyaW5nIHRoZSBBcm5vbGRvIEFsZW1hbiBhZG1pbmlzdHJhdGlvbi4iLi4uCisjIFRoZSBub3J0aGFtZXJpY2EgZmlsZSBzYXlzIHRoYXQgTmljYXJhZ3VhIGhhcyBiZWVuIG9uIFVUQy02IGNvbnRpbnVvdXNseQorIyBzaW5jZSBEZWNlbWJlciAxOTk4LiAgSSB3YXNuJ3QgYWJsZSB0byBmaW5kIGFueSBkZXRhaWxzIG9mIE5pY2FyYWd1YW4gdGltZQorIyBjaGFuZ2VzIGluIDIwMDAuICBQZXJoYXBzIGEgbm90ZSBjb3VsZCBiZSBhZGRlZCB0byB0aGUgbm9ydGhhbWVyaWNhIGZpbGUsIHRvCisjIHRoZSBlZmZlY3QgdGhhdCB3ZSBoYXZlIGluZGlyZWN0IGV2aWRlbmNlIHRoYXQgRFNUIHdhcyBvYnNlcnZlZCBpbiAyMDAwLgorIworIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNS0xMS0wMik6CisjIE5pY2FyYWd1YSBsZWZ0IERTVCB0aGUgMjAwNS0xMC0wMiBhdCAwMDowMCAobG9jYWwgdGltZSkuCisjIGh0dHA6Ly93d3cucHJlc2lkZW5jaWEuZ29iLm5pL3ByZXNpZGVuY2lhL2ZpbGVzX2luZGV4L3NlY3JldGFyaWEvY29tdW5pY2Fkb3MvMjAwNS9zZXB0aWVtYnJlLzI2c2VwdGllbWJyZS1jYW1iaW8taG9yYS5odG0KKyMgKDIwMDUtMDktMjYpCisjCisjIEZyb20gSmVzcGVyIE5vcmdhYXJkIFdlbGVuICgyMDA2LTA1LTA1KToKKyMgaHR0cDovL3d3dy5lbG51ZXZvZGlhcmlvLmNvbS5uaS8yMDA2LzA1LzAxL25hY2lvbmFsZXMvMTg0MTAKKyMgKG15IGluZm9ybWFsIHRyYW5zbGF0aW9uKQorIyBCeSBvcmRlciBvZiB0aGUgcHJlc2lkZW50IG9mIHRoZSByZXB1YmxpYywgRW5yaXF1ZSBCb2xhbm9zLCBOaWNhcmFndWEKKyMgYWR2YW5jZWQgYnkgc2l4dHkgbWludXRlcyB0aGVpciBvZmZpY2lhbCB0aW1lLCB5ZXN0ZXJkYXkgYXQgMiBpbiB0aGUKKyMgbW9ybmluZywgYW5kIHdpbGwgc3RheSB0aGF0IHdheSB1bnRpbCAzMC50aC4gb2Ygc2VwdGVtYmVyLgorIworIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNi0wOS0zMCk6CisjIGh0dHA6Ly93d3cucHJlc2lkZW5jaWEuZ29iLm5pL2J1c2NhZG9yX2dhY2V0YS9CRC9ERUNSRVRPUy8yMDA2L0QtMDYzLTIwMDZQLVBSTi1DYW1iaW8tSG9yYS5wZGYKKyMgTXkgaW5mb3JtYWwgdHJhbnNsYXRpb24gcnVuczoKKyMgVGhlIG5hdHVyYWwgc3VuIHRpbWUgaXMgcmVzdG9yZWQgaW4gYWxsIHRoZSBuYXRpb25hbCB0ZXJyaXRvcnksIGluIHRoYXQgdGhlCisjIHRpbWUgaXMgcmV0dXJuZWQgb25lIGhvdXIgYXQgMDE6MDAgYW0gb2YgT2N0b2JlciAxIG9mIDIwMDYuCisjCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlOaWMJMTk3OQkxOTgwCS0JTWFyCVN1bj49MTYJMDowMAkxOjAwCUQKK1J1bGUJTmljCTE5NzkJMTk4MAktCUp1bglNb24+PTIzCTA6MDAJMAlTCitSdWxlCU5pYwkyMDA1CW9ubHkJLQlBcHIJMTAJMDowMAkxOjAwCUQKK1J1bGUJTmljCTIwMDUJb25seQktCU9jdAlTdW4+PTEJMDowMAkwCVMKK1J1bGUJTmljCTIwMDYJb25seQktCUFwcgkzMAkyOjAwCTE6MDAJRAorUnVsZQlOaWMJMjAwNglvbmx5CS0JT2N0CVN1bj49MQkxOjAwCTAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZQlBbWVyaWNhL01hbmFndWEJLTU6NDU6MDggLQlMTVQJMTg5MAorCQkJLTU6NDU6MTIgLQlNTVQJMTkzNCBKdW4gMjMgIyBNYW5hZ3VhIE1lYW4gVGltZT8KKwkJCS02OjAwCS0JQ1NUCTE5NzMgTWF5CisJCQktNTowMAktCUVTVAkxOTc1IEZlYiAxNgorCQkJLTY6MDAJTmljCUMlc1QJMTk5MiBKYW4gIDEgNDowMAorCQkJLTU6MDAJLQlFU1QJMTk5MiBTZXAgMjQKKwkJCS02OjAwCS0JQ1NUCTE5OTMKKwkJCS01OjAwCS0JRVNUCTE5OTcKKwkJCS02OjAwCU5pYwlDJXNUCisKKyMgUGFuYW1hCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFtZXJpY2EvUGFuYW1hCS01OjE4OjA4IC0JTE1UCTE4OTAKKwkJCS01OjE5OjM2IC0JQ01UCTE5MDggQXByIDIyICAgIyBDb2xvbiBNZWFuIFRpbWUKKwkJCS01OjAwCS0JRVNUCisKKyMgUHVlcnRvIFJpY28KKyMgVGhlcmUgYXJlIHRvbyBtYW55IFNhbiBKdWFucyBlbHNld2hlcmUsIHNvIHdlJ2xsIHVzZSBgUHVlcnRvX1JpY28nLgorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL1B1ZXJ0b19SaWNvIC00OjI0OjI1IC0JTE1UCTE4OTkgTWFyIDI4IDEyOjAwICAgICMgU2FuIEp1YW4KKwkJCS00OjAwCS0JQVNUCTE5NDIgTWF5ICAzCisJCQktNDowMAlVUwlBJXNUCTE5NDYKKwkJCS00OjAwCS0JQVNUCisKKyMgU3QgS2l0dHMtTmV2aXMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9TdF9LaXR0cwktNDoxMDo1MiAtCUxNVAkxOTEyIE1hciAyCSMgQmFzc2V0ZXJyZQorCQkJLTQ6MDAJLQlBU1QKKworIyBTdCBMdWNpYQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL1N0X0x1Y2lhCS00OjA0OjAwIC0JTE1UCTE4OTAJCSMgQ2FzdHJpZXMKKwkJCS00OjA0OjAwIC0JQ01UCTE5MTIJICAgICMgQ2FzdHJpZXMgTWVhbiBUaW1lCisJCQktNDowMAktCUFTVAorCisjIFN0IFBpZXJyZSBhbmQgTWlxdWVsb24KKyMgVGhlcmUgYXJlIHRvbyBtYW55IFN0IFBpZXJyZXMgZWxzZXdoZXJlLCBzbyB3ZSdsbCB1c2UgYE1pcXVlbG9uJy4KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9NaXF1ZWxvbgktMzo0NDo0MCAtCUxNVAkxOTExIE1heSAxNQkjIFN0IFBpZXJyZQorCQkJLTQ6MDAJLQlBU1QJMTk4MCBNYXkKKwkJCS0zOjAwCS0JUE1TVAkxOTg3ICMgUGllcnJlICYgTWlxdWVsb24gVGltZQorCQkJLTM6MDAJQ2FuYWRhCVBNJXNUCisKKyMgU3QgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9TdF9WaW5jZW50CS00OjA0OjU2IC0JTE1UCTE4OTAJCSMgS2luZ3N0b3duCisJCQktNDowNDo1NiAtCUtNVAkxOTEyCSAgICMgS2luZ3N0b3duIE1lYW4gVGltZQorCQkJLTQ6MDAJLQlBU1QKKworIyBUdXJrcyBhbmQgQ2FpY29zCisjCisjIEZyb20gQ2hyaXMgRHVubiBpbgorIyA8aHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTQxNTAwNz4KKyMgKDIwMDctMDMtMTUpOiBJbiB0aGUgVHVya3MgJiBDYWljb3MgSXNsYW5kcyAoQW1lcmljYS9HcmFuZF9UdXJrKSB0aGUKKyMgZGF5bGlnaHQgc2F2aW5nIGRhdGVzIGZvciB0aW1lIGNoYW5nZXMgaGF2ZSBiZWVuIGFkanVzdGVkIHRvIG1hdGNoCisjIHRoZSByZWNlbnQgVS5TLiBjaGFuZ2Ugb2YgZGF0ZXMuCisjCisjIEZyb20gQnJpYW4gSW5nbGlzICgyMDA3LTA0LTI4KToKKyMgaHR0cDovL3d3dy50dXJrc2FuZGNhaWNvcy50Yy9jYWxlbmRhci9pbmRleC5odG0gWzIwMDctMDQtMjZdCisjIHRoZXJlIGlzIGFuIGVudHJ5IGZvciBOb3YgNCAiRGF5bGlnaHQgU2F2aW5ncyBUaW1lIEVuZHMgMjAwNyIgYW5kIHRocmVlCisjIHJvd3MgYmVmb3JlIHRoYXQgdGhlcmUgaXMgYW4gb3V0IG9mIGRhdGUgZW50cnkgZm9yIE9jdDoKKyMgIkVhc3Rlcm4gU3RhbmRhcmQgVGltZXMgQmVnaW5zIDIwMDcKKyMgQ2xvY2tzIGFyZSBzZXQgYmFjayBvbmUgaG91ciBhdCAyOjAwIGEubS4gbG9jYWwgRGF5bGlnaHQgU2F2aW5nIFRpbWUiCisjIGluZGljYXRpbmcgdGhhdCB0aGUgbm9ybWFsIEVUIHJ1bGVzIGFyZSBmb2xsb3dlZC4KKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wNS0wMSk6CisjIFNoYW5rcyAmIFBvdHRlbmdlciBzYXkgdGhleSB1c2UgVVMgRFNUIHJ1bGVzLCBidXQgSUFUQSBTU0lNICgxOTkxLzE5OTgpCisjIHNheXMgdGhleSBzd2l0Y2ggYXQgbWlkbmlnaHQuICBHbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KKyMKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCVRDCTE5NzkJMTk4NgktCUFwcglsYXN0U3VuCTI6MDAJMTowMAlECitSdWxlCVRDCTE5NzkJMjAwNgktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVRDCTE5ODcJMjAwNgktCUFwcglTdW4+PTEJMjowMAkxOjAwCUQKK1J1bGUJVEMJMjAwNwltYXgJLQlNYXIJU3VuPj04CTI6MDAJMTowMAlECitSdWxlCVRDCTIwMDcJbWF4CS0JTm92CVN1bj49MQkyOjAwCTAJUworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL0dyYW5kX1R1cmsJLTQ6NDQ6MzIgLQlMTVQJMTg5MAorCQkJLTU6MDc6MTIgLQlLTVQJMTkxMiBGZWIgICAgIyBLaW5nc3RvbiBNZWFuIFRpbWUKKwkJCS01OjAwCVRDCUUlc1QKKworIyBCcml0aXNoIFZpcmdpbiBJcworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL1RvcnRvbGEJLTQ6MTg6MjggLQlMTVQJMTkxMSBKdWwgICAgIyBSb2FkIFRvd24KKwkJCS00OjAwCS0JQVNUCisKKyMgVmlyZ2luIElzCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvU3RfVGhvbWFzCS00OjE5OjQ0IC0JTE1UCTE5MTEgSnVsICAgICMgQ2hhcmxvdHRlIEFtYWxpZQorCQkJLTQ6MDAJLQlBU1QKZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9wYWNpZmljbmV3IGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3BhY2lmaWNuZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1MTJjMQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9wYWNpZmljbmV3CkBAIC0wLDAgKzEsMjkgQEAKKyMgPHByZT4KKyMgQCgjKXBhY2lmaWNuZXcJOC4yCisjIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiwgc28gY2xhcmlmaWVkIGFzIG9mCisjIDIwMDktMDUtMTcgYnkgQXJ0aHVyIERhdmlkIE9sc29uLgorCisjIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgxOTg5LTA0LTA1KToKKyMgT24gMTk4OS0wNC0wNSwgdGhlIFUuIFMuIEhvdXNlIG9mIFJlcHJlc2VudGF0aXZlcyBwYXNzZWQgKDIzOC0xNTQpIGEgYmlsbAorIyBlc3RhYmxpc2hpbmcgIlBhY2lmaWMgUHJlc2lkZW50aWFsIEVsZWN0aW9uIFRpbWUiOyBpdCB3YXMgbm90IGFjdGVkIG9uCisjIGJ5IHRoZSBTZW5hdGUgb3Igc2lnbmVkIGludG8gbGF3IGJ5IHRoZSBQcmVzaWRlbnQuCisjIFlvdSBtaWdodCB3YW50IHRvIGNoYW5nZSB0aGUgIlBFIiAoUHJlc2lkZW50aWFsIEVsZWN0aW9uKSBiZWxvdyB0bworIyAiUSIgKFF1YWRyZW5uaWFsKSB0byBtYWludGFpbiB0aHJlZS1jaGFyYWN0ZXIgem9uZSBhYmJyZXZpYXRpb25zLgorIyBJZiB5b3UncmUgcmVhbGx5IGNvbnNlcnZhdGl2ZSwgeW91IG1pZ2h0IHdhbnQgdG8gY2hhbmdlIGl0IHRvICJEIi4KKyMgQXZvaWQgIkwiIChMZWFwIFllYXIpLCB3aGljaCB3b24ndCBiZSB0cnVlIGluIDIxMDAuCisKKyMgSWYgUHJlc2lkZW50aWFsIEVsZWN0aW9uIFRpbWUgaXMgZXZlciBlc3RhYmxpc2hlZCwgcmVwbGFjZSAiWFhYWCIgYmVsb3cKKyMgd2l0aCB0aGUgeWVhciB0aGUgbGF3IHRha2VzIGVmZmVjdCBhbmQgdW5jb21tZW50IHRoZSAiIyMiIGxpbmVzLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworIyMgUnVsZQlUd2lsaXRlCVhYWFgJbWF4CS0JQXByCVN1bj49MQkyOjAwCTE6MDAJRAorIyMgUnVsZQlUd2lsaXRlCVhYWFgJbWF4CXVzcHJlcwlPY3QJbGFzdFN1bgkyOjAwCTE6MDAJUEUKKyMjIFJ1bGUJVHdpbGl0ZQlYWFhYCW1heAl1c3ByZXMJTm92CVN1bj49NwkyOjAwCTAJUworIyMgUnVsZQlUd2lsaXRlCVhYWFgJbWF4CW5vbnByZXMJT2N0CWxhc3RTdW4JMjowMAkwCVMKKworIyBab25lCU5BTUUJCQlHTVRPRkYJUlVMRVMvU0FWRQlGT1JNQVQJW1VOVElMXQorIyMgWm9uZQlBbWVyaWNhL0xvc19BbmdlbGVzLVBFVAktODowMAlVUwkJUCVzVAlYWFhYCisjIwkJCQktODowMAlUd2lsaXRlCQlQJXNUCisKKyMgRm9yIG5vdy4uLgorTGluawlBbWVyaWNhL0xvc19BbmdlbGVzCVVTL1BhY2lmaWMtTmV3CSMjCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvcHJpdmF0ZS5oIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzE3NmU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3ByaXZhdGUuaApAQCAtMCwwICsxLDU3OCBAQAorI2lmbmRlZiBQUklWQVRFX0gKKworI2RlZmluZSBQUklWQVRFX0gKKworLyoKKyoqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiwgc28gY2xhcmlmaWVkIGFzIG9mCisqKiAxOTk2LTA2LTA1IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKyovCisKKy8qCisqKiBUaGlzIGhlYWRlciBpcyBmb3IgdXNlIE9OTFkgd2l0aCB0aGUgdGltZSBjb252ZXJzaW9uIGNvZGUuCisqKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIHJlbWFpbiB1bmNoYW5nZWQsCisqKiBvciB0aGF0IGl0IHdpbGwgcmVtYWluIGF0IGFsbC4KKyoqIERvIE5PVCBjb3B5IGl0IHRvIGFueSBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnkuCisqKiBUaGFuayB5b3UhCisqLworCisjZGVmaW5lIEdSQU5EUEFSRU5URUQJIkxvY2FsIHRpbWUgem9uZSBtdXN0IGJlIHNldC0tc2VlIHppYyBtYW51YWwgcGFnZSIKKworLyoKKyoqIERlZmF1bHRzIGZvciBwcmVwcm9jZXNzb3Igc3ltYm9scy4KKyoqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgaW4geW91ciBDIGNvbXBpbGVyIG9wdGlvbnMsIGUuZy4gJy1ESEFWRV9HRVRURVhUPTEnLgorKi8KKworI2lmbmRlZiBIQVZFX0dFVFRFWFQKKyNkZWZpbmUgSEFWRV9HRVRURVhUCQkwCisjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9HRVRURVhUICovCisKKyNpZm5kZWYgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgorI2RlZmluZSBIQVZFX0lOQ09NUEFUSUJMRV9DVElNRV9SCTAKKyNlbmRpZiAvKiAhZGVmaW5lZCBJTkNPTVBBVElCTEVfQ1RJTUVfUiAqLworCisjaWZuZGVmIEhBVkVfTElOSworI2RlZmluZSBIQVZFX0xJTksJCTEKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX0xJTksgKi8KKworI2lmbmRlZiBIQVZFX1NUUkRVUAorI2RlZmluZSBIQVZFX1NUUkRVUCAxCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1NZTUxJTksKKyNkZWZpbmUgSEFWRV9TWU1MSU5LCQkxCisjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9TWU1MSU5LICovCisKKyNpZm5kZWYgSEFWRV9TWVNfU1RBVF9ICisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSAkJMQorI2VuZGlmIC8qICFkZWZpbmVkIEhBVkVfU1lTX1NUQVRfSCAqLworCisjaWZuZGVmIEhBVkVfU1lTX1dBSVRfSAorI2RlZmluZSBIQVZFX1NZU19XQUlUX0gJCTEKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NZU19XQUlUX0ggKi8KKworI2lmbmRlZiBIQVZFX1VOSVNURF9ICisjZGVmaW5lIEhBVkVfVU5JU1REX0gJCTEKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1VOSVNURF9IICovCisKKyNpZm5kZWYgSEFWRV9VVE1QWF9ICisjZGVmaW5lIEhBVkVfVVRNUFhfSAkJMQorI2VuZGlmIC8qICFkZWZpbmVkIEhBVkVfVVRNUFhfSCAqLworCisjaWZuZGVmIE5FVEJTRF9JTlNQSVJFRAorIyBkZWZpbmUgTkVUQlNEX0lOU1BJUkVEIDEKKyNlbmRpZgorCisjaWYgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgorI2RlZmluZSBhc2N0aW1lX3IgX2luY29tcGF0aWJsZV9hc2N0aW1lX3IKKyNkZWZpbmUgY3RpbWVfciBfaW5jb21wYXRpYmxlX2N0aW1lX3IKKyNlbmRpZiAvKiBIQVZFX0lOQ09NUEFUSUJMRV9DVElNRV9SICovCisKKy8qIEVuYWJsZSB0bV9nbXRvZmYgYW5kIHRtX3pvbmUgb24gR05VaXNoIHN5c3RlbXMuICAqLworI2RlZmluZSBfR05VX1NPVVJDRSAxCisvKiBGaXggYXNjdGltZV9yIG9uIFNvbGFyaXMgMTAuICAqLworI2RlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMQorLyogRW5hYmxlIHN0cnRvaW1heCBvbiBTb2xhcmlzIDEwLiAgKi8KKyNkZWZpbmUgX19FWFRFTlNJT05TX18gMQorCisvKgorKiogTmVzdGVkIGluY2x1ZGVzCisqLworCisvKiBBdm9pZCBjbGFzaGVzIHdpdGggTmV0QlNEIGJ5IHJlbmFtaW5nIE5ldEJTRCdzIGRlY2xhcmF0aW9ucy4gICovCisjZGVmaW5lIGxvY2FsdGltZV9yeiBzeXNfbG9jYWx0aW1lX3J6CisjZGVmaW5lIG1rdGltZV96IHN5c19ta3RpbWVfegorI2RlZmluZSBwb3NpeDJ0aW1lX3ogc3lzX3Bvc2l4MnRpbWVfegorI2RlZmluZSB0aW1lMnBvc2l4X3ogc3lzX3RpbWUycG9zaXhfegorI2RlZmluZSB0aW1lem9uZV90IHN5c190aW1lem9uZV90CisjZGVmaW5lIHR6YWxsb2Mgc3lzX3R6YWxsb2MKKyNkZWZpbmUgdHpmcmVlIHN5c190emZyZWUKKyNpbmNsdWRlIDx0aW1lLmg+CisjdW5kZWYgbG9jYWx0aW1lX3J6CisjdW5kZWYgbWt0aW1lX3oKKyN1bmRlZiBwb3NpeDJ0aW1lX3oKKyN1bmRlZiB0aW1lMnBvc2l4X3oKKyN1bmRlZiB0aW1lem9uZV90CisjdW5kZWYgdHphbGxvYworI3VuZGVmIHR6ZnJlZQorCisjaW5jbHVkZSAic3lzL3R5cGVzLmgiCS8qIGZvciB0aW1lX3QgKi8KKyNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgImxpbWl0cy5oIgkvKiBmb3IgQ0hBUl9CSVQgZXQgYWwuICovCisjaW5jbHVkZSAic3RkbGliLmgiCisKKyNpbmNsdWRlICJlcnJuby5oIgorCisjaWZuZGVmIEVOQU1FVE9PTE9ORworIyBkZWZpbmUgRU5BTUVUT09MT05HIEVJTlZBTAorI2VuZGlmCisjaWZuZGVmIEVPVkVSRkxPVworIyBkZWZpbmUgRU9WRVJGTE9XIEVJTlZBTAorI2VuZGlmCisKKyNpZiBIQVZFX0dFVFRFWFQKKyNpbmNsdWRlICJsaWJpbnRsLmgiCisjZW5kaWYgLyogSEFWRV9HRVRURVhUICovCisKKyNpZiBIQVZFX1NZU19XQUlUX0gKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgkvKiBmb3IgV0lGRVhJVEVEIGFuZCBXRVhJVFNUQVRVUyAqLworI2VuZGlmIC8qIEhBVkVfU1lTX1dBSVRfSCAqLworCisjaWZuZGVmIFdJRkVYSVRFRAorI2RlZmluZSBXSUZFWElURUQoc3RhdHVzKQkoKChzdGF0dXMpICYgMHhmZikgPT0gMCkKKyNlbmRpZiAvKiAhZGVmaW5lZCBXSUZFWElURUQgKi8KKyNpZm5kZWYgV0VYSVRTVEFUVVMKKyNkZWZpbmUgV0VYSVRTVEFUVVMoc3RhdHVzKQkoKChzdGF0dXMpID4+IDgpICYgMHhmZikKKyNlbmRpZiAvKiAhZGVmaW5lZCBXRVhJVFNUQVRVUyAqLworCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgInVuaXN0ZC5oIgkvKiBmb3IgRl9PSywgUl9PSywgYW5kIG90aGVyIFBPU0lYIGdvb2RuZXNzICovCisjZW5kaWYgLyogSEFWRV9VTklTVERfSCAqLworCisjaWZuZGVmIEhBVkVfU1RSRlRJTUVfTAorIyBpZiBfUE9TSVhfVkVSU0lPTiA8IDIwMDgwOQorIyAgZGVmaW5lIEhBVkVfU1RSRlRJTUVfTCAwCisjIGVsc2UKKyMgIGRlZmluZSBIQVZFX1NUUkZUSU1FX0wgMQorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRl9PSworI2RlZmluZSBGX09LCTAKKyNlbmRpZiAvKiAhZGVmaW5lZCBGX09LICovCisjaWZuZGVmIFJfT0sKKyNkZWZpbmUgUl9PSwk0CisjZW5kaWYgLyogIWRlZmluZWQgUl9PSyAqLworCisvKiBVbmxpa2UgPGN0eXBlLmg+J3MgaXNkaWdpdCwgdGhpcyBhbHNvIHdvcmtzIGlmIGMgPCAwIHwgYyA+IFVDSEFSX01BWC4gKi8KKyNkZWZpbmUgaXNfZGlnaXQoYykgKCh1bnNpZ25lZCkoYykgLSAnMCcgPD0gOSkKKworLyoKKyoqIERlZmluZSBIQVZFX1NURElOVF9IJ3MgZGVmYXVsdCB2YWx1ZSBoZXJlLCByYXRoZXIgdGhhbiBhdCB0aGUKKyoqIHN0YXJ0LCBzaW5jZSBfX0dMSUJDX18ncyB2YWx1ZSBkZXBlbmRzIG9uIHByZXZpb3VzbHktaW5jbHVkZWQKKyoqIGZpbGVzLgorKiogKGdsaWJjIDIuMSBhbmQgbGF0ZXIgaGF2ZSBzdGRpbnQuaCwgZXZlbiB3aXRoIHByZS1DOTkgY29tcGlsZXJzLikKKyovCisjaWZuZGVmIEhBVkVfU1RESU5UX0gKKyNkZWZpbmUgSEFWRV9TVERJTlRfSCBcCisgICAoMTk5OTAxIDw9IF9fU1REQ19WRVJTSU9OX18gXAorICAgIHx8IDIgPCBfX0dMSUJDX18gKyAoMSA8PSBfX0dMSUJDX01JTk9SX18pCVwKKyAgICB8fCBfX0NZR1dJTl9fKQorI2VuZGlmIC8qICFkZWZpbmVkIEhBVkVfU1RESU5UX0ggKi8KKworI2lmIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlICJzdGRpbnQuaCIKKyNlbmRpZiAvKiAhSEFWRV9TVERJTlRfSCAqLworCisjaWZuZGVmIEhBVkVfSU5UVFlQRVNfSAorIyBkZWZpbmUgSEFWRV9JTlRUWVBFU19IIEhBVkVfU1RESU5UX0gKKyNlbmRpZgorI2lmIEhBVkVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisKKy8qIFByZS1DOTkgR0NDIGNvbXBpbGVycyBkZWZpbmUgX19MT05HX0xPTkdfTUFYX18gaW5zdGVhZCBvZiBMTE9OR19NQVguICAqLworI2lmZGVmIF9fTE9OR19MT05HX01BWF9fCisjIGlmbmRlZiBMTE9OR19NQVgKKyMgIGRlZmluZSBMTE9OR19NQVggX19MT05HX0xPTkdfTUFYX18KKyMgZW5kaWYKKyMgaWZuZGVmIExMT05HX01JTgorIyAgZGVmaW5lIExMT05HX01JTiAoLTEgLSBMTE9OR19NQVgpCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBJTlRfRkFTVDY0X01BWAorIyBpZmRlZiBMTE9OR19NQVgKK3R5cGVkZWYgbG9uZyBsb25nCWludF9mYXN0NjRfdDsKKyMgIGRlZmluZSBJTlRfRkFTVDY0X01JTiBMTE9OR19NSU4KKyMgIGRlZmluZSBJTlRfRkFTVDY0X01BWCBMTE9OR19NQVgKKyMgZWxzZQorIyAgaWYgTE9OR19NQVggPj4gMzEgPCAweGZmZmZmZmZmCitQbGVhc2UgdXNlIGEgY29tcGlsZXIgdGhhdCBzdXBwb3J0cyBhIDY0LWJpdCBpbnRlZ2VyIHR5cGUgKG9yIHdpZGVyKTsKK3lvdSBtYXkgbmVlZCB0byBjb21waWxlIHdpdGggIi1ESEFWRV9TVERJTlRfSCIuCisjICBlbmRpZgordHlwZWRlZiBsb25nCQlpbnRfZmFzdDY0X3Q7CisjICBkZWZpbmUgSU5UX0ZBU1Q2NF9NSU4gTE9OR19NSU4KKyMgIGRlZmluZSBJTlRfRkFTVDY0X01BWCBMT05HX01BWAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU0NOZEZBU1Q2NAorIyBpZiBJTlRfRkFTVDY0X01BWCA9PSBMTE9OR19NQVgKKyMgIGRlZmluZSBTQ05kRkFTVDY0ICJsbGQiCisjIGVsc2UKKyMgIGRlZmluZSBTQ05kRkFTVDY0ICJsZCIKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIElOVF9GQVNUMzJfTUFYCisjIGlmIElOVF9NQVggPj4gMzEgPT0gMAordHlwZWRlZiBsb25nIGludF9mYXN0MzJfdDsKKyMgIGRlZmluZSBJTlRfRkFTVDMyX01BWCBMT05HX01BWAorIyAgZGVmaW5lIElOVF9GQVNUMzJfTUlOIExPTkdfTUlOCisjIGVsc2UKK3R5cGVkZWYgaW50IGludF9mYXN0MzJfdDsKKyMgIGRlZmluZSBJTlRfRkFTVDMyX01BWCBJTlRfTUFYCisjICBkZWZpbmUgSU5UX0ZBU1QzMl9NSU4gSU5UX01JTgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSU5UTUFYX01BWAorIyBpZmRlZiBMTE9OR19NQVgKK3R5cGVkZWYgbG9uZyBsb25nIGludG1heF90OworIyAgZGVmaW5lIHN0cnRvaW1heCBzdHJ0b2xsCisjICBkZWZpbmUgSU5UTUFYX01BWCBMTE9OR19NQVgKKyMgIGRlZmluZSBJTlRNQVhfTUlOIExMT05HX01JTgorIyBlbHNlCit0eXBlZGVmIGxvbmcgaW50bWF4X3Q7CisjICBkZWZpbmUgc3RydG9pbWF4IHN0cnRvbAorIyAgZGVmaW5lIElOVE1BWF9NQVggTE9OR19NQVgKKyMgIGRlZmluZSBJTlRNQVhfTUlOIExPTkdfTUlOCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBQUklkTUFYCisjIGlmIElOVE1BWF9NQVggPT0gTExPTkdfTUFYCisjICBkZWZpbmUgUFJJZE1BWCAibGxkIgorIyBlbHNlCisjICBkZWZpbmUgUFJJZE1BWCAibGQiCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBVSU5UX0ZBU1Q2NF9NQVgKKyMgaWYgZGVmaW5lZCBVTExPTkdfTUFYIHx8IGRlZmluZWQgX19MT05HX0xPTkdfTUFYX18KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRfZmFzdDY0X3Q7CisjIGVsc2UKKyMgIGlmIFVMT05HX01BWCA+PiAzMSA+PiAxIDwgMHhmZmZmZmZmZgorUGxlYXNlIHVzZSBhIGNvbXBpbGVyIHRoYXQgc3VwcG9ydHMgYSA2NC1iaXQgaW50ZWdlciB0eXBlIChvciB3aWRlcik7Cit5b3UgbWF5IG5lZWQgdG8gY29tcGlsZSB3aXRoICItREhBVkVfU1RESU5UX0giLgorIyAgZW5kaWYKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwl1aW50X2Zhc3Q2NF90OworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgVUlOVE1BWF9NQVgKKyMgaWYgZGVmaW5lZCBVTExPTkdfTUFYIHx8IGRlZmluZWQgX19MT05HX0xPTkdfTUFYX18KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRtYXhfdDsKKyMgZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnRtYXhfdDsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFBSSXVNQVgKKyMgaWYgZGVmaW5lZCBVTExPTkdfTUFYIHx8IGRlZmluZWQgX19MT05HX0xPTkdfTUFYX18KKyMgIGRlZmluZSBQUkl1TUFYICJsbHUiCisjIGVsc2UKKyMgIGRlZmluZSBQUkl1TUFYICJsdSIKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIElOVDMyX01BWAorI2RlZmluZSBJTlQzMl9NQVggMHg3ZmZmZmZmZgorI2VuZGlmIC8qICFkZWZpbmVkIElOVDMyX01BWCAqLworI2lmbmRlZiBJTlQzMl9NSU4KKyNkZWZpbmUgSU5UMzJfTUlOICgtMSAtIElOVDMyX01BWCkKKyNlbmRpZiAvKiAhZGVmaW5lZCBJTlQzMl9NSU4gKi8KKworI2lmbmRlZiBTSVpFX01BWAorI2RlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCisjZW5kaWYKKworI2lmIDIgPCBfX0dOVUNfXyArICg5NiA8PSBfX0dOVUNfTUlOT1JfXykKKyMgZGVmaW5lIEFUVFJJQlVURV9DT05TVCBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKQorIyBkZWZpbmUgQVRUUklCVVRFX1BVUkUgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKyMgZGVmaW5lIEFUVFJJQlVURV9GT1JNQVQoc3BlYykgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gc3BlYykpCisjZWxzZQorIyBkZWZpbmUgQVRUUklCVVRFX0NPTlNUIC8qIGVtcHR5ICovCisjIGRlZmluZSBBVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworIyBkZWZpbmUgQVRUUklCVVRFX0ZPUk1BVChzcGVjKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBfTm9yZXR1cm4gJiYgX19TVERDX1ZFUlNJT05fXyA8IDIwMTExMgorIyBpZiAyIDwgX19HTlVDX18gKyAoOCA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfTm9yZXR1cm4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisjIGVsc2UKKyMgIGRlZmluZSBfTm9yZXR1cm4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMSAmJiAhZGVmaW5lZCByZXN0cmljdAorIyBkZWZpbmUgcmVzdHJpY3QgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKgorKiogV29ya2Fyb3VuZHMgZm9yIGNvbXBpbGVycy9zeXN0ZW1zLgorKi8KKworLyoKKyoqIENvbXBpbGUgd2l0aCAtRHRpbWVfdHo9VCB0byBidWlsZCB0aGUgdHogcGFja2FnZSB3aXRoIGEgcHJpdmF0ZQorKiogdGltZV90IHR5cGUgZXF1aXZhbGVudCB0byBUIHJhdGhlciB0aGFuIHRoZSBzeXN0ZW0tc3VwcGxpZWQgdGltZV90LgorKiogVGhpcyBkZWJ1Z2dpbmcgZmVhdHVyZSBjYW4gdGVzdCB1bnVzdWFsIGRlc2lnbiBkZWNpc2lvbnMKKyoqIChlLmcuLCB0aW1lX3Qgd2lkZXIgdGhhbiAnbG9uZycsIG9yIHVuc2lnbmVkIHRpbWVfdCkgZXZlbiBvbgorKiogdHlwaWNhbCBwbGF0Zm9ybXMuCisqLworI2lmZGVmIHRpbWVfdHoKKyMgaWZkZWYgTE9DQUxUSU1FX0lNUExFTUVOVEFUSU9OCitzdGF0aWMgdGltZV90IHN5c190aW1lKHRpbWVfdCAqeCkgeyByZXR1cm4gdGltZSh4KTsgfQorIyBlbmRpZgorCit0eXBlZGVmIHRpbWVfdHogdHpfdGltZV90OworCisjIHVuZGVmICBjdGltZQorIyBkZWZpbmUgY3RpbWUgdHpfY3RpbWUKKyMgdW5kZWYgIGN0aW1lX3IKKyMgZGVmaW5lIGN0aW1lX3IgdHpfY3RpbWVfcgorIyB1bmRlZiAgZGlmZnRpbWUKKyMgZGVmaW5lIGRpZmZ0aW1lIHR6X2RpZmZ0aW1lCisjIHVuZGVmICBnbXRpbWUKKyMgZGVmaW5lIGdtdGltZSB0el9nbXRpbWUKKyMgdW5kZWYgIGdtdGltZV9yCisjIGRlZmluZSBnbXRpbWVfciB0el9nbXRpbWVfcgorIyB1bmRlZiAgbG9jYWx0aW1lCisjIGRlZmluZSBsb2NhbHRpbWUgdHpfbG9jYWx0aW1lCisjIHVuZGVmICBsb2NhbHRpbWVfcgorIyBkZWZpbmUgbG9jYWx0aW1lX3IgdHpfbG9jYWx0aW1lX3IKKyMgdW5kZWYgIGxvY2FsdGltZV9yegorIyBkZWZpbmUgbG9jYWx0aW1lX3J6IHR6X2xvY2FsdGltZV9yegorIyB1bmRlZiAgbWt0aW1lCisjIGRlZmluZSBta3RpbWUgdHpfbWt0aW1lCisjIHVuZGVmICBta3RpbWVfegorIyBkZWZpbmUgbWt0aW1lX3ogdHpfbWt0aW1lX3oKKyMgdW5kZWYgIG9mZnRpbWUKKyMgZGVmaW5lIG9mZnRpbWUgdHpfb2ZmdGltZQorIyB1bmRlZiAgcG9zaXgydGltZQorIyBkZWZpbmUgcG9zaXgydGltZSB0el9wb3NpeDJ0aW1lCisjIHVuZGVmICBwb3NpeDJ0aW1lX3oKKyMgZGVmaW5lIHBvc2l4MnRpbWVfeiB0el9wb3NpeDJ0aW1lX3oKKyMgdW5kZWYgIHRpbWUKKyMgZGVmaW5lIHRpbWUgdHpfdGltZQorIyB1bmRlZiAgdGltZTJwb3NpeAorIyBkZWZpbmUgdGltZTJwb3NpeCB0el90aW1lMnBvc2l4CisjIHVuZGVmICB0aW1lMnBvc2l4X3oKKyMgZGVmaW5lIHRpbWUycG9zaXhfeiB0el90aW1lMnBvc2l4X3oKKyMgdW5kZWYgIHRpbWVfdAorIyBkZWZpbmUgdGltZV90IHR6X3RpbWVfdAorIyB1bmRlZiAgdGltZWdtCisjIGRlZmluZSB0aW1lZ20gdHpfdGltZWdtCisjIHVuZGVmICB0aW1lbG9jYWwKKyMgZGVmaW5lIHRpbWVsb2NhbCB0el90aW1lbG9jYWwKKyMgdW5kZWYgIHRpbWVvZmYKKyMgZGVmaW5lIHRpbWVvZmYgdHpfdGltZW9mZgorIyB1bmRlZiAgdHphbGxvYworIyBkZWZpbmUgdHphbGxvYyB0el90emFsbG9jCisjIHVuZGVmICB0emZyZWUKKyMgZGVmaW5lIHR6ZnJlZSB0el90emZyZWUKKyMgdW5kZWYgIHR6c2V0CisjIGRlZmluZSB0enNldCB0el90enNldAorIyB1bmRlZiAgdHpzZXR3YWxsCisjIGRlZmluZSB0enNldHdhbGwgdHpfdHpzZXR3YWxsCisKK2NoYXIgKmN0aW1lKHRpbWVfdCBjb25zdCAqKTsKK2NoYXIgKmN0aW1lX3IodGltZV90IGNvbnN0ICosIGNoYXIgKik7Citkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3QpOworc3RydWN0IHRtICpnbXRpbWUodGltZV90IGNvbnN0ICopOworc3RydWN0IHRtICpnbXRpbWVfcih0aW1lX3QgY29uc3QgKnJlc3RyaWN0LCBzdHJ1Y3QgdG0gKnJlc3RyaWN0KTsKK3N0cnVjdCB0bSAqbG9jYWx0aW1lKHRpbWVfdCBjb25zdCAqKTsKK3N0cnVjdCB0bSAqbG9jYWx0aW1lX3IodGltZV90IGNvbnN0ICpyZXN0cmljdCwgc3RydWN0IHRtICpyZXN0cmljdCk7Cit0aW1lX3QgbWt0aW1lKHN0cnVjdCB0bSAqKTsKK3RpbWVfdCB0aW1lKHRpbWVfdCAqKTsKK3ZvaWQgdHpzZXQodm9pZCk7CisjZW5kaWYKKworLyoKKyoqIFNvbWUgdGltZS5oIGltcGxlbWVudGF0aW9ucyBkb24ndCBkZWNsYXJlIGFzY3RpbWVfci4KKyoqIE90aGVycyBtaWdodCBkZWZpbmUgaXQgYXMgYSBtYWNyby4KKyoqIEZpeCB0aGUgZm9ybWVyIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBsYXR0ZXIuCisqKiBTaW1pbGFybHkgZm9yIHRpbWV6b25lLCBkYXlsaWdodCwgYW5kIGFsdHpvbmUuCisqLworCisjaWZuZGVmIGFzY3RpbWVfcgorZXh0ZXJuIGNoYXIgKglhc2N0aW1lX3Ioc3RydWN0IHRtIGNvbnN0ICpyZXN0cmljdCwgY2hhciAqcmVzdHJpY3QpOworI2VuZGlmCisKKyNpZmRlZiBVU0dfQ09NUEFUCisjIGlmbmRlZiB0aW1lem9uZQorZXh0ZXJuIGxvbmcgdGltZXpvbmU7CisjIGVuZGlmCisjIGlmbmRlZiBkYXlsaWdodAorZXh0ZXJuIGludCBkYXlsaWdodDsKKyMgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQgQUxUWk9ORSAmJiAhZGVmaW5lZCBhbHR6b25lCitleHRlcm4gbG9uZyBhbHR6b25lOworI2VuZGlmCisKKy8qCisqKiBUaGUgU1REX0lOU1BJUkVEIGZ1bmN0aW9ucyBhcmUgc2ltaWxhciwgYnV0IG1vc3QgYWxzbyBuZWVkCisqKiBkZWNsYXJhdGlvbnMgaWYgdGltZV90eiBpcyBkZWZpbmVkLgorKi8KKworI2lmZGVmIFNURF9JTlNQSVJFRAorIyBpZiAhZGVmaW5lZCB0enNldHdhbGwgfHwgZGVmaW5lZCB0aW1lX3R6Cit2b2lkIHR6c2V0d2FsbCh2b2lkKTsKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgb2ZmdGltZSB8fCBkZWZpbmVkIHRpbWVfdHoKK3N0cnVjdCB0bSAqb2ZmdGltZSh0aW1lX3QgY29uc3QgKiwgbG9uZyk7CisjIGVuZGlmCisjIGlmICFkZWZpbmVkIHRpbWVnbSB8fCBkZWZpbmVkIHRpbWVfdHoKK3RpbWVfdCB0aW1lZ20oc3RydWN0IHRtICopOworIyBlbmRpZgorIyBpZiAhZGVmaW5lZCB0aW1lbG9jYWwgfHwgZGVmaW5lZCB0aW1lX3R6Cit0aW1lX3QgdGltZWxvY2FsKHN0cnVjdCB0bSAqKTsKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgdGltZW9mZiB8fCBkZWZpbmVkIHRpbWVfdHoKK3RpbWVfdCB0aW1lb2ZmKHN0cnVjdCB0bSAqLCBsb25nKTsKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgdGltZTJwb3NpeCB8fCBkZWZpbmVkIHRpbWVfdHoKK3RpbWVfdCB0aW1lMnBvc2l4KHRpbWVfdCk7CisjIGVuZGlmCisjIGlmICFkZWZpbmVkIHBvc2l4MnRpbWUgfHwgZGVmaW5lZCB0aW1lX3R6Cit0aW1lX3QgcG9zaXgydGltZSh0aW1lX3QpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEluZmVyIFRNX1pPTkUgb24gc3lzdGVtcyB3aGVyZSB0aGlzIGluZm9ybWF0aW9uIGlzIGtub3duLCBidXQgc3VwcHJlc3MKKyAgIGd1ZXNzaW5nIGlmIE5PX1RNX1pPTkUgaXMgZGVmaW5lZC4gIFNpbWlsYXJseSBmb3IgVE1fR01UT0ZGLiAgKi8KKyNpZiAoZGVmaW5lZCBfX0dMSUJDX18gXAorICAgICB8fCBkZWZpbmVkIF9fRnJlZUJTRF9fIHx8IGRlZmluZWQgX19OZXRCU0RfXyB8fCBkZWZpbmVkIF9fT3BlbkJTRF9fIFwKKyAgICAgfHwgKGRlZmluZWQgX19BUFBMRV9fICYmIGRlZmluZWQgX19NQUNIX18pKQorIyBpZiAhZGVmaW5lZCBUTV9HTVRPRkYgJiYgIWRlZmluZWQgTk9fVE1fR01UT0ZGCisjICBkZWZpbmUgVE1fR01UT0ZGIHRtX2dtdG9mZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBUTV9aT05FICYmICFkZWZpbmVkIE5PX1RNX1pPTkUKKyMgIGRlZmluZSBUTV9aT05FIHRtX3pvbmUKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorKiogRGVmaW5lIGZ1bmN0aW9ucyB0aGF0IGFyZSBBQkkgY29tcGF0aWJsZSB3aXRoIE5ldEJTRCBidXQgaGF2ZQorKiogYmV0dGVyIHByb3RvdHlwZXMuICBOZXRCU0QgNi4xLjQgZGVmaW5lcyBhIHBvaW50ZXIgdHlwZSB0aW1lem9uZV90CisqKiBhbmQgbGFib3JzIHVuZGVyIHRoZSBtaXNjb25jZXB0aW9uIHRoYXQgJ2NvbnN0IHRpbWV6b25lX3QnIGlzIGEKKyoqIHBvaW50ZXIgdG8gYSBjb25zdGFudC4gIFRoaXMgdXNlIG9mICdjb25zdCcgaXMgaW5lZmZlY3RpdmUsIHNvIGl0CisqKiBpcyBub3QgZG9uZSBoZXJlLiAgV2hhdCB3ZSBjYWxsICdzdHJ1Y3Qgc3RhdGUnIE5ldEJTRCBjYWxscworKiogJ3N0cnVjdCBfX3N0YXRlJywgYnV0IHRoaXMgaXMgYSBwcml2YXRlIG5hbWUgc28gaXQgZG9lc24ndCBtYXR0ZXIuCisqLworI2lmIE5FVEJTRF9JTlNQSVJFRAordHlwZWRlZiBzdHJ1Y3Qgc3RhdGUgKnRpbWV6b25lX3Q7CitzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yeih0aW1lem9uZV90IHJlc3RyaWN0LCB0aW1lX3QgY29uc3QgKnJlc3RyaWN0LAorCQkJc3RydWN0IHRtICpyZXN0cmljdCk7Cit0aW1lX3QgbWt0aW1lX3oodGltZXpvbmVfdCByZXN0cmljdCwgc3RydWN0IHRtICpyZXN0cmljdCk7Cit0aW1lem9uZV90IHR6YWxsb2MoY2hhciBjb25zdCAqKTsKK3ZvaWQgdHpmcmVlKHRpbWV6b25lX3QpOworIyBpZmRlZiBTVERfSU5TUElSRUQKKyMgIGlmICFkZWZpbmVkIHBvc2l4MnRpbWVfeiB8fCBkZWZpbmVkIHRpbWVfdHoKK3RpbWVfdCBwb3NpeDJ0aW1lX3oodGltZXpvbmVfdCwgdGltZV90KSBBVFRSSUJVVEVfUFVSRTsKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZCB0aW1lMnBvc2l4X3ogfHwgZGVmaW5lZCB0aW1lX3R6Cit0aW1lX3QgdGltZTJwb3NpeF96KHRpbWV6b25lX3QsIHRpbWVfdCkgQVRUUklCVVRFX1BVUkU7CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisqKiBGaW5hbGx5LCBzb21lIGNvbnZlbmllbmNlIGl0ZW1zLgorKi8KKworI2lmIF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDEKKyMgZGVmaW5lIHRydWUgMQorIyBkZWZpbmUgZmFsc2UgMAorIyBkZWZpbmUgYm9vbCBpbnQKKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorCisjaWZuZGVmIFRZUEVfQklUCisjZGVmaW5lIFRZUEVfQklUKHR5cGUpCShzaXplb2YgKHR5cGUpICogQ0hBUl9CSVQpCisjZW5kaWYgLyogIWRlZmluZWQgVFlQRV9CSVQgKi8KKworI2lmbmRlZiBUWVBFX1NJR05FRAorI2RlZmluZSBUWVBFX1NJR05FRCh0eXBlKSAoKCh0eXBlKSAtMSkgPCAwKQorI2VuZGlmIC8qICFkZWZpbmVkIFRZUEVfU0lHTkVEICovCisKKyNkZWZpbmUgVFdPU19DT01QTEVNRU5UKHQpICgodCkgfiAodCkgMCA8IDApCisKKy8qIE1heCBhbmQgbWluIHZhbHVlcyBvZiB0aGUgaW50ZWdlciB0eXBlIFQsIG9mIHdoaWNoIG9ubHkgdGhlIGJvdHRvbQorICAgQiBiaXRzIGFyZSB1c2VkLCBhbmQgd2hlcmUgdGhlIGhpZ2hlc3Qtb3JkZXIgdXNlZCBiaXQgaXMgY29uc2lkZXJlZAorICAgdG8gYmUgYSBzaWduIGJpdCBpZiBUIGlzIHNpZ25lZC4gICovCisjZGVmaW5lIE1BWFZBTCh0LCBiKQkJCQkJCVwKKyAgKCh0KSAoKCh0KSAxIDw8ICgoYikgLSAxIC0gVFlQRV9TSUdORUQodCkpKQkJCVwKKwktIDEgKyAoKHQpIDEgPDwgKChiKSAtIDEgLSBUWVBFX1NJR05FRCh0KSkpKSkKKyNkZWZpbmUgTUlOVkFMKHQsIGIpCQkJCQkJXAorICAoKHQpIChUWVBFX1NJR05FRCh0KSA/IC0gVFdPU19DT01QTEVNRU5UKHQpIC0gTUFYVkFMKHQsIGIpIDogMCkpCisKKy8qIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGZpbml0ZSB0aW1lIHZhbHVlcy4gIFRoaXMgYXNzdW1lcyBubyBwYWRkaW5nLiAgKi8KK3N0YXRpYyB0aW1lX3QgY29uc3QgdGltZV90X21pbiA9IE1JTlZBTCh0aW1lX3QsIFRZUEVfQklUKHRpbWVfdCkpOworc3RhdGljIHRpbWVfdCBjb25zdCB0aW1lX3RfbWF4ID0gTUFYVkFMKHRpbWVfdCwgVFlQRV9CSVQodGltZV90KSk7CisKKyNpZm5kZWYgSU5UX1NUUkxFTl9NQVhJTVVNCisvKgorKiogMzAyIC8gMTAwMCBpcyBsb2cxMCgyLjApIHJvdW5kZWQgdXAuCisqKiBTdWJ0cmFjdCBvbmUgZm9yIHRoZSBzaWduIGJpdCBpZiB0aGUgdHlwZSBpcyBzaWduZWQ7CisqKiBhZGQgb25lIGZvciBpbnRlZ2VyIGRpdmlzaW9uIHRydW5jYXRpb247CisqKiBhZGQgb25lIG1vcmUgZm9yIGEgbWludXMgc2lnbiBpZiB0aGUgdHlwZSBpcyBzaWduZWQuCisqLworI2RlZmluZSBJTlRfU1RSTEVOX01BWElNVU0odHlwZSkgXAorCSgoVFlQRV9CSVQodHlwZSkgLSBUWVBFX1NJR05FRCh0eXBlKSkgKiAzMDIgLyAxMDAwICsgXAorCTEgKyBUWVBFX1NJR05FRCh0eXBlKSkKKyNlbmRpZiAvKiAhZGVmaW5lZCBJTlRfU1RSTEVOX01BWElNVU0gKi8KKworLyoKKyoqIElOSVRJQUxJWkUoeCkKKyovCisKKyNpZmRlZiBsaW50CisjIGRlZmluZSBJTklUSUFMSVpFKHgpCSgoeCkgPSAwKQorI2Vsc2UKKyMgZGVmaW5lIElOSVRJQUxJWkUoeCkKKyNlbmRpZgorCisjaWZuZGVmIFVOSU5JVF9UUkFQCisjIGRlZmluZSBVTklOSVRfVFJBUCAwCisjZW5kaWYKKworLyoKKyoqIEZvciB0aGUgYmVuZWZpdCBvZiBHTlUgZm9say4uLgorKiogJ18oTVNHSUQpJyB1c2VzIHRoZSBjdXJyZW50IGxvY2FsZSdzIG1lc3NhZ2UgbGlicmFyeSBzdHJpbmcgZm9yIE1TR0lELgorKiogVGhlIGRlZmF1bHQgaXMgdG8gdXNlIGdldHRleHQgaWYgYXZhaWxhYmxlLCBhbmQgdXNlIE1TR0lEIG90aGVyd2lzZS4KKyovCisKKyNpZm5kZWYgXworI2lmIEhBVkVfR0VUVEVYVAorI2RlZmluZSBfKG1zZ2lkKSBnZXR0ZXh0KG1zZ2lkKQorI2Vsc2UgLyogIUhBVkVfR0VUVEVYVCAqLworI2RlZmluZSBfKG1zZ2lkKSBtc2dpZAorI2VuZGlmIC8qICFIQVZFX0dFVFRFWFQgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBfICovCisKKyNpZiAhZGVmaW5lZCBUWl9ET01BSU4gJiYgZGVmaW5lZCBIQVZFX0dFVFRFWFQKKyMgZGVmaW5lIFRaX0RPTUFJTiAidHoiCisjZW5kaWYKKworI2lmIEhBVkVfSU5DT01QQVRJQkxFX0NUSU1FX1IKKyN1bmRlZiBhc2N0aW1lX3IKKyN1bmRlZiBjdGltZV9yCitjaGFyICphc2N0aW1lX3Ioc3RydWN0IHRtIGNvbnN0ICosIGNoYXIgKik7CitjaGFyICpjdGltZV9yKHRpbWVfdCBjb25zdCAqLCBjaGFyICopOworI2VuZGlmIC8qIEhBVkVfSU5DT01QQVRJQkxFX0NUSU1FX1IgKi8KKworI2lmbmRlZiBZRUFSU1BFUlJFUEVBVAorI2RlZmluZSBZRUFSU1BFUlJFUEVBVAkJNDAwCS8qIHllYXJzIGJlZm9yZSBhIEdyZWdvcmlhbiByZXBlYXQgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBZRUFSU1BFUlJFUEVBVCAqLworCisvKgorKiogVGhlIEdyZWdvcmlhbiB5ZWFyIGF2ZXJhZ2VzIDM2NS4yNDI1IGRheXMsIHdoaWNoIGlzIDMxNTU2OTUyIHNlY29uZHMuCisqLworCisjaWZuZGVmIEFWR1NFQ1NQRVJZRUFSCisjZGVmaW5lIEFWR1NFQ1NQRVJZRUFSCQkzMTU1Njk1MkwKKyNlbmRpZiAvKiAhZGVmaW5lZCBBVkdTRUNTUEVSWUVBUiAqLworCisjaWZuZGVmIFNFQ1NQRVJSRVBFQVQKKyNkZWZpbmUgU0VDU1BFUlJFUEVBVAkJKChpbnRfZmFzdDY0X3QpIFlFQVJTUEVSUkVQRUFUICogKGludF9mYXN0NjRfdCkgQVZHU0VDU1BFUllFQVIpCisjZW5kaWYgLyogIWRlZmluZWQgU0VDU1BFUlJFUEVBVCAqLworCisjaWZuZGVmIFNFQ1NQRVJSRVBFQVRfQklUUworI2RlZmluZSBTRUNTUEVSUkVQRUFUX0JJVFMJMzQJLyogY2VpbChsb2cyKFNFQ1NQRVJSRVBFQVQpKSAqLworI2VuZGlmIC8qICFkZWZpbmVkIFNFQ1NQRVJSRVBFQVRfQklUUyAqLworCisjZW5kaWYgLyogIWRlZmluZWQgUFJJVkFURV9IICovCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvc2ltcGxlYmFja3cgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvc2ltcGxlYmFja3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwNjI0YQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9zaW1wbGViYWNrdwpAQCAtMCwwICsxLDIgQEAKK0xpbmsJRXRjL1VUQwkJCVVUQworTGluawlFdGMvVW5pdmVyc2FsCQlVbml2ZXJzYWwKZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9zb2xhcjg3IGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3NvbGFyODcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlZTdlNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9zb2xhcjg3CkBAIC0wLDAgKzEsMzkxIEBACisjIDxwcmU+CisjIEAoIylzb2xhcjg3CTguMgorIyBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorIyAyMDA5LTA1LTE3IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKworIyBTbyBtdWNoIGZvciBmb290bm90ZXMgYWJvdXQgU2F1ZGkgQXJhYmlhLgorIyBBcHBhcmVudCBub29uIHRpbWVzIGJlbG93IGFyZSBmb3IgUml5YWRoOyB5b3VyIG1pbGVhZ2Ugd2lsbCB2YXJ5LgorIyBUaW1lcyB3ZXJlIGNvbXB1dGVkIHVzaW5nIGZvcm11bGFzIGluIHRoZSBVLlMuIE5hdmFsIE9ic2VydmF0b3J5J3MKKyMgQWxtYW5hYyBmb3IgQ29tcHV0ZXJzIDE5ODc7IHRoZSBmb3JtdWxhcyAid2lsbCBnaXZlIEVxVCB0byBhbiBhY2N1cmFjeSBvZgorIyBbcGx1cyBvciBtaW51cyB0d29dIHNlY29uZHMgZHVyaW5nIHRoZSBjdXJyZW50IHllYXIuIgorIworIyBSb3VuZGluZyB0byB0aGUgbmVhcmVzdCBmaXZlIHNlY29uZHMgcmVzdWx0cyBpbiBmZXdlciB0aGFuCisjIDI1NiBkaWZmZXJlbnQgInRpbWUgdHlwZXMiLS1hIGxpbWl0IHRoYXQncyBmYWNlZCBiZWNhdXNlIHRpbWUgdHlwZXMgYXJlCisjIHN0b3JlZCBvbiBkaXNrIGFzIHVuc2lnbmVkIGNoYXJzLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMQkxMjowMzoyMHMgLTA6MDM6MjAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMgkxMjowMzo1MHMgLTA6MDM6NTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMwkxMjowNDoxNXMgLTA6MDQ6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JNAkxMjowNDo0NXMgLTA6MDQ6NDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JNQkxMjowNToxMHMgLTA6MDU6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JNgkxMjowNTo0MHMgLTA6MDU6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JNwkxMjowNjowNXMgLTA6MDY6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JOAkxMjowNjozMHMgLTA6MDY6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JOQkxMjowNjo1NXMgLTA6MDY6NTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMTAJMTI6MDc6MjBzIC0wOjA3OjIwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSmFuCTExCTEyOjA3OjQ1cyAtMDowNzo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUphbgkxMgkxMjowODoxMHMgLTA6MDg6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMTMJMTI6MDg6MzBzIC0wOjA4OjMwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSmFuCTE0CTEyOjA4OjU1cyAtMDowODo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUphbgkxNQkxMjowOToxNXMgLTA6MDk6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMTYJMTI6MDk6MzVzIC0wOjA5OjM1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSmFuCTE3CTEyOjA5OjU1cyAtMDowOTo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUphbgkxOAkxMjoxMDoxNXMgLTA6MTA6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMTkJMTI6MTA6MzVzIC0wOjEwOjM1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSmFuCTIwCTEyOjEwOjU1cyAtMDoxMDo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUphbgkyMQkxMjoxMToxMHMgLTA6MTE6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMjIJMTI6MTE6MzBzIC0wOjExOjMwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSmFuCTIzCTEyOjExOjQ1cyAtMDoxMTo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUphbgkyNAkxMjoxMjowMHMgLTA6MTI6MDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMjUJMTI6MTI6MTVzIC0wOjEyOjE1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSmFuCTI2CTEyOjEyOjMwcyAtMDoxMjozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUphbgkyNwkxMjoxMjo0MHMgLTA6MTI6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMjgJMTI6MTI6NTVzIC0wOjEyOjU1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSmFuCTI5CTEyOjEzOjA1cyAtMDoxMzowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUphbgkzMAkxMjoxMzoxNXMgLTA6MTM6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKYW4JMzEJMTI6MTM6MjVzIC0wOjEzOjI1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTEJMTI6MTM6MzVzIC0wOjEzOjM1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTIJMTI6MTM6NDBzIC0wOjEzOjQwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTMJMTI6MTM6NTBzIC0wOjEzOjUwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTQJMTI6MTM6NTVzIC0wOjEzOjU1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTUJMTI6MTQ6MDBzIC0wOjE0OjAwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTYJMTI6MTQ6MDVzIC0wOjE0OjA1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTcJMTI6MTQ6MTBzIC0wOjE0OjEwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTgJMTI6MTQ6MTBzIC0wOjE0OjEwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTkJMTI6MTQ6MTVzIC0wOjE0OjE1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTEwCTEyOjE0OjE1cyAtMDoxNDoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUZlYgkxMQkxMjoxNDoxNXMgLTA6MTQ6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlGZWIJMTIJMTI6MTQ6MTVzIC0wOjE0OjE1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTEzCTEyOjE0OjE1cyAtMDoxNDoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUZlYgkxNAkxMjoxNDoxNXMgLTA6MTQ6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlGZWIJMTUJMTI6MTQ6MTBzIC0wOjE0OjEwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTE2CTEyOjE0OjEwcyAtMDoxNDoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUZlYgkxNwkxMjoxNDowNXMgLTA6MTQ6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlGZWIJMTgJMTI6MTQ6MDBzIC0wOjE0OjAwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTE5CTEyOjEzOjU1cyAtMDoxMzo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUZlYgkyMAkxMjoxMzo1MHMgLTA6MTM6NTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlGZWIJMjEJMTI6MTM6NDVzIC0wOjEzOjQ1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTIyCTEyOjEzOjM1cyAtMDoxMzozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUZlYgkyMwkxMjoxMzozMHMgLTA6MTM6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlGZWIJMjQJMTI6MTM6MjBzIC0wOjEzOjIwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTI1CTEyOjEzOjEwcyAtMDoxMzoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUZlYgkyNgkxMjoxMzowMHMgLTA6MTM6MDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlGZWIJMjcJMTI6MTI6NTBzIC0wOjEyOjUwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRmViCTI4CTEyOjEyOjQwcyAtMDoxMjo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkxCTEyOjEyOjMwcyAtMDoxMjozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkyCTEyOjEyOjIwcyAtMDoxMjoyMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkzCTEyOjEyOjA1cyAtMDoxMjowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgk0CTEyOjExOjU1cyAtMDoxMTo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgk1CTEyOjExOjQwcyAtMDoxMTo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgk2CTEyOjExOjI1cyAtMDoxMToyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgk3CTEyOjExOjE1cyAtMDoxMToxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgk4CTEyOjExOjAwcyAtMDoxMTowMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgk5CTEyOjEwOjQ1cyAtMDoxMDo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkxMAkxMjoxMDozMHMgLTA6MTA6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXIJMTEJMTI6MTA6MTVzIC0wOjEwOjE1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTWFyCTEyCTEyOjA5OjU1cyAtMDowOTo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkxMwkxMjowOTo0MHMgLTA6MDk6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXIJMTQJMTI6MDk6MjVzIC0wOjA5OjI1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTWFyCTE1CTEyOjA5OjEwcyAtMDowOToxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkxNgkxMjowODo1MHMgLTA6MDg6NTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXIJMTcJMTI6MDg6MzVzIC0wOjA4OjM1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTWFyCTE4CTEyOjA4OjE1cyAtMDowODoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkxOQkxMjowODowMHMgLTA6MDg6MDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXIJMjAJMTI6MDc6NDBzIC0wOjA3OjQwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTWFyCTIxCTEyOjA3OjI1cyAtMDowNzoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkyMgkxMjowNzowNXMgLTA6MDc6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXIJMjMJMTI6MDY6NTBzIC0wOjA2OjUwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTWFyCTI0CTEyOjA2OjMwcyAtMDowNjozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkyNQkxMjowNjoxMHMgLTA6MDY6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXIJMjYJMTI6MDU6NTVzIC0wOjA1OjU1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTWFyCTI3CTEyOjA1OjM1cyAtMDowNTozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkyOAkxMjowNToxNXMgLTA6MDU6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXIJMjkJMTI6MDU6MDBzIC0wOjA1OjAwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTWFyCTMwCTEyOjA0OjQwcyAtMDowNDo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1hcgkzMQkxMjowNDoyNXMgLTA6MDQ6MjUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMQkxMjowNDowNXMgLTA6MDQ6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMgkxMjowMzo0NXMgLTA6MDM6NDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMwkxMjowMzozMHMgLTA6MDM6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJNAkxMjowMzoxMHMgLTA6MDM6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJNQkxMjowMjo1NXMgLTA6MDI6NTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJNgkxMjowMjozNXMgLTA6MDI6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJNwkxMjowMjoyMHMgLTA6MDI6MjAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJOAkxMjowMjowNXMgLTA6MDI6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJOQkxMjowMTo0NXMgLTA6MDE6NDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMTAJMTI6MDE6MzBzIC0wOjAxOjMwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JQXByCTExCTEyOjAxOjE1cyAtMDowMToxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUFwcgkxMgkxMjowMDo1NXMgLTA6MDA6NTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMTMJMTI6MDA6NDBzIC0wOjAwOjQwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JQXByCTE0CTEyOjAwOjI1cyAtMDowMDoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUFwcgkxNQkxMjowMDoxMHMgLTA6MDA6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMTYJMTE6NTk6NTVzIDA6MDA6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMTcJMTE6NTk6NDVzIDA6MDA6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMTgJMTE6NTk6MzBzIDA6MDA6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMTkJMTE6NTk6MTVzIDA6MDA6NDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMjAJMTE6NTk6MDVzIDA6MDA6NTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMjEJMTE6NTg6NTBzIDA6MDE6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMjIJMTE6NTg6NDBzIDA6MDE6MjAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMjMJMTE6NTg6MjVzIDA6MDE6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMjQJMTE6NTg6MTVzIDA6MDE6NDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMjUJMTE6NTg6MDVzIDA6MDE6NTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMjYJMTE6NTc6NTVzIDA6MDI6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMjcJMTE6NTc6NDVzIDA6MDI6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMjgJMTE6NTc6MzVzIDA6MDI6MjUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMjkJMTE6NTc6MjVzIDA6MDI6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBcHIJMzAJMTE6NTc6MTVzIDA6MDI6NDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMQkxMTo1NzoxMHMgMDowMjo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1heQkyCTExOjU3OjAwcyAwOjAzOjAwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTWF5CTMJMTE6NTY6NTVzIDA6MDM6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJNAkxMTo1Njo1MHMgMDowMzoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1heQk1CTExOjU2OjQ1cyAwOjAzOjE1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTWF5CTYJMTE6NTY6NDBzIDA6MDM6MjAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJNwkxMTo1NjozNXMgMDowMzoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU1heQk4CTExOjU2OjMwcyAwOjAzOjMwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTWF5CTkJMTE6NTY6MjVzIDA6MDM6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMTAJMTE6NTY6MjVzIDA6MDM6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMTEJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMTIJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMTMJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMTQJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMTUJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMTYJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMTcJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMTgJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMTkJMTE6NTY6MjVzIDA6MDM6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMjAJMTE6NTY6MjVzIDA6MDM6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMjEJMTE6NTY6MzBzIDA6MDM6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMjIJMTE6NTY6MzVzIDA6MDM6MjUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMjMJMTE6NTY6NDBzIDA6MDM6MjAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMjQJMTE6NTY6NDVzIDA6MDM6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMjUJMTE6NTY6NTBzIDA6MDM6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMjYJMTE6NTY6NTVzIDA6MDM6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMjcJMTE6NTc6MDBzIDA6MDM6MDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMjgJMTE6NTc6MTBzIDA6MDI6NTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMjkJMTE6NTc6MTVzIDA6MDI6NDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMzAJMTE6NTc6MjVzIDA6MDI6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlNYXkJMzEJMTE6NTc6MzBzIDA6MDI6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMQkxMTo1Nzo0MHMgMDowMjoyMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bgkyCTExOjU3OjUwcyAwOjAyOjEwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVuCTMJMTE6NTg6MDBzIDA6MDI6MDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JNAkxMTo1ODoxMHMgMDowMTo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bgk1CTExOjU4OjIwcyAwOjAxOjQwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVuCTYJMTE6NTg6MzBzIDA6MDE6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JNwkxMTo1ODo0MHMgMDowMToyMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bgk4CTExOjU4OjUwcyAwOjAxOjEwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVuCTkJMTE6NTk6MDVzIDA6MDA6NTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMTAJMTE6NTk6MTVzIDA6MDA6NDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMTEJMTE6NTk6MzBzIDA6MDA6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMTIJMTE6NTk6NDBzIDA6MDA6MjAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMTMJMTE6NTk6NTBzIDA6MDA6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMTQJMTI6MDA6MDVzIC0wOjAwOjA1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVuCTE1CTEyOjAwOjE1cyAtMDowMDoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bgkxNgkxMjowMDozMHMgLTA6MDA6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMTcJMTI6MDA6NDVzIC0wOjAwOjQ1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVuCTE4CTEyOjAwOjU1cyAtMDowMDo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bgkxOQkxMjowMToxMHMgLTA6MDE6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMjAJMTI6MDE6MjBzIC0wOjAxOjIwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVuCTIxCTEyOjAxOjM1cyAtMDowMTozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bgkyMgkxMjowMTo1MHMgLTA6MDE6NTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMjMJMTI6MDI6MDBzIC0wOjAyOjAwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVuCTI0CTEyOjAyOjE1cyAtMDowMjoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bgkyNQkxMjowMjoyNXMgLTA6MDI6MjUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMjYJMTI6MDI6NDBzIC0wOjAyOjQwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVuCTI3CTEyOjAyOjUwcyAtMDowMjo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bgkyOAkxMjowMzowNXMgLTA6MDM6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdW4JMjkJMTI6MDM6MTVzIC0wOjAzOjE1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVuCTMwCTEyOjAzOjMwcyAtMDowMzozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkxCTEyOjAzOjQwcyAtMDowMzo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkyCTEyOjAzOjUwcyAtMDowMzo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkzCTEyOjA0OjA1cyAtMDowNDowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAk0CTEyOjA0OjE1cyAtMDowNDoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAk1CTEyOjA0OjI1cyAtMDowNDoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAk2CTEyOjA0OjM1cyAtMDowNDozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAk3CTEyOjA0OjQ1cyAtMDowNDo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAk4CTEyOjA0OjU1cyAtMDowNDo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAk5CTEyOjA1OjA1cyAtMDowNTowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkxMAkxMjowNToxNXMgLTA6MDU6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdWwJMTEJMTI6MDU6MjBzIC0wOjA1OjIwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVsCTEyCTEyOjA1OjMwcyAtMDowNTozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkxMwkxMjowNTo0MHMgLTA6MDU6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdWwJMTQJMTI6MDU6NDVzIC0wOjA1OjQ1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVsCTE1CTEyOjA1OjUwcyAtMDowNTo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkxNgkxMjowNjowMHMgLTA6MDY6MDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdWwJMTcJMTI6MDY6MDVzIC0wOjA2OjA1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVsCTE4CTEyOjA2OjEwcyAtMDowNjoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkxOQkxMjowNjoxNXMgLTA6MDY6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdWwJMjAJMTI6MDY6MTVzIC0wOjA2OjE1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVsCTIxCTEyOjA2OjIwcyAtMDowNjoyMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkyMgkxMjowNjoyNXMgLTA6MDY6MjUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdWwJMjMJMTI6MDY6MjVzIC0wOjA2OjI1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVsCTI0CTEyOjA2OjI1cyAtMDowNjoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkyNQkxMjowNjozMHMgLTA6MDY6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdWwJMjYJMTI6MDY6MzBzIC0wOjA2OjMwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVsCTI3CTEyOjA2OjMwcyAtMDowNjozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkyOAkxMjowNjozMHMgLTA6MDY6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlKdWwJMjkJMTI6MDY6MjVzIC0wOjA2OjI1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JSnVsCTMwCTEyOjA2OjI1cyAtMDowNjoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUp1bAkzMQkxMjowNjoyNXMgLTA6MDY6MjUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMQkxMjowNjoyMHMgLTA6MDY6MjAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMgkxMjowNjoxNXMgLTA6MDY6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMwkxMjowNjoxMHMgLTA6MDY6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJNAkxMjowNjowNXMgLTA6MDY6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJNQkxMjowNjowMHMgLTA6MDY6MDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJNgkxMjowNTo1NXMgLTA6MDU6NTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJNwkxMjowNTo1MHMgLTA6MDU6NTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJOAkxMjowNTo0MHMgLTA6MDU6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJOQkxMjowNTozNXMgLTA6MDU6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMTAJMTI6MDU6MjVzIC0wOjA1OjI1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JQXVnCTExCTEyOjA1OjE1cyAtMDowNToxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUF1ZwkxMgkxMjowNTowNXMgLTA6MDU6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMTMJMTI6MDQ6NTVzIC0wOjA0OjU1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JQXVnCTE0CTEyOjA0OjQ1cyAtMDowNDo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUF1ZwkxNQkxMjowNDozNXMgLTA6MDQ6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMTYJMTI6MDQ6MjVzIC0wOjA0OjI1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JQXVnCTE3CTEyOjA0OjEwcyAtMDowNDoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUF1ZwkxOAkxMjowNDowMHMgLTA6MDQ6MDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMTkJMTI6MDM6NDVzIC0wOjAzOjQ1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JQXVnCTIwCTEyOjAzOjMwcyAtMDowMzozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUF1ZwkyMQkxMjowMzoxNXMgLTA6MDM6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMjIJMTI6MDM6MDBzIC0wOjAzOjAwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JQXVnCTIzCTEyOjAyOjQ1cyAtMDowMjo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUF1ZwkyNAkxMjowMjozMHMgLTA6MDI6MzAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMjUJMTI6MDI6MTVzIC0wOjAyOjE1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JQXVnCTI2CTEyOjAyOjAwcyAtMDowMjowMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUF1ZwkyNwkxMjowMTo0MHMgLTA6MDE6NDAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMjgJMTI6MDE6MjVzIC0wOjAxOjI1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JQXVnCTI5CTEyOjAxOjA1cyAtMDowMTowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCUF1ZwkzMAkxMjowMDo1MHMgLTA6MDA6NTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlBdWcJMzEJMTI6MDA6MzBzIC0wOjAwOjMwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JU2VwCTEJMTI6MDA6MTBzIC0wOjAwOjEwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JU2VwCTIJMTE6NTk6NTBzIDA6MDA6MTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlTZXAJMwkxMTo1OTozNXMgMDowMDoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAk0CTExOjU5OjE1cyAwOjAwOjQ1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JU2VwCTUJMTE6NTg6NTVzIDA6MDE6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlTZXAJNgkxMTo1ODozNXMgMDowMToyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAk3CTExOjU4OjE1cyAwOjAxOjQ1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JU2VwCTgJMTE6NTc6NTVzIDA6MDI6MDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlTZXAJOQkxMTo1NzozMHMgMDowMjozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkxMAkxMTo1NzoxMHMgMDowMjo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkxMQkxMTo1Njo1MHMgMDowMzoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkxMgkxMTo1NjozMHMgMDowMzozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkxMwkxMTo1NjoxMHMgMDowMzo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkxNAkxMTo1NTo0NXMgMDowNDoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkxNQkxMTo1NToyNXMgMDowNDozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkxNgkxMTo1NTowNXMgMDowNDo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkxNwkxMTo1NDo0NXMgMDowNToxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkxOAkxMTo1NDoyMHMgMDowNTo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkxOQkxMTo1NDowMHMgMDowNjowMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkyMAkxMTo1Mzo0MHMgMDowNjoyMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkyMQkxMTo1MzoxNXMgMDowNjo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkyMgkxMTo1Mjo1NXMgMDowNzowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkyMwkxMTo1MjozNXMgMDowNzoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkyNAkxMTo1MjoxNXMgMDowNzo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkyNQkxMTo1MTo1NXMgMDowODowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkyNgkxMTo1MTozNXMgMDowODoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkyNwkxMTo1MToxMHMgMDowODo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkyOAkxMTo1MDo1MHMgMDowOToxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkyOQkxMTo1MDozMHMgMDowOTozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCVNlcAkzMAkxMTo1MDoxMHMgMDowOTo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxCTExOjQ5OjUwcyAwOjEwOjEwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JT2N0CTIJMTE6NDk6MzVzIDA6MTA6MjUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlPY3QJMwkxMTo0OToxNXMgMDoxMDo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAk0CTExOjQ4OjU1cyAwOjExOjA1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JT2N0CTUJMTE6NDg6MzVzIDA6MTE6MjUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlPY3QJNgkxMTo0ODoyMHMgMDoxMTo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAk3CTExOjQ4OjAwcyAwOjEyOjAwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JT2N0CTgJMTE6NDc6NDVzIDA6MTI6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlPY3QJOQkxMTo0NzoyNXMgMDoxMjozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxMAkxMTo0NzoxMHMgMDoxMjo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxMQkxMTo0Njo1NXMgMDoxMzowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxMgkxMTo0Njo0MHMgMDoxMzoyMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxMwkxMTo0NjoyNXMgMDoxMzozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxNAkxMTo0NjoxMHMgMDoxMzo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxNQkxMTo0NTo1NXMgMDoxNDowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxNgkxMTo0NTo0NXMgMDoxNDoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxNwkxMTo0NTozMHMgMDoxNDozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxOAkxMTo0NToyMHMgMDoxNDo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkxOQkxMTo0NTowNXMgMDoxNDo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkyMAkxMTo0NDo1NXMgMDoxNTowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkyMQkxMTo0NDo0NXMgMDoxNToxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkyMgkxMTo0NDozNXMgMDoxNToyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkyMwkxMTo0NDoyNXMgMDoxNTozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkyNAkxMTo0NDoyMHMgMDoxNTo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkyNQkxMTo0NDoxMHMgMDoxNTo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkyNgkxMTo0NDowNXMgMDoxNTo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkyNwkxMTo0Mzo1NXMgMDoxNjowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkyOAkxMTo0Mzo1MHMgMDoxNjoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkyOQkxMTo0Mzo0NXMgMDoxNjoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkzMAkxMTo0Mzo0NXMgMDoxNjoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU9jdAkzMQkxMTo0Mzo0MHMgMDoxNjoyMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxCTExOjQzOjQwcyAwOjE2OjIwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTm92CTIJMTE6NDM6MzVzIDA6MTY6MjUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlOb3YJMwkxMTo0MzozNXMgMDoxNjoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgk0CTExOjQzOjM1cyAwOjE2OjI1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTm92CTUJMTE6NDM6MzVzIDA6MTY6MjUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlOb3YJNgkxMTo0Mzo0MHMgMDoxNjoyMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgk3CTExOjQzOjQwcyAwOjE2OjIwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JTm92CTgJMTE6NDM6NDVzIDA6MTY6MTUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlOb3YJOQkxMTo0Mzo1MHMgMDoxNjoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxMAkxMTo0Mzo1NXMgMDoxNjowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxMQkxMTo0NDowMHMgMDoxNjowMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxMgkxMTo0NDowNXMgMDoxNTo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxMwkxMTo0NDoxNXMgMDoxNTo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxNAkxMTo0NDoyMHMgMDoxNTo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxNQkxMTo0NDozMHMgMDoxNTozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxNgkxMTo0NDo0MHMgMDoxNToyMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxNwkxMTo0NDo1MHMgMDoxNToxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxOAkxMTo0NTowNXMgMDoxNDo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkxOQkxMTo0NToxNXMgMDoxNDo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkyMAkxMTo0NTozMHMgMDoxNDozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkyMQkxMTo0NTo0NXMgMDoxNDoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkyMgkxMTo0NjowMHMgMDoxNDowMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkyMwkxMTo0NjoxNXMgMDoxMzo0NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkyNAkxMTo0NjozMHMgMDoxMzozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkyNQkxMTo0Njo1MHMgMDoxMzoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkyNgkxMTo0NzoxMHMgMDoxMjo1MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkyNwkxMTo0NzoyNXMgMDoxMjozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkyOAkxMTo0Nzo0NXMgMDoxMjoxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkyOQkxMTo0ODowNXMgMDoxMTo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCU5vdgkzMAkxMTo0ODozMHMgMDoxMTozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxCTExOjQ4OjUwcyAwOjExOjEwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRGVjCTIJMTE6NDk6MTBzIDA6MTA6NTAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlEZWMJMwkxMTo0OTozNXMgMDoxMDoyNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwk0CTExOjUwOjAwcyAwOjEwOjAwIC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRGVjCTUJMTE6NTA6MjVzIDA6MDk6MzUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlEZWMJNgkxMTo1MDo1MHMgMDowOToxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwk3CTExOjUxOjE1cyAwOjA4OjQ1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRGVjCTgJMTE6NTE6NDBzIDA6MDg6MjAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlEZWMJOQkxMTo1MjowNXMgMDowNzo1NSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxMAkxMTo1MjozMHMgMDowNzozMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxMQkxMTo1MzowMHMgMDowNzowMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxMgkxMTo1MzoyNXMgMDowNjozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxMwkxMTo1Mzo1NXMgMDowNjowNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxNAkxMTo1NDoyNXMgMDowNTozNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxNQkxMTo1NDo1MHMgMDowNToxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxNgkxMTo1NToyMHMgMDowNDo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxNwkxMTo1NTo1MHMgMDowNDoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxOAkxMTo1NjoyMHMgMDowMzo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkxOQkxMTo1Njo1MHMgMDowMzoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkyMAkxMTo1NzoyMHMgMDowMjo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkyMQkxMTo1Nzo1MHMgMDowMjoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkyMgkxMTo1ODoyMHMgMDowMTo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkyMwkxMTo1ODo1MHMgMDowMToxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkyNAkxMTo1OToyMHMgMDowMDo0MCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkyNQkxMTo1OTo1MHMgMDowMDoxMCAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkyNgkxMjowMDoyMHMgLTA6MDA6MjAgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlEZWMJMjcJMTI6MDA6NDVzIC0wOjAwOjQ1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRGVjCTI4CTEyOjAxOjE1cyAtMDowMToxNSAtCitSdWxlCXNvbDg3CTE5ODcJb25seQktCURlYwkyOQkxMjowMTo0NXMgLTA6MDE6NDUgLQorUnVsZQlzb2w4NwkxOTg3CW9ubHkJLQlEZWMJMzAJMTI6MDI6MTVzIC0wOjAyOjE1IC0KK1J1bGUJc29sODcJMTk4Nwlvbmx5CS0JRGVjCTMxCTEyOjAyOjQ1cyAtMDowMjo0NSAtCisKKyMgUml5YWRoIGlzIGF0IGFib3V0IDQ2IGRlZ3JlZXMgNDYgbWludXRlcyBFYXN0OiAgMyBocnMsIDcgbWlucywgNCBzZWNzCisjIEJlZm9yZSBhbmQgYWZ0ZXIgMTk4Nywgd2UnbGwgb3BlcmF0ZSBvbiBsb2NhbCBtZWFuIHNvbGFyIHRpbWUuCisKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMvU0FWRQlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL1JpeWFkaDg3CTM6MDc6MDQJLQkJenp6CTE5ODcKKwkJCTM6MDc6MDQJc29sODcJCXp6egkxOTg4CisJCQkzOjA3OjA0CS0JCXp6egorIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4uLgorTGluawlBc2lhL1JpeWFkaDg3CU1pZGVhc3QvUml5YWRoODcKZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9zb2xhcjg4IGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3NvbGFyODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiNTkwZQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9zb2xhcjg4CkBAIC0wLDAgKzEsMzkxIEBACisjIDxwcmU+CisjIEAoIylzb2xhcjg4CTguMgorIyBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorIyAyMDA5LTA1LTE3IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKworIyBBcHBhcmVudCBub29uIHRpbWVzIGJlbG93IGFyZSBmb3IgUml5YWRoOyB0aGV5J3JlIGEgYml0IG9mZiBmb3Igb3RoZXIgcGxhY2VzLgorIyBUaW1lcyB3ZXJlIGNvbXB1dGVkIHVzaW5nIGZvcm11bGFzIGluIHRoZSBVLlMuIE5hdmFsIE9ic2VydmF0b3J5J3MKKyMgQWxtYW5hYyBmb3IgQ29tcHV0ZXJzIDE5ODg7IHRoZSBmb3JtdWxhcyAid2lsbCBnaXZlIEVxVCB0byBhbiBhY2N1cmFjeSBvZgorIyBbcGx1cyBvciBtaW51cyB0d29dIHNlY29uZHMgZHVyaW5nIHRoZSBjdXJyZW50IHllYXIuIgorIworIyBSb3VuZGluZyB0byB0aGUgbmVhcmVzdCBmaXZlIHNlY29uZHMgcmVzdWx0cyBpbiBmZXdlciB0aGFuCisjIDI1NiBkaWZmZXJlbnQgInRpbWUgdHlwZXMiLS1hIGxpbWl0IHRoYXQncyBmYWNlZCBiZWNhdXNlIHRpbWUgdHlwZXMgYXJlCisjIHN0b3JlZCBvbiBkaXNrIGFzIHVuc2lnbmVkIGNoYXJzLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMQkxMjowMzoxNXMgLTA6MDM6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMgkxMjowMzo0MHMgLTA6MDM6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMwkxMjowNDoxMHMgLTA6MDQ6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JNAkxMjowNDo0MHMgLTA6MDQ6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JNQkxMjowNTowNXMgLTA6MDU6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JNgkxMjowNTozMHMgLTA6MDU6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JNwkxMjowNjowMHMgLTA6MDY6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JOAkxMjowNjoyNXMgLTA6MDY6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JOQkxMjowNjo1MHMgLTA6MDY6NTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMTAJMTI6MDc6MTVzIC0wOjA3OjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSmFuCTExCTEyOjA3OjQwcyAtMDowNzo0MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUphbgkxMgkxMjowODowNXMgLTA6MDg6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMTMJMTI6MDg6MjVzIC0wOjA4OjI1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSmFuCTE0CTEyOjA4OjUwcyAtMDowODo1MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUphbgkxNQkxMjowOToxMHMgLTA6MDk6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMTYJMTI6MDk6MzBzIC0wOjA5OjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSmFuCTE3CTEyOjA5OjUwcyAtMDowOTo1MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUphbgkxOAkxMjoxMDoxMHMgLTA6MTA6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMTkJMTI6MTA6MzBzIC0wOjEwOjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSmFuCTIwCTEyOjEwOjUwcyAtMDoxMDo1MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUphbgkyMQkxMjoxMTowNXMgLTA6MTE6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMjIJMTI6MTE6MjVzIC0wOjExOjI1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSmFuCTIzCTEyOjExOjQwcyAtMDoxMTo0MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUphbgkyNAkxMjoxMTo1NXMgLTA6MTE6NTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMjUJMTI6MTI6MTBzIC0wOjEyOjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSmFuCTI2CTEyOjEyOjI1cyAtMDoxMjoyNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUphbgkyNwkxMjoxMjo0MHMgLTA6MTI6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMjgJMTI6MTI6NTBzIC0wOjEyOjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSmFuCTI5CTEyOjEzOjAwcyAtMDoxMzowMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUphbgkzMAkxMjoxMzoxMHMgLTA6MTM6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKYW4JMzEJMTI6MTM6MjBzIC0wOjEzOjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTEJMTI6MTM6MzBzIC0wOjEzOjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTIJMTI6MTM6NDBzIC0wOjEzOjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTMJMTI6MTM6NDVzIC0wOjEzOjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTQJMTI6MTM6NTVzIC0wOjEzOjU1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTUJMTI6MTQ6MDBzIC0wOjE0OjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTYJMTI6MTQ6MDVzIC0wOjE0OjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTcJMTI6MTQ6MTBzIC0wOjE0OjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTgJMTI6MTQ6MTBzIC0wOjE0OjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTkJMTI6MTQ6MTVzIC0wOjE0OjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTEwCTEyOjE0OjE1cyAtMDoxNDoxNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUZlYgkxMQkxMjoxNDoxNXMgLTA6MTQ6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlGZWIJMTIJMTI6MTQ6MTVzIC0wOjE0OjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTEzCTEyOjE0OjE1cyAtMDoxNDoxNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUZlYgkxNAkxMjoxNDoxNXMgLTA6MTQ6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlGZWIJMTUJMTI6MTQ6MTBzIC0wOjE0OjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTE2CTEyOjE0OjEwcyAtMDoxNDoxMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUZlYgkxNwkxMjoxNDowNXMgLTA6MTQ6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlGZWIJMTgJMTI6MTQ6MDBzIC0wOjE0OjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTE5CTEyOjEzOjU1cyAtMDoxMzo1NSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUZlYgkyMAkxMjoxMzo1MHMgLTA6MTM6NTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlGZWIJMjEJMTI6MTM6NDVzIC0wOjEzOjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTIyCTEyOjEzOjQwcyAtMDoxMzo0MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUZlYgkyMwkxMjoxMzozMHMgLTA6MTM6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlGZWIJMjQJMTI6MTM6MjBzIC0wOjEzOjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTI1CTEyOjEzOjE1cyAtMDoxMzoxNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUZlYgkyNgkxMjoxMzowNXMgLTA6MTM6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlGZWIJMjcJMTI6MTI6NTVzIC0wOjEyOjU1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRmViCTI4CTEyOjEyOjQ1cyAtMDoxMjo0NSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUZlYgkyOQkxMjoxMjozMHMgLTA6MTI6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMQkxMjoxMjoyMHMgLTA6MTI6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMgkxMjoxMjoxMHMgLTA6MTI6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMwkxMjoxMTo1NXMgLTA6MTE6NTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJNAkxMjoxMTo0NXMgLTA6MTE6NDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJNQkxMjoxMTozMHMgLTA6MTE6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJNgkxMjoxMToxNXMgLTA6MTE6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJNwkxMjoxMTowMHMgLTA6MTE6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJOAkxMjoxMDo0NXMgLTA6MTA6NDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJOQkxMjoxMDozMHMgLTA6MTA6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMTAJMTI6MTA6MTVzIC0wOjEwOjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTWFyCTExCTEyOjEwOjAwcyAtMDoxMDowMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU1hcgkxMgkxMjowOTo0NXMgLTA6MDk6NDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMTMJMTI6MDk6MzBzIC0wOjA5OjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTWFyCTE0CTEyOjA5OjEwcyAtMDowOToxMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU1hcgkxNQkxMjowODo1NXMgLTA6MDg6NTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMTYJMTI6MDg6NDBzIC0wOjA4OjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTWFyCTE3CTEyOjA4OjIwcyAtMDowODoyMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU1hcgkxOAkxMjowODowNXMgLTA6MDg6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMTkJMTI6MDc6NDVzIC0wOjA3OjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTWFyCTIwCTEyOjA3OjMwcyAtMDowNzozMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU1hcgkyMQkxMjowNzoxMHMgLTA6MDc6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMjIJMTI6MDY6NTBzIC0wOjA2OjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTWFyCTIzCTEyOjA2OjM1cyAtMDowNjozNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU1hcgkyNAkxMjowNjoxNXMgLTA6MDY6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMjUJMTI6MDY6MDBzIC0wOjA2OjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTWFyCTI2CTEyOjA1OjQwcyAtMDowNTo0MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU1hcgkyNwkxMjowNToyMHMgLTA6MDU6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMjgJMTI6MDU6MDVzIC0wOjA1OjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTWFyCTI5CTEyOjA0OjQ1cyAtMDowNDo0NSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU1hcgkzMAkxMjowNDoyNXMgLTA6MDQ6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXIJMzEJMTI6MDQ6MTBzIC0wOjA0OjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTEJMTI6MDM6NTBzIC0wOjAzOjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTIJMTI6MDM6MzVzIC0wOjAzOjM1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTMJMTI6MDM6MTVzIC0wOjAzOjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTQJMTI6MDM6MDBzIC0wOjAzOjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTUJMTI6MDI6NDBzIC0wOjAyOjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTYJMTI6MDI6MjVzIC0wOjAyOjI1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTcJMTI6MDI6MDVzIC0wOjAyOjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTgJMTI6MDE6NTBzIC0wOjAxOjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTkJMTI6MDE6MzVzIC0wOjAxOjM1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTEwCTEyOjAxOjE1cyAtMDowMToxNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUFwcgkxMQkxMjowMTowMHMgLTA6MDE6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMTIJMTI6MDA6NDVzIC0wOjAwOjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXByCTEzCTEyOjAwOjMwcyAtMDowMDozMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUFwcgkxNAkxMjowMDoxNXMgLTA6MDA6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMTUJMTI6MDA6MDBzIDA6MDA6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMTYJMTE6NTk6NDVzIDA6MDA6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMTcJMTE6NTk6MzBzIDA6MDA6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMTgJMTE6NTk6MjBzIDA6MDA6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMTkJMTE6NTk6MDVzIDA6MDA6NTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMjAJMTE6NTg6NTVzIDA6MDE6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMjEJMTE6NTg6NDBzIDA6MDE6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMjIJMTE6NTg6MzBzIDA6MDE6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMjMJMTE6NTg6MTVzIDA6MDE6NDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMjQJMTE6NTg6MDVzIDA6MDE6NTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMjUJMTE6NTc6NTVzIDA6MDI6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMjYJMTE6NTc6NDVzIDA6MDI6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMjcJMTE6NTc6MzVzIDA6MDI6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMjgJMTE6NTc6MzBzIDA6MDI6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMjkJMTE6NTc6MjBzIDA6MDI6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBcHIJMzAJMTE6NTc6MTBzIDA6MDI6NTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMQkxMTo1NzowNXMgMDowMjo1NSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU1heQkyCTExOjU2OjU1cyAwOjAzOjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTWF5CTMJMTE6NTY6NTBzIDA6MDM6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJNAkxMTo1Njo0NXMgMDowMzoxNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU1heQk1CTExOjU2OjQwcyAwOjAzOjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTWF5CTYJMTE6NTY6MzVzIDA6MDM6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJNwkxMTo1NjozMHMgMDowMzozMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU1heQk4CTExOjU2OjI1cyAwOjAzOjM1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTWF5CTkJMTE6NTY6MjVzIDA6MDM6MzUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMTAJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMTEJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMTIJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMTMJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMTQJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMTUJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMTYJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMTcJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMTgJMTE6NTY6MjVzIDA6MDM6MzUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMTkJMTE6NTY6MjVzIDA6MDM6MzUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMjAJMTE6NTY6MzBzIDA6MDM6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMjEJMTE6NTY6MzVzIDA6MDM6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMjIJMTE6NTY6NDBzIDA6MDM6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMjMJMTE6NTY6NDVzIDA6MDM6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMjQJMTE6NTY6NTBzIDA6MDM6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMjUJMTE6NTY6NTVzIDA6MDM6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMjYJMTE6NTc6MDBzIDA6MDM6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMjcJMTE6NTc6MDVzIDA6MDI6NTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMjgJMTE6NTc6MTVzIDA6MDI6NDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMjkJMTE6NTc6MjBzIDA6MDI6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMzAJMTE6NTc6MzBzIDA6MDI6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlNYXkJMzEJMTE6NTc6NDBzIDA6MDI6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMQkxMTo1Nzo1MHMgMDowMjoxMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bgkyCTExOjU3OjU1cyAwOjAyOjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVuCTMJMTE6NTg6MDVzIDA6MDE6NTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JNAkxMTo1ODoxNXMgMDowMTo0NSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bgk1CTExOjU4OjMwcyAwOjAxOjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVuCTYJMTE6NTg6NDBzIDA6MDE6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JNwkxMTo1ODo1MHMgMDowMToxMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bgk4CTExOjU5OjAwcyAwOjAxOjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVuCTkJMTE6NTk6MTVzIDA6MDA6NDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMTAJMTE6NTk6MjVzIDA6MDA6MzUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMTEJMTE6NTk6MzVzIDA6MDA6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMTIJMTE6NTk6NTBzIDA6MDA6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMTMJMTI6MDA6MDBzIDA6MDA6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMTQJMTI6MDA6MTVzIC0wOjAwOjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVuCTE1CTEyOjAwOjI1cyAtMDowMDoyNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bgkxNgkxMjowMDo0MHMgLTA6MDA6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMTcJMTI6MDA6NTVzIC0wOjAwOjU1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVuCTE4CTEyOjAxOjA1cyAtMDowMTowNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bgkxOQkxMjowMToyMHMgLTA6MDE6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMjAJMTI6MDE6MzBzIC0wOjAxOjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVuCTIxCTEyOjAxOjQ1cyAtMDowMTo0NSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bgkyMgkxMjowMjowMHMgLTA6MDI6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMjMJMTI6MDI6MTBzIC0wOjAyOjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVuCTI0CTEyOjAyOjI1cyAtMDowMjoyNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bgkyNQkxMjowMjozNXMgLTA6MDI6MzUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMjYJMTI6MDI6NTBzIC0wOjAyOjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVuCTI3CTEyOjAzOjAwcyAtMDowMzowMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bgkyOAkxMjowMzoxNXMgLTA6MDM6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdW4JMjkJMTI6MDM6MjVzIC0wOjAzOjI1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVuCTMwCTEyOjAzOjQwcyAtMDowMzo0MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkxCTEyOjAzOjUwcyAtMDowMzo1MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkyCTEyOjA0OjAwcyAtMDowNDowMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkzCTEyOjA0OjEwcyAtMDowNDoxMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAk0CTEyOjA0OjI1cyAtMDowNDoyNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAk1CTEyOjA0OjM1cyAtMDowNDozNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAk2CTEyOjA0OjQ1cyAtMDowNDo0NSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAk3CTEyOjA0OjU1cyAtMDowNDo1NSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAk4CTEyOjA1OjA1cyAtMDowNTowNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAk5CTEyOjA1OjEwcyAtMDowNToxMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkxMAkxMjowNToyMHMgLTA6MDU6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdWwJMTEJMTI6MDU6MzBzIC0wOjA1OjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVsCTEyCTEyOjA1OjM1cyAtMDowNTozNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkxMwkxMjowNTo0NXMgLTA6MDU6NDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdWwJMTQJMTI6MDU6NTBzIC0wOjA1OjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVsCTE1CTEyOjA1OjU1cyAtMDowNTo1NSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkxNgkxMjowNjowMHMgLTA6MDY6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdWwJMTcJMTI6MDY6MDVzIC0wOjA2OjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVsCTE4CTEyOjA2OjEwcyAtMDowNjoxMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkxOQkxMjowNjoxNXMgLTA6MDY6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdWwJMjAJMTI6MDY6MjBzIC0wOjA2OjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVsCTIxCTEyOjA2OjI1cyAtMDowNjoyNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkyMgkxMjowNjoyNXMgLTA6MDY6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdWwJMjMJMTI6MDY6MjVzIC0wOjA2OjI1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVsCTI0CTEyOjA2OjMwcyAtMDowNjozMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkyNQkxMjowNjozMHMgLTA6MDY6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdWwJMjYJMTI6MDY6MzBzIC0wOjA2OjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVsCTI3CTEyOjA2OjMwcyAtMDowNjozMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkyOAkxMjowNjozMHMgLTA6MDY6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlKdWwJMjkJMTI6MDY6MjVzIC0wOjA2OjI1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JSnVsCTMwCTEyOjA2OjI1cyAtMDowNjoyNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUp1bAkzMQkxMjowNjoyMHMgLTA6MDY6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMQkxMjowNjoxNXMgLTA6MDY6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMgkxMjowNjoxNXMgLTA6MDY6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMwkxMjowNjoxMHMgLTA6MDY6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJNAkxMjowNjowNXMgLTA6MDY6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJNQkxMjowNTo1NXMgLTA6MDU6NTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJNgkxMjowNTo1MHMgLTA6MDU6NTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJNwkxMjowNTo0NXMgLTA6MDU6NDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJOAkxMjowNTozNXMgLTA6MDU6MzUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJOQkxMjowNToyNXMgLTA6MDU6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMTAJMTI6MDU6MjBzIC0wOjA1OjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXVnCTExCTEyOjA1OjEwcyAtMDowNToxMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUF1ZwkxMgkxMjowNTowMHMgLTA6MDU6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMTMJMTI6MDQ6NTBzIC0wOjA0OjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXVnCTE0CTEyOjA0OjM1cyAtMDowNDozNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUF1ZwkxNQkxMjowNDoyNXMgLTA6MDQ6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMTYJMTI6MDQ6MTVzIC0wOjA0OjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXVnCTE3CTEyOjA0OjAwcyAtMDowNDowMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUF1ZwkxOAkxMjowMzo1MHMgLTA6MDM6NTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMTkJMTI6MDM6MzVzIC0wOjAzOjM1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXVnCTIwCTEyOjAzOjIwcyAtMDowMzoyMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUF1ZwkyMQkxMjowMzowNXMgLTA6MDM6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMjIJMTI6MDI6NTBzIC0wOjAyOjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXVnCTIzCTEyOjAyOjM1cyAtMDowMjozNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUF1ZwkyNAkxMjowMjoyMHMgLTA6MDI6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMjUJMTI6MDI6MDBzIC0wOjAyOjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXVnCTI2CTEyOjAxOjQ1cyAtMDowMTo0NSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUF1ZwkyNwkxMjowMTozMHMgLTA6MDE6MzAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMjgJMTI6MDE6MTBzIC0wOjAxOjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JQXVnCTI5CTEyOjAwOjUwcyAtMDowMDo1MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCUF1ZwkzMAkxMjowMDozNXMgLTA6MDA6MzUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlBdWcJMzEJMTI6MDA6MTVzIC0wOjAwOjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTEJMTE6NTk6NTVzIDA6MDA6MDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlTZXAJMgkxMTo1OTozNXMgMDowMDoyNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCVNlcAkzCTExOjU5OjIwcyAwOjAwOjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTQJMTE6NTk6MDBzIDA6MDE6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlTZXAJNQkxMTo1ODo0MHMgMDowMToyMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCVNlcAk2CTExOjU4OjIwcyAwOjAxOjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTcJMTE6NTg6MDBzIDA6MDI6MDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlTZXAJOAkxMTo1NzozNXMgMDowMjoyNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCVNlcAk5CTExOjU3OjE1cyAwOjAyOjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTEwCTExOjU2OjU1cyAwOjAzOjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTExCTExOjU2OjM1cyAwOjAzOjI1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTEyCTExOjU2OjE1cyAwOjAzOjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTEzCTExOjU1OjUwcyAwOjA0OjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTE0CTExOjU1OjMwcyAwOjA0OjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTE1CTExOjU1OjEwcyAwOjA0OjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTE2CTExOjU0OjUwcyAwOjA1OjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTE3CTExOjU0OjI1cyAwOjA1OjM1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTE4CTExOjU0OjA1cyAwOjA1OjU1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTE5CTExOjUzOjQ1cyAwOjA2OjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTIwCTExOjUzOjI1cyAwOjA2OjM1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTIxCTExOjUzOjAwcyAwOjA3OjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTIyCTExOjUyOjQwcyAwOjA3OjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTIzCTExOjUyOjIwcyAwOjA3OjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTI0CTExOjUyOjAwcyAwOjA4OjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTI1CTExOjUxOjQwcyAwOjA4OjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTI2CTExOjUxOjE1cyAwOjA4OjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTI3CTExOjUwOjU1cyAwOjA5OjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTI4CTExOjUwOjM1cyAwOjA5OjI1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTI5CTExOjUwOjE1cyAwOjA5OjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JU2VwCTMwCTExOjQ5OjU1cyAwOjEwOjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTEJMTE6NDk6MzVzIDA6MTA6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlPY3QJMgkxMTo0OToyMHMgMDoxMDo0MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU9jdAkzCTExOjQ5OjAwcyAwOjExOjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTQJMTE6NDg6NDBzIDA6MTE6MjAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlPY3QJNQkxMTo0ODoyNXMgMDoxMTozNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU9jdAk2CTExOjQ4OjA1cyAwOjExOjU1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTcJMTE6NDc6NTBzIDA6MTI6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlPY3QJOAkxMTo0NzozMHMgMDoxMjozMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU9jdAk5CTExOjQ3OjE1cyAwOjEyOjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTEwCTExOjQ3OjAwcyAwOjEzOjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTExCTExOjQ2OjQ1cyAwOjEzOjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTEyCTExOjQ2OjMwcyAwOjEzOjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTEzCTExOjQ2OjE1cyAwOjEzOjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTE0CTExOjQ2OjAwcyAwOjE0OjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTE1CTExOjQ1OjQ1cyAwOjE0OjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTE2CTExOjQ1OjM1cyAwOjE0OjI1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTE3CTExOjQ1OjIwcyAwOjE0OjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTE4CTExOjQ1OjEwcyAwOjE0OjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTE5CTExOjQ1OjAwcyAwOjE1OjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTIwCTExOjQ0OjQ1cyAwOjE1OjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTIxCTExOjQ0OjQwcyAwOjE1OjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTIyCTExOjQ0OjMwcyAwOjE1OjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTIzCTExOjQ0OjIwcyAwOjE1OjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTI0CTExOjQ0OjEwcyAwOjE1OjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTI1CTExOjQ0OjA1cyAwOjE1OjU1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTI2CTExOjQ0OjAwcyAwOjE2OjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTI3CTExOjQzOjU1cyAwOjE2OjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTI4CTExOjQzOjUwcyAwOjE2OjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTI5CTExOjQzOjQ1cyAwOjE2OjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTMwCTExOjQzOjQwcyAwOjE2OjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JT2N0CTMxCTExOjQzOjQwcyAwOjE2OjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTEJMTE6NDM6MzVzIDA6MTY6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlOb3YJMgkxMTo0MzozNXMgMDoxNjoyNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU5vdgkzCTExOjQzOjM1cyAwOjE2OjI1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTQJMTE6NDM6MzVzIDA6MTY6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlOb3YJNQkxMTo0Mzo0MHMgMDoxNjoyMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU5vdgk2CTExOjQzOjQwcyAwOjE2OjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTcJMTE6NDM6NDVzIDA6MTY6MTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlOb3YJOAkxMTo0Mzo0NXMgMDoxNjoxNSAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCU5vdgk5CTExOjQzOjUwcyAwOjE2OjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTEwCTExOjQ0OjAwcyAwOjE2OjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTExCTExOjQ0OjA1cyAwOjE1OjU1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTEyCTExOjQ0OjEwcyAwOjE1OjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTEzCTExOjQ0OjIwcyAwOjE1OjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTE0CTExOjQ0OjMwcyAwOjE1OjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTE1CTExOjQ0OjQwcyAwOjE1OjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTE2CTExOjQ0OjUwcyAwOjE1OjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTE3CTExOjQ1OjAwcyAwOjE1OjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTE4CTExOjQ1OjE1cyAwOjE0OjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTE5CTExOjQ1OjI1cyAwOjE0OjM1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTIwCTExOjQ1OjQwcyAwOjE0OjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTIxCTExOjQ1OjU1cyAwOjE0OjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTIyCTExOjQ2OjEwcyAwOjEzOjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTIzCTExOjQ2OjMwcyAwOjEzOjMwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTI0CTExOjQ2OjQ1cyAwOjEzOjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTI1CTExOjQ3OjA1cyAwOjEyOjU1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTI2CTExOjQ3OjIwcyAwOjEyOjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTI3CTExOjQ3OjQwcyAwOjEyOjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTI4CTExOjQ4OjAwcyAwOjEyOjAwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTI5CTExOjQ4OjI1cyAwOjExOjM1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JTm92CTMwCTExOjQ4OjQ1cyAwOjExOjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTEJMTE6NDk6MDVzIDA6MTA6NTUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlEZWMJMgkxMTo0OTozMHMgMDoxMDozMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCURlYwkzCTExOjQ5OjU1cyAwOjEwOjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTQJMTE6NTA6MTVzIDA6MDk6NDUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlEZWMJNQkxMTo1MDo0MHMgMDowOToyMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCURlYwk2CTExOjUxOjA1cyAwOjA4OjU1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTcJMTE6NTE6MzVzIDA6MDg6MjUgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlEZWMJOAkxMTo1MjowMHMgMDowODowMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCURlYwk5CTExOjUyOjI1cyAwOjA3OjM1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTEwCTExOjUyOjU1cyAwOjA3OjA1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTExCTExOjUzOjIwcyAwOjA2OjQwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTEyCTExOjUzOjUwcyAwOjA2OjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTEzCTExOjU0OjE1cyAwOjA1OjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTE0CTExOjU0OjQ1cyAwOjA1OjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTE1CTExOjU1OjE1cyAwOjA0OjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTE2CTExOjU1OjQ1cyAwOjA0OjE1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTE3CTExOjU2OjE1cyAwOjAzOjQ1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTE4CTExOjU2OjQwcyAwOjAzOjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTE5CTExOjU3OjEwcyAwOjAyOjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTIwCTExOjU3OjQwcyAwOjAyOjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTIxCTExOjU4OjEwcyAwOjAxOjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTIyCTExOjU4OjQwcyAwOjAxOjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTIzCTExOjU5OjEwcyAwOjAwOjUwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTI0CTExOjU5OjQwcyAwOjAwOjIwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTI1CTEyOjAwOjEwcyAtMDowMDoxMCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCURlYwkyNgkxMjowMDo0MHMgLTA6MDA6NDAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlEZWMJMjcJMTI6MDE6MTBzIC0wOjAxOjEwIC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTI4CTEyOjAxOjQwcyAtMDowMTo0MCAtCitSdWxlCXNvbDg4CTE5ODgJb25seQktCURlYwkyOQkxMjowMjoxMHMgLTA6MDI6MTAgLQorUnVsZQlzb2w4OAkxOTg4CW9ubHkJLQlEZWMJMzAJMTI6MDI6MzVzIC0wOjAyOjM1IC0KK1J1bGUJc29sODgJMTk4OAlvbmx5CS0JRGVjCTMxCTEyOjAzOjA1cyAtMDowMzowNSAtCisKKyMgUml5YWRoIGlzIGF0IGFib3V0IDQ2IGRlZ3JlZXMgNDYgbWludXRlcyBFYXN0OiAgMyBocnMsIDcgbWlucywgNCBzZWNzCisjIEJlZm9yZSBhbmQgYWZ0ZXIgMTk4OCwgd2UnbGwgb3BlcmF0ZSBvbiBsb2NhbCBtZWFuIHNvbGFyIHRpbWUuCisKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMvU0FWRQlGT1JNQVQJW1VOVElMXQorWm9uZQlBc2lhL1JpeWFkaDg4CTM6MDc6MDQJLQkJenp6CTE5ODgKKwkJCTM6MDc6MDQJc29sODgJCXp6egkxOTg5CisJCQkzOjA3OjA0CS0JCXp6egorIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4uLgorTGluawlBc2lhL1JpeWFkaDg4CU1pZGVhc3QvUml5YWRoODgKZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9zb2xhcjg5IGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3NvbGFyODkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0ZGU0YQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9zb2xhcjg5CkBAIC0wLDAgKzEsMzk2IEBACisjIDxwcmU+CisjIEAoIylzb2xhcjg5CTguMgorIyBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorIyAyMDA5LTA1LTE3IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKworIyBBcHBhcmVudCBub29uIHRpbWVzIGJlbG93IGFyZSBmb3IgUml5YWRoOyB0aGV5J3JlIGEgYml0IG9mZiBmb3Igb3RoZXIgcGxhY2VzLgorIyBUaW1lcyB3ZXJlIGNvbXB1dGVkIHVzaW5nIGEgZm9ybXVsYSBwcm92aWRlZCBieSB0aGUgVS4gUy4gTmF2YWwgT2JzZXJ2YXRvcnk6CisjCWVxdCA9IC0xMDUuOCAqIHNpbihsKSArIDU5Ni4yICogc2luKDIgKiBsKSArIDQuNCAqIHNpbigzICogbCkKKyMJCS0xMi43ICogc2luKDQgKiBsKSAtIDQyOS4wICogY29zKGwpIC0gMi4xICogY29zICgyICogbCkKKyMJCSsgMTkuMyAqIGNvcygzICogbCk7CisjIHdoZXJlIGwgaXMgdGhlICJtZWFuIGxvbmdpdHVkZSBvZiB0aGUgU3VuIiBnaXZlbiBieQorIwlsID0gMjc5LjY0MiBkZWdyZWVzICsgMC45ODU2NDcgKiBkCisjIGFuZCBkIGlzIHRoZSBpbnRlcnZhbCBpbiBkYXlzIGZyb20gSmFudWFyeSAwLCAwIGhvdXJzIFVuaXZlcnNhbCBUaW1lCisjIChlcXVhbGluZyB0aGUgZGF5IG9mIHRoZSB5ZWFyIHBsdXMgdGhlIGZyYWN0aW9uIG9mIGEgZGF5IGZyb20gemVybyBob3VycykuCisjIFRoZSBhY2N1cmFjeSBvZiB0aGUgZm9ybXVsYSBpcyBwbHVzIG9yIG1pbnVzIHRocmVlIHNlY29uZHMuCisjCisjIFJvdW5kaW5nIHRvIHRoZSBuZWFyZXN0IGZpdmUgc2Vjb25kcyByZXN1bHRzIGluIGZld2VyIHRoYW4KKyMgMjU2IGRpZmZlcmVudCAidGltZSB0eXBlcyItLWEgbGltaXQgdGhhdCdzIGZhY2VkIGJlY2F1c2UgdGltZSB0eXBlcyBhcmUKKyMgc3RvcmVkIG9uIGRpc2sgYXMgdW5zaWduZWQgY2hhcnMuCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkxCTEyOjAzOjM1cyAtMDowMzozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkyCTEyOjA0OjA1cyAtMDowNDowNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkzCTEyOjA0OjMwcyAtMDowNDozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgk0CTEyOjA1OjAwcyAtMDowNTowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgk1CTEyOjA1OjI1cyAtMDowNToyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgk2CTEyOjA1OjUwcyAtMDowNTo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgk3CTEyOjA2OjE1cyAtMDowNjoxNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgk4CTEyOjA2OjQ1cyAtMDowNjo0NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgk5CTEyOjA3OjEwcyAtMDowNzoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkxMAkxMjowNzozNXMgLTA6MDc6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKYW4JMTEJMTI6MDc6NTVzIC0wOjA3OjU1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSmFuCTEyCTEyOjA4OjIwcyAtMDowODoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkxMwkxMjowODo0NXMgLTA6MDg6NDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKYW4JMTQJMTI6MDk6MDVzIC0wOjA5OjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSmFuCTE1CTEyOjA5OjI1cyAtMDowOToyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkxNgkxMjowOTo0NXMgLTA6MDk6NDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKYW4JMTcJMTI6MTA6MDVzIC0wOjEwOjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSmFuCTE4CTEyOjEwOjI1cyAtMDoxMDoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkxOQkxMjoxMDo0NXMgLTA6MTA6NDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKYW4JMjAJMTI6MTE6MDVzIC0wOjExOjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSmFuCTIxCTEyOjExOjIwcyAtMDoxMToyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkyMgkxMjoxMTozNXMgLTA6MTE6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKYW4JMjMJMTI6MTE6NTVzIC0wOjExOjU1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSmFuCTI0CTEyOjEyOjEwcyAtMDoxMjoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkyNQkxMjoxMjoyMHMgLTA6MTI6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKYW4JMjYJMTI6MTI6MzVzIC0wOjEyOjM1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSmFuCTI3CTEyOjEyOjUwcyAtMDoxMjo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkyOAkxMjoxMzowMHMgLTA6MTM6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKYW4JMjkJMTI6MTM6MTBzIC0wOjEzOjEwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSmFuCTMwCTEyOjEzOjIwcyAtMDoxMzoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUphbgkzMQkxMjoxMzozMHMgLTA6MTM6MzAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJMQkxMjoxMzo0MHMgLTA6MTM6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJMgkxMjoxMzo0NXMgLTA6MTM6NDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJMwkxMjoxMzo1NXMgLTA6MTM6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJNAkxMjoxNDowMHMgLTA6MTQ6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJNQkxMjoxNDowNXMgLTA6MTQ6MDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJNgkxMjoxNDoxMHMgLTA6MTQ6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJNwkxMjoxNDoxMHMgLTA6MTQ6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJOAkxMjoxNDoxNXMgLTA6MTQ6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJOQkxMjoxNDoxNXMgLTA6MTQ6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJMTAJMTI6MTQ6MjBzIC0wOjE0OjIwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRmViCTExCTEyOjE0OjIwcyAtMDoxNDoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUZlYgkxMgkxMjoxNDoyMHMgLTA6MTQ6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJMTMJMTI6MTQ6MTVzIC0wOjE0OjE1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRmViCTE0CTEyOjE0OjE1cyAtMDoxNDoxNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUZlYgkxNQkxMjoxNDoxMHMgLTA6MTQ6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJMTYJMTI6MTQ6MTBzIC0wOjE0OjEwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRmViCTE3CTEyOjE0OjA1cyAtMDoxNDowNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUZlYgkxOAkxMjoxNDowMHMgLTA6MTQ6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJMTkJMTI6MTM6NTVzIC0wOjEzOjU1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRmViCTIwCTEyOjEzOjUwcyAtMDoxMzo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUZlYgkyMQkxMjoxMzo0MHMgLTA6MTM6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJMjIJMTI6MTM6MzVzIC0wOjEzOjM1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRmViCTIzCTEyOjEzOjI1cyAtMDoxMzoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUZlYgkyNAkxMjoxMzoxNXMgLTA6MTM6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJMjUJMTI6MTM6MDVzIC0wOjEzOjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRmViCTI2CTEyOjEyOjU1cyAtMDoxMjo1NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUZlYgkyNwkxMjoxMjo0NXMgLTA6MTI6NDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlGZWIJMjgJMTI6MTI6MzVzIC0wOjEyOjM1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTEJMTI6MTI6MjVzIC0wOjEyOjI1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTIJMTI6MTI6MTBzIC0wOjEyOjEwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTMJMTI6MTI6MDBzIC0wOjEyOjAwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTQJMTI6MTE6NDVzIC0wOjExOjQ1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTUJMTI6MTE6MzVzIC0wOjExOjM1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTYJMTI6MTE6MjBzIC0wOjExOjIwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTcJMTI6MTE6MDVzIC0wOjExOjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTgJMTI6MTA6NTBzIC0wOjEwOjUwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTkJMTI6MTA6MzVzIC0wOjEwOjM1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTEwCTEyOjEwOjIwcyAtMDoxMDoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1hcgkxMQkxMjoxMDowNXMgLTA6MTA6MDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlNYXIJMTIJMTI6MDk6NTBzIC0wOjA5OjUwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTEzCTEyOjA5OjMwcyAtMDowOTozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1hcgkxNAkxMjowOToxNXMgLTA6MDk6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlNYXIJMTUJMTI6MDk6MDBzIC0wOjA5OjAwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTE2CTEyOjA4OjQwcyAtMDowODo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1hcgkxNwkxMjowODoyNXMgLTA6MDg6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlNYXIJMTgJMTI6MDg6MDVzIC0wOjA4OjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTE5CTEyOjA3OjUwcyAtMDowNzo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1hcgkyMAkxMjowNzozMHMgLTA6MDc6MzAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlNYXIJMjEJMTI6MDc6MTVzIC0wOjA3OjE1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTIyCTEyOjA2OjU1cyAtMDowNjo1NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1hcgkyMwkxMjowNjozNXMgLTA6MDY6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlNYXIJMjQJMTI6MDY6MjBzIC0wOjA2OjIwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTI1CTEyOjA2OjAwcyAtMDowNjowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1hcgkyNgkxMjowNTo0MHMgLTA6MDU6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlNYXIJMjcJMTI6MDU6MjVzIC0wOjA1OjI1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTI4CTEyOjA1OjA1cyAtMDowNTowNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1hcgkyOQkxMjowNDo1MHMgLTA6MDQ6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlNYXIJMzAJMTI6MDQ6MzBzIC0wOjA0OjMwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWFyCTMxCTEyOjA0OjEwcyAtMDowNDoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkxCTEyOjAzOjU1cyAtMDowMzo1NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyCTEyOjAzOjM1cyAtMDowMzozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkzCTEyOjAzOjIwcyAtMDowMzoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgk0CTEyOjAzOjAwcyAtMDowMzowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgk1CTEyOjAyOjQ1cyAtMDowMjo0NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgk2CTEyOjAyOjI1cyAtMDowMjoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgk3CTEyOjAyOjEwcyAtMDowMjoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgk4CTEyOjAxOjUwcyAtMDowMTo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgk5CTEyOjAxOjM1cyAtMDowMTozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkxMAkxMjowMToyMHMgLTA6MDE6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlBcHIJMTEJMTI6MDE6MDVzIC0wOjAxOjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JQXByCTEyCTEyOjAwOjUwcyAtMDowMDo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkxMwkxMjowMDozNXMgLTA6MDA6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlBcHIJMTQJMTI6MDA6MjBzIC0wOjAwOjIwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JQXByCTE1CTEyOjAwOjA1cyAtMDowMDowNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkxNgkxMTo1OTo1MHMgMDowMDoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkxNwkxMTo1OTozNXMgMDowMDoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkxOAkxMTo1OToyMHMgMDowMDo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkxOQkxMTo1OToxMHMgMDowMDo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyMAkxMTo1ODo1NXMgMDowMTowNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyMQkxMTo1ODo0NXMgMDowMToxNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyMgkxMTo1ODozMHMgMDowMTozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyMwkxMTo1ODoyMHMgMDowMTo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyNAkxMTo1ODoxMHMgMDowMTo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyNQkxMTo1ODowMHMgMDowMjowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyNgkxMTo1Nzo1MHMgMDowMjoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyNwkxMTo1Nzo0MHMgMDowMjoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyOAkxMTo1NzozMHMgMDowMjozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkyOQkxMTo1NzoyMHMgMDowMjo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUFwcgkzMAkxMTo1NzoxNXMgMDowMjo0NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxCTExOjU3OjA1cyAwOjAyOjU1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWF5CTIJMTE6NTc6MDBzIDA6MDM6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlNYXkJMwkxMTo1Njo1MHMgMDowMzoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQk0CTExOjU2OjQ1cyAwOjAzOjE1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWF5CTUJMTE6NTY6NDBzIDA6MDM6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlNYXkJNgkxMTo1NjozNXMgMDowMzoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQk3CTExOjU2OjMwcyAwOjAzOjMwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTWF5CTgJMTE6NTY6MzBzIDA6MDM6MzAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlNYXkJOQkxMTo1NjoyNXMgMDowMzozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxMAkxMTo1NjoyNXMgMDowMzozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxMQkxMTo1NjoyMHMgMDowMzo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxMgkxMTo1NjoyMHMgMDowMzo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxMwkxMTo1NjoyMHMgMDowMzo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxNAkxMTo1NjoyMHMgMDowMzo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxNQkxMTo1NjoyMHMgMDowMzo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxNgkxMTo1NjoyMHMgMDowMzo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxNwkxMTo1NjoyMHMgMDowMzo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxOAkxMTo1NjoyNXMgMDowMzozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkxOQkxMTo1NjoyNXMgMDowMzozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkyMAkxMTo1NjozMHMgMDowMzozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkyMQkxMTo1NjozNXMgMDowMzoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkyMgkxMTo1NjozNXMgMDowMzoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkyMwkxMTo1Njo0MHMgMDowMzoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkyNAkxMTo1Njo0NXMgMDowMzoxNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkyNQkxMTo1Njo1NXMgMDowMzowNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkyNgkxMTo1NzowMHMgMDowMzowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkyNwkxMTo1NzowNXMgMDowMjo1NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkyOAkxMTo1NzoxNXMgMDowMjo0NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkyOQkxMTo1NzoyMHMgMDowMjo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkzMAkxMTo1NzozMHMgMDowMjozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU1heQkzMQkxMTo1NzozNXMgMDowMjoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkxCTExOjU3OjQ1cyAwOjAyOjE1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVuCTIJMTE6NTc6NTVzIDA6MDI6MDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdW4JMwkxMTo1ODowNXMgMDowMTo1NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgk0CTExOjU4OjE1cyAwOjAxOjQ1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVuCTUJMTE6NTg6MjVzIDA6MDE6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdW4JNgkxMTo1ODozNXMgMDowMToyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgk3CTExOjU4OjQ1cyAwOjAxOjE1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVuCTgJMTE6NTk6MDBzIDA6MDE6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdW4JOQkxMTo1OToxMHMgMDowMDo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkxMAkxMTo1OToyMHMgMDowMDo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkxMQkxMTo1OTozNXMgMDowMDoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkxMgkxMTo1OTo0NXMgMDowMDoxNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkxMwkxMjowMDowMHMgMDowMDowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkxNAkxMjowMDoxMHMgLTA6MDA6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdW4JMTUJMTI6MDA6MjVzIC0wOjAwOjI1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVuCTE2CTEyOjAwOjM1cyAtMDowMDozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkxNwkxMjowMDo1MHMgLTA6MDA6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdW4JMTgJMTI6MDE6MDVzIC0wOjAxOjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVuCTE5CTEyOjAxOjE1cyAtMDowMToxNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkyMAkxMjowMTozMHMgLTA6MDE6MzAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdW4JMjEJMTI6MDE6NDBzIC0wOjAxOjQwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVuCTIyCTEyOjAxOjU1cyAtMDowMTo1NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkyMwkxMjowMjoxMHMgLTA6MDI6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdW4JMjQJMTI6MDI6MjBzIC0wOjAyOjIwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVuCTI1CTEyOjAyOjM1cyAtMDowMjozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkyNgkxMjowMjo0NXMgLTA6MDI6NDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdW4JMjcJMTI6MDM6MDBzIC0wOjAzOjAwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVuCTI4CTEyOjAzOjEwcyAtMDowMzoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bgkyOQkxMjowMzoyNXMgLTA6MDM6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdW4JMzAJMTI6MDM6MzVzIC0wOjAzOjM1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTEJMTI6MDM6NDVzIC0wOjAzOjQ1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTIJMTI6MDQ6MDBzIC0wOjA0OjAwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTMJMTI6MDQ6MTBzIC0wOjA0OjEwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTQJMTI6MDQ6MjBzIC0wOjA0OjIwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTUJMTI6MDQ6MzBzIC0wOjA0OjMwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTYJMTI6MDQ6NDBzIC0wOjA0OjQwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTcJMTI6MDQ6NTBzIC0wOjA0OjUwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTgJMTI6MDU6MDBzIC0wOjA1OjAwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTkJMTI6MDU6MTBzIC0wOjA1OjEwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTEwCTEyOjA1OjIwcyAtMDowNToyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bAkxMQkxMjowNToyNXMgLTA6MDU6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdWwJMTIJMTI6MDU6MzVzIC0wOjA1OjM1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTEzCTEyOjA1OjQwcyAtMDowNTo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bAkxNAkxMjowNTo1MHMgLTA6MDU6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdWwJMTUJMTI6MDU6NTVzIC0wOjA1OjU1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTE2CTEyOjA2OjAwcyAtMDowNjowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bAkxNwkxMjowNjowNXMgLTA6MDY6MDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdWwJMTgJMTI6MDY6MTBzIC0wOjA2OjEwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTE5CTEyOjA2OjE1cyAtMDowNjoxNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bAkyMAkxMjowNjoyMHMgLTA6MDY6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdWwJMjEJMTI6MDY6MjBzIC0wOjA2OjIwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTIyCTEyOjA2OjI1cyAtMDowNjoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bAkyMwkxMjowNjoyNXMgLTA6MDY6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdWwJMjQJMTI6MDY6MzBzIC0wOjA2OjMwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTI1CTEyOjA2OjMwcyAtMDowNjozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bAkyNgkxMjowNjozMHMgLTA6MDY6MzAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdWwJMjcJMTI6MDY6MzBzIC0wOjA2OjMwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTI4CTEyOjA2OjMwcyAtMDowNjozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUp1bAkyOQkxMjowNjoyNXMgLTA6MDY6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlKdWwJMzAJMTI6MDY6MjVzIC0wOjA2OjI1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JSnVsCTMxCTEyOjA2OjIwcyAtMDowNjoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkxCTEyOjA2OjIwcyAtMDowNjoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkyCTEyOjA2OjE1cyAtMDowNjoxNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkzCTEyOjA2OjEwcyAtMDowNjoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1Zwk0CTEyOjA2OjA1cyAtMDowNjowNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1Zwk1CTEyOjA2OjAwcyAtMDowNjowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1Zwk2CTEyOjA1OjUwcyAtMDowNTo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1Zwk3CTEyOjA1OjQ1cyAtMDowNTo0NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1Zwk4CTEyOjA1OjM1cyAtMDowNTozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1Zwk5CTEyOjA1OjMwcyAtMDowNTozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkxMAkxMjowNToyMHMgLTA6MDU6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlBdWcJMTEJMTI6MDU6MTBzIC0wOjA1OjEwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JQXVnCTEyCTEyOjA1OjAwcyAtMDowNTowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkxMwkxMjowNDo1MHMgLTA6MDQ6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlBdWcJMTQJMTI6MDQ6NDBzIC0wOjA0OjQwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JQXVnCTE1CTEyOjA0OjMwcyAtMDowNDozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkxNgkxMjowNDoxNXMgLTA6MDQ6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlBdWcJMTcJMTI6MDQ6MDVzIC0wOjA0OjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JQXVnCTE4CTEyOjAzOjUwcyAtMDowMzo1MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkxOQkxMjowMzozNXMgLTA6MDM6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlBdWcJMjAJMTI6MDM6MjVzIC0wOjAzOjI1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JQXVnCTIxCTEyOjAzOjEwcyAtMDowMzoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkyMgkxMjowMjo1NXMgLTA6MDI6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlBdWcJMjMJMTI6MDI6NDBzIC0wOjAyOjQwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JQXVnCTI0CTEyOjAyOjIwcyAtMDowMjoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkyNQkxMjowMjowNXMgLTA6MDI6MDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlBdWcJMjYJMTI6MDE6NTBzIC0wOjAxOjUwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JQXVnCTI3CTEyOjAxOjMwcyAtMDowMTozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkyOAkxMjowMToxNXMgLTA6MDE6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlBdWcJMjkJMTI6MDA6NTVzIC0wOjAwOjU1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JQXVnCTMwCTEyOjAwOjQwcyAtMDowMDo0MCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCUF1ZwkzMQkxMjowMDoyMHMgLTA6MDA6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMQkxMjowMDowMHMgMDowMDowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCVNlcAkyCTExOjU5OjQ1cyAwOjAwOjE1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JU2VwCTMJMTE6NTk6MjVzIDA6MDA6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJNAkxMTo1OTowNXMgMDowMDo1NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCVNlcAk1CTExOjU4OjQ1cyAwOjAxOjE1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JU2VwCTYJMTE6NTg6MjVzIDA6MDE6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJNwkxMTo1ODowNXMgMDowMTo1NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCVNlcAk4CTExOjU3OjQ1cyAwOjAyOjE1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JU2VwCTkJMTE6NTc6MjBzIDA6MDI6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMTAJMTE6NTc6MDBzIDA6MDM6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMTEJMTE6NTY6NDBzIDA6MDM6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMTIJMTE6NTY6MjBzIDA6MDM6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMTMJMTE6NTY6MDBzIDA6MDQ6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMTQJMTE6NTU6MzVzIDA6MDQ6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMTUJMTE6NTU6MTVzIDA6MDQ6NDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMTYJMTE6NTQ6NTVzIDA6MDU6MDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMTcJMTE6NTQ6MzVzIDA6MDU6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMTgJMTE6NTQ6MTBzIDA6MDU6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMTkJMTE6NTM6NTBzIDA6MDY6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMjAJMTE6NTM6MzBzIDA6MDY6MzAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMjEJMTE6NTM6MTBzIDA6MDY6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMjIJMTE6NTI6NDVzIDA6MDc6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMjMJMTE6NTI6MjVzIDA6MDc6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMjQJMTE6NTI6MDVzIDA6MDc6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMjUJMTE6NTE6NDVzIDA6MDg6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMjYJMTE6NTE6MjVzIDA6MDg6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMjcJMTE6NTE6MDVzIDA6MDg6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMjgJMTE6NTA6NDBzIDA6MDk6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMjkJMTE6NTA6MjBzIDA6MDk6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlTZXAJMzAJMTE6NTA6MDBzIDA6MTA6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMQkxMTo0OTo0NXMgMDoxMDoxNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU9jdAkyCTExOjQ5OjI1cyAwOjEwOjM1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JT2N0CTMJMTE6NDk6MDVzIDA6MTA6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJNAkxMTo0ODo0NXMgMDoxMToxNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU9jdAk1CTExOjQ4OjMwcyAwOjExOjMwIC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JT2N0CTYJMTE6NDg6MTBzIDA6MTE6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJNwkxMTo0Nzo1MHMgMDoxMjoxMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU9jdAk4CTExOjQ3OjM1cyAwOjEyOjI1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JT2N0CTkJMTE6NDc6MjBzIDA6MTI6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMTAJMTE6NDc6MDBzIDA6MTM6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMTEJMTE6NDY6NDVzIDA6MTM6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMTIJMTE6NDY6MzBzIDA6MTM6MzAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMTMJMTE6NDY6MTVzIDA6MTM6NDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMTQJMTE6NDY6MDBzIDA6MTQ6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMTUJMTE6NDU6NTBzIDA6MTQ6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMTYJMTE6NDU6MzVzIDA6MTQ6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMTcJMTE6NDU6MjBzIDA6MTQ6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMTgJMTE6NDU6MTBzIDA6MTQ6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMTkJMTE6NDU6MDBzIDA6MTU6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMjAJMTE6NDQ6NTBzIDA6MTU6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMjEJMTE6NDQ6NDBzIDA6MTU6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMjIJMTE6NDQ6MzBzIDA6MTU6MzAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMjMJMTE6NDQ6MjBzIDA6MTU6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMjQJMTE6NDQ6MTBzIDA6MTU6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMjUJMTE6NDQ6MDVzIDA6MTU6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMjYJMTE6NDQ6MDBzIDA6MTY6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMjcJMTE6NDM6NTBzIDA6MTY6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMjgJMTE6NDM6NDVzIDA6MTY6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMjkJMTE6NDM6NDBzIDA6MTY6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMzAJMTE6NDM6NDBzIDA6MTY6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlPY3QJMzEJMTE6NDM6MzVzIDA6MTY6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMQkxMTo0MzozNXMgMDoxNjoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU5vdgkyCTExOjQzOjM1cyAwOjE2OjI1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTm92CTMJMTE6NDM6MzBzIDA6MTY6MzAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJNAkxMTo0MzozNXMgMDoxNjoyNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU5vdgk1CTExOjQzOjM1cyAwOjE2OjI1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTm92CTYJMTE6NDM6MzVzIDA6MTY6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJNwkxMTo0Mzo0MHMgMDoxNjoyMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCU5vdgk4CTExOjQzOjQ1cyAwOjE2OjE1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JTm92CTkJMTE6NDM6NTBzIDA6MTY6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMTAJMTE6NDM6NTVzIDA6MTY6MDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMTEJMTE6NDQ6MDBzIDA6MTY6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMTIJMTE6NDQ6MDVzIDA6MTU6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMTMJMTE6NDQ6MTVzIDA6MTU6NDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMTQJMTE6NDQ6MjVzIDA6MTU6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMTUJMTE6NDQ6MzVzIDA6MTU6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMTYJMTE6NDQ6NDVzIDA6MTU6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMTcJMTE6NDQ6NTVzIDA6MTU6MDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMTgJMTE6NDU6MTBzIDA6MTQ6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMTkJMTE6NDU6MjBzIDA6MTQ6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMjAJMTE6NDU6MzVzIDA6MTQ6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMjEJMTE6NDU6NTBzIDA6MTQ6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMjIJMTE6NDY6MDVzIDA6MTM6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMjMJMTE6NDY6MjVzIDA6MTM6MzUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMjQJMTE6NDY6NDBzIDA6MTM6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMjUJMTE6NDc6MDBzIDA6MTM6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMjYJMTE6NDc6MjBzIDA6MTI6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMjcJMTE6NDc6MzVzIDA6MTI6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMjgJMTE6NDc6NTVzIDA6MTI6MDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMjkJMTE6NDg6MjBzIDA6MTE6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlOb3YJMzAJMTE6NDg6NDBzIDA6MTE6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMQkxMTo0OTowMHMgMDoxMTowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCURlYwkyCTExOjQ5OjI1cyAwOjEwOjM1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRGVjCTMJMTE6NDk6NTBzIDA6MTA6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJNAkxMTo1MDoxNXMgMDowOTo0NSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCURlYwk1CTExOjUwOjM1cyAwOjA5OjI1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRGVjCTYJMTE6NTE6MDBzIDA6MDk6MDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJNwkxMTo1MTozMHMgMDowODozMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCURlYwk4CTExOjUxOjU1cyAwOjA4OjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRGVjCTkJMTE6NTI6MjBzIDA6MDc6NDAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMTAJMTE6NTI6NTBzIDA6MDc6MTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMTEJMTE6NTM6MTVzIDA6MDY6NDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMTIJMTE6NTM6NDVzIDA6MDY6MTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMTMJMTE6NTQ6MTBzIDA6MDU6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMTQJMTE6NTQ6NDBzIDA6MDU6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMTUJMTE6NTU6MTBzIDA6MDQ6NTAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMTYJMTE6NTU6NDBzIDA6MDQ6MjAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMTcJMTE6NTY6MDVzIDA6MDM6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMTgJMTE6NTY6MzVzIDA6MDM6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMTkJMTE6NTc6MDVzIDA6MDI6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMjAJMTE6NTc6MzVzIDA6MDI6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMjEJMTE6NTg6MDVzIDA6MDE6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMjIJMTE6NTg6MzVzIDA6MDE6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMjMJMTE6NTk6MDVzIDA6MDA6NTUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMjQJMTE6NTk6MzVzIDA6MDA6MjUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMjUJMTI6MDA6MDVzIC0wOjAwOjA1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRGVjCTI2CTEyOjAwOjM1cyAtMDowMDozNSAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCURlYwkyNwkxMjowMTowNXMgLTA6MDE6MDUgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMjgJMTI6MDE6MzVzIC0wOjAxOjM1IC0KK1J1bGUJc29sODkJMTk4OQlvbmx5CS0JRGVjCTI5CTEyOjAyOjAwcyAtMDowMjowMCAtCitSdWxlCXNvbDg5CTE5ODkJb25seQktCURlYwkzMAkxMjowMjozMHMgLTA6MDI6MzAgLQorUnVsZQlzb2w4OQkxOTg5CW9ubHkJLQlEZWMJMzEJMTI6MDM6MDBzIC0wOjAzOjAwIC0KKworIyBSaXlhZGggaXMgYXQgYWJvdXQgNDYgZGVncmVlcyA0NiBtaW51dGVzIEVhc3Q6ICAzIGhycywgNyBtaW5zLCA0IHNlY3MKKyMgQmVmb3JlIGFuZCBhZnRlciAxOTg5LCB3ZSdsbCBvcGVyYXRlIG9uIGxvY2FsIG1lYW4gc29sYXIgdGltZS4KKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUy9TQVZFCUZPUk1BVAlbVU5USUxdCitab25lCUFzaWEvUml5YWRoODkJMzowNzowNAktCQl6enoJMTk4OQorCQkJMzowNzowNAlzb2w4OQkJenp6CTE5OTAKKwkJCTM6MDc6MDQJLQkJenp6CisjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Li4uCitMaW5rCUFzaWEvUml5YWRoODkJTWlkZWFzdC9SaXlhZGg4OQpkaWZmIC0tZ2l0IGEvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3NvdXRoYW1lcmljYSBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9zb3V0aGFtZXJpY2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQxZTU3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9zb3V0aGFtZXJpY2EKQEAgLTAsMCArMSwxNDc1IEBACisjIDxwcmU+CisjIEAoIylzb3V0aGFtZXJpY2EJOC4zNgorIyBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorIyAyMDA5LTA1LTE3IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKworIyBUaGlzIGRhdGEgaXMgYnkgbm8gbWVhbnMgYXV0aG9yaXRhdGl2ZTsgaWYgeW91IHRoaW5rIHlvdSBrbm93IGJldHRlciwKKyMgZ28gYWhlYWQgYW5kIGVkaXQgdGhlIGZpbGUgKGFuZCBwbGVhc2Ugc2VuZCBhbnkgY2hhbmdlcyB0bworIyB0ekBlbHNpZS5uY2kubmloLmdvdiBmb3IgZ2VuZXJhbCB1c2UgaW4gdGhlIGZ1dHVyZSkuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIEEgZ29vZCBzb3VyY2UgZm9yIHRpbWUgem9uZSBoaXN0b3JpY2FsIGRhdGEgb3V0c2lkZSB0aGUgVS5TLiBpcworIyBUaG9tYXMgRy4gU2hhbmtzIGFuZCBSaXF1ZSBQb3R0ZW5nZXIsIFRoZSBJbnRlcm5hdGlvbmFsIEF0bGFzICg2dGggZWRpdGlvbiksCisjIFNhbiBEaWVnbzogQUNTIFB1YmxpY2F0aW9ucywgSW5jLiAoMjAwMykuCisjCisjIEd3aWxsaW0gTGF3IHdyaXRlcyB0aGF0IGEgZ29vZCBzb3VyY2UKKyMgZm9yIHJlY2VudCB0aW1lIHpvbmUgZGF0YSBpcyB0aGUgSW50ZXJuYXRpb25hbCBBaXIgVHJhbnNwb3J0CisjIEFzc29jaWF0aW9uJ3MgU3RhbmRhcmQgU2NoZWR1bGVzIEluZm9ybWF0aW9uIE1hbnVhbCAoSUFUQSBTU0lNKSwKKyMgcHVibGlzaGVkIHNlbWlhbm51YWxseS4gIExhdyBzZW50IGluIHNldmVyYWwgaGVscGZ1bCBzdW1tYXJpZXMKKyMgb2YgdGhlIElBVEEncyBkYXRhIGFmdGVyIDE5OTAuCisjCisjIEV4Y2VwdCB3aGVyZSBvdGhlcndpc2Ugbm90ZWQsIFNoYW5rcyAmIFBvdHRlbmdlciBpcyB0aGUgc291cmNlIGZvcgorIyBlbnRyaWVzIHRocm91Z2ggMTk5MCwgYW5kIElBVEEgU1NJTSBpcyB0aGUgc291cmNlIGZvciBlbnRyaWVzIGFmdGVyd2FyZHMuCisjCisjIEVhcmxpZXIgZWRpdGlvbnMgb2YgdGhlc2UgdGFibGVzIHVzZWQgdGhlIE5vcnRoIEFtZXJpY2FuIHN0eWxlIChlLmcuIEFSU1QgYW5kCisjIEFSRFQgZm9yIEFyZ2VudGluZSBTdGFuZGFyZCBhbmQgRGF5bGlnaHQgVGltZSksIGJ1dCB0aGUgZm9sbG93aW5nIHF1b3RlCisjIHN1Z2dlc3RzIHRoYXQgaXQncyBiZXR0ZXIgdG8gdXNlIEV1cm9wZWFuIHN0eWxlIChlLmcuIEFSVCBhbmQgQVJTVCkuCisjCUkgc3VnZ2VzdCB0aGUgdXNlIG9mIF9TdW1tZXIgdGltZV8gaW5zdGVhZCBvZiB0aGUgbW9yZSBjdW1iZXJzb21lCisjCV9kYXlsaWdodC1zYXZpbmcgdGltZV8uICBfU3VtbWVyIHRpbWVfIHNlZW1zIHRvIGJlIGluIGdlbmVyYWwgdXNlCisjCWluIEV1cm9wZSBhbmQgU291dGggQW1lcmljYS4KKyMJLS0gRSBPIEN1dGxlciwgX05ldyBZb3JrIFRpbWVzXyAoMTkzNy0wMi0xNCksIHF1b3RlZCBpbgorIwlIIEwgTWVuY2tlbiwgX1RoZSBBbWVyaWNhbiBMYW5ndWFnZTogU3VwcGxlbWVudCBJXyAoMTk2MCksIHAgNDY2CisjCisjIEVhcmxpZXIgZWRpdGlvbnMgb2YgdGhlc2UgdGFibGVzIGFsc28gdXNlZCB0aGUgTm9ydGggQW1lcmljYW4gc3R5bGUKKyMgZm9yIHRpbWUgem9uZXMgaW4gQnJhemlsLCBidXQgdGhpcyB3YXMgaW5jb3JyZWN0LCBhcyBCcmF6aWxpYW5zIHNheQorIyAic3VtbWVyIHRpbWUiLiAgUmVpbmFsZG8gR291bGFydCwgYSBTYW8gUGF1bG8gYnVzaW5lc3NtYW4gYWN0aXZlIGluCisjIHRoZSByYWlscm9hZCBzZWN0b3IsIHdyaXRlcyAoMTk5OS0wNy0wNik6CisjCVRoZSBzdWJqZWN0IG9mIHRpbWUgem9uZXMgaXMgY3VycmVudGx5IGEgbWF0dGVyIG9mIGRpc2N1c3Npb24vZGViYXRlIGluCisjCUJyYXppbC4gIExldCdzIHNheSB0aGF0ICJ0aGUgQnJhc2lsaWEgdGltZSIgaXMgY29uc2lkZXJlZCB0aGUKKyMJIm9mZmljaWFsIHRpbWUiIGJlY2F1c2UgQnJhc2lsaWEgaXMgdGhlIGNhcGl0YWwgY2l0eS4KKyMJVGhlIG90aGVyIHRocmVlIHRpbWUgem9uZXMgYXJlIGNhbGxlZCAiQnJhc2lsaWEgdGltZSAibWludXMgb25lIiBvcgorIwkicGx1cyBvbmUiIG9yICJwbHVzIHR3byIuICBBcyBmYXIgYXMgSSBrbm93IHRoZXJlIGlzIG5vIHN1Y2gKKyMJbmFtZS9kZXNpZ25hdGlvbiBhcyAiRWFzdGVybiBUaW1lIiBvciAiQ2VudHJhbCBUaW1lIi4KKyMgU28gSSBpbnZlbnRlZCB0aGUgZm9sbG93aW5nIChFbmdsaXNoLWxhbmd1YWdlKSBhYmJyZXZpYXRpb25zIGZvciBub3cuCisjIENvcnJlY3Rpb25zIGFyZSB3ZWxjb21lIQorIwkJc3RkCWRzdAorIwktMjowMAlGTlQJRk5TVAlGZXJuYW5kbyBkZSBOb3JvbmhhCisjCS0zOjAwCUJSVAlCUlNUCUJyYXNpbGlhCisjCS00OjAwCUFNVAlBTVNUCUFtYXpvbgorIwktNTowMAlBQ1QJQUNTVAlBY3JlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEFyZ2VudGluYQorCisjIEZyb20gQm9iIERldmluZSAoMTk4OC0wMS0yOCk6CisjIEFyZ2VudGluYTogZmlyc3QgU3VuZGF5IGluIE9jdG9iZXIgdG8gZmlyc3QgU3VuZGF5IGluIEFwcmlsIHNpbmNlIDE5NzYuCisjIERvdWJsZSBTdW1tZXIgdGltZSBmcm9tIDE5NjkgdG8gMTk3NC4gIFN3aXRjaGVzIGF0IG1pZG5pZ2h0LgorCisjIEZyb20gVS4gUy4gTmF2YWwgT2JzZXJ2YXRvcnkgKDE5ODgtMDEtMTk5KToKKyMgQVJHRU5USU5BICAgICAgICAgICAzIEggQkVISU5EICAgVVRDCisKKyMgRnJvbSBIZXJuYW4gRy4gT3Rlcm8gKDE5OTUtMDYtMjYpOgorIyBJIGFtIHNlbmRpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgQXJnZW50aW5lIHRpbWUgem9uZSB0YWJsZS4uLgorIyBBUiB3YXMgY2hvc2VuIGJlY2F1c2UgdGhleSBhcmUgdGhlIElTTyBsZXR0ZXJzIHRoYXQgcmVwcmVzZW50IEFyZ2VudGluYS4KKworIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKK1J1bGUJQXJnCTE5MzAJb25seQktCURlYwkgMQkwOjAwCTE6MDAJUworUnVsZQlBcmcJMTkzMQlvbmx5CS0JQXByCSAxCTA6MDAJMAktCitSdWxlCUFyZwkxOTMxCW9ubHkJLQlPY3QJMTUJMDowMAkxOjAwCVMKK1J1bGUJQXJnCTE5MzIJMTk0MAktCU1hcgkgMQkwOjAwCTAJLQorUnVsZQlBcmcJMTkzMgkxOTM5CS0JTm92CSAxCTA6MDAJMTowMAlTCitSdWxlCUFyZwkxOTQwCW9ubHkJLQlKdWwJIDEJMDowMAkxOjAwCVMKK1J1bGUJQXJnCTE5NDEJb25seQktCUp1bgkxNQkwOjAwCTAJLQorUnVsZQlBcmcJMTk0MQlvbmx5CS0JT2N0CTE1CTA6MDAJMTowMAlTCitSdWxlCUFyZwkxOTQzCW9ubHkJLQlBdWcJIDEJMDowMAkwCS0KK1J1bGUJQXJnCTE5NDMJb25seQktCU9jdAkxNQkwOjAwCTE6MDAJUworUnVsZQlBcmcJMTk0Nglvbmx5CS0JTWFyCSAxCTA6MDAJMAktCitSdWxlCUFyZwkxOTQ2CW9ubHkJLQlPY3QJIDEJMDowMAkxOjAwCVMKK1J1bGUJQXJnCTE5NjMJb25seQktCU9jdAkgMQkwOjAwCTAJLQorUnVsZQlBcmcJMTk2Mwlvbmx5CS0JRGVjCTE1CTA6MDAJMTowMAlTCitSdWxlCUFyZwkxOTY0CTE5NjYJLQlNYXIJIDEJMDowMAkwCS0KK1J1bGUJQXJnCTE5NjQJMTk2NgktCU9jdAkxNQkwOjAwCTE6MDAJUworUnVsZQlBcmcJMTk2Nwlvbmx5CS0JQXByCSAyCTA6MDAJMAktCitSdWxlCUFyZwkxOTY3CTE5NjgJLQlPY3QJU3VuPj0xCTA6MDAJMTowMAlTCitSdWxlCUFyZwkxOTY4CTE5NjkJLQlBcHIJU3VuPj0xCTA6MDAJMAktCitSdWxlCUFyZwkxOTc0CW9ubHkJLQlKYW4JMjMJMDowMAkxOjAwCVMKK1J1bGUJQXJnCTE5NzQJb25seQktCU1heQkgMQkwOjAwCTAJLQorUnVsZQlBcmcJMTk4OAlvbmx5CS0JRGVjCSAxCTA6MDAJMTowMAlTCisjCisjIEZyb20gSGVybmFuIEcuIE90ZXJvICgxOTk1LTA2LTI2KToKKyMgVGhlc2UgY29ycmVjdGlvbnMgd2VyZSBjb250cmlidXRlZCBieSBJbnRlclNvZnQgQXJnZW50aW5hIFMuQS4sCisjIG9idGFpbmluZyB0aGUgZGF0YSBmcm9tIHRoZToKKyMgVGFsbGVyZXMgZGUgSGlkcm9ncmFmaWEgTmF2YWwgQXJnZW50aW5hCisjIChBcmdlbnRpbmUgTmF2YWwgSHlkcm9ncmFwaHkgSW5zdGl0dXRlKQorUnVsZQlBcmcJMTk4OQkxOTkzCS0JTWFyCVN1bj49MQkwOjAwCTAJLQorUnVsZQlBcmcJMTk4OQkxOTkyCS0JT2N0CVN1bj49MTUJMDowMAkxOjAwCVMKKyMKKyMgRnJvbSBIZXJuYW4gRy4gT3Rlcm8gKDE5OTUtMDYtMjYpOgorIyBGcm9tIHRoaXMgbW9tZW50IG9uLCB0aGUgbGF3IHRoYXQgbWFuZGF0ZWQgdGhlIGRheWxpZ2h0IHNhdmluZworIyB0aW1lIGNvcnJlY3Rpb25zIHdhcyBkZXJvZ2F0ZWQgYW5kIG5vIG1vcmUgbW9kaWZpY2F0aW9ucworIyB0byB0aGUgdGltZSB6b25lcyAoZm9yIGRheWxpZ2h0IHNhdmluZykgYXJlIG5vdyBtYWRlLgorIworIyBGcm9tIFJpdmVzIE1jRG93ICgyMDAwLTAxLTEwKToKKyMgT24gT2N0b2JlciAzLCAxOTk5LCAwOjAwIGxvY2FsLCBBcmdlbnRpbmEgaW1wbGVtZW50ZWQgZGF5bGlnaHQgc2F2aW5ncyB0aW1lLAorIyB3aGljaCBkaWQgbm90IHJlc3VsdCBpbiB0aGUgc3dpdGNoIG9mIGEgdGltZSB6b25lLCBhcyB0aGV5IHN0YXllZCA5IGhvdXJzCisjIGZyb20gdGhlIEludGVybmF0aW9uYWwgRGF0ZSBMaW5lLgorUnVsZQlBcmcJMTk5OQlvbmx5CS0JT2N0CVN1bj49MQkwOjAwCTE6MDAJUworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA3LTEyLTI4KToKKyMgRFNUIHdhcyBzZXQgdG8gZXhwaXJlIG9uIE1hcmNoIDUsIG5vdCBNYXJjaCAzLCBidXQgc2luY2UgaXQgd2FzIGNvbnZlcnRlZAorIyB0byBzdGFuZGFyZCB0aW1lIG9uIE1hcmNoIDMgaXQncyBtb3JlIGNvbnZlbmllbnQgZm9yIHVzIHRvIHByZXRlbmQgdGhhdAorIyBpdCBlbmRlZCBvbiBNYXJjaCAzLgorUnVsZQlBcmcJMjAwMAlvbmx5CS0JTWFyCTMJMDowMAkwCS0KKyMKKyMgRnJvbSBQZXRlciBHcmFkZWxza2kgdmlhIFN0ZWZmZW4gVGhvcnNlbiAoMjAwMC0wMy0wMSk6CisjIFdlIGp1c3QgY2hlY2tlZCB3aXRoIG91ciBTYW8gUGF1bG8gb2ZmaWNlIGFuZCB0aGV5IHNheSB0aGUgZ292ZXJubWVudCBvZgorIyBBcmdlbnRpbmEgZGVjaWRlZCBub3QgdG8gYmVjb21lIG9uZSBvZiB0aGUgY291bnRyaWVzIHRoYXQgZ28gb24gb3Igb2ZmIERTVC4KKyMgU28gQnVlbm9zIEFpcmVzIHNob3VsZCBiZSAtMyBob3VycyBmcm9tIEdNVCBhdCBhbGwgdGltZXMuCisjCisjIEZyb20gRmFiaWFuIEwuIEFyY2UgSm9mcmUgKDIwMDAtMDQtMDQpOgorIyBUaGUgbGF3IHRoYXQgY2xhaW1lZCBEU1QgZm9yIEFyZ2VudGluYSB3YXMgZGVyb2dhdGVkIGJ5IFByZXNpZGVudCBGZXJuYW5kbworIyBkZSBsYSBSdWEgb24gTWFyY2ggMiwgMjAwMCwgYmVjYXVzZSBpdCB3b3VsZCBtYWtlIHBlb3BsZSBzcGVuZCBtb3JlIGVuZXJneQorIyBpbiB0aGUgd2ludGVyIHRpbWUsIHJhdGhlciB0aGFuIGxlc3MuICBUaGUgY2hhbmdlIHRvb2sgZWZmZWN0IG9uIE1hcmNoIDMuCisjCisjIEZyb20gTWFyaWFubyBBYnNhdHogKDIwMDEtMDYtMDYpOgorIyBvbmUgb2YgdGhlIG1ham9yIG5ld3NwYXBlcnMgaGVyZSBpbiBBcmdlbnRpbmEgc2FpZCB0aGF0IHRoZSAxOTk5CisjIFRpbWV6b25lIExhdyAod2hpY2ggbmV2ZXIgd2FzIGVmZmVjdGl2ZWx5IGFwcGxpZWQpIHdpbGwgKHdvdWxkPykgYmUKKyMgaW4gZWZmZWN0Li4uLiBUaGUgYXJ0aWNsZSBpcyBhdAorIyBodHRwOi8vYXIuY2xhcmluLmNvbS9kaWFyaW8vMjAwMS0wNi0wNi9lLTAxNzAxLmh0bQorIyAuLi4gVGhlIExhdyBpdHNlbGYgaXMgIkxleSBObyAyNTE1NSIsIHNhbmN0aW9uZWQgb24gMTk5OS0wOC0yNSwgZW5hY3RlZAorIyAxOTk5LTA5LTE3LCBhbmQgcHVibGlzaGVkIDE5OTktMDktMjEuICBUaGUgb2ZmaWNpYWwgcHVibGljYXRpb24gaXMgYXQ6CisjIGh0dHA6Ly93d3cuYm9sZXRpbi5qdXMuZ292LmFyL0JPTi9QcmltZXJhLzE5OTkvMDktU2VwdGllbWJyZS8yMS9QREYvQk8yMS0wOS05OUxFRy5QREYKKyMgUmVncmV0ZnVsbHksIHlvdSBoYXZlIHRvIHN1YnNjcmliZSAoYW5kIHBheSkgZm9yIHRoZSBvbi1saW5lIHZlcnNpb24uLi4uCisjCisjICgyMDAxLTA2LTEyKToKKyMgdGhlIHRpbWV6b25lIGZvciBBcmdlbnRpbmEgd2lsbCBub3QgY2hhbmdlIG5leHQgU3VuZGF5LgorIyBBcHBhcmVudGx5IGl0IHdpbGwgZG8gc28gb24gU3VuZGF5IDI0dGguLi4uCisjIGh0dHA6Ly9hci5jbGFyaW4uY29tL2RpYXJpby8yMDAxLTA2LTEyL3MtMDM1MDEuaHRtCisjCisjICgyMDAxLTA2LTI1KToKKyMgTGFzdCBGcmlkYXkgKHllcywgdGhlIGxhc3Qgd29ya2luZyBkYXkgYmVmb3JlIHRoZSBkYXRlIG9mIHRoZSBjaGFuZ2UpLCB0aGUKKyMgU2VuYXRlIGFubnVsbGVkIHRoZSAxOTk5IGxhdyB0aGF0IGludHJvZHVjZWQgdGhlIGNoYW5nZXMgbGF0ZXIgcG9zdHBvbmVkLgorIyBodHRwOi8vd3d3LmNsYXJpbi5jb20uYXIvZGlhcmlvLzIwMDEtMDYtMjIvcy0wMzYwMS5odG0KKyMgSXQgcmVtYWlucyB0aGUgdm90ZSBvZiB0aGUgRGVwdXRpZXMuLi4sIGJ1dCBpdCB3aWxsIGJlIHRoZSBzYW1lLi4uLgorIyBUaGlzIGtpbmQgb2YgdGhpbmdzIGhhZCBhbHdheXMgYmVlbiBkb25lIHRoaXMgd2F5IGluIEFyZ2VudGluYS4KKyMgV2UgYXJlIHN0aWxsIC0wMzowMCBhbGwgeWVhciByb3VuZCBpbiBhbGwgb2YgdGhlIGNvdW50cnkuCisjCisjIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA3LTEyLTIxKToKKyMgQSB1c2VyIChMZW9uYXJkbyBDaGFpbSkgcmVwb3J0ZWQgdGhhdCBBcmdlbnRpbmEgd2lsbCBhZG9wdCBEU1QuLi4uCisjIGFsbCBvZiB0aGUgY291bnRyeSAoYWxsIFpvbmUtZW50cmllcykgYXJlIGFmZmVjdGVkLiAgTmV3cyByZXBvcnRzIGxpa2UKKyMgaHR0cDovL3d3dy5sYW5hY2lvbi5jb20uYXIvb3Bpbmlvbi9ub3RhLmFzcD9ub3RhX2lkPTk3MzAzNyBpbmRpY2F0ZQorIyB0aGF0IEFyZ2VudGluYSB3aWxsIHVzZSBEU1QgbmV4dCB5ZWFyIGFzIHdlbGwsIGZyb20gT2N0b2JlciB0bworIyBNYXJjaCwgYWx0aG91Z2ggZXhhY3QgcnVsZXMgYXJlIG5vdCBnaXZlbi4KKyMKKyMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDctMTItMjYpCisjIFRoZSBsYXN0IGh1cmRsZSBvZiBBcmdlbnRpbmEgRFNUIGlzIG92ZXIsIHRoZSBwcm9wb3NhbCB3YXMgYXBwcm92ZWQgaW4KKyMgdGhlIGxvd2VyIGNoYW1iZXIgdG9vIChEZXB1dGFkb3MpIHdpdGggYSB2b3RlIDE5MiBmb3IgYW5kIDIgYWdhaW5zdC4KKyMgQnkgdGhlIHdheSB0aGFua3MgdG8gTWFyaWFubyBBYnNhdHogYW5kIERhbmllbCBNYXJpbyBWZWdhIGZvciB0aGUgbGluayB0bworIyB0aGUgb3JpZ2luYWwgc2Nhbm5lZCBwcm9wb3NhbCwgd2hlcmUgdGhlIGRhdGVzIGFuZCB0aGUgemVybyBob3VycyBhcmUKKyMgY2xlYXIgYW5kIHVuYW1iaWd1b3VzLi4uVGhpcyBpcyB0aGUgYXJ0aWNsZSBhYm91dCBmaW5hbCBhcHByb3ZhbDoKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5sYW5hY2lvbi5jb20uYXIvcG9saXRpY2Evbm90YS5hc3A/bm90YV9pZD05NzM5OTYiPgorIyBodHRwOi8vd3d3LmxhbmFjaW9uLmNvbS5hci9wb2xpdGljYS9ub3RhLmFzcD9ub3RhX2lkPTk3Mzk5NgorIyA8L2E+CisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDctMTItMjIpOgorIyBGb3IgZGF0ZXMgYWZ0ZXIgbWlkLTIwMDgsIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXJlIG15IGd1ZXNzZXMgYW5kCisjIGFyZSBxdWl0ZSBwb3NzaWJseSB3cm9uZywgYnV0IGFyZSBtb3JlIGxpa2VseSB0aGFuIG5vIERTVCBhdCBhbGwuCisKKyMgRnJvbSBBbGV4YW5kZXIgS3JpdmVueXNoZXYgKDIwMDgtMDktMDUpOgorIyBBcyBwZXIgbWVzc2FnZSBmcm9tIENhcmxvcyBBbGJlcnRvIEZvbnNlY2EgQXJhdXogKE5pY2FyYWd1YSksCisjIEFyZ2VudGluYSB3aWxsIHN0YXJ0IERTVCBvbiBTdW5kYXkgT2N0b2JlciAxOSwgMjAwOC4KKyMKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLmNvbS9kc3RfbmV3cy9kc3RfbmV3c19hcmdlbnRpbmEwMy5odG1sIj4KKyMgaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLmNvbS9kc3RfbmV3cy9kc3RfbmV3c19hcmdlbnRpbmEwMy5odG1sCisjIDwvYT4KKyMgT1IKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5pbXB1bHNvYmFpcmVzLmNvbS5hci9ub3RhLnBocD9pZD01NzgzMiAoaW4gc3BhbmlzaCkiPgorIyBodHRwOi8vd3d3LmltcHVsc29iYWlyZXMuY29tLmFyL25vdGEucGhwP2lkPTU3ODMyIChpbiBzcGFuaXNoKQorIyA8L2E+CisKKyMgRnJvbSBSb2RyaWdvIFNldmVybyAoMjAwOC0xMC0wNik6CisjIEhlcmUgaXMgc29tZSBpbmZvIGF2YWlsYWJsZSBhdCBhIEdlbnRvbyBidWcgcmVsYXRlZCB0byBUWiBvbiBBcmdlbnRpbmEncyBEU1Q6CisjIC4uLgorIyAtLS0tLS0tIENvbW1lbnQgIzEgZnJvbSBbam1kb2NpbGVdICAyMDA4LTEwLTA2IDE2OjI4IDAwMDAgLS0tLS0tLQorIyBIaSwgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGltZXpvbmUtZGF0YS0yMDA4ZSBhbmQgbWF5YmUgd2l0aAorIyB0aW1lem9uZS1kYXRhLTIwMDhmCisjIEFyZ2VudGluaWFuIGxhdyBbTnVtYmVyXSAyNS4xNTUgaXMgbm8gbG9uZ2VyIHZhbGlkLgorIyA8YSBocmVmPSJodHRwOi8vd3d3LmluZm9sZWcuZ292LmFyL2luZm9sZWdJbnRlcm5ldC9hbmV4b3MvNjAwMDAtNjQ5OTkvNjAwMzYvbm9ybWEuaHRtIj4KKyMgaHR0cDovL3d3dy5pbmZvbGVnLmdvdi5hci9pbmZvbGVnSW50ZXJuZXQvYW5leG9zLzYwMDAwLTY0OTk5LzYwMDM2L25vcm1hLmh0bQorIyA8L2E+CisjIFRoZSBuZXcgb25lIGlzIGxhdyBbTnVtYmVyXSAyNi4zNTAKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5pbmZvbGVnLmdvdi5hci9pbmZvbGVnSW50ZXJuZXQvYW5leG9zLzEzNTAwMC0xMzk5OTkvMTM2MTkxL25vcm1hLmh0bSI+CisjIGh0dHA6Ly93d3cuaW5mb2xlZy5nb3YuYXIvaW5mb2xlZ0ludGVybmV0L2FuZXhvcy8xMzUwMDAtMTM5OTk5LzEzNjE5MS9ub3JtYS5odG0KKyMgPC9hPgorIyBTbyB0aGVyZSBpcyBubyBzdW1tZXIgdGltZSBpbiBBcmdlbnRpbmEgZm9yIG5vdy4KKworIyBGcm9tIE1hcmlhbm8gQWJzYXR6ICgyMDA4LTEwLTIwKToKKyMgRGVjcmVlIDE2OTMvMjAwOCBhcHBsaWVzIExhdyAyNi4zNTAgZm9yIHRoZSBzdW1tZXIgMjAwOC8yMDA5IGVzdGFibGlzaGluZyBEU1QgaW4gQXJnZW50aW5hCisjIEZyb20gMjAwOC0xMC0xOSB1bnRpbCAyMDA5LTAzLTE1CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9sZXRpbm9maWNpYWwuZ292LmFyL0JvcmEuUG9ydGFsL0N1c3RvbUNvbnRyb2xzL1BkZkNvbnRlbnQuYXNweD9mcD0xNjEwMjAwOCZwaT0zJnBmPTQmcz0wJnNlYz0wMSI+CisjIGh0dHA6Ly93d3cuYm9sZXRpbm9maWNpYWwuZ292LmFyL0JvcmEuUG9ydGFsL0N1c3RvbUNvbnRyb2xzL1BkZkNvbnRlbnQuYXNweD9mcD0xNjEwMjAwOCZwaT0zJnBmPTQmcz0wJnNlYz0wMQorIyA8L2E+CisjCisjIERlY3JlZSAxNzA1LzIwMDggZXhjZXB0aW5nIDEyIFByb3ZpbmNlcyBmcm9tIGFwcGx5aW5nIERTVCBpbiB0aGUgc3VtbWVyIDIwMDgvMjAwOToKKyMgQ2F0YW1hcmNhLCBMYSBSaW9qYSwgTWVuZG96YSwgU2FsdGEsIFNhbiBKdWFuLCBTYW4gTHVpcywgTGEgUGFtcGEsIE5ldXF1ZW4sIFJpbyBOZWdybywgQ2h1YnV0LCBTYW50YSBDcnV6CisjIGFuZCBUaWVycmEgZGVsIEZ1ZWdvCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9sZXRpbm9maWNpYWwuZ292LmFyL0JvcmEuUG9ydGFsL0N1c3RvbUNvbnRyb2xzL1BkZkNvbnRlbnQuYXNweD9mcD0xNzEwMjAwOCZwaT0xJnBmPTEmcz0wJnNlYz0wMSI+CisjIGh0dHA6Ly93d3cuYm9sZXRpbm9maWNpYWwuZ292LmFyL0JvcmEuUG9ydGFsL0N1c3RvbUNvbnRyb2xzL1BkZkNvbnRlbnQuYXNweD9mcD0xNzEwMjAwOCZwaT0xJnBmPTEmcz0wJnNlYz0wMQorIyA8L2E+CisjCisjIFByZXNzIHJlbGVhc2UgMjM1IGRhdGVkIFNhdHVyZGF5IE9jdG9iZXIgMTh0aCwgZnJvbSB0aGUgR292ZXJubWVudCBvZiB0aGUgUHJvdmluY2Ugb2YgSnVqdXkgc2F5aW5nCisjIGl0IHdpbGwgbm90IGFwcGx5IERTVCBlaXRoZXIgKGV2ZW4gd2hlbiBpdCB3YXMgbm90IGluY2x1ZGVkIGluIERlY3JlZSAxNzA1LzIwMDgpCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuanVqdXkuZ292LmFyL2luZGV4Mi9wYXJ0ZXNfcHJlbnNhLzE4XzEwXzA4LzIzNS0xODEwMDguZG9jIj4KKyMgaHR0cDovL3d3dy5qdWp1eS5nb3YuYXIvaW5kZXgyL3BhcnRlc19wcmVuc2EvMThfMTBfMDgvMjM1LTE4MTAwOC5kb2MKKyMgPC9hPgorCitSdWxlCUFyZwkyMDA3CW9ubHkJLQlEZWMJMzAJMDowMAkxOjAwCVMKK1J1bGUJQXJnCTIwMDgJbWF4CS0JTWFyCVN1bj49MTUJMDowMAkwCS0KK1J1bGUJQXJnCTIwMDgJbWF4CS0JT2N0CVN1bj49MTUJMDowMAkxOjAwCVMKKyAKKyMgRnJvbSBNYXJpYW5vIEFic2F0eiAoMjAwNC0wNS0yMSk6CisjIFRvZGF5IGl0IHdhcyBvZmZpY2lhbGx5IHB1Ymxpc2hlZCB0aGF0IHRoZSBQcm92aW5jZSBvZiBNZW5kb3phIGlzIGNoYW5naW5nCisjIGl0cyB0aW1lem9uZSB0aGlzIHdpbnRlci4uLiBzdGFydGluZyB0b21vcnJvdyBuaWdodC4uLi4KKyMgaHR0cDovL3d3dy5nb2Jlcm5hYy5tZW5kb3phLmdvdi5hci9ib2xldGluL3BkZi8yMDA0MDUyMS0yNzE1OC1ub3JtYXMucGRmCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDQtMDUtMjQpOgorIyBJdCdzIExhdyBOby4gNywyMTAuICBUaGlzIGNoYW5nZSBpcyBkdWUgdG8gYSBwdWJsaWMgcG93ZXIgZW1lcmdlbmN5LCBzbyBmb3IKKyMgbm93IHdlJ2xsIGFzc3VtZSBpdCdzIGZvciB0aGlzIHllYXIgb25seS4KKyMKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuc3BpY2FzYy5uZXQvaG9ydmVyYS5odG1sIj4KKyMgSG9yYSBkZSB2ZXJhbm8gcGFyYSBsYSBSZXB1YmxpY2EgQXJnZW50aW5hICgyMDAzLTA2LTA4KQorIyA8L2E+IHNheXMgdGhhdCBzdGFuZGFyZCB0aW1lIGluIEFyZ2VudGluYSBmcm9tIDE4OTQtMTAtMzEKKyMgdG8gMTkyMC0wNS0wMSB3YXMgLTQ6MTY6NDguMjUuICBHbyB3aXRoIHRoaXMgbW9yZS1wcmVjaXNlIHZhbHVlCisjIG92ZXIgU2hhbmtzICYgUG90dGVuZ2VyLgorIworIyBGcm9tIE1hcmlhbm8gQWJzYXR6ICgyMDA0LTA2LTA1KToKKyMgVGhlc2UgbWVkaWEgYXJ0aWNsZXMgZnJvbSBhIG1ham9yIG5ld3NwYXBlciBtb3N0bHkgY292ZXIgdGhlIGN1cnJlbnQgc3RhdGU6CisjIGh0dHA6Ly93d3cubGFuYWNpb24uY29tLmFyLzA0LzA1LzI3L2RlXzYwNDgyNS5hc3AKKyMgaHR0cDovL3d3dy5sYW5hY2lvbi5jb20uYXIvMDQvMDUvMjgvZGVfNjA1MjAzLmFzcAorIworIyBUaGUgZm9sbG93aW5nIGVpZ2h0ICg4KSBwcm92aW5jZXMgcHVsbGVkIGNsb2NrcyBiYWNrIHRvIFVUQy0wNDowMCBhdAorIyBtaWRuaWdodCBNb25kYXkgTWF5IDMxc3QuICh0aGF0IGlzLCB0aGUgbmlnaHQgYmV0d2VlbiAwNS8zMSBhbmQgMDYvMDEpLgorIyBBcHBhcmVudGx5LCBhbGwgbmluZSBwcm92aW5jZXMgd291bGQgZ28gYmFjayB0byBVVEMtMDM6MDAgYXQgdGhlIHNhbWUKKyMgdGltZSBpbiBPY3RvYmVyIDE3dGguCisjCisjIENhdGFtYXJjYSwgQ2h1YnV0LCBMYSBSaW9qYSwgU2FuIEp1YW4sIFNhbiBMdWlzLCBTYW50YSBDcnV6LAorIyBUaWVycmEgZGVsIEZ1ZWdvLCBUdWN1bWFuLgorIworIyBGcm9tIE1hcmlhbm8gQWJzYXR6ICgyMDA0LTA2LTE0KToKKyMgLi4uIHRoaXMgd2Vla2VuZCwgdGhlIFByb3ZpbmNlIG9mIFR1Y3VtYW4gZGVjaWRlZCBpdCdkIGdvIGJhY2sgdG8gVVRDLTAzOjAwCisjIHllc3RlcmRheSBtaWRuaWdodCAodGhhdCBpcywgYXQgMjQ6MDAgU2F0dXJkYXkgMTJ0aCksIHNpbmNlIHRoZSBwZW9wbGUncworIyBhbm5veWFuY2Ugd2l0aCB0aGUgY2hhbmdlIGlzIG11Y2ggaGlnaGVyIHRoYW4gdGhlIHBvd2VyIHNhdmluZ3Mgb2J0YWluZWQuLi4uCisjCisjIEZyb20gR3dpbGxpbSBMYXcgKDIwMDQtMDYtMTQpOgorIyBodHRwOi8vd3d3LmxhbmFjaW9uLmNvbS5hci8wNC8wNi8xMC9kZV82MDkwNzguYXNwIC4uLgorIyAgICAgIlRoZSB0aW1lIGNoYW5nZSBpbiBUaWVycmEgZGVsIEZ1ZWdvIHdhcyBhIGNvbmZsaWN0ZWQgZGVjaXNpb24gZnJvbQorIyAgIHRoZSBzdGFydC4gIFRoZSBnb3Zlcm5tZW50IGhhZCBkZWNyZWVkIHRoYXQgdGhlIG1lYXN1cmUgd291bGQgdGFrZQorIyAgIGVmZmVjdCBvbiBKdW5lIDEsIGJ1dCBhIG5vcm1hdGl2ZSBlcnJvciBmb3JjZWQgdGhlIG5ldyB0aW1lIHRvIGJlZ2luCisjICAgdGhyZWUgZGF5cyBlYXJsaWVyLCBmcm9tIGEgU2F0dXJkYXkgdG8gYSBTdW5kYXkuLi4uCisjIE91ciB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHRoZSBjaGFuZ2Ugd2FzIG9yaWdpbmFsbHkgc2NoZWR1bGVkIHRvIHRha2UgcGxhY2UKKyMgb24gSnVuZSAxIGF0IDAwOjAwIGluIENodWJ1dCwgU2FudGEgQ3J1eiwgVGllcnJhIGRlbCBGdWVnbyAoYW5kIHNvbWUgb3RoZXIKKyMgcHJvdmluY2VzKS4gIFN1bmRheSB3YXMgTWF5IDMwLCBvbmx5IHR3byBkYXlzIGVhcmxpZXIuICBTbyB0aGUgYXJ0aWNsZQorIyBjb250YWlucyBhIGNvbnRyYWRpY3Rpb24uICBJIHdvdWxkIGdpdmUgbW9yZSBjcmVkZW5jZSB0byB0aGUgU2F0dXJkYXkvU3VuZGF5CisjIGRhdGUgdGhhbiB0aGUgInRocmVlIGRheXMgZWFybGllciIgcGhyYXNlLCBhbmQgY29uY2x1ZGUgdGhhdCBUaWVycmEgZGVsCisjIEZ1ZWdvIHNldCBpdHMgY2xvY2tzIGJhY2sgYXQgMjAwNC0wNS0zMCAwMDowMC4KKyMKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDQtMTAtMDUpOgorIyBUaGUgcHJldmlvdXMgbGF3IDcyMTAgd2hpY2ggY2hhbmdlZCB0aGUgcHJvdmluY2Ugb2YgTWVuZG96YSdzIHRpbWUgem9uZQorIyBiYWNrIGluIE1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2xpZ2h0bHkgaW4gYSBuZXcgbGF3IDcyNzcsIHdoaWNoIHNldCB0aGUKKyMgbmV3IGVuZCBkYXRlIHRvIDIwMDQtMDktMjYgKG9yaWdpbmFsIGRhdGUgd2FzIDIwMDQtMTAtMTcpLgorIyBodHRwOi8vd3d3LmdvYmVybmFjLm1lbmRvemEuZ292LmFyL2JvbGV0aW4vcGRmLzIwMDQwOTI0LTI3MjQ0LW5vcm1hcy5wZGYKKyMKKyMgRnJvbSBNYXJpYW5vIEFic2F0eiAoMjAwNC0xMC0wNSk6CisjIFNhbiBKdWFuIGNoYW5nZWQgZnJvbSBVVEMtMDM6MDAgdG8gVVRDLTA0OjAwIGF0IG1pZG5pZ2h0IGJldHdlZW4KKyMgU3VuZGF5LCBNYXkgMzB0aCBhbmQgTW9uZGF5LCBNYXkgMzFzdC4gIEl0IGNoYW5nZWQgYmFjayB0byBVVEMtMDM6MDAKKyMgYXQgbWlkbmlnaHQgYmV0d2VlbiBTYXR1cmRheSwgSnVseSAyNHRoIGFuZCBTdW5kYXksIEp1bHkgMjV0aC4uLi4KKyMgaHR0cDovL3d3dy5zYW5qdWFuLmdvdi5hci9wcmVuc2EvYXJjaGl2by8wMDAzMjkuaHRtbAorIyBodHRwOi8vd3d3LnNhbmp1YW4uZ292LmFyL3ByZW5zYS9hcmNoaXZvLzAwMDQyNi5odG1sCisjIGh0dHA6Ly93d3cuc2FuanVhbi5nb3YuYXIvcHJlbnNhL2FyY2hpdm8vMDAwNDQxLmh0bWwKKworIyBGcm9tIEFsZXggS3JpdmVueXNoZXYgKDIwMDgtMDEtMTcpOgorIyBIZXJlIGFyZSBhcnRpY2xlcyB0aGF0IEFyZ2VudGluYSBQcm92aW5jZSBTYW4gTHVpcyBpcyBwbGFubmluZyB0byBlbmQgRFNUCisjIGFzIGVhcmxpZXIgYXMgdXBjb21pbmcgTW9uZGF5IEphbnVhcnkgMjEsIDIwMDggb3IgRmVicnVhcnkgMjAwODoKKyMKKyMgUHJvdmluY2lhIGFyZ2VudGluYSByZXRyYXNhIHJlbG9qIHkgbWFyY2EgZGlmZXJlbmNpYSBjb24gcmVzdG8gZGVsIHBhaXMKKyMgKEFyZ2VudGluZSBQcm92aW5jZSBkZWxheWVkIGNsb2NrIGFuZCBtYXJrIGRpZmZlcmVuY2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUKKyMgY291bnRyeSkKKyMgPGEgaHJlZj0iaHR0cDovL2NsLmludmVydGlhLmNvbS9ub3RpY2lhcy9ub3RpY2lhLmFzcHg/aWROb3RpY2lhPTIwMDgwMTE3MTg0OV9FRkVfRVQ0MzczJmlkdGVsIj4KKyMgaHR0cDovL2NsLmludmVydGlhLmNvbS9ub3RpY2lhcy9ub3RpY2lhLmFzcHg/aWROb3RpY2lhPTIwMDgwMTE3MTg0OV9FRkVfRVQ0MzczJmlkdGVsCisjIDwvYT4KKyMKKyMgRXMgaW5taW5lbnRlIHF1ZSBlbiBTYW4gTHVpcyBhdHJhc2VuIHVuYSBob3JhIGxvcyByZWxvamVzCisjIChJdCBpcyBpbW1pbmVudCBpbiBTYW4gTHVpcyBjbG9ja3Mgb25lIGhvdXIgZGVsYXkpCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cubGFnYWNldGEuY29tLmFyL3Zlcm5vdGFlLmFzcD9pZF9ub3RhPTI1MzQxNCI+CisjIGh0dHA6Ly93d3cubGFnYWNldGEuY29tLmFyL3Zlcm5vdGFlLmFzcD9pZF9ub3RhPTI1MzQxNAorIyA8L2E+CisjCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5uZXQvZHN0X25ld3MvZHN0X25ld3NfYXJnZW50aW5hMDIuaHRtbCI+CisjIGh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5uZXQvZHN0X25ld3MvZHN0X25ld3NfYXJnZW50aW5hMDIuaHRtbAorIyA8L2E+CisKKyMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDgtMDEtMTgpOgorIyBUaGUgcGFnZSBvZiB0aGUgU2FuIEx1aXMgcHJvdmluY2lhbCBnb3Zlcm5tZW50CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2FubHVpcy5nb3YuYXIvbm90YXMuYXNwP2lkQ2FuYWw9MCZpZD0yMjgxMiI+CisjIGh0dHA6Ly93d3cuc2FubHVpcy5nb3YuYXIvbm90YXMuYXNwP2lkQ2FuYWw9MCZpZD0yMjgxMgorIyA8L2E+CisjIGNvbmZpcm1zIHdoYXQgQWxleCBLcml2ZW55c2hldiBoYXMgZWFybGllciBzZW50IHRvIHRoZSB0egorIyBlbWFpbGluZyBsaXN0IGFib3V0IHRoYXQgU2FuIEx1aXMgcGxhbnMgdG8gcmV0dXJuIHRvIHN0YW5kYXJkCisjIHRpbWUgbXVjaCBlYXJsaWVyIHRoYW4gdGhlIHJlc3Qgb2YgdGhlIGNvdW50cnkuIEl0IGFsc28KKyMgY29uZmlybXMgdGhhdCB1cG9uIHJlcXVlc3QgdGhlIHByb3ZpbmNlcyBTYW4gSnVhbiBhbmQgTWVuZG96YSAKKyMgcmVmdXNlZCB0byBmb2xsb3cgU2FuIEx1aXMgaW4gdGhpcyBjaGFuZ2UuIAorIyAKKyMgVGhlIGNoYW5nZSBpcyBzdXBwb3NlZCB0byB0YWtlIHBsYWNlIE1vbmRheSB0aGUgMjEuc3QgYXQgMDowMAorIyBob3Vycy4gQXMgZmFyIGFzIEkgdW5kZXJzdGFuZCBpdCBpZiB0aGlzIGdvZXMgYWhlYWQsIHdlIG5lZWQKKyMgYSBuZXcgdGltZXpvbmUgZm9yIFNhbiBMdWlzIChhbHRob3VnaCB0aGVyZSBhcmUgYWxzbyBkb2N1bWVudGVkCisjIGluZGVwZW5kZW50IGNoYW5nZXMgaW4gdGhlIHNvdXRoYW1lcmljYSBmaWxlIG9mIFNhbiBMdWlzIGluCisjIDE5OTAgYW5kIDE5OTEgd2hpY2ggaGFzIG5vdCBiZWVuIGNvbmZpcm1lZCkuCisKKyMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDgtMDEtMjUpOgorIyBVbmZvcnR1bmF0ZWx5IHRoZSBiZWxvdyBwYWdlIGhhcyBiZWNvbWUgZGVmdW5jdCwgYWJvdXQgdGhlIFNhbiBMdWlzCisjIHRpbWUgY2hhbmdlLiBQZXJoYXBzIGJlY2F1c2UgaXQgbm93IGlzIHBhcnQgb2YgYSBncm91cCBvZiBwYWdlcyAiTW9zdAorIyBpbXBvcnRhbnQgcGFnZXMgb2YgMjAwOC4iCisjCisjIFlvdSBjYW4gdXNlCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2FubHVpcy5nb3YuYXIvbm90YXMuYXNwP2lkQ2FuYWw9ODE0MSZpZD0yMjgzNCI+CisjIGh0dHA6Ly93d3cuc2FubHVpcy5nb3YuYXIvbm90YXMuYXNwP2lkQ2FuYWw9ODE0MSZpZD0yMjgzNAorIyA8L2E+CisjIGluc3RlYWQgaXQgc2VlbXMuIE9yIHVzZSAiQnVzY2Fkb3IiIGZyb20gdGhlIG1haW4gcGFnZSBvZiB0aGUgU2FuIEx1aXMKKyMgZ292ZXJubWVudCwgYW5kIGZpbGwgaW4gImh1c28iIGFuZCBjbGljayBPSywgYW5kIHlvdSB3aWxsIGdldCAzIHBhZ2VzCisjIGZyb20gd2hpY2ggdGhlIGZpcnN0IG9uZSBpcyBpZGVudGljYWwgdG8gdGhlIGFib3ZlLgorCisjIEZyb20gTWFyaWFubyBBYnNhdHogKDIwMDgtMDEtMjgpOgorIyBJIGNhbiBjb25maXJtIHRoYXQgdGhlIFByb3ZpbmNlIG9mIFNhbiBMdWlzIChhbmQgc28gZmFyIG9ubHkgdGhhdAorIyBwcm92aW5jZSkgZGVjaWRlZCB0byBnbyBiYWNrIHRvIFVUQy0zIGVmZmVjdGl2ZSBtaWRuaWdodCBKYW4gMjB0aCAyMDA4CisjICh0aGF0IGlzLCBNb25kYXkgMjFzdCBhdCAwOjAwIGlzIHRoZSB0aW1lIHRoZSBjbG9ja3Mgd2VyZSBkZWxheWVkIGJhY2sKKyMgMSBob3VyKSwgYW5kIHRoZXkgaW50ZW5kIHRvIGtlZXAgVVRDLTMgYXMgdGhlaXIgdGltZXpvbmUgYWxsIHllYXIgcm91bmQKKyMgKHRoYXQgaXMsIHVubGVzcyB0aGV5IGNoYW5nZSB0aGVpciBtaW5kIGFueSBtaW51dGUgbm93KS4KKyMKKyMgU28gd2UnbGwgaGF2ZSB0byBhZGQgeWV0IGFub3RoZXIgY2l0eSB0byAnc291dGhhbWVyaWNhJyAoSSB0aGluayBTYW4KKyMgTHVpcyBjaXR5IGlzIHRoZSBtb3MgcG9wdWxhdGVkIGNpdHkgaW4gdGhlIFByb3ZpbmNlLCBzbyBpdCdkIGJlCisjIEFtZXJpY2EvQXJnZW50aW5hL1Nhbl9MdWlzLi4uIG9mIGNvdXJzZSBJIGNhbid0IHJlbWVtYmVyIGlmIFNhbiBMdWlzJ3MKKyMgaGlzdG9yeSBvZiBwYXJ0aWN1bGFyIGNoYW5nZXMgZ29lcyBhbG9uZyB3aXRoIE1lbmRvemEgb3IgU2FuIEp1YW4gOi0oCisjIChJIG9ubHkgcmVtZW1iZXIgbm90IGJlaW5nIGFibGUgdG8gY29sbGVjdCBoYXJkIGZhY3RzIGFib3V0IFNhbiBMdWlzCisjIGJhY2sgaW4gMjAwNCwgd2hlbiB0aGVzZSBwcm92aW5jZXMgY2hhbmdlZCB0byBVVEMtNCBmb3IgYSBmZXcgZGF5cywgSQorIyBtYWlsZWQgdGhlbSBwZXJzb25hbGx5IGFuZCBuZXZlciBnb3QgYW4gYW5zd2VyKS4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA4LTA2LTMwKToKKyMgVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGRhdGEgYXJlIGZyb20gU2hhbmtzICYgUG90dGVuZ2VyIHRocm91Z2ggMTk5MiwKKyMgZnJvbSB0aGUgSUFUQSBvdGhlcndpc2UuICBBcyBub3RlZCBiZWxvdywgU2hhbmtzICYgUG90dGVuZ2VyIHNheSB0aGF0CisjIEFtZXJpY2EvQ29yZG9iYSBzcGxpdCBpbnRvIDYgc3VicmVnaW9ucyBkdXJpbmcgMTk5MS8xOTkyLCBvbmUgb2Ygd2hpY2gKKyMgd2FzIEFtZXJpY2EvU2FuX0x1aXMsIGJ1dCB3ZSBoYXZlbid0IHZlcmlmaWVkIHRoaXMgeWV0IHNvIGZvciBub3cgd2UnbGwKKyMga2VlcCBBbWVyaWNhL0NvcmRvYmEgYSBzaW5nbGUgcmVnaW9uIHJhdGhlciB0aGFuIHNwbGl0dGluZyBpdCBpbnRvIHRoZQorIyBvdGhlciA1IHN1YnJlZ2lvbnMuCisKKyMgRnJvbSBNYXJpYW5vIEFic2F0eiAoMjAwOS0wMy0xMyk6CisjIFllc3RlcmRheSAod2l0aCBvdXIgdXN1YWwgMi1kYXkgbm90aWNlKSB0aGUgUHJvdmluY2Ugb2YgU2FuIEx1aXMKKyMgZGVjaWRlZCB0aGF0IG5leHQgU3VuZGF5IGluc3RlYWQgb2YgInN0YXlpbmciIEB1dGMtMDM6MDAgdGhleSB3aWxsIGdvCisjIHRvIHV0Yy0wNDowMCB1bnRpbCB0aGUgc2Vjb25kIFNhdHVyZGF5IGluIE9jdG9iZXIuLi4KKyMKKyMgVGhlIHByZXNzIHJlbGVhc2UgaXMgYXQKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5zYW5sdWlzLmdvdi5hci9TTC9QYWdpbmFzL05vdGljaWFEZXRhbGxlLmFzcD9UZW1hSWQ9MSZJbmZvUHJlbnNhSWQ9MzEwMiI+CisjIGh0dHA6Ly93d3cuc2FubHVpcy5nb3YuYXIvU0wvUGFnaW5hcy9Ob3RpY2lhRGV0YWxsZS5hc3A/VGVtYUlkPTEmSW5mb1ByZW5zYUlkPTMxMDIKKyMgPC9hPgorIyAoSSBjb3VsZG4ndCBmaW5kIHRoZSBkZWNyZWUsIGJ1dAorIyA8YSBocmVmPSJodHRwOi8vd3d3LnNhbmx1aXMuZ292LmFyIj4KKyMgd3d3LnNhbmx1aXMuZ292LmFyCisjIDxhLz4KKyMgaXMgdGhlIG9mZmljaWFsIHBhZ2UgZm9yIHRoZSBQcm92aW5jZSBHb3Zlcm5tZW50KS4KKyMKKyMgVGhlcmUncyBhbHNvIGEgbm90ZSBpbiBvbmx5IG9uZSBvZiB0aGUgbWFqb3IgbmF0aW9uYWwgcGFwZXJzIChMYSBOYWNp824pIGF0CisjIDxhIGhyZWY9Imh0dHA6Ly93d3cubGFuYWNpb24uY29tLmFyL25vdGEuYXNwP25vdGFfaWQ9MTEwNzkxMiI+CisjIGh0dHA6Ly93d3cubGFuYWNpb24uY29tLmFyL25vdGEuYXNwP25vdGFfaWQ9MTEwNzkxMgorIyA8L2E+CisjIAorIyBUaGUgcHJlc3MgcmVsZWFzZSBzYXlzOgorIyAgKC4uLikgYW51bmNp8yBxdWUgZWwgcHLzeGltbyBkb21pbmdvIGEgbGFzIDAwOjAwIGxvcyBwdW50YW5vcyBkZWJlcuFuCisjIGF0cmFzYXIgdW5hIGhvcmEgc3VzIHJlbG9qZXMuCisjCisjIEEgcGFydGlyIGRlIGVudG9uY2VzLCBTYW4gTHVpcyBlc3RhYmxlY2Vy4SBlbCBodXNvIGhvcmFyaW8gcHJvcGlvIGRlCisjIGxhIFByb3ZpbmNpYS4gRGUgZXN0YSBtYW5lcmEsIGR1cmFudGUgZWwgcGVyaW9kbyBkZWwgY2FsZW5kYXJpbyBhbnVhbAorIyAyMDA5LCBlbCBjYW1iaW8gaG9yYXJpbyBxdWVkYXLhIGNvbXByZW5kaWRvIGVudHJlIGxhcyAwMDowMCBkZWwgdGVyY2VyCisjIGRvbWluZ28gZGUgbWFyem8geSBsYXMgMjQ6MDAgZGVsIHNlZ3VuZG8gc+FiYWRvIGRlIG9jdHVicmUuCisjIFF1aWNrJmRpcnR5IHRyYW5zbGF0aW9uCisjICguLi4pIGFubm91bmNlZCB0aGF0IG5leHQgU3VuZGF5LCBhdCAwMDowMCwgUHVudGFub3MgKHRoZSBTYW4gTHVpcworIyBpbmhhYml0YW50cykgd2lsbCBoYXZlIHRvIHR1cm4gYmFjayBvbmUgaG91ciB0aGVpciBjbG9ja3MKKyMKKyMgU2luY2UgdGhlbiwgU2FuIEx1aXMgd2lsbCBlc3RhYmxpc2ggaXRzIG93biBQcm92aW5jZSB0aW1lem9uZS4gVGh1cywKKyMgZHVyaW5nIDIwMDksIHRoaXMgdGltZXpvbmUgY2hhbmdlIHdpbGwgcnVuIGZyb20gMDA6MDAgdGhlIHRoaXJkIFN1bmRheQorIyBpbiBNYXJjaCB1bnRpbCAyNDowMCBvZiB0aGUgc2Vjb25kIFNhdHVyZGF5IGluIE9jdG9iZXIuCisKKyMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDIwMDktMDMtMTYpOgorIyBUaGUgdW5vZmZpY2lhbCBjbGFpbSBhdAorIyA8YSBocmVmPSJodHRwOi8vd3d3LnRpbWVhbmRkYXRlLmNvbS9uZXdzL3RpbWUvc2FuLWx1aXMtbmV3LXRpbWUtem9uZS5odG1sIj4KKyMgaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vbmV3cy90aW1lL3Nhbi1sdWlzLW5ldy10aW1lLXpvbmUuaHRtbAorIyA8L2E+CisjIGlzIHRoYXQgIlRoZSBwcm92aW5jZSB3aWxsIG1vc3QgbGlrZWx5IGZvbGxvdyB0aGUgbmV4dCBkYXlsaWdodCBzYXZpbmcgc2NoZWR1bGUsCisjIHdoaWNoIGlzIHBsYW5uZWQgZm9yIHRoZSBzZWNvbmQgU3VuZGF5IGluIE9jdG9iZXIuIgorCisjCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCisjCisjIEJ1ZW5vcyBBaXJlcyAoQkEpLCBDYXBpdGFsIEZlZGVyYWwgKENGKSwKK1pvbmUgQW1lcmljYS9BcmdlbnRpbmEvQnVlbm9zX0FpcmVzIC0zOjUzOjQ4IC0gTE1UIDE4OTQgT2N0IDMxCisJCQktNDoxNjo0OCAtCUNNVAkxOTIwIE1heSAjIENvcmRvYmEgTWVhbiBUaW1lCisJCQktNDowMAktCUFSVAkxOTMwIERlYworCQkJLTQ6MDAJQXJnCUFSJXNUCTE5NjkgT2N0ICA1CisJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKKwkJCS00OjAwCUFyZwlBUiVzVAkyMDAwIE1hciAgMworCQkJLTM6MDAJQXJnCUFSJXNUCisjCisjIENvcmRvYmEgKENCKSwgU2FudGEgRmUgKFNGKSwgRW50cmUgUmlvcyAoRVIpLCBDb3JyaWVudGVzIChDTiksIE1pc2lvbmVzIChNTiksCisjIENoYWNvIChDQyksIEZvcm1vc2EgKEZNKSwgU2FudGlhZ28gZGVsIEVzdGVybyAoU0UpCisjCisjIFNoYW5rcyAmIFBvdHRlbmdlciBhbHNvIG1ha2UgdGhlIGZvbGxvd2luZyBjbGFpbXMsIHdoaWNoIHdlIGhhdmVuJ3QgdmVyaWZpZWQ6CisjIC0gRm9ybW9zYSBzd2l0Y2hlZCB0byAtMzowMCBvbiAxOTkxLTAxLTA3LgorIyAtIE1pc2lvbmVzIHN3aXRjaGVkIHRvIC0zOjAwIG9uIDE5OTAtMTItMjkuCisjIC0gQ2hhY28gc3dpdGNoZWQgdG8gLTM6MDAgb24gMTk5MS0wMS0wNC4KKyMgLSBTYW50aWFnbyBkZWwgRXN0ZXJvIHN3aXRjaGVkIHRvIC00OjAwIG9uIDE5OTEtMDQtMDEsCisjICAgdGhlbiB0byAtMzowMCBvbiAxOTkxLTA0LTI2LgorIworWm9uZSBBbWVyaWNhL0FyZ2VudGluYS9Db3Jkb2JhIC00OjE2OjQ4IC0gTE1UCTE4OTQgT2N0IDMxCisJCQktNDoxNjo0OCAtCUNNVAkxOTIwIE1heQorCQkJLTQ6MDAJLQlBUlQJMTkzMCBEZWMKKwkJCS00OjAwCUFyZwlBUiVzVAkxOTY5IE9jdCAgNQorCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTEgTWFyICAzCisJCQktNDowMAktCVdBUlQJMTk5MSBPY3QgMjAKKwkJCS0zOjAwCUFyZwlBUiVzVAkxOTk5IE9jdCAgMworCQkJLTQ6MDAJQXJnCUFSJXNUCTIwMDAgTWFyICAzCisJCQktMzowMAlBcmcJQVIlc1QKKyMKKyMgU2FsdGEgKFNBKSwgTGEgUGFtcGEgKExQKSwgTmV1cXVlbiAoTlEpLCBSaW8gTmVncm8gKFJOKQorWm9uZSBBbWVyaWNhL0FyZ2VudGluYS9TYWx0YSAtNDoyMTo0MCAtIExNVAkxODk0IE9jdCAzMQorCQkJLTQ6MTY6NDggLQlDTVQJMTkyMCBNYXkKKwkJCS00OjAwCS0JQVJUCTE5MzAgRGVjCisJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKKwkJCS0zOjAwCUFyZwlBUiVzVAkxOTkxIE1hciAgMworCQkJLTQ6MDAJLQlXQVJUCTE5OTEgT2N0IDIwCisJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKKwkJCS00OjAwCUFyZwlBUiVzVAkyMDAwIE1hciAgMworCQkJLTM6MDAJQXJnCUFSJXNUCTIwMDggT2N0IDE4CisJCQktMzowMAktCUFSVAorIworIyBUdWN1bWFuIChUTSkKK1pvbmUgQW1lcmljYS9BcmdlbnRpbmEvVHVjdW1hbiAtNDoyMDo1MiAtIExNVAkxODk0IE9jdCAzMQorCQkJLTQ6MTY6NDggLQlDTVQJMTkyMCBNYXkKKwkJCS00OjAwCS0JQVJUCTE5MzAgRGVjCisJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKKwkJCS0zOjAwCUFyZwlBUiVzVAkxOTkxIE1hciAgMworCQkJLTQ6MDAJLQlXQVJUCTE5OTEgT2N0IDIwCisJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKKwkJCS00OjAwCUFyZwlBUiVzVAkyMDAwIE1hciAgMworCQkJLTM6MDAJLQlBUlQJMjAwNCBKdW4gIDEKKwkJCS00OjAwCS0JV0FSVAkyMDA0IEp1biAxMworCQkJLTM6MDAJQXJnCUFSJXNUCisjCisjIExhIFJpb2phIChMUikKK1pvbmUgQW1lcmljYS9BcmdlbnRpbmEvTGFfUmlvamEgLTQ6Mjc6MjQgLSBMTVQJMTg5NCBPY3QgMzEKKwkJCS00OjE2OjQ4IC0JQ01UCTE5MjAgTWF5CisJCQktNDowMAktCUFSVAkxOTMwIERlYworCQkJLTQ6MDAJQXJnCUFSJXNUCTE5NjkgT2N0ICA1CisJCQktMzowMAlBcmcJQVIlc1QJMTk5MSBNYXIgIDEKKwkJCS00OjAwCS0JV0FSVAkxOTkxIE1heSAgNworCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTkgT2N0ICAzCisJCQktNDowMAlBcmcJQVIlc1QJMjAwMCBNYXIgIDMKKwkJCS0zOjAwCS0JQVJUCTIwMDQgSnVuICAxCisJCQktNDowMAktCVdBUlQJMjAwNCBKdW4gMjAKKwkJCS0zOjAwCUFyZwlBUiVzVAkyMDA4IE9jdCAxOAorCQkJLTM6MDAJLQlBUlQKKyMKKyMgU2FuIEp1YW4gKFNKKQorWm9uZSBBbWVyaWNhL0FyZ2VudGluYS9TYW5fSnVhbiAtNDozNDowNCAtIExNVAkxODk0IE9jdCAzMQorCQkJLTQ6MTY6NDggLQlDTVQJMTkyMCBNYXkKKwkJCS00OjAwCS0JQVJUCTE5MzAgRGVjCisJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKKwkJCS0zOjAwCUFyZwlBUiVzVAkxOTkxIE1hciAgMQorCQkJLTQ6MDAJLQlXQVJUCTE5OTEgTWF5ICA3CisJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKKwkJCS00OjAwCUFyZwlBUiVzVAkyMDAwIE1hciAgMworCQkJLTM6MDAJLQlBUlQJMjAwNCBNYXkgMzEKKwkJCS00OjAwCS0JV0FSVAkyMDA0IEp1bCAyNQorCQkJLTM6MDAJQXJnCUFSJXNUCTIwMDggT2N0IDE4CisJCQktMzowMAktCUFSVAorIworIyBKdWp1eSAoSlkpCitab25lIEFtZXJpY2EvQXJnZW50aW5hL0p1anV5IC00OjIxOjEyIC0JTE1UCTE4OTQgT2N0IDMxCisJCQktNDoxNjo0OCAtCUNNVAkxOTIwIE1heQorCQkJLTQ6MDAJLQlBUlQJMTkzMCBEZWMKKwkJCS00OjAwCUFyZwlBUiVzVAkxOTY5IE9jdCAgNQorCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTAgTWFyICA0CisJCQktNDowMAktCVdBUlQJMTk5MCBPY3QgMjgKKwkJCS00OjAwCTE6MDAJV0FSU1QJMTk5MSBNYXIgMTcKKwkJCS00OjAwCS0JV0FSVAkxOTkxIE9jdCAgNgorCQkJLTM6MDAJMTowMAlBUlNUCTE5OTIKKwkJCS0zOjAwCUFyZwlBUiVzVAkxOTk5IE9jdCAgMworCQkJLTQ6MDAJQXJnCUFSJXNUCTIwMDAgTWFyICAzCisJCQktMzowMAlBcmcJQVIlc1QJMjAwOCBPY3QgMTgKKwkJCS0zOjAwCS0JQVJUCisjCisjIENhdGFtYXJjYSAoQ1QpLCBDaHVidXQgKENIKQorWm9uZSBBbWVyaWNhL0FyZ2VudGluYS9DYXRhbWFyY2EgLTQ6MjM6MDggLSBMTVQJMTg5NCBPY3QgMzEKKwkJCS00OjE2OjQ4IC0JQ01UCTE5MjAgTWF5CisJCQktNDowMAktCUFSVAkxOTMwIERlYworCQkJLTQ6MDAJQXJnCUFSJXNUCTE5NjkgT2N0ICA1CisJCQktMzowMAlBcmcJQVIlc1QJMTk5MSBNYXIgIDMKKwkJCS00OjAwCS0JV0FSVAkxOTkxIE9jdCAyMAorCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTkgT2N0ICAzCisJCQktNDowMAlBcmcJQVIlc1QJMjAwMCBNYXIgIDMKKwkJCS0zOjAwCS0JQVJUCTIwMDQgSnVuICAxCisJCQktNDowMAktCVdBUlQJMjAwNCBKdW4gMjAKKwkJCS0zOjAwCUFyZwlBUiVzVAkyMDA4IE9jdCAxOAorCQkJLTM6MDAJLQlBUlQKKyMKKyMgTWVuZG96YSAoTVopCitab25lIEFtZXJpY2EvQXJnZW50aW5hL01lbmRvemEgLTQ6MzU6MTYgLSBMTVQJMTg5NCBPY3QgMzEKKwkJCS00OjE2OjQ4IC0JQ01UCTE5MjAgTWF5CisJCQktNDowMAktCUFSVAkxOTMwIERlYworCQkJLTQ6MDAJQXJnCUFSJXNUCTE5NjkgT2N0ICA1CisJCQktMzowMAlBcmcJQVIlc1QJMTk5MCBNYXIgIDQKKwkJCS00OjAwCS0JV0FSVAkxOTkwIE9jdCAxNQorCQkJLTQ6MDAJMTowMAlXQVJTVAkxOTkxIE1hciAgMQorCQkJLTQ6MDAJLQlXQVJUCTE5OTEgT2N0IDE1CisJCQktNDowMAkxOjAwCVdBUlNUCTE5OTIgTWFyICAxCisJCQktNDowMAktCVdBUlQJMTk5MiBPY3QgMTgKKwkJCS0zOjAwCUFyZwlBUiVzVAkxOTk5IE9jdCAgMworCQkJLTQ6MDAJQXJnCUFSJXNUCTIwMDAgTWFyICAzCisJCQktMzowMAktCUFSVAkyMDA0IE1heSAyMworCQkJLTQ6MDAJLQlXQVJUCTIwMDQgU2VwIDI2CisJCQktMzowMAlBcmcJQVIlc1QJMjAwOCBPY3QgMTgKKwkJCS0zOjAwCS0JQVJUCisjCisjIFNhbiBMdWlzIChTTCkKK1pvbmUgQW1lcmljYS9BcmdlbnRpbmEvU2FuX0x1aXMgLTQ6MjU6MjQgLSBMTVQJMTg5NCBPY3QgMzEKKwkJCS00OjE2OjQ4IC0JQ01UCTE5MjAgTWF5CisJCQktNDowMAktCUFSVAkxOTMwIERlYworCQkJLTQ6MDAJQXJnCUFSJXNUCTE5NjkgT2N0ICA1CisJCQktMzowMAlBcmcJQVIlc1QJMTk5MAorCQkJLTM6MDAJMTowMAlBUlNUCTE5OTAgTWFyIDE0CisJCQktNDowMAktCVdBUlQJMTk5MCBPY3QgMTUKKwkJCS00OjAwCTE6MDAJV0FSU1QJMTk5MSBNYXIgIDEKKwkJCS00OjAwCS0JV0FSVAkxOTkxIEp1biAgMQorCQkJLTM6MDAJLQlBUlQJMTk5OSBPY3QgIDMKKwkJCS00OjAwCTE6MDAJV0FSU1QJMjAwMCBNYXIgIDMKKwkJCS0zOjAwCS0JQVJUCTIwMDQgTWF5IDMxCisJCQktNDowMAktCVdBUlQJMjAwNCBKdWwgMjUKKwkJCS0zOjAwCUFyZwlBUiVzVAkyMDA4IEphbiAyMQorCQkJLTM6MDAJLQlBUlQJMjAwOSBNYXIgMTUKKwkJCS00OjAwCUFyZwlXQVIlc1QKKyMKKyMgU2FudGEgQ3J1eiAoU0MpCitab25lIEFtZXJpY2EvQXJnZW50aW5hL1Jpb19HYWxsZWdvcyAtNDozNjo1MiAtIExNVCAxODk0IE9jdCAzMQorCQkJLTQ6MTY6NDggLQlDTVQJMTkyMCBNYXkgIyBDb3Jkb2JhIE1lYW4gVGltZQorCQkJLTQ6MDAJLQlBUlQJMTkzMCBEZWMKKwkJCS00OjAwCUFyZwlBUiVzVAkxOTY5IE9jdCAgNQorCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTkgT2N0ICAzCisJCQktNDowMAlBcmcJQVIlc1QJMjAwMCBNYXIgIDMKKwkJCS0zOjAwCS0JQVJUCTIwMDQgSnVuICAxCisJCQktNDowMAktCVdBUlQJMjAwNCBKdW4gMjAKKwkJCS0zOjAwCUFyZwlBUiVzVAkyMDA4IE9jdCAxOAorCQkJLTM6MDAJLQlBUlQKKyMKKyMgVGllcnJhIGRlbCBGdWVnbywgQW50YXJ0aWRhIGUgSXNsYXMgZGVsIEF0bGFudGljbyBTdXIgKFRGKQorWm9uZSBBbWVyaWNhL0FyZ2VudGluYS9Vc2h1YWlhIC00OjMzOjEyIC0gTE1UIDE4OTQgT2N0IDMxCisJCQktNDoxNjo0OCAtCUNNVAkxOTIwIE1heSAjIENvcmRvYmEgTWVhbiBUaW1lCisJCQktNDowMAktCUFSVAkxOTMwIERlYworCQkJLTQ6MDAJQXJnCUFSJXNUCTE5NjkgT2N0ICA1CisJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKKwkJCS00OjAwCUFyZwlBUiVzVAkyMDAwIE1hciAgMworCQkJLTM6MDAJLQlBUlQJMjAwNCBNYXkgMzAKKwkJCS00OjAwCS0JV0FSVAkyMDA0IEp1biAyMAorCQkJLTM6MDAJQXJnCUFSJXNUCTIwMDggT2N0IDE4CisJCQktMzowMAktCUFSVAorCisjIEFydWJhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFtZXJpY2EvQXJ1YmEJLTQ6NDA6MjQgLQlMTVQJMTkxMiBGZWIgMTIJIyBPcmFuamVzdGFkCisJCQktNDozMAktCUFOVAkxOTY1ICMgTmV0aGVybGFuZHMgQW50aWxsZXMgVGltZQorCQkJLTQ6MDAJLQlBU1QKKworIyBCb2xpdmlhCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFtZXJpY2EvTGFfUGF6CS00OjMyOjM2IC0JTE1UCTE4OTAKKwkJCS00OjMyOjM2IC0JQ01UCTE5MzEgT2N0IDE1ICMgQ2FsYW1hcmNhIE1UCisJCQktNDozMjozNiAxOjAwCUJPU1QJMTkzMiBNYXIgMjEgIyBCb2xpdmlhIFNUCisJCQktNDowMAktCUJPVAkjIEJvbGl2aWEgVGltZQorCisjIEJyYXppbAorCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTMtMTEtMTgpOgorIyBUaGUgbWF5b3Igb2YgUmlvIHJlY2VudGx5IGF0dGVtcHRlZCB0byBjaGFuZ2UgdGhlIHRpbWUgem9uZSBydWxlcworIyBqdXN0IGluIGhpcyBjaXR5LCBpbiBvcmRlciB0byBsZWF2ZSBtb3JlIHN1bW1lciB0aW1lIGZvciB0aGUgdG91cmlzdCB0cmFkZS4KKyMgVGhlIHJ1bGUgY2hhbmdlIGxhc3RlZCBvbmx5IHBhcnQgb2YgdGhlIGRheTsKKyMgdGhlIGZlZGVyYWwgZ292ZXJubWVudCByZWZ1c2VkIHRvIGZvbGxvdyB0aGUgY2l0eSdzIHJ1bGVzLCBhbmQgYnVzaW5lc3MKKyMgd2FzIGluIGEgY2hhb3MsIHNvIHRoZSBtYXlvciBiYWNrZWQgZG93biB0aGF0IGFmdGVybm9vbi4KKworIyBGcm9tIElBVEEgU1NJTSAoMTk5Ni0wMik6CisjIF9Pbmx5XyB0aGUgZm9sbG93aW5nIHN0YXRlcyBpbiBCUjEgb2JzZXJ2ZSBEU1Q6IFJpbyBHcmFuZGUgZG8gU3VsIChSUyksCisjIFNhbnRhIENhdGFyaW5hIChTQyksIFBhcmFuYSAoUFIpLCBTYW8gUGF1bG8gKFNQKSwgUmlvIGRlIEphbmVpcm8gKFJKKSwKKyMgRXNwaXJpdG8gU2FudG8gKEVTKSwgTWluYXMgR2VyYWlzIChNRyksIEJhaGlhIChCQSksIEdvaWFzIChHTyksCisjIERpc3RyaXRvIEZlZGVyYWwgKERGKSwgVG9jYW50aW5zIChUTyksIFNlcmdpcGUgW1NFXSBhbmQgQWxhZ29hcyBbQUxdLgorIyBbVGhlIGxhc3QgdGhyZWUgc3RhdGVzIGFyZSBuZXcgdG8gdGhpcyBpc3N1ZSBvZiB0aGUgSUFUQSBTU0lNLl0KKworIyBGcm9tIEd3aWxsaW0gTGF3ICgxOTk2LTEwLTA3KToKKyMgR2VvZ3JhcGh5LCBoaXN0b3J5IChUb2NhbnRpbnMgd2FzIHBhcnQgb2YgR29pYXMgdW50aWwgMTk4OSksIGFuZCBvdGhlcgorIyBzb3VyY2VzIG9mIHRpbWUgem9uZSBpbmZvcm1hdGlvbiBsZWFkIG1lIHRvIGJlbGlldmUgdGhhdCBBTCwgU0UsIGFuZCBUTyB3ZXJlCisjIGFsd2F5cyBpbiBCUjEsIGFuZCBzbyB0aGUgb25seSBjaGFuZ2Ugd2FzIHdoZXRoZXIgb3Igbm90IHRoZXkgb2JzZXJ2ZWQgRFNULi4uLgorIyBUaGUgZWFybGllc3QgaXNzdWUgb2YgdGhlIFNTSU0gSSBoYXZlIGlzIDIvOTEuICBFYWNoIGlzc3VlIGZyb20gdGhlbiB1bnRpbAorIyA5Lzk1IHNheXMgdGhhdCBEU1QgaXMgb2JzZXJ2ZWQgb25seSBpbiB0aGUgdGVuIHN0YXRlcyBJIHF1b3RlZCBmcm9tIDkvOTUsCisjIGFsb25nIHdpdGggTWF0byBHcm9zc28gKE1UKSBhbmQgTWF0byBHcm9zc28gZG8gU3VsIChNUyksIHdoaWNoIGFyZSBpbiBCUjIKKyMgKFVUQy00KS4uLi4gIFRoZSBvdGhlciB0d28gdGltZSB6b25lcyBnaXZlbiBmb3IgQnJhemlsIGFyZSBCUjMsIHdoaWNoIGlzCisjIFVUQy01LCBubyBEU1QsIGFuZCBhcHBsaWVzIG9ubHkgaW4gdGhlIHN0YXRlIG9mIEFjcmUgKEFDKTsgYW5kIEJSNCwgd2hpY2ggaXMKKyMgVVRDLTIsIGFuZCBhcHBsaWVzIHRvIEZlcm5hbmRvIGRlIE5vcm9uaGEgKGZvcm1lcmx5IEZOLCBidXQgSSBiZWxpZXZlIGl0J3MKKyMgYmVjb21lIHBhcnQgb2YgdGhlIHN0YXRlIG9mIFBlcm5hbWJ1Y28pLiAgVGhlIGJvdW5kYXJ5IGJldHdlZW4gQlIxIGFuZCBCUjIKKyMgaGFzIG5ldmVyIGJlZW4gY2xlYXJseSBzdGF0ZWQuICBUaGV5J3ZlIHNpbXBseSBiZWVuIGNhbGxlZCBFYXN0IGFuZCBXZXN0LgorIyBIb3dldmVyLCBzb21lIGNvbmNsdXNpb25zIGNhbiBiZSBkcmF3biBmcm9tIGFub3RoZXIgSUFUQSBtYW51YWw6IHRoZSBBaXJsaW5lCisjIENvZGluZyBEaXJlY3RvcnksIHdoaWNoIGxpc3RzIGNsb3NlIHRvIDQwMCBhaXJwb3J0cyBpbiBCcmF6aWwuICBGb3IgZWFjaAorIyBhaXJwb3J0IGl0IGdpdmVzIGEgdGltZSB6b25lIHdoaWNoIGlzIGNvZGVkIHRvIHRoZSBTU0lNLiAgRnJvbSB0aGF0CisjIGluZm9ybWF0aW9uLCBJJ20gbGVkIHRvIGNvbmNsdWRlIHRoYXQgdGhlIHN0YXRlcyBvZiBBbWFwYSAoQVApLCBDZWFyYSAoQ0UpLAorIyBNYXJhbmhhbyAoTUEpLCBQYXJhaWJhIChQUiksIFBlcm5hbWJ1Y28gKFBFKSwgUGlhdWkgKFBJKSwgYW5kIFJpbyBHcmFuZGUgZG8KKyMgTm9ydGUgKFJOKSwgYW5kIHRoZSBlYXN0ZXJuIHBhcnQgb2YgUGFyYSAoUEEpIGFyZSBhbGwgaW4gQlIxIHdpdGhvdXQgRFNULgorCisjIEZyb20gTWFyY29zIFRhZGV1ICgxOTk4LTA5LTI3KToKKyMgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvdmVyYW8xLmh0bWwiPgorIyBCcmF6aWxpYW4gb2ZmaWNpYWwgcGFnZQorIyA8L2E+CisKKyMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgKDIwMDAtMTEtMDMpOgorIyBbRm9yIGFuIG9mZmljaWFsIGxpc3Qgb2Ygd2hpY2ggcmVnaW9ucyBpbiBCcmF6aWwgdXNlIHdoaWNoIHRpbWUgem9uZXMsIHNlZTpdCisjIGh0dHA6Ly9wY2RzaDAxLm9uLmJyL0Z1c2JyLmh0bQorIyBodHRwOi8vcGNkc2gwMS5vbi5ici9GdXNicmh2Lmh0bQorCisjIEZyb20gQ2Vsc28gRG9yaWEgdmlhIERhdmlkIE1hZGVvICgyMDAyLTEwLTA5KToKKyMgVGhlIHJlYXNvbiBmb3IgdGhlIGRlbGF5IHRoaXMgeWVhciBoYXMgdG8gZG8gd2l0aCBlbGVjdGlvbnMgaW4gQnJhemlsLgorIworIyBVbmxpa2UgaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIGVsZWN0aW9ucyBpbiBCcmF6aWwgYXJlIDEwMCUgY29tcHV0ZXJpemVkIGFuZAorIyB0aGUgcmVzdWx0cyBhcmUga25vd24gYWxtb3N0IGltbWVkaWF0ZWx5LiAgWWVzdGVyZGF5LCBpdCB3YXMgdGhlIGZpcnN0CisjIHJvdW5kIG9mIHRoZSBlbGVjdGlvbnMgd2hlbiAxMTUgbWlsbGlvbiBCcmF6aWxpYW5zIHZvdGVkIGZvciBQcmVzaWRlbnQsCisjIEdvdmVybm9yLCBTZW5hdG9ycywgRmVkZXJhbCBEZXB1dGllcywgYW5kIFN0YXRlIERlcHV0aWVzLiAgTm9ib2R5IGlzCisjIGNvdW50aW5nIChvciByZS1jb3VudGluZykgdm90ZXMgYW55bW9yZSBhbmQgd2Uga25vdyB0aGVyZSB3aWxsIGJlIGEgc2Vjb25kCisjIHJvdW5kIGZvciB0aGUgUHJlc2lkZW5jeSBhbmQgYWxzbyBmb3Igc29tZSBHb3Zlcm5vcnMuICBUaGUgMm5kIHJvdW5kIHdpbGwKKyMgdGFrZSBwbGFjZSBvbiBPY3RvYmVyIDI3dGguCisjCisjIFRoZSByZWFzb24gd2h5IHRoZSBEU1Qgd2lsbCBvbmx5IGJlZ2luIE5vdmVtYmVyIDNyZCBpcyB0aGF0IHRoZSB0aG91c2FuZHMKKyMgb2YgZWxlY3RvcmFsIG1hY2hpbmVzIHVzZWQgY2Fubm90IGhhdmUgdGhlaXIgdGltZSBjaGFuZ2VkLCBhbmQgc2luY2UgdGhlCisjIENvbnN0aXR1dGlvbiBzYXlzIHRoZSBlbGVjdGlvbnMgbXVzdCBiZWdpbiBhdCA4OjAwIEFNIGFuZCBlbmQgYXQgNTowMCBQTSwKKyMgdGhlIEdvdmVybm1lbnQgZGVjaWRlZCB0byBwb3N0cG9uZSBEU1QsIGluc3RlYWQgb2YgY2hhbmdpbmcgdGhlIENvbnN0aXR1dGlvbgorIyAobWF5YmUsIGZvciB0aGUgbmV4dCBlbGVjdGlvbnMsIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gY2hhbmdlIHRoZSBjbG9jaykuLi4KKworIyBGcm9tIFJvZHJpZ28gU2V2ZXJvICgyMDA0LTEwLTA0KToKKyMgSXQncyBqdXN0IHRoZSBiaWFubnVhbCBjaGFuZ2UgbWFkZSBuZWNlc3NhcnkgYnkgdGhlIG11Y2ggaHlwZWQsIHN1cHBvc2VkbHkKKyMgbW9kZXJuIEJyYXppbGlhbiBlbGV0cm9uaWMgdm90aW5nIG1hY2hpbmVzIHdoaWNoLCBhcHBhcmVudGx5LCBjYW4ndCBkZWFsCisjIHdpdGggYSB0aW1lIGNoYW5nZSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIHNlY29uZCByb3VuZHMgb2YgdGhlIGVsZWN0aW9ucy4KKworIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwNy0wOS0yMCk6CisjIEJyYXppbCB3aWxsIHN0YXJ0IERTVCBvbiAyMDA3LTEwLTE0IDAwOjAwIGFuZCBlbmQgb24gMjAwOC0wMi0xNyAwMDowMDoKKyMgaHR0cDovL3d3dy5tbWUuZ292LmJyL3NpdGUvbmV3cy9kZXRhaWwuZG87anNlc3Npb25pZD1CQkEwNjgxMUFGQ0FBQzI4RjAyODUyMTA5MTM1MTNEQT9uZXdzSWQ9MTM5NzUKKworIyBGcm9tIFBhdWwgU2NodWx6ZSAoMjAwOC0wNi0yNCk6CisjIC4uLmJ5IGxhdyBudW1iZXIgMTEuNjYyIG9mIEFwcmlsIDI0LCAyMDA4IChwdWJsaXNoZWQgaW4gdGhlICJEaWFyaW8KKyMgT2ZpY2lhbCBkYSBVbmlhbyIuLi4pIGluIEJyYXppbCB0aGVyZSBhcmUgY2hhbmdlcyBpbiB0aGUgdGltZXpvbmVzLAorIyBlZmZlY3RpdmUgdG9kYXkgKDAwOjAwYW0gYXQgSnVuZSAyNCwgMjAwOCkgYXMgZm9sbG93czoKKyMKKyMgYSkgVGhlIHRpbWV6b25lIFVUQys1IGlzIGVbeF10aW5ndWlzaGVkLCB3aXRoIGFsbCB0aGUgQWNyZSBzdGF0ZSBhbmQgdGhlCisjIHBhcnQgb2YgdGhlIEFtYXpvbmFzIHN0YXRlIHRoYXQgaGFkIHRoaXMgdGltZXpvbmUgbm93IGJlaW5nIHB1dCB0byB0aGUKKyMgdGltZXpvbmUgVVRDKzQKKyMgYikgVGhlIHdob2xlIFBhcmEgc3RhdGUgbm93IGlzIHB1dCBhdCB0aW1lem9uZSBVVEMrMywgaW5zdGVhZCBvZiBqdXN0CisjIHBhcnQgb2YgaXQsIGFzIHdhcyBiZWZvcmUuCisjCisjIFRoaXMgY2hhbmdlIGZvbGxvd3MgYSBwcm9wb3NhbCBvZiBzZW5hdG9yIFRpYW8gVmlhbmEgb2YgQWNyZSBzdGF0ZSwgdGhhdAorIyBwcm9wb3NlZCBpdCBkdWUgdG8gY29uY2VybnMgYWJvdXQgb3BlbiB0ZWxldmlzaW9uIGNoYW5uZWxzIGRpc3BsYXlpbmcKKyMgcHJvZ3JhbXMgaW5hcHByb3ByaWF0ZSB0byB5b3V0aHMgaW4gdGhlIHN0YXRlcyB0aGF0IGhhZCB0aGUgdGltZXpvbmUKKyMgVVRDKzUgdG9vIGVhcmx5IGluIHRoZSBuaWdodC4gSW4gdGhlIG9jY2FzaW9uLCBzb21lIG1vcmUgY29ycmVjdGlvbnMKKyMgd2VyZSBwcm9wb3NlZCwgdHJ5aW5nIHRvIHVuaWZ5IHRoZSB0aW1lem9uZXMgb2YgYW55IGdpdmVuIHN0YXRlLiBUaGlzCisjIGNoYW5nZSBtb2RpZmllcyB0aW1lem9uZSBydWxlcyBkZWZpbmVkIGluIGRlY3JlZSAyLjc4NCBvZiAxOCBKdW5lLAorIyAxOTEzLgorCisjIEZyb20gUm9kcmlnbyBTZXZlcm8gKDIwMDgtMDYtMjQpOgorIyBKdXN0IGNvcnJlY3RpbmcgdGhlIFVSTDoKKyMgPGEgaHJlZj0iaHR0cHM6Ly93d3cuaW4uZ292LmJyL2ltcHJlbnNhL3Zpc3VhbGl6YS9pbmRleC5qc3A/am9ybmFsPWRvJnNlY2FvPTEmcGFnaW5hPTEmZGF0YT0yNS8wNC8yMDA4Ij4KKyMgaHR0cHM6Ly93d3cuaW4uZ292LmJyL2ltcHJlbnNhL3Zpc3VhbGl6YS9pbmRleC5qc3A/am9ybmFsPWRvJnNlY2FvPTEmcGFnaW5hPTEmZGF0YT0yNS8wNC8yMDA4CisjIDwvYT4KKyMKKyMgQXMgYSByZXN1bHQgb2YgdGhlIGFib3ZlIERlY3JlZSBJIGJlbGlldmUgdGhlIEFtZXJpY2EvUmlvX0JyYW5jbworIyB0aW1lem9uZSBzaGFsbCBiZSBtb2RpZmllZCBmcm9tIFVUQy01IHRvIFVUQy00IGFuZCBhIG5ldyB0aW1lem9uZSBzaGFsbAorIyBiZSBjcmVhdGVkIHRvIHJlcHJlc2VudCB0aGUgdGhlIHdlc3Qgc2lkZSBvZiB0aGUgUGFyYSBTdGF0ZS4gSQorIyBzdWdnZXN0IHRoaXMgbmV3IHRpbWV6b25lIGJlIGNhbGxlZCBTYW50YXJlbSBhcyB0aGUgbW9zdAorIyBpbXBvcnRhbnQvcG9wdWxhdGVkIGNpdHkgaW4gdGhlIGFmZmVjdGVkIGFyZWEuCisjCisjIFRoaXMgbmV3IHRpbWV6b25lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBSaW9fQnJhbmNvIHRpbWV6b25lIHVwIHRvCisjIHRoZSAyMDA4LzA2LzI0IGNoYW5nZSB3aGljaCB3b3VsZCBiZSB0byBVVEMtMyBpbnN0ZWFkIG9mIFVUQy00LgorCisjIEZyb20gQWxleCBLcml2ZW55c2hldiAoMjAwOC0wNi0yNCk6CisjIFRoaXMgaXMgYSBxdWljayByZWZlcmVuY2UgcGFnZSBmb3IgTmV3IGFuZCBPbGQgQnJhemlsIFRpbWUgWm9uZXMgbWFwLgorIyA8YSBocmVmPSJodHRwOi8vd3d3LndvcmxkdGltZXpvbmUuY29tL2JyYXppbC10aW1lLW5ldy1vbGQucGhwIj4KKyMgaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLmNvbS9icmF6aWwtdGltZS1uZXctb2xkLnBocAorIyA8L2E+CisjCisjIC0gNCB0aW1lIHpvbmVzIHJlcGxhY2VkIGJ5IDMgdGltZSB6b25lcy1lbGltaW5hdGluZyB0aW1lIHpvbmUgVVRDLSAwNQorIyAoc3RhdGUgQWNyZSBhbmQgdGhlIHBhcnQgb2YgdGhlIEFtYXpvbmFzIHdpbGwgYmUgVVRDL0dNVC0gMDQpIC0gd2VzdGVybgorIyBwYXJ0IG9mIFBhciBzdGF0ZSBpcyBtb3ZpbmcgdG8gb25lIHRpbWV6b25lIFVUQy0gMDMgKGZyb20gVVRDIC0wNCkuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMi0xMC0xMCk6CisjIFRoZSBvZmZpY2lhbCBkZWNyZWVzIHJlZmVyZW5jZWQgYmVsb3cgYXJlIG1vc3RseSB0YWtlbiBmcm9tCisjIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0RlY0hWLmh0bWwiPgorIyBEZWNyZXRvcyBzb2JyZSBvIEhvcmFyaW8gZGUgVmVyYW8gbm8gQnJhc2lsCisjIDwvYT4uCisKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDgtMDgtMjkpOgorIyBBcyBhbm5vdW5jZWQgYnkgdGhlIGdvdmVybm1lbnQgYW5kIG1hbnkgbmV3c3BhcGVycyBpbiBCcmF6aWwgbGF0ZQorIyB5ZXN0ZXJkYXksIEJyYXppbCB3aWxsIHN0YXJ0IERTVCBvbiAyMDA4LTEwLTE5IChuZWVkIHRvIGNoYW5nZSBydWxlKSBhbmQKKyMgaXQgd2lsbCBlbmQgb24gMjAwOS0wMi0xNSAoY3VycmVudCBydWxlIGZvciBCcmF6aWwgaXMgZmluZSkuIEJhc2VkIG9uCisjIHBhc3QgeWVhcnMgZXhwZXJpZW5jZSB3aXRoIHRoZSBlbGVjdGlvbnMsIHRoZXJlIHdhcyBhIGdvb2QgY2hhbmNlIHRoYXQKKyMgdGhlIHN0YXJ0IHdhcyBwb3N0cG9uZWQgdG8gTm92ZW1iZXIsIGJ1dCBpdCBkaWQgbm90IGhhcHBlbiB0aGlzIHllYXIuCisjCisjIEl0IGhhcyBub3QgeWV0IGJlZW4gcG9zdGVkIHRvIGh0dHA6Ly9wY2RzaDAxLm9uLmJyL0RlY0hWLmh0bWwKKyMKKyMgQW4gb2ZmaWNpYWwgcGFnZSBhYm91dCBpdDoKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5tbWUuZ292LmJyL3NpdGUvbmV3cy9kZXRhaWwuZG8/bmV3c0lkPTE2NzIyIj4KKyMgaHR0cDovL3d3dy5tbWUuZ292LmJyL3NpdGUvbmV3cy9kZXRhaWwuZG8/bmV3c0lkPTE2NzIyCisjIDwvYT4KKyMgTm90ZSB0aGF0IHRoaXMgbGluayBkb2VzIG5vdCBhbHdheXMgd29yayBkaXJlY3RseSwgYnV0IG11c3QgYmUgYWNjZXNzZWQKKyMgYnkgZ29pbmcgdG8KKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5tbWUuZ292LmJyL2ZpcnN0Ij4KKyMgaHR0cDovL3d3dy5tbWUuZ292LmJyL2ZpcnN0CisjIDwvYT4KKyMKKyMgT25lIGV4YW1wbGUgbGluayB0aGF0IHdvcmtzIGRpcmVjdGx5OgorIyA8YSBocmVmPSJodHRwOi8vam9ybmFsZS5jb20uYnIvaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZ0YXNrPXZpZXcmaWQ9MTM1MzAmSXRlbWlkPTU0Ij4KKyMgaHR0cDovL2pvcm5hbGUuY29tLmJyL2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdGFzaz12aWV3JmlkPTEzNTMwJkl0ZW1pZD01NAorIyAoUG9ydHVndWVzZSkKKyMgPC9hPgorIworIyBXZSBoYXZlIGEgd3JpdHRlbiBhIHNob3J0IGFydGljbGUgYWJvdXQgaXQgYXMgd2VsbDoKKyMgPGEgaHJlZj0iaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vbmV3cy90aW1lL2JyYXppbC1kc3QtMjAwOC0yMDA5Lmh0bWwiPgorIyBodHRwOi8vd3d3LnRpbWVhbmRkYXRlLmNvbS9uZXdzL3RpbWUvYnJhemlsLWRzdC0yMDA4LTIwMDkuaHRtbAorIyA8L2E+CisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjIwNDY2Lmh0bSI+MjAsNDY2PC9hPiAoMTkzMS0xMC0wMSkKKyMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWMjE4OTYuaHRtIj4yMSw4OTY8L2E+ICgxOTMyLTAxLTEwKQorUnVsZQlCcmF6aWwJMTkzMQlvbmx5CS0JT2N0CSAzCTExOjAwCTE6MDAJUworUnVsZQlCcmF6aWwJMTkzMgkxOTMzCS0JQXByCSAxCSAwOjAwCTAJLQorUnVsZQlCcmF6aWwJMTkzMglvbmx5CS0JT2N0CSAzCSAwOjAwCTE6MDAJUworIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFYyMzE5NS5odG0iPjIzLDE5NTwvYT4gKDE5MzMtMTAtMTApCisjIHJldm9rZWQgRFNULgorIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFYyNzQ5Ni5odG0iPjI3LDQ5NjwvYT4gKDE5NDktMTEtMjQpCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjI3OTk4Lmh0bSI+MjcsOTk4PC9hPiAoMTk1MC0wNC0xMykKK1J1bGUJQnJhemlsCTE5NDkJMTk1MgktCURlYwkgMQkgMDowMAkxOjAwCVMKK1J1bGUJQnJhemlsCTE5NTAJb25seQktCUFwcgkxNgkgMTowMAkwCS0KK1J1bGUJQnJhemlsCTE5NTEJMTk1MgktCUFwcgkgMQkgMDowMAkwCS0KKyMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWMzIzMDguaHRtIj4zMiwzMDg8L2E+ICgxOTUzLTAyLTI0KQorUnVsZQlCcmF6aWwJMTk1Mwlvbmx5CS0JTWFyCSAxCSAwOjAwCTAJLQorIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFYzNDcyNC5odG0iPjM0LDcyNDwvYT4gKDE5NTMtMTEtMzApCisjIHJldm9rZWQgRFNULgorIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFY1MjcwMC5odG0iPjUyLDcwMDwvYT4gKDE5NjMtMTAtMTgpCisjIGVzdGFibGlzaGVkIERTVCBmcm9tIDE5NjMtMTAtMjMgMDA6MDAgdG8gMTk2NC0wMi0yOSAwMDowMAorIyBpbiBTUCwgUkosIEdCLCBNRywgRVMsIGR1ZSB0byB0aGUgcHJvbG9uZ2F0aW9uIG9mIHRoZSBkcm91Z2h0LgorIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFY1MzA3MS5odG0iPjUzLDA3MTwvYT4gKDE5NjMtMTItMDMpCisjIGV4dGVuZGVkIHRoZSBhYm92ZSBkZWNyZWUgdG8gYWxsIG9mIHRoZSBuYXRpb25hbCB0ZXJyaXRvcnkgb24gMTItMDkuCitSdWxlCUJyYXppbAkxOTYzCW9ubHkJLQlEZWMJIDkJIDA6MDAJMTowMAlTCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjUzNjA0Lmh0bSI+NTMsNjA0PC9hPiAoMTk2NC0wMi0yNSkKKyMgZXh0ZW5kZWQgc3VtbWVyIHRpbWUgYnkgb25lIGRheSB0byAxOTY0LTAzLTAxIDAwOjAwIChzdGFydCBvZiBzY2hvb2wpLgorUnVsZQlCcmF6aWwJMTk2NAlvbmx5CS0JTWFyCSAxCSAwOjAwCTAJLQorIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFY1NTYzOS5odG0iPjU1LDYzOTwvYT4gKDE5NjUtMDEtMjcpCitSdWxlCUJyYXppbAkxOTY1CW9ubHkJLQlKYW4JMzEJIDA6MDAJMTowMAlTCitSdWxlCUJyYXppbAkxOTY1CW9ubHkJLQlNYXIJMzEJIDA6MDAJMAktCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjU3MzAzLmh0bSI+NTcsMzAzPC9hPiAoMTk2NS0xMS0yMikKK1J1bGUJQnJhemlsCTE5NjUJb25seQktCURlYwkgMQkgMDowMAkxOjAwCVMKKyMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWNTc4NDMuaHRtIj41Nyw4NDM8L2E+ICgxOTY2LTAyLTE4KQorUnVsZQlCcmF6aWwJMTk2NgkxOTY4CS0JTWFyCSAxCSAwOjAwCTAJLQorUnVsZQlCcmF6aWwJMTk2NgkxOTY3CS0JTm92CSAxCSAwOjAwCTE6MDAJUworIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFY2MzQyOS5odG0iPjYzLDQyOTwvYT4gKDE5NjgtMTAtMTUpCisjIHJldm9rZWQgRFNULgorIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFY5MTY5OC5odG0iPjkxLDY5ODwvYT4gKDE5ODUtMDktMjcpCitSdWxlCUJyYXppbAkxOTg1CW9ubHkJLQlOb3YJIDIJIDA6MDAJMTowMAlTCisjIERlY3JlZSA5MiwzMTAgKDE5ODYtMDEtMjEpCisjIERlY3JlZSA5Miw0NjMgKDE5ODYtMDMtMTMpCitSdWxlCUJyYXppbAkxOTg2CW9ubHkJLQlNYXIJMTUJIDA6MDAJMAktCisjIERlY3JlZSA5MywzMTYgKDE5ODYtMTAtMDEpCitSdWxlCUJyYXppbAkxOTg2CW9ubHkJLQlPY3QJMjUJIDA6MDAJMTowMAlTCitSdWxlCUJyYXppbAkxOTg3CW9ubHkJLQlGZWIJMTQJIDA6MDAJMAktCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjk0OTIyLmh0bSI+OTQsOTIyPC9hPiAoMTk4Ny0wOS0yMikKK1J1bGUJQnJhemlsCTE5ODcJb25seQktCU9jdAkyNQkgMDowMAkxOjAwCVMKK1J1bGUJQnJhemlsCTE5ODgJb25seQktCUZlYgkgNwkgMDowMAkwCS0KKyMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWOTY2NzYuaHRtIj45Niw2NzY8L2E+ICgxOTg4LTA5LTEyKQorIyBleGNlcHQgZm9yIHRoZSBzdGF0ZXMgb2YgQUMsIEFNLCBQQSwgUlIsIFJPLCBhbmQgQVAgKHRoZW4gYSB0ZXJyaXRvcnkpCitSdWxlCUJyYXppbAkxOTg4CW9ubHkJLQlPY3QJMTYJIDA6MDAJMTowMAlTCitSdWxlCUJyYXppbAkxOTg5CW9ubHkJLQlKYW4JMjkJIDA6MDAJMAktCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjk4MDc3Lmh0bSI+OTgsMDc3PC9hPiAoMTk4OS0wOC0yMSkKKyMgd2l0aCB0aGUgc2FtZSBleGNlcHRpb25zCitSdWxlCUJyYXppbAkxOTg5CW9ubHkJLQlPY3QJMTUJIDA6MDAJMTowMAlTCitSdWxlCUJyYXppbAkxOTkwCW9ubHkJLQlGZWIJMTEJIDA6MDAJMAktCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjk5NTMwLmh0bSI+OTksNTMwPC9hPiAoMTk5MC0wOS0xNykKKyMgYWRvcHRlZCBieSBSUywgU0MsIFBSLCBTUCwgUkosIEVTLCBNRywgR08sIE1TLCBERi4KKyMgRGVjcmVlIDk5LDYyOSAoMTk5MC0xMC0xOSkgYWRkcyBCQSwgTVQuCitSdWxlCUJyYXppbAkxOTkwCW9ubHkJLQlPY3QJMjEJIDA6MDAJMTowMAlTCitSdWxlCUJyYXppbAkxOTkxCW9ubHkJLQlGZWIJMTcJIDA6MDAJMAktCisjIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWMTk5MS5odG0iPlVubnVtYmVyZWQgZGVjcmVlPC9hPiAoMTk5MS0wOS0yNSkKKyMgYWRvcHRlZCBieSBSUywgU0MsIFBSLCBTUCwgUkosIEVTLCBNRywgQkEsIEdPLCBNVCwgTVMsIERGLgorUnVsZQlCcmF6aWwJMTk5MQlvbmx5CS0JT2N0CTIwCSAwOjAwCTE6MDAJUworUnVsZQlCcmF6aWwJMTk5Mglvbmx5CS0JRmViCSA5CSAwOjAwCTAJLQorIyA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjE5OTIuaHRtIj5Vbm51bWJlcmVkIGRlY3JlZTwvYT4gKDE5OTItMTAtMTYpCisjIGFkb3B0ZWQgYnkgc2FtZSBzdGF0ZXMuCitSdWxlCUJyYXppbAkxOTkyCW9ubHkJLQlPY3QJMjUJIDA6MDAJMTowMAlTCitSdWxlCUJyYXppbAkxOTkzCW9ubHkJLQlKYW4JMzEJIDA6MDAJMAktCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjk0Mi5odG0iPjk0MjwvYT4gKDE5OTMtMDktMjgpCisjIGFkb3B0ZWQgYnkgc2FtZSBzdGF0ZXMsIHBsdXMgQU0uCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjEyNTIuaHRtIj4xLDI1MjwvYT4gKDE5OTQtMDktMjI7CisjIHdlYiBwYWdlIGNvcnJlY3RlZCAyMDA0LTAxLTA3KSBhZG9wdGVkIGJ5IHNhbWUgc3RhdGVzLCBtaW51cyBBTS4KKyMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWMTYzNi5odG0iPjEsNjM2PC9hPiAoMTk5NS0wOS0xNCkKKyMgYWRvcHRlZCBieSBzYW1lIHN0YXRlcywgcGx1cyBNVCBhbmQgVE8uCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjE2NzQuaHRtIj4xLDY3NDwvYT4gKDE5OTUtMTAtMTMpCisjIGFkZHMgQUwsIFNFLgorUnVsZQlCcmF6aWwJMTk5MwkxOTk1CS0JT2N0CVN1bj49MTEJIDA6MDAJMTowMAlTCitSdWxlCUJyYXppbAkxOTk0CTE5OTUJLQlGZWIJU3VuPj0xNQkgMDowMAkwCS0KK1J1bGUJQnJhemlsCTE5OTYJb25seQktCUZlYgkxMQkgMDowMAkwCS0KKyMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWMjAwMC5odG0iPjIsMDAwPC9hPiAoMTk5Ni0wOS0wNCkKKyMgYWRvcHRlZCBieSBzYW1lIHN0YXRlcywgbWludXMgQUwsIFNFLgorUnVsZQlCcmF6aWwJMTk5Nglvbmx5CS0JT2N0CSA2CSAwOjAwCTE6MDAJUworUnVsZQlCcmF6aWwJMTk5Nwlvbmx5CS0JRmViCTE2CSAwOjAwCTAJLQorIyBGcm9tIERhbmllbCBDLiBTb2JyYWwgKDE5OTgtMDItMTIpOgorIyBJbiAxOTk3LCB0aGUgRFMgYmVnYW4gb24gT2N0b2JlciA2LiBUaGUgc3RhdGVkIHJlYXNvbiB3YXMgdGhhdAorIyBiZWNhdXNlIGludGVybmF0aW9uYWwgdGVsZXZpc2lvbiBuZXR3b3JrcyBpZ25vcmVkIEJyYXppbCdzIHBvbGljeSBvbiBEUywKKyMgdGhleSBib3VnaHQgdGhlIHdyb25nIHRpbWVzIG9uIHNhdGVsbGl0ZSBmb3IgY292ZXJhZ2Ugb2YgUG9wZSdzIHZpc2l0LgorIyBUaGlzIHllYXIsIHRoZSBlbmRpbmcgZGF0ZSBvZiBEUyB3YXMgcG9zdHBvbmVkIHRvIE1hcmNoIDEKKyMgdG8gaGVscCBkZWFsaW5nIHdpdGggdGhlIHNob3J0YWdlcyBvZiBlbGVjdHJpYyBwb3dlci4KKyMKKyMgRGVjcmVlIDIsMzE3ICgxOTk3LTA5LTA0KSwgYWRvcHRlZCBieSBzYW1lIHN0YXRlcy4KK1J1bGUJQnJhemlsCTE5OTcJb25seQktCU9jdAkgNgkgMDowMAkxOjAwCVMKKyMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL2ZpZ3VyYXMvSFYyNDk1LkpQRyI+Miw0OTU8L2E+CisjICgxOTk4LTAyLTEwKQorUnVsZQlCcmF6aWwJMTk5OAlvbmx5CS0JTWFyCSAxCSAwOjAwCTAJLQorIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvZmlndXJhcy9Idjk4LmpwZyI+Miw3ODA8L2E+ICgxOTk4LTA5LTExKQorIyBhZG9wdGVkIGJ5IHRoZSBzYW1lIHN0YXRlcyBhcyBiZWZvcmUuCitSdWxlCUJyYXppbAkxOTk4CW9ubHkJLQlPY3QJMTEJIDA6MDAJMTowMAlTCitSdWxlCUJyYXppbAkxOTk5CW9ubHkJLQlGZWIJMjEJIDA6MDAJMAktCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9maWd1cmFzL0hWMzE1MC5naWYiPjMsMTUwPC9hPgorIyAoMTk5OS0wOC0yMykgYWRvcHRlZCBieSBzYW1lIHN0YXRlcy4KKyMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0RlY0hWOTkuZ2lmIj4zLDE4ODwvYT4gKDE5OTktMDktMzApCisjIGFkZHMgU0UsIEFMLCBQQiwgUEUsIFJOLCBDRSwgUEksIE1BIGFuZCBSUi4KK1J1bGUJQnJhemlsCTE5OTkJb25seQktCU9jdAkgMwkgMDowMAkxOjAwCVMKK1J1bGUJQnJhemlsCTIwMDAJb25seQktCUZlYgkyNwkgMDowMAkwCS0KKyMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0RFQzM1OTIuaHRtIj4zLDU5MjwvYT4gKDIwMDAtMDktMDYpCisjIGFkb3B0ZWQgYnkgdGhlIHNhbWUgc3RhdGVzIGFzIGJlZm9yZS4KKyMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0RlYzM2MzAuanBnIj4zLDYzMDwvYT4gKDIwMDAtMTAtMTMpCisjIHJlcGVhbHMgRFNUIGluIFBFIGFuZCBSUiwgZWZmZWN0aXZlIDIwMDAtMTAtMTUgMDA6MDAuCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9EZWMzNjMyLmpwZyI+Myw2MzI8L2E+ICgyMDAwLTEwLTE3KQorIyByZXBlYWxzIERTVCBpbiBTRSwgQUwsIFBCLCBSTiwgQ0UsIFBJIGFuZCBNQSwgZWZmZWN0aXZlIDIwMDAtMTAtMjIgMDA6MDAuCisjIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9maWd1cmFzL0hWMzkxNi5naWYiPjMsOTE2PC9hPgorIyAoMjAwMS0wOS0xMykgcmVlc3RhYmxpc2hlcyBEU1QgaW4gQUwsIENFLCBNQSwgUEIsIFBFLCBQSSwgUk4sIFNFLgorUnVsZQlCcmF6aWwJMjAwMAkyMDAxCS0JT2N0CVN1bj49OAkgMDowMAkxOjAwCVMKK1J1bGUJQnJhemlsCTIwMDEJMjAwNgktCUZlYglTdW4+PTE1CSAwOjAwCTAJLQorIyBEZWNyZWUgNCwzOTkgKDIwMDItMTAtMDEpIHJlcGVhbHMgRFNUIGluIEFMLCBDRSwgTUEsIFBCLCBQRSwgUEksIFJOLCBTRS4KKyMgPGEgaHJlZj0iaHR0cDovL3d3dy5wcmVzaWRlbmNpYS5nb3YuYnIvQ0NJVklML2RlY3JldG8vMjAwMi9ENDM5OS5odG0iPjQsMzk5PC9hPgorUnVsZQlCcmF6aWwJMjAwMglvbmx5CS0JTm92CSAzCSAwOjAwCTE6MDAJUworIyBEZWNyZWUgNCw4NDQgKDIwMDMtMDktMjQ7IGNvcnJlY3RlZCAyMDAzLTA5LTI2KSByZXBlYWxzIERTVCBpbiBCQSwgTVQsIFRPLgorIyA8YSBocmVmPSJodHRwOi8vd3d3LnByZXNpZGVuY2lhLmdvdi5ici9DQ0lWSUwvZGVjcmV0by8yMDAzL0Q0ODQ0Lmh0bSI+NCw4NDQ8L2E+CitSdWxlCUJyYXppbAkyMDAzCW9ubHkJLQlPY3QJMTkJIDA6MDAJMTowMAlTCisjIERlY3JlZSA1LDIyMyAoMjAwNC0xMC0wMSkgcmVlc3RhYmxpc2hlcyBEU1QgaW4gTVQuCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cucGxhbmFsdG8uZ292LmJyL2NjaXZpbF8wMy9fQXRvMjAwNC0yMDA2LzIwMDQvRGVjcmV0by9ENTIyMy5odG0iPjUsMjIzPC9hPgorUnVsZQlCcmF6aWwJMjAwNAlvbmx5CS0JTm92CSAyCSAwOjAwCTE6MDAJUworIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvRGVjSFY1NTM5LmdpZiI+NSw1Mzk8L2E+ICgyMDA1LTA5LTE5KSwKKyMgYWRvcHRlZCBieSB0aGUgc2FtZSBzdGF0ZXMgYXMgYmVmb3JlLgorUnVsZQlCcmF6aWwJMjAwNQlvbmx5CS0JT2N0CTE2CSAwOjAwCTE6MDAJUworIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvRGVjSFY1OTIwLmdpZiI+NSw5MjA8L2E+ICgyMDA2LTEwLTAzKSwKKyMgYWRvcHRlZCBieSB0aGUgc2FtZSBzdGF0ZXMgYXMgYmVmb3JlLgorUnVsZQlCcmF6aWwJMjAwNglvbmx5CS0JTm92CSA1CSAwOjAwCTE6MDAJUworUnVsZQlCcmF6aWwJMjAwNwlvbmx5CS0JRmViCTI1CSAwOjAwCTAJLQorIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvRGVjSFY2MjEyLmdpZiI+NiwyMTI8L2E+ICgyMDA3LTA5LTI2KSwKKyMgYWRvcHRlZCBieSB0aGUgc2FtZSBzdGF0ZXMgYXMgYmVmb3JlLgorUnVsZQlCcmF6aWwJMjAwNwlvbmx5CS0JT2N0CVN1bj49OAkgMDowMAkxOjAwCVMKKyMgRnJvbSBGcmVkZXJpY28gQS4gQy4gTmV2ZXMgKDIwMDgtMDktMTApOgorIyBBY29yZGluZyB0byB0aGlzIGRlY3JlZQorIyA8YSBocmVmPSJodHRwOi8vd3d3LnBsYW5hbHRvLmdvdi5ici9jY2l2aWxfMDMvX0F0bzIwMDctMjAxMC8yMDA4L0RlY3JldG8vRDY1NTguaHRtIj4KKyMgaHR0cDovL3d3dy5wbGFuYWx0by5nb3YuYnIvY2NpdmlsXzAzL19BdG8yMDA3LTIwMTAvMjAwOC9EZWNyZXRvL0Q2NTU4Lmh0bQorIyA8L2E+CisjIFt0XWhlIERTVCBwZXJpb2QgaW4gQnJhemlsIG5vdyBvbiB3aWxsIGJlIGZyb20gdGhlIDNyZCBPY3QgU3VuZGF5IHRvIHRoZQorIyAzcmQgRmViIFN1bmRheS4gVGhlcmUgaXMgYW4gZXhjZXB0aW9uIG9uIHRoZSByZXR1cm4gZGF0ZSB3aGVuIHRoaXMgaXMKKyMgdGhlIENhcm5pdmFsIFN1bmRheSB0aGVuIHRoZSByZXR1cm4gZGF0ZSB3aWxsIGJlIHRoZSBuZXh0IFN1bmRheS4uLgorUnVsZQlCcmF6aWwJMjAwOAltYXgJLQlPY3QJU3VuPj0xNQkwOjAwCTE6MDAJUworUnVsZQlCcmF6aWwJMjAwOAkyMDExCS0JRmViCVN1bj49MTUJMDowMAkwCS0KK1J1bGUJQnJhemlsCTIwMTIJb25seQktCUZlYglTdW4+PTIyCTA6MDAJMAktCitSdWxlCUJyYXppbAkyMDEzCTIwMTQJLQlGZWIJU3VuPj0xNQkwOjAwCTAJLQorUnVsZQlCcmF6aWwJMjAxNQlvbmx5CS0JRmViCVN1bj49MjIJMDowMAkwCS0KK1J1bGUJQnJhemlsCTIwMTYJMjAyMgktCUZlYglTdW4+PTE1CTA6MDAJMAktCitSdWxlCUJyYXppbAkyMDIzCW9ubHkJLQlGZWIJU3VuPj0yMgkwOjAwCTAJLQorUnVsZQlCcmF6aWwJMjAyNAkyMDI1CS0JRmViCVN1bj49MTUJMDowMAkwCS0KK1J1bGUJQnJhemlsCTIwMjYJb25seQktCUZlYglTdW4+PTIyCTA6MDAJMAktCitSdWxlCUJyYXppbAkyMDI3CTIwMzMJLQlGZWIJU3VuPj0xNQkwOjAwCTAJLQorUnVsZQlCcmF6aWwJMjAzNAlvbmx5CS0JRmViCVN1bj49MjIJMDowMAkwCS0KK1J1bGUJQnJhemlsCTIwMzUJMjAzNgktCUZlYglTdW4+PTE1CTA6MDAJMAktCitSdWxlCUJyYXppbAkyMDM3CW9ubHkJLQlGZWIJU3VuPj0yMgkwOjAwCTAJLQorIyBGcm9tIEFydGh1ciBEYXZpZCBPbHNvbiAoMjAwOC0wOS0yOSk6CisjIFRoZSBuZXh0IGlzIHdyb25nIGluIHNvbWUgeWVhcnMgYnV0IGlzIGJldHRlciB0aGFuIG5vdGhpbmcuCitSdWxlCUJyYXppbAkyMDM4CW1heAktCUZlYglTdW4+PTE1CTA6MDAJMAktCisKKyMgVGhlIGxhdGVzdCBydWxlc2V0IGxpc3RlZCBhYm92ZSBzYXlzIHRoYXQgdGhlIGZvbGxvd2luZyBzdGF0ZXMgb2JzZXJ2ZSBEU1Q6CisjIERGLCBFUywgR08sIE1HLCBNUywgTVQsIFBSLCBSSiwgUlMsIFNDLCBTUC4KKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorIworIyBGZXJuYW5kbyBkZSBOb3JvbmhhIChhZG1pbmlzdHJhdGl2ZWx5IHBhcnQgb2YgUEUpCitab25lIEFtZXJpY2EvTm9yb25oYQktMjowOTo0MCAtCUxNVAkxOTE0CisJCQktMjowMAlCcmF6aWwJRk4lc1QJMTk5MCBTZXAgMTcKKwkJCS0yOjAwCS0JRk5UCTE5OTkgU2VwIDMwCisJCQktMjowMAlCcmF6aWwJRk4lc1QJMjAwMCBPY3QgMTUKKwkJCS0yOjAwCS0JRk5UCTIwMDEgU2VwIDEzCisJCQktMjowMAlCcmF6aWwJRk4lc1QJMjAwMiBPY3QgIDEKKwkJCS0yOjAwCS0JRk5UCisjIE90aGVyIEF0bGFudGljIGlzbGFuZHMgaGF2ZSBubyBwZXJtYW5lbnQgc2V0dGxlbWVudC4KKyMgVGhlc2UgaW5jbHVkZSBUcmluZGFkZSBhbmQgTWFydGluIFZheiAoYWRtaW5pc3RyYXRpdmVseSBwYXJ0IG9mIEVTKSwKKyMgQXRvbCBkYXMgUm9jYXMgKFJOKSwgYW5kIFBlbmVkb3MgZGUgU2FvIFBlZHJvIGUgU2FvIFBhdWxvIChQRSkuCisjIEZlcm5hbmRvIGRlIE5vcm9uaGEgd2FzIGEgc2VwYXJhdGUgdGVycml0b3J5IGZyb20gMTk0Mi0wOS0wMiB0byAxOTg5LTAxLTAxOworIyBpdCBhbHNvIGluY2x1ZGVkIHRoZSBQZW5lZG9zLgorIworIyBBbWFwYSAoQVApLCBlYXN0IFBhcmEgKFBBKQorIyBFYXN0IFBhcmEgaW5jbHVkZXMgQmVsZW0sIE1hcmFiYSwgU2VycmEgTm9ydGUsIGFuZCBTYW8gRmVsaXggZG8gWGluZ3UuCisjIFRoZSBkaXZpc2lvbiBiZXR3ZWVuIGVhc3QgYW5kIHdlc3QgUGFyYSBpcyB0aGUgcml2ZXIgWGluZ3UuCisjIEluIHRoZSBub3J0aCBhIHZlcnkgc21hbGwgcGFydCBmcm9tIHRoZSByaXZlciBKYXZhcnkgKG5vdyBKYXJpIEkgZ3Vlc3MsCisjIHRoZSBib3JkZXIgd2l0aCBBbWFwYSkgdG8gdGhlIEFtYXpvbiwgdGhlbiB0byB0aGUgWGluZ3UuCitab25lIEFtZXJpY2EvQmVsZW0JLTM6MTM6NTYgLQlMTVQJMTkxNAorCQkJLTM6MDAJQnJhemlsCUJSJXNUCTE5ODggU2VwIDEyCisJCQktMzowMAktCUJSVAorIworIyB3ZXN0IFBhcmEgKFBBKQorIyBXZXN0IFBhcmEgaW5jbHVkZXMgQWx0YW1pcmEsIE9yaWJpZG9zLCBQcmFpbmhhLCBPcml4aW1pbmEsIGFuZCBTYW50YXJlbS4KK1pvbmUgQW1lcmljYS9TYW50YXJlbQktMzozODo0OCAtCUxNVAkxOTE0CisJCQktNDowMAlCcmF6aWwJQU0lc1QJMTk4OCBTZXAgMTIKKwkJCS00OjAwCS0JQU1UCTIwMDggSnVuIDI0IDAwOjAwCisJCQktMzowMAktCUJSVAorIworIyBNYXJhbmhhbyAoTUEpLCBQaWF1aSAoUEkpLCBDZWFyYSAoQ0UpLCBSaW8gR3JhbmRlIGRvIE5vcnRlIChSTiksCisjIFBhcmFpYmEgKFBCKQorWm9uZSBBbWVyaWNhL0ZvcnRhbGV6YQktMjozNDowMCAtCUxNVAkxOTE0CisJCQktMzowMAlCcmF6aWwJQlIlc1QJMTk5MCBTZXAgMTcKKwkJCS0zOjAwCS0JQlJUCTE5OTkgU2VwIDMwCisJCQktMzowMAlCcmF6aWwJQlIlc1QJMjAwMCBPY3QgMjIKKwkJCS0zOjAwCS0JQlJUCTIwMDEgU2VwIDEzCisJCQktMzowMAlCcmF6aWwJQlIlc1QJMjAwMiBPY3QgIDEKKwkJCS0zOjAwCS0JQlJUCisjCisjIFBlcm5hbWJ1Y28gKFBFKSAoZXhjZXB0IEF0bGFudGljIGlzbGFuZHMpCitab25lIEFtZXJpY2EvUmVjaWZlCS0yOjE5OjM2IC0JTE1UCTE5MTQKKwkJCS0zOjAwCUJyYXppbAlCUiVzVAkxOTkwIFNlcCAxNworCQkJLTM6MDAJLQlCUlQJMTk5OSBTZXAgMzAKKwkJCS0zOjAwCUJyYXppbAlCUiVzVAkyMDAwIE9jdCAxNQorCQkJLTM6MDAJLQlCUlQJMjAwMSBTZXAgMTMKKwkJCS0zOjAwCUJyYXppbAlCUiVzVAkyMDAyIE9jdCAgMQorCQkJLTM6MDAJLQlCUlQKKyMKKyMgVG9jYW50aW5zIChUTykKK1pvbmUgQW1lcmljYS9BcmFndWFpbmEJLTM6MTI6NDggLQlMTVQJMTkxNAorCQkJLTM6MDAJQnJhemlsCUJSJXNUCTE5OTAgU2VwIDE3CisJCQktMzowMAktCUJSVAkxOTk1IFNlcCAxNAorCQkJLTM6MDAJQnJhemlsCUJSJXNUCTIwMDMgU2VwIDI0CisJCQktMzowMAktCUJSVAorIworIyBBbGFnb2FzIChBTCksIFNlcmdpcGUgKFNFKQorWm9uZSBBbWVyaWNhL01hY2VpbwktMjoyMjo1MiAtCUxNVAkxOTE0CisJCQktMzowMAlCcmF6aWwJQlIlc1QJMTk5MCBTZXAgMTcKKwkJCS0zOjAwCS0JQlJUCTE5OTUgT2N0IDEzCisJCQktMzowMAlCcmF6aWwJQlIlc1QJMTk5NiBTZXAgIDQKKwkJCS0zOjAwCS0JQlJUCTE5OTkgU2VwIDMwCisJCQktMzowMAlCcmF6aWwJQlIlc1QJMjAwMCBPY3QgMjIKKwkJCS0zOjAwCS0JQlJUCTIwMDEgU2VwIDEzCisJCQktMzowMAlCcmF6aWwJQlIlc1QJMjAwMiBPY3QgIDEKKwkJCS0zOjAwCS0JQlJUCisjCisjIEJhaGlhIChCQSkKKyMgVGhlcmUgYXJlIHRvbyBtYW55IFNhbHZhZG9ycyBlbHNld2hlcmUsIHNvIHVzZSBBbWVyaWNhL0JhaGlhIGluc3RlYWQKKyMgb2YgQW1lcmljYS9TYWx2YWRvci4KK1pvbmUgQW1lcmljYS9CYWhpYQktMjozNDowNCAtCUxNVAkxOTE0CisJCQktMzowMAlCcmF6aWwJQlIlc1QJMjAwMyBTZXAgMjQKKwkJCS0zOjAwCS0JQlJUCisjCisjIEdvaWFzIChHTyksIERpc3RyaXRvIEZlZGVyYWwgKERGKSwgTWluYXMgR2VyYWlzIChNRyksCisjIEVzcGlyaXRvIFNhbnRvIChFUyksIFJpbyBkZSBKYW5laXJvIChSSiksIFNhbyBQYXVsbyAoU1ApLCBQYXJhbmEgKFBSKSwKKyMgU2FudGEgQ2F0YXJpbmEgKFNDKSwgUmlvIEdyYW5kZSBkbyBTdWwgKFJTKQorWm9uZSBBbWVyaWNhL1Nhb19QYXVsbwktMzowNjoyOCAtCUxNVAkxOTE0CisJCQktMzowMAlCcmF6aWwJQlIlc1QJMTk2MyBPY3QgMjMgMDA6MDAKKwkJCS0zOjAwCTE6MDAJQlJTVAkxOTY0CisJCQktMzowMAlCcmF6aWwJQlIlc1QKKyMKKyMgTWF0byBHcm9zc28gZG8gU3VsIChNUykKK1pvbmUgQW1lcmljYS9DYW1wb19HcmFuZGUgLTM6Mzg6MjggLQlMTVQJMTkxNAorCQkJLTQ6MDAJQnJhemlsCUFNJXNUCisjCisjIE1hdG8gR3Jvc3NvIChNVCkKK1pvbmUgQW1lcmljYS9DdWlhYmEJLTM6NDQ6MjAgLQlMTVQJMTkxNAorCQkJLTQ6MDAJQnJhemlsCUFNJXNUCTIwMDMgU2VwIDI0CisJCQktNDowMAktCUFNVAkyMDA0IE9jdCAgMQorCQkJLTQ6MDAJQnJhemlsCUFNJXNUCisjCisjIFJvbmRvbmlhIChSTykKK1pvbmUgQW1lcmljYS9Qb3J0b19WZWxobyAtNDoxNTozNiAtCUxNVAkxOTE0CisJCQktNDowMAlCcmF6aWwJQU0lc1QJMTk4OCBTZXAgMTIKKwkJCS00OjAwCS0JQU1UCisjCisjIFJvcmFpbWEgKFJSKQorWm9uZSBBbWVyaWNhL0JvYV9WaXN0YQktNDowMjo0MCAtCUxNVAkxOTE0CisJCQktNDowMAlCcmF6aWwJQU0lc1QJMTk4OCBTZXAgMTIKKwkJCS00OjAwCS0JQU1UCTE5OTkgU2VwIDMwCisJCQktNDowMAlCcmF6aWwJQU0lc1QJMjAwMCBPY3QgMTUKKwkJCS00OjAwCS0JQU1UCisjCisjIGVhc3QgQW1hem9uYXMgKEFNKTogQm9jYSBkbyBBY3JlLCBKdXRhaSwgTWFuYXVzLCBGbG9yaWFubyBQZWl4b3RvCisjIFRoZSBncmVhdCBjaXJjbGUgbGluZSBmcm9tIFRhYmF0aW5nYSB0byBQb3J0byBBY3JlIGRpdmlkZXMKKyMgZWFzdCBmcm9tIHdlc3QgQW1hem9uYXMuCitab25lIEFtZXJpY2EvTWFuYXVzCS00OjAwOjA0IC0JTE1UCTE5MTQKKwkJCS00OjAwCUJyYXppbAlBTSVzVAkxOTg4IFNlcCAxMgorCQkJLTQ6MDAJLQlBTVQJMTk5MyBTZXAgMjgKKwkJCS00OjAwCUJyYXppbAlBTSVzVAkxOTk0IFNlcCAyMgorCQkJLTQ6MDAJLQlBTVQKKyMKKyMgd2VzdCBBbWF6b25hcyAoQU0pOiBBdGFsYWlhIGRvIE5vcnRlLCBCb2NhIGRvIE1hb2NvLCBCZW5qYW1pbiBDb25zdGFudCwKKyMJRWlydW5lcGUsIEVudmlyYSwgSXBpeHVuYQorWm9uZSBBbWVyaWNhL0VpcnVuZXBlCS00OjM5OjI4IC0JTE1UCTE5MTQKKwkJCS01OjAwCUJyYXppbAlBQyVzVAkxOTg4IFNlcCAxMgorCQkJLTU6MDAJLQlBQ1QJMTk5MyBTZXAgMjgKKwkJCS01OjAwCUJyYXppbAlBQyVzVAkxOTk0IFNlcCAyMgorCQkJLTU6MDAJLQlBQ1QJMjAwOCBKdW4gMjQgMDA6MDAKKwkJCS00OjAwCS0JQU1UCisjCisjIEFjcmUgKEFDKQorWm9uZSBBbWVyaWNhL1Jpb19CcmFuY28JLTQ6MzE6MTIgLQlMTVQJMTkxNAorCQkJLTU6MDAJQnJhemlsCUFDJXNUCTE5ODggU2VwIDEyCisJCQktNTowMAktCUFDVAkyMDA4IEp1biAyNCAwMDowMAorCQkJLTQ6MDAJLQlBTVQKKworIyBDaGlsZQorCisjIEZyb20gRWR1YXJkbyBLcmVsbCAoMTk5NS0xMC0xOSk6CisjIFRoZSBsYXcgc2F5cyB0byBzd2l0Y2ggdG8gRFNUIGF0IG1pZG5pZ2h0IFsyNDowMF0gb24gdGhlIHNlY29uZCBTQVRVUkRBWQorIyBvZiBPY3RvYmVyLi4uLiAgVGhlIGxhdyBpcyB0aGUgc2FtZSBmb3IgTWFyY2ggYW5kIE9jdG9iZXIuCisjICgxOTk4LTA5LTI5KToKKyMgQmVjYXVzZSBvZiB0aGUgZHJvdWdodCB0aGlzIHllYXIsIHRoZSBnb3Zlcm5tZW50IGRlY2lkZWQgdG8gZ28gaW50bworIyBEU1QgZWFybGllciAoc2F0dXJkYXkgOS8yNiBhdCAyNDowMCkuIFRoaXMgaXMgYSBvbmUtdGltZSBjaGFuZ2Ugb25seSAuLi4KKyMgKHVubGVzcyB0aGVyZSdzIGFub3RoZXIgZHJ5IHNlYXNvbiBuZXh0IHllYXIsIEkgZ3Vlc3MpLgorCisjIEZyb20gSnVsaW8gSS4gUGFjaGVjbyBUcm9uY29zbyAoMTk5OS0wMy0xOCk6CisjIEJlY2F1c2Ugb2YgdGhlIHNhbWUgZHJvdWdodCwgdGhlIGdvdmVybm1lbnQgZGVjaWRlZCB0byBlbmQgRFNUIGxhdGVyLAorIyBvbiBBcHJpbCAzLCAob25lLXRpbWUgY2hhbmdlKS4KKworIyBGcm9tIE9zY2FyIHZhbiBWbGlqbWVuICgyMDA2LTEwLTA4KToKKyMgaHR0cDovL3d3dy5ob3Jhb2ZpY2lhbC5jbC9jYW1iaW8uaHRtCisKKyMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDYtMTAtMDgpOgorIyBJIHRoaW5rIHRoYXQgdGhlcmUgYXJlIHNvbWUgb2J2aW91cyBtaXN0YWtlcyBpbiB0aGUgc3VnZ2VzdGVkIGxpbmsKKyMgZnJvbSBPc2NhciB2YW4gVmxpam1lbiwuLi4gZm9yIGluc3RhbmNlIGVudHJ5IDY2IHNheXMgdGhhdCBHTVQtNAorIyBlbmRlZCAxOTkwLTA5LTEyIHdoaWxlIGVudHJ5IDY3IG9ubHkgYmVnaW5zIEdNVC0zIGF0IDE5OTAtMDktMTUKKyMgKHRoZXkgc2hvdWxkIGhhdmUgYmVlbiAxOTkwLTA5LTE1IGFuZCAxOTkwLTA5LTE2IHJlc3BlY3RpdmVseSksIGJ1dAorIyBhbnlob3cgaXQgY2xlYXJzIHVwIHNvbWUgZG91YnRzIHRvby4KKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTEyLTI3KToKKyMgVGhlIGZvbGxvd2luZyBkYXRhIGZvciBDaGlsZSBhbmQgQW1lcmljYS9TYW50aWFnbyBhcmUgZnJvbQorIyA8aHR0cDovL3d3dy5ob3Jhb2ZpY2lhbC5jbC9ob3Jhb2YuaHRtPiAoMjAwNi0wOS0yMCksIHRyYW5zY3JpYmVkIGJ5CisjIEplc3BlciBOb3JnYWFyZCBXZWxlbi4gIFRoZSBkYXRhIGZvciBQYWNpZmljL0Vhc3RlciBhcmUgZnJvbSBTaGFua3MKKyMgJiBQb3R0ZW5nZXIsIGV4Y2VwdCB3aXRoIERTVCB0cmFuc2l0aW9ucyBhZnRlciAxOTMyIGNsb25lZCBmcm9tCisjIEFtZXJpY2EvU2FudGlhZ28uICBUaGUgcHJlLTE5ODAgUGFjaWZpYy9FYXN0ZXIgZGF0YSBhcmUgZHViaW91cywKKyMgYnV0IHdlIGhhdmUgbm8gb3RoZXIgc291cmNlLgorCisjIEZyb20gR2VybWFuIFBvby1DYWFtYW5+byAoMjAwOC0wMy0wMyk6CisjIER1ZSB0byBkcm91Z2h0LCBDaGlsZSBleHRlbmRzIERheWxpZ2h0IFRpbWUgaW4gdGhyZWUgd2Vla3MuICBUaGlzCisjIGlzIG9uZS10aW1lIGNoYW5nZSAoU2F0dXJkYXkgMy8yOSBhdCAyNDowMCBmb3IgQW1lcmljYS9TYW50aWFnbworIyBhbmQgU2F0dXJkYXkgMy8yOSBhdCAyMjowMCBmb3IgUGFjaWZpYy9FYXN0ZXIpCisjIFRoZSBTdXByZW1lIERlY3JlZSBpcyBsb2NhdGVkIGF0IAorIyA8YSBocmVmPSJodHRwOi8vd3d3LnNob2EuY2wvc2VydmljaW9zL3N1cHJlbW8zMTYucGRmIj4KKyMgaHR0cDovL3d3dy5zaG9hLmNsL3NlcnZpY2lvcy9zdXByZW1vMzE2LnBkZgorIyA8L2E+CisjIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGZvciAyMDA4IGFyZSBsb2NhdGVkIGluOgorIyA8YSBocmVmPSJodHRwOi8vd3d3LmhvcmFvZmljaWFsLmNsL2NhbWJpby5odG0iPgorIyBodHRwOi8vd3d3LmhvcmFvZmljaWFsLmNsL2NhbWJpby5odG0KKyMgPC9hPi4KKworIyBGcm9tIEpvc2UgTWlndWVsIEdhcnJpZG8gKDIwMDgtMDMtMDUpOgorIyAuLi4KKyMgWW91IGNvdWxkIHNlZSB0aGUgYW5ub3VuY2VzIG9mIHRoZSBjaGFuZ2Ugb24gCisjIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2hvYS5jbC9ub3RpY2lhcy8yMDA4LzA0aG9yYS9ob3JhLmh0bSI+CisjIGh0dHA6Ly93d3cuc2hvYS5jbC9ub3RpY2lhcy8yMDA4LzA0aG9yYS9ob3JhLmh0bQorIyA8L2E+LgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlDaGlsZQkxOTI3CTE5MzIJLQlTZXAJIDEJMDowMAkxOjAwCVMKK1J1bGUJQ2hpbGUJMTkyOAkxOTMyCS0JQXByCSAxCTA6MDAJMAktCitSdWxlCUNoaWxlCTE5NDIJb25seQktCUp1bgkgMQk0OjAwdQkwCS0KK1J1bGUJQ2hpbGUJMTk0Mglvbmx5CS0JQXVnCSAxCTU6MDB1CTE6MDAJUworUnVsZQlDaGlsZQkxOTQ2CW9ubHkJLQlKdWwJMTUJNDowMHUJMTowMAlTCitSdWxlCUNoaWxlCTE5NDYJb25seQktCVNlcAkgMQkzOjAwdQkwOjAwCS0KK1J1bGUJQ2hpbGUJMTk0Nwlvbmx5CS0JQXByCSAxCTQ6MDB1CTAJLQorUnVsZQlDaGlsZQkxOTY4CW9ubHkJLQlOb3YJIDMJNDowMHUJMTowMAlTCitSdWxlCUNoaWxlCTE5NjkJb25seQktCU1hcgkzMAkzOjAwdQkwCS0KK1J1bGUJQ2hpbGUJMTk2OQlvbmx5CS0JTm92CTIzCTQ6MDB1CTE6MDAJUworUnVsZQlDaGlsZQkxOTcwCW9ubHkJLQlNYXIJMjkJMzowMHUJMAktCitSdWxlCUNoaWxlCTE5NzEJb25seQktCU1hcgkxNAkzOjAwdQkwCS0KK1J1bGUJQ2hpbGUJMTk3MAkxOTcyCS0JT2N0CVN1bj49OQk0OjAwdQkxOjAwCVMKK1J1bGUJQ2hpbGUJMTk3MgkxOTg2CS0JTWFyCVN1bj49OQkzOjAwdQkwCS0KK1J1bGUJQ2hpbGUJMTk3Mwlvbmx5CS0JU2VwCTMwCTQ6MDB1CTE6MDAJUworUnVsZQlDaGlsZQkxOTc0CTE5ODcJLQlPY3QJU3VuPj05CTQ6MDB1CTE6MDAJUworUnVsZQlDaGlsZQkxOTg3CW9ubHkJLQlBcHIJMTIJMzowMHUJMAktCitSdWxlCUNoaWxlCTE5ODgJMTk4OQktCU1hcglTdW4+PTkJMzowMHUJMAktCitSdWxlCUNoaWxlCTE5ODgJb25seQktCU9jdAlTdW4+PTEJNDowMHUJMTowMAlTCitSdWxlCUNoaWxlCTE5ODkJb25seQktCU9jdAlTdW4+PTkJNDowMHUJMTowMAlTCitSdWxlCUNoaWxlCTE5OTAJb25seQktCU1hcgkxOAkzOjAwdQkwCS0KK1J1bGUJQ2hpbGUJMTk5MAlvbmx5CS0JU2VwCTE2CTQ6MDB1CTE6MDAJUworUnVsZQlDaGlsZQkxOTkxCTE5OTYJLQlNYXIJU3VuPj05CTM6MDB1CTAJLQorUnVsZQlDaGlsZQkxOTkxCTE5OTcJLQlPY3QJU3VuPj05CTQ6MDB1CTE6MDAJUworUnVsZQlDaGlsZQkxOTk3CW9ubHkJLQlNYXIJMzAJMzowMHUJMAktCitSdWxlCUNoaWxlCTE5OTgJb25seQktCU1hcglTdW4+PTkJMzowMHUJMAktCitSdWxlCUNoaWxlCTE5OTgJb25seQktCVNlcAkyNwk0OjAwdQkxOjAwCVMKK1J1bGUJQ2hpbGUJMTk5OQlvbmx5CS0JQXByCSA0CTM6MDB1CTAJLQorUnVsZQlDaGlsZQkxOTk5CW1heAktCU9jdAlTdW4+PTkJNDowMHUJMTowMAlTCitSdWxlCUNoaWxlCTIwMDAJMjAwNwktCU1hcglTdW4+PTkJMzowMHUJMAktCisjIE4uQi46IHRoZSBlbmQgb2YgTWFyY2ggMjkgaW4gQ2hpbGUgaXMgTWFyY2ggMzAgaW4gVW5pdmVyc2FsIHRpbWUsCisjIHdoaWNoIGlzIHVzZWQgYmVsb3cgaW4gc3BlY2lmeWluZyB0aGUgdHJhbnNpdGlvbi4KK1J1bGUJQ2hpbGUJMjAwOAlvbmx5CS0JTWFyCTMwCTM6MDB1CTAJLQorUnVsZQlDaGlsZQkyMDA5CW1heAktCU1hcglTdW4+PTkJMzowMHUJMAktCisjIElBVEEgU1NJTSBhbm9tYWxpZXM6ICgxOTkyLTAyKSBzYXlzIDE5OTItMDMtMTQ7CisjICgxOTk2LTA5KSBzYXlzIDE5OTgtMDMtMDguICBJZ25vcmUgdGhlc2UuCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvU2FudGlhZ28JLTQ6NDI6NDYgLQlMTVQJMTg5MAorCQkJLTQ6NDI6NDYgLQlTTVQJMTkxMCAJICAgICMgU2FudGlhZ28gTWVhbiBUaW1lCisJCQktNTowMAktCUNMVAkxOTE2IEp1bCAgMSAjIENoaWxlIFRpbWUKKwkJCS00OjQyOjQ2IC0JU01UCTE5MTggU2VwICAxICMgU2FudGlhZ28gTWVhbiBUaW1lCisJCQktNDowMAktCUNMVAkxOTE5IEp1bCAgMSAjIENoaWxlIFRpbWUKKwkJCS00OjQyOjQ2IC0JU01UCTE5MjcgU2VwICAxICMgU2FudGlhZ28gTWVhbiBUaW1lCisJCQktNTowMAlDaGlsZQlDTCVzVAkxOTQ3IE1heSAyMiAjIENoaWxlIFRpbWUKKwkJCS00OjAwCUNoaWxlCUNMJXNUCitab25lIFBhY2lmaWMvRWFzdGVyCS03OjE3OjQ0IC0JTE1UCTE4OTAKKwkJCS03OjE3OjI4IC0JRU1UCTE5MzIgU2VwICAgICMgRWFzdGVyIE1lYW4gVGltZQorCQkJLTc6MDAJQ2hpbGUJRUFTJXNUCTE5ODIgTWFyIDEzIDIxOjAwICMgRWFzdGVyIEkgVGltZQorCQkJLTY6MDAJQ2hpbGUJRUFTJXNUCisjCisjIFNhbGEgeSBHb21leiBJc2xhbmQgaXMgbGlrZSBQYWNpZmljL0Vhc3Rlci4KKyMgT3RoZXIgQ2hpbGVhbiBsb2NhdGlvbnMsIGluY2x1ZGluZyBKdWFuIEZlcm5hbmRleiBJcywgU2FuIEFtYnJvc2lvLAorIyBTYW4gRmVsaXgsIGFuZCBBbnRhcmN0aWMgYmFzZXMsIGFyZSBsaWtlIEFtZXJpY2EvU2FudGlhZ28uCisKKyMgQ29sb21iaWEKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUNPCTE5OTIJb25seQktCU1heQkgMwkwOjAwCTE6MDAJUworUnVsZQlDTwkxOTkzCW9ubHkJLQlBcHIJIDQJMDowMAkwCS0KKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQW1lcmljYS9Cb2dvdGEJLTQ6NTY6MjAgLQlMTVQJMTg4NCBNYXIgMTMKKwkJCS00OjU2OjIwIC0JQk1UCTE5MTQgTm92IDIzICMgQm9nb3RhIE1lYW4gVGltZQorCQkJLTU6MDAJQ08JQ08lc1QJIyBDb2xvbWJpYSBUaW1lCisjIE1hbHBlbG8sIFByb3ZpZGVuY2lhLCBTYW4gQW5kcmVzCisjIG5vIGluZm9ybWF0aW9uOyBwcm9iYWJseSBsaWtlIEFtZXJpY2EvQm9nb3RhCisKKyMgQ3VyYWNhbworIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgU2hhbmtzICYgUG90dGVuZ2VyIHNheSB0aGF0IFRoZSBCb3R0b20gYW5kIFBoaWxpcHNidXJnIGhhdmUgYmVlbiBhdAorIyAtNDowMCBzaW5jZSBzdGFuZGFyZCB0aW1lIHdhcyBpbnRyb2R1Y2VkIG9uIDE5MTItMDMtMDI7IGFuZCB0aGF0CisjIEtyYWxlbmRpamsgYW5kIFJpbmNvbiB1c2VkIEtyYWxlbmRpamsgTWVhbiBUaW1lICgtNDozMzowOCkgZnJvbQorIyAxOTEyLTAyLTAyIHRvIDE5NjUtMDEtMDEuICBUaGUgZm9ybWVyIGlzIGR1YmlvdXMsIHNpbmNlIFMmUCBhbHNvIHNheQorIyBTYWJhIElzbGFuZCBoYXMgYmVlbiBsaWtlIEN1cmFjYW8uCisjIFRoaXMgYWxsIHByZWRhdGVzIG91ciAxOTcwIGN1dG9mZiwgdGhvdWdoLgorIworIyBCeSBKdWx5IDIwMDcgQ3VyYWNhbyBhbmQgU3QgTWFhcnRlbiBhcmUgcGxhbm5lZCB0byBiZWNvbWUKKyMgYXNzb2NpYXRlZCBzdGF0ZXMgd2l0aGluIHRoZSBOZXRoZXJsYW5kcywgbXVjaCBsaWtlIEFydWJhOworIyBCb25haXJlLCBTYWJhIGFuZCBTdCBFdXN0YXRpdXMgd291bGQgYmVjb21lIGRpcmVjdGx5IHBhcnQgb2YgdGhlCisjIE5ldGhlcmxhbmRzIGFzIEtpbmdkb20gSXNsYW5kcy4gIFRoaXMgd29uJ3QgYWZmZWN0IHRoZWlyIHRpbWUgem9uZXMKKyMgdGhvdWdoLCBhcyBmYXIgYXMgd2Uga25vdy4KKyMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQW1lcmljYS9DdXJhY2FvCS00OjM1OjQ0IC0JTE1UCTE5MTIgRmViIDEyCSMgV2lsbGVtc3RhZAorCQkJLTQ6MzAJLQlBTlQJMTk2NSAjIE5ldGhlcmxhbmRzIEFudGlsbGVzIFRpbWUKKwkJCS00OjAwCS0JQVNUCisKKyMgRWN1YWRvcgorIworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA3LTAzLTA0KToKKyMgQXBwYXJlbnRseSBFY3VhZG9yIGhhZCBhIGZhaWxlZCBleHBlcmltZW50IHdpdGggRFNUIGluIDE5OTIuCisjIDxodHRwOi8vbWlkZW5hLmdvdi5lYy9jb250ZW50L3ZpZXcvMTI2MS8yMDgvPiAoMjAwNy0wMi0yNykgYW5kCisjIDxodHRwOi8vd3d3LmhveS5jb20uZWMvTm90aWNpYU51ZS5hc3A/cm93X2lkPTI0OTg1Nj4gKDIwMDYtMTEtMDYpIGJvdGgKKyMgdGFsayBhYm91dCAiaG9yYSBTaXh0byIuICBMZWF2ZSB0aGlzIGFsb25lIGZvciBub3csIGFzIHdlIGhhdmUgbm8gZGF0YS4KKyMKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9HdWF5YXF1aWwJLTU6MTk6MjAgLQlMTVQJMTg5MAorCQkJLTU6MTQ6MDAgLQlRTVQJMTkzMSAjIFF1aXRvIE1lYW4gVGltZQorCQkJLTU6MDAJLQlFQ1QJICAgICAjIEVjdWFkb3IgVGltZQorWm9uZSBQYWNpZmljL0dhbGFwYWdvcwktNTo1ODoyNCAtCUxNVAkxOTMxICMgUHVlcnRvIEJhcXVlcml6byBNb3Jlbm8KKwkJCS01OjAwCS0JRUNUCTE5ODYKKwkJCS02OjAwCS0JR0FMVAkgICAgICMgR2FsYXBhZ29zIFRpbWUKKworIyBGYWxrbGFuZHMKKworIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKKyMgQmV0d2VlbiAxOTkwIGFuZCAyMDAwIGluY2x1c2l2ZSwgU2hhbmtzICYgUG90dGVuZ2VyIGFuZCB0aGUgSUFUQSBhZ3JlZSBleGNlcHQKKyMgdGhlIElBVEEgZ2l2ZXMgMTk5Ni0wOS0wOC4gIEdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorCisjIEZyb20gRmFsa2xhbmQgSXNsYW5kcyBHb3Zlcm5tZW50IE9mZmljZSwgTG9uZG9uICgyMDAxLTAxLTIyKQorIyB2aWEgSmVzcGVyIE5vcmdhYXJkOgorIyAuLi4gdGhlIGNsb2NrcyByZXZlcnQgYmFjayB0byBMb2NhbCBNZWFuIFRpbWUgYXQgMiBhbSBvbiBTdW5kYXkgMTUKKyMgQXByaWwgMjAwMSBhbmQgYWR2YW5jZSBvbmUgaG91ciB0byBzdW1tZXIgdGltZSBhdCAyIGFtIG9uIFN1bmRheSAyCisjIFNlcHRlbWJlci4gIEl0IGlzIGFudGljaXBhdGVkIHRoYXQgdGhlIGNsb2NrcyB3aWxsIHJldmVydCBiYWNrIGF0IDIKKyMgYW0gb24gU3VuZGF5IDIxIEFwcmlsIDIwMDIgYW5kIGFkdmFuY2UgdG8gc3VtbWVyIHRpbWUgYXQgMiBhbSBvbgorIyBTdW5kYXkgMSBTZXB0ZW1iZXIuCisKKyMgRnJvbSBSaXZlcyBNY0RvdyAoMjAwMS0wMi0xMyk6CisjCisjIEkgaGF2ZSBjb21tdW5pY2F0ZWQgc2V2ZXJhbCB0aW1lcyB3aXRoIHBlb3BsZSB0aGVyZSwgYW5kIHRoZSBsYXN0CisjIHRpbWUgSSBoYWQgY29tbXVuaWNhdGlvbnMgdGhhdCB3YXMgaGVscGZ1bCB3YXMgaW4gMTk5OC4gIEhlcmUgaXMKKyMgd2hhdCB3YXMgc2FpZCB0aGVuOgorIworIyAiVGhlIGdlbmVyYWwgcnVsZSB3YXMgdGhhdCBTdGFubGV5IHVzZWQgZGF5bGlnaHQgc2F2aW5nIGFuZCB0aGUgQ2FtcAorIyBkaWQgbm90LiBIb3dldmVyIGZvciB2YXJpb3VzIHJlYXNvbnMgbWFueSBwZW9wbGUgaW4gdGhlIENhbXAgaGF2ZQorIyBzdGFydGVkIHRvIHVzZSBkYXlsaWdodCBzYXZpbmcgKGtub3duIGxvY2FsbHkgYXMgJ1N0YW5sZXkgVGltZScpCisjIFRoZXJlIGlzIG5vIHJ1bGUgYXMgdG8gd2hvIHVzZXMgZGF5bGlnaHQgc2F2aW5nIC0gaXQgaXMgYSBtYXR0ZXIgb2YKKyMgcGVyc29uYWwgY2hvaWNlIGFuZCBzbyBpdCBpcyBpbXBvc3NpYmxlIHRvIGRyYXcgYSBtYXAgc2hvd2luZyB3aG8KKyMgdXNlcyBpdCBhbmQgd2hvIGRvZXMgbm90LiBBbnkgbGlzdCB3b3VsZCBiZSBvdXQgb2YgZGF0ZSBhcyBzb29uIGFzCisjIGl0IHdhcyBwcm9kdWNlZC4gVGhpcyB5ZWFyIGRheWxpZ2h0IHNhdmluZyBlbmRlZCBvbiBBcHJpbCAxOC8xOXRoCisjIGFuZCBzdGFydGVkIGFnYWluIG9uIFNlcHRlbWJlciAxMi8xM3RoLiAgSSBkbyBub3Qga25vdyB3aGF0IHRoZSBydWxlCisjIGlzLCBidXQgY2FuIGZpbmQgb3V0IGlmIHlvdSBsaWtlLiAgV2UgZG8gbm90IGNoYW5nZSBhdCB0aGUgc2FtZSB0aW1lCisjIGFzIFVLIG9yIENoaWxlLiIKKyMKKyMgSSBkaWQgaGF2ZSBpbiBteSBub3RlcyB0aGF0IHRoZSBydWxlIHdhcyAiU2Vjb25kIFNhdHVyZGF5IGluIFNlcCBhdAorIyAwOjAwIHVudGlsIHRoaXJkIFNhdHVyZGF5IGluIEFwciBhdCAwOjAwIi4gIEkgdGhpbmsgdGhhdCB0aGlzIGRvZXMKKyMgbm90IGFncmVlIGluIHNvbWUgY2FzZXMgd2l0aCBTaGFua3M7IGlzIHRoaXMgdHJ1ZT8KKyMKKyMgQWxzbywgdGhlcmUgaXMgbm8gbWVudGlvbiBpbiB0aGUgbGlzdCB0aGF0IHNvbWUgYXJlYXMgaW4gdGhlCisjIEZhbGtsYW5kcyBkbyBub3QgdXNlIERTVC4gIEkgaGF2ZSBmb3VuZCBpbiBteSBjb21tdW5pY2F0aW9ucyB0aGVyZQorIyB0aGF0IHRoZXNlIGFyZWFzIGFyZSBvbiB0aGUgd2VzdGVybiBoYWxmIG9mIEVhc3QgRmFsa2xhbmQgYW5kIGFsbCBvZgorIyBXZXN0IEZhbGtsYW5kLiAgU3RhbmxleSBpcyB0aGUgb25seSBwbGFjZSB0aGF0IGNvbnNpc3RlbnRseSBvYnNlcnZlcworIyBEU1QuICBBZ2FpbiwgYXMgaW4gb3RoZXIgcGxhY2VzIGluIHRoZSB3b3JsZCwgdGhlIGZhcm1lcnMgZG9uJ3QgbGlrZQorIyBpdC4gIFdlc3QgRmFsa2xhbmQgaXMgYWxtb3N0IGVudGlyZWx5IHNoZWVwIGZhcm1lcnMuCisjCisjIEkga25vdyBvbmUgbGFkeSB0aGVyZSB0aGF0IGtlZXBzIGEgbGlzdCBvZiB3aGljaCBmYXJtIGtlZXBzIERTVCBhbmQKKyMgd2hpY2ggZG9lc24ndCBlYWNoIHllYXIuICBTaGUgcnVucyBhIHNob3AgaW4gU3RhbmxleSwgYW5kIHNheXMgdGhhdAorIyB0aGUgbGlzdCBjaGFuZ2VzIGVhY2ggeWVhci4gIFNoZSB1c2VzIGl0IHRvIGNvbW11bmljYXRlIHRvIGhlcgorIyBjdXN0b21lcnMsIGNhdGNoaW5nIHRoZW0gd2hlbiB0aGV5IGFyZSBob21lIGZvciBsdW5jaCBvciBkaW5uZXIuCisKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMS0wMy0wNSk6CisjIEZvciBub3csIHdlJ2xsIGp1c3QgcmVjb3JkIHRoZSB0aW1lIGluIFN0YW5sZXksIHNpbmNlIHdlIGhhdmUgbm8KKyMgYmV0dGVyIGluZm8uCisKKyMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TCitSdWxlCUZhbGsJMTkzNwkxOTM4CS0JU2VwCWxhc3RTdW4JMDowMAkxOjAwCVMKK1J1bGUJRmFsawkxOTM4CTE5NDIJLQlNYXIJU3VuPj0xOQkwOjAwCTAJLQorUnVsZQlGYWxrCTE5MzkJb25seQktCU9jdAkxCTA6MDAJMTowMAlTCitSdWxlCUZhbGsJMTk0MAkxOTQyCS0JU2VwCWxhc3RTdW4JMDowMAkxOjAwCVMKK1J1bGUJRmFsawkxOTQzCW9ubHkJLQlKYW4JMQkwOjAwCTAJLQorUnVsZQlGYWxrCTE5ODMJb25seQktCVNlcAlsYXN0U3VuCTA6MDAJMTowMAlTCitSdWxlCUZhbGsJMTk4NAkxOTg1CS0JQXByCWxhc3RTdW4JMDowMAkwCS0KK1J1bGUJRmFsawkxOTg0CW9ubHkJLQlTZXAJMTYJMDowMAkxOjAwCVMKK1J1bGUJRmFsawkxOTg1CTIwMDAJLQlTZXAJU3VuPj05CTA6MDAJMTowMAlTCitSdWxlCUZhbGsJMTk4NgkyMDAwCS0JQXByCVN1bj49MTYJMDowMAkwCS0KK1J1bGUJRmFsawkyMDAxCW1heAktCUFwcglTdW4+PTE1CTI6MDAJMAktCitSdWxlCUZhbGsJMjAwMQltYXgJLQlTZXAJU3VuPj0xCTI6MDAJMTowMAlTCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEF0bGFudGljL1N0YW5sZXkJLTM6NTE6MjQgLQlMTVQJMTg5MAorCQkJLTM6NTE6MjQgLQlTTVQJMTkxMiBNYXIgMTIgICMgU3RhbmxleSBNZWFuIFRpbWUKKwkJCS00OjAwCUZhbGsJRkslc1QJMTk4MyBNYXkgICAgICMgRmFsa2xhbmQgSXMgVGltZQorCQkJLTM6MDAJRmFsawlGSyVzVAkxOTg1IFNlcCAxNQorCQkJLTQ6MDAJRmFsawlGSyVzVAorCisjIEZyZW5jaCBHdWlhbmEKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQW1lcmljYS9DYXllbm5lCS0zOjI5OjIwIC0JTE1UCTE5MTEgSnVsCisJCQktNDowMAktCUdGVAkxOTY3IE9jdCAjIEZyZW5jaCBHdWlhbmEgVGltZQorCQkJLTM6MDAJLQlHRlQKKworIyBHdXlhbmEKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQW1lcmljYS9HdXlhbmEJLTM6NTI6NDAgLQlMTVQJMTkxNSBNYXIJIyBHZW9yZ2V0b3duCisJCQktMzo0NQktCUdCR1QJMTk2NiBNYXkgMjYgIyBCciBHdWlhbmEgVGltZQorCQkJLTM6NDUJLQlHWVQJMTk3NSBKdWwgMzEgIyBHdXlhbmEgVGltZQorCQkJLTM6MDAJLQlHWVQJMTk5MQorIyBJQVRBIFNTSU0gKDE5OTYtMDYpIHNheXMgLTQ6MDAuICBBc3N1bWUgYSAxOTkxIHN3aXRjaC4KKwkJCS00OjAwCS0JR1lUCisKKyMgUGFyYWd1YXkKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CisjIFNoYW5rcyAmIFBvdHRlbmdlciBzYXkgdGhhdCBzcHJpbmcgdHJhbnNpdGlvbnMgYXJlIGZyb20gMDE6MDAgLT4gMDI6MDAsCisjIGFuZCBhdXR1bW4gdHJhbnNpdGlvbnMgYXJlIGZyb20gMDA6MDAgLT4gMjM6MDAuICBHbyB3aXRoIHByZS0xOTk5CisjIGVkaXRpb25zIG9mIFNoYW5rcywgYW5kIHdpdGggdGhlIElBVEEsIHdobyBzYXkgdHJhbnNpdGlvbnMgb2NjdXIgYXQgMDA6MDAuCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlQYXJhCTE5NzUJMTk4OAktCU9jdAkgMQkwOjAwCTE6MDAJUworUnVsZQlQYXJhCTE5NzUJMTk3OAktCU1hcgkgMQkwOjAwCTAJLQorUnVsZQlQYXJhCTE5NzkJMTk5MQktCUFwcgkgMQkwOjAwCTAJLQorUnVsZQlQYXJhCTE5ODkJb25seQktCU9jdAkyMgkwOjAwCTE6MDAJUworUnVsZQlQYXJhCTE5OTAJb25seQktCU9jdAkgMQkwOjAwCTE6MDAJUworUnVsZQlQYXJhCTE5OTEJb25seQktCU9jdAkgNgkwOjAwCTE6MDAJUworUnVsZQlQYXJhCTE5OTIJb25seQktCU1hcgkgMQkwOjAwCTAJLQorUnVsZQlQYXJhCTE5OTIJb25seQktCU9jdAkgNQkwOjAwCTE6MDAJUworUnVsZQlQYXJhCTE5OTMJb25seQktCU1hcgkzMQkwOjAwCTAJLQorUnVsZQlQYXJhCTE5OTMJMTk5NQktCU9jdAkgMQkwOjAwCTE6MDAJUworUnVsZQlQYXJhCTE5OTQJMTk5NQktCUZlYglsYXN0U3VuCTA6MDAJMAktCitSdWxlCVBhcmEJMTk5Nglvbmx5CS0JTWFyCSAxCTA6MDAJMAktCisjIElBVEEgU1NJTSAoMjAwMC0wMikgc2F5cyAxOTk5LTEwLTEwOyBpZ25vcmUgdGhpcyBmb3Igbm93LgorIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwMC0xMC0wMik6CisjIEkgaGF2ZSB0aHJlZSBpbmRlcGVuZGVudCByZXBvcnRzIHRoYXQgUGFyYWd1YXkgY2hhbmdlZCB0byBEU1QgdGhpcyBTdW5kYXkKKyMgKDEwLTAxKS4KKyMKKyMgVHJhbnNsYXRlZCBieSBHd2lsbGltIExhdyAoMjAwMS0wMi0yNykgZnJvbQorIyA8YSBocmVmPSJodHRwOi8vd3d3LmRpYXJpb25vdGljaWFzLmNvbS5weS8wMTEwMDAvbmFjaW9uYWwvbmFjaW9uYTEuaHRtIj4KKyMgTm90aWNpYXMsIGEgZGFpbHkgcGFwZXIgaW4gQXN1bmNpb24sIFBhcmFndWF5ICgyMDAwLTEwLTAxKQorIyA8L2E+OgorIyBTdGFydGluZyBhdCAwOjAwIHRvZGF5LCB0aGUgY2xvY2sgd2lsbCBiZSBzZXQgZm9yd2FyZCA2MCBtaW51dGVzLCBpbgorIyBmdWxmaWxsbWVudCBvZiBEZWNyZWUgTm8uIDcsMjczIG9mIHRoZSBFeGVjdXRpdmUgUG93ZXIuLi4uICBUaGUgdGltZSBjaGFuZ2UKKyMgc3lzdGVtIGhhcyBiZWVuIG9wZXJhdGluZyBmb3Igc2V2ZXJhbCB5ZWFycy4gIEZvcm1lcmx5IHRoZXJlIHdhcyBhIHNlcGFyYXRlCisjIGRlY3JlZSBlYWNoIHllYXI7IHRoZSBuZXcgbGF3IGhhcyB0aGUgc2FtZSBlZmZlY3QsIGJ1dCBwZXJtYW5lbnRseS4gIEV2ZXJ5CisjIHllYXIsIHRoZSB0aW1lIHdpbGwgY2hhbmdlIG9uIHRoZSBmaXJzdCBTdW5kYXkgb2YgT2N0b2JlcjsgbGlrZXdpc2UsIHRoZQorIyBjbG9jayB3aWxsIGJlIHNldCBiYWNrIG9uIHRoZSBmaXJzdCBTdW5kYXkgb2YgTWFyY2guCisjCitSdWxlCVBhcmEJMTk5NgkyMDAxCS0JT2N0CVN1bj49MQkwOjAwCTE6MDAJUworIyBJQVRBIFNTSU0gKDE5OTctMDkpIHNheXMgTWFyIDE7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlQYXJhCTE5OTcJb25seQktCUZlYglsYXN0U3VuCTA6MDAJMAktCisjIFNoYW5rcyAmIFBvdHRlbmdlciBzYXkgMTk5OS0wMi0yODsgSUFUQSBTU0lNICgxOTk5LTAyKSBzYXlzIDE5OTktMDItMjcsIGJ1dAorIyAoMTk5OS0wOSkgcmVwb3J0cyBubyBkYXRlOyBnbyB3aXRoIGFib3ZlIHNvdXJjZXMgYW5kIEdlcmQgS25vcHMgKDIwMDEtMDItMjcpLgorUnVsZQlQYXJhCTE5OTgJMjAwMQktCU1hcglTdW4+PTEJMDowMAkwCS0KKyMgRnJvbSBSaXZlcyBNY0RvdyAoMjAwMi0wMi0yOCk6CisjIEEgZGVjcmVlIHdhcyBpc3N1ZWQgaW4gUGFyYWd1YXkgKG5vLiAxNjM1MCkgb24gMjAwMi0wMi0yNiB0aGF0IGNoYW5nZWQgdGhlCisjIGRzdCBtZXRob2QgdG8gYmUgZnJvbSB0aGUgZmlyc3QgU3VuZGF5IGluIFNlcHRlbWJlciB0byB0aGUgZmlyc3QgU3VuZGF5IGluCisjIEFwcmlsLgorUnVsZQlQYXJhCTIwMDIJMjAwNAktCUFwcglTdW4+PTEJMDowMAkwCS0KK1J1bGUJUGFyYQkyMDAyCTIwMDMJLQlTZXAJU3VuPj0xCTA6MDAJMTowMAlTCisjCisjIEZyb20gSmVzcGVyIE5vcmdhYXJkIFdlbGVuICgyMDA1LTAxLTAyKToKKyMgVGhlcmUgYXJlIHNldmVyYWwgc291cmNlcyB0aGF0IGNsYWltIHRoYXQgUGFyYWd1YXkgbWFkZQorIyBhIHRpbWV6b25lIHJ1bGUgY2hhbmdlIGluIGF1dHVtbiAyMDA0LgorIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwNS0wMS0wNSk6CisjIERlY3JlZSAxLDg2NyAoMjAwNC0wMy0wNSkKKyMgRnJvbSBDYXJsb3MgUmF1bCBQZXJhc3NvIHZpYSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDYtMTAtMTMpCisjIDxodHRwOi8vd3d3LnByZXNpZGVuY2lhLmdvdi5weS9kZWNyZXRvcy9EMTg2Ny5wZGY+CitSdWxlCVBhcmEJMjAwNAltYXgJLQlPY3QJU3VuPj0xNQkwOjAwCTE6MDAJUworUnVsZQlQYXJhCTIwMDUJbWF4CS0JTWFyCVN1bj49OAkwOjAwCTAJLQorCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvQXN1bmNpb24JLTM6NTA6NDAgLQlMTVQJMTg5MAorCQkJLTM6NTA6NDAgLQlBTVQJMTkzMSBPY3QgMTAgIyBBc3VuY2lvbiBNZWFuIFRpbWUKKwkJCS00OjAwCS0JUFlUCTE5NzIgT2N0ICMgUGFyYWd1YXkgVGltZQorCQkJLTM6MDAJLQlQWVQJMTk3NCBBcHIKKwkJCS00OjAwCVBhcmEJUFklc1QKKworIyBQZXJ1CisjCisjIDxhIGhyZWY9Im5ld3M6eHJHbWIuMzk5MzUkZ0ExLjEzODk2MTEzQG5ld3M0LnNydi5oY3ZsbnkuY3YubmV0Ij4KKyMgRnJvbSBFdmVseW4gQy4gTGVlcGVyIHZpYSBNYXJrIEJyYWRlciAoMjAwMy0xMC0yNik6PC9hPgorIyBXaGVuIHdlIHdlcmUgaW4gUGVydSBpbiAxOTg1LTE5ODYsIHRoZXkgYXBwYXJlbnRseSBzd2l0Y2hlZCBvdmVyCisjIHNvbWV0aW1lIGJldHdlZW4gRGVjZW1iZXIgMjkgYW5kIEphbnVhcnkgMyB3aGlsZSB3ZSB3ZXJlIG9uIHRoZSBBbWF6b24uCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgorIyBTaGFua3MgJiBQb3R0ZW5nZXIgZG9uJ3QgaGF2ZSB0aGlzIHRyYW5zaXRpb24uICBBc3N1bWUgMTk4NiB3YXMgbGlrZSAxOTg3LgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlQZXJ1CTE5MzgJb25seQktCUphbgkgMQkwOjAwCTE6MDAJUworUnVsZQlQZXJ1CTE5MzgJb25seQktCUFwcgkgMQkwOjAwCTAJLQorUnVsZQlQZXJ1CTE5MzgJMTkzOQktCVNlcAlsYXN0U3VuCTA6MDAJMTowMAlTCitSdWxlCVBlcnUJMTkzOQkxOTQwCS0JTWFyCVN1bj49MjQJMDowMAkwCS0KK1J1bGUJUGVydQkxOTg2CTE5ODcJLQlKYW4JIDEJMDowMAkxOjAwCVMKK1J1bGUJUGVydQkxOTg2CTE5ODcJLQlBcHIJIDEJMDowMAkwCS0KK1J1bGUJUGVydQkxOTkwCW9ubHkJLQlKYW4JIDEJMDowMAkxOjAwCVMKK1J1bGUJUGVydQkxOTkwCW9ubHkJLQlBcHIJIDEJMDowMAkwCS0KKyMgSUFUQSBpcyBhbWJpZ3VvdXMgZm9yIDE5OTMvMTk5NTsgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuCitSdWxlCVBlcnUJMTk5NAlvbmx5CS0JSmFuCSAxCTA6MDAJMTowMAlTCitSdWxlCVBlcnUJMTk5NAlvbmx5CS0JQXByCSAxCTA6MDAJMAktCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lCUFtZXJpY2EvTGltYQktNTowODoxMiAtCUxNVAkxODkwCisJCQktNTowODozNiAtCUxNVAkxOTA4IEp1bCAyOCAjIExpbWEgTWVhbiBUaW1lPworCQkJLTU6MDAJUGVydQlQRSVzVAkjIFBlcnUgVGltZQorCisjIFNvdXRoIEdlb3JnaWEKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUgQXRsYW50aWMvU291dGhfR2VvcmdpYSAtMjoyNjowOCAtCUxNVAkxODkwCQkjIEdyeXR2aWtlbgorCQkJLTI6MDAJLQlHU1QJIyBTb3V0aCBHZW9yZ2lhIFRpbWUKKworIyBTb3V0aCBTYW5kd2ljaCBJcworIyB1bmluaGFiaXRlZDsgc2NpZW50aWZpYyBwZXJzb25uZWwgaGF2ZSB3aW50ZXJlZAorCisjIFN1cmluYW1lCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvUGFyYW1hcmlibwktMzo0MDo0MCAtCUxNVAkxOTExCisJCQktMzo0MDo1MiAtCVBNVAkxOTM1ICAgICAjIFBhcmFtYXJpYm8gTWVhbiBUaW1lCisJCQktMzo0MDozNiAtCVBNVAkxOTQ1IE9jdCAjIFRoZSBjYXBpdGFsIG1vdmVkPworCQkJLTM6MzAJLQlORUdUCTE5NzUgTm92IDIwICMgRHV0Y2ggR3VpYW5hIFRpbWUKKwkJCS0zOjMwCS0JU1JUCTE5ODQgT2N0ICMgU3VyaW5hbWUgVGltZQorCQkJLTM6MDAJLQlTUlQKKworIyBUcmluaWRhZCBhbmQgVG9iYWdvCisjIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdCitab25lIEFtZXJpY2EvUG9ydF9vZl9TcGFpbiAtNDowNjowNCAtCUxNVAkxOTEyIE1hciAyCisJCQktNDowMAktCUFTVAorCisjIFVydWd1YXkKKyMgRnJvbSBQYXVsIEVnZ2VydCAoMTk5My0xMS0xOCk6CisjIFVydWd1YXkgd2lucyB0aGUgcHJpemUgZm9yIHRoZSBzdHJhbmdlc3QgcGVhY2V0aW1lIG1hbmlwdWxhdGlvbiBvZiB0aGUgcnVsZXMuCisjIEZyb20gU2hhbmtzICYgUG90dGVuZ2VyOgorIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKKyMgV2hpdG1hbiBnaXZlcyAxOTIzIE9jdCAxOyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KK1J1bGUJVXJ1Z3VheQkxOTIzCW9ubHkJLQlPY3QJIDIJIDA6MDAJMDozMAlIUworUnVsZQlVcnVndWF5CTE5MjQJMTkyNgktCUFwcgkgMQkgMDowMAkwCS0KK1J1bGUJVXJ1Z3VheQkxOTI0CTE5MjUJLQlPY3QJIDEJIDA6MDAJMDozMAlIUworUnVsZQlVcnVndWF5CTE5MzMJMTkzNQktCU9jdAlsYXN0U3VuCSAwOjAwCTA6MzAJSFMKKyMgU2hhbmtzICYgUG90dGVuZ2VyIGdpdmUgMTkzNSBBcHIgMSAwOjAwICYgMTkzNiBNYXIgMzAgMDowMDsgZ28gd2l0aCBXaGl0bWFuLgorUnVsZQlVcnVndWF5CTE5MzQJMTkzNgktCU1hcglTYXQ+PTI1CTIzOjMwcwkwCS0KK1J1bGUJVXJ1Z3VheQkxOTM2CW9ubHkJLQlOb3YJIDEJIDA6MDAJMDozMAlIUworUnVsZQlVcnVndWF5CTE5MzcJMTk0MQktCU1hcglsYXN0U3VuCSAwOjAwCTAJLQorIyBXaGl0bWFuIGdpdmVzIDE5MzcgT2N0IDM7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgorUnVsZQlVcnVndWF5CTE5MzcJMTk0MAktCU9jdAlsYXN0U3VuCSAwOjAwCTA6MzAJSFMKKyMgV2hpdG1hbiBnaXZlcyAxOTQxIE9jdCAyNCAtIDE5NDIgTWFyIDI3LCAxOTQyIERlYyAxNCAtIDE5NDMgQXByIDEzLAorIyBhbmQgMTk0MyBBcHIgMTMgYGB0byBwcmVzZW50IHRpbWUnJzsgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuCitSdWxlCVVydWd1YXkJMTk0MQlvbmx5CS0JQXVnCSAxCSAwOjAwCTA6MzAJSFMKK1J1bGUJVXJ1Z3VheQkxOTQyCW9ubHkJLQlKYW4JIDEJIDA6MDAJMAktCitSdWxlCVVydWd1YXkJMTk0Mglvbmx5CS0JRGVjCTE0CSAwOjAwCTE6MDAJUworUnVsZQlVcnVndWF5CTE5NDMJb25seQktCU1hcgkxNAkgMDowMAkwCS0KK1J1bGUJVXJ1Z3VheQkxOTU5CW9ubHkJLQlNYXkJMjQJIDA6MDAJMTowMAlTCitSdWxlCVVydWd1YXkJMTk1OQlvbmx5CS0JTm92CTE1CSAwOjAwCTAJLQorUnVsZQlVcnVndWF5CTE5NjAJb25seQktCUphbgkxNwkgMDowMAkxOjAwCVMKK1J1bGUJVXJ1Z3VheQkxOTYwCW9ubHkJLQlNYXIJIDYJIDA6MDAJMAktCitSdWxlCVVydWd1YXkJMTk2NQkxOTY3CS0JQXByCVN1bj49MQkgMDowMAkxOjAwCVMKK1J1bGUJVXJ1Z3VheQkxOTY1CW9ubHkJLQlTZXAJMjYJIDA6MDAJMAktCitSdWxlCVVydWd1YXkJMTk2NgkxOTY3CS0JT2N0CTMxCSAwOjAwCTAJLQorUnVsZQlVcnVndWF5CTE5NjgJMTk3MAktCU1heQkyNwkgMDowMAkwOjMwCUhTCitSdWxlCVVydWd1YXkJMTk2OAkxOTcwCS0JRGVjCSAyCSAwOjAwCTAJLQorUnVsZQlVcnVndWF5CTE5NzIJb25seQktCUFwcgkyNAkgMDowMAkxOjAwCVMKK1J1bGUJVXJ1Z3VheQkxOTcyCW9ubHkJLQlBdWcJMTUJIDA6MDAJMAktCitSdWxlCVVydWd1YXkJMTk3NAlvbmx5CS0JTWFyCTEwCSAwOjAwCTA6MzAJSFMKK1J1bGUJVXJ1Z3VheQkxOTc0CW9ubHkJLQlEZWMJMjIJIDA6MDAJMTowMAlTCitSdWxlCVVydWd1YXkJMTk3Nglvbmx5CS0JT2N0CSAxCSAwOjAwCTAJLQorUnVsZQlVcnVndWF5CTE5NzcJb25seQktCURlYwkgNAkgMDowMAkxOjAwCVMKK1J1bGUJVXJ1Z3VheQkxOTc4CW9ubHkJLQlBcHIJIDEJIDA6MDAJMAktCitSdWxlCVVydWd1YXkJMTk3OQlvbmx5CS0JT2N0CSAxCSAwOjAwCTE6MDAJUworUnVsZQlVcnVndWF5CTE5ODAJb25seQktCU1heQkgMQkgMDowMAkwCS0KK1J1bGUJVXJ1Z3VheQkxOTg3CW9ubHkJLQlEZWMJMTQJIDA6MDAJMTowMAlTCitSdWxlCVVydWd1YXkJMTk4OAlvbmx5CS0JTWFyCTE0CSAwOjAwCTAJLQorUnVsZQlVcnVndWF5CTE5ODgJb25seQktCURlYwkxMQkgMDowMAkxOjAwCVMKK1J1bGUJVXJ1Z3VheQkxOTg5CW9ubHkJLQlNYXIJMTIJIDA6MDAJMAktCitSdWxlCVVydWd1YXkJMTk4OQlvbmx5CS0JT2N0CTI5CSAwOjAwCTE6MDAJUworIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IG5vIERTVCB3YXMgb2JzZXJ2ZWQgaW4gMTk5MC8xIGFuZCAxOTkxLzIsCisjIGFuZCB0aGF0IDE5OTIvMydzIERTVCB3YXMgZnJvbSAxMC0yNSB0byAwMy0wMS4gIEdvIHdpdGggSUFUQS4KK1J1bGUJVXJ1Z3VheQkxOTkwCTE5OTIJLQlNYXIJU3VuPj0xCSAwOjAwCTAJLQorUnVsZQlVcnVndWF5CTE5OTAJMTk5MQktCU9jdAlTdW4+PTIxCSAwOjAwCTE6MDAJUworUnVsZQlVcnVndWF5CTE5OTIJb25seQktCU9jdAkxOAkgMDowMAkxOjAwCVMKK1J1bGUJVXJ1Z3VheQkxOTkzCW9ubHkJLQlGZWIJMjgJIDA6MDAJMAktCisjIEZyb20gRWR1YXJkbyBDb3RhICgyMDA0LTA5LTIwKToKKyMgVGhlIHVydWd1YXlhbiBnb3Zlcm5tZW50IGhhcyBkZWNyZWVkIGEgY2hhbmdlIGluIHRoZSBsb2NhbCB0aW1lLi4uLgorIyBodHRwOi8vd3d3LnByZXNpZGVuY2lhLmd1Yi51eS9kZWNyZXRvcy8yMDA0MDkxNTAyLmh0bQorUnVsZQlVcnVndWF5CTIwMDQJb25seQktCVNlcAkxOQkgMDowMAkxOjAwCVMKKyMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDUtMDMtMTEpOgorIyBVcnVndWF5J3MgRFNUIHdhcyBzY2hlZHVsZWQgdG8gZW5kIG9uIFN1bmRheSwgMjAwNS0wMy0xMywgYnV0IGluIG9yZGVyIHRvCisjIHNhdmUgZW5lcmd5IC4uLiBpdCB3YXMgcG9zdHBvbmVkIHR3byB3ZWVrcy4uLi4KKyMgaHR0cDovL3d3dy5wcmVzaWRlbmNpYS5ndWIudXkvX1dlYi9ub3RpY2lhcy8yMDA1LzAzLzIwMDUwMzEwMDUuaHRtCitSdWxlCVVydWd1YXkJMjAwNQlvbmx5CS0JTWFyCTI3CSAyOjAwCTAJLQorIyBGcm9tIEVkdWFyZG8gQ290YSAoMjAwNS0wOS0yNyk6CisjIGh0dHA6Ly93d3cucHJlc2lkZW5jaWEuZ3ViLnV5L19XZWIvZGVjcmV0b3MvMjAwNS8wOS9DTSUyMDExOV8wOSUyMDA5JTIwMjAwNV8wMDAwMS5QREYKKyMgVGhpcyBtZWFucyB0aGF0IGZyb20gMjAwNS0xMC0wOSBhdCAwMjowMCBsb2NhbCB0aW1lLCB1bnRpbCAyMDA2LTAzLTEyIGF0CisjIDAyOjAwIGxvY2FsIHRpbWUsIG9mZmljaWFsIHRpbWUgaW4gVXJ1Z3VheSB3aWxsIGJlIGF0IEdNVCAtMi4KK1J1bGUJVXJ1Z3VheQkyMDA1CW9ubHkJLQlPY3QJIDkJIDI6MDAJMTowMAlTCitSdWxlCVVydWd1YXkJMjAwNglvbmx5CS0JTWFyCTEyCSAyOjAwCTAJLQorIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNi0wOS0wNik6CisjIGh0dHA6Ly93d3cucHJlc2lkZW5jaWEuZ3ViLnV5L193ZWIvZGVjcmV0b3MvMjAwNi8wOS9DTSUyMDIxMF8wOCUyMDA2JTIwMjAwNl8wMDAwMS5QREYKK1J1bGUJVXJ1Z3VheQkyMDA2CW1heAktCU9jdAlTdW4+PTEJIDI6MDAJMTowMAlTCitSdWxlCVVydWd1YXkJMjAwNwltYXgJLQlNYXIJU3VuPj04CSAyOjAwCTAJLQorIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQorWm9uZSBBbWVyaWNhL01vbnRldmlkZW8JLTM6NDQ6NDQgLQlMTVQJMTg5OCBKdW4gMjgKKwkJCS0zOjQ0OjQ0IC0JTU1UCTE5MjAgTWF5ICAxCSMgTW9udGV2aWRlbyBNVAorCQkJLTM6MzAJVXJ1Z3VheQlVWSVzVAkxOTQyIERlYyAxNAkjIFVydWd1YXkgVGltZQorCQkJLTM6MDAJVXJ1Z3VheQlVWSVzVAorCisjIFZlbmV6dWVsYQorIworIyBGcm9tIEpvaG4gU3RhaW5mb3J0aCAoMjAwNy0xMS0yOCk6CisjIC4uLiB0aGUgY2hhbmdlIGZvciBWZW5lenVlbGEgb3JpZ2luYWxseSBleHBlY3RlZCBmb3IgMjAwNy0xMi0zMSBoYXMKKyMgYmVlbiBicm91Z2h0IGZvcndhcmQgdG8gMjAwNy0xMi0wOS4gIFRoZSBvZmZpY2lhbCBhbm5vdW5jZW1lbnQgd2FzCisjIHB1Ymxpc2hlZCB0b2RheSBpbiB0aGUgIkdhY2V0YSBPZmljaWFsIGRlIGxhIFJlcHVibGljYSBCb2xpdmFyaWFuYQorIyBkZSBWZW5lenVlbGEsIG51bWVybyAzOC44MTkiIChvZmZpY2lhbCBkb2N1bWVudCBmb3IgYWxsIGxhd3Mgb3IKKyMgcmVzb2x1dGlvbiBwdWJsaWNhdGlvbikKKyMgaHR0cDovL3d3dy5nbG9ib3Zpc2lvbi5jb20vbmV3cy5waHA/bmlkPTcyMjA4CisKKyMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KK1pvbmUJQW1lcmljYS9DYXJhY2FzCS00OjI3OjQ0IC0JTE1UCTE4OTAKKwkJCS00OjI3OjQwIC0JQ01UCTE5MTIgRmViIDEyICMgQ2FyYWNhcyBNZWFuIFRpbWU/CisJCQktNDozMAktCVZFVAkxOTY1CSAgICAgIyBWZW5lenVlbGEgVGltZQorCQkJLTQ6MDAJLQlWRVQJMjAwNyBEZWMgIDkgMDM6MDAKKwkJCS00OjMwCS0JVkVUCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvc3lzdGVtdiBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS9zeXN0ZW12Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzM4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvc3lzdGVtdgpAQCAtMCwwICsxLDM5IEBACisjIDxwcmU+CisjIEAoIylzeXN0ZW12CTguMgorIyBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorIyAyMDA5LTA1LTE3IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKworIyBPbGQgcnVsZXMsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS4KKyMgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGhhbmRsZSBOZXdmb3VuZGxhbmQsIHNpbmNlIGl0IGNhbm5vdCBiZSBleHByZXNzZWQKKyMgdXNpbmcgdGhlIFN5c3RlbSBWICJUWiIgc2NoZW1lIChoYWxmLWhvdXIgb2Zmc2V0KSwgb3IgYW55dGhpbmcgb3V0c2lkZQorIyBOb3J0aCBBbWVyaWNhIChubyBzdXBwb3J0IGZvciBub24tc3RhbmRhcmQgRFNUIHN0YXJ0L2VuZCBkYXRlcyksIG5vcgorIyB0aGUgY2hhbmdlcyBpbiB0aGUgRFNUIHJ1bGVzIGluIHRoZSBVUyBhZnRlciAxOTc2ICh3aGljaCBvY2N1cnJlZCBhZnRlcgorIyB0aGUgb2xkIHJ1bGVzIHdlcmUgd3JpdHRlbikuCisjCisjIElmIHlvdSBuZWVkIHRoZSBvbGQgcnVsZXMsIHVuY29tbWVudCAjIyBsaW5lcy4KKyMgQ29tcGlsZSB0aGlzICp3aXRob3V0KiBsZWFwIHNlY29uZCBjb3JyZWN0aW9uIGZvciB0cnVlIGNvbmZvcm1hbmNlLgorCisjIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUworUnVsZQlTeXN0ZW1WCW1pbgkxOTczCS0JQXByCWxhc3RTdW4JMjowMAkxOjAwCUQKK1J1bGUJU3lzdGVtVgltaW4JMTk3MwktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVN5c3RlbVYJMTk3NAlvbmx5CS0JSmFuCTYJMjowMAkxOjAwCUQKK1J1bGUJU3lzdGVtVgkxOTc0CW9ubHkJLQlOb3YJbGFzdFN1bgkyOjAwCTAJUworUnVsZQlTeXN0ZW1WCTE5NzUJb25seQktCUZlYgkyMwkyOjAwCTE6MDAJRAorUnVsZQlTeXN0ZW1WCTE5NzUJb25seQktCU9jdAlsYXN0U3VuCTI6MDAJMAlTCitSdWxlCVN5c3RlbVYJMTk3NgltYXgJLQlBcHIJbGFzdFN1bgkyOjAwCTE6MDAJRAorUnVsZQlTeXN0ZW1WCTE5NzYJbWF4CS0JT2N0CWxhc3RTdW4JMjowMAkwCVMKKworIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUy9TQVZFCUZPUk1BVAlbVU5USUxdCisjIyBab25lCVN5c3RlbVYvQVNUNEFEVAktNDowMAlTeXN0ZW1WCQlBJXNUCisjIyBab25lCVN5c3RlbVYvRVNUNUVEVAktNTowMAlTeXN0ZW1WCQlFJXNUCisjIyBab25lCVN5c3RlbVYvQ1NUNkNEVAktNjowMAlTeXN0ZW1WCQlDJXNUCisjIyBab25lCVN5c3RlbVYvTVNUN01EVAktNzowMAlTeXN0ZW1WCQlNJXNUCisjIyBab25lCVN5c3RlbVYvUFNUOFBEVAktODowMAlTeXN0ZW1WCQlQJXNUCisjIyBab25lCVN5c3RlbVYvWVNUOVlEVAktOTowMAlTeXN0ZW1WCQlZJXNUCisjIyBab25lCVN5c3RlbVYvQVNUNAktNDowMAktCQlBU1QKKyMjIFpvbmUJU3lzdGVtVi9FU1Q1CS01OjAwCS0JCUVTVAorIyMgWm9uZQlTeXN0ZW1WL0NTVDYJLTY6MDAJLQkJQ1NUCisjIyBab25lCVN5c3RlbVYvTVNUNwktNzowMAktCQlNU1QKKyMjIFpvbmUJU3lzdGVtVi9QU1Q4CS04OjAwCS0JCVBTVAorIyMgWm9uZQlTeXN0ZW1WL1lTVDkJLTk6MDAJLQkJWVNUCisjIyBab25lCVN5c3RlbVYvSFNUMTAJLTEwOjAwCS0JCUhTVApkaWZmIC0tZ2l0IGEvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3Rlc3QtdHouYyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS90ZXN0LXR6LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyYjQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS90ZXN0LXR6LmMKQEAgLTAsMCArMSw1NiBAQAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitzdHJ1Y3QgeworICBjb25zdCBjaGFyICoJZW52OworICB0aW1lX3QJZXhwZWN0ZWQ7Cit9IHRlc3RzW10gPSB7CisgIHsiTVNUIiwJODMyOTM1MzE1fSwKKyAgeyIiLAkJODMyOTEwMTE1fSwKKyAgeyI6VVRDIiwJODMyOTEwMTE1fSwKKyAgeyJVVEMiLAk4MzI5MTAxMTV9LAorICB7IlVUQzAiLAk4MzI5MTAxMTV9Cit9OworCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKyAgaW50IGVycm9ycyA9IDA7CisgIHN0cnVjdCB0bSB0bTsKKyAgdGltZV90IHQ7CisgIHVuc2lnbmVkIGludCBpOworCisgIG1lbXNldCAoJnRtLCAwLCBzaXplb2YgKHRtKSk7CisgIHRtLnRtX2lzZHN0ID0gMDsKKyAgdG0udG1feWVhciAgPSA5NjsJLyogeWVhcnMgc2luY2UgMTkwMCAqLworICB0bS50bV9tb24gICA9IDQ7CisgIHRtLnRtX21kYXkgID0gMjQ7CisgIHRtLnRtX2hvdXIgID0gIDM7CisgIHRtLnRtX21pbiAgID0gNTU7CisgIHRtLnRtX3NlYyAgID0gMTU7CisKKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAodGVzdHMpIC8gc2l6ZW9mICh0ZXN0c1swXSk7ICsraSkKKyAgICB7CisgICAgICBzZXRlbnYgKCJUWiIsIHRlc3RzW2ldLmVudiwgMSk7CisgICAgICB0ID0gbWt0aW1lICgmdG0pOworICAgICAgaWYgKHQgIT0gdGVzdHNbaV0uZXhwZWN0ZWQpCisJeworCSAgcHJpbnRmICgiJXM6IGZsdW5rZWQgdGVzdCAldSAoZXhwZWN0ZWQgJWx1LCBnb3QgJWx1KVxuIiwKKwkJICBhcmd2WzBdLCBpLCAobG9uZykgdGVzdHNbaV0uZXhwZWN0ZWQsIChsb25nKSB0KTsKKwkgICsrZXJyb3JzOworCX0KKyAgICB9CisgIGlmIChlcnJvcnMgPT0gMCkKKyAgICB7CisgICAgICBwdXRzICgiTm8gZXJyb3JzLiIpOworICAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcmludGYgKCIlZCBlcnJvcnMuXG4iLCBlcnJvcnMpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvdGVzdGRhdGEvWFQxIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3Rlc3RkYXRhL1hUMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2Q3ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3Rlc3RkYXRhL1hUMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvdGVzdGRhdGEvWFQyIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3Rlc3RkYXRhL1hUMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjkxODllCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3Rlc3RkYXRhL1hUMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvdGVzdGRhdGEvWFQzIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3Rlc3RkYXRhL1hUMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmY1ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3Rlc3RkYXRhL1hUMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvdGVzdGRhdGEvWFQ0IGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3Rlc3RkYXRhL1hUNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTBhOTc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3Rlc3RkYXRhL1hUNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvdHN0LXRpbWV6b25lLmMgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvdHN0LXRpbWV6b25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjMzY4NwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS90c3QtdGltZXpvbmUuYwpAQCAtMCwwICsxLDE3MSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk4LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IEFuZHJlYXMgSmFlZ2VyIDxhakBzdXNlLmRlPiwgMTk5OC4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2ludCBmYWlsZWQgPSAwOworCitzdHJ1Y3QgdGVzdF90aW1lcworeworICBjb25zdCBjaGFyICpuYW1lOworICBpbnQgZGF5bGlnaHQ7CisgIGludCB0aW1lem9uZTsKKyAgY29uc3QgY2hhciAqdHpuYW1lWzJdOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZXN0X3RpbWVzIHRlc3RzW10gPQoreworICB7ICJFdXJvcGUvQW1zdGVyZGFtIiwgMSwgLTM2MDAsIHsgIkNFVCIsICJDRVNUIiB9fSwKKyAgeyAiRXVyb3BlL0JlcmxpbiIsIDEsIC0zNjAwLCB7ICJDRVQiLCAiQ0VTVCIgfX0sCisgIHsgIkV1cm9wZS9Mb25kb24iLCAxLCAwLCB7ICJHTVQiLCAiQlNUIiB9fSwKKyAgeyAiVW5pdmVyc2FsIiwgMCwgMCwgeyJVVEMiLCAiVVRDIiB9fSwKKyAgeyAiQXVzdHJhbGlhL01lbGJvdXJuZSIsIDEsIC0zNjAwMCwgeyAiRVNUIiwgIkVTVCIgfX0sCisgIHsgIkFtZXJpY2EvU2FvX1BhdWxvIiwgMSwgMTA4MDAsIHsiQlJUIiwgIkJSU1QiIH19LAorICB7ICJBbWVyaWNhL0NoaWNhZ28iLCAxLCAyMTYwMCwgeyJDU1QiLCAiQ0RUIiB9fSwKKyAgeyAiQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpcyIsIDEsIDE4MDAwLCB7IkVTVCIsICJFRFQiIH19LAorICB7ICJBbWVyaWNhL0xvc19BbmdlbGVzIiwgMSwgMjg4MDAsIHsiUFNUIiwgIlBEVCIgfX0sCisgIHsgIlBhY2lmaWMvQXVja2xhbmQiLCAxLCAtNDMyMDAsIHsgIk5aU1QiLCAiTlpEVCIgfX0sCisgIHsgTlVMTCwgMCwgMCB9Cit9OworCisvKiBUaGlzIHN0cmluZyB3aWxsIGJlIHVzZWQgZm9yIGBwdXRlbnYnIGNhbGxzLiAgKi8KK2NoYXIgZW52c3RyaW5nWzEwMF07CisKK3N0YXRpYyB2b2lkCitwcmludF90enZhcnMgKHZvaWQpCit7CisgIHByaW50ZiAoInR6bmFtZVswXTogJXNcbiIsIHR6bmFtZVswXSk7CisgIHByaW50ZiAoInR6bmFtZVsxXTogJXNcbiIsIHR6bmFtZVsxXSk7CisgIHByaW50ZiAoImRheWxpZ2h0OiAlZFxuIiwgZGF5bGlnaHQpOworICBwcmludGYgKCJ0aW1lem9uZTogJWxkXG4iLCB0aW1lem9uZSk7Cit9CisKKworc3RhdGljIHZvaWQKK2NoZWNrX3R6dmFycyAoY29uc3QgY2hhciAqbmFtZSwgaW50IGRheWwsIGludCB0aW1leiwgY29uc3QgY2hhciAqY29uc3QgdHpuYW1bXSkKK3sKKyAgaW50IGk7CisKKyAgaWYgKGRheWxpZ2h0ICE9IGRheWwpCisgICAgeworICAgICAgcHJpbnRmICgiKioqIFRpbWV6b25lOiAlcywgZGF5bGlnaHQgaXM6ICVkIGJ1dCBzaG91bGQgYmU6ICVkXG4iLAorCSAgICAgIG5hbWUsIGRheWxpZ2h0LCBkYXlsKTsKKyAgICAgICsrZmFpbGVkOworICAgIH0KKyAgaWYgKHRpbWV6b25lICE9IHRpbWV6KQorICAgIHsKKyAgICAgIHByaW50ZiAoIioqKiBUaW1lem9uZTogJXMsIHRpbWV6b25lIGlzOiAlbGQgYnV0IHNob3VsZCBiZTogJWRcbiIsCisJICAgICAgbmFtZSwgdGltZXpvbmUsIHRpbWV6KTsKKyAgICAgICsrZmFpbGVkOworICAgIH0KKyAgZm9yIChpID0gMDsgaSA8PSAxOyArK2kpCisgICAgaWYgKHN0cmNtcCAodHpuYW1lW2ldLCB0em5hbVtpXSkgIT0gMCkKKyAgICAgIHsKKwlwcmludGYgKCIqKiogVGltZXpvbmU6ICVzLCB0em5hbWVbJWRdIGlzOiAlcyBidXQgc2hvdWxkIGJlOiAlc1xuIiwKKwkJbmFtZSwgaSwgdHpuYW1lW2ldLCB0em5hbVtpXSk7CisJKytmYWlsZWQ7CisgICAgICB9Cit9CisKKworc3RhdGljIGludAorZG9fdGVzdCAodm9pZCkKK3sKKyAgdGltZV90IHQ7CisgIGNvbnN0IHN0cnVjdCB0ZXN0X3RpbWVzICpwdDsKKyAgY2hhciBidWZbQlVGU0laXTsKKworICAvKiBUaGlzIHNob3VsZCBiZTogRnJpIE1heSAxNSAwMTowMjoxNiAxOTk4IChVVEMpLiAgKi8KKyAgdCA9IDg5NTE5NDEzNjsKKyAgcHJpbnRmICgiV2UgdXNlIHRoaXMgZGF0ZTogJXNcbiIsIGFzY3RpbWUgKGdtdGltZSAoJnQpKSk7CisKKyAgZm9yIChwdCA9IHRlc3RzOyBwdC0+bmFtZSAhPSBOVUxMOyArK3B0KQorICAgIHsKKyAgICAgIC8qIFN0YXJ0IHdpdGggYSBrbm93biBzdGF0ZSAqLworICAgICAgcHJpbnRmICgiQ2hlY2tpbmcgdGltZXpvbmUgJXNcbiIsIHB0LT5uYW1lKTsKKyAgICAgIHNwcmludGYgKGJ1ZiwgIlRaPSVzIiwgcHQtPm5hbWUpOworICAgICAgaWYgKHB1dGVudiAoYnVmKSkKKwl7CisJICBwdXRzICgicHV0ZW52IGZhaWxlZC4iKTsKKwkgIGZhaWxlZCA9IDE7CisJfQorICAgICAgdHpzZXQgKCk7CisgICAgICBwcmludF90enZhcnMgKCk7CisgICAgICBjaGVja190enZhcnMgKHB0LT5uYW1lLCBwdC0+ZGF5bGlnaHQsIHB0LT50aW1lem9uZSwgcHQtPnR6bmFtZSk7CisKKyAgICAgIC8qIGNhbGxpbmcgbG9jYWx0aW1lIHNob3VsZG4ndCBtYWtlIGEgZGlmZmVyZW5jZSAqLworICAgICAgbG9jYWx0aW1lICgmdCk7CisgICAgICBwcmludF90enZhcnMgKCk7CisgICAgICBjaGVja190enZhcnMgKHB0LT5uYW1lLCBwdC0+ZGF5bGlnaHQsIHB0LT50aW1lem9uZSwgcHQtPnR6bmFtZSk7CisgICAgfQorCisgIC8qIEZyb20gYSBwb3N0IG9mIFNjb3R0IEhhcnJpbmd0b24gPHNlaDRAaXgubmV0Y29tLmNvbT4gdG8gdGhlIHRpbWV6b25lCisgICAgIG1haWxpbmcgbGlzdC4gICovCisgIHsKKyAgICBzdHJ1Y3QgdG0gdG1CdWYgPSB7MCwgMCwgMCwgMTAsIDMsIDk4LCAwLCAwLCAtMX07CisgICAgY2hhciBidWZbMjAwXTsKKyAgICBzdHJjcHkgKGVudnN0cmluZywgIlRaPUV1cm9wZS9Mb25kb24iKTsKKyAgICBwdXRlbnYgKGVudnN0cmluZyk7CisgICAgdCA9IG1rdGltZSAoJnRtQnVmKTsKKyAgICBzbnByaW50ZiAoYnVmLCBzaXplb2YgKGJ1ZiksICJUWj0lcyAlamQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQiLAorCSAgICAgIGdldGVudiAoIlRaIiksIChpbnRtYXhfdCkgdCwKKwkgICAgICB0bUJ1Zi50bV9zZWMsIHRtQnVmLnRtX21pbiwgdG1CdWYudG1faG91ciwKKwkgICAgICB0bUJ1Zi50bV9tZGF5LCB0bUJ1Zi50bV9tb24sIHRtQnVmLnRtX3llYXIsCisJICAgICAgdG1CdWYudG1fd2RheSwgdG1CdWYudG1feWRheSwgdG1CdWYudG1faXNkc3QpOworICAgIGZwdXRzIChidWYsIHN0ZG91dCk7CisgICAgcHV0cyAoIiBzaG91bGQgYmUiKTsKKyAgICBwdXRzICgiVFo9RXVyb3BlL0xvbmRvbiA4OTIxNjI4MDAgMCAwIDAgMTAgMyA5OCA1IDk5IDEiKTsKKyAgICBpZiAoc3RyY21wIChidWYsICJUWj1FdXJvcGUvTG9uZG9uIDg5MjE2MjgwMCAwIDAgMCAxMCAzIDk4IDUgOTkgMSIpICE9IDApCisgICAgICB7CisJZmFpbGVkID0gMTsKKwlmcHV0cyAoIiBGQUlMRUQgKioqIiwgc3Rkb3V0KTsKKyAgICAgIH0KKyAgfQorCisgIHByaW50ZigiXG4iKTsKKworICB7CisgICAgc3RydWN0IHRtIHRtQnVmID0gezAsIDAsIDAsIDEwLCAzLCA5OCwgMCwgMCwgLTF9OworICAgIGNoYXIgYnVmWzIwMF07CisgICAgc3RyY3B5IChlbnZzdHJpbmcsICJUWj1HTVQiKTsKKyAgICAvKiBObyBwdXRlbnYgY2FsbCBuZWVkZWQhICAqLworICAgIHQgPSBta3RpbWUgKCZ0bUJ1Zik7CisgICAgc25wcmludGYgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiVFo9JXMgJWpkICVkICVkICVkICVkICVkICVkICVkICVkICVkIiwKKwkgICAgICBnZXRlbnYgKCJUWiIpLCAoaW50bWF4X3QpIHQsCisJICAgICAgdG1CdWYudG1fc2VjLCB0bUJ1Zi50bV9taW4sIHRtQnVmLnRtX2hvdXIsCisJICAgICAgdG1CdWYudG1fbWRheSwgdG1CdWYudG1fbW9uLCB0bUJ1Zi50bV95ZWFyLAorCSAgICAgIHRtQnVmLnRtX3dkYXksIHRtQnVmLnRtX3lkYXksIHRtQnVmLnRtX2lzZHN0KTsKKyAgICBmcHV0cyAoYnVmLCBzdGRvdXQpOworICAgIHB1dHMgKCIgc2hvdWxkIGJlIik7CisgICAgcHV0cyAoIlRaPUdNVCA4OTIxNjY0MDAgMCAwIDAgMTAgMyA5OCA1IDk5IDAiKTsKKyAgICBpZiAoc3RyY21wIChidWYsICJUWj1HTVQgODkyMTY2NDAwIDAgMCAwIDEwIDMgOTggNSA5OSAwIikgIT0gMCkKKyAgICAgIHsKKwlmYWlsZWQgPSAxOworCWZwdXRzICgiIEZBSUxFRCAqKioiLCBzdGRvdXQpOworICAgICAgfQorICB9CisKKyAgcmV0dXJuIGZhaWxlZCA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKK30KKworI2RlZmluZSBURVNUX0ZVTkNUSU9OIGRvX3Rlc3QgKCkKKyNpbmNsdWRlICIuLi90ZXN0LXNrZWxldG9uLmMiCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvdHN0LXR6c2V0LmMgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvdHN0LXR6c2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzMDMzNgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS90c3QtdHpzZXQuYwpAQCAtMCwwICsxLDIwMSBAQAorLyogdHpzZXQgdGVzdHMgd2l0aCBjcmFmdGVkIHRpbWUgem9uZSBkYXRhLgorICAgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2RlZmluZSBfR05VX1NPVVJDRSAxCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIFRJTUVPVVQgNQorc3RhdGljIGludCBkb190ZXN0ICh2b2lkKTsKKyNkZWZpbmUgVEVTVF9GVU5DVElPTiBkb190ZXN0ICgpCisjaW5jbHVkZSAiLi4vdGVzdC1za2VsZXRvbi5jIgorCisvKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgbGFyZ2UgVFogZmlsZS4gICovCitzdGF0aWMgY2hhciAqCitjcmVhdGVfdHpfZmlsZSAob2ZmNjRfdCBzaXplKQoreworICBjaGFyICpwYXRoOworICBpbnQgZmQgPSBjcmVhdGVfdGVtcF9maWxlICgidHN0LXR6c2V0LSIsICZwYXRoKTsKKyAgaWYgKGZkIDwgMCkKKyAgICBleGl0ICgxKTsKKworICAvLyBSZW9wZW4gZm9yIGxhcmdlLWZpbGUgc3VwcG9ydC4KKyAgY2xvc2UgKGZkKTsKKyAgZmQgPSBvcGVuNjQgKHBhdGgsIE9fV1JPTkxZKTsKKyAgaWYgKGZkIDwgMCkKKyAgICB7CisgICAgICBwcmludGYgKCJvcGVuNjQgKCVzKSBmYWlsZWQ6ICVtXG4iLCBwYXRoKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBzdGF0aWMgY29uc3QgY2hhciBkYXRhW10gPSB7CisgICAgMHg1NCwgMHg1YSwgMHg2OSwgMHg2NiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHg1OCwgMHg1NCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDU0LCAweDVhLCAweDY5LCAweDY2LCAweDMyLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NTQsIDB4NDcsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwYSwgMHg1OCwgMHg1NCwgMHg0NywgMHgzMCwgMHgwYQorICB9OworICBzc2l6ZV90IHJldCA9IHdyaXRlIChmZCwgZGF0YSwgc2l6ZW9mIChkYXRhKSk7CisgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgIHByaW50ZiAoIndyaXRlIGZhaWxlZDogJW1cbiIpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICBpZiAoKHNpemVfdCkgcmV0ICE9IHNpemVvZiAoZGF0YSkpCisgICAgeworICAgICAgcHJpbnRmICgiU2hvcnQgd3JpdGVcbiIpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICBpZiAobHNlZWs2NCAoZmQsIHNpemUsIFNFRUtfQ1VSKSA8IDApCisgICAgeworICAgICAgcHJpbnRmICgibHNlZWsgZmFpbGVkOiAlbVxuIik7CisgICAgICBjbG9zZSAoZmQpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBpZiAod3JpdGUgKGZkLCAiIiwgMSkgIT0gMSkKKyAgICB7CisgICAgICBwcmludGYgKCJTaW5nbGUtYnl0ZSB3cml0ZSBmYWlsZWRcbiIpOworICAgICAgY2xvc2UgKGZkKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgaWYgKGNsb3NlIChmZCkgIT0gMCkKKyAgICB7CisgICAgICBwcmludGYgKCJjbG9zZSBmYWlsZWQ6ICVtXG4iKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgcmV0dXJuIHBhdGg7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3R6X2ZpbGUgKG9mZjY0X3Qgc2l6ZSkKK3sKKyAgY2hhciAqcGF0aCA9IGNyZWF0ZV90el9maWxlIChzaXplKTsKKyAgaWYgKHNldGVudiAoIlRaIiwgcGF0aCwgMSkgPCAwKQorICAgIHsKKyAgICAgIHByaW50ZiAoInNldGVudiBmYWlsZWQ6ICVtXG4iKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgdHpzZXQgKCk7CisgIGZyZWUgKHBhdGgpOworfQorCitzdGF0aWMgaW50Citkb190ZXN0ICh2b2lkKQoreworICAvKiBMaW1pdCB0aGUgc2l6ZSBvZiB0aGUgcHJvY2Vzcy4gIE90aGVyd2lzZSwgc29tZSBvZiB0aGUgdGVzdHMgd2lsbAorICAgICBjb25zdW1lIGEgbG90IG9mIHJlc291cmNlcy4gICovCisgIHsKKyAgICBzdHJ1Y3QgcmxpbWl0IGxpbWl0OworICAgIGlmIChnZXRybGltaXQgKFJMSU1JVF9BUywgJmxpbWl0KSAhPSAwKQorICAgICAgeworCXByaW50ZiAoImdldHJsaW1pdCAoUkxJTUlUX0FTKSBmYWlsZWQ6ICVtXG4iKTsKKwlyZXR1cm4gMTsKKyAgICAgIH0KKyAgICBsb25nIHRhcmdldCA9IDUxMiAqIDEwMjQgKiAxMDI0OworICAgIGlmIChsaW1pdC5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZIHx8IGxpbWl0LnJsaW1fY3VyID4gdGFyZ2V0KQorICAgICAgeworCWxpbWl0LnJsaW1fY3VyID0gNTEyICogMTAyNCAqIDEwMjQ7CisJaWYgKHNldHJsaW1pdCAoUkxJTUlUX0FTLCAmbGltaXQpICE9IDApCisJICB7CisJICAgIHByaW50ZiAoInNldHJsaW1pdCAoUkxJTUlUX0FTKSBmYWlsZWQ6ICVtXG4iKTsKKwkgICAgcmV0dXJuIDE7CisJICB9CisgICAgICB9CisgIH0KKworICBpbnQgZXJyb3JzID0gMDsKKyAgZm9yIChpbnQgaSA9IDE7IGkgPD0gNDsgKytpKQorICAgIHsKKyAgICAgIGNoYXIgdHpbMTZdOworICAgICAgc25wcmludGYgKHR6LCBzaXplb2YgKHR6KSwgIlhUJWQiLCBpKTsKKyAgICAgIGlmIChzZXRlbnYgKCJUWiIsIHR6LCAxKSA8IDApCisJeworCSAgcHJpbnRmICgic2V0ZW52IGZhaWxlZDogJW1cbiIpOworCSAgcmV0dXJuIDE7CisJfQorICAgICAgdHpzZXQgKCk7CisgICAgICBpZiAoc3RyY21wICh0em5hbWVbMF0sIHR6KSA9PSAwKQorCXsKKwkgIHByaW50ZiAoIlVuZXhwZWN0ZWQgc3VjY2VzcyBmb3IgJXNcbiIsIHR6KTsKKwkgICsrZXJyb3JzOworCX0KKyAgICB9CisKKyAgLyogTGFyZ2UgVFogZmlsZXMuICAqLworCisgIC8qIFRoaXMgd2lsbCBzdWNjZWVkIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCBhbmQgZmFpbCBvbiAzMi1iaXQKKyAgICAgYXJjaGl0ZWN0dXJlcy4gIEl0IHVzZWQgdG8gY3Jhc2ggb24gMzItYml0LiAgKi8KKyAgdGVzdF90el9maWxlICg2NCAqIDEwMjQgKiAxMDI0KTsKKworICAvKiBUaGlzIHdpbGwgZmFpbCBvbiA2NC1iaXQgYW5kIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiAgSXQgdXNlZCB0bworICAgICBjYXVzZSBhIHRlc3QgdGltZW91dCBvbiA2NC1iaXQgYW5kIGNyYXNoIG9uIDMyLWJpdCBpZiB0aGUgVFogZmlsZQorICAgICBvcGVuIHN1Y2NlZWRlZCBmb3Igc29tZSByZWFzb24gKGl0IGRvZXMgbm90IHVzZSBPX0xBUkdFRklMRSBpbgorICAgICByZWd1bGFyIGJ1aWxkcykuICAqLworICB0ZXN0X3R6X2ZpbGUgKDRMTCAqIDEwMjQgKiAxMDI0ICogMTAyNCAtIDYpOworCisgIC8qIExhcmdlIFRaIHZhcmlhYmxlcy4gICovCisgIHsKKyAgICBzaXplX3QgbGVuZ3RoID0gNjQgKiAxMDI0ICogMTAyNDsKKyAgICBjaGFyICp2YWx1ZSA9IG1hbGxvYyAobGVuZ3RoICsgMSk7CisgICAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgICB7CisJcHV0cyAoIm1hbGxvYyBmYWlsZWQ6ICVtIik7CisJcmV0dXJuIDE7CisgICAgICB9CisgICAgdmFsdWVbbGVuZ3RoXSA9ICdcMCc7CisKKyAgICBtZW1zZXQgKHZhbHVlLCAnICcsIGxlbmd0aCk7CisgICAgdmFsdWVbMF0gPSAnVSc7CisgICAgdmFsdWVbMV0gPSAnVCc7CisgICAgdmFsdWVbMl0gPSAnQyc7CisgICAgaWYgKHNldGVudiAoIlRaIiwgdmFsdWUsIDEpIDwgMCkKKyAgICAgIHsKKwlwcmludGYgKCJzZXRlbnYgZmFpbGVkOiAlbVxuIik7CisJcmV0dXJuIDE7CisgICAgICB9CisgICAgdHpzZXQgKCk7CisKKyAgICBtZW1zZXQgKHZhbHVlLCAnMCcsIGxlbmd0aCk7CisgICAgdmFsdWVbMF0gPSAnPCc7CisgICAgdmFsdWVbbGVuZ3RoIC0gMV0gPSAnPic7CisgICAgaWYgKHNldGVudiAoIlRaIiwgdmFsdWUsIDEpIDwgMCkKKyAgICAgIHsKKwlwcmludGYgKCJzZXRlbnYgZmFpbGVkOiAlbVxuIik7CisJcmV0dXJuIDE7CisgICAgICB9CisgICAgdHpzZXQgKCk7CisgIH0KKworICByZXR1cm4gZXJyb3JzID4gMDsKK30KZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS90emZpbGUuaCBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS90emZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmVjZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3R6ZmlsZS5oCkBAIC0wLDAgKzEsMTY5IEBACisjaWZuZGVmIFRaRklMRV9ICisKKyNkZWZpbmUgVFpGSUxFX0gKKworLyoKKyoqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiwgc28gY2xhcmlmaWVkIGFzIG9mCisqKiAxOTk2LTA2LTA1IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKyovCisKKy8qCisqKiBUaGlzIGhlYWRlciBpcyBmb3IgdXNlIE9OTFkgd2l0aCB0aGUgdGltZSBjb252ZXJzaW9uIGNvZGUuCisqKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIHJlbWFpbiB1bmNoYW5nZWQsCisqKiBvciB0aGF0IGl0IHdpbGwgcmVtYWluIGF0IGFsbC4KKyoqIERvIE5PVCBjb3B5IGl0IHRvIGFueSBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnkuCisqKiBUaGFuayB5b3UhCisqLworCisvKgorKiogSW5mb3JtYXRpb24gYWJvdXQgdGltZSB6b25lIGZpbGVzLgorKi8KKworI2lmbmRlZiBUWkRJUgorI2RlZmluZSBUWkRJUgkiL3Vzci9sb2NhbC9ldGMvem9uZWluZm8iIC8qIFRpbWUgem9uZSBvYmplY3QgZmlsZSBkaXJlY3RvcnkgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBUWkRJUiAqLworCisjaWZuZGVmIFRaREVGQVVMVAorI2RlZmluZSBUWkRFRkFVTFQJImxvY2FsdGltZSIKKyNlbmRpZiAvKiAhZGVmaW5lZCBUWkRFRkFVTFQgKi8KKworI2lmbmRlZiBUWkRFRlJVTEVTCisjZGVmaW5lIFRaREVGUlVMRVMJInBvc2l4cnVsZXMiCisjZW5kaWYgLyogIWRlZmluZWQgVFpERUZSVUxFUyAqLworCisvKgorKiogRWFjaCBmaWxlIGJlZ2lucyB3aXRoLiAuIC4KKyovCisKKyNkZWZpbmUJVFpfTUFHSUMJIlRaaWYiCisKK3N0cnVjdCB0emhlYWQgeworCWNoYXIJdHpoX21hZ2ljWzRdOwkJLyogVFpfTUFHSUMgKi8KKwljaGFyCXR6aF92ZXJzaW9uWzFdOwkJLyogJ1wwJyBvciAnMicgb3IgJzMnIGFzIG9mIDIwMTMgKi8KKwljaGFyCXR6aF9yZXNlcnZlZFsxNV07CS8qIHJlc2VydmVkOyBtdXN0IGJlIHplcm8gKi8KKwljaGFyCXR6aF90dGlzZ210Y250WzRdOwkvKiBjb2RlZCBudW1iZXIgb2YgdHJhbnMuIHRpbWUgZmxhZ3MgKi8KKwljaGFyCXR6aF90dGlzc3RkY250WzRdOwkvKiBjb2RlZCBudW1iZXIgb2YgdHJhbnMuIHRpbWUgZmxhZ3MgKi8KKwljaGFyCXR6aF9sZWFwY250WzRdOwkJLyogY29kZWQgbnVtYmVyIG9mIGxlYXAgc2Vjb25kcyAqLworCWNoYXIJdHpoX3RpbWVjbnRbNF07CQkvKiBjb2RlZCBudW1iZXIgb2YgdHJhbnNpdGlvbiB0aW1lcyAqLworCWNoYXIJdHpoX3R5cGVjbnRbNF07CQkvKiBjb2RlZCBudW1iZXIgb2YgbG9jYWwgdGltZSB0eXBlcyAqLworCWNoYXIJdHpoX2NoYXJjbnRbNF07CQkvKiBjb2RlZCBudW1iZXIgb2YgYWJici4gY2hhcnMgKi8KK307CisKKy8qCisqKiAuIC4gLmZvbGxvd2VkIGJ5LiAuIC4KKyoqCisqKgl0emhfdGltZWNudCAoY2hhciBbNF0pcwkJY29kZWQgdHJhbnNpdGlvbiB0aW1lcyBhIGxhIHRpbWUoMikKKyoqCXR6aF90aW1lY250ICh1bnNpZ25lZCBjaGFyKXMJdHlwZXMgb2YgbG9jYWwgdGltZSBzdGFydGluZyBhdCBhYm92ZQorKioJdHpoX3R5cGVjbnQgcmVwZXRpdGlvbnMgb2YKKyoqCQlvbmUgKGNoYXIgWzRdKQkJY29kZWQgVVQgb2Zmc2V0IGluIHNlY29uZHMKKyoqCQlvbmUgKHVuc2lnbmVkIGNoYXIpCXVzZWQgdG8gc2V0IHRtX2lzZHN0CisqKgkJb25lICh1bnNpZ25lZCBjaGFyKQl0aGF0J3MgYW4gYWJicmV2aWF0aW9uIGxpc3QgaW5kZXgKKyoqCXR6aF9jaGFyY250IChjaGFyKXMJCSdcMCctdGVybWluYXRlZCB6b25lIGFiYnJldmlhdGlvbnMKKyoqCXR6aF9sZWFwY250IHJlcGV0aXRpb25zIG9mCisqKgkJb25lIChjaGFyIFs0XSkJCWNvZGVkIGxlYXAgc2Vjb25kIHRyYW5zaXRpb24gdGltZXMKKyoqCQlvbmUgKGNoYXIgWzRdKQkJdG90YWwgY29ycmVjdGlvbiBhZnRlciBhYm92ZQorKioJdHpoX3R0aXNzdGRjbnQgKGNoYXIpcwkJaW5kZXhlZCBieSB0eXBlOyBpZiAxLCB0cmFuc2l0aW9uCisqKgkJCQkJdGltZSBpcyBzdGFuZGFyZCB0aW1lLCBpZiAwLAorKioJCQkJCXRyYW5zaXRpb24gdGltZSBpcyB3YWxsIGNsb2NrIHRpbWUKKyoqCQkJCQlpZiBhYnNlbnQsIHRyYW5zaXRpb24gdGltZXMgYXJlCisqKgkJCQkJYXNzdW1lZCB0byBiZSB3YWxsIGNsb2NrIHRpbWUKKyoqCXR6aF90dGlzZ210Y250IChjaGFyKXMJCWluZGV4ZWQgYnkgdHlwZTsgaWYgMSwgdHJhbnNpdGlvbgorKioJCQkJCXRpbWUgaXMgVVQsIGlmIDAsCisqKgkJCQkJdHJhbnNpdGlvbiB0aW1lIGlzIGxvY2FsIHRpbWUKKyoqCQkJCQlpZiBhYnNlbnQsIHRyYW5zaXRpb24gdGltZXMgYXJlCisqKgkJCQkJYXNzdW1lZCB0byBiZSBsb2NhbCB0aW1lCisqLworCisvKgorKiogSWYgdHpoX3ZlcnNpb24gaXMgJzInIG9yIGdyZWF0ZXIsIHRoZSBhYm92ZSBpcyBmb2xsb3dlZCBieSBhIHNlY29uZCBpbnN0YW5jZQorKiogb2YgdHpoZWFkIGFuZCBhIHNlY29uZCBpbnN0YW5jZSBvZiB0aGUgZGF0YSBpbiB3aGljaCBlYWNoIGNvZGVkIHRyYW5zaXRpb24KKyoqIHRpbWUgdXNlcyA4IHJhdGhlciB0aGFuIDQgY2hhcnMsCisqKiB0aGVuIGEgUE9TSVgtVFotZW52aXJvbm1lbnQtdmFyaWFibGUtc3R5bGUgc3RyaW5nIGZvciB1c2UgaW4gaGFuZGxpbmcKKyoqIGluc3RhbnRzIGFmdGVyIHRoZSBsYXN0IHRyYW5zaXRpb24gdGltZSBzdG9yZWQgaW4gdGhlIGZpbGUKKyoqICh3aXRoIG5vdGhpbmcgYmV0d2VlbiB0aGUgbmV3bGluZXMgaWYgdGhlcmUgaXMgbm8gUE9TSVggcmVwcmVzZW50YXRpb24gZm9yCisqKiBzdWNoIGluc3RhbnRzKS4KKyoqCisqKiBJZiB0el92ZXJzaW9uIGlzICczJyBvciBncmVhdGVyLCB0aGUgYWJvdmUgaXMgZXh0ZW5kZWQgYXMgZm9sbG93cy4KKyoqIEZpcnN0LCB0aGUgUE9TSVggVFogc3RyaW5nJ3MgaG91ciBvZmZzZXQgbWF5IHJhbmdlIGZyb20gLTE2NworKiogdGhyb3VnaCAxNjcgYXMgY29tcGFyZWQgdG8gdGhlIFBPU0lYLXJlcXVpcmVkIDAgdGhyb3VnaCAyNC4KKyoqIFNlY29uZCwgaXRzIERTVCBzdGFydCB0aW1lIG1heSBiZSBKYW51YXJ5IDEgYXQgMDA6MDAgYW5kIGl0cyBzdG9wCisqKiB0aW1lIERlY2VtYmVyIDMxIGF0IDI0OjAwIHBsdXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBEU1QgYW5kCisqKiBzdGFuZGFyZCB0aW1lLCBpbmRpY2F0aW5nIERTVCBhbGwgeWVhci4KKyovCisKKy8qCisqKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgInR6c2V0KCkiIHJlZnVzZXMgdG8gZGVhbCB3aXRoIGZpbGVzIHRoYXQKKyoqIGV4Y2VlZCBhbnkgb2YgdGhlIGxpbWl0cyBiZWxvdy4KKyovCisKKyNpZm5kZWYgVFpfTUFYX1RJTUVTCisjZGVmaW5lIFRaX01BWF9USU1FUwkyMDAwCisjZW5kaWYgLyogIWRlZmluZWQgVFpfTUFYX1RJTUVTICovCisKKyNpZm5kZWYgVFpfTUFYX1RZUEVTCisvKiBUaGlzIG11c3QgYmUgYXQgbGVhc3QgMTcgZm9yIEV1cm9wZS9TYW1hcmEgYW5kIEV1cm9wZS9WaWxuaXVzLiAgKi8KKyNkZWZpbmUgVFpfTUFYX1RZUEVTCTI1NiAvKiBMaW1pdGVkIGJ5IHdoYXQgKHVuc2lnbmVkIGNoYXIpJ3MgY2FuIGhvbGQgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBUWl9NQVhfVFlQRVMgKi8KKworI2lmbmRlZiBUWl9NQVhfQ0hBUlMKKyNkZWZpbmUgVFpfTUFYX0NIQVJTCTUwCS8qIE1heGltdW0gbnVtYmVyIG9mIGFiYnJldmlhdGlvbiBjaGFyYWN0ZXJzICovCisJCQkJLyogKGxpbWl0ZWQgYnkgd2hhdCB1bnNpZ25lZCBjaGFycyBjYW4gaG9sZCkgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBUWl9NQVhfQ0hBUlMgKi8KKworI2lmbmRlZiBUWl9NQVhfTEVBUFMKKyNkZWZpbmUgVFpfTUFYX0xFQVBTCTUwCS8qIE1heGltdW0gbnVtYmVyIG9mIGxlYXAgc2Vjb25kIGNvcnJlY3Rpb25zICovCisjZW5kaWYgLyogIWRlZmluZWQgVFpfTUFYX0xFQVBTICovCisKKyNkZWZpbmUgU0VDU1BFUk1JTgk2MAorI2RlZmluZSBNSU5TUEVSSE9VUgk2MAorI2RlZmluZSBIT1VSU1BFUkRBWQkyNAorI2RlZmluZSBEQVlTUEVSV0VFSwk3CisjZGVmaW5lIERBWVNQRVJOWUVBUgkzNjUKKyNkZWZpbmUgREFZU1BFUkxZRUFSCTM2NgorI2RlZmluZSBTRUNTUEVSSE9VUgkoU0VDU1BFUk1JTiAqIE1JTlNQRVJIT1VSKQorI2RlZmluZSBTRUNTUEVSREFZCSgoaW50X2Zhc3QzMl90KSBTRUNTUEVSSE9VUiAqIEhPVVJTUEVSREFZKQorI2RlZmluZSBNT05TUEVSWUVBUgkxMgorCisjZGVmaW5lIFRNX1NVTkRBWQkwCisjZGVmaW5lIFRNX01PTkRBWQkxCisjZGVmaW5lIFRNX1RVRVNEQVkJMgorI2RlZmluZSBUTV9XRURORVNEQVkJMworI2RlZmluZSBUTV9USFVSU0RBWQk0CisjZGVmaW5lIFRNX0ZSSURBWQk1CisjZGVmaW5lIFRNX1NBVFVSREFZCTYKKworI2RlZmluZSBUTV9KQU5VQVJZCTAKKyNkZWZpbmUgVE1fRkVCUlVBUlkJMQorI2RlZmluZSBUTV9NQVJDSAkyCisjZGVmaW5lIFRNX0FQUklMCTMKKyNkZWZpbmUgVE1fTUFZCQk0CisjZGVmaW5lIFRNX0pVTkUJCTUKKyNkZWZpbmUgVE1fSlVMWQkJNgorI2RlZmluZSBUTV9BVUdVU1QJNworI2RlZmluZSBUTV9TRVBURU1CRVIJOAorI2RlZmluZSBUTV9PQ1RPQkVSCTkKKyNkZWZpbmUgVE1fTk9WRU1CRVIJMTAKKyNkZWZpbmUgVE1fREVDRU1CRVIJMTEKKworI2RlZmluZSBUTV9ZRUFSX0JBU0UJMTkwMAorCisjZGVmaW5lIEVQT0NIX1lFQVIJMTk3MAorI2RlZmluZSBFUE9DSF9XREFZCVRNX1RIVVJTREFZCisKKyNkZWZpbmUgaXNsZWFwKHkpICgoKHkpICUgNCkgPT0gMCAmJiAoKCh5KSAlIDEwMCkgIT0gMCB8fCAoKHkpICUgNDAwKSA9PSAwKSkKKworLyoKKyoqIFNpbmNlIGV2ZXJ5dGhpbmcgaW4gaXNsZWFwIGlzIG1vZHVsbyA0MDAgKG9yIGEgZmFjdG9yIG9mIDQwMCksIHdlIGtub3cgdGhhdAorKioJaXNsZWFwKHkpID09IGlzbGVhcCh5ICUgNDAwKQorKiogYW5kIHNvCisqKglpc2xlYXAoYSArIGIpID09IGlzbGVhcCgoYSArIGIpICUgNDAwKQorKiogb3IKKyoqCWlzbGVhcChhICsgYikgPT0gaXNsZWFwKGEgJSA0MDAgKyBiICUgNDAwKQorKiogVGhpcyBpcyB0cnVlIGV2ZW4gaWYgJSBtZWFucyBtb2R1bG8gcmF0aGVyIHRoYW4gRm9ydHJhbiByZW1haW5kZXIKKyoqICh3aGljaCBpcyBhbGxvd2VkIGJ5IEM4OSBidXQgbm90IEM5OSkuCisqKiBXZSB1c2UgdGhpcyB0byBhdm9pZCBhZGRpdGlvbiBvdmVyZmxvdyBwcm9ibGVtcy4KKyovCisKKyNkZWZpbmUgaXNsZWFwX3N1bShhLCBiKQlpc2xlYXAoKGEpICUgNDAwICsgKGIpICUgNDAwKQorCisjZW5kaWYgLyogIWRlZmluZWQgVFpGSUxFX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS90enNlbGVjdC5rc2ggYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvdHpzZWxlY3Qua3NoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjM2IyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvdHpzZWxlY3Qua3NoCkBAIC0wLDAgKzEsNTU2IEBACisjIS9iaW4vYmFzaAorCitQS0dWRVJTSU9OPScodHpjb2RlKSAnCitUWlZFUlNJT049c2VlX01ha2VmaWxlCitSRVBPUlRfQlVHU19UTz10ekBpYW5hLm9yZworCisjIEFzayB0aGUgdXNlciBhYm91dCB0aGUgdGltZSB6b25lLCBhbmQgb3V0cHV0IHRoZSByZXN1bHRpbmcgVFogdmFsdWUgdG8gc3Rkb3V0LgorIyBJbnRlcmFjdCB3aXRoIHRoZSB1c2VyIHZpYSBzdGRlcnIgYW5kIHN0ZGluLgorCisjIENvbnRyaWJ1dGVkIGJ5IFBhdWwgRWdnZXJ0LgorCisjIFBvcnRpbmcgbm90ZXM6CisjCisjIFRoaXMgc2NyaXB0IHJlcXVpcmVzIGEgUG9zaXgtbGlrZSBzaGVsbCBhbmQgcHJlZmVycyB0aGUgZXh0ZW5zaW9uIG9mIGEKKyMgJ3NlbGVjdCcgc3RhdGVtZW50LiAgVGhlICdzZWxlY3QnIHN0YXRlbWVudCB3YXMgaW50cm9kdWNlZCBpbiB0aGUKKyMgS29ybiBzaGVsbCBhbmQgaXMgYXZhaWxhYmxlIGluIEJhc2ggYW5kIG90aGVyIHNoZWxsIGltcGxlbWVudGF0aW9ucy4KKyMgSWYgeW91ciBob3N0IGxhY2tzIGJvdGggQmFzaCBhbmQgdGhlIEtvcm4gc2hlbGwsIHlvdSBjYW4gZ2V0IHRoZWlyCisjIHNvdXJjZSBmcm9tIG9uZSBvZiB0aGVzZSBsb2NhdGlvbnM6CisjCisjCUJhc2ggPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL2Jhc2guaHRtbD4KKyMJS29ybiBTaGVsbCA8aHR0cDovL3d3dy5rb3Juc2hlbGwuY29tLz4KKyMJUHVibGljIERvbWFpbiBLb3JuIFNoZWxsIDxodHRwOi8vd3d3LmNzLm11bi5jYS9+bWljaGFlbC9wZGtzaC8+CisjCisjIEZvciBwb3J0YWJpbGl0eSB0byBTb2xhcmlzIDkgL2Jpbi9zaCB0aGlzIHNjcmlwdCBhdm9pZHMgc29tZSBQT1NJWAorIyBmZWF0dXJlcyBhbmQgY29tbW9uIGV4dGVuc2lvbnMsIHN1Y2ggYXMgJCguLi4pICh3aGljaCB3b3JrcyBzb21ldGltZXMKKyMgYnV0IG5vdCBvdGhlcnMpLCAkKCguLi4pKSwgYW5kICQxMC4KKyMKKyMgVGhpcyBzY3JpcHQgYWxzbyB1c2VzIHNldmVyYWwgZmVhdHVyZXMgb2YgbW9kZXJuIGF3ayBwcm9ncmFtcy4KKyMgSWYgeW91ciBob3N0IGxhY2tzIGF3aywgb3IgaGFzIGFuIG9sZCBhd2sgdGhhdCBkb2VzIG5vdCBjb25mb3JtIHRvIFBvc2l4LAorIyB5b3UgY2FuIHVzZSBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBmcmVlIHByb2dyYW1zIGluc3RlYWQ6CisjCisjCUdhd2sgKEdOVSBhd2spIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2F3ay8+CisjCW1hd2sgPGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9tYXdrLz4KKworCisjIFNwZWNpZnkgZGVmYXVsdCB2YWx1ZXMgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpZiB0aGV5IGFyZSB1bnNldC4KKzogJHtBV0s9YXdrfQorOiAke1RaRElSPWBwd2RgfQorCisjIE91dHB1dCBvbmUgYXJndW1lbnQgYXMtaXMgdG8gc3RhbmRhcmQgb3V0cHV0LgorIyBTYWZlciB0aGFuICdlY2hvJywgd2hpY2ggY2FuIG1pc2hhbmRsZSAnXCcgb3IgbGVhZGluZyAnLScuCitzYXkoKSB7CisgICAgcHJpbnRmICclc1xuJyAiJDEiCit9CisKKyMgQ2hlY2sgZm9yIGF3ayBQb3NpeCBjb21wbGlhbmNlLgorKCRBV0sgLXYgeD15ICdCRUdJTiB7IGV4aXQgMTIzIH0nKSA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMQorWyAkPyA9IDEyMyBdIHx8IHsKKwlzYXkgPiYyICIkMDogU29ycnksIHlvdXIgJyRBV0snIHByb2dyYW0gaXMgbm90IFBvc2l4IGNvbXBhdGlibGUuIgorCWV4aXQgMQorfQorCitjb29yZD0KK2xvY2F0aW9uX2xpbWl0PTEwCit6b25ldGFidHlwZT16b25lMTk3MAorCit1c2FnZT0iVXNhZ2U6IHR6c2VsZWN0IFstLXZlcnNpb25dIFstLWhlbHBdIFstYyBDT09SRF0gWy1uIExJTUlUXQorU2VsZWN0IGEgdGltZSB6b25lIGludGVyYWN0aXZlbHkuCisKK09wdGlvbnM6CisKKyAgLWMgQ09PUkQKKyAgICBJbnN0ZWFkIG9mIGFza2luZyBmb3IgY29udGluZW50IGFuZCB0aGVuIGNvdW50cnkgYW5kIHRoZW4gY2l0eSwKKyAgICBhc2sgZm9yIHNlbGVjdGlvbiBmcm9tIHRpbWUgem9uZXMgd2hvc2UgbGFyZ2VzdCBjaXRpZXMKKyAgICBhcmUgY2xvc2VzdCB0byB0aGUgbG9jYXRpb24gd2l0aCBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMgQ09PUkQuCisgICAgQ09PUkQgc2hvdWxkIHVzZSBJU08gNjcwOSBub3RhdGlvbiwgZm9yIGV4YW1wbGUsICctYyArNDg1MiswMDIyMCcKKyAgICBmb3IgUGFyaXMgKGluIGRlZ3JlZXMgYW5kIG1pbnV0ZXMsIE5vcnRoIGFuZCBFYXN0KSwgb3IKKyAgICAnLWMgLTM1LTA1OCcgZm9yIEJ1ZW5vcyBBaXJlcyAoaW4gZGVncmVlcywgU291dGggYW5kIFdlc3QpLgorCisgIC1uIExJTUlUCisgICAgRGlzcGxheSBhdCBtb3N0IExJTUlUIGxvY2F0aW9ucyB3aGVuIC1jIGlzIHVzZWQgKGRlZmF1bHQgJGxvY2F0aW9uX2xpbWl0KS4KKworICAtLXZlcnNpb24KKyAgICBPdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKworICAtLWhlbHAKKyAgICBPdXRwdXQgdGhpcyBoZWxwLgorCitSZXBvcnQgYnVncyB0byAkUkVQT1JUX0JVR1NfVE8uIgorCisjIEFzayB0aGUgdXNlciB0byBzZWxlY3QgZnJvbSB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMsCisjIGFuZCBhc3NpZ24gdGhlIHNlbGVjdGVkIGFyZ3VtZW50IHRvIHRoZSB2YXJpYWJsZSAnc2VsZWN0X3Jlc3VsdCcuCisjIEV4aXQgb24gRU9GIG9yIEkvTyBlcnJvci4gIFVzZSB0aGUgc2hlbGwncyAnc2VsZWN0JyBidWlsdGluIGlmIGF2YWlsYWJsZSwKKyMgZmFsbGluZyBiYWNrIG9uIGEgbGVzcy1uaWNlIGJ1dCBwb3J0YWJsZSBzdWJzdGl0dXRlIG90aGVyd2lzZS4KK2lmCisgIGNhc2UgJEJBU0hfVkVSU0lPTiBpbgorICA/KikgOiA7OworICAnJykKKyAgICAjICc7IGV4aXQnIHNob3VsZCBiZSByZWR1bmRhbnQsIGJ1dCBEYXNoIGRvZXNuJ3QgcHJvcGVybHkgZmFpbCB3aXRob3V0IGl0LgorICAgIChldmFsICdzZXQgLS07IHNlbGVjdCB4OyBkbyBicmVhazsgZG9uZTsgZXhpdCcpIDwvZGV2L251bGwgMj4vZGV2L251bGwKKyAgZXNhYwordGhlbgorICAjIERvIHRoaXMgaW5zaWRlICdldmFsJywgYXMgb3RoZXJ3aXNlIHRoZSBzaGVsbCBtaWdodCBleGl0IHdoZW4gcGFyc2luZyBpdAorICAjIGV2ZW4gdGhvdWdoIGl0IGlzIG5ldmVyIGV4ZWN1dGVkLgorICBldmFsICcKKyAgICBkb3NlbGVjdCgpIHsKKyAgICAgIHNlbGVjdCBzZWxlY3RfcmVzdWx0CisgICAgICBkbworCWNhc2UgJHNlbGVjdF9yZXN1bHQgaW4KKwkiIikgZWNobyA+JjIgIlBsZWFzZSBlbnRlciBhIG51bWJlciBpbiByYW5nZS4iIDs7CisJPyopIGJyZWFrCisJZXNhYworICAgICAgZG9uZSB8fCBleGl0CisgICAgfQorCisgICAgIyBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBiYXNoIDEuMTQuNyBhbmQgZWFybGllciwgd2hlcmUgJFBTMyBpcyBzZW50IHRvIHN0ZG91dC4KKyAgICBjYXNlICRCQVNIX1ZFUlNJT04gaW4KKyAgICBbMDFdLiopCisgICAgICBjYXNlIGBlY2hvIDEgfCAoc2VsZWN0IHggaW4geDsgZG8gYnJlYWs7IGRvbmUpIDI+L2Rldi9udWxsYCBpbgorICAgICAgPyopIFBTMz0KKyAgICAgIGVzYWMKKyAgICBlc2FjCisgICcKK2Vsc2UKKyAgZG9zZWxlY3QoKSB7CisgICAgIyBGaWVsZCB3aWR0aCBvZiB0aGUgcHJvbXB0IG51bWJlcnMuCisgICAgc2VsZWN0X3dpZHRoPWBleHByICQjIDogJy4qJ2AKKworICAgIHNlbGVjdF9pPQorCisgICAgd2hpbGUgOgorICAgIGRvCisgICAgICBjYXNlICRzZWxlY3RfaSBpbgorICAgICAgJycpCisJc2VsZWN0X2k9MAorCWZvciBzZWxlY3Rfd29yZAorCWRvCisJICBzZWxlY3RfaT1gZXhwciAkc2VsZWN0X2kgKyAxYAorCSAgcHJpbnRmID4mMiAiJSR7c2VsZWN0X3dpZHRofWQpICVzXFxuIiAkc2VsZWN0X2kgIiRzZWxlY3Rfd29yZCIKKwlkb25lIDs7CisgICAgICAqWyEwLTldKikKKwllY2hvID4mMiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGluIHJhbmdlLicgOzsKKyAgICAgICopCisJaWYgdGVzdCAxIC1sZSAkc2VsZWN0X2kgJiYgdGVzdCAkc2VsZWN0X2kgLWxlICQjOyB0aGVuCisJICBzaGlmdCBgZXhwciAkc2VsZWN0X2kgLSAxYAorCSAgc2VsZWN0X3Jlc3VsdD0kMQorCSAgYnJlYWsKKwlmaQorCWVjaG8gPiYyICdQbGVhc2UgZW50ZXIgYSBudW1iZXIgaW4gcmFuZ2UuJworICAgICAgZXNhYworCisgICAgICAjIFByb21wdCBhbmQgcmVhZCBpbnB1dC4KKyAgICAgIHByaW50ZiA+JjIgJXMgIiR7UFMzLSM/IH0iCisgICAgICByZWFkIHNlbGVjdF9pIHx8IGV4aXQKKyAgICBkb25lCisgIH0KK2ZpCisKK3doaWxlIGdldG9wdHMgYzpuOnQ6LTogb3B0CitkbworICAgIGNhc2UgJG9wdCRPUFRBUkcgaW4KKyAgICBjKikKKwljb29yZD0kT1BUQVJHIDs7CisgICAgbiopCisJbG9jYXRpb25fbGltaXQ9JE9QVEFSRyA7OworICAgIHQqKSAjIFVuZG9jdW1lbnRlZCBvcHRpb24sIHVzZWQgZm9yIGRldmVsb3BlciB0ZXN0aW5nLgorCXpvbmV0YWJ0eXBlPSRPUFRBUkcgOzsKKyAgICAtaGVscCkKKwlleGVjIGVjaG8gIiR1c2FnZSIgOzsKKyAgICAtdmVyc2lvbikKKwlleGVjIGVjaG8gInR6c2VsZWN0ICRQS0dWRVJTSU9OJFRaVkVSU0lPTiIgOzsKKyAgICAtKikKKwlzYXkgPiYyICIkMDogLSRvcHQkT1BUQVJHOiB1bmtub3duIG9wdGlvbjsgdHJ5ICckMCAtLWhlbHAnIjsgZXhpdCAxIDs7CisgICAgKikKKwlzYXkgPiYyICIkMDogdHJ5ICckMCAtLWhlbHAnIjsgZXhpdCAxIDs7CisgICAgZXNhYworZG9uZQorCitzaGlmdCBgZXhwciAkT1BUSU5EIC0gMWAKK2Nhc2UgJCMgaW4KKzApIDs7CisqKSBzYXkgPiYyICIkMDogJDE6IHVua25vd24gYXJndW1lbnQiOyBleGl0IDEgOzsKK2VzYWMKKworIyBNYWtlIHN1cmUgdGhlIHRhYmxlcyBhcmUgcmVhZGFibGUuCitUWl9DT1VOVFJZX1RBQkxFPSRUWkRJUi9pc28zMTY2LnRhYgorVFpfWk9ORV9UQUJMRT0kVFpESVIvJHpvbmV0YWJ0eXBlLnRhYgorZm9yIGYgaW4gJFRaX0NPVU5UUllfVEFCTEUgJFRaX1pPTkVfVEFCTEUKK2RvCisJPCIkZiIgfHwgeworCQlzYXkgPiYyICIkMDogdGltZSB6b25lIGZpbGVzIGFyZSBub3Qgc2V0IHVwIGNvcnJlY3RseSIKKwkJZXhpdCAxCisJfQorZG9uZQorCisjIElmIHRoZSBjdXJyZW50IGxvY2FsZSBkb2VzIG5vdCBzdXBwb3J0IFVURi04LCBjb252ZXJ0IGRhdGEgdG8gY3VycmVudAorIyBsb2NhbGUncyBmb3JtYXQgaWYgcG9zc2libGUsIGFzIHRoZSBzaGVsbCBhbGlnbnMgY29sdW1ucyBiZXR0ZXIgdGhhdCB3YXkuCisjIENoZWNrIHRoZSBVVEYtOCBvZiBVKzEyMzQ1IENVTkVJRk9STSBTSUdOIFVSVSBUSU1FUyBLSS4KKyEgJEFXSyAnQkVHSU4geyB1MTIzNDUgPSAiXDM2MFwyMjJcMjE1XDIwNSI7IGV4aXQgbGVuZ3RoKHUxMjM0NSkgIT0gMSB9JyAmJgorICAgIHsgdG1wPWAobWt0ZW1wIC1kKSAyPi9kZXYvbnVsbGAgfHwgeworCXRtcD0ke1RNUERJUi0vdG1wfS90enNlbGVjdC4kJCAmJgorCSh1bWFzayA3NyAmJiBta2RpciAtLSAiJHRtcCIpCisgICAgfTt9ICYmCisgICAgdHJhcCAnc3RhdHVzPSQ/OyBybSAtZnIgLS0gIiR0bXAiOyBleGl0ICRzdGF0dXMnIDAgSFVQIElOVCBQSVBFIFRFUk0gJiYKKyAgICAoaWNvbnYgLWYgVVRGLTggLXQgLy9UUkFOU0xJVCA8IiRUWl9DT1VOVFJZX1RBQkxFIiA+JHRtcC9pc28zMTY2LnRhYikgXAorICAgICAgICAyPi9kZXYvbnVsbCAmJgorICAgIFRaX0NPVU5UUllfVEFCTEU9JHRtcC9pc28zMTY2LnRhYiAmJgorICAgIGljb252IC1mIFVURi04IC10IC8vVFJBTlNMSVQgPCIkVFpfWk9ORV9UQUJMRSIgPiR0bXAvJHpvbmV0YWJ0eXBlLnRhYiAmJgorICAgIFRaX1pPTkVfVEFCTEU9JHRtcC8kem9uZXRhYnR5cGUudGFiCisKK25ld2xpbmU9JworJworSUZTPSRuZXdsaW5lCisKKworIyBBd2sgc2NyaXB0IHRvIHJlYWQgYSB0aW1lIHpvbmUgdGFibGUgYW5kIG91dHB1dCB0aGUgc2FtZSB0YWJsZSwKKyMgd2l0aCBlYWNoIGNvbHVtbiBwcmVjZWRlZCBieSBpdHMgZGlzdGFuY2UgZnJvbSAnaGVyZScuCitvdXRwdXRfZGlzdGFuY2VzPScKKyAgQkVHSU4geworICAgIEZTID0gIlx0IgorICAgIHdoaWxlIChnZXRsaW5lIDxUWl9DT1VOVFJZX1RBQkxFKQorICAgICAgaWYgKCQwIH4gL15bXiNdLykKKyAgICAgICAgY291bnRyeVskMV0gPSAkMgorICAgIGNvdW50cnlbIlVTIl0gPSAiVVMiICMgT3RoZXJ3aXNlIHRoZSBzdHJpbmdzIGdldCB0b28gbG9uZy4KKyAgfQorICBmdW5jdGlvbiBhYnMoeCkgeworICAgIHJldHVybiB4IDwgMCA/IC14IDogeDsKKyAgfQorICBmdW5jdGlvbiBtaW4oeCwgeSkgeworICAgIHJldHVybiB4IDwgeSA/IHggOiB5OworICB9CisgIGZ1bmN0aW9uIGNvbnZlcnRfY29vcmQoY29vcmQsIGRlZywgbWludXRlLCBpbGVuLCBzaWduLCBzZWMpIHsKKyAgICBpZiAoY29vcmQgfiAvXlstK10/WzAtOV0/WzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldKFteMC05XXwkKS8pIHsKKyAgICAgIGRlZ21pbnNlYyA9IGNvb3JkCisgICAgICBpbnRkZWcgPSBkZWdtaW5zZWMgPCAwID8gLWludCgtZGVnbWluc2VjIC8gMTAwMDApIDogaW50KGRlZ21pbnNlYyAvIDEwMDAwKQorICAgICAgbWluc2VjID0gZGVnbWluc2VjIC0gaW50ZGVnICogMTAwMDAKKyAgICAgIGludG1pbiA9IG1pbnNlYyA8IDAgPyAtaW50KC1taW5zZWMgLyAxMDApIDogaW50KG1pbnNlYyAvIDEwMCkKKyAgICAgIHNlYyA9IG1pbnNlYyAtIGludG1pbiAqIDEwMAorICAgICAgZGVnID0gKGludGRlZyAqIDM2MDAgKyBpbnRtaW4gKiA2MCArIHNlYykgLyAzNjAwCisgICAgfSBlbHNlIGlmIChjb29yZCB+IC9eWy0rXT9bMC05XT9bMC05XVswLTldWzAtOV1bMC05XShbXjAtOV18JCkvKSB7CisgICAgICBkZWdtaW4gPSBjb29yZAorICAgICAgaW50ZGVnID0gZGVnbWluIDwgMCA/IC1pbnQoLWRlZ21pbiAvIDEwMCkgOiBpbnQoZGVnbWluIC8gMTAwKQorICAgICAgbWludXRlID0gZGVnbWluIC0gaW50ZGVnICogMTAwCisgICAgICBkZWcgPSAoaW50ZGVnICogNjAgKyBtaW51dGUpIC8gNjAKKyAgICB9IGVsc2UKKyAgICAgIGRlZyA9IGNvb3JkCisgICAgcmV0dXJuIGRlZyAqIDAuMDE3NDUzMjkyNTE5OTQzMjk2CisgIH0KKyAgZnVuY3Rpb24gY29udmVydF9sYXRpdHVkZShjb29yZCkgeworICAgIG1hdGNoKGNvb3JkLCAvLi4qWy0rXS8pCisgICAgcmV0dXJuIGNvbnZlcnRfY29vcmQoc3Vic3RyKGNvb3JkLCAxLCBSTEVOR1RIIC0gMSkpCisgIH0KKyAgZnVuY3Rpb24gY29udmVydF9sb25naXR1ZGUoY29vcmQpIHsKKyAgICBtYXRjaChjb29yZCwgLy4uKlstK10vKQorICAgIHJldHVybiBjb252ZXJ0X2Nvb3JkKHN1YnN0cihjb29yZCwgUkxFTkdUSCkpCisgIH0KKyAgIyBHcmVhdC1jaXJjbGUgZGlzdGFuY2UgYmV0d2VlbiBwb2ludHMgd2l0aCBnaXZlbiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlLgorICAjIElucHV0cyBhbmQgb3V0cHV0IGFyZSBpbiByYWRpYW5zLiAgVGhpcyB1c2VzIHRoZSBncmVhdC1jaXJjbGUgc3BlY2lhbAorICAjIGNhc2Ugb2YgdGhlIFZpY2VudHkgZm9ybXVsYSBmb3IgZGlzdGFuY2VzIG9uIGVsbGlwc29pZHMuCisgIGZ1bmN0aW9uIGdjZGlzdChsYXQxLCBsb25nMSwgbGF0MiwgbG9uZzIsIGRsb25nLCB4LCB5LCBudW0sIGRlbm9tKSB7CisgICAgZGxvbmcgPSBsb25nMiAtIGxvbmcxCisgICAgeCA9IGNvcyhsYXQyKSAqIHNpbihkbG9uZykKKyAgICB5ID0gY29zKGxhdDEpICogc2luKGxhdDIpIC0gc2luKGxhdDEpICogY29zKGxhdDIpICogY29zKGRsb25nKQorICAgIG51bSA9IHNxcnQoeCAqIHggKyB5ICogeSkKKyAgICBkZW5vbSA9IHNpbihsYXQxKSAqIHNpbihsYXQyKSArIGNvcyhsYXQxKSAqIGNvcyhsYXQyKSAqIGNvcyhkbG9uZykKKyAgICByZXR1cm4gYXRhbjIobnVtLCBkZW5vbSkKKyAgfQorICAjIFBhcmFsbGVsIGRpc3RhbmNlIGJldHdlZW4gcG9pbnRzIHdpdGggZ2l2ZW4gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZS4KKyAgIyBUaGlzIGlzIHRoZSBwcm9kdWN0IG9mIHRoZSBsb25naXR1ZGUgZGlmZmVyZW5jZSBhbmQgdGhlIGNvc2luZQorICAjIG9mIHRoZSBsYXRpdHVkZSBvZiB0aGUgcG9pbnQgdGhhdCBpcyBmdXJ0aGVyIGZyb20gdGhlIGVxdWF0b3IuCisgICMgSS5lLiwgaXQgY29uc2lkZXJzIGxvbmdpdHVkZXMgdG8gYmUgZnVydGhlciBhcGFydCBpZiB0aGV5IGFyZQorICAjIG5lYXJlciB0aGUgZXF1YXRvci4KKyAgZnVuY3Rpb24gcGFyZGlzdChsYXQxLCBsb25nMSwgbGF0MiwgbG9uZzIpIHsKKyAgICByZXR1cm4gYWJzKGxvbmcxIC0gbG9uZzIpICogbWluKGNvcyhsYXQxKSwgY29zKGxhdDIpKQorICB9CisgICMgVGhlIGRpc3RhbmNlIGZ1bmN0aW9uIGlzIHRoZSBzdW0gb2YgdGhlIGdyZWF0LWNpcmNsZSBkaXN0YW5jZSBhbmQKKyAgIyB0aGUgcGFyYWxsZWwgZGlzdGFuY2UuICBJdCBjb3VsZCBiZSB3ZWlnaHRlZC4KKyAgZnVuY3Rpb24gZGlzdChsYXQxLCBsb25nMSwgbGF0MiwgbG9uZzIpIHsKKyAgICByZXR1cm4gZ2NkaXN0KGxhdDEsIGxvbmcxLCBsYXQyLCBsb25nMikgKyBwYXJkaXN0KGxhdDEsIGxvbmcxLCBsYXQyLCBsb25nMikKKyAgfQorICBCRUdJTiB7CisgICAgY29vcmRfbGF0ID0gY29udmVydF9sYXRpdHVkZShjb29yZCkKKyAgICBjb29yZF9sb25nID0gY29udmVydF9sb25naXR1ZGUoY29vcmQpCisgIH0KKyAgL15bXiNdLyB7CisgICAgaGVyZV9sYXQgPSBjb252ZXJ0X2xhdGl0dWRlKCQyKQorICAgIGhlcmVfbG9uZyA9IGNvbnZlcnRfbG9uZ2l0dWRlKCQyKQorICAgIGxpbmUgPSAkMSAiXHQiICQyICJcdCIgJDMKKyAgICBzZXAgPSAiXHQiCisgICAgbmNjID0gc3BsaXQoJDEsIGNjLCAvLC8pCisgICAgZm9yIChpID0gMTsgaSA8PSBuY2M7IGkrKykgeworICAgICAgbGluZSA9IGxpbmUgc2VwIGNvdW50cnlbY2NbaV1dCisgICAgICBzZXAgPSAiLCAiCisgICAgfQorICAgIGlmIChORiA9PSA0KQorICAgICAgbGluZSA9IGxpbmUgIiAtICIgJDQKKyAgICBwcmludGYgIiVnXHQlc1xuIiwgZGlzdChjb29yZF9sYXQsIGNvb3JkX2xvbmcsIGhlcmVfbGF0LCBoZXJlX2xvbmcpLCBsaW5lCisgIH0KKycKKworIyBCZWdpbiB0aGUgbWFpbiBsb29wLiAgV2UgY29tZSBiYWNrIGhlcmUgaWYgdGhlIHVzZXIgd2FudHMgdG8gcmV0cnkuCit3aGlsZQorCisJZWNobyA+JjIgJ1BsZWFzZSBpZGVudGlmeSBhIGxvY2F0aW9uJyBcCisJCSdzbyB0aGF0IHRpbWUgem9uZSBydWxlcyBjYW4gYmUgc2V0IGNvcnJlY3RseS4nCisKKwljb250aW5lbnQ9CisJY291bnRyeT0KKwlyZWdpb249CisKKwljYXNlICRjb29yZCBpbgorCT8qKQorCQljb250aW5lbnQ9Y29vcmQ7OworCScnKQorCisJIyBBc2sgdGhlIHVzZXIgZm9yIGNvbnRpbmVudCBvciBvY2Vhbi4KKworCWVjaG8gPiYyICdQbGVhc2Ugc2VsZWN0IGEgY29udGluZW50LCBvY2VhbiwgImNvb3JkIiwgb3IgIlRaIi4nCisKKyAgICAgICAgcXVvdGVkX2NvbnRpbmVudHM9YAorCSAgJEFXSyAnCisJICAgIEJFR0lOIHsgRlMgPSAiXHQiIH0KKwkgICAgL15bXiNdLyB7CisgICAgICAgICAgICAgIGVudHJ5ID0gc3Vic3RyKCQzLCAxLCBpbmRleCgkMywgIi8iKSAtIDEpCisgICAgICAgICAgICAgIGlmIChlbnRyeSA9PSAiQW1lcmljYSIpCisJCWVudHJ5ID0gZW50cnkgInMiCisgICAgICAgICAgICAgIGlmIChlbnRyeSB+IC9eKEFyY3RpY3xBdGxhbnRpY3xJbmRpYW58UGFjaWZpYykkLykKKwkJZW50cnkgPSBlbnRyeSAiIE9jZWFuIgorICAgICAgICAgICAgICBwcmludGYgIidcJyclcydcJydcbiIsIGVudHJ5CisgICAgICAgICAgICB9CisgICAgICAgICAgJyA8IiRUWl9aT05FX1RBQkxFIiB8CisJICBzb3J0IC11IHwKKwkgIHRyICdcbicgJyAnCisJICBlY2hvICcnCisJYAorCisJZXZhbCAnCisJICAgIGRvc2VsZWN0ICciJHF1b3RlZF9jb250aW5lbnRzIicgXAorCQkiY29vcmQgLSBJIHdhbnQgdG8gdXNlIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcy4iIFwKKwkJIlRaIC0gSSB3YW50IHRvIHNwZWNpZnkgdGhlIHRpbWUgem9uZSB1c2luZyB0aGUgUG9zaXggVFogZm9ybWF0LiIKKwkgICAgY29udGluZW50PSRzZWxlY3RfcmVzdWx0CisJICAgIGNhc2UgJGNvbnRpbmVudCBpbgorCSAgICBBbWVyaWNhcykgY29udGluZW50PUFtZXJpY2E7OworCSAgICAqIiAiKikgY29udGluZW50PWBleHByICIkY29udGluZW50IiA6ICdcJydcKFteIF0qXCknXCcnYAorCSAgICBlc2FjCisJJworCWVzYWMKKworCWNhc2UgJGNvbnRpbmVudCBpbgorCVRaKQorCQkjIEFzayB0aGUgdXNlciBmb3IgYSBQb3NpeCBUWiBzdHJpbmcuICBDaGVjayB0aGF0IGl0IGNvbmZvcm1zLgorCQl3aGlsZQorCQkJZWNobyA+JjIgJ1BsZWFzZSBlbnRlciB0aGUgZGVzaXJlZCB2YWx1ZScgXAorCQkJCSdvZiB0aGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUuJworCQkJZWNobyA+JjIgJ0ZvciBleGFtcGxlLCBHU1QtMTAgaXMgYSB6b25lIG5hbWVkIEdTVCcgXAorCQkJCSd0aGF0IGlzIDEwIGhvdXJzIGFoZWFkIChlYXN0KSBvZiBVVEMuJworCQkJcmVhZCBUWgorCQkJJEFXSyAtdiBUWj0iJFRaIiAnQkVHSU4geworCQkJCXR6bmFtZSA9ICJbXi0rLDAtOV1bXi0rLDAtOV1bXi0rLDAtOV0rIgorCQkJCXRpbWUgPSAiWzAtMl0/WzAtOV0oOlswLTVdWzAtOV0oOlswLTVdWzAtOV0pPyk/IgorCQkJCW9mZnNldCA9ICJbLStdPyIgdGltZQorCQkJCWRhdGUgPSAiKEo/WzAtOV0rfE1bMC05XStcXC5bMC05XStcXC5bMC05XSspIgorCQkJCWRhdGV0aW1lID0gIiwiIGRhdGUgIigvIiB0aW1lICIpPyIKKwkJCQl0enBhdHRlcm4gPSAiXig6Lip8IiB0em5hbWUgb2Zmc2V0ICIoIiB0em5hbWUgXAorCQkJCSAgIigiIG9mZnNldCAiKT8oIiBkYXRldGltZSBkYXRldGltZSAiKT8pPykkIgorCQkJCWlmIChUWiB+IHR6cGF0dGVybikgZXhpdCAxCisJCQkJZXhpdCAwCisJCQl9JworCQlkbworCQkgICAgc2F5ID4mMiAiJyRUWicgaXMgbm90IGEgY29uZm9ybWluZyBQb3NpeCB0aW1lIHpvbmUgc3RyaW5nLiIKKwkJZG9uZQorCQlUWl9mb3JfZGF0ZT0kVFo7OworCSopCisJCWNhc2UgJGNvbnRpbmVudCBpbgorCQljb29yZCkKKwkJICAgIGNhc2UgJGNvb3JkIGluCisJCSAgICAnJykKKwkJCWVjaG8gPiYyICdQbGVhc2UgZW50ZXIgY29vcmRpbmF0ZXMnIFwKKwkJCQknaW4gSVNPIDY3MDkgbm90YXRpb24uJworCQkJZWNobyA+JjIgJ0ZvciBleGFtcGxlLCArNDA0Mi0wNzQwMyBzdGFuZHMgZm9yJworCQkJZWNobyA+JjIgJzQwIGRlZ3JlZXMgNDIgbWludXRlcyBub3J0aCwnIFwKKwkJCQknNzQgZGVncmVlcyAzIG1pbnV0ZXMgd2VzdC4nCisJCQlyZWFkIGNvb3JkOzsKKwkJICAgIGVzYWMKKwkJICAgIGRpc3RhbmNlX3RhYmxlPWAkQVdLIFwKKwkJCSAgICAtdiBjb29yZD0iJGNvb3JkIiBcCisJCQkgICAgLXYgVFpfQ09VTlRSWV9UQUJMRT0iJFRaX0NPVU5UUllfVEFCTEUiIFwKKwkJCSAgICAiJG91dHB1dF9kaXN0YW5jZXMiIDwiJFRaX1pPTkVfVEFCTEUiIHwKKwkJICAgICAgc29ydCAtbiB8CisJCSAgICAgIHNlZCAiJHtsb2NhdGlvbl9saW1pdH1xIgorCQkgICAgYAorCQkgICAgcmVnaW9ucz1gc2F5ICIkZGlzdGFuY2VfdGFibGUiIHwgJEFXSyAnCisJCSAgICAgIEJFR0lOIHsgRlMgPSAiXHQiIH0KKwkJICAgICAgeyBwcmludCAkTkYgfQorCQkgICAgJ2AKKwkJICAgIGVjaG8gPiYyICdQbGVhc2Ugc2VsZWN0IG9uZSBvZiB0aGUgZm9sbG93aW5nJyBcCisJCQkgICAgJ3RpbWUgem9uZSByZWdpb25zLCcKKwkJICAgIGVjaG8gPiYyICdsaXN0ZWQgcm91Z2hseSBpbiBpbmNyZWFzaW5nIG9yZGVyJyBcCisJCQkgICAgIm9mIGRpc3RhbmNlIGZyb20gJGNvb3JkIi4KKwkJICAgIGRvc2VsZWN0ICRyZWdpb25zCisJCSAgICByZWdpb249JHNlbGVjdF9yZXN1bHQKKwkJICAgIFRaPWBzYXkgIiRkaXN0YW5jZV90YWJsZSIgfCAkQVdLIC12IHJlZ2lvbj0iJHJlZ2lvbiIgJworCQkgICAgICBCRUdJTiB7IEZTPSJcdCIgfQorCQkgICAgICAkTkYgPT0gcmVnaW9uIHsgcHJpbnQgJDQgfQorCQkgICAgJ2AKKwkJICAgIDs7CisJCSopCisJCSMgR2V0IGxpc3Qgb2YgbmFtZXMgb2YgY291bnRyaWVzIGluIHRoZSBjb250aW5lbnQgb3Igb2NlYW4uCisJCWNvdW50cmllcz1gJEFXSyBcCisJCQktdiBjb250aW5lbnQ9IiRjb250aW5lbnQiIFwKKwkJCS12IFRaX0NPVU5UUllfVEFCTEU9IiRUWl9DT1VOVFJZX1RBQkxFIiBcCisJCScKKwkJCUJFR0lOIHsgRlMgPSAiXHQiIH0KKwkJCS9eIy8geyBuZXh0IH0KKwkJCSQzIH4gKCJeIiBjb250aW5lbnQgIi8iKSB7CisJCQkgICAgbmNjID0gc3BsaXQoJDEsIGNjLCAvLC8pCisJCQkgICAgZm9yIChpID0gMTsgaSA8PSBuY2M7IGkrKykKKwkJCQlpZiAoIWNjX3NlZW5bY2NbaV1dKyspIGNjX2xpc3RbKytjY3NdID0gY2NbaV0KKwkJCX0KKwkJCUVORCB7CisJCQkJd2hpbGUgKGdldGxpbmUgPFRaX0NPVU5UUllfVEFCTEUpIHsKKwkJCQkJaWYgKCQwICF+IC9eIy8pIGNjX25hbWVbJDFdID0gJDIKKwkJCQl9CisJCQkJZm9yIChpID0gMTsgaSA8PSBjY3M7IGkrKykgeworCQkJCQljb3VudHJ5ID0gY2NfbGlzdFtpXQorCQkJCQlpZiAoY2NfbmFtZVtjb3VudHJ5XSkgeworCQkJCQkgIGNvdW50cnkgPSBjY19uYW1lW2NvdW50cnldCisJCQkJCX0KKwkJCQkJcHJpbnQgY291bnRyeQorCQkJCX0KKwkJCX0KKwkJJyA8IiRUWl9aT05FX1RBQkxFIiB8IHNvcnQgLWZgCisKKworCQkjIElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBjb3VudHJ5LCBhc2sgdGhlIHVzZXIgd2hpY2ggb25lLgorCQljYXNlICRjb3VudHJpZXMgaW4KKwkJKiIkbmV3bGluZSIqKQorCQkJZWNobyA+JjIgJ1BsZWFzZSBzZWxlY3QgYSBjb3VudHJ5JyBcCisJCQkJJ3dob3NlIGNsb2NrcyBhZ3JlZSB3aXRoIHlvdXJzLicKKwkJCWRvc2VsZWN0ICRjb3VudHJpZXMKKwkJCWNvdW50cnk9JHNlbGVjdF9yZXN1bHQ7OworCQkqKQorCQkJY291bnRyeT0kY291bnRyaWVzCisJCWVzYWMKKworCisJCSMgR2V0IGxpc3Qgb2YgbmFtZXMgb2YgdGltZSB6b25lIHJ1bGUgcmVnaW9ucyBpbiB0aGUgY291bnRyeS4KKwkJcmVnaW9ucz1gJEFXSyBcCisJCQktdiBjb3VudHJ5PSIkY291bnRyeSIgXAorCQkJLXYgVFpfQ09VTlRSWV9UQUJMRT0iJFRaX0NPVU5UUllfVEFCTEUiIFwKKwkJJworCQkJQkVHSU4geworCQkJCUZTID0gIlx0IgorCQkJCWNjID0gY291bnRyeQorCQkJCXdoaWxlIChnZXRsaW5lIDxUWl9DT1VOVFJZX1RBQkxFKSB7CisJCQkJCWlmICgkMCAhfiAvXiMvICAmJiAgY291bnRyeSA9PSAkMikgeworCQkJCQkJY2MgPSAkMQorCQkJCQkJYnJlYWsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCS9eIy8geyBuZXh0IH0KKwkJCSQxIH4gY2MgeyBwcmludCAkNCB9CisJCScgPCIkVFpfWk9ORV9UQUJMRSJgCisKKworCQkjIElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSByZWdpb24sIGFzayB0aGUgdXNlciB3aGljaCBvbmUuCisJCWNhc2UgJHJlZ2lvbnMgaW4KKwkJKiIkbmV3bGluZSIqKQorCQkJZWNobyA+JjIgJ1BsZWFzZSBzZWxlY3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcnIFwKKwkJCQkndGltZSB6b25lIHJlZ2lvbnMuJworCQkJZG9zZWxlY3QgJHJlZ2lvbnMKKwkJCXJlZ2lvbj0kc2VsZWN0X3Jlc3VsdDs7CisJCSopCisJCQlyZWdpb249JHJlZ2lvbnMKKwkJZXNhYworCisJCSMgRGV0ZXJtaW5lIFRaIGZyb20gY291bnRyeSBhbmQgcmVnaW9uLgorCQlUWj1gJEFXSyBcCisJCQktdiBjb3VudHJ5PSIkY291bnRyeSIgXAorCQkJLXYgcmVnaW9uPSIkcmVnaW9uIiBcCisJCQktdiBUWl9DT1VOVFJZX1RBQkxFPSIkVFpfQ09VTlRSWV9UQUJMRSIgXAorCQknCisJCQlCRUdJTiB7CisJCQkJRlMgPSAiXHQiCisJCQkJY2MgPSBjb3VudHJ5CisJCQkJd2hpbGUgKGdldGxpbmUgPFRaX0NPVU5UUllfVEFCTEUpIHsKKwkJCQkJaWYgKCQwICF+IC9eIy8gICYmICBjb3VudHJ5ID09ICQyKSB7CisJCQkJCQljYyA9ICQxCisJCQkJCQlicmVhaworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJL14jLyB7IG5leHQgfQorCQkJJDEgfiBjYyAmJiAkNCA9PSByZWdpb24geyBwcmludCAkMyB9CisJCScgPCIkVFpfWk9ORV9UQUJMRSJgCisJCWVzYWMKKworCQkjIE1ha2Ugc3VyZSB0aGUgY29ycmVzcG9uZGluZyB6b25laW5mbyBmaWxlIGV4aXN0cy4KKwkJVFpfZm9yX2RhdGU9JFRaRElSLyRUWgorCQk8IiRUWl9mb3JfZGF0ZSIgfHwgeworCQkJc2F5ID4mMiAiJDA6IHRpbWUgem9uZSBmaWxlcyBhcmUgbm90IHNldCB1cCBjb3JyZWN0bHkiCisJCQlleGl0IDEKKwkJfQorCWVzYWMKKworCisJIyBVc2UgdGhlIHByb3Bvc2VkIFRaIHRvIG91dHB1dCB0aGUgY3VycmVudCBkYXRlIHJlbGF0aXZlIHRvIFVUQy4KKwkjIExvb3AgdW50aWwgdGhleSBhZ3JlZSBpbiBzZWNvbmRzLgorCSMgR2l2ZSB1cCBhZnRlciA4IHVuc3VjY2Vzc2Z1bCB0cmllcy4KKworCWV4dHJhX2luZm89CisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4CisJZG8KKwkJVFpkYXRlPWBMQU5HPUMgVFo9IiRUWl9mb3JfZGF0ZSIgZGF0ZWAKKwkJVVRkYXRlPWBMQU5HPUMgVFo9VVRDMCBkYXRlYAorCQlUWnNlYz1gZXhwciAiJFRaZGF0ZSIgOiAnLio6XChbMC01XVswLTldXCknYAorCQlVVHNlYz1gZXhwciAiJFVUZGF0ZSIgOiAnLio6XChbMC01XVswLTldXCknYAorCQljYXNlICRUWnNlYyBpbgorCQkkVVRzZWMpCisJCQlleHRyYV9pbmZvPSIKK0xvY2FsIHRpbWUgaXMgbm93OgkkVFpkYXRlLgorVW5pdmVyc2FsIFRpbWUgaXMgbm93OgkkVVRkYXRlLiIKKwkJCWJyZWFrCisJCWVzYWMKKwlkb25lCisKKworCSMgT3V0cHV0IFRaIGluZm8gYW5kIGFzayB0aGUgdXNlciB0byBjb25maXJtLgorCisJZWNobyA+JjIgIiIKKwllY2hvID4mMiAiVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBoYXMgYmVlbiBnaXZlbjoiCisJZWNobyA+JjIgIiIKKwljYXNlICRjb3VudHJ5JSRyZWdpb24lJGNvb3JkIGluCisJPyolPyolKQlzYXkgPiYyICIJJGNvdW50cnkkbmV3bGluZQkkcmVnaW9uIjs7CisJPyolJSkJc2F5ID4mMiAiCSRjb3VudHJ5Ijs7CisJJT8qJT8qKSBzYXkgPiYyICIJY29vcmQgJGNvb3JkJG5ld2xpbmUJJHJlZ2lvbiI7OworCSUlPyopCXNheSA+JjIgIgljb29yZCAkY29vcmQiOzsKKwkqKQlzYXkgPiYyICIJVFo9JyRUWiciCisJZXNhYworCXNheSA+JjIgIiIKKwlzYXkgPiYyICJUaGVyZWZvcmUgVFo9JyRUWicgd2lsbCBiZSB1c2VkLiRleHRyYV9pbmZvIgorCXNheSA+JjIgIklzIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBPSz8iCisKKwlkb3NlbGVjdCBZZXMgTm8KKwlvaz0kc2VsZWN0X3Jlc3VsdAorCWNhc2UgJG9rIGluCisJWWVzKSBicmVhaworCWVzYWMKK2RvIGNvb3JkPQorZG9uZQorCitjYXNlICRTSEVMTCBpbgorKmNzaCkgZmlsZT0ubG9naW4gbGluZT0ic2V0ZW52IFRaICckVFonIjs7CisqKSBmaWxlPS5wcm9maWxlIGxpbmU9IlRaPSckVFonOyBleHBvcnQgVFoiCitlc2FjCisKK3NheSA+JjIgIgorWW91IGNhbiBtYWtlIHRoaXMgY2hhbmdlIHBlcm1hbmVudCBmb3IgeW91cnNlbGYgYnkgYXBwZW5kaW5nIHRoZSBsaW5lCisJJGxpbmUKK3RvIHRoZSBmaWxlICckZmlsZScgaW4geW91ciBob21lIGRpcmVjdG9yeTsgdGhlbiBsb2cgb3V0IGFuZCBsb2cgaW4gYWdhaW4uCisKK0hlcmUgaXMgdGhhdCBUWiB2YWx1ZSBhZ2FpbiwgdGhpcyB0aW1lIG9uIHN0YW5kYXJkIG91dHB1dCBzbyB0aGF0IHlvdQorY2FuIHVzZSB0aGUgJDAgY29tbWFuZCBpbiBzaGVsbCBzY3JpcHRzOiIKKworc2F5ICIkVFoiCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUveWVhcmlzdHlwZSBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS95ZWFyaXN0eXBlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2ZGJmODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUveWVhcmlzdHlwZQpAQCAtMCwwICsxLDQwIEBACisjISAvYmluL3NoCisKKzogJ1RoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiwgc28gY2xhcmlmaWVkIGFzIG9mJworOiAnMjAwNi0wNy0xNyBieSBBcnRodXIgRGF2aWQgT2xzb24uJworCis6ICdAKCMpeWVhcmlzdHlwZS5zaAk4LjInCisKK2Nhc2UgJCMtJDEgaW4KKwkyLXwyLTAqfDItKlshMC05XSopCisJCWVjaG8gIiQwOiB3aWxkIHllYXIgLSAkMSIgPiYyCisJCWV4aXQgMSA7OworZXNhYworCitjYXNlICQjLSQyIGluCisJMi1ldmVuKQorCQljYXNlICQxIGluCisJCQkqWzI0NjgwXSkJCQlleGl0IDAgOzsKKwkJCSopCQkJCWV4aXQgMSA7OworCQllc2FjIDs7CisJMi1ub25wcmVzfDItbm9udXNwcmVzKQorCQljYXNlICQxIGluCisJCQkqWzAyNDY4XVswNDhdfCpbMTM1NzldWzI2XSkJZXhpdCAxIDs7CisJCQkqKQkJCQlleGl0IDAgOzsKKwkJZXNhYyA7OworCTItb2RkKQorCQljYXNlICQxIGluCisJCQkqWzEzNTc5XSkJCQlleGl0IDAgOzsKKwkJCSopCQkJCWV4aXQgMSA7OworCQllc2FjIDs7CisJMi11c3ByZXMpCisJCWNhc2UgJDEgaW4KKwkJCSpbMDI0NjhdWzA0OF18KlsxMzU3OV1bMjZdKQlleGl0IDAgOzsKKwkJCSopCQkJCWV4aXQgMSA7OworCQllc2FjIDs7CisJMi0qKQorCQllY2hvICIkMDogd2lsZCB0eXBlIC0gJDIiID4mMiA7OworZXNhYworCitlY2hvICIkMDogdXNhZ2UgaXMgJDAgeWVhciBldmVufG9kZHx1c3ByZXN8bm9ucHJlc3xub251c3ByZXMiID4mMgorZXhpdCAxCmRpZmYgLS1naXQgYS9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvemR1bXAuYyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy90aW1lem9uZS96ZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2M2EyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvemR1bXAuYwpAQCAtMCwwICsxLDEwMTIgQEAKKy8qCisqKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorKiogMjAwOS0wNS0xNyBieSBBcnRodXIgRGF2aWQgT2xzb24uCisqLworCisjaW5jbHVkZSAidmVyc2lvbi5oIgorCisvKgorKiogVGhpcyBjb2RlIGhhcyBiZWVuIG1hZGUgaW5kZXBlbmRlbnQgb2YgdGhlIHJlc3Qgb2YgdGhlIHRpbWUKKyoqIGNvbnZlcnNpb24gcGFja2FnZSB0byBpbmNyZWFzZSBjb25maWRlbmNlIGluIHRoZSB2ZXJpZmljYXRpb24gaXQgcHJvdmlkZXMuCisqKiBZb3UgY2FuIHVzZSB0aGlzIGNvZGUgdG8gaGVscCBpbiB2ZXJpZnlpbmcgb3RoZXIgaW1wbGVtZW50YXRpb25zLgorKiogVG8gZG8gdGhpcywgY29tcGlsZSB3aXRoIC1EVVNFX0xUWj0wIGFuZCBsaW5rIHdpdGhvdXQgdGhlIHR6IGxpYnJhcnkuCisqLworCisjaWZuZGVmIE5FVEJTRF9JTlNQSVJFRAorIyBkZWZpbmUgTkVUQlNEX0lOU1BJUkVEIDEKKyNlbmRpZgorI2lmbmRlZiBVU0VfTFRaCisjIGRlZmluZSBVU0VfTFRaIDEKKyNlbmRpZgorCisjaWYgVVNFX0xUWgorIyBpbmNsdWRlICJwcml2YXRlLmgiCisjZW5kaWYKKworLyogRW5hYmxlIHRtX2dtdG9mZiBhbmQgdG1fem9uZSBvbiBHTlVpc2ggc3lzdGVtcy4gICovCisjZGVmaW5lIF9HTlVfU09VUkNFIDEKKy8qIEVuYWJsZSBzdHJ0b2ltYXggb24gU29sYXJpcyAxMC4gICovCisjZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKworI2luY2x1ZGUgInN0ZGlvLmgiCS8qIGZvciBzdGRvdXQsIHN0ZGVyciwgcGVycm9yICovCisjaW5jbHVkZSAic3RyaW5nLmgiCS8qIGZvciBzdHJjcHkgKi8KKyNpbmNsdWRlICJzeXMvdHlwZXMuaCIJLyogZm9yIHRpbWVfdCAqLworI2luY2x1ZGUgInRpbWUuaCIJLyogZm9yIHN0cnVjdCB0bSAqLworI2luY2x1ZGUgInN0ZGxpYi5oIgkvKiBmb3IgZXhpdCwgbWFsbG9jLCBhdG9pICovCisjaW5jbHVkZSAibGltaXRzLmgiCS8qIGZvciBDSEFSX0JJVCwgTExPTkdfTUFYICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyoKKyoqIFN1YnN0aXR1dGVzIGZvciBwcmUtQzk5IGNvbXBpbGVycy4KKyoqIE11Y2ggb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUgaXMgc3RvbGVuIGZyb20gcHJpdmF0ZS5oLgorKi8KKworI2lmbmRlZiBIQVZFX1NURElOVF9ICisjIGRlZmluZSBIQVZFX1NURElOVF9IIFwKKyAgICAoMTk5OTAxIDw9IF9fU1REQ19WRVJTSU9OX18gXAorICAgICB8fCAyIDwgX19HTElCQ19fICsgKDEgPD0gX19HTElCQ19NSU5PUl9fKQlcCisgICAgIHx8IF9fQ1lHV0lOX18pCisjZW5kaWYKKyNpZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgInN0ZGludC5oIgorI2VuZGlmCisjaWZuZGVmIEhBVkVfSU5UVFlQRVNfSAorIyBkZWZpbmUgSEFWRV9JTlRUWVBFU19IIEhBVkVfU1RESU5UX0gKKyNlbmRpZgorI2lmIEhBVkVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgSU5UX0ZBU1QzMl9NQVgKKyMgaWYgSU5UX01BWCA+PiAzMSA9PSAwCit0eXBlZGVmIGxvbmcgaW50X2Zhc3QzMl90OworIyBlbHNlCit0eXBlZGVmIGludCBpbnRfZmFzdDMyX3Q7CisjIGVuZGlmCisjZW5kaWYKKworLyogUHJlLUM5OSBHQ0MgY29tcGlsZXJzIGRlZmluZSBfX0xPTkdfTE9OR19NQVhfXyBpbnN0ZWFkIG9mIExMT05HX01BWC4gICovCisjaWYgIWRlZmluZWQgTExPTkdfTUFYICYmIGRlZmluZWQgX19MT05HX0xPTkdfTUFYX18KKyMgZGVmaW5lIExMT05HX01BWCBfX0xPTkdfTE9OR19NQVhfXworI2VuZGlmCisKKyNpZm5kZWYgSU5UTUFYX01BWAorIyBpZmRlZiBMTE9OR19NQVgKK3R5cGVkZWYgbG9uZyBsb25nIGludG1heF90OworIyAgZGVmaW5lIHN0cnRvaW1heCBzdHJ0b2xsCisjICBkZWZpbmUgSU5UTUFYX01BWCBMTE9OR19NQVgKKyMgZWxzZQordHlwZWRlZiBsb25nIGludG1heF90OworIyAgZGVmaW5lIHN0cnRvaW1heCBzdHJ0b2wKKyMgIGRlZmluZSBJTlRNQVhfTUFYIExPTkdfTUFYCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBQUklkTUFYCisjIGlmIElOVE1BWF9NQVggPT0gTExPTkdfTUFYCisjICBkZWZpbmUgUFJJZE1BWCAibGxkIgorIyBlbHNlCisjICBkZWZpbmUgUFJJZE1BWCAibGQiCisjIGVuZGlmCisjZW5kaWYKKworLyogSW5mZXIgVE1fWk9ORSBvbiBzeXN0ZW1zIHdoZXJlIHRoaXMgaW5mb3JtYXRpb24gaXMga25vd24sIGJ1dCBzdXBwcmVzcworICAgZ3Vlc3NpbmcgaWYgTk9fVE1fWk9ORSBpcyBkZWZpbmVkLiAgU2ltaWxhcmx5IGZvciBUTV9HTVRPRkYuICAqLworI2lmIChkZWZpbmVkIF9fR0xJQkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19GcmVlQlNEX18gfHwgZGVmaW5lZCBfX05ldEJTRF9fIHx8IGRlZmluZWQgX19PcGVuQlNEX18gXAorICAgICB8fCAoZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBfX01BQ0hfXykpCisjIGlmICFkZWZpbmVkIFRNX0dNVE9GRiAmJiAhZGVmaW5lZCBOT19UTV9HTVRPRkYKKyMgIGRlZmluZSBUTV9HTVRPRkYgdG1fZ210b2ZmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFRNX1pPTkUgJiYgIWRlZmluZWQgTk9fVE1fWk9ORQorIyAgZGVmaW5lIFRNX1pPTkUgdG1fem9uZQorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9MT0NBTFRJTUVfUgorIyBkZWZpbmUgSEFWRV9MT0NBTFRJTUVfUiAxCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0xPQ0FMVElNRV9SWgorIyBpZmRlZiBUTV9aT05FCisjICBkZWZpbmUgSEFWRV9MT0NBTFRJTUVfUlogKE5FVEJTRF9JTlNQSVJFRCAmJiBVU0VfTFRaKQorIyBlbHNlCisjICBkZWZpbmUgSEFWRV9MT0NBTFRJTUVfUlogMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9UWlNFVAorIyBkZWZpbmUgSEFWRV9UWlNFVCAxCisjZW5kaWYKKworI2lmbmRlZiBaRFVNUF9MT19ZRUFSCisjZGVmaW5lIFpEVU1QX0xPX1lFQVIJKC01MDApCisjZW5kaWYgLyogIWRlZmluZWQgWkRVTVBfTE9fWUVBUiAqLworCisjaWZuZGVmIFpEVU1QX0hJX1lFQVIKKyNkZWZpbmUgWkRVTVBfSElfWUVBUgkyNTAwCisjZW5kaWYgLyogIWRlZmluZWQgWkRVTVBfSElfWUVBUiAqLworCisjaWZuZGVmIE1BWF9TVFJJTkdfTEVOR1RICisjZGVmaW5lIE1BWF9TVFJJTkdfTEVOR1RICTEwMjQKKyNlbmRpZiAvKiAhZGVmaW5lZCBNQVhfU1RSSU5HX0xFTkdUSCAqLworCisjaWYgX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMQorIyBkZWZpbmUgdHJ1ZSAxCisjIGRlZmluZSBmYWxzZSAwCisjIGRlZmluZSBib29sIGludAorI2Vsc2UKKyMgaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCisKKyNpZm5kZWYgRVhJVF9TVUNDRVNTCisjZGVmaW5lIEVYSVRfU1VDQ0VTUwkwCisjZW5kaWYgLyogIWRlZmluZWQgRVhJVF9TVUNDRVNTICovCisKKyNpZm5kZWYgRVhJVF9GQUlMVVJFCisjZGVmaW5lIEVYSVRfRkFJTFVSRQkxCisjZW5kaWYgLyogIWRlZmluZWQgRVhJVF9GQUlMVVJFICovCisKKyNpZm5kZWYgU0VDU1BFUk1JTgorI2RlZmluZSBTRUNTUEVSTUlOCTYwCisjZW5kaWYgLyogIWRlZmluZWQgU0VDU1BFUk1JTiAqLworCisjaWZuZGVmIE1JTlNQRVJIT1VSCisjZGVmaW5lIE1JTlNQRVJIT1VSCTYwCisjZW5kaWYgLyogIWRlZmluZWQgTUlOU1BFUkhPVVIgKi8KKworI2lmbmRlZiBTRUNTUEVSSE9VUgorI2RlZmluZSBTRUNTUEVSSE9VUgkoU0VDU1BFUk1JTiAqIE1JTlNQRVJIT1VSKQorI2VuZGlmIC8qICFkZWZpbmVkIFNFQ1NQRVJIT1VSICovCisKKyNpZm5kZWYgSE9VUlNQRVJEQVkKKyNkZWZpbmUgSE9VUlNQRVJEQVkJMjQKKyNlbmRpZiAvKiAhZGVmaW5lZCBIT1VSU1BFUkRBWSAqLworCisjaWZuZGVmIEVQT0NIX1lFQVIKKyNkZWZpbmUgRVBPQ0hfWUVBUgkxOTcwCisjZW5kaWYgLyogIWRlZmluZWQgRVBPQ0hfWUVBUiAqLworCisjaWZuZGVmIFRNX1lFQVJfQkFTRQorI2RlZmluZSBUTV9ZRUFSX0JBU0UJMTkwMAorI2VuZGlmIC8qICFkZWZpbmVkIFRNX1lFQVJfQkFTRSAqLworCisjaWZuZGVmIERBWVNQRVJOWUVBUgorI2RlZmluZSBEQVlTUEVSTllFQVIJMzY1CisjZW5kaWYgLyogIWRlZmluZWQgREFZU1BFUk5ZRUFSICovCisKKyNpZm5kZWYgaXNsZWFwCisjZGVmaW5lIGlzbGVhcCh5KSAoKCh5KSAlIDQpID09IDAgJiYgKCgoeSkgJSAxMDApICE9IDAgfHwgKCh5KSAlIDQwMCkgPT0gMCkpCisjZW5kaWYgLyogIWRlZmluZWQgaXNsZWFwICovCisKKyNpZm5kZWYgaXNsZWFwX3N1bQorLyoKKyoqIFNlZSB0emZpbGUuaCBmb3IgZGV0YWlscyBvbiBpc2xlYXBfc3VtLgorKi8KKyNkZWZpbmUgaXNsZWFwX3N1bShhLCBiKQlpc2xlYXAoKGEpICUgNDAwICsgKGIpICUgNDAwKQorI2VuZGlmIC8qICFkZWZpbmVkIGlzbGVhcF9zdW0gKi8KKworI2RlZmluZSBTRUNTUEVSREFZCSgoaW50X2Zhc3QzMl90KSBTRUNTUEVSSE9VUiAqIEhPVVJTUEVSREFZKQorI2RlZmluZSBTRUNTUEVSTllFQVIJKFNFQ1NQRVJEQVkgKiBEQVlTUEVSTllFQVIpCisjZGVmaW5lIFNFQ1NQRVJMWUVBUgkoU0VDU1BFUk5ZRUFSICsgU0VDU1BFUkRBWSkKKyNkZWZpbmUgU0VDU1BFUjQwMFlFQVJTCShTRUNTUEVSTllFQVIgKiAoaW50bWF4X3QpICgzMDAgKyAzKQlcCisJCQkgKyBTRUNTUEVSTFlFQVIgKiAoaW50bWF4X3QpICgxMDAgLSAzKSkKKworLyoKKyoqIFRydWUgaWYgU0VDU1BFUjQwMFlFQVJTIGlzIGtub3duIHRvIGJlIHJlcHJlc2VudGFibGUgYXMgYW4KKyoqIGludG1heF90LiAgSXQncyBPSyB0aGF0IFNFQ1NQRVI0MDBZRUFSU19GSVRTIGNhbiBpbiB0aGVvcnkgYmUgZmFsc2UKKyoqIGV2ZW4gaWYgU0VDU1BFUjQwMFlFQVJTIGlzIHJlcHJlc2VudGFibGUsIGJlY2F1c2Ugd2hlbiB0aGF0IGhhcHBlbnMKKyoqIHRoZSBjb2RlIG1lcmVseSBydW5zIGEgYml0IG1vcmUgc2xvd2x5LCBhbmQgdGhpcyBzbG93bmVzcyBkb2Vzbid0CisqKiBvY2N1ciBvbiBhbnkgcHJhY3RpY2FsIHBsYXRmb3JtLgorKi8KK2VudW0geyBTRUNTUEVSNDAwWUVBUlNfRklUUyA9IFNFQ1NQRVJMWUVBUiA8PSBJTlRNQVhfTUFYIC8gNDAwIH07CisKKyNpZm5kZWYgSEFWRV9HRVRURVhUCisjZGVmaW5lIEhBVkVfR0VUVEVYVCAwCisjZW5kaWYKKyNpZiBIQVZFX0dFVFRFWFQKKyNpbmNsdWRlICJsb2NhbGUuaCIJLyogZm9yIHNldGxvY2FsZSAqLworI2luY2x1ZGUgImxpYmludGwuaCIKKyNlbmRpZiAvKiBIQVZFX0dFVFRFWFQgKi8KKworI2lmIDIgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA5NiA8PSBfX0dOVUNfTUlOT1JfXykKKyMgZGVmaW5lIEFUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZWxzZQorIyBkZWZpbmUgQVRUUklCVVRFX1BVUkUgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKgorKiogRm9yIHRoZSBiZW5lZml0IG9mIEdOVSBmb2xrLi4uCisqKiAnXyhNU0dJRCknIHVzZXMgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgbWVzc2FnZSBsaWJyYXJ5IHN0cmluZyBmb3IgTVNHSUQuCisqKiBUaGUgZGVmYXVsdCBpcyB0byB1c2UgZ2V0dGV4dCBpZiBhdmFpbGFibGUsIGFuZCB1c2UgTVNHSUQgb3RoZXJ3aXNlLgorKi8KKworI2lmbmRlZiBfCisjaWYgSEFWRV9HRVRURVhUCisjZGVmaW5lIF8obXNnaWQpIGdldHRleHQobXNnaWQpCisjZWxzZSAvKiAhSEFWRV9HRVRURVhUICovCisjZGVmaW5lIF8obXNnaWQpIG1zZ2lkCisjZW5kaWYgLyogIUhBVkVfR0VUVEVYVCAqLworI2VuZGlmIC8qICFkZWZpbmVkIF8gKi8KKworI2lmICFkZWZpbmVkIFRaX0RPTUFJTiAmJiBkZWZpbmVkIEhBVkVfR0VUVEVYVAorIyBkZWZpbmUgVFpfRE9NQUlOICJ0eiIKKyNlbmRpZgorCisjaWYgISBIQVZFX0xPQ0FMVElNRV9SWgorIyB1bmRlZiAgdGltZXpvbmVfdAorIyBkZWZpbmUgdGltZXpvbmVfdCBjaGFyICoqCisjZW5kaWYKKworZXh0ZXJuIGNoYXIgKioJZW52aXJvbjsKK2V4dGVybiBpbnQJZ2V0b3B0KGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdLAorCQkJY29uc3QgY2hhciAqIG9wdGlvbnMpOworZXh0ZXJuIGNoYXIgKglvcHRhcmc7CitleHRlcm4gaW50CW9wdGluZDsKK2V4dGVybiBjaGFyICoJdHpuYW1lWzJdOworCisvKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBmaW5pdGUgdGltZSB2YWx1ZXMuICAqLworZW51bSB7IGF0aW1lX3NoaWZ0ID0gQ0hBUl9CSVQgKiBzaXplb2YgKHRpbWVfdCkgLSAyIH07CitzdGF0aWMgdGltZV90IGNvbnN0IGFic29sdXRlX21pbl90aW1lID0KKyAgKCh0aW1lX3QpIC0xIDwgMAorICAgPyAoLSAoKHRpbWVfdCkgfiAodGltZV90KSAwIDwgMCkKKyAgICAgIC0gKCgodGltZV90KSAxIDw8IGF0aW1lX3NoaWZ0KSAtIDEgKyAoKHRpbWVfdCkgMSA8PCBhdGltZV9zaGlmdCkpKQorICAgOiAwKTsKK3N0YXRpYyB0aW1lX3QgY29uc3QgYWJzb2x1dGVfbWF4X3RpbWUgPQorICAoKHRpbWVfdCkgLTEgPCAwCisgICA/ICgoKHRpbWVfdCkgMSA8PCBhdGltZV9zaGlmdCkgLSAxICsgKCh0aW1lX3QpIDEgPDwgYXRpbWVfc2hpZnQpKQorICAgOiAtMSk7CitzdGF0aWMgaW50CWxvbmdlc3Q7CitzdGF0aWMgY2hhciAqCXByb2duYW1lOworc3RhdGljIGJvb2wJd2FybmVkOworc3RhdGljIGJvb2wJZXJyb3V0OworCitzdGF0aWMgY2hhciBjb25zdCAqYWJicihzdHJ1Y3QgdG0gY29uc3QgKik7CitzdGF0aWMgaW50bWF4X3QJZGVsdGEoc3RydWN0IHRtICosIHN0cnVjdCB0bSAqKSBBVFRSSUJVVEVfUFVSRTsKK3N0YXRpYyB2b2lkIGR1bXB0aW1lKHN0cnVjdCB0bSBjb25zdCAqKTsKK3N0YXRpYyB0aW1lX3QgaHVudCh0aW1lem9uZV90LCBjaGFyICosIHRpbWVfdCwgdGltZV90KTsKK3N0YXRpYyB2b2lkIHNob3codGltZXpvbmVfdCwgY2hhciAqLCB0aW1lX3QsIGJvb2wpOworc3RhdGljIGNvbnN0IGNoYXIgKnRmb3JtYXQodm9pZCk7CitzdGF0aWMgdGltZV90IHllYXJ0b3QoaW50bWF4X3QpIEFUVFJJQlVURV9QVVJFOworCisvKiBVbmxpa2UgPGN0eXBlLmg+J3MgaXNkaWdpdCwgdGhpcyBhbHNvIHdvcmtzIGlmIGMgPCAwIHwgYyA+IFVDSEFSX01BWC4gKi8KKyNkZWZpbmUgaXNfZGlnaXQoYykgKCh1bnNpZ25lZCkoYykgLSAnMCcgPD0gOSkKKworLyogSXMgQSBhbiBhbHBoYWJldGljIGNoYXJhY3RlciBpbiB0aGUgQyBsb2NhbGU/ICAqLworc3RhdGljIGJvb2wKK2lzX2FscGhhKGNoYXIgYSkKK3sKKwlzd2l0Y2ggKGEpIHsKKwkgIGRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwkgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6IGNhc2UgJ0cnOgorCSAgY2FzZSAnSCc6IGNhc2UgJ0knOiBjYXNlICdKJzogY2FzZSAnSyc6IGNhc2UgJ0wnOiBjYXNlICdNJzogY2FzZSAnTic6CisJICBjYXNlICdPJzogY2FzZSAnUCc6IGNhc2UgJ1EnOiBjYXNlICdSJzogY2FzZSAnUyc6IGNhc2UgJ1QnOiBjYXNlICdVJzoKKwkgIGNhc2UgJ1YnOiBjYXNlICdXJzogY2FzZSAnWCc6IGNhc2UgJ1knOiBjYXNlICdaJzoKKwkgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOgorCSAgY2FzZSAnaCc6IGNhc2UgJ2knOiBjYXNlICdqJzogY2FzZSAnayc6IGNhc2UgJ2wnOiBjYXNlICdtJzogY2FzZSAnbic6CisJICBjYXNlICdvJzogY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNlICdyJzogY2FzZSAncyc6IGNhc2UgJ3QnOiBjYXNlICd1JzoKKwkgIGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6IGNhc2UgJ3knOiBjYXNlICd6JzoKKwkJcmV0dXJuIHRydWU7CisJfQorfQorCisvKiBSZXR1cm4gQSArIEIsIGV4aXRpbmcgaWYgdGhlIHJlc3VsdCB3b3VsZCBvdmVyZmxvdy4gICovCitzdGF0aWMgc2l6ZV90CitzdW1zaXplKHNpemVfdCBhLCBzaXplX3QgYikKK3sKKyAgc2l6ZV90IHN1bSA9IGEgKyBiOworICBpZiAoc3VtIDwgYSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNpemUgb3ZlcmZsb3dcbiIsIHByb2duYW1lKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIH0KKyAgcmV0dXJuIHN1bTsKK30KKworI2lmICEgSEFWRV9UWlNFVAorIyB1bmRlZiB0enNldAorIyBkZWZpbmUgdHpzZXQgemR1bXBfdHpzZXQKK3N0YXRpYyB2b2lkIHR6c2V0KHZvaWQpIHsgfQorI2VuZGlmCisKKy8qIEFzc3VtZSBnbXRpbWVfciB3b3JrcyBpZiBsb2NhbHRpbWVfciBkb2VzLgorICAgQSByZXBsYWNlbWVudCBsb2NhbHRpbWVfciBpcyBkZWZpbmVkIGJlbG93IGlmIG5lZWRlZC4gICovCisjaWYgISBIQVZFX0xPQ0FMVElNRV9SCisKKyMgdW5kZWYgZ210aW1lX3IKKyMgZGVmaW5lIGdtdGltZV9yIHpkdW1wX2dtdGltZV9yCisKK3N0YXRpYyBzdHJ1Y3QgdG0gKgorZ210aW1lX3IodGltZV90ICp0cCwgc3RydWN0IHRtICp0bXApCit7CisgIHN0cnVjdCB0bSAqciA9IGdtdGltZSh0cCk7CisgIGlmIChyKSB7CisgICAgKnRtcCA9ICpyOworICAgIHIgPSB0bXA7CisgIH0KKyAgcmV0dXJuIHI7Cit9CisKKyNlbmRpZgorCisvKiBQbGF0Zm9ybXMgd2l0aCBUTV9aT05FIGRvbid0IG5lZWQgdHpuYW1lLCBzbyB0aGV5IGNhbiB1c2UgdGhlCisgICBmYXN0ZXIgbG9jYWx0aW1lX3J6IG9yIGxvY2FsdGltZV9yIGlmIGF2YWlsYWJsZS4gICovCisKKyNpZiBkZWZpbmVkIFRNX1pPTkUgJiYgSEFWRV9MT0NBTFRJTUVfUloKKyMgZGVmaW5lIFVTRV9MT0NBTFRJTUVfUlogdHJ1ZQorI2Vsc2UKKyMgZGVmaW5lIFVTRV9MT0NBTFRJTUVfUlogZmFsc2UKKyNlbmRpZgorCisjaWYgISBVU0VfTE9DQUxUSU1FX1JaCisKKyMgaWYgIWRlZmluZWQgVE1fWk9ORSB8fCAhIEhBVkVfTE9DQUxUSU1FX1IgfHwgISBIQVZFX1RaU0VUCisjICB1bmRlZiBsb2NhbHRpbWVfcgorIyAgZGVmaW5lIGxvY2FsdGltZV9yIHpkdW1wX2xvY2FsdGltZV9yCitzdGF0aWMgc3RydWN0IHRtICoKK2xvY2FsdGltZV9yKHRpbWVfdCAqdHAsIHN0cnVjdCB0bSAqdG1wKQoreworICBzdHJ1Y3QgdG0gKnIgPSBsb2NhbHRpbWUodHApOworICBpZiAocikgeworICAgICp0bXAgPSAqcjsKKyAgICByID0gdG1wOworICB9CisgIHJldHVybiByOworfQorIyBlbmRpZgorCisjIHVuZGVmIGxvY2FsdGltZV9yegorIyBkZWZpbmUgbG9jYWx0aW1lX3J6IHpkdW1wX2xvY2FsdGltZV9yegorc3RhdGljIHN0cnVjdCB0bSAqCitsb2NhbHRpbWVfcnoodGltZXpvbmVfdCByeiwgdGltZV90ICp0cCwgc3RydWN0IHRtICp0bXApCit7CisgIHJldHVybiBsb2NhbHRpbWVfcih0cCwgdG1wKTsKK30KKworIyBpZmRlZiBUWVBFQ0hFQ0sKKyMgIHVuZGVmIG1rdGltZV96CisjICBkZWZpbmUgbWt0aW1lX3ogemR1bXBfbWt0aW1lX3oKK3N0YXRpYyB0aW1lX3QKK21rdGltZV96KHRpbWV6b25lX3QgdHosIHN0cnVjdCB0bSAqdG1wKQoreworICByZXR1cm4gbWt0aW1lKHRtcCk7Cit9CisjIGVuZGlmCisKKyMgdW5kZWYgdHphbGxvYworIyB1bmRlZiB0emZyZWUKKyMgZGVmaW5lIHR6YWxsb2MgemR1bXBfdHphbGxvYworIyBkZWZpbmUgdHpmcmVlIHpkdW1wX3R6ZnJlZQorCitzdGF0aWMgdGltZXpvbmVfdAordHphbGxvYyhjaGFyIGNvbnN0ICp2YWwpCit7CisgIHN0YXRpYyBjaGFyICoqZmFrZWVudjsKKyAgY2hhciAqKmVudiA9IGZha2VlbnY7CisgIGNoYXIgKmVudjA7CisgIGlmICghIGVudikgeworICAgIGNoYXIgKiplID0gZW52aXJvbjsKKyAgICBpbnQgdG87CisKKyAgICB3aGlsZSAoKmUrKykKKyAgICAgIGNvbnRpbnVlOworICAgIGVudiA9IG1hbGxvYyhzdW1zaXplKHNpemVvZiAqZW52aXJvbiwKKwkJCSAoZSAtIGVudmlyb24pICogc2l6ZW9mICplbnZpcm9uKSk7CisgICAgaWYgKCEgZW52KSB7CisgICAgICBwZXJyb3IocHJvZ25hbWUpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgICB0byA9IDE7CisgICAgZm9yIChlID0gZW52aXJvbjsgKGVudlt0b10gPSAqZSk7IGUrKykKKyAgICAgIHRvICs9IHN0cm5jbXAoKmUsICJUWj0iLCAzKSAhPSAwOworICB9CisgIGVudjAgPSBtYWxsb2Moc3Vtc2l6ZShzaXplb2YgIlRaPSIsIHN0cmxlbih2YWwpKSk7CisgIGlmICghIGVudjApIHsKKyAgICBwZXJyb3IocHJvZ25hbWUpOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgfQorICBlbnZbMF0gPSBzdHJjYXQoc3RyY3B5KGVudjAsICJUWj0iKSwgdmFsKTsKKyAgZW52aXJvbiA9IGZha2VlbnYgPSBlbnY7CisgIHR6c2V0KCk7CisgIHJldHVybiBlbnY7Cit9CisKK3N0YXRpYyB2b2lkCit0emZyZWUodGltZXpvbmVfdCBlbnYpCit7CisgIGVudmlyb24gPSBlbnYgKyAxOworICBmcmVlKGVudlswXSk7Cit9CisjZW5kaWYgLyogISBVU0VfTE9DQUxUSU1FX1JaICovCisKKy8qIEEgVVRDIHRpbWUgem9uZSwgYW5kIGl0cyBpbml0aWFsaXplci4gICovCitzdGF0aWMgdGltZXpvbmVfdCBnbXR6Oworc3RhdGljIHZvaWQKK2dtdHppbml0KHZvaWQpCit7CisgIGlmIChVU0VfTE9DQUxUSU1FX1JaKSB7CisgICAgc3RhdGljIGNoYXIgY29uc3QgdXRjW10gPSAiVVRDMCI7CisgICAgZ210eiA9IHR6YWxsb2ModXRjKTsKKyAgICBpZiAoIWdtdHopIHsKKyAgICAgIHBlcnJvcih1dGMpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgfQorfQorCisvKiBDb252ZXJ0ICpUUCB0byBVVEMsIHN0b3JpbmcgdGhlIGJyb2tlbi1kb3duIHRpbWUgaW50byAqVE1QLgorICAgUmV0dXJuIFRNUCBpZiBzdWNjZXNzZnVsLCBOVUxMIG90aGVyd2lzZS4gIFRoaXMgaXMgbGlrZSBnbXRpbWVfcihUUCwgVE1QKSwKKyAgIGV4Y2VwdCB0eXBpY2FsbHkgZmFzdGVyIGlmIFVTRV9MT0NBTFRJTUVfUlouICAqLworc3RhdGljIHN0cnVjdCB0bSAqCitteV9nbXRpbWVfcih0aW1lX3QgKnRwLCBzdHJ1Y3QgdG0gKnRtcCkKK3sKKyAgcmV0dXJuIFVTRV9MT0NBTFRJTUVfUlogPyBsb2NhbHRpbWVfcnooZ210eiwgdHAsIHRtcCkgOiBnbXRpbWVfcih0cCwgdG1wKTsKK30KKworI2lmbmRlZiBUWVBFQ0hFQ0sKKyMgZGVmaW5lIG15X2xvY2FsdGltZV9yeiBsb2NhbHRpbWVfcnoKKyNlbHNlIC8qICFkZWZpbmVkIFRZUEVDSEVDSyAqLworCitzdGF0aWMgc3RydWN0IHRtICoKK215X2xvY2FsdGltZV9yeih0aW1lem9uZV90IHR6LCB0aW1lX3QgKnRwLCBzdHJ1Y3QgdG0gKnRtcCkKK3sKKwl0bXAgPSBsb2NhbHRpbWVfcnoodHosIHRwLCB0bXApOworCWlmICh0bXApIHsKKwkJc3RydWN0IHRtCXRtOworCQlyZWdpc3RlciB0aW1lX3QJdDsKKworCQl0bSA9ICp0bXA7CisJCXQgPSBta3RpbWVfeih0eiwgJnRtKTsKKwkJaWYgKHQgIT0gKnRwKSB7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG4lczogIiwgcHJvZ25hbWUpOworCQkJZnByaW50ZihzdGRlcnIsIHRmb3JtYXQoKSwgKnRwKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiIC0+Iik7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiB5ZWFyPSVkIiwgdG1wLT50bV95ZWFyKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiIG1vbj0lZCIsIHRtcC0+dG1fbW9uKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiIG1kYXk9JWQiLCB0bXAtPnRtX21kYXkpOworCQkJZnByaW50ZihzdGRlcnIsICIgaG91cj0lZCIsIHRtcC0+dG1faG91cik7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiBtaW49JWQiLCB0bXAtPnRtX21pbik7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiBzZWM9JWQiLCB0bXAtPnRtX3NlYyk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiBpc2RzdD0lZCIsIHRtcC0+dG1faXNkc3QpOworCQkJZnByaW50ZihzdGRlcnIsICIgLT4gIik7CisJCQlmcHJpbnRmKHN0ZGVyciwgdGZvcm1hdCgpLCB0KTsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJCWVycm91dCA9IHRydWU7CisJCX0KKwl9CisJcmV0dXJuIHRtcDsKK30KKyNlbmRpZiAvKiAhZGVmaW5lZCBUWVBFQ0hFQ0sgKi8KKworc3RhdGljIHZvaWQKK2FiYnJvayhjb25zdCBjaGFyICpjb25zdCBhYmJycCwgY29uc3QgY2hhciAqY29uc3Qgem9uZSkKK3sKKwlyZWdpc3RlciBjb25zdCBjaGFyICoJY3A7CisJcmVnaXN0ZXIgY29uc3QgY2hhciAqCXdwOworCisJaWYgKHdhcm5lZCkKKwkJcmV0dXJuOworCWNwID0gYWJicnA7CisJd2hpbGUgKGlzX2FscGhhKCpjcCkgfHwgaXNfZGlnaXQoKmNwKSB8fCAqY3AgPT0gJy0nIHx8ICpjcCA9PSAnKycpCisJCSsrY3A7CisJaWYgKGNwIC0gYWJicnAgPCAzKQorCSAgd3AgPSBfKCJoYXMgZmV3ZXIgdGhhbiAzIGNoYXJhY3RlcnMiKTsKKwllbHNlIGlmIChjcCAtIGFiYnJwID4gNikKKwkgIHdwID0gXygiaGFzIG1vcmUgdGhhbiA2IGNoYXJhY3RlcnMiKTsKKwllbHNlIGlmICgqY3ApCisJICB3cCA9IF8oImhhcyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gQVNDSUkgYWxwaGFudW1lcmljcywgJy0nIG9yICcrJyIpOworCWVsc2UKKwkgIHJldHVybjsKKwlmZmx1c2goc3Rkb3V0KTsKKwlmcHJpbnRmKHN0ZGVyciwKKwkJXygiJXM6IHdhcm5pbmc6IHpvbmUgXCIlc1wiIGFiYnJldmlhdGlvbiBcIiVzXCIgJXNcbiIpLAorCQlwcm9nbmFtZSwgem9uZSwgYWJicnAsIHdwKTsKKwl3YXJuZWQgPSBlcnJvdXQgPSB0cnVlOworfQorCisvKiBSZXR1cm4gYSB0aW1lIHpvbmUgYWJicmV2aWF0aW9uLiAgSWYgdGhlIGFiYnJldmlhdGlvbiBuZWVkcyB0byBiZQorICAgc2F2ZWQsIHVzZSAqQlVGIChvZiBzaXplICpCVUZBTExPQykgdG8gc2F2ZSBpdCwgYW5kIHJldHVybiB0aGUKKyAgIGFiYnJldmlhdGlvbiBpbiB0aGUgcG9zc2libHktcmVhbGxvY2F0ZWQgKkJVRi4gIE90aGVyd2lzZSwganVzdAorICAgcmV0dXJuIHRoZSBhYmJyZXZpYXRpb24uICBHZXQgdGhlIGFiYnJldmlhdGlvbiBmcm9tIFRNUC4KKyAgIEV4aXQgb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4gICovCitzdGF0aWMgY2hhciBjb25zdCAqCitzYXZlYWJicihjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmFsbG9jLCBzdHJ1Y3QgdG0gY29uc3QgKnRtcCkKK3sKKyAgY2hhciBjb25zdCAqYWIgPSBhYmJyKHRtcCk7CisgIGlmIChIQVZFX0xPQ0FMVElNRV9SWikKKyAgICByZXR1cm4gYWI7CisgIGVsc2UgeworICAgIHNpemVfdCBhYmxlbiA9IHN0cmxlbihhYik7CisgICAgaWYgKCpidWZhbGxvYyA8PSBhYmxlbikgeworICAgICAgZnJlZSgqYnVmKTsKKworICAgICAgLyogTWFrZSB0aGUgbmV3IGJ1ZmZlciBhdCBsZWFzdCB0d2ljZSBhcyBsb25nIGFzIHRoZSBvbGQsCisJIHRvIGF2b2lkIE8oTioqMikgYmVoYXZpb3Igb24gcmVwZWF0ZWQgY2FsbHMuICAqLworICAgICAgKmJ1ZmFsbG9jID0gc3Vtc2l6ZSgqYnVmYWxsb2MsIGFibGVuICsgMSk7CisKKyAgICAgICpidWYgPSBtYWxsb2MoKmJ1ZmFsbG9jKTsKKyAgICAgIGlmICghICpidWYpIHsKKwlwZXJyb3IocHJvZ25hbWUpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0cmNweSgqYnVmLCBhYik7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2Nsb3NlX2ZpbGUoRklMRSAqc3RyZWFtKQoreworICBjaGFyIGNvbnN0ICplID0gKGZlcnJvcihzdHJlYW0pID8gXygiSS9PIGVycm9yIikKKwkJICAgOiBmY2xvc2Uoc3RyZWFtKSAhPSAwID8gc3RyZXJyb3IoZXJybm8pIDogTlVMTCk7CisgIGlmIChlKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIHByb2duYW1lLCBlKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3VzYWdlKEZJTEUgKiBjb25zdCBzdHJlYW0sIGNvbnN0IGludCBzdGF0dXMpCit7CisJZnByaW50ZihzdHJlYW0sCitfKCIlczogdXNhZ2U6ICVzIFstLXZlcnNpb25dIFstLWhlbHBdIFste3ZWfV0gWy17Y3R9IFtsbyxdaGldIHpvbmVuYW1lIC4uLlxuIgorICAiXG4iCisgICJSZXBvcnQgYnVncyB0byAlcy5cbiIpLAorCQkgICAgICAgcHJvZ25hbWUsIHByb2duYW1lLCBSRVBPUlRfQlVHU19UTyk7CisJaWYgKHN0YXR1cyA9PSBFWElUX1NVQ0NFU1MpCisJICBjbG9zZV9maWxlKHN0cmVhbSk7CisJZXhpdChzdGF0dXMpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwkvKiBUaGVzZSBhcmUgc3RhdGljIHNvIHRoYXQgdGhleSdyZSBpbml0aWFsbHkgemVyby4gICovCisJc3RhdGljIGNoYXIgKgkJYWJicmV2OworCXN0YXRpYyBzaXplX3QJCWFiYnJldnNpemU7CisJc3RhdGljIHN0cnVjdCB0bQluZXd0bTsKKworCXJlZ2lzdGVyIGludAkJaTsKKwlyZWdpc3RlciBib29sCQl2ZmxhZzsKKwlyZWdpc3RlciBib29sCQlWZmxhZzsKKwlyZWdpc3RlciBjaGFyICoJCWN1dGFyZzsKKwlyZWdpc3RlciBjaGFyICoJCWN1dHRpbWVzOworCXJlZ2lzdGVyIHRpbWVfdAkJY3V0bG90aW1lOworCXJlZ2lzdGVyIHRpbWVfdAkJY3V0aGl0aW1lOworCXRpbWVfdAkJCW5vdzsKKwl0aW1lX3QJCQl0OworCXRpbWVfdAkJCW5ld3Q7CisJc3RydWN0IHRtCQl0bTsKKwlyZWdpc3RlciBzdHJ1Y3QgdG0gKgl0bXA7CisJcmVnaXN0ZXIgc3RydWN0IHRtICoJbmV3dG1wOworCisJY3V0bG90aW1lID0gYWJzb2x1dGVfbWluX3RpbWU7CisJY3V0aGl0aW1lID0gYWJzb2x1dGVfbWF4X3RpbWU7CisjaWYgSEFWRV9HRVRURVhUCisJc2V0bG9jYWxlKExDX0FMTCwgIiIpOworI2lmZGVmIFRaX0RPTUFJTkRJUgorCWJpbmR0ZXh0ZG9tYWluKFRaX0RPTUFJTiwgVFpfRE9NQUlORElSKTsKKyNlbmRpZiAvKiBkZWZpbmVkIFRFWFRET01BSU5ESVIgKi8KKwl0ZXh0ZG9tYWluKFRaX0RPTUFJTik7CisjZW5kaWYgLyogSEFWRV9HRVRURVhUICovCisJcHJvZ25hbWUgPSBhcmd2WzBdOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyArK2kpCisJCWlmIChzdHJjbXAoYXJndltpXSwgIi0tdmVyc2lvbiIpID09IDApIHsKKwkJCXByaW50ZigiemR1bXAgJXMlc1xuIiwgUEtHVkVSU0lPTiwgVFpWRVJTSU9OKTsKKwkJCXJldHVybiBFWElUX1NVQ0NFU1M7CisJCX0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItLWhlbHAiKSA9PSAwKSB7CisJCQl1c2FnZShzdGRvdXQsIEVYSVRfU1VDQ0VTUyk7CisJCX0KKwl2ZmxhZyA9IFZmbGFnID0gZmFsc2U7CisJY3V0YXJnID0gY3V0dGltZXMgPSBOVUxMOworCWZvciAoOzspCisJICBzd2l0Y2ggKGdldG9wdChhcmdjLCBhcmd2LCAiYzp0OnZWIikpIHsKKwkgIGNhc2UgJ2MnOiBjdXRhcmcgPSBvcHRhcmc7IGJyZWFrOworCSAgY2FzZSAndCc6IGN1dHRpbWVzID0gb3B0YXJnOyBicmVhazsKKwkgIGNhc2UgJ3YnOiB2ZmxhZyA9IHRydWU7IGJyZWFrOworCSAgY2FzZSAnVic6IFZmbGFnID0gdHJ1ZTsgYnJlYWs7CisJICBjYXNlIC0xOgorCSAgICBpZiAoISAob3B0aW5kID09IGFyZ2MgLSAxICYmIHN0cmNtcChhcmd2W29wdGluZF0sICI9IikgPT0gMCkpCisJICAgICAgZ290byBhcmdfcHJvY2Vzc2luZ19kb25lOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgdXNhZ2Uoc3RkZXJyLCBFWElUX0ZBSUxVUkUpOworCSAgfQorIGFyZ19wcm9jZXNzaW5nX2RvbmU6OworCisJaWYgKHZmbGFnIHwgVmZsYWcpIHsKKwkJaW50bWF4X3QJbG87CisJCWludG1heF90CWhpOworCQljaGFyICpsb2VuZCwgKmhpZW5kOworCQlyZWdpc3RlciBpbnRtYXhfdCBjdXRsb3llYXIgPSBaRFVNUF9MT19ZRUFSOworCQlyZWdpc3RlciBpbnRtYXhfdCBjdXRoaXllYXIgPSBaRFVNUF9ISV9ZRUFSOworCQlpZiAoY3V0YXJnICE9IE5VTEwpIHsKKwkJCWxvID0gc3RydG9pbWF4KGN1dGFyZywgJmxvZW5kLCAxMCk7CisJCQlpZiAoY3V0YXJnICE9IGxvZW5kICYmICEqbG9lbmQpIHsKKwkJCQloaSA9IGxvOworCQkJCWN1dGhpeWVhciA9IGhpOworCQkJfSBlbHNlIGlmIChjdXRhcmcgIT0gbG9lbmQgJiYgKmxvZW5kID09ICcsJworCQkJCSAgICYmIChoaSA9IHN0cnRvaW1heChsb2VuZCArIDEsICZoaWVuZCwgMTApLAorCQkJCSAgICAgICBsb2VuZCArIDEgIT0gaGllbmQgJiYgISpoaWVuZCkpIHsKKwkJCQljdXRsb3llYXIgPSBsbzsKKwkJCQljdXRoaXllYXIgPSBoaTsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiB3aWxkIC1jIGFyZ3VtZW50ICVzXG4iKSwKKwkJCQkJcHJvZ25hbWUsIGN1dGFyZyk7CisJCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJCX0KKwkJfQorCQlpZiAoY3V0YXJnICE9IE5VTEwgfHwgY3V0dGltZXMgPT0gTlVMTCkgeworCQkJY3V0bG90aW1lID0geWVhcnRvdChjdXRsb3llYXIpOworCQkJY3V0aGl0aW1lID0geWVhcnRvdChjdXRoaXllYXIpOworCQl9CisJCWlmIChjdXR0aW1lcyAhPSBOVUxMKSB7CisJCQlsbyA9IHN0cnRvaW1heChjdXR0aW1lcywgJmxvZW5kLCAxMCk7CisJCQlpZiAoY3V0dGltZXMgIT0gbG9lbmQgJiYgISpsb2VuZCkgeworCQkJCWhpID0gbG87CisJCQkJaWYgKGhpIDwgY3V0aGl0aW1lKSB7CisJCQkJCWlmIChoaSA8IGFic29sdXRlX21pbl90aW1lKQorCQkJCQkJaGkgPSBhYnNvbHV0ZV9taW5fdGltZTsKKwkJCQkJY3V0aGl0aW1lID0gaGk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChjdXR0aW1lcyAhPSBsb2VuZCAmJiAqbG9lbmQgPT0gJywnCisJCQkJICAgJiYgKGhpID0gc3RydG9pbWF4KGxvZW5kICsgMSwgJmhpZW5kLCAxMCksCisJCQkJICAgICAgIGxvZW5kICsgMSAhPSBoaWVuZCAmJiAhKmhpZW5kKSkgeworCQkJCWlmIChjdXRsb3RpbWUgPCBsbykgeworCQkJCQlpZiAoYWJzb2x1dGVfbWF4X3RpbWUgPCBsbykKKwkJCQkJCWxvID0gYWJzb2x1dGVfbWF4X3RpbWU7CisJCQkJCWN1dGxvdGltZSA9IGxvOworCQkJCX0KKwkJCQlpZiAoaGkgPCBjdXRoaXRpbWUpIHsKKwkJCQkJaWYgKGhpIDwgYWJzb2x1dGVfbWluX3RpbWUpCisJCQkJCQloaSA9IGFic29sdXRlX21pbl90aW1lOworCQkJCQljdXRoaXRpbWUgPSBoaTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCIlczogd2lsZCAtdCBhcmd1bWVudCAlc1xuIiksCisJCQkJCXByb2duYW1lLCBjdXR0aW1lcyk7CisJCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJCX0KKwkJfQorCX0KKwlnbXR6aW5pdCgpOworCW5vdyA9IHRpbWUoTlVMTCk7CisJbG9uZ2VzdCA9IDA7CisJZm9yIChpID0gb3B0aW5kOyBpIDwgYXJnYzsgaSsrKSB7CisJICBzaXplX3QgYXJnbGVuID0gc3RybGVuKGFyZ3ZbaV0pOworCSAgaWYgKGxvbmdlc3QgPCBhcmdsZW4pCisJICAgIGxvbmdlc3QgPSBhcmdsZW4gPCBJTlRfTUFYID8gYXJnbGVuIDogSU5UX01BWDsKKwl9CisKKwlmb3IgKGkgPSBvcHRpbmQ7IGkgPCBhcmdjOyArK2kpIHsKKwkJdGltZXpvbmVfdCB0eiA9IHR6YWxsb2MoYXJndltpXSk7CisJCWNoYXIgY29uc3QgKmFiOworCQlpZiAoIXR6KSB7CisJCSAgcGVycm9yKGFyZ3ZbaV0pOworCQkgIHJldHVybiBFWElUX0ZBSUxVUkU7CisJCX0KKwkJaWYgKCEgKHZmbGFnIHwgVmZsYWcpKSB7CisJCQlzaG93KHR6LCBhcmd2W2ldLCBub3csIGZhbHNlKTsKKwkJCXR6ZnJlZSh0eik7CisJCQljb250aW51ZTsKKwkJfQorCQl3YXJuZWQgPSBmYWxzZTsKKwkJdCA9IGFic29sdXRlX21pbl90aW1lOworCQlpZiAoIVZmbGFnKSB7CisJCQlzaG93KHR6LCBhcmd2W2ldLCB0LCB0cnVlKTsKKwkJCXQgKz0gU0VDU1BFUkRBWTsKKwkJCXNob3codHosIGFyZ3ZbaV0sIHQsIHRydWUpOworCQl9CisJCWlmICh0IDwgY3V0bG90aW1lKQorCQkJdCA9IGN1dGxvdGltZTsKKwkJdG1wID0gbXlfbG9jYWx0aW1lX3J6KHR6LCAmdCwgJnRtKTsKKwkJaWYgKHRtcCkKKwkJICBhYiA9IHNhdmVhYmJyKCZhYmJyZXYsICZhYmJyZXZzaXplLCAmdG0pOworCQl3aGlsZSAodCA8IGN1dGhpdGltZSkgeworCQkJbmV3dCA9ICgodCA8IGFic29sdXRlX21heF90aW1lIC0gU0VDU1BFUkRBWSAvIDIKKwkJCQkgJiYgdCArIFNFQ1NQRVJEQVkgLyAyIDwgY3V0aGl0aW1lKQorCQkJCT8gdCArIFNFQ1NQRVJEQVkgLyAyCisJCQkJOiBjdXRoaXRpbWUpOworCQkJbmV3dG1wID0gbG9jYWx0aW1lX3J6KHR6LCAmbmV3dCwgJm5ld3RtKTsKKwkJCWlmICgodG1wID09IE5VTEwgfHwgbmV3dG1wID09IE5VTEwpID8gKHRtcCAhPSBuZXd0bXApIDoKKwkJCQkoZGVsdGEoJm5ld3RtLCAmdG0pICE9IChuZXd0IC0gdCkgfHwKKwkJCQluZXd0bS50bV9pc2RzdCAhPSB0bS50bV9pc2RzdCB8fAorCQkJCXN0cmNtcChhYmJyKCZuZXd0bSksIGFiKSAhPSAwKSkgeworCQkJCQluZXd0ID0gaHVudCh0eiwgYXJndltpXSwgdCwgbmV3dCk7CisJCQkJCW5ld3RtcCA9IGxvY2FsdGltZV9yeih0eiwgJm5ld3QsICZuZXd0bSk7CisJCQkJCWlmIChuZXd0bXApCisJCQkJCSAgYWIgPSBzYXZlYWJicigmYWJicmV2LCAmYWJicmV2c2l6ZSwKKwkJCQkJCQkmbmV3dG0pOworCQkJfQorCQkJdCA9IG5ld3Q7CisJCQl0bSA9IG5ld3RtOworCQkJdG1wID0gbmV3dG1wOworCQl9CisJCWlmICghVmZsYWcpIHsKKwkJCXQgPSBhYnNvbHV0ZV9tYXhfdGltZTsKKwkJCXQgLT0gU0VDU1BFUkRBWTsKKwkJCXNob3codHosIGFyZ3ZbaV0sIHQsIHRydWUpOworCQkJdCArPSBTRUNTUEVSREFZOworCQkJc2hvdyh0eiwgYXJndltpXSwgdCwgdHJ1ZSk7CisJCX0KKwkJdHpmcmVlKHR6KTsKKwl9CisJY2xvc2VfZmlsZShzdGRvdXQpOworCWlmIChlcnJvdXQgJiYgKGZlcnJvcihzdGRlcnIpIHx8IGZjbG9zZShzdGRlcnIpICE9IDApKQorCSAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitzdGF0aWMgdGltZV90Cit5ZWFydG90KGludG1heF90IHkpCit7CisJcmVnaXN0ZXIgaW50bWF4X3QJbXl5LCBzZWNvbmRzLCB5ZWFyczsKKwlyZWdpc3RlciB0aW1lX3QJCXQ7CisKKwlteXkgPSBFUE9DSF9ZRUFSOworCXQgPSAwOworCXdoaWxlIChteXkgPCB5KSB7CisJCWlmIChTRUNTUEVSNDAwWUVBUlNfRklUUyAmJiA0MDAgPD0geSAtIG15eSkgeworCQkJaW50bWF4X3QgZGlmZjQwMCA9ICh5IC0gbXl5KSAvIDQwMDsKKwkJCWlmIChJTlRNQVhfTUFYIC8gU0VDU1BFUjQwMFlFQVJTIDwgZGlmZjQwMCkKKwkJCQlyZXR1cm4gYWJzb2x1dGVfbWF4X3RpbWU7CisJCQlzZWNvbmRzID0gZGlmZjQwMCAqIFNFQ1NQRVI0MDBZRUFSUzsKKwkJCXllYXJzID0gZGlmZjQwMCAqIDQwMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkJc2Vjb25kcyA9IGlzbGVhcChteXkpID8gU0VDU1BFUkxZRUFSIDogU0VDU1BFUk5ZRUFSOworCQkJeWVhcnMgPSAxOworCQl9CisJCW15eSArPSB5ZWFyczsKKwkJaWYgKHQgPiBhYnNvbHV0ZV9tYXhfdGltZSAtIHNlY29uZHMpCisJCQlyZXR1cm4gYWJzb2x1dGVfbWF4X3RpbWU7CisJCXQgKz0gc2Vjb25kczsKKwl9CisJd2hpbGUgKHkgPCBteXkpIHsKKwkJaWYgKFNFQ1NQRVI0MDBZRUFSU19GSVRTICYmIHkgKyA0MDAgPD0gbXl5ICYmIG15eSA8IDApIHsKKwkJCWludG1heF90IGRpZmY0MDAgPSAobXl5IC0geSkgLyA0MDA7CisJCQlpZiAoSU5UTUFYX01BWCAvIFNFQ1NQRVI0MDBZRUFSUyA8IGRpZmY0MDApCisJCQkJcmV0dXJuIGFic29sdXRlX21pbl90aW1lOworCQkJc2Vjb25kcyA9IGRpZmY0MDAgKiBTRUNTUEVSNDAwWUVBUlM7CisJCQl5ZWFycyA9IGRpZmY0MDAgKiA0MDA7CisJCX0gZWxzZSB7CisJCQlzZWNvbmRzID0gaXNsZWFwKG15eSAtIDEpID8gU0VDU1BFUkxZRUFSIDogU0VDU1BFUk5ZRUFSOworCQkJeWVhcnMgPSAxOworCQl9CisJCW15eSAtPSB5ZWFyczsKKwkJaWYgKHQgPCBhYnNvbHV0ZV9taW5fdGltZSArIHNlY29uZHMpCisJCQlyZXR1cm4gYWJzb2x1dGVfbWluX3RpbWU7CisJCXQgLT0gc2Vjb25kczsKKwl9CisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyB0aW1lX3QKK2h1bnQodGltZXpvbmVfdCB0eiwgY2hhciAqbmFtZSwgdGltZV90IGxvdCwgdGltZV90IGhpdCkKK3sKKwlzdGF0aWMgY2hhciAqCQlsb2FiOworCXN0YXRpYyBzaXplX3QJCWxvYWJzaXplOworCWNoYXIgY29uc3QgKgkJYWI7CisJdGltZV90CQkJdDsKKwlzdHJ1Y3QgdG0JCWxvdG07CisJcmVnaXN0ZXIgc3RydWN0IHRtICoJbG90bXA7CisJc3RydWN0IHRtCQl0bTsKKwlyZWdpc3RlciBzdHJ1Y3QgdG0gKgl0bXA7CisKKwlsb3RtcCA9IG15X2xvY2FsdGltZV9yeih0eiwgJmxvdCwgJmxvdG0pOworCWlmIChsb3RtcCkKKwkgIGFiID0gc2F2ZWFiYnIoJmxvYWIsICZsb2Fic2l6ZSwgJmxvdG0pOworCWZvciAoIDsgOyApIHsKKwkJdGltZV90IGRpZmYgPSBoaXQgLSBsb3Q7CisJCWlmIChkaWZmIDwgMikKKwkJCWJyZWFrOworCQl0ID0gbG90OworCQl0ICs9IGRpZmYgLyAyOworCQlpZiAodCA8PSBsb3QpCisJCQkrK3Q7CisJCWVsc2UgaWYgKHQgPj0gaGl0KQorCQkJLS10OworCQl0bXAgPSBteV9sb2NhbHRpbWVfcnoodHosICZ0LCAmdG0pOworCQlpZiAoKGxvdG1wID09IE5VTEwgfHwgdG1wID09IE5VTEwpID8gKGxvdG1wID09IHRtcCkgOgorCQkJKGRlbHRhKCZ0bSwgJmxvdG0pID09ICh0IC0gbG90KSAmJgorCQkJdG0udG1faXNkc3QgPT0gbG90bS50bV9pc2RzdCAmJgorCQkJc3RyY21wKGFiYnIoJnRtKSwgYWIpID09IDApKSB7CisJCQkJbG90ID0gdDsKKwkJCQlsb3RtID0gdG07CisJCQkJbG90bXAgPSB0bXA7CisJCX0gZWxzZQloaXQgPSB0OworCX0KKwlzaG93KHR6LCBuYW1lLCBsb3QsIHRydWUpOworCXNob3codHosIG5hbWUsIGhpdCwgdHJ1ZSk7CisJcmV0dXJuIGhpdDsKK30KKworLyoKKyoqIFRoYW5rcyB0byBQYXVsIEVnZ2VydCBmb3IgbG9naWMgdXNlZCBpbiBkZWx0YS4KKyovCisKK3N0YXRpYyBpbnRtYXhfdAorZGVsdGEoc3RydWN0IHRtICogbmV3cCwgc3RydWN0IHRtICpvbGRwKQoreworCXJlZ2lzdGVyIGludG1heF90CXJlc3VsdDsKKwlyZWdpc3RlciBpbnQJCXRteTsKKworCWlmIChuZXdwLT50bV95ZWFyIDwgb2xkcC0+dG1feWVhcikKKwkJcmV0dXJuIC1kZWx0YShvbGRwLCBuZXdwKTsKKwlyZXN1bHQgPSAwOworCWZvciAodG15ID0gb2xkcC0+dG1feWVhcjsgdG15IDwgbmV3cC0+dG1feWVhcjsgKyt0bXkpCisJCXJlc3VsdCArPSBEQVlTUEVSTllFQVIgKyBpc2xlYXBfc3VtKHRteSwgVE1fWUVBUl9CQVNFKTsKKwlyZXN1bHQgKz0gbmV3cC0+dG1feWRheSAtIG9sZHAtPnRtX3lkYXk7CisJcmVzdWx0ICo9IEhPVVJTUEVSREFZOworCXJlc3VsdCArPSBuZXdwLT50bV9ob3VyIC0gb2xkcC0+dG1faG91cjsKKwlyZXN1bHQgKj0gTUlOU1BFUkhPVVI7CisJcmVzdWx0ICs9IG5ld3AtPnRtX21pbiAtIG9sZHAtPnRtX21pbjsKKwlyZXN1bHQgKj0gU0VDU1BFUk1JTjsKKwlyZXN1bHQgKz0gbmV3cC0+dG1fc2VjIC0gb2xkcC0+dG1fc2VjOworCXJldHVybiByZXN1bHQ7Cit9CisKKyNpZm5kZWYgVE1fR01UT0ZGCisvKiBSZXR1cm4gQS0+dG1feWRheSwgYWRqdXN0ZWQgdG8gY29tcGFyZSBpdCBmYWlybHkgdG8gQi0+dG1feWRheS4KKyAgIEFzc3VtZSBBIGFuZCBCIGRpZmZlciBieSBhdCBtb3N0IG9uZSB5ZWFyLiAgKi8KK3N0YXRpYyBpbnQKK2FkanVzdGVkX3lkYXkoc3RydWN0IHRtIGNvbnN0ICphLCBzdHJ1Y3QgdG0gY29uc3QgKmIpCit7CisgIGludCB5ZGF5ID0gYS0+dG1feWRheTsKKyAgaWYgKGItPnRtX3llYXIgPCBhLT50bV95ZWFyKQorICAgIHlkYXkgKz0gMzY1ICsgaXNsZWFwX3N1bShiLT50bV95ZWFyLCBUTV9ZRUFSX0JBU0UpOworICByZXR1cm4geWRheTsKK30KKyNlbmRpZgorCisvKiBJZiBBIGlzIHRoZSBicm9rZW4tZG93biBsb2NhbCB0aW1lIGFuZCBCIHRoZSBicm9rZW4tZG93biBVVEMgZm9yCisgICB0aGUgc2FtZSBpbnN0YW50LCByZXR1cm4gQSdzIFVUQyBvZmZzZXQgaW4gc2Vjb25kcywgd2hlcmUgcG9zaXRpdmUKKyAgIG9mZnNldHMgYXJlIGVhc3Qgb2YgR3JlZW53aWNoLiAgT24gZmFpbHVyZSwgcmV0dXJuIExPTkdfTUlOLiAgKi8KK3N0YXRpYyBsb25nCitnbXRvZmYoc3RydWN0IHRtIGNvbnN0ICphLCBzdHJ1Y3QgdG0gY29uc3QgKmIpCit7CisjaWZkZWYgVE1fR01UT0ZGCisgIHJldHVybiBhLT5UTV9HTVRPRkY7CisjZWxzZQorICBpZiAoISBiKQorICAgIHJldHVybiBMT05HX01JTjsKKyAgZWxzZSB7CisgICAgaW50IGF5ZGF5ID0gYWRqdXN0ZWRfeWRheShhLCBiKTsKKyAgICBpbnQgYnlkYXkgPSBhZGp1c3RlZF95ZGF5KGIsIGEpOworICAgIGludCBkYXlzID0gYXlkYXkgLSBieWRheTsKKyAgICBsb25nIGhvdXJzID0gYS0+dG1faG91ciAtIGItPnRtX2hvdXIgKyAyNCAqIGRheXM7CisgICAgbG9uZyBtaW51dGVzID0gYS0+dG1fbWluIC0gYi0+dG1fbWluICsgNjAgKiBob3VyczsKKyAgICBsb25nIHNlY29uZHMgPSBhLT50bV9zZWMgLSBiLT50bV9zZWMgKyA2MCAqIG1pbnV0ZXM7CisgICAgcmV0dXJuIHNlY29uZHM7CisgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorc2hvdyh0aW1lem9uZV90IHR6LCBjaGFyICp6b25lLCB0aW1lX3QgdCwgYm9vbCB2KQoreworCXJlZ2lzdGVyIHN0cnVjdCB0bSAqCXRtcDsKKwlyZWdpc3RlciBzdHJ1Y3QgdG0gKglnbXRtcDsKKwlzdHJ1Y3QgdG0gdG0sIGdtdG07CisKKwlwcmludGYoIiUtKnMgICIsIGxvbmdlc3QsIHpvbmUpOworCWlmICh2KSB7CisJCWdtdG1wID0gbXlfZ210aW1lX3IoJnQsICZnbXRtKTsKKwkJaWYgKGdtdG1wID09IE5VTEwpIHsKKwkJCXByaW50Zih0Zm9ybWF0KCksIHQpOworCQl9IGVsc2UgeworCQkJZHVtcHRpbWUoZ210bXApOworCQkJcHJpbnRmKCIgVVQiKTsKKwkJfQorCQlwcmludGYoIiA9ICIpOworCX0KKwl0bXAgPSBteV9sb2NhbHRpbWVfcnoodHosICZ0LCAmdG0pOworCWR1bXB0aW1lKHRtcCk7CisJaWYgKHRtcCAhPSBOVUxMKSB7CisJCWlmICgqYWJicih0bXApICE9ICdcMCcpCisJCQlwcmludGYoIiAlcyIsIGFiYnIodG1wKSk7CisJCWlmICh2KSB7CisJCQlsb25nIG9mZiA9IGdtdG9mZih0bXAsIGdtdG1wKTsKKwkJCXByaW50ZigiIGlzZHN0PSVkIiwgdG1wLT50bV9pc2RzdCk7CisJCQlpZiAob2ZmICE9IExPTkdfTUlOKQorCQkJICBwcmludGYoIiBnbXRvZmY9JWxkIiwgb2ZmKTsKKwkJfQorCX0KKwlwcmludGYoIlxuIik7CisJaWYgKHRtcCAhPSBOVUxMICYmICphYmJyKHRtcCkgIT0gJ1wwJykKKwkJYWJicm9rKGFiYnIodG1wKSwgem9uZSk7Cit9CisKK3N0YXRpYyBjaGFyIGNvbnN0ICoKK2FiYnIoc3RydWN0IHRtIGNvbnN0ICp0bXApCit7CisjaWZkZWYgVE1fWk9ORQorCXJldHVybiB0bXAtPlRNX1pPTkU7CisjZWxzZQorCXJldHVybiAoMCA8PSB0bXAtPnRtX2lzZHN0ICYmIHR6bmFtZVswIDwgdG1wLT50bV9pc2RzdF0KKwkJPyB0em5hbWVbMCA8IHRtcC0+dG1faXNkc3RdCisJCTogIiIpOworI2VuZGlmCit9CisKKy8qCisqKiBUaGUgY29kZSBiZWxvdyBjYW4gZmFpbCBvbiBjZXJ0YWluIHRoZW9yZXRpY2FsIHN5c3RlbXM7CisqKiBpdCB3b3JrcyBvbiBhbGwga25vd24gcmVhbC13b3JsZCBzeXN0ZW1zIGFzIG9mIDIwMDQtMTItMzAuCisqLworCitzdGF0aWMgY29uc3QgY2hhciAqCit0Zm9ybWF0KHZvaWQpCit7CisJaWYgKDAgPiAodGltZV90KSAtMSkgewkJLyogc2lnbmVkICovCisJCWlmIChzaXplb2YgKHRpbWVfdCkgPT0gc2l6ZW9mIChpbnRtYXhfdCkpCisJCQlyZXR1cm4gIiUiUFJJZE1BWDsKKwkJaWYgKHNpemVvZiAodGltZV90KSA+IHNpemVvZiAobG9uZykpCisJCQlyZXR1cm4gIiVsbGQiOworCQlpZiAoc2l6ZW9mICh0aW1lX3QpID4gc2l6ZW9mIChpbnQpKQorCQkJcmV0dXJuICIlbGQiOworCQlyZXR1cm4gIiVkIjsKKwl9CisjaWZkZWYgUFJJdU1BWAorCWlmIChzaXplb2YgKHRpbWVfdCkgPT0gc2l6ZW9mICh1aW50bWF4X3QpKQorCQlyZXR1cm4gIiUiUFJJdU1BWDsKKyNlbmRpZgorCWlmIChzaXplb2YgKHRpbWVfdCkgPiBzaXplb2YgKHVuc2lnbmVkIGxvbmcpKQorCQlyZXR1cm4gIiVsbHUiOworCWlmIChzaXplb2YgKHRpbWVfdCkgPiBzaXplb2YgKHVuc2lnbmVkIGludCkpCisJCXJldHVybiAiJWx1IjsKKwlyZXR1cm4gIiV1IjsKK30KKworc3RhdGljIHZvaWQKK2R1bXB0aW1lKHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0bSAqdGltZXB0cikKK3sKKwlzdGF0aWMgY29uc3QgY2hhcgl3ZGF5X25hbWVbXVszXSA9IHsKKwkJIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyCW1vbl9uYW1lW11bM10gPSB7CisJCSJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsCisJCSJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIKKwl9OworCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKgl3bjsKKwlyZWdpc3RlciBjb25zdCBjaGFyICoJbW47CisJcmVnaXN0ZXIgaW50CQlsZWFkOworCXJlZ2lzdGVyIGludAkJdHJhaWw7CisKKwlpZiAodGltZXB0ciA9PSBOVUxMKSB7CisJCXByaW50ZigiTlVMTCIpOworCQlyZXR1cm47CisJfQorCS8qCisJKiogVGhlIHBhY2thZ2VkIGxvY2FsdGltZV9yeiBhbmQgZ210aW1lX3IgbmV2ZXIgcHV0IG91dC1vZi1yYW5nZQorCSoqIHZhbHVlcyBpbiB0bV93ZGF5IG9yIHRtX21vbiwgYnV0IHNpbmNlIHRoaXMgY29kZSBtaWdodCBiZSBjb21waWxlZAorCSoqIHdpdGggb3RoZXIgKHBlcmhhcHMgZXhwZXJpbWVudGFsKSB2ZXJzaW9ucywgcGFyYW5vaWEgaXMgaW4gb3JkZXIuCisJKi8KKwlpZiAodGltZXB0ci0+dG1fd2RheSA8IDAgfHwgdGltZXB0ci0+dG1fd2RheSA+PQorCQkoaW50KSAoc2l6ZW9mIHdkYXlfbmFtZSAvIHNpemVvZiB3ZGF5X25hbWVbMF0pKQorCQkJd24gPSAiPz8/IjsKKwllbHNlCQl3biA9IHdkYXlfbmFtZVt0aW1lcHRyLT50bV93ZGF5XTsKKwlpZiAodGltZXB0ci0+dG1fbW9uIDwgMCB8fCB0aW1lcHRyLT50bV9tb24gPj0KKwkJKGludCkgKHNpemVvZiBtb25fbmFtZSAvIHNpemVvZiBtb25fbmFtZVswXSkpCisJCQltbiA9ICI/Pz8iOworCWVsc2UJCW1uID0gbW9uX25hbWVbdGltZXB0ci0+dG1fbW9uXTsKKwlwcmludGYoIiUuM3MgJS4zcyUzZCAlLjJkOiUuMmQ6JS4yZCAiLAorCQl3biwgbW4sCisJCXRpbWVwdHItPnRtX21kYXksIHRpbWVwdHItPnRtX2hvdXIsCisJCXRpbWVwdHItPnRtX21pbiwgdGltZXB0ci0+dG1fc2VjKTsKKyNkZWZpbmUgRElWSVNPUgkxMAorCXRyYWlsID0gdGltZXB0ci0+dG1feWVhciAlIERJVklTT1IgKyBUTV9ZRUFSX0JBU0UgJSBESVZJU09SOworCWxlYWQgPSB0aW1lcHRyLT50bV95ZWFyIC8gRElWSVNPUiArIFRNX1lFQVJfQkFTRSAvIERJVklTT1IgKworCQl0cmFpbCAvIERJVklTT1I7CisJdHJhaWwgJT0gRElWSVNPUjsKKwlpZiAodHJhaWwgPCAwICYmIGxlYWQgPiAwKSB7CisJCXRyYWlsICs9IERJVklTT1I7CisJCS0tbGVhZDsKKwl9IGVsc2UgaWYgKGxlYWQgPCAwICYmIHRyYWlsID4gMCkgeworCQl0cmFpbCAtPSBESVZJU09SOworCQkrK2xlYWQ7CisJfQorCWlmIChsZWFkID09IDApCisJCXByaW50ZigiJWQiLCB0cmFpbCk7CisJZWxzZQlwcmludGYoIiVkJWQiLCBsZWFkLCAoKHRyYWlsIDwgMCkgPyAtdHJhaWwgOiB0cmFpbCkpOworfQpkaWZmIC0tZ2l0IGEvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3ppYy5jIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3ppYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YWI4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvemljLmMKQEAgLTAsMCArMSwzMDE1IEBACisvKgorKiogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyoqIDIwMDYtMDctMTcgYnkgQXJ0aHVyIERhdmlkIE9sc29uLgorKi8KKworI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJwcml2YXRlLmgiCisjaW5jbHVkZSAibG9jYWxlLmgiCisjaW5jbHVkZSAidHpmaWxlLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2RlZmluZQlaSUNfVkVSU0lPTl9QUkVfMjAxMyAnMicKKyNkZWZpbmUJWklDX1ZFUlNJT04JJzMnCisKK3R5cGVkZWYgaW50X2Zhc3Q2NF90CXppY190OworI2RlZmluZSBaSUNfTUlOIElOVF9GQVNUNjRfTUlOCisjZGVmaW5lIFpJQ19NQVggSU5UX0ZBU1Q2NF9NQVgKKyNkZWZpbmUgU0NOZFpJQyBTQ05kRkFTVDY0CisKKyNpZm5kZWYgWklDX01BWF9BQkJSX0xFTl9XT19XQVJOCisjZGVmaW5lIFpJQ19NQVhfQUJCUl9MRU5fV09fV0FSTgk2CisjZW5kaWYgLyogIWRlZmluZWQgWklDX01BWF9BQkJSX0xFTl9XT19XQVJOICovCisKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgU19JUlVTUgorI2RlZmluZSBNS0RJUl9VTUFTSyAoU19JUlVTUnxTX0lXVVNSfFNfSVhVU1J8U19JUkdSUHxTX0lYR1JQfFNfSVJPVEh8U19JWE9USCkKKyNlbHNlCisjZGVmaW5lIE1LRElSX1VNQVNLIDA3NTUKKyNlbmRpZgorCitzdHJ1Y3QgcnVsZSB7CisJY29uc3QgY2hhciAqCXJfZmlsZW5hbWU7CisJaW50CQlyX2xpbmVudW07CisJY29uc3QgY2hhciAqCXJfbmFtZTsKKworCXppY190CQlyX2xveWVhcjsJLyogZm9yIGV4YW1wbGUsIDE5ODYgKi8KKwl6aWNfdAkJcl9oaXllYXI7CS8qIGZvciBleGFtcGxlLCAxOTg2ICovCisJY29uc3QgY2hhciAqCXJfeXJ0eXBlOworCWJvb2wJCXJfbG93YXNudW07CisJYm9vbAkJcl9oaXdhc251bTsKKworCWludAkJcl9tb250aDsJLyogMC4uMTEgKi8KKworCWludAkJcl9keWNvZGU7CS8qIHNlZSBiZWxvdyAqLworCWludAkJcl9kYXlvZm1vbnRoOworCWludAkJcl93ZGF5OworCisJemljX3QJCXJfdG9kOwkJLyogdGltZSBmcm9tIG1pZG5pZ2h0ICovCisJYm9vbAkJcl90b2Rpc3N0ZDsJLyogYWJvdmUgaXMgc3RhbmRhcmQgdGltZSBpZiAxICovCisJCQkJCS8qIG9yIHdhbGwgY2xvY2sgdGltZSBpZiAwICovCisJYm9vbAkJcl90b2Rpc2dtdDsJLyogYWJvdmUgaXMgR01UIGlmIDEgKi8KKwkJCQkJLyogb3IgbG9jYWwgdGltZSBpZiAwICovCisJemljX3QJCXJfc3Rkb2ZmOwkvKiBvZmZzZXQgZnJvbSBzdGFuZGFyZCB0aW1lICovCisJY29uc3QgY2hhciAqCXJfYWJicnZhcjsJLyogdmFyaWFibGUgcGFydCBvZiBhYmJyZXZpYXRpb24gKi8KKworCWludAkJcl90b2RvOwkJLyogYSBydWxlIHRvIGRvICh1c2VkIGluIG91dHpvbmUpICovCisJemljX3QJCXJfdGVtcDsJCS8qIHVzZWQgaW4gb3V0em9uZSAqLworfTsKKworLyoKKyoqCXJfZHljb2RlCQlyX2RheW9mbW9udGgJcl93ZGF5CisqLworCisjZGVmaW5lIERDX0RPTQkJMAkvKiAxLi4zMSAqLwkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgRENfRE9XR0VRCTEJLyogMS4uMzEgKi8JLyogMC4uNiAoU3VuLi5TYXQpICovCisjZGVmaW5lIERDX0RPV0xFUQkyCS8qIDEuLjMxICovCS8qIDAuLjYgKFN1bi4uU2F0KSAqLworCitzdHJ1Y3Qgem9uZSB7CisJY29uc3QgY2hhciAqCXpfZmlsZW5hbWU7CisJaW50CQl6X2xpbmVudW07CisKKwljb25zdCBjaGFyICoJel9uYW1lOworCXppY190CQl6X2dtdG9mZjsKKwljb25zdCBjaGFyICoJel9ydWxlOworCWNvbnN0IGNoYXIgKgl6X2Zvcm1hdDsKKwljaGFyCQl6X2Zvcm1hdF9zcGVjaWZpZXI7CisKKwl6aWNfdAkJel9zdGRvZmY7CisKKwlzdHJ1Y3QgcnVsZSAqCXpfcnVsZXM7CisJaW50CQl6X25ydWxlczsKKworCXN0cnVjdCBydWxlCXpfdW50aWxydWxlOworCXppY190CQl6X3VudGlsdGltZTsKK307CisKK2V4dGVybiBpbnQJZ2V0b3B0KGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdLAorCQkJY29uc3QgY2hhciAqIG9wdGlvbnMpOworZXh0ZXJuIGludAlsaW5rKGNvbnN0IGNoYXIgKiBmcm9tbmFtZSwgY29uc3QgY2hhciAqIHRvbmFtZSk7CitleHRlcm4gY2hhciAqCW9wdGFyZzsKK2V4dGVybiBpbnQJb3B0aW5kOworCisjaWYgISBIQVZFX0xJTksKKyMgZGVmaW5lIGxpbmsoZnJvbSwgdG8pICgtMSkKKyNlbmRpZgorI2lmICEgSEFWRV9TWU1MSU5LCisjIGRlZmluZSBzeW1saW5rKGZyb20sIHRvKSAoLTEpCisjZW5kaWYKKworc3RhdGljIHZvaWQJYWRkdHQoemljX3Qgc3RhcnR0aW1lLCBpbnQgdHlwZSk7CitzdGF0aWMgaW50CWFkZHR5cGUoemljX3QsIGNoYXIgY29uc3QgKiwgYm9vbCwgYm9vbCwgYm9vbCk7CitzdGF0aWMgdm9pZAlsZWFwYWRkKHppY190LCBib29sLCBpbnQsIGludCk7CitzdGF0aWMgdm9pZAlhZGpsZWFwKHZvaWQpOworc3RhdGljIHZvaWQJYXNzb2NpYXRlKHZvaWQpOworc3RhdGljIHZvaWQJZG9saW5rKGNvbnN0IGNoYXIgKiBmcm9tZmllbGQsIGNvbnN0IGNoYXIgKiB0b2ZpZWxkKTsKK3N0YXRpYyBjaGFyICoqCWdldGZpZWxkcyhjaGFyICogYnVmKTsKK3N0YXRpYyB6aWNfdAlnZXRobXMoY29uc3QgY2hhciAqIHN0cmluZywgY29uc3QgY2hhciAqIGVycnN0cmluZywKKwkJICAgICAgIGJvb2wpOworc3RhdGljIHZvaWQJaW5maWxlKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSk7CitzdGF0aWMgdm9pZAlpbmxlYXAoY2hhciAqKiBmaWVsZHMsIGludCBuZmllbGRzKTsKK3N0YXRpYyB2b2lkCWlubGluayhjaGFyICoqIGZpZWxkcywgaW50IG5maWVsZHMpOworc3RhdGljIHZvaWQJaW5ydWxlKGNoYXIgKiogZmllbGRzLCBpbnQgbmZpZWxkcyk7CitzdGF0aWMgYm9vbAlpbnpjb250KGNoYXIgKiogZmllbGRzLCBpbnQgbmZpZWxkcyk7CitzdGF0aWMgYm9vbAlpbnpvbmUoY2hhciAqKiBmaWVsZHMsIGludCBuZmllbGRzKTsKK3N0YXRpYyBib29sCWluenN1YihjaGFyICoqLCBpbnQsIGJvb2wpOworc3RhdGljIGludAlpdHNkaXIoY29uc3QgY2hhciAqIG5hbWUpOworc3RhdGljIGJvb2wJaXNfYWxwaGEoY2hhciBhKTsKK3N0YXRpYyBjaGFyCWxvd2VyaXQoY2hhcik7CitzdGF0aWMgYm9vbAlta2RpcnMoY2hhciAqKTsKK3N0YXRpYyB2b2lkCW5ld2FiYnIoY29uc3QgY2hhciAqIGFiYnIpOworc3RhdGljIHppY190CW9hZGQoemljX3QgdDEsIHppY190IHQyKTsKK3N0YXRpYyB2b2lkCW91dHpvbmUoY29uc3Qgc3RydWN0IHpvbmUgKiB6cCwgaW50IG50em9uZXMpOworc3RhdGljIHppY190CXJweXRpbWUoY29uc3Qgc3RydWN0IHJ1bGUgKiBycCwgemljX3Qgd2FudGVkeSk7CitzdGF0aWMgdm9pZAlydWxlc3ViKHN0cnVjdCBydWxlICogcnAsCisJCQljb25zdCBjaGFyICogbG95ZWFycCwgY29uc3QgY2hhciAqIGhpeWVhcnAsCisJCQljb25zdCBjaGFyICogdHlwZXAsIGNvbnN0IGNoYXIgKiBtb250aHAsCisJCQljb25zdCBjaGFyICogZGF5cCwgY29uc3QgY2hhciAqIHRpbWVwKTsKK3N0YXRpYyB6aWNfdAl0YWRkKHppY190IHQxLCB6aWNfdCB0Mik7CitzdGF0aWMgYm9vbAl5ZWFyaXN0eXBlKGludCB5ZWFyLCBjb25zdCBjaGFyICogdHlwZSk7CisKKy8qIEJvdW5kIG9uIGxlbmd0aCBvZiB3aGF0ICV6IGNhbiBleHBhbmQgdG8uICAqLworZW51bSB7IFBFUkNFTlRfWl9MRU5fQk9VTkQgPSBzaXplb2YgIis5OTU5NTkiIC0gMSB9OworCitzdGF0aWMgaW50CQljaGFyY250Oworc3RhdGljIGJvb2wJCWVycm9yczsKK3N0YXRpYyBib29sCQl3YXJuaW5nczsKK3N0YXRpYyBjb25zdCBjaGFyICoJZmlsZW5hbWU7CitzdGF0aWMgaW50CQlsZWFwY250Oworc3RhdGljIGJvb2wJCWxlYXBzZWVuOworc3RhdGljIHppY190CQlsZWFwbWlueWVhcjsKK3N0YXRpYyB6aWNfdAkJbGVhcG1heHllYXI7CitzdGF0aWMgaW50CQlsaW5lbnVtOworc3RhdGljIGludAkJbWF4X2FiYnJ2YXJfbGVuID0gUEVSQ0VOVF9aX0xFTl9CT1VORDsKK3N0YXRpYyBpbnQJCW1heF9mb3JtYXRfbGVuOworc3RhdGljIHppY190CQltYXhfeWVhcjsKK3N0YXRpYyB6aWNfdAkJbWluX3llYXI7CitzdGF0aWMgYm9vbAkJbm9pc2U7CitzdGF0aWMgY29uc3QgY2hhciAqCXJmaWxlbmFtZTsKK3N0YXRpYyBpbnQJCXJsaW5lbnVtOworc3RhdGljIGNvbnN0IGNoYXIgKglwcm9nbmFtZTsKK3N0YXRpYyBpbnQJCXRpbWVjbnQ7CitzdGF0aWMgaW50CQl0aW1lY250X2FsbG9jOworc3RhdGljIGludAkJdHlwZWNudDsKKworLyoKKyoqIExpbmUgY29kZXMuCisqLworCisjZGVmaW5lIExDX1JVTEUJCTAKKyNkZWZpbmUgTENfWk9ORQkJMQorI2RlZmluZSBMQ19MSU5LCQkyCisjZGVmaW5lIExDX0xFQVAJCTMKKworLyoKKyoqIFdoaWNoIGZpZWxkcyBhcmUgd2hpY2ggb24gYSBab25lIGxpbmUuCisqLworCisjZGVmaW5lIFpGX05BTUUJCTEKKyNkZWZpbmUgWkZfR01UT0ZGCTIKKyNkZWZpbmUgWkZfUlVMRQkJMworI2RlZmluZSBaRl9GT1JNQVQJNAorI2RlZmluZSBaRl9USUxZRUFSCTUKKyNkZWZpbmUgWkZfVElMTU9OVEgJNgorI2RlZmluZSBaRl9USUxEQVkJNworI2RlZmluZSBaRl9USUxUSU1FCTgKKyNkZWZpbmUgWk9ORV9NSU5GSUVMRFMJNQorI2RlZmluZSBaT05FX01BWEZJRUxEUwk5CisKKy8qCisqKiBXaGljaCBmaWVsZHMgYXJlIHdoaWNoIG9uIGEgWm9uZSBjb250aW51YXRpb24gbGluZS4KKyovCisKKyNkZWZpbmUgWkZDX0dNVE9GRgkwCisjZGVmaW5lIFpGQ19SVUxFCTEKKyNkZWZpbmUgWkZDX0ZPUk1BVAkyCisjZGVmaW5lIFpGQ19USUxZRUFSCTMKKyNkZWZpbmUgWkZDX1RJTE1PTlRICTQKKyNkZWZpbmUgWkZDX1RJTERBWQk1CisjZGVmaW5lIFpGQ19USUxUSU1FCTYKKyNkZWZpbmUgWk9ORUNfTUlORklFTERTCTMKKyNkZWZpbmUgWk9ORUNfTUFYRklFTERTCTcKKworLyoKKyoqIFdoaWNoIGZpbGVzIGFyZSB3aGljaCBvbiBhIFJ1bGUgbGluZS4KKyovCisKKyNkZWZpbmUgUkZfTkFNRQkJMQorI2RlZmluZSBSRl9MT1lFQVIJMgorI2RlZmluZSBSRl9ISVlFQVIJMworI2RlZmluZSBSRl9DT01NQU5ECTQKKyNkZWZpbmUgUkZfTU9OVEgJNQorI2RlZmluZSBSRl9EQVkJCTYKKyNkZWZpbmUgUkZfVE9ECQk3CisjZGVmaW5lIFJGX1NURE9GRgk4CisjZGVmaW5lIFJGX0FCQlJWQVIJOQorI2RlZmluZSBSVUxFX0ZJRUxEUwkxMAorCisvKgorKiogV2hpY2ggZmllbGRzIGFyZSB3aGljaCBvbiBhIExpbmsgbGluZS4KKyovCisKKyNkZWZpbmUgTEZfRlJPTQkJMQorI2RlZmluZSBMRl9UTwkJMgorI2RlZmluZSBMSU5LX0ZJRUxEUwkzCisKKy8qCisqKiBXaGljaCBmaWVsZHMgYXJlIHdoaWNoIG9uIGEgTGVhcCBsaW5lLgorKi8KKworI2RlZmluZSBMUF9ZRUFSCQkxCisjZGVmaW5lIExQX01PTlRICTIKKyNkZWZpbmUgTFBfREFZCQkzCisjZGVmaW5lIExQX1RJTUUJCTQKKyNkZWZpbmUgTFBfQ09SUgkJNQorI2RlZmluZSBMUF9ST0xMCQk2CisjZGVmaW5lIExFQVBfRklFTERTCTcKKworLyoKKyoqIFllYXIgc3lub255bXMuCisqLworCisjZGVmaW5lIFlSX01JTklNVU0JMAorI2RlZmluZSBZUl9NQVhJTVVNCTEKKyNkZWZpbmUgWVJfT05MWQkJMgorCitzdGF0aWMgc3RydWN0IHJ1bGUgKglydWxlczsKK3N0YXRpYyBpbnQJCW5ydWxlczsJLyogbnVtYmVyIG9mIHJ1bGVzICovCitzdGF0aWMgaW50CQlucnVsZXNfYWxsb2M7CisKK3N0YXRpYyBzdHJ1Y3Qgem9uZSAqCXpvbmVzOworc3RhdGljIGludAkJbnpvbmVzOwkvKiBudW1iZXIgb2Ygem9uZXMgKi8KK3N0YXRpYyBpbnQJCW56b25lc19hbGxvYzsKKworc3RydWN0IGxpbmsgeworCWNvbnN0IGNoYXIgKglsX2ZpbGVuYW1lOworCWludAkJbF9saW5lbnVtOworCWNvbnN0IGNoYXIgKglsX2Zyb207CisJY29uc3QgY2hhciAqCWxfdG87Cit9OworCitzdGF0aWMgc3RydWN0IGxpbmsgKglsaW5rczsKK3N0YXRpYyBpbnQJCW5saW5rczsKK3N0YXRpYyBpbnQJCW5saW5rc19hbGxvYzsKKworc3RydWN0IGxvb2t1cCB7CisJY29uc3QgY2hhciAqCWxfd29yZDsKKwljb25zdCBpbnQJbF92YWx1ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbG9va3VwIGNvbnN0ICoJYnl3b3JkKGNvbnN0IGNoYXIgKiBzdHJpbmcsCisJCQkJCWNvbnN0IHN0cnVjdCBsb29rdXAgKiBscCk7CisKK3N0YXRpYyBzdHJ1Y3QgbG9va3VwIGNvbnN0CWxpbmVfY29kZXNbXSA9IHsKKwl7ICJSdWxlIiwJTENfUlVMRSB9LAorCXsgIlpvbmUiLAlMQ19aT05FIH0sCisJeyAiTGluayIsCUxDX0xJTksgfSwKKwl7ICJMZWFwIiwJTENfTEVBUCB9LAorCXsgTlVMTCwJCTB9Cit9OworCitzdGF0aWMgc3RydWN0IGxvb2t1cCBjb25zdAltb25fbmFtZXNbXSA9IHsKKwl7ICJKYW51YXJ5IiwJVE1fSkFOVUFSWSB9LAorCXsgIkZlYnJ1YXJ5IiwJVE1fRkVCUlVBUlkgfSwKKwl7ICJNYXJjaCIsCVRNX01BUkNIIH0sCisJeyAiQXByaWwiLAlUTV9BUFJJTCB9LAorCXsgIk1heSIsCVRNX01BWSB9LAorCXsgIkp1bmUiLAlUTV9KVU5FIH0sCisJeyAiSnVseSIsCVRNX0pVTFkgfSwKKwl7ICJBdWd1c3QiLAlUTV9BVUdVU1QgfSwKKwl7ICJTZXB0ZW1iZXIiLAlUTV9TRVBURU1CRVIgfSwKKwl7ICJPY3RvYmVyIiwJVE1fT0NUT0JFUiB9LAorCXsgIk5vdmVtYmVyIiwJVE1fTk9WRU1CRVIgfSwKKwl7ICJEZWNlbWJlciIsCVRNX0RFQ0VNQkVSIH0sCisJeyBOVUxMLAkJMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGxvb2t1cCBjb25zdAl3ZGF5X25hbWVzW10gPSB7CisJeyAiU3VuZGF5IiwJVE1fU1VOREFZIH0sCisJeyAiTW9uZGF5IiwJVE1fTU9OREFZIH0sCisJeyAiVHVlc2RheSIsCVRNX1RVRVNEQVkgfSwKKwl7ICJXZWRuZXNkYXkiLAlUTV9XRURORVNEQVkgfSwKKwl7ICJUaHVyc2RheSIsCVRNX1RIVVJTREFZIH0sCisJeyAiRnJpZGF5IiwJVE1fRlJJREFZIH0sCisJeyAiU2F0dXJkYXkiLAlUTV9TQVRVUkRBWSB9LAorCXsgTlVMTCwJCTAgfQorfTsKKworc3RhdGljIHN0cnVjdCBsb29rdXAgY29uc3QJbGFzdHNbXSA9IHsKKwl7ICJsYXN0LVN1bmRheSIsCVRNX1NVTkRBWSB9LAorCXsgImxhc3QtTW9uZGF5IiwJVE1fTU9OREFZIH0sCisJeyAibGFzdC1UdWVzZGF5IiwJVE1fVFVFU0RBWSB9LAorCXsgImxhc3QtV2VkbmVzZGF5IiwJVE1fV0VETkVTREFZIH0sCisJeyAibGFzdC1UaHVyc2RheSIsCVRNX1RIVVJTREFZIH0sCisJeyAibGFzdC1GcmlkYXkiLAlUTV9GUklEQVkgfSwKKwl7ICJsYXN0LVNhdHVyZGF5IiwJVE1fU0FUVVJEQVkgfSwKKwl7IE5VTEwsCQkJMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGxvb2t1cCBjb25zdAliZWdpbl95ZWFyc1tdID0geworCXsgIm1pbmltdW0iLAlZUl9NSU5JTVVNIH0sCisJeyAibWF4aW11bSIsCVlSX01BWElNVU0gfSwKKwl7IE5VTEwsCQkwIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbG9va3VwIGNvbnN0CWVuZF95ZWFyc1tdID0geworCXsgIm1pbmltdW0iLAlZUl9NSU5JTVVNIH0sCisJeyAibWF4aW11bSIsCVlSX01BWElNVU0gfSwKKwl7ICJvbmx5IiwJWVJfT05MWSB9LAorCXsgTlVMTCwJCTAgfQorfTsKKworc3RhdGljIHN0cnVjdCBsb29rdXAgY29uc3QJbGVhcF90eXBlc1tdID0geworCXsgIlJvbGxpbmciLAl0cnVlIH0sCisJeyAiU3RhdGlvbmFyeSIsCWZhbHNlIH0sCisJeyBOVUxMLAkJMCB9Cit9OworCitzdGF0aWMgY29uc3QgaW50CWxlbl9tb250aHNbMl1bTU9OU1BFUllFQVJdID0geworCXsgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9LAorCXsgMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9Cit9OworCitzdGF0aWMgY29uc3QgaW50CWxlbl95ZWFyc1syXSA9IHsKKwlEQVlTUEVSTllFQVIsIERBWVNQRVJMWUVBUgorfTsKKworc3RhdGljIHN0cnVjdCBhdHR5cGUgeworCXppY190CQlhdDsKKwl1bnNpZ25lZCBjaGFyCXR5cGU7Cit9ICoJCQlhdHR5cGVzOworc3RhdGljIHppY190CQlnbXRvZmZzW1RaX01BWF9UWVBFU107CitzdGF0aWMgY2hhcgkJaXNkc3RzW1RaX01BWF9UWVBFU107CitzdGF0aWMgdW5zaWduZWQgY2hhcglhYmJyaW5kc1tUWl9NQVhfVFlQRVNdOworc3RhdGljIGJvb2wJCXR0aXNzdGRzW1RaX01BWF9UWVBFU107CitzdGF0aWMgYm9vbAkJdHRpc2dtdHNbVFpfTUFYX1RZUEVTXTsKK3N0YXRpYyBjaGFyCQljaGFyc1tUWl9NQVhfQ0hBUlNdOworc3RhdGljIHppY190CQl0cmFuc1tUWl9NQVhfTEVBUFNdOworc3RhdGljIHppY190CQljb3JyW1RaX01BWF9MRUFQU107CitzdGF0aWMgY2hhcgkJcm9sbFtUWl9NQVhfTEVBUFNdOworCisvKgorKiogTWVtb3J5IGFsbG9jYXRpb24uCisqLworCitzdGF0aWMgX05vcmV0dXJuIHZvaWQKK21lbW9yeV9leGhhdXN0ZWQoY29uc3QgY2hhciAqbXNnKQoreworCWZwcmludGYoc3RkZXJyLCBfKCIlczogTWVtb3J5IGV4aGF1c3RlZDogJXNcbiIpLCBwcm9nbmFtZSwgbXNnKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyBBVFRSSUJVVEVfUFVSRSBzaXplX3QKK3NpemVfcHJvZHVjdChzaXplX3Qgbml0ZW1zLCBzaXplX3QgaXRlbXNpemUpCit7CisJaWYgKFNJWkVfTUFYIC8gaXRlbXNpemUgPCBuaXRlbXMpCisJCW1lbW9yeV9leGhhdXN0ZWQoXygic2l6ZSBvdmVyZmxvdyIpKTsKKwlyZXR1cm4gbml0ZW1zICogaXRlbXNpemU7Cit9CisKKyNpZiAhSEFWRV9TVFJEVVAKK3N0YXRpYyBjaGFyICoKK3N0cmR1cChjaGFyIGNvbnN0ICpzdHIpCit7CisgIGNoYXIgKnJlc3VsdCA9IG1hbGxvYyhzdHJsZW4oc3RyKSArIDEpOworICByZXR1cm4gcmVzdWx0ID8gc3RyY3B5KHJlc3VsdCwgc3RyKSA6IHJlc3VsdDsKK30KKyNlbmRpZgorCitzdGF0aWMgQVRUUklCVVRFX1BVUkUgdm9pZCAqCittZW1jaGVjayh2b2lkICpwdHIpCit7CisJaWYgKHB0ciA9PSBOVUxMKQorCQltZW1vcnlfZXhoYXVzdGVkKHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQgKgorZW1hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgcmV0dXJuIG1lbWNoZWNrKG1hbGxvYyhzaXplKSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK2VyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBtZW1jaGVjayhyZWFsbG9jKHB0ciwgc2l6ZSkpOworfQorCitzdGF0aWMgY2hhciAqCitlY3B5YWxsb2MgKGNoYXIgY29uc3QgKnN0cikKK3sKKyAgcmV0dXJuIG1lbWNoZWNrKHN0cmR1cChzdHIpKTsKK30KKworc3RhdGljIHZvaWQgKgorZ3Jvd2FsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IGl0ZW1zaXplLCBpbnQgbml0ZW1zLCBpbnQgKm5pdGVtc19hbGxvYykKK3sKKwlpZiAobml0ZW1zIDwgKm5pdGVtc19hbGxvYykKKwkJcmV0dXJuIHB0cjsKKwllbHNlIHsKKwkJaW50IGFtYXggPSBJTlRfTUFYIDwgU0laRV9NQVggPyBJTlRfTUFYIDogU0laRV9NQVg7CisJCWlmICgoYW1heCAtIDEpIC8gMyAqIDIgPCAqbml0ZW1zX2FsbG9jKQorCQkJbWVtb3J5X2V4aGF1c3RlZChfKCJpbnQgb3ZlcmZsb3ciKSk7CisJCSpuaXRlbXNfYWxsb2MgPSAqbml0ZW1zX2FsbG9jICsgKCpuaXRlbXNfYWxsb2MgPj4gMSkgKyAxOworCQlyZXR1cm4gZXJlYWxsb2MocHRyLCBzaXplX3Byb2R1Y3QoKm5pdGVtc19hbGxvYywgaXRlbXNpemUpKTsKKwl9Cit9CisKKy8qCisqKiBFcnJvciBoYW5kbGluZy4KKyovCisKK3N0YXRpYyB2b2lkCitlYXRzKGNvbnN0IGNoYXIgKmNvbnN0IG5hbWUsIGNvbnN0IGludCBudW0sIGNvbnN0IGNoYXIgKmNvbnN0IHJuYW1lLAorICAgICBjb25zdCBpbnQgcm51bSkKK3sKKwlmaWxlbmFtZSA9IG5hbWU7CisJbGluZW51bSA9IG51bTsKKwlyZmlsZW5hbWUgPSBybmFtZTsKKwlybGluZW51bSA9IHJudW07Cit9CisKK3N0YXRpYyB2b2lkCitlYXQoY29uc3QgY2hhciAqY29uc3QgbmFtZSwgY29uc3QgaW50IG51bSkKK3sKKwllYXRzKG5hbWUsIG51bSwgTlVMTCwgLTEpOworfQorCitzdGF0aWMgdm9pZCBBVFRSSUJVVEVfRk9STUFUKChwcmludGYsIDEsIDApKQordmVycm9yKGNvbnN0IGNoYXIgKmNvbnN0IHN0cmluZywgdmFfbGlzdCBhcmdzKQoreworCS8qCisJKiogTWF0Y2ggdGhlIGZvcm1hdCBvZiAiY2MiIHRvIGFsbG93IHNoIHVzZXJzIHRvCisJKioJemljIC4uLiAyPiYxIHwgZXJyb3IgLXQgIioiIC12CisJKiogb24gQlNEIHN5c3RlbXMuCisJKi8KKwlpZiAoZmlsZW5hbWUpCisJICBmcHJpbnRmKHN0ZGVyciwgXygiXCIlc1wiLCBsaW5lICVkOiAiKSwgZmlsZW5hbWUsIGxpbmVudW0pOworCXZmcHJpbnRmKHN0ZGVyciwgc3RyaW5nLCBhcmdzKTsKKwlpZiAocmZpbGVuYW1lICE9IE5VTEwpCisJCWZwcmludGYoc3RkZXJyLCBfKCIgKHJ1bGUgZnJvbSBcIiVzXCIsIGxpbmUgJWQpIiksCisJCQlyZmlsZW5hbWUsIHJsaW5lbnVtKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIEFUVFJJQlVURV9GT1JNQVQoKHByaW50ZiwgMSwgMikpCitlcnJvcihjb25zdCBjaGFyICpjb25zdCBzdHJpbmcsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgc3RyaW5nKTsKKwl2ZXJyb3Ioc3RyaW5nLCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJZXJyb3JzID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgQVRUUklCVVRFX0ZPUk1BVCgocHJpbnRmLCAxLCAyKSkKK3dhcm5pbmcoY29uc3QgY2hhciAqY29uc3Qgc3RyaW5nLCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWZwcmludGYoc3RkZXJyLCBfKCJ3YXJuaW5nOiAiKSk7CisJdmFfc3RhcnQoYXJncywgc3RyaW5nKTsKKwl2ZXJyb3Ioc3RyaW5nLCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJd2FybmluZ3MgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VfZmlsZShGSUxFICpzdHJlYW0sIGNoYXIgY29uc3QgKm5hbWUpCit7CisgIGNoYXIgY29uc3QgKmUgPSAoZmVycm9yKHN0cmVhbSkgPyBfKCJJL08gZXJyb3IiKQorCQkgICA6IGZjbG9zZShzdHJlYW0pICE9IDAgPyBzdHJlcnJvcihlcnJubykgOiBOVUxMKTsKKyAgaWYgKGUpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBwcm9nbmFtZSk7CisgICAgaWYgKG5hbWUpCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBuYW1lKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBlKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIH0KK30KKworc3RhdGljIF9Ob3JldHVybiB2b2lkCit1c2FnZShGSUxFICpzdHJlYW0sIGludCBzdGF0dXMpCit7CisgIGZwcmludGYoc3RyZWFtLAorCSAgXygiJXM6IHVzYWdlIGlzICVzIFsgLS12ZXJzaW9uIF0gWyAtLWhlbHAgXSBbIC12IF0gXFxcbiIKKwkgICAgIlx0WyAtbCBsb2NhbHRpbWUgXSBbIC1wIHBvc2l4cnVsZXMgXSBbIC1kIGRpcmVjdG9yeSBdIFxcXG4iCisJICAgICJcdFsgLUwgbGVhcHNlY29uZHMgXSBbIGZpbGVuYW1lIC4uLiBdXG5cbiIKKwkgICAgIlJlcG9ydCBidWdzIHRvICVzLlxuIiksCisJICBwcm9nbmFtZSwgcHJvZ25hbWUsIFJFUE9SVF9CVUdTX1RPKTsKKyAgaWYgKHN0YXR1cyA9PSBFWElUX1NVQ0NFU1MpCisgICAgY2xvc2VfZmlsZShzdHJlYW0sIE5VTEwpOworICBleGl0KHN0YXR1cyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoJcHN4cnVsZXM7CitzdGF0aWMgY29uc3QgY2hhciAqCWxjbHRpbWU7CitzdGF0aWMgY29uc3QgY2hhciAqCWRpcmVjdG9yeTsKK3N0YXRpYyBjb25zdCBjaGFyICoJbGVhcHNlYzsKK3N0YXRpYyBjb25zdCBjaGFyICoJeWl0Y29tbWFuZDsKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlyZWdpc3RlciBpbnQJaTsKKwlyZWdpc3RlciBpbnQJajsKKwlyZWdpc3RlciBpbnQJYzsKKworI2lmZGVmIFNfSVdHUlAKKwl1bWFzayh1bWFzayhTX0lXR1JQIHwgU19JV09USCkgfCAoU19JV0dSUCB8IFNfSVdPVEgpKTsKKyNlbmRpZgorI2lmIEhBVkVfR0VUVEVYVAorCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKyNpZmRlZiBUWl9ET01BSU5ESVIKKwliaW5kdGV4dGRvbWFpbihUWl9ET01BSU4sIFRaX0RPTUFJTkRJUik7CisjZW5kaWYgLyogZGVmaW5lZCBURVhURE9NQUlORElSICovCisJdGV4dGRvbWFpbihUWl9ET01BSU4pOworI2VuZGlmIC8qIEhBVkVfR0VUVEVYVCAqLworCXByb2duYW1lID0gYXJndlswXTsKKwlpZiAoVFlQRV9CSVQoemljX3QpIDwgNjQpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIHByb2duYW1lLAorCQkJXygid2lsZCBjb21waWxhdGlvbi10aW1lIHNwZWNpZmljYXRpb24gb2YgemljX3QiKSk7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCWZvciAoaSA9IDE7IGkgPCBhcmdjOyArK2kpCisJCWlmIChzdHJjbXAoYXJndltpXSwgIi0tdmVyc2lvbiIpID09IDApIHsKKwkJCXByaW50ZigiemljICVzJXNcbiIsIFBLR1ZFUlNJT04sIFRaVkVSU0lPTik7CisJCQljbG9zZV9maWxlKHN0ZG91dCwgTlVMTCk7CisJCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCQl9IGVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLS1oZWxwIikgPT0gMCkgeworCQkJdXNhZ2Uoc3Rkb3V0LCBFWElUX1NVQ0NFU1MpOworCQl9CisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJkOmw6cDpMOnZzeToiKSkgIT0gRU9GICYmIGMgIT0gLTEpCisJCXN3aXRjaCAoYykgeworCQkJZGVmYXVsdDoKKwkJCQl1c2FnZShzdGRlcnIsIEVYSVRfRkFJTFVSRSk7CisJCQljYXNlICdkJzoKKwkJCQlpZiAoZGlyZWN0b3J5ID09IE5VTEwpCisJCQkJCWRpcmVjdG9yeSA9IG9wdGFyZzsKKwkJCQllbHNlIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsCitfKCIlczogTW9yZSB0aGFuIG9uZSAtZCBvcHRpb24gc3BlY2lmaWVkXG4iKSwKKwkJCQkJCXByb2duYW1lKTsKKwkJCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICdsJzoKKwkJCQlpZiAobGNsdGltZSA9PSBOVUxMKQorCQkJCQlsY2x0aW1lID0gb3B0YXJnOworCQkJCWVsc2UgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwKK18oIiVzOiBNb3JlIHRoYW4gb25lIC1sIG9wdGlvbiBzcGVjaWZpZWRcbiIpLAorCQkJCQkJcHJvZ25hbWUpOworCQkJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgJ3AnOgorCQkJCWlmIChwc3hydWxlcyA9PSBOVUxMKQorCQkJCQlwc3hydWxlcyA9IG9wdGFyZzsKKwkJCQllbHNlIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsCitfKCIlczogTW9yZSB0aGFuIG9uZSAtcCBvcHRpb24gc3BlY2lmaWVkXG4iKSwKKwkJCQkJCXByb2duYW1lKTsKKwkJCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICd5JzoKKwkJCQlpZiAoeWl0Y29tbWFuZCA9PSBOVUxMKQorCQkJCQl5aXRjb21tYW5kID0gb3B0YXJnOworCQkJCWVsc2UgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwKK18oIiVzOiBNb3JlIHRoYW4gb25lIC15IG9wdGlvbiBzcGVjaWZpZWRcbiIpLAorCQkJCQkJcHJvZ25hbWUpOworCQkJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJCWlmIChsZWFwc2VjID09IE5VTEwpCisJCQkJCWxlYXBzZWMgPSBvcHRhcmc7CisJCQkJZWxzZSB7CisJCQkJCWZwcmludGYoc3RkZXJyLAorXygiJXM6IE1vcmUgdGhhbiBvbmUgLUwgb3B0aW9uIHNwZWNpZmllZFxuIiksCisJCQkJCQlwcm9nbmFtZSk7CisJCQkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAndic6CisJCQkJbm9pc2UgPSB0cnVlOworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJCQkJd2FybmluZyhfKCItcyBpZ25vcmVkIikpOworCQkJCWJyZWFrOworCQl9CisJaWYgKG9wdGluZCA9PSBhcmdjIC0gMSAmJiBzdHJjbXAoYXJndltvcHRpbmRdLCAiPSIpID09IDApCisJCXVzYWdlKHN0ZGVyciwgRVhJVF9GQUlMVVJFKTsJLyogdXNhZ2UgbWVzc2FnZSBieSByZXF1ZXN0ICovCisJaWYgKGRpcmVjdG9yeSA9PSBOVUxMKQorCQlkaXJlY3RvcnkgPSBUWkRJUjsKKwlpZiAoeWl0Y29tbWFuZCA9PSBOVUxMKQorCQl5aXRjb21tYW5kID0gInllYXJpc3R5cGUiOworCisJaWYgKG9wdGluZCA8IGFyZ2MgJiYgbGVhcHNlYyAhPSBOVUxMKSB7CisJCWluZmlsZShsZWFwc2VjKTsKKwkJYWRqbGVhcCgpOworCX0KKworCWZvciAoaSA9IG9wdGluZDsgaSA8IGFyZ2M7ICsraSkKKwkJaW5maWxlKGFyZ3ZbaV0pOworCWlmIChlcnJvcnMpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJYXNzb2NpYXRlKCk7CisJZm9yIChpID0gMDsgaSA8IG56b25lczsgaSA9IGopIHsKKwkJLyoKKwkJKiogRmluZCB0aGUgbmV4dCBub24tY29udGludWF0aW9uIHpvbmUgZW50cnkuCisJCSovCisJCWZvciAoaiA9IGkgKyAxOyBqIDwgbnpvbmVzICYmIHpvbmVzW2pdLnpfbmFtZSA9PSBOVUxMOyArK2opCisJCQljb250aW51ZTsKKwkJb3V0em9uZSgmem9uZXNbaV0sIGogLSBpKTsKKwl9CisJLyoKKwkqKiBNYWtlIGxpbmtzLgorCSovCisJZm9yIChpID0gMDsgaSA8IG5saW5rczsgKytpKSB7CisJCWVhdChsaW5rc1tpXS5sX2ZpbGVuYW1lLCBsaW5rc1tpXS5sX2xpbmVudW0pOworCQlkb2xpbmsobGlua3NbaV0ubF9mcm9tLCBsaW5rc1tpXS5sX3RvKTsKKwkJaWYgKG5vaXNlKQorCQkJZm9yIChqID0gMDsgaiA8IG5saW5rczsgKytqKQorCQkJCWlmIChzdHJjbXAobGlua3NbaV0ubF90bywKKwkJCQkJbGlua3Nbal0ubF9mcm9tKSA9PSAwKQorCQkJCQkJd2FybmluZyhfKCJsaW5rIHRvIGxpbmsiKSk7CisJfQorCWlmIChsY2x0aW1lICE9IE5VTEwpIHsKKwkJZWF0KF8oImNvbW1hbmQgbGluZSIpLCAxKTsKKwkJZG9saW5rKGxjbHRpbWUsIFRaREVGQVVMVCk7CisJfQorCWlmIChwc3hydWxlcyAhPSBOVUxMKSB7CisJCWVhdChfKCJjb21tYW5kIGxpbmUiKSwgMSk7CisJCWRvbGluayhwc3hydWxlcywgVFpERUZSVUxFUyk7CisJfQorCWlmICh3YXJuaW5ncyAmJiAoZmVycm9yKHN0ZGVycikgfHwgZmNsb3NlKHN0ZGVycikgIT0gMCkpCisJICByZXR1cm4gRVhJVF9GQUlMVVJFOworCXJldHVybiBlcnJvcnMgPyBFWElUX0ZBSUxVUkUgOiBFWElUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBib29sCitjb21wb25lbnRjaGVjayhjaGFyIGNvbnN0ICpuYW1lLCBjaGFyIGNvbnN0ICpjb21wb25lbnQsCisJICAgICAgIGNoYXIgY29uc3QgKmNvbXBvbmVudF9lbmQpCit7CisJZW51bSB7IGNvbXBvbmVudF9sZW5fbWF4ID0gMTQgfTsKKwlzaXplX3QgY29tcG9uZW50X2xlbiA9IGNvbXBvbmVudF9lbmQgLSBjb21wb25lbnQ7CisJaWYgKGNvbXBvbmVudF9sZW4gPT0gMCkgeworCSAgaWYgKCEqbmFtZSkKKwkgICAgZXJyb3IgKF8oImVtcHR5IGZpbGUgbmFtZSIpKTsKKwkgIGVsc2UKKwkgICAgZXJyb3IgKF8oY29tcG9uZW50ID09IG5hbWUKKwkJICAgICA/ICJmaWxlIG5hbWUgJyVzJyBiZWdpbnMgd2l0aCAnLyciCisJCSAgICAgOiAqY29tcG9uZW50X2VuZAorCQkgICAgID8gImZpbGUgbmFtZSAnJXMnIGNvbnRhaW5zICcvLyciCisJCSAgICAgOiAiZmlsZSBuYW1lICclcycgZW5kcyB3aXRoICcvJyIpLAorCQkgICBuYW1lKTsKKwkgIHJldHVybiBmYWxzZTsKKwl9CisJaWYgKDAgPCBjb21wb25lbnRfbGVuICYmIGNvbXBvbmVudF9sZW4gPD0gMgorCSAgICAmJiBjb21wb25lbnRbMF0gPT0gJy4nICYmIGNvbXBvbmVudF9lbmRbLTFdID09ICcuJykgeworCSAgZXJyb3IoXygiZmlsZSBuYW1lICclcycgY29udGFpbnMgJyUuKnMnIGNvbXBvbmVudCIpLAorCQluYW1lLCAoaW50KSBjb21wb25lbnRfbGVuLCBjb21wb25lbnQpOworCSAgcmV0dXJuIGZhbHNlOworCX0KKwlpZiAobm9pc2UpIHsKKwkgIGlmICgwIDwgY29tcG9uZW50X2xlbiAmJiBjb21wb25lbnRbMF0gPT0gJy0nKQorCSAgICB3YXJuaW5nKF8oImZpbGUgbmFtZSAnJXMnIGNvbXBvbmVudCBjb250YWlucyBsZWFkaW5nICctJyIpLAorCQkgICAgbmFtZSk7CisJICBpZiAoY29tcG9uZW50X2xlbl9tYXggPCBjb21wb25lbnRfbGVuKQorCSAgICB3YXJuaW5nKF8oImZpbGUgbmFtZSAnJXMnIGNvbnRhaW5zIG92ZXJsZW5ndGggY29tcG9uZW50IgorCQkgICAgICAiICclLipzLi4uJyIpLAorCQkgICAgbmFtZSwgY29tcG9uZW50X2xlbl9tYXgsIGNvbXBvbmVudCk7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAorbmFtZWNoZWNrKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmVnaXN0ZXIgY2hhciBjb25zdCAqY3A7CisKKwkvKiBCZW5pZ24gY2hhcmFjdGVycyBpbiBhIHBvcnRhYmxlIGZpbGUgbmFtZS4gICovCisJc3RhdGljIGNoYXIgY29uc3QgYmVuaWduW10gPQorCSAgIi0vXyIKKwkgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKwkgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7CisKKwkvKiBOb24tY29udHJvbCBjaGFycyBpbiB0aGUgUE9TSVggcG9ydGFibGUgY2hhcmFjdGVyIHNldCwKKwkgICBleGNsdWRpbmcgdGhlIGJlbmlnbiBjaGFyYWN0ZXJzLiAgKi8KKwlzdGF0aWMgY2hhciBjb25zdCBwcmludGFibGVfYW5kX25vdF9iZW5pZ25bXSA9CisJICAiICFcIiMkJSYnKCkqKywuMDEyMzQ1Njc4OTo7PD0+P0BbXFxdXmB7fH1+IjsKKworCXJlZ2lzdGVyIGNoYXIgY29uc3QgKmNvbXBvbmVudCA9IG5hbWU7CisJZm9yIChjcCA9IG5hbWU7ICpjcDsgY3ArKykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSAqY3A7CisJCWlmIChub2lzZSAmJiAhc3RyY2hyKGJlbmlnbiwgYykpIHsKKwkJCXdhcm5pbmcoKHN0cmNocihwcmludGFibGVfYW5kX25vdF9iZW5pZ24sIGMpCisJCQkJID8gXygiZmlsZSBuYW1lICclcycgY29udGFpbnMgYnl0ZSAnJWMnIikKKwkJCQkgOiBfKCJmaWxlIG5hbWUgJyVzJyBjb250YWlucyBieXRlICdcXCVvJyIpKSwKKwkJCQluYW1lLCBjKTsKKwkJfQorCQlpZiAoYyA9PSAnLycpIHsKKwkJCWlmICghY29tcG9uZW50Y2hlY2sobmFtZSwgY29tcG9uZW50LCBjcCkpCisJCQkgIHJldHVybiBmYWxzZTsKKwkJCWNvbXBvbmVudCA9IGNwICsgMTsKKwkJfQorCX0KKwlyZXR1cm4gY29tcG9uZW50Y2hlY2sobmFtZSwgY29tcG9uZW50LCBjcCk7Cit9CisKK3N0YXRpYyBjaGFyICoKK3JlbG5hbWUoY2hhciBjb25zdCAqZGlyLCBjaGFyIGNvbnN0ICpiYXNlKQoreworICBpZiAoKmJhc2UgPT0gJy8nKQorICAgIHJldHVybiBlY3B5YWxsb2MoYmFzZSk7CisgIGVsc2UgeworICAgIHNpemVfdCBkaXJfbGVuID0gc3RybGVuKGRpcik7CisgICAgYm9vbCBuZWVkc19zbGFzaCA9IGRpcl9sZW4gJiYgZGlyW2Rpcl9sZW4gLSAxXSAhPSAnLyc7CisgICAgY2hhciAqcmVzdWx0ID0gZW1hbGxvYyhkaXJfbGVuICsgbmVlZHNfc2xhc2ggKyBzdHJsZW4oYmFzZSkgKyAxKTsKKyAgICByZXN1bHRbZGlyX2xlbl0gPSAnLyc7CisgICAgc3RyY3B5KHJlc3VsdCArIGRpcl9sZW4gKyBuZWVkc19zbGFzaCwgYmFzZSk7CisgICAgcmV0dXJuIG1lbWNweShyZXN1bHQsIGRpciwgZGlyX2xlbik7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2RvbGluayhjaGFyIGNvbnN0ICpmcm9tZmllbGQsIGNoYXIgY29uc3QgKnRvZmllbGQpCit7CisJcmVnaXN0ZXIgY2hhciAqCWZyb21uYW1lOworCXJlZ2lzdGVyIGNoYXIgKgl0b25hbWU7CisJcmVnaXN0ZXIgaW50IGZyb21pc2RpcjsKKworCWZyb21uYW1lID0gcmVsbmFtZShkaXJlY3RvcnksIGZyb21maWVsZCk7CisJdG9uYW1lID0gcmVsbmFtZShkaXJlY3RvcnksIHRvZmllbGQpOworCS8qCisJKiogV2UgZ2V0IHRvIGJlIGNhcmVmdWwgaGVyZSBzaW5jZQorCSoqIHRoZXJlJ3MgYSBmYWlyIGNoYW5jZSBvZiByb290IHJ1bm5pbmcgdXMuCisJKi8KKwlmcm9taXNkaXIgPSBpdHNkaXIoZnJvbW5hbWUpOworCWlmIChmcm9taXNkaXIpIHsKKwkJY2hhciBjb25zdCAqZSA9IHN0cmVycm9yKGZyb21pc2RpciA8IDAgPyBlcnJubyA6IEVQRVJNKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBsaW5rIGZyb20gJXMgZmFpbGVkOiAlcyIpLAorCQkJcHJvZ25hbWUsIGZyb21uYW1lLCBlKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoaXRzZGlyKHRvbmFtZSkgPD0gMCkKKwkJcmVtb3ZlKHRvbmFtZSk7CisJaWYgKGxpbmsoZnJvbW5hbWUsIHRvbmFtZSkgIT0gMCkgeworCQlpbnQJcmVzdWx0OworCisJCWlmICghIG1rZGlycyh0b25hbWUpKQorCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCisJCXJlc3VsdCA9IGxpbmsoZnJvbW5hbWUsIHRvbmFtZSk7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJCWNvbnN0IGNoYXIgKnMgPSBmcm9tZmllbGQ7CisJCQkJY29uc3QgY2hhciAqdDsKKwkJCQljaGFyICpwOworCQkJCXNpemVfdCBkb3Rkb3RzID0gMDsKKwkJCQlyZWdpc3RlciBjaGFyICogc3ltbGlua2NvbnRlbnRzID0gTlVMTDsKKworCQkJCWRvCisJCQkJCSB0ID0gczsKKwkJCQl3aGlsZSAoKHMgPSBzdHJjaHIocywgJy8nKSkKKwkJCQkgICAgICAgJiYgISBzdHJuY21wIChmcm9tZmllbGQsIHRvZmllbGQsCisJCQkJCQkgICAgICsrcyAtIGZyb21maWVsZCkpOworCisJCQkJZm9yIChzID0gdG9maWVsZCArICh0IC0gZnJvbWZpZWxkKTsgKnM7IHMrKykKKwkJCQkgIGRvdGRvdHMgKz0gKnMgPT0gJy8nOworCQkJCXN5bWxpbmtjb250ZW50cworCQkJCSAgPSBlbWFsbG9jKDMgKiBkb3Rkb3RzICsgc3RybGVuKHQpICsgMSk7CisJCQkJZm9yIChwID0gc3ltbGlua2NvbnRlbnRzOyBkb3Rkb3RzLS0gIT0gMDsgcCArPSAzKQorCQkJCSAgbWVtY3B5KHAsICIuLi8iLCAzKTsKKwkJCQlzdHJjcHkocCwgdCk7CisJCQkJcmVzdWx0ID0gc3ltbGluayhzeW1saW5rY29udGVudHMsIHRvbmFtZSk7CisJCQkJaWYgKHJlc3VsdCA9PSAwKQord2FybmluZyhfKCJoYXJkIGxpbmsgZmFpbGVkLCBzeW1ib2xpYyBsaW5rIHVzZWQiKSk7CisJCQkJZnJlZShzeW1saW5rY29udGVudHMpOworCQl9CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJRklMRSAqZnAsICp0cDsKKwkJCWludCBjOworCQkJZnAgPSBmb3Blbihmcm9tbmFtZSwgInJiIik7CisJCQlpZiAoIWZwKSB7CisJCQkJY29uc3QgY2hhciAqZSA9IHN0cmVycm9yKGVycm5vKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJICAgICAgIF8oIiVzOiBDYW4ndCByZWFkICVzOiAlc1xuIiksCisJCQkJCSAgICAgICBwcm9nbmFtZSwgZnJvbW5hbWUsIGUpOworCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCX0KKwkJCXRwID0gZm9wZW4odG9uYW1lLCAid2IiKTsKKwkJCWlmICghdHApIHsKKwkJCQljb25zdCBjaGFyICplID0gc3RyZXJyb3IoZXJybm8pOworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkgICAgICAgXygiJXM6IENhbid0IGNyZWF0ZSAlczogJXNcbiIpLAorCQkJCQkgICAgICAgcHJvZ25hbWUsIHRvbmFtZSwgZSk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJd2hpbGUgKChjID0gZ2V0YyhmcCkpICE9IEVPRikKKwkJCQlwdXRjKGMsIHRwKTsKKwkJCWNsb3NlX2ZpbGUoZnAsIGZyb21uYW1lKTsKKwkJCWNsb3NlX2ZpbGUodHAsIHRvbmFtZSk7CisJCQl3YXJuaW5nKF8oImxpbmsgZmFpbGVkLCBjb3B5IHVzZWQiKSk7CisJCX0KKwl9CisJZnJlZShmcm9tbmFtZSk7CisJZnJlZSh0b25hbWUpOworfQorCisjZGVmaW5lIFRJTUVfVF9CSVRTX0lOX0ZJTEUJNjQKKworc3RhdGljIHppY190IGNvbnN0IG1pbl90aW1lID0gTUlOVkFMICh6aWNfdCwgVElNRV9UX0JJVFNfSU5fRklMRSk7CitzdGF0aWMgemljX3QgY29uc3QgbWF4X3RpbWUgPSBNQVhWQUwgKHppY190LCBUSU1FX1RfQklUU19JTl9GSUxFKTsKKworLyogRXN0aW1hdGVkIHRpbWUgb2YgdGhlIEJpZyBCYW5nLCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBQT1NJWCBlcG9jaC4KKyAgIHJvdW5kZWQgZG93bndhcmQgdG8gdGhlIG5lZ2F0aW9uIG9mIGEgcG93ZXIgb2YgdHdvIHRoYXQgaXMKKyAgIGNvbWZvcnRhYmx5IG91dHNpZGUgdGhlIGVycm9yIGJvdW5kcy4KKworICAgemljIGRvZXMgbm90IG91dHB1dCB0aW1lIHN0YW1wcyBiZWZvcmUgdGhpcywgcGFydGx5IGJlY2F1c2UgdGhleQorICAgYXJlIHBoeXNpY2FsbHkgc3VzcGVjdCwgYW5kIHBhcnRseSBiZWNhdXNlIEdOT01FIG1pc2hhbmRsZXMgdGhlbTsgc2VlCisgICBHTk9NRSBidWcgNzMwMzMyIDxodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwMzMyPi4KKworICAgRm9yIHRoZSB0aW1lIG9mIHRoZSBCaWcgQmFuZywgc2VlOgorCisgICBBZGUgUEFSLCBBZ2hhbmltIE4sIEFybWl0YWdlLUNhcGxhbiBDIGV0IGFsLiAgUGxhbmNrIDIwMTMgcmVzdWx0cy4KKyAgIEkuIE92ZXJ2aWV3IG9mIHByb2R1Y3RzIGFuZCBzY2llbnRpZmljIHJlc3VsdHMuCisgICBhclhpdjoxMzAzLjUwNjIgMjAxMy0wMy0yMCAyMDoxMDowMSBVVEMKKyAgIDxodHRwOi8vYXJ4aXYub3JnL3BkZi8xMzAzLjUwNjJ2MT4gW1BERl0KKworICAgUGFnZSAzNiwgVGFibGUgOSwgcm93IEFnZS9HeXIsIGNvbHVtbiBQbGFuY2srV1AraGlnaEwrQkFPIDY4JSBsaW1pdHMKKyAgIGdpdmVzIHRoZSB2YWx1ZSAxMy43OTggcGx1cy1vci1taW51cyAwLjAzNyBiaWxsaW9uIHllYXJzLgorICAgTXVsdGlwbHlpbmcgdGhpcyBieSAxMDAwMDAwMDAwIGFuZCB0aGVuIGJ5IDMxNTU3NjAwICh0aGUgbnVtYmVyIG9mCisgICBzZWNvbmRzIGluIGFuIGFzdHJvbm9taWNhbCB5ZWFyKSBnaXZlcyBhIHZhbHVlIHRoYXQgaXMgY29tZm9ydGFibHkKKyAgIGxlc3MgdGhhbiAyKio1OSwgc28gQklHX0JBTkcgaXMgLSAyKio1OS4KKworICAgQklHX0JBTkcgaXMgYXBwcm94aW1hdGUsIGFuZCBtYXkgY2hhbmdlIGluIGZ1dHVyZSB2ZXJzaW9ucy4KKyAgIFBsZWFzZSBkbyBub3QgcmVseSBvbiBpdHMgZXhhY3QgdmFsdWUuICAqLworCisjaWZuZGVmIEJJR19CQU5HCisjZGVmaW5lIEJJR19CQU5HICgtICgxTEwgPDwgNTkpKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCB6aWNfdCBiaWdfYmFuZ190aW1lID0gQklHX0JBTkc7CisKKy8qIFJldHVybiAxIGlmIE5BTUUgaXMgYSBkaXJlY3RvcnksIDAgaWYgaXQncyBzb21ldGhpbmcgZWxzZSwgLTEgaWYgdHJvdWJsZS4gICovCitzdGF0aWMgaW50CitpdHNkaXIoY2hhciBjb25zdCAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgcmVzID0gc3RhdChuYW1lLCAmc3QpOworCWlmIChyZXMgIT0gMCkKKwkJcmV0dXJuIHJlczsKKyNpZmRlZiBTX0lTRElSCisJcmV0dXJuIFNfSVNESVIoc3Quc3RfbW9kZSkgIT0gMDsKKyNlbHNlCisJeworCQljaGFyICpuYW1lc2xhc2hkb3QgPSByZWxuYW1lKG5hbWUsICIuIik7CisJCXJlcyA9IHN0YXQobmFtZXNsYXNoZG90LCAmc3QpOworCQlmcmVlKG5hbWVzbGFzaGRvdCk7CisJCXJldHVybiByZXMgPT0gMDsKKwl9CisjZW5kaWYKK30KKworLyoKKyoqIEFzc29jaWF0ZSBzZXRzIG9mIHJ1bGVzIHdpdGggem9uZXMuCisqLworCisvKgorKiogU29ydCBieSBydWxlIG5hbWUuCisqLworCitzdGF0aWMgaW50CityY29tcChjb25zdCB2b2lkICpjcDEsIGNvbnN0IHZvaWQgKmNwMikKK3sKKwlyZXR1cm4gc3RyY21wKCgoY29uc3Qgc3RydWN0IHJ1bGUgKikgY3AxKS0+cl9uYW1lLAorCQkoKGNvbnN0IHN0cnVjdCBydWxlICopIGNwMiktPnJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCithc3NvY2lhdGUodm9pZCkKK3sKKwlyZWdpc3RlciBzdHJ1Y3Qgem9uZSAqCXpwOworCXJlZ2lzdGVyIHN0cnVjdCBydWxlICoJcnA7CisJcmVnaXN0ZXIgaW50CQliYXNlLCBvdXQ7CisJcmVnaXN0ZXIgaW50CQlpLCBqOworCisJaWYgKG5ydWxlcyAhPSAwKSB7CisJCXFzb3J0KHJ1bGVzLCBucnVsZXMsIHNpemVvZiAqcnVsZXMsIHJjb21wKTsKKwkJZm9yIChpID0gMDsgaSA8IG5ydWxlcyAtIDE7ICsraSkgeworCQkJaWYgKHN0cmNtcChydWxlc1tpXS5yX25hbWUsCisJCQkJcnVsZXNbaSArIDFdLnJfbmFtZSkgIT0gMCkKKwkJCQkJY29udGludWU7CisJCQlpZiAoc3RyY21wKHJ1bGVzW2ldLnJfZmlsZW5hbWUsCisJCQkJcnVsZXNbaSArIDFdLnJfZmlsZW5hbWUpID09IDApCisJCQkJCWNvbnRpbnVlOworCQkJZWF0KHJ1bGVzW2ldLnJfZmlsZW5hbWUsIHJ1bGVzW2ldLnJfbGluZW51bSk7CisJCQl3YXJuaW5nKF8oInNhbWUgcnVsZSBuYW1lIGluIG11bHRpcGxlIGZpbGVzIikpOworCQkJZWF0KHJ1bGVzW2kgKyAxXS5yX2ZpbGVuYW1lLCBydWxlc1tpICsgMV0ucl9saW5lbnVtKTsKKwkJCXdhcm5pbmcoXygic2FtZSBydWxlIG5hbWUgaW4gbXVsdGlwbGUgZmlsZXMiKSk7CisJCQlmb3IgKGogPSBpICsgMjsgaiA8IG5ydWxlczsgKytqKSB7CisJCQkJaWYgKHN0cmNtcChydWxlc1tpXS5yX25hbWUsCisJCQkJCXJ1bGVzW2pdLnJfbmFtZSkgIT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCWlmIChzdHJjbXAocnVsZXNbaV0ucl9maWxlbmFtZSwKKwkJCQkJcnVsZXNbal0ucl9maWxlbmFtZSkgPT0gMCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCWlmIChzdHJjbXAocnVsZXNbaSArIDFdLnJfZmlsZW5hbWUsCisJCQkJCXJ1bGVzW2pdLnJfZmlsZW5hbWUpID09IDApCisJCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWkgPSBqIC0gMTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnpvbmVzOyArK2kpIHsKKwkJenAgPSAmem9uZXNbaV07CisJCXpwLT56X3J1bGVzID0gTlVMTDsKKwkJenAtPnpfbnJ1bGVzID0gMDsKKwl9CisJZm9yIChiYXNlID0gMDsgYmFzZSA8IG5ydWxlczsgYmFzZSA9IG91dCkgeworCQlycCA9ICZydWxlc1tiYXNlXTsKKwkJZm9yIChvdXQgPSBiYXNlICsgMTsgb3V0IDwgbnJ1bGVzOyArK291dCkKKwkJCWlmIChzdHJjbXAocnAtPnJfbmFtZSwgcnVsZXNbb3V0XS5yX25hbWUpICE9IDApCisJCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPCBuem9uZXM7ICsraSkgeworCQkJenAgPSAmem9uZXNbaV07CisJCQlpZiAoc3RyY21wKHpwLT56X3J1bGUsIHJwLT5yX25hbWUpICE9IDApCisJCQkJY29udGludWU7CisJCQl6cC0+el9ydWxlcyA9IHJwOworCQkJenAtPnpfbnJ1bGVzID0gb3V0IC0gYmFzZTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnpvbmVzOyArK2kpIHsKKwkJenAgPSAmem9uZXNbaV07CisJCWlmICh6cC0+el9ucnVsZXMgPT0gMCkgeworCQkJLyoKKwkJCSoqIE1heWJlIHdlIGhhdmUgYSBsb2NhbCBzdGFuZGFyZCB0aW1lIG9mZnNldC4KKwkJCSovCisJCQllYXQoenAtPnpfZmlsZW5hbWUsIHpwLT56X2xpbmVudW0pOworCQkJenAtPnpfc3Rkb2ZmID0gZ2V0aG1zKHpwLT56X3J1bGUsIF8oInVucnVseSB6b25lIiksCisJCQkJdHJ1ZSk7CisJCQkvKgorCQkJKiogTm90ZSwgdGhvdWdoLCB0aGF0IGlmIHRoZXJlJ3Mgbm8gcnVsZSwKKwkJCSoqIGEgJyVzJyBpbiB0aGUgZm9ybWF0IGlzIGEgYmFkIHRoaW5nLgorCQkJKi8KKwkJCWlmICh6cC0+el9mb3JtYXRfc3BlY2lmaWVyID09ICdzJykKKwkJCQllcnJvcigiJXMiLCBfKCIlcyBpbiBydWxlbGVzcyB6b25lIikpOworCQl9CisJfQorCWlmIChlcnJvcnMpCisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIHZvaWQKK2luZmlsZShjb25zdCBjaGFyICpuYW1lKQoreworCXJlZ2lzdGVyIEZJTEUgKgkJCWZwOworCXJlZ2lzdGVyIGNoYXIgKioJCWZpZWxkczsKKwlyZWdpc3RlciBjaGFyICoJCQljcDsKKwlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgbG9va3VwICoJbHA7CisJcmVnaXN0ZXIgaW50CQkJbmZpZWxkczsKKwlyZWdpc3RlciBib29sCQkJd2FudGNvbnQ7CisJcmVnaXN0ZXIgaW50CQkJbnVtOworCWNoYXIJCQkJYnVmW0JVRlNJWl07CisKKwlpZiAoc3RyY21wKG5hbWUsICItIikgPT0gMCkgeworCQluYW1lID0gXygic3RhbmRhcmQgaW5wdXQiKTsKKwkJZnAgPSBzdGRpbjsKKwl9IGVsc2UgaWYgKChmcCA9IGZvcGVuKG5hbWUsICJyIikpID09IE5VTEwpIHsKKwkJY29uc3QgY2hhciAqZSA9IHN0cmVycm9yKGVycm5vKTsKKworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXM6IENhbid0IG9wZW4gJXM6ICVzXG4iKSwKKwkJCXByb2duYW1lLCBuYW1lLCBlKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwl3YW50Y29udCA9IGZhbHNlOworCWZvciAobnVtID0gMTsgOyArK251bSkgeworCQllYXQobmFtZSwgbnVtKTsKKwkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mIGJ1ZiwgZnApICE9IGJ1ZikKKwkJCWJyZWFrOworCQljcCA9IHN0cmNocihidWYsICdcbicpOworCQlpZiAoY3AgPT0gTlVMTCkgeworCQkJZXJyb3IoXygibGluZSB0b28gbG9uZyIpKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCQkqY3AgPSAnXDAnOworCQlmaWVsZHMgPSBnZXRmaWVsZHMoYnVmKTsKKwkJbmZpZWxkcyA9IDA7CisJCXdoaWxlIChmaWVsZHNbbmZpZWxkc10gIT0gTlVMTCkgeworCQkJc3RhdGljIGNoYXIJbmFkYTsKKworCQkJaWYgKHN0cmNtcChmaWVsZHNbbmZpZWxkc10sICItIikgPT0gMCkKKwkJCQlmaWVsZHNbbmZpZWxkc10gPSAmbmFkYTsKKwkJCSsrbmZpZWxkczsKKwkJfQorCQlpZiAobmZpZWxkcyA9PSAwKSB7CisJCQkvKiBub3RoaW5nIHRvIGRvICovCisJCX0gZWxzZSBpZiAod2FudGNvbnQpIHsKKwkJCXdhbnRjb250ID0gaW56Y29udChmaWVsZHMsIG5maWVsZHMpOworCQl9IGVsc2UgeworCQkJbHAgPSBieXdvcmQoZmllbGRzWzBdLCBsaW5lX2NvZGVzKTsKKwkJCWlmIChscCA9PSBOVUxMKQorCQkJCWVycm9yKF8oImlucHV0IGxpbmUgb2YgdW5rbm93biB0eXBlIikpOworCQkJZWxzZSBzd2l0Y2ggKChpbnQpIChscC0+bF92YWx1ZSkpIHsKKwkJCQljYXNlIExDX1JVTEU6CisJCQkJCWlucnVsZShmaWVsZHMsIG5maWVsZHMpOworCQkJCQl3YW50Y29udCA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQljYXNlIExDX1pPTkU6CisJCQkJCXdhbnRjb250ID0gaW56b25lKGZpZWxkcywgbmZpZWxkcyk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgTENfTElOSzoKKwkJCQkJaW5saW5rKGZpZWxkcywgbmZpZWxkcyk7CisJCQkJCXdhbnRjb250ID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgTENfTEVBUDoKKwkJCQkJaWYgKG5hbWUgIT0gbGVhcHNlYykKKwkJCQkJICB3YXJuaW5nKF8oIiVzOiBMZWFwIGxpbmUgaW4gbm9uIGxlYXAiCisJCQkJCQkgICAgIiBzZWNvbmRzIGZpbGUgJXMiKSwKKwkJCQkJCSAgcHJvZ25hbWUsIG5hbWUpOworCQkJCQllbHNlCWlubGVhcChmaWVsZHMsIG5maWVsZHMpOworCQkJCQl3YW50Y29udCA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgkvKiAiY2Fubm90IGhhcHBlbiIgKi8KKwkJCQkJZnByaW50ZihzdGRlcnIsCitfKCIlczogcGFuaWM6IEludmFsaWQgbF92YWx1ZSAlZFxuIiksCisJCQkJCQlwcm9nbmFtZSwgbHAtPmxfdmFsdWUpOworCQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCX0KKwkJZnJlZShmaWVsZHMpOworCX0KKwljbG9zZV9maWxlKGZwLCBmaWxlbmFtZSk7CisJaWYgKHdhbnRjb250KQorCQllcnJvcihfKCJleHBlY3RlZCBjb250aW51YXRpb24gbGluZSBub3QgZm91bmQiKSk7Cit9CisKKy8qCisqKiBDb252ZXJ0IGEgc3RyaW5nIG9mIG9uZSBvZiB0aGUgZm9ybXMKKyoqCWgJLWgJaGg6bW0JLWhoOm1tCWhoOm1tOnNzCS1oaDptbTpzcworKiogaW50byBhIG51bWJlciBvZiBzZWNvbmRzLgorKiogQSBudWxsIHN0cmluZyBtYXBzIHRvIHplcm8uCisqKiBDYWxsIGVycm9yIHdpdGggZXJyc3RyaW5nIGFuZCByZXR1cm4gemVybyBvbiBlcnJvcnMuCisqLworCitzdGF0aWMgemljX3QKK2dldGhtcyhjaGFyIGNvbnN0ICpzdHJpbmcsIGNoYXIgY29uc3QgKmVycnN0cmluZywgYm9vbCBzaWduYWJsZSkKK3sKKwl6aWNfdAloaDsKKwlpbnQJbW0sIHNzLCBzaWduOworCWNoYXIgeHM7CisKKwlpZiAoc3RyaW5nID09IE5VTEwgfHwgKnN0cmluZyA9PSAnXDAnKQorCQlyZXR1cm4gMDsKKwlpZiAoIXNpZ25hYmxlKQorCQlzaWduID0gMTsKKwllbHNlIGlmICgqc3RyaW5nID09ICctJykgeworCQlzaWduID0gLTE7CisJCSsrc3RyaW5nOworCX0gZWxzZQlzaWduID0gMTsKKwlpZiAoc3NjYW5mKHN0cmluZywgIiUiU0NOZFpJQyIlYyIsICZoaCwgJnhzKSA9PSAxKQorCQltbSA9IHNzID0gMDsKKwllbHNlIGlmIChzc2NhbmYoc3RyaW5nLCAiJSJTQ05kWklDIjolZCVjIiwgJmhoLCAmbW0sICZ4cykgPT0gMikKKwkJc3MgPSAwOworCWVsc2UgaWYgKHNzY2FuZihzdHJpbmcsICIlIlNDTmRaSUMiOiVkOiVkJWMiLCAmaGgsICZtbSwgJnNzLCAmeHMpCisJCSAhPSAzKSB7CisJCQllcnJvcigiJXMiLCBlcnJzdHJpbmcpOworCQkJcmV0dXJuIDA7CisJfQorCWlmIChoaCA8IDAgfHwKKwkJbW0gPCAwIHx8IG1tID49IE1JTlNQRVJIT1VSIHx8CisJCXNzIDwgMCB8fCBzcyA+IFNFQ1NQRVJNSU4pIHsKKwkJCWVycm9yKCIlcyIsIGVycnN0cmluZyk7CisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKFpJQ19NQVggLyBTRUNTUEVSSE9VUiA8IGhoKSB7CisJCWVycm9yKF8oInRpbWUgb3ZlcmZsb3ciKSk7CisJCXJldHVybiAwOworCX0KKwlpZiAobm9pc2UgJiYgKGhoID4gSE9VUlNQRVJEQVkgfHwKKwkJKGhoID09IEhPVVJTUEVSREFZICYmIChtbSAhPSAwIHx8IHNzICE9IDApKSkpCit3YXJuaW5nKF8oInZhbHVlcyBvdmVyIDI0IGhvdXJzIG5vdCBoYW5kbGVkIGJ5IHByZS0yMDA3IHZlcnNpb25zIG9mIHppYyIpKTsKKwlyZXR1cm4gb2FkZChzaWduICogaGggKiBTRUNTUEVSSE9VUiwKKwkJICAgIHNpZ24gKiAobW0gKiBTRUNTUEVSTUlOICsgc3MpKTsKK30KKworc3RhdGljIHZvaWQKK2lucnVsZShjaGFyICoqZmllbGRzLCBpbnQgbmZpZWxkcykKK3sKKwlzdGF0aWMgc3RydWN0IHJ1bGUJcjsKKworCWlmIChuZmllbGRzICE9IFJVTEVfRklFTERTKSB7CisJCWVycm9yKF8oIndyb25nIG51bWJlciBvZiBmaWVsZHMgb24gUnVsZSBsaW5lIikpOworCQlyZXR1cm47CisJfQorCWlmICgqZmllbGRzW1JGX05BTUVdID09ICdcMCcpIHsKKwkJZXJyb3IoXygibmFtZWxlc3MgcnVsZSIpKTsKKwkJcmV0dXJuOworCX0KKwlyLnJfZmlsZW5hbWUgPSBmaWxlbmFtZTsKKwlyLnJfbGluZW51bSA9IGxpbmVudW07CisJci5yX3N0ZG9mZiA9IGdldGhtcyhmaWVsZHNbUkZfU1RET0ZGXSwgXygiaW52YWxpZCBzYXZlZCB0aW1lIiksIHRydWUpOworCXJ1bGVzdWIoJnIsIGZpZWxkc1tSRl9MT1lFQVJdLCBmaWVsZHNbUkZfSElZRUFSXSwgZmllbGRzW1JGX0NPTU1BTkRdLAorCQlmaWVsZHNbUkZfTU9OVEhdLCBmaWVsZHNbUkZfREFZXSwgZmllbGRzW1JGX1RPRF0pOworCXIucl9uYW1lID0gZWNweWFsbG9jKGZpZWxkc1tSRl9OQU1FXSk7CisJci5yX2FiYnJ2YXIgPSBlY3B5YWxsb2MoZmllbGRzW1JGX0FCQlJWQVJdKTsKKwlpZiAobWF4X2FiYnJ2YXJfbGVuIDwgc3RybGVuKHIucl9hYmJydmFyKSkKKwkJbWF4X2FiYnJ2YXJfbGVuID0gc3RybGVuKHIucl9hYmJydmFyKTsKKwlydWxlcyA9IGdyb3dhbGxvYyhydWxlcywgc2l6ZW9mICpydWxlcywgbnJ1bGVzLCAmbnJ1bGVzX2FsbG9jKTsKKwlydWxlc1tucnVsZXMrK10gPSByOworfQorCitzdGF0aWMgYm9vbAoraW56b25lKGNoYXIgKipmaWVsZHMsIGludCBuZmllbGRzKQoreworCXJlZ2lzdGVyIGludAlpOworCisJaWYgKG5maWVsZHMgPCBaT05FX01JTkZJRUxEUyB8fCBuZmllbGRzID4gWk9ORV9NQVhGSUVMRFMpIHsKKwkJZXJyb3IoXygid3JvbmcgbnVtYmVyIG9mIGZpZWxkcyBvbiBab25lIGxpbmUiKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKHN0cmNtcChmaWVsZHNbWkZfTkFNRV0sIFRaREVGQVVMVCkgPT0gMCAmJiBsY2x0aW1lICE9IE5VTEwpIHsKKwkJZXJyb3IoCitfKCJcIlpvbmUgJXNcIiBsaW5lIGFuZCAtbCBvcHRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIpLAorCQkJVFpERUZBVUxUKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoc3RyY21wKGZpZWxkc1taRl9OQU1FXSwgVFpERUZSVUxFUykgPT0gMCAmJiBwc3hydWxlcyAhPSBOVUxMKSB7CisJCWVycm9yKAorXygiXCJab25lICVzXCIgbGluZSBhbmQgLXAgb3B0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSwKKwkJCVRaREVGUlVMRVMpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWZvciAoaSA9IDA7IGkgPCBuem9uZXM7ICsraSkKKwkJaWYgKHpvbmVzW2ldLnpfbmFtZSAhPSBOVUxMICYmCisJCQlzdHJjbXAoem9uZXNbaV0uel9uYW1lLCBmaWVsZHNbWkZfTkFNRV0pID09IDApIHsKKwkJCQllcnJvcigKK18oImR1cGxpY2F0ZSB6b25lIG5hbWUgJXMgKGZpbGUgXCIlc1wiLCBsaW5lICVkKSIpLAorCQkJCQlmaWVsZHNbWkZfTkFNRV0sCisJCQkJCXpvbmVzW2ldLnpfZmlsZW5hbWUsCisJCQkJCXpvbmVzW2ldLnpfbGluZW51bSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJcmV0dXJuIGluenN1YihmaWVsZHMsIG5maWVsZHMsIGZhbHNlKTsKK30KKworc3RhdGljIGJvb2wKK2luemNvbnQoY2hhciAqKmZpZWxkcywgaW50IG5maWVsZHMpCit7CisJaWYgKG5maWVsZHMgPCBaT05FQ19NSU5GSUVMRFMgfHwgbmZpZWxkcyA+IFpPTkVDX01BWEZJRUxEUykgeworCQllcnJvcihfKCJ3cm9uZyBudW1iZXIgb2YgZmllbGRzIG9uIFpvbmUgY29udGludWF0aW9uIGxpbmUiKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIGluenN1YihmaWVsZHMsIG5maWVsZHMsIHRydWUpOworfQorCitzdGF0aWMgYm9vbAoraW56c3ViKGNoYXIgKipmaWVsZHMsIGludCBuZmllbGRzLCBib29sIGlzY29udCkKK3sKKwlyZWdpc3RlciBjaGFyICoJCWNwOworCWNoYXIgKgkJCWNwMTsKKwlzdGF0aWMgc3RydWN0IHpvbmUJejsKKwlyZWdpc3RlciBpbnQJCWlfZ210b2ZmLCBpX3J1bGUsIGlfZm9ybWF0OworCXJlZ2lzdGVyIGludAkJaV91bnRpbHllYXIsIGlfdW50aWxtb250aDsKKwlyZWdpc3RlciBpbnQJCWlfdW50aWxkYXksIGlfdW50aWx0aW1lOworCXJlZ2lzdGVyIGJvb2wJCWhhc3VudGlsOworCisJaWYgKGlzY29udCkgeworCQlpX2dtdG9mZiA9IFpGQ19HTVRPRkY7CisJCWlfcnVsZSA9IFpGQ19SVUxFOworCQlpX2Zvcm1hdCA9IFpGQ19GT1JNQVQ7CisJCWlfdW50aWx5ZWFyID0gWkZDX1RJTFlFQVI7CisJCWlfdW50aWxtb250aCA9IFpGQ19USUxNT05USDsKKwkJaV91bnRpbGRheSA9IFpGQ19USUxEQVk7CisJCWlfdW50aWx0aW1lID0gWkZDX1RJTFRJTUU7CisJCXouel9uYW1lID0gTlVMTDsKKwl9IGVsc2UgaWYgKCFuYW1lY2hlY2soZmllbGRzW1pGX05BTUVdKSkKKwkJcmV0dXJuIGZhbHNlOworCWVsc2UgeworCQlpX2dtdG9mZiA9IFpGX0dNVE9GRjsKKwkJaV9ydWxlID0gWkZfUlVMRTsKKwkJaV9mb3JtYXQgPSBaRl9GT1JNQVQ7CisJCWlfdW50aWx5ZWFyID0gWkZfVElMWUVBUjsKKwkJaV91bnRpbG1vbnRoID0gWkZfVElMTU9OVEg7CisJCWlfdW50aWxkYXkgPSBaRl9USUxEQVk7CisJCWlfdW50aWx0aW1lID0gWkZfVElMVElNRTsKKwkJei56X25hbWUgPSBlY3B5YWxsb2MoZmllbGRzW1pGX05BTUVdKTsKKwl9CisJei56X2ZpbGVuYW1lID0gZmlsZW5hbWU7CisJei56X2xpbmVudW0gPSBsaW5lbnVtOworCXouel9nbXRvZmYgPSBnZXRobXMoZmllbGRzW2lfZ210b2ZmXSwgXygiaW52YWxpZCBVVCBvZmZzZXQiKSwgdHJ1ZSk7CisJaWYgKChjcCA9IHN0cmNocihmaWVsZHNbaV9mb3JtYXRdLCAnJScpKSAhPSAwKSB7CisJCWlmICgoKisrY3AgIT0gJ3MnICYmICpjcCAhPSAneicpIHx8IHN0cmNocihjcCwgJyUnKQorCQkgICAgfHwgc3RyY2hyKGZpZWxkc1tpX2Zvcm1hdF0sICcvJykpIHsKKwkJCWVycm9yKF8oImludmFsaWQgYWJicmV2aWF0aW9uIGZvcm1hdCIpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwl6LnpfcnVsZSA9IGVjcHlhbGxvYyhmaWVsZHNbaV9ydWxlXSk7CisJei56X2Zvcm1hdCA9IGNwMSA9IGVjcHlhbGxvYyhmaWVsZHNbaV9mb3JtYXRdKTsKKwl6LnpfZm9ybWF0X3NwZWNpZmllciA9IGNwID8gKmNwIDogJ1wwJzsKKwlpZiAoei56X2Zvcm1hdF9zcGVjaWZpZXIgPT0gJ3onKSB7CisJICBpZiAobm9pc2UpCisJICAgIHdhcm5pbmcoXygiZm9ybWF0ICclcycgbm90IGhhbmRsZWQgYnkgcHJlLTIwMTUgdmVyc2lvbnMgb2YgemljIiksCisJCSAgICB6LnpfZm9ybWF0KTsKKwkgIGNwMVtjcCAtIGZpZWxkc1tpX2Zvcm1hdF1dID0gJ3MnOworCX0KKwlpZiAobWF4X2Zvcm1hdF9sZW4gPCBzdHJsZW4oei56X2Zvcm1hdCkpCisJCW1heF9mb3JtYXRfbGVuID0gc3RybGVuKHouel9mb3JtYXQpOworCWhhc3VudGlsID0gbmZpZWxkcyA+IGlfdW50aWx5ZWFyOworCWlmIChoYXN1bnRpbCkgeworCQl6LnpfdW50aWxydWxlLnJfZmlsZW5hbWUgPSBmaWxlbmFtZTsKKwkJei56X3VudGlscnVsZS5yX2xpbmVudW0gPSBsaW5lbnVtOworCQlydWxlc3ViKCZ6LnpfdW50aWxydWxlLAorCQkJZmllbGRzW2lfdW50aWx5ZWFyXSwKKwkJCSJvbmx5IiwKKwkJCSIiLAorCQkJKG5maWVsZHMgPiBpX3VudGlsbW9udGgpID8KKwkJCWZpZWxkc1tpX3VudGlsbW9udGhdIDogIkphbiIsCisJCQkobmZpZWxkcyA+IGlfdW50aWxkYXkpID8gZmllbGRzW2lfdW50aWxkYXldIDogIjEiLAorCQkJKG5maWVsZHMgPiBpX3VudGlsdGltZSkgPyBmaWVsZHNbaV91bnRpbHRpbWVdIDogIjAiKTsKKwkJei56X3VudGlsdGltZSA9IHJweXRpbWUoJnouel91bnRpbHJ1bGUsCisJCQl6LnpfdW50aWxydWxlLnJfbG95ZWFyKTsKKwkJaWYgKGlzY29udCAmJiBuem9uZXMgPiAwICYmCisJCQl6LnpfdW50aWx0aW1lID4gbWluX3RpbWUgJiYKKwkJCXouel91bnRpbHRpbWUgPCBtYXhfdGltZSAmJgorCQkJem9uZXNbbnpvbmVzIC0gMV0uel91bnRpbHRpbWUgPiBtaW5fdGltZSAmJgorCQkJem9uZXNbbnpvbmVzIC0gMV0uel91bnRpbHRpbWUgPCBtYXhfdGltZSAmJgorCQkJem9uZXNbbnpvbmVzIC0gMV0uel91bnRpbHRpbWUgPj0gei56X3VudGlsdGltZSkgeworCQkJCWVycm9yKF8oCisiWm9uZSBjb250aW51YXRpb24gbGluZSBlbmQgdGltZSBpcyBub3QgYWZ0ZXIgZW5kIHRpbWUgb2YgcHJldmlvdXMgbGluZSIKKwkJCQkJKSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCXpvbmVzID0gZ3Jvd2FsbG9jKHpvbmVzLCBzaXplb2YgKnpvbmVzLCBuem9uZXMsICZuem9uZXNfYWxsb2MpOworCXpvbmVzW256b25lcysrXSA9IHo7CisJLyoKKwkqKiBJZiB0aGVyZSB3YXMgYW4gVU5USUwgZmllbGQgb24gdGhpcyBsaW5lLAorCSoqIHRoZXJlJ3MgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgem9uZSBvbiB0aGUgbmV4dCBsaW5lLgorCSovCisJcmV0dXJuIGhhc3VudGlsOworfQorCitzdGF0aWMgdm9pZAoraW5sZWFwKGNoYXIgKipmaWVsZHMsIGludCBuZmllbGRzKQoreworCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKgkJY3A7CisJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGxvb2t1cCAqCWxwOworCXJlZ2lzdGVyIGludAkJCWksIGo7CisJemljX3QJCQkJeWVhcjsKKwlpbnQJCQkJbW9udGgsIGRheTsKKwl6aWNfdAkJCQlkYXlvZmYsIHRvZDsKKwl6aWNfdAkJCQl0OworCWNoYXIgeHM7CisKKwlpZiAobmZpZWxkcyAhPSBMRUFQX0ZJRUxEUykgeworCQllcnJvcihfKCJ3cm9uZyBudW1iZXIgb2YgZmllbGRzIG9uIExlYXAgbGluZSIpKTsKKwkJcmV0dXJuOworCX0KKwlkYXlvZmYgPSAwOworCWNwID0gZmllbGRzW0xQX1lFQVJdOworCWlmIChzc2NhbmYoY3AsICIlIlNDTmRaSUMiJWMiLCAmeWVhciwgJnhzKSAhPSAxKSB7CisJCS8qCisJCSoqIExlYXBpbicgTGl6YXJkcyEKKwkJKi8KKwkJZXJyb3IoXygiaW52YWxpZCBsZWFwaW5nIHllYXIiKSk7CisJCXJldHVybjsKKwl9CisJaWYgKCFsZWFwc2VlbiB8fCBsZWFwbWF4eWVhciA8IHllYXIpCisJCWxlYXBtYXh5ZWFyID0geWVhcjsKKwlpZiAoIWxlYXBzZWVuIHx8IGxlYXBtaW55ZWFyID4geWVhcikKKwkJbGVhcG1pbnllYXIgPSB5ZWFyOworCWxlYXBzZWVuID0gdHJ1ZTsKKwlqID0gRVBPQ0hfWUVBUjsKKwl3aGlsZSAoaiAhPSB5ZWFyKSB7CisJCWlmICh5ZWFyID4gaikgeworCQkJaSA9IGxlbl95ZWFyc1tpc2xlYXAoaildOworCQkJKytqOworCQl9IGVsc2UgeworCQkJLS1qOworCQkJaSA9IC1sZW5feWVhcnNbaXNsZWFwKGopXTsKKwkJfQorCQlkYXlvZmYgPSBvYWRkKGRheW9mZiwgaSk7CisJfQorCWlmICgobHAgPSBieXdvcmQoZmllbGRzW0xQX01PTlRIXSwgbW9uX25hbWVzKSkgPT0gTlVMTCkgeworCQllcnJvcihfKCJpbnZhbGlkIG1vbnRoIG5hbWUiKSk7CisJCXJldHVybjsKKwl9CisJbW9udGggPSBscC0+bF92YWx1ZTsKKwlqID0gVE1fSkFOVUFSWTsKKwl3aGlsZSAoaiAhPSBtb250aCkgeworCQlpID0gbGVuX21vbnRoc1tpc2xlYXAoeWVhcildW2pdOworCQlkYXlvZmYgPSBvYWRkKGRheW9mZiwgaSk7CisJCSsrajsKKwl9CisJY3AgPSBmaWVsZHNbTFBfREFZXTsKKwlpZiAoc3NjYW5mKGNwLCAiJWQlYyIsICZkYXksICZ4cykgIT0gMSB8fAorCQlkYXkgPD0gMCB8fCBkYXkgPiBsZW5fbW9udGhzW2lzbGVhcCh5ZWFyKV1bbW9udGhdKSB7CisJCQllcnJvcihfKCJpbnZhbGlkIGRheSBvZiBtb250aCIpKTsKKwkJCXJldHVybjsKKwl9CisJZGF5b2ZmID0gb2FkZChkYXlvZmYsIGRheSAtIDEpOworCWlmIChkYXlvZmYgPCBtaW5fdGltZSAvIFNFQ1NQRVJEQVkpIHsKKwkJZXJyb3IoXygidGltZSB0b28gc21hbGwiKSk7CisJCXJldHVybjsKKwl9CisJaWYgKGRheW9mZiA+IG1heF90aW1lIC8gU0VDU1BFUkRBWSkgeworCQllcnJvcihfKCJ0aW1lIHRvbyBsYXJnZSIpKTsKKwkJcmV0dXJuOworCX0KKwl0ID0gZGF5b2ZmICogU0VDU1BFUkRBWTsKKwl0b2QgPSBnZXRobXMoZmllbGRzW0xQX1RJTUVdLCBfKCJpbnZhbGlkIHRpbWUgb2YgZGF5IiksIGZhbHNlKTsKKwljcCA9IGZpZWxkc1tMUF9DT1JSXTsKKwl7CisJCXJlZ2lzdGVyIGJvb2wJcG9zaXRpdmU7CisJCWludAkJY291bnQ7CisKKwkJaWYgKHN0cmNtcChjcCwgIiIpID09IDApIHsgLyogaW5maWxlKCkgdHVybnMgIi0iIGludG8gIiIgKi8KKwkJCXBvc2l0aXZlID0gZmFsc2U7CisJCQljb3VudCA9IDE7CisJCX0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLS0iKSA9PSAwKSB7CisJCQlwb3NpdGl2ZSA9IGZhbHNlOworCQkJY291bnQgPSAyOworCQl9IGVsc2UgaWYgKHN0cmNtcChjcCwgIisiKSA9PSAwKSB7CisJCQlwb3NpdGl2ZSA9IHRydWU7CisJCQljb3VudCA9IDE7CisJCX0gZWxzZSBpZiAoc3RyY21wKGNwLCAiKysiKSA9PSAwKSB7CisJCQlwb3NpdGl2ZSA9IHRydWU7CisJCQljb3VudCA9IDI7CisJCX0gZWxzZSB7CisJCQllcnJvcihfKCJpbGxlZ2FsIENPUlJFQ1RJT04gZmllbGQgb24gTGVhcCBsaW5lIikpOworCQkJcmV0dXJuOworCQl9CisJCWlmICgobHAgPSBieXdvcmQoZmllbGRzW0xQX1JPTExdLCBsZWFwX3R5cGVzKSkgPT0gTlVMTCkgeworCQkJZXJyb3IoXygKKwkJCQkiaWxsZWdhbCBSb2xsaW5nL1N0YXRpb25hcnkgZmllbGQgb24gTGVhcCBsaW5lIgorCQkJCSkpOworCQkJcmV0dXJuOworCQl9CisJCXQgPSB0YWRkKHQsIHRvZCk7CisJCWlmICh0IDwgYmlnX2JhbmdfdGltZSkgeworCQkJZXJyb3IoXygibGVhcCBzZWNvbmQgcHJlY2VkZXMgQmlnIEJhbmciKSk7CisJCQlyZXR1cm47CisJCX0KKwkJbGVhcGFkZCh0LCBwb3NpdGl2ZSwgbHAtPmxfdmFsdWUsIGNvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpbmxpbmsoY2hhciAqKmZpZWxkcywgaW50IG5maWVsZHMpCit7CisJc3RydWN0IGxpbmsJbDsKKworCWlmIChuZmllbGRzICE9IExJTktfRklFTERTKSB7CisJCWVycm9yKF8oIndyb25nIG51bWJlciBvZiBmaWVsZHMgb24gTGluayBsaW5lIikpOworCQlyZXR1cm47CisJfQorCWlmICgqZmllbGRzW0xGX0ZST01dID09ICdcMCcpIHsKKwkJZXJyb3IoXygiYmxhbmsgRlJPTSBmaWVsZCBvbiBMaW5rIGxpbmUiKSk7CisJCXJldHVybjsKKwl9CisJaWYgKCEgbmFtZWNoZWNrKGZpZWxkc1tMRl9UT10pKQorCSAgcmV0dXJuOworCWwubF9maWxlbmFtZSA9IGZpbGVuYW1lOworCWwubF9saW5lbnVtID0gbGluZW51bTsKKwlsLmxfZnJvbSA9IGVjcHlhbGxvYyhmaWVsZHNbTEZfRlJPTV0pOworCWwubF90byA9IGVjcHlhbGxvYyhmaWVsZHNbTEZfVE9dKTsKKwlsaW5rcyA9IGdyb3dhbGxvYyhsaW5rcywgc2l6ZW9mICpsaW5rcywgbmxpbmtzLCAmbmxpbmtzX2FsbG9jKTsKKwlsaW5rc1tubGlua3MrK10gPSBsOworfQorCitzdGF0aWMgdm9pZAorcnVsZXN1YihzdHJ1Y3QgcnVsZSAqcnAsIGNvbnN0IGNoYXIgKmxveWVhcnAsIGNvbnN0IGNoYXIgKmhpeWVhcnAsCisJY29uc3QgY2hhciAqdHlwZXAsIGNvbnN0IGNoYXIgKm1vbnRocCwgY29uc3QgY2hhciAqZGF5cCwKKwljb25zdCBjaGFyICp0aW1lcCkKK3sKKwlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgbG9va3VwICoJbHA7CisJcmVnaXN0ZXIgY29uc3QgY2hhciAqCQljcDsKKwlyZWdpc3RlciBjaGFyICoJCQlkcDsKKwlyZWdpc3RlciBjaGFyICoJCQllcDsKKwljaGFyIHhzOworCisJaWYgKChscCA9IGJ5d29yZChtb250aHAsIG1vbl9uYW1lcykpID09IE5VTEwpIHsKKwkJZXJyb3IoXygiaW52YWxpZCBtb250aCBuYW1lIikpOworCQlyZXR1cm47CisJfQorCXJwLT5yX21vbnRoID0gbHAtPmxfdmFsdWU7CisJcnAtPnJfdG9kaXNzdGQgPSBmYWxzZTsKKwlycC0+cl90b2Rpc2dtdCA9IGZhbHNlOworCWRwID0gZWNweWFsbG9jKHRpbWVwKTsKKwlpZiAoKmRwICE9ICdcMCcpIHsKKwkJZXAgPSBkcCArIHN0cmxlbihkcCkgLSAxOworCQlzd2l0Y2ggKGxvd2VyaXQoKmVwKSkgeworCQkJY2FzZSAncyc6CS8qIFN0YW5kYXJkICovCisJCQkJcnAtPnJfdG9kaXNzdGQgPSB0cnVlOworCQkJCXJwLT5yX3RvZGlzZ210ID0gZmFsc2U7CisJCQkJKmVwID0gJ1wwJzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3cnOgkvKiBXYWxsICovCisJCQkJcnAtPnJfdG9kaXNzdGQgPSBmYWxzZTsKKwkJCQlycC0+cl90b2Rpc2dtdCA9IGZhbHNlOworCQkJCSplcCA9ICdcMCc7CisJCQkJYnJlYWs7CisJCQljYXNlICdnJzoJLyogR3JlZW53aWNoICovCisJCQljYXNlICd1JzoJLyogVW5pdmVyc2FsICovCisJCQljYXNlICd6JzoJLyogWnVsdSAqLworCQkJCXJwLT5yX3RvZGlzc3RkID0gdHJ1ZTsKKwkJCQlycC0+cl90b2Rpc2dtdCA9IHRydWU7CisJCQkJKmVwID0gJ1wwJzsKKwkJCQlicmVhazsKKwkJfQorCX0KKwlycC0+cl90b2QgPSBnZXRobXMoZHAsIF8oImludmFsaWQgdGltZSBvZiBkYXkiKSwgZmFsc2UpOworCWZyZWUoZHApOworCS8qCisJKiogWWVhciB3b3JrLgorCSovCisJY3AgPSBsb3llYXJwOworCWxwID0gYnl3b3JkKGNwLCBiZWdpbl95ZWFycyk7CisJcnAtPnJfbG93YXNudW0gPSBscCA9PSBOVUxMOworCWlmICghcnAtPnJfbG93YXNudW0pIHN3aXRjaCAoKGludCkgbHAtPmxfdmFsdWUpIHsKKwkJY2FzZSBZUl9NSU5JTVVNOgorCQkJcnAtPnJfbG95ZWFyID0gWklDX01JTjsKKwkJCWJyZWFrOworCQljYXNlIFlSX01BWElNVU06CisJCQlycC0+cl9sb3llYXIgPSBaSUNfTUFYOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CS8qICJjYW5ub3QgaGFwcGVuIiAqLworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiJXM6IHBhbmljOiBJbnZhbGlkIGxfdmFsdWUgJWRcbiIpLAorCQkJCXByb2duYW1lLCBscC0+bF92YWx1ZSk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfSBlbHNlIGlmIChzc2NhbmYoY3AsICIlIlNDTmRaSUMiJWMiLCAmcnAtPnJfbG95ZWFyLCAmeHMpICE9IDEpIHsKKwkJZXJyb3IoXygiaW52YWxpZCBzdGFydGluZyB5ZWFyIikpOworCQlyZXR1cm47CisJfQorCWNwID0gaGl5ZWFycDsKKwlscCA9IGJ5d29yZChjcCwgZW5kX3llYXJzKTsKKwlycC0+cl9oaXdhc251bSA9IGxwID09IE5VTEw7CisJaWYgKCFycC0+cl9oaXdhc251bSkgc3dpdGNoICgoaW50KSBscC0+bF92YWx1ZSkgeworCQljYXNlIFlSX01JTklNVU06CisJCQlycC0+cl9oaXllYXIgPSBaSUNfTUlOOworCQkJYnJlYWs7CisJCWNhc2UgWVJfTUFYSU1VTToKKwkJCXJwLT5yX2hpeWVhciA9IFpJQ19NQVg7CisJCQlicmVhazsKKwkJY2FzZSBZUl9PTkxZOgorCQkJcnAtPnJfaGl5ZWFyID0gcnAtPnJfbG95ZWFyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CS8qICJjYW5ub3QgaGFwcGVuIiAqLworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiJXM6IHBhbmljOiBJbnZhbGlkIGxfdmFsdWUgJWRcbiIpLAorCQkJCXByb2duYW1lLCBscC0+bF92YWx1ZSk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfSBlbHNlIGlmIChzc2NhbmYoY3AsICIlIlNDTmRaSUMiJWMiLCAmcnAtPnJfaGl5ZWFyLCAmeHMpICE9IDEpIHsKKwkJZXJyb3IoXygiaW52YWxpZCBlbmRpbmcgeWVhciIpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocnAtPnJfbG95ZWFyID4gcnAtPnJfaGl5ZWFyKSB7CisJCWVycm9yKF8oInN0YXJ0aW5nIHllYXIgZ3JlYXRlciB0aGFuIGVuZGluZyB5ZWFyIikpOworCQlyZXR1cm47CisJfQorCWlmICgqdHlwZXAgPT0gJ1wwJykKKwkJcnAtPnJfeXJ0eXBlID0gTlVMTDsKKwllbHNlIHsKKwkJaWYgKHJwLT5yX2xveWVhciA9PSBycC0+cl9oaXllYXIpIHsKKwkJCWVycm9yKF8oInR5cGVkIHNpbmdsZSB5ZWFyIikpOworCQkJcmV0dXJuOworCQl9CisJCXJwLT5yX3lydHlwZSA9IGVjcHlhbGxvYyh0eXBlcCk7CisJfQorCS8qCisJKiogRGF5IHdvcmsuCisJKiogQWNjZXB0IHRoaW5ncyBzdWNoIGFzOgorCSoqCTEKKwkqKglsYXN0LVN1bmRheQorCSoqCVN1bjw9MjAKKwkqKglTdW4+PTcKKwkqLworCWRwID0gZWNweWFsbG9jKGRheXApOworCWlmICgobHAgPSBieXdvcmQoZHAsIGxhc3RzKSkgIT0gTlVMTCkgeworCQlycC0+cl9keWNvZGUgPSBEQ19ET1dMRVE7CisJCXJwLT5yX3dkYXkgPSBscC0+bF92YWx1ZTsKKwkJcnAtPnJfZGF5b2Ztb250aCA9IGxlbl9tb250aHNbMV1bcnAtPnJfbW9udGhdOworCX0gZWxzZSB7CisJCWlmICgoZXAgPSBzdHJjaHIoZHAsICc8JykpICE9IDApCisJCQlycC0+cl9keWNvZGUgPSBEQ19ET1dMRVE7CisJCWVsc2UgaWYgKChlcCA9IHN0cmNocihkcCwgJz4nKSkgIT0gMCkKKwkJCXJwLT5yX2R5Y29kZSA9IERDX0RPV0dFUTsKKwkJZWxzZSB7CisJCQllcCA9IGRwOworCQkJcnAtPnJfZHljb2RlID0gRENfRE9NOworCQl9CisJCWlmIChycC0+cl9keWNvZGUgIT0gRENfRE9NKSB7CisJCQkqZXArKyA9IDA7CisJCQlpZiAoKmVwKysgIT0gJz0nKSB7CisJCQkJZXJyb3IoXygiaW52YWxpZCBkYXkgb2YgbW9udGgiKSk7CisJCQkJZnJlZShkcCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKChscCA9IGJ5d29yZChkcCwgd2RheV9uYW1lcykpID09IE5VTEwpIHsKKwkJCQllcnJvcihfKCJpbnZhbGlkIHdlZWtkYXkgbmFtZSIpKTsKKwkJCQlmcmVlKGRwKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlycC0+cl93ZGF5ID0gbHAtPmxfdmFsdWU7CisJCX0KKwkJaWYgKHNzY2FuZihlcCwgIiVkJWMiLCAmcnAtPnJfZGF5b2Ztb250aCwgJnhzKSAhPSAxIHx8CisJCQlycC0+cl9kYXlvZm1vbnRoIDw9IDAgfHwKKwkJCShycC0+cl9kYXlvZm1vbnRoID4gbGVuX21vbnRoc1sxXVtycC0+cl9tb250aF0pKSB7CisJCQkJZXJyb3IoXygiaW52YWxpZCBkYXkgb2YgbW9udGgiKSk7CisJCQkJZnJlZShkcCk7CisJCQkJcmV0dXJuOworCQl9CisJfQorCWZyZWUoZHApOworfQorCitzdGF0aWMgdm9pZAorY29udmVydChjb25zdCBpbnRfZmFzdDMyX3QgdmFsLCBjaGFyICpjb25zdCBidWYpCit7CisJcmVnaXN0ZXIgaW50CWk7CisJcmVnaXN0ZXIgaW50CXNoaWZ0OworCXVuc2lnbmVkIGNoYXIgKmNvbnN0IGIgPSAodW5zaWduZWQgY2hhciAqKSBidWY7CisKKwlmb3IgKGkgPSAwLCBzaGlmdCA9IDI0OyBpIDwgNDsgKytpLCBzaGlmdCAtPSA4KQorCQliW2ldID0gdmFsID4+IHNoaWZ0OworfQorCitzdGF0aWMgdm9pZAorY29udmVydDY0KGNvbnN0IHppY190IHZhbCwgY2hhciAqY29uc3QgYnVmKQoreworCXJlZ2lzdGVyIGludAlpOworCXJlZ2lzdGVyIGludAlzaGlmdDsKKwl1bnNpZ25lZCBjaGFyICpjb25zdCBiID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOworCisJZm9yIChpID0gMCwgc2hpZnQgPSA1NjsgaSA8IDg7ICsraSwgc2hpZnQgLT0gOCkKKwkJYltpXSA9IHZhbCA+PiBzaGlmdDsKK30KKworc3RhdGljIHZvaWQKK3B1dHR6Y29kZShjb25zdCBpbnRfZmFzdDMyX3QgdmFsLCBGSUxFICpjb25zdCBmcCkKK3sKKwljaGFyCWJ1Zls0XTsKKworCWNvbnZlcnQodmFsLCBidWYpOworCWZ3cml0ZShidWYsIHNpemVvZiBidWYsIDEsIGZwKTsKK30KKworc3RhdGljIHZvaWQKK3B1dHR6Y29kZTY0KGNvbnN0IHppY190IHZhbCwgRklMRSAqY29uc3QgZnApCit7CisJY2hhcglidWZbOF07CisKKwljb252ZXJ0NjQodmFsLCBidWYpOworCWZ3cml0ZShidWYsIHNpemVvZiBidWYsIDEsIGZwKTsKK30KKworc3RhdGljIGludAorYXRjb21wKGNvbnN0IHZvaWQgKmF2cCwgY29uc3Qgdm9pZCAqYnZwKQoreworCWNvbnN0IHppY190CWEgPSAoKGNvbnN0IHN0cnVjdCBhdHR5cGUgKikgYXZwKS0+YXQ7CisJY29uc3QgemljX3QJYiA9ICgoY29uc3Qgc3RydWN0IGF0dHlwZSAqKSBidnApLT5hdDsKKworCXJldHVybiAoYSA8IGIpID8gLTEgOiAoYSA+IGIpOworfQorCitzdGF0aWMgYm9vbAoraXMzMihjb25zdCB6aWNfdCB4KQoreworCXJldHVybiBJTlQzMl9NSU4gPD0geCAmJiB4IDw9IElOVDMyX01BWDsKK30KKworc3RhdGljIHZvaWQKK3dyaXRlem9uZShjb25zdCBjaGFyICpjb25zdCBuYW1lLCBjb25zdCBjaGFyICpjb25zdCBzdHJpbmcsIGNoYXIgdmVyc2lvbikKK3sKKwlyZWdpc3RlciBGSUxFICoJCQlmcDsKKwlyZWdpc3RlciBpbnQJCQlpLCBqOworCXJlZ2lzdGVyIGludAkJCWxlYXBjbnQzMiwgbGVhcGkzMjsKKwlyZWdpc3RlciBpbnQJCQl0aW1lY250MzIsIHRpbWVpMzI7CisJcmVnaXN0ZXIgaW50CQkJcGFzczsKKwljaGFyICoJCQkJZnVsbG5hbWU7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB0emhlYWQJdHpoMDsKKwlzdGF0aWMgc3RydWN0IHR6aGVhZAkJdHpoOworCXppY190ICphdHMgPSBlbWFsbG9jKHNpemVfcHJvZHVjdCh0aW1lY250LCBzaXplb2YgKmF0cyArIDEpKTsKKwl2b2lkICp0eXBlc3B0ciA9IGF0cyArIHRpbWVjbnQ7CisJdW5zaWduZWQgY2hhciAqdHlwZXMgPSB0eXBlc3B0cjsKKworCS8qCisJKiogU29ydC4KKwkqLworCWlmICh0aW1lY250ID4gMSkKKwkJcXNvcnQoYXR0eXBlcywgdGltZWNudCwgc2l6ZW9mICphdHR5cGVzLCBhdGNvbXApOworCS8qCisJKiogT3B0aW1pemUuCisJKi8KKwl7CisJCWludAlmcm9taTsKKwkJaW50CXRvaTsKKworCQl0b2kgPSAwOworCQlmcm9taSA9IDA7CisJCXdoaWxlIChmcm9taSA8IHRpbWVjbnQgJiYgYXR0eXBlc1tmcm9taV0uYXQgPCBiaWdfYmFuZ190aW1lKQorCQkJKytmcm9taTsKKwkJZm9yICggOyBmcm9taSA8IHRpbWVjbnQ7ICsrZnJvbWkpIHsKKwkJCWlmICh0b2kgPiAxICYmICgoYXR0eXBlc1tmcm9taV0uYXQgKworCQkJCWdtdG9mZnNbYXR0eXBlc1t0b2kgLSAxXS50eXBlXSkgPD0KKwkJCQkoYXR0eXBlc1t0b2kgLSAxXS5hdCArCisJCQkJZ210b2Zmc1thdHR5cGVzW3RvaSAtIDJdLnR5cGVdKSkpIHsKKwkJCQkJYXR0eXBlc1t0b2kgLSAxXS50eXBlID0KKwkJCQkJCWF0dHlwZXNbZnJvbWldLnR5cGU7CisJCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHRvaSA9PSAwIHx8CisJCQkJYXR0eXBlc1t0b2kgLSAxXS50eXBlICE9IGF0dHlwZXNbZnJvbWldLnR5cGUpCisJCQkJCWF0dHlwZXNbdG9pKytdID0gYXR0eXBlc1tmcm9taV07CisJCX0KKwkJdGltZWNudCA9IHRvaTsKKwl9CisJaWYgKG5vaXNlICYmIHRpbWVjbnQgPiAxMjAwKQorCQl3YXJuaW5nKF8oInByZS0yMDE0IGNsaWVudHMgbWF5IG1pc2hhbmRsZSIKKwkJCSAgIiBtb3JlIHRoYW4gMTIwMCB0cmFuc2l0aW9uIHRpbWVzIikpOworCS8qCisJKiogVHJhbnNmZXIuCisJKi8KKwlmb3IgKGkgPSAwOyBpIDwgdGltZWNudDsgKytpKSB7CisJCWF0c1tpXSA9IGF0dHlwZXNbaV0uYXQ7CisJCXR5cGVzW2ldID0gYXR0eXBlc1tpXS50eXBlOworCX0KKwkvKgorCSoqIENvcnJlY3QgZm9yIGxlYXAgc2Vjb25kcy4KKwkqLworCWZvciAoaSA9IDA7IGkgPCB0aW1lY250OyArK2kpIHsKKwkJaiA9IGxlYXBjbnQ7CisJCXdoaWxlICgtLWogPj0gMCkKKwkJCWlmIChhdHNbaV0gPiB0cmFuc1tqXSAtIGNvcnJbal0pIHsKKwkJCQlhdHNbaV0gPSB0YWRkKGF0c1tpXSwgY29ycltqXSk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCS8qCisJKiogRmlndXJlIG91dCAzMi1iaXQtbGltaXRlZCBzdGFydHMgYW5kIGNvdW50cy4KKwkqLworCXRpbWVjbnQzMiA9IHRpbWVjbnQ7CisJdGltZWkzMiA9IDA7CisJbGVhcGNudDMyID0gbGVhcGNudDsKKwlsZWFwaTMyID0gMDsKKwl3aGlsZSAodGltZWNudDMyID4gMCAmJiAhaXMzMihhdHNbdGltZWNudDMyIC0gMV0pKQorCQktLXRpbWVjbnQzMjsKKwl3aGlsZSAodGltZWNudDMyID4gMCAmJiAhaXMzMihhdHNbdGltZWkzMl0pKSB7CisJCS0tdGltZWNudDMyOworCQkrK3RpbWVpMzI7CisJfQorCS8qCisJKiogT3V0cHV0IGFuIElOVDMyX01JTiAidHJhbnNpdGlvbiIgaWYgYXBwcm9wcmlhdGU7IHNlZSBiZWxvdy4KKwkqLworCWlmICh0aW1laTMyID4gMCAmJiBhdHNbdGltZWkzMl0gPiBJTlQzMl9NSU4pIHsKKwkJLS10aW1laTMyOworCQkrK3RpbWVjbnQzMjsKKwl9CisJd2hpbGUgKGxlYXBjbnQzMiA+IDAgJiYgIWlzMzIodHJhbnNbbGVhcGNudDMyIC0gMV0pKQorCQktLWxlYXBjbnQzMjsKKwl3aGlsZSAobGVhcGNudDMyID4gMCAmJiAhaXMzMih0cmFuc1tsZWFwaTMyXSkpIHsKKwkJLS1sZWFwY250MzI7CisJCSsrbGVhcGkzMjsKKwl9CisJZnVsbG5hbWUgPSByZWxuYW1lKGRpcmVjdG9yeSwgbmFtZSk7CisJLyoKKwkqKiBSZW1vdmUgb2xkIGZpbGUsIGlmIGFueSwgdG8gc25hcCBsaW5rcy4KKwkqLworCWlmIChpdHNkaXIoZnVsbG5hbWUpIDw9IDAgJiYgcmVtb3ZlKGZ1bGxuYW1lKSAhPSAwICYmIGVycm5vICE9IEVOT0VOVCkgeworCQljb25zdCBjaGFyICplID0gc3RyZXJyb3IoZXJybm8pOworCisJCWZwcmludGYoc3RkZXJyLCBfKCIlczogQ2FuJ3QgcmVtb3ZlICVzOiAlc1xuIiksCisJCQlwcm9nbmFtZSwgZnVsbG5hbWUsIGUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmICgoZnAgPSBmb3BlbihmdWxsbmFtZSwgIndiIikpID09IE5VTEwpIHsKKwkJaWYgKCEgbWtkaXJzKGZ1bGxuYW1lKSkKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJaWYgKChmcCA9IGZvcGVuKGZ1bGxuYW1lLCAid2IiKSkgPT0gTlVMTCkgeworCQkJY29uc3QgY2hhciAqZSA9IHN0cmVycm9yKGVycm5vKTsKKworCQkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBDYW4ndCBjcmVhdGUgJXM6ICVzXG4iKSwKKwkJCQlwcm9nbmFtZSwgZnVsbG5hbWUsIGUpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisJfQorCWZvciAocGFzcyA9IDE7IHBhc3MgPD0gMjsgKytwYXNzKSB7CisJCXJlZ2lzdGVyIGludAl0aGlzdGltZWksIHRoaXN0aW1lY250OworCQlyZWdpc3RlciBpbnQJdGhpc2xlYXBpLCB0aGlzbGVhcGNudDsKKwkJcmVnaXN0ZXIgaW50CXRoaXN0aW1lbGltLCB0aGlzbGVhcGxpbTsKKwkJaW50CQl3cml0ZXR5cGVbVFpfTUFYX1RZUEVTXTsKKwkJaW50CQl0eXBlbWFwW1RaX01BWF9UWVBFU107CisJCXJlZ2lzdGVyIGludAl0aGlzdHlwZWNudDsKKwkJY2hhcgkJdGhpc2NoYXJzW1RaX01BWF9DSEFSU107CisJCWNoYXIJCXRoaXNjaGFyY250OworCQlpbnQJCWluZG1hcFtUWl9NQVhfQ0hBUlNdOworCisJCWlmIChwYXNzID09IDEpIHsKKwkJCXRoaXN0aW1laSA9IHRpbWVpMzI7CisJCQl0aGlzdGltZWNudCA9IHRpbWVjbnQzMjsKKwkJCXRoaXNsZWFwaSA9IGxlYXBpMzI7CisJCQl0aGlzbGVhcGNudCA9IGxlYXBjbnQzMjsKKwkJfSBlbHNlIHsKKwkJCXRoaXN0aW1laSA9IDA7CisJCQl0aGlzdGltZWNudCA9IHRpbWVjbnQ7CisJCQl0aGlzbGVhcGkgPSAwOworCQkJdGhpc2xlYXBjbnQgPSBsZWFwY250OworCQl9CisJCXRoaXN0aW1lbGltID0gdGhpc3RpbWVpICsgdGhpc3RpbWVjbnQ7CisJCXRoaXNsZWFwbGltID0gdGhpc2xlYXBpICsgdGhpc2xlYXBjbnQ7CisJCWZvciAoaSA9IDA7IGkgPCB0eXBlY250OyArK2kpCisJCQl3cml0ZXR5cGVbaV0gPSB0aGlzdGltZWNudCA9PSB0aW1lY250OworCQlpZiAodGhpc3RpbWVjbnQgPT0gMCkgeworCQkJLyoKKwkJCSoqIE5vIHRyYW5zaXRpb24gdGltZXMgZmFsbCBpbiB0aGUgY3VycmVudAorCQkJKiogKDMyLSBvciA2NC1iaXQpIHdpbmRvdy4KKwkJCSovCisJCQlpZiAodHlwZWNudCAhPSAwKQorCQkJCXdyaXRldHlwZVt0eXBlY250IC0gMV0gPSB0cnVlOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gdGhpc3RpbWVpIC0gMTsgaSA8IHRoaXN0aW1lbGltOyArK2kpCisJCQkJaWYgKGkgPj0gMCkKKwkJCQkJd3JpdGV0eXBlW3R5cGVzW2ldXSA9IHRydWU7CisJCQkvKgorCQkJKiogRm9yIEFtZXJpY2EvR29kdGhhYiBhbmQgQW50YXJjdGljYS9QYWxtZXIKKwkJCSovCisJCQlpZiAodGhpc3RpbWVpID09IDApCisJCQkJd3JpdGV0eXBlWzBdID0gdHJ1ZTsKKwkJfQorI2lmbmRlZiBMRUFWRV9TT01FX1BSRV8yMDExX1NZU1RFTVNfSU5fVEhFX0xVUkNICisJCS8qCisJCSoqIEZvciBzb21lIHByZS0yMDExIHN5c3RlbXM6IGlmIHRoZSBsYXN0LXRvLWJlLXdyaXR0ZW4KKwkJKiogc3RhbmRhcmQgKG9yIGRheWxpZ2h0KSB0eXBlIGhhcyBhbiBvZmZzZXQgZGlmZmVyZW50IGZyb20gdGhlCisJCSoqIG1vc3QgcmVjZW50bHkgdXNlZCBvZmZzZXQsCisJCSoqIGFwcGVuZCBhbiAodW51c2VkKSBjb3B5IG9mIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgdHlwZQorCQkqKiAodG8gaGVscCBnZXQgZ2xvYmFsICJhbHR6b25lIiBhbmQgInRpbWV6b25lIiB2YXJpYWJsZXMKKwkJKiogc2V0IGNvcnJlY3RseSkuCisJCSovCisJCXsKKwkJCXJlZ2lzdGVyIGludAltcnVkc3QsIG1ydXN0ZCwgaGlkc3QsIGhpc3RkLCB0eXBlOworCisJCQloaWRzdCA9IGhpc3RkID0gbXJ1ZHN0ID0gbXJ1c3RkID0gLTE7CisJCQlmb3IgKGkgPSB0aGlzdGltZWk7IGkgPCB0aGlzdGltZWxpbTsgKytpKQorCQkJCWlmIChpc2RzdHNbdHlwZXNbaV1dKQorCQkJCQltcnVkc3QgPSB0eXBlc1tpXTsKKwkJCQllbHNlCW1ydXN0ZCA9IHR5cGVzW2ldOworCQkJZm9yIChpID0gMDsgaSA8IHR5cGVjbnQ7ICsraSkKKwkJCQlpZiAod3JpdGV0eXBlW2ldKSB7CisJCQkJCWlmIChpc2RzdHNbaV0pCisJCQkJCQloaWRzdCA9IGk7CisJCQkJCWVsc2UJaGlzdGQgPSBpOworCQkJCX0KKwkJCWlmIChoaWRzdCA+PSAwICYmIG1ydWRzdCA+PSAwICYmIGhpZHN0ICE9IG1ydWRzdCAmJgorCQkJCWdtdG9mZnNbaGlkc3RdICE9IGdtdG9mZnNbbXJ1ZHN0XSkgeworCQkJCQlpc2RzdHNbbXJ1ZHN0XSA9IC0xOworCQkJCQl0eXBlID0gYWRkdHlwZShnbXRvZmZzW21ydWRzdF0sCisJCQkJCQkmY2hhcnNbYWJicmluZHNbbXJ1ZHN0XV0sCisJCQkJCQl0cnVlLAorCQkJCQkJdHRpc3N0ZHNbbXJ1ZHN0XSwKKwkJCQkJCXR0aXNnbXRzW21ydWRzdF0pOworCQkJCQlpc2RzdHNbbXJ1ZHN0XSA9IDE7CisJCQkJCXdyaXRldHlwZVt0eXBlXSA9IHRydWU7CisJCQl9CisJCQlpZiAoaGlzdGQgPj0gMCAmJiBtcnVzdGQgPj0gMCAmJiBoaXN0ZCAhPSBtcnVzdGQgJiYKKwkJCQlnbXRvZmZzW2hpc3RkXSAhPSBnbXRvZmZzW21ydXN0ZF0pIHsKKwkJCQkJaXNkc3RzW21ydXN0ZF0gPSAtMTsKKwkJCQkJdHlwZSA9IGFkZHR5cGUoZ210b2Zmc1ttcnVzdGRdLAorCQkJCQkJJmNoYXJzW2FiYnJpbmRzW21ydXN0ZF1dLAorCQkJCQkJZmFsc2UsCisJCQkJCQl0dGlzc3Rkc1ttcnVzdGRdLAorCQkJCQkJdHRpc2dtdHNbbXJ1c3RkXSk7CisJCQkJCWlzZHN0c1ttcnVzdGRdID0gMDsKKwkJCQkJd3JpdGV0eXBlW3R5cGVdID0gdHJ1ZTsKKwkJCX0KKwkJfQorI2VuZGlmIC8qICFkZWZpbmVkIExFQVZFX1NPTUVfUFJFXzIwMTFfU1lTVEVNU19JTl9USEVfTFVSQ0ggKi8KKwkJdGhpc3R5cGVjbnQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgdHlwZWNudDsgKytpKQorCQkJdHlwZW1hcFtpXSA9IHdyaXRldHlwZVtpXSA/ICB0aGlzdHlwZWNudCsrIDogLTE7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgaW5kbWFwIC8gc2l6ZW9mIGluZG1hcFswXTsgKytpKQorCQkJaW5kbWFwW2ldID0gLTE7CisJCXRoaXNjaGFyY250ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHR5cGVjbnQ7ICsraSkgeworCQkJcmVnaXN0ZXIgY2hhciAqCXRoaXNhYmJyOworCisJCQlpZiAoIXdyaXRldHlwZVtpXSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChpbmRtYXBbYWJicmluZHNbaV1dID49IDApCisJCQkJY29udGludWU7CisJCQl0aGlzYWJiciA9ICZjaGFyc1thYmJyaW5kc1tpXV07CisJCQlmb3IgKGogPSAwOyBqIDwgdGhpc2NoYXJjbnQ7ICsraikKKwkJCQlpZiAoc3RyY21wKCZ0aGlzY2hhcnNbal0sIHRoaXNhYmJyKSA9PSAwKQorCQkJCQlicmVhazsKKwkJCWlmIChqID09IHRoaXNjaGFyY250KSB7CisJCQkJc3RyY3B5KCZ0aGlzY2hhcnNbKGludCkgdGhpc2NoYXJjbnRdLAorCQkJCQl0aGlzYWJicik7CisJCQkJdGhpc2NoYXJjbnQgKz0gc3RybGVuKHRoaXNhYmJyKSArIDE7CisJCQl9CisJCQlpbmRtYXBbYWJicmluZHNbaV1dID0gajsKKwkJfQorI2RlZmluZSBETyhmaWVsZCkJZndyaXRlKHR6aC5maWVsZCwgc2l6ZW9mIHR6aC5maWVsZCwgMSwgZnApCisJCXR6aCA9IHR6aDA7CisJCXN0cm5jcHkodHpoLnR6aF9tYWdpYywgVFpfTUFHSUMsIHNpemVvZiB0emgudHpoX21hZ2ljKTsKKwkJdHpoLnR6aF92ZXJzaW9uWzBdID0gdmVyc2lvbjsKKwkJY29udmVydCh0aGlzdHlwZWNudCwgdHpoLnR6aF90dGlzZ210Y250KTsKKwkJY29udmVydCh0aGlzdHlwZWNudCwgdHpoLnR6aF90dGlzc3RkY250KTsKKwkJY29udmVydCh0aGlzbGVhcGNudCwgdHpoLnR6aF9sZWFwY250KTsKKwkJY29udmVydCh0aGlzdGltZWNudCwgdHpoLnR6aF90aW1lY250KTsKKwkJY29udmVydCh0aGlzdHlwZWNudCwgdHpoLnR6aF90eXBlY250KTsKKwkJY29udmVydCh0aGlzY2hhcmNudCwgdHpoLnR6aF9jaGFyY250KTsKKwkJRE8odHpoX21hZ2ljKTsKKwkJRE8odHpoX3ZlcnNpb24pOworCQlETyh0emhfcmVzZXJ2ZWQpOworCQlETyh0emhfdHRpc2dtdGNudCk7CisJCURPKHR6aF90dGlzc3RkY250KTsKKwkJRE8odHpoX2xlYXBjbnQpOworCQlETyh0emhfdGltZWNudCk7CisJCURPKHR6aF90eXBlY250KTsKKwkJRE8odHpoX2NoYXJjbnQpOworI3VuZGVmIERPCisJCWZvciAoaSA9IHRoaXN0aW1laTsgaSA8IHRoaXN0aW1lbGltOyArK2kpCisJCQlpZiAocGFzcyA9PSAxKQorCQkJCS8qCisJCQkJKiogT3V0cHV0IGFuIElOVDMyX01JTiAidHJhbnNpdGlvbiIKKwkJCQkqKiBpZiBhcHByb3ByaWF0ZTsgc2VlIGFib3ZlLgorCQkJCSovCisJCQkJcHV0dHpjb2RlKCgoYXRzW2ldIDwgSU5UMzJfTUlOKSA/CisJCQkJCUlOVDMyX01JTiA6IGF0c1tpXSksIGZwKTsKKwkJCWVsc2UJcHV0dHpjb2RlNjQoYXRzW2ldLCBmcCk7CisJCWZvciAoaSA9IHRoaXN0aW1laTsgaSA8IHRoaXN0aW1lbGltOyArK2kpIHsKKwkJCXVuc2lnbmVkIGNoYXIJdWM7CisKKwkJCXVjID0gdHlwZW1hcFt0eXBlc1tpXV07CisJCQlmd3JpdGUoJnVjLCBzaXplb2YgdWMsIDEsIGZwKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgdHlwZWNudDsgKytpKQorCQkJaWYgKHdyaXRldHlwZVtpXSkgeworCQkJCXB1dHR6Y29kZShnbXRvZmZzW2ldLCBmcCk7CisJCQkJcHV0Yyhpc2RzdHNbaV0sIGZwKTsKKwkJCQlwdXRjKCh1bnNpZ25lZCBjaGFyKSBpbmRtYXBbYWJicmluZHNbaV1dLCBmcCk7CisJCQl9CisJCWlmICh0aGlzY2hhcmNudCAhPSAwKQorCQkJZndyaXRlKHRoaXNjaGFycywgc2l6ZW9mIHRoaXNjaGFyc1swXSwKKwkJCQkgICAgICB0aGlzY2hhcmNudCwgZnApOworCQlmb3IgKGkgPSB0aGlzbGVhcGk7IGkgPCB0aGlzbGVhcGxpbTsgKytpKSB7CisJCQlyZWdpc3RlciB6aWNfdAl0b2RvOworCisJCQlpZiAocm9sbFtpXSkgeworCQkJCWlmICh0aW1lY250ID09IDAgfHwgdHJhbnNbaV0gPCBhdHNbMF0pIHsKKwkJCQkJaiA9IDA7CisJCQkJCXdoaWxlIChpc2RzdHNbal0pCisJCQkJCQlpZiAoKytqID49IHR5cGVjbnQpIHsKKwkJCQkJCQlqID0gMDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlqID0gMTsKKwkJCQkJd2hpbGUgKGogPCB0aW1lY250ICYmCisJCQkJCQl0cmFuc1tpXSA+PSBhdHNbal0pCisJCQkJCQkJKytqOworCQkJCQlqID0gdHlwZXNbaiAtIDFdOworCQkJCX0KKwkJCQl0b2RvID0gdGFkZCh0cmFuc1tpXSwgLWdtdG9mZnNbal0pOworCQkJfSBlbHNlCXRvZG8gPSB0cmFuc1tpXTsKKwkJCWlmIChwYXNzID09IDEpCisJCQkJcHV0dHpjb2RlKHRvZG8sIGZwKTsKKwkJCWVsc2UJcHV0dHpjb2RlNjQodG9kbywgZnApOworCQkJcHV0dHpjb2RlKGNvcnJbaV0sIGZwKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgdHlwZWNudDsgKytpKQorCQkJaWYgKHdyaXRldHlwZVtpXSkKKwkJCQlwdXRjKHR0aXNzdGRzW2ldLCBmcCk7CisJCWZvciAoaSA9IDA7IGkgPCB0eXBlY250OyArK2kpCisJCQlpZiAod3JpdGV0eXBlW2ldKQorCQkJCXB1dGModHRpc2dtdHNbaV0sIGZwKTsKKwl9CisJZnByaW50ZihmcCwgIlxuJXNcbiIsIHN0cmluZyk7CisJY2xvc2VfZmlsZShmcCwgZnVsbG5hbWUpOworCWZyZWUoYXRzKTsKKwlmcmVlKGZ1bGxuYW1lKTsKK30KKworc3RhdGljIGNoYXIgY29uc3QgKgorYWJicm9mZnNldChjaGFyICpidWYsIHppY190IG9mZnNldCkKK3sKKyAgY2hhciBzaWduID0gJysnOworICBpbnQgc2Vjb25kcywgbWludXRlczsKKworICBpZiAob2Zmc2V0IDwgMCkgeworICAgIG9mZnNldCA9IC1vZmZzZXQ7CisgICAgc2lnbiA9ICctJzsKKyAgfQorCisgIHNlY29uZHMgPSBvZmZzZXQgJSBTRUNTUEVSTUlOOworICBvZmZzZXQgLz0gU0VDU1BFUk1JTjsKKyAgbWludXRlcyA9IG9mZnNldCAlIE1JTlNQRVJIT1VSOworICBvZmZzZXQgLz0gTUlOU1BFUkhPVVI7CisgIGlmICgxMDAgPD0gb2Zmc2V0KSB7CisgICAgZXJyb3IoXygiJSV6IFVUQyBvZmZzZXQgbWFnbml0dWRlIGV4Y2VlZHMgOTk6NTk6NTkiKSk7CisgICAgcmV0dXJuICIleiI7CisgIH0gZWxzZSB7CisgICAgY2hhciAqcCA9IGJ1ZjsKKyAgICAqcCsrID0gc2lnbjsKKyAgICAqcCsrID0gJzAnICsgb2Zmc2V0IC8gMTA7CisgICAgKnArKyA9ICcwJyArIG9mZnNldCAlIDEwOworICAgIGlmIChtaW51dGVzIHwgc2Vjb25kcykgeworICAgICAgKnArKyA9ICcwJyArIG1pbnV0ZXMgLyAxMDsKKyAgICAgICpwKysgPSAnMCcgKyBtaW51dGVzICUgMTA7CisgICAgICBpZiAoc2Vjb25kcykgeworCSpwKysgPSAnMCcgKyBzZWNvbmRzIC8gMTA7CisJKnArKyA9ICcwJyArIHNlY29uZHMgJSAxMDsKKyAgICAgIH0KKyAgICB9CisgICAgKnAgPSAnXDAnOworICAgIHJldHVybiBidWY7CisgIH0KK30KKworc3RhdGljIHNpemVfdAorZG9hYmJyKGNoYXIgKmFiYnIsIHN0cnVjdCB6b25lIGNvbnN0ICp6cCwgY2hhciBjb25zdCAqbGV0dGVycywKKyAgICAgICB6aWNfdCBzdGRvZmYsIGJvb2wgZG9xdW90ZXMpCit7CisJcmVnaXN0ZXIgY2hhciAqCWNwOworCXJlZ2lzdGVyIGNoYXIgKglzbGFzaHA7CisJcmVnaXN0ZXIgc2l6ZV90CWxlbjsKKwljaGFyIGNvbnN0ICpmb3JtYXQgPSB6cC0+el9mb3JtYXQ7CisKKwlzbGFzaHAgPSBzdHJjaHIoZm9ybWF0LCAnLycpOworCWlmIChzbGFzaHAgPT0gTlVMTCkgeworCSAgY2hhciBsZXR0ZXJidWZbUEVSQ0VOVF9aX0xFTl9CT1VORCArIDFdOworCSAgaWYgKHpwLT56X2Zvcm1hdF9zcGVjaWZpZXIgPT0gJ3onKQorCSAgICBsZXR0ZXJzID0gYWJicm9mZnNldChsZXR0ZXJidWYsIHpwLT56X2dtdG9mZiArIHN0ZG9mZik7CisJICBlbHNlIGlmICghbGV0dGVycykKKwkgICAgbGV0dGVycyA9ICIlcyI7CisJICBzcHJpbnRmKGFiYnIsIGZvcm1hdCwgbGV0dGVycyk7CisJfSBlbHNlIGlmIChzdGRvZmYgIT0gMCkgeworCQlzdHJjcHkoYWJiciwgc2xhc2hwICsgMSk7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGFiYnIsIGZvcm1hdCwgc2xhc2hwIC0gZm9ybWF0KTsKKwkJYWJicltzbGFzaHAgLSBmb3JtYXRdID0gJ1wwJzsKKwl9CisJbGVuID0gc3RybGVuKGFiYnIpOworCWlmICghZG9xdW90ZXMpCisJCXJldHVybiBsZW47CisJZm9yIChjcCA9IGFiYnI7IGlzX2FscGhhKCpjcCk7IGNwKyspCisJCWNvbnRpbnVlOworCWlmIChsZW4gPiAwICYmICpjcCA9PSAnXDAnKQorCQlyZXR1cm4gbGVuOworCWFiYnJbbGVuICsgMl0gPSAnXDAnOworCWFiYnJbbGVuICsgMV0gPSAnPic7CisJbWVtbW92ZShhYmJyICsgMSwgYWJiciwgbGVuKTsKKwlhYmJyWzBdID0gJzwnOworCXJldHVybiBsZW4gKyAyOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlbWlubWF4KGNvbnN0IHppY190IHgpCit7CisJaWYgKG1pbl95ZWFyID4geCkKKwkJbWluX3llYXIgPSB4OworCWlmIChtYXhfeWVhciA8IHgpCisJCW1heF95ZWFyID0geDsKK30KKworc3RhdGljIGludAorc3RyaW5nb2Zmc2V0KGNoYXIgKnJlc3VsdCwgemljX3Qgb2Zmc2V0KQoreworCXJlZ2lzdGVyIGludAlob3VyczsKKwlyZWdpc3RlciBpbnQJbWludXRlczsKKwlyZWdpc3RlciBpbnQJc2Vjb25kczsKKwlib29sIG5lZ2F0aXZlID0gb2Zmc2V0IDwgMDsKKwlpbnQgbGVuID0gbmVnYXRpdmU7CisKKwlpZiAobmVnYXRpdmUpIHsKKwkJb2Zmc2V0ID0gLW9mZnNldDsKKwkJcmVzdWx0WzBdID0gJy0nOworCX0KKwlzZWNvbmRzID0gb2Zmc2V0ICUgU0VDU1BFUk1JTjsKKwlvZmZzZXQgLz0gU0VDU1BFUk1JTjsKKwltaW51dGVzID0gb2Zmc2V0ICUgTUlOU1BFUkhPVVI7CisJb2Zmc2V0IC89IE1JTlNQRVJIT1VSOworCWhvdXJzID0gb2Zmc2V0OworCWlmIChob3VycyA+PSBIT1VSU1BFUkRBWSAqIERBWVNQRVJXRUVLKSB7CisJCXJlc3VsdFswXSA9ICdcMCc7CisJCXJldHVybiAwOworCX0KKwlsZW4gKz0gc3ByaW50ZihyZXN1bHQgKyBsZW4sICIlZCIsIGhvdXJzKTsKKwlpZiAobWludXRlcyAhPSAwIHx8IHNlY29uZHMgIT0gMCkgeworCQlsZW4gKz0gc3ByaW50ZihyZXN1bHQgKyBsZW4sICI6JTAyZCIsIG1pbnV0ZXMpOworCQlpZiAoc2Vjb25kcyAhPSAwKQorCQkJbGVuICs9IHNwcmludGYocmVzdWx0ICsgbGVuLCAiOiUwMmQiLCBzZWNvbmRzKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludAorc3RyaW5ncnVsZShjaGFyICpyZXN1bHQsIGNvbnN0IHN0cnVjdCBydWxlICpjb25zdCBycCwgY29uc3QgemljX3QgZHN0b2ZmLAorCSAgIGNvbnN0IHppY190IGdtdG9mZikKK3sKKwlyZWdpc3RlciB6aWNfdAl0b2QgPSBycC0+cl90b2Q7CisJcmVnaXN0ZXIgaW50CWNvbXBhdCA9IDA7CisKKwlpZiAocnAtPnJfZHljb2RlID09IERDX0RPTSkgeworCQlyZWdpc3RlciBpbnQJbW9udGgsIHRvdGFsOworCisJCWlmIChycC0+cl9kYXlvZm1vbnRoID09IDI5ICYmIHJwLT5yX21vbnRoID09IFRNX0ZFQlJVQVJZKQorCQkJcmV0dXJuIC0xOworCQl0b3RhbCA9IDA7CisJCWZvciAobW9udGggPSAwOyBtb250aCA8IHJwLT5yX21vbnRoOyArK21vbnRoKQorCQkJdG90YWwgKz0gbGVuX21vbnRoc1swXVttb250aF07CisJCS8qIE9taXQgdGhlICJKIiBpbiBKYW4gYW5kIEZlYiwgYXMgdGhhdCdzIHNob3J0ZXIuICAqLworCQlpZiAocnAtPnJfbW9udGggPD0gMSkKKwkJICByZXN1bHQgKz0gc3ByaW50ZihyZXN1bHQsICIlZCIsIHRvdGFsICsgcnAtPnJfZGF5b2Ztb250aCAtIDEpOworCQllbHNlCisJCSAgcmVzdWx0ICs9IHNwcmludGYocmVzdWx0LCAiSiVkIiwgdG90YWwgKyBycC0+cl9kYXlvZm1vbnRoKTsKKwl9IGVsc2UgeworCQlyZWdpc3RlciBpbnQJd2VlazsKKwkJcmVnaXN0ZXIgaW50CXdkYXkgPSBycC0+cl93ZGF5OworCQlyZWdpc3RlciBpbnQJd2RheW9mZjsKKworCQlpZiAocnAtPnJfZHljb2RlID09IERDX0RPV0dFUSkgeworCQkJd2RheW9mZiA9IChycC0+cl9kYXlvZm1vbnRoIC0gMSkgJSBEQVlTUEVSV0VFSzsKKwkJCWlmICh3ZGF5b2ZmKQorCQkJCWNvbXBhdCA9IDIwMTM7CisJCQl3ZGF5IC09IHdkYXlvZmY7CisJCQl0b2QgKz0gd2RheW9mZiAqIFNFQ1NQRVJEQVk7CisJCQl3ZWVrID0gMSArIChycC0+cl9kYXlvZm1vbnRoIC0gMSkgLyBEQVlTUEVSV0VFSzsKKwkJfSBlbHNlIGlmIChycC0+cl9keWNvZGUgPT0gRENfRE9XTEVRKSB7CisJCQlpZiAocnAtPnJfZGF5b2Ztb250aCA9PSBsZW5fbW9udGhzWzFdW3JwLT5yX21vbnRoXSkKKwkJCQl3ZWVrID0gNTsKKwkJCWVsc2UgeworCQkJCXdkYXlvZmYgPSBycC0+cl9kYXlvZm1vbnRoICUgREFZU1BFUldFRUs7CisJCQkJaWYgKHdkYXlvZmYpCisJCQkJCWNvbXBhdCA9IDIwMTM7CisJCQkJd2RheSAtPSB3ZGF5b2ZmOworCQkJCXRvZCArPSB3ZGF5b2ZmICogU0VDU1BFUkRBWTsKKwkJCQl3ZWVrID0gcnAtPnJfZGF5b2Ztb250aCAvIERBWVNQRVJXRUVLOworCQkJfQorCQl9IGVsc2UJcmV0dXJuIC0xOwkvKiAiY2Fubm90IGhhcHBlbiIgKi8KKwkJaWYgKHdkYXkgPCAwKQorCQkJd2RheSArPSBEQVlTUEVSV0VFSzsKKwkJcmVzdWx0ICs9IHNwcmludGYocmVzdWx0LCAiTSVkLiVkLiVkIiwKKwkJCQkgIHJwLT5yX21vbnRoICsgMSwgd2Vlaywgd2RheSk7CisJfQorCWlmIChycC0+cl90b2Rpc2dtdCkKKwkJdG9kICs9IGdtdG9mZjsKKwlpZiAocnAtPnJfdG9kaXNzdGQgJiYgcnAtPnJfc3Rkb2ZmID09IDApCisJCXRvZCArPSBkc3RvZmY7CisJaWYgKHRvZCAhPSAyICogU0VDU1BFUk1JTiAqIE1JTlNQRVJIT1VSKSB7CisJCSpyZXN1bHQrKyA9ICcvJzsKKwkJaWYgKCEgc3RyaW5nb2Zmc2V0KHJlc3VsdCwgdG9kKSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKHRvZCA8IDApIHsKKwkJCWlmIChjb21wYXQgPCAyMDEzKQorCQkJCWNvbXBhdCA9IDIwMTM7CisJCX0gZWxzZSBpZiAoU0VDU1BFUkRBWSA8PSB0b2QpIHsKKwkJCWlmIChjb21wYXQgPCAxOTk0KQorCQkJCWNvbXBhdCA9IDE5OTQ7CisJCX0KKwl9CisJcmV0dXJuIGNvbXBhdDsKK30KKworc3RhdGljIGludAorcnVsZV9jbXAoc3RydWN0IHJ1bGUgY29uc3QgKmEsIHN0cnVjdCBydWxlIGNvbnN0ICpiKQoreworCWlmICghYSkKKwkJcmV0dXJuIC0hIWI7CisJaWYgKCFiKQorCQlyZXR1cm4gMTsKKwlpZiAoYS0+cl9oaXllYXIgIT0gYi0+cl9oaXllYXIpCisJCXJldHVybiBhLT5yX2hpeWVhciA8IGItPnJfaGl5ZWFyID8gLTEgOiAxOworCWlmIChhLT5yX21vbnRoIC0gYi0+cl9tb250aCAhPSAwKQorCQlyZXR1cm4gYS0+cl9tb250aCAtIGItPnJfbW9udGg7CisJcmV0dXJuIGEtPnJfZGF5b2Ztb250aCAtIGItPnJfZGF5b2Ztb250aDsKK30KKworZW51bSB7IFlFQVJfQllfWUVBUl9aT05FID0gMSB9OworCitzdGF0aWMgaW50CitzdHJpbmd6b25lKGNoYXIgKnJlc3VsdCwgY29uc3Qgc3RydWN0IHpvbmUgKmNvbnN0IHpwZmlyc3QsIGNvbnN0IGludCB6b25lY291bnQpCit7CisJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHpvbmUgKgl6cDsKKwlyZWdpc3RlciBzdHJ1Y3QgcnVsZSAqCQlycDsKKwlyZWdpc3RlciBzdHJ1Y3QgcnVsZSAqCQlzdGRycDsKKwlyZWdpc3RlciBzdHJ1Y3QgcnVsZSAqCQlkc3RycDsKKwlyZWdpc3RlciBpbnQJCQlpOworCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKgkJYWJicnZhcjsKKwlyZWdpc3RlciBpbnQJCQljb21wYXQgPSAwOworCXJlZ2lzdGVyIGludAkJCWM7CisJc2l6ZV90CQkJCWxlbjsKKwlpbnQJCQkJb2Zmc2V0bGVuOworCXN0cnVjdCBydWxlCQkJc3RkciwgZHN0cjsKKworCXJlc3VsdFswXSA9ICdcMCc7CisJenAgPSB6cGZpcnN0ICsgem9uZWNvdW50IC0gMTsKKwlzdGRycCA9IGRzdHJwID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgenAtPnpfbnJ1bGVzOyArK2kpIHsKKwkJcnAgPSAmenAtPnpfcnVsZXNbaV07CisJCWlmIChycC0+cl9oaXdhc251bSB8fCBycC0+cl9oaXllYXIgIT0gWklDX01BWCkKKwkJCWNvbnRpbnVlOworCQlpZiAocnAtPnJfeXJ0eXBlICE9IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKHJwLT5yX3N0ZG9mZiA9PSAwKSB7CisJCQlpZiAoc3RkcnAgPT0gTlVMTCkKKwkJCQlzdGRycCA9IHJwOworCQkJZWxzZQlyZXR1cm4gLTE7CisJCX0gZWxzZSB7CisJCQlpZiAoZHN0cnAgPT0gTlVMTCkKKwkJCQlkc3RycCA9IHJwOworCQkJZWxzZQlyZXR1cm4gLTE7CisJCX0KKwl9CisJaWYgKHN0ZHJwID09IE5VTEwgJiYgZHN0cnAgPT0gTlVMTCkgeworCQkvKgorCQkqKiBUaGVyZSBhcmUgbm8gcnVsZXMgcnVubmluZyB0aHJvdWdoICJtYXgiLgorCQkqKiBGaW5kIHRoZSBsYXRlc3Qgc3RkIHJ1bGUgaW4gc3RkYWJicnJwCisJCSoqIGFuZCBsYXRlc3QgcnVsZSBvZiBhbnkgdHlwZSBpbiBzdGRycC4KKwkJKi8KKwkJcmVnaXN0ZXIgc3RydWN0IHJ1bGUgKnN0ZGFiYnJycCA9IE5VTEw7CisJCWZvciAoaSA9IDA7IGkgPCB6cC0+el9ucnVsZXM7ICsraSkgeworCQkJcnAgPSAmenAtPnpfcnVsZXNbaV07CisJCQlpZiAocnAtPnJfc3Rkb2ZmID09IDAgJiYgcnVsZV9jbXAoc3RkYWJicnJwLCBycCkgPCAwKQorCQkJCXN0ZGFiYnJycCA9IHJwOworCQkJaWYgKHJ1bGVfY21wKHN0ZHJwLCBycCkgPCAwKQorCQkJCXN0ZHJwID0gcnA7CisJCX0KKwkJLyoKKwkJKiogSG9ycmlkIHNwZWNpYWwgY2FzZTogaWYgeWVhciBpcyAyMDM3LAorCQkqKiBwcmVzdW1lIHRoaXMgaXMgYSB6b25lIGhhbmRsZWQgb24gYSB5ZWFyLWJ5LXllYXIgYmFzaXM7CisJCSoqIGRvIG5vdCB0cnkgdG8gYXBwbHkgYSBydWxlIHRvIHRoZSB6b25lLgorCQkqLworCQlpZiAoc3RkcnAgIT0gTlVMTCAmJiBzdGRycC0+cl9oaXllYXIgPT0gMjAzNykKKwkJCXJldHVybiBZRUFSX0JZX1lFQVJfWk9ORTsKKworCQlpZiAoc3RkcnAgIT0gTlVMTCAmJiBzdGRycC0+cl9zdGRvZmYgIT0gMCkgeworCQkJLyogUGVycGV0dWFsIERTVC4gICovCisJCQlkc3RyLnJfbW9udGggPSBUTV9KQU5VQVJZOworCQkJZHN0ci5yX2R5Y29kZSA9IERDX0RPTTsKKwkJCWRzdHIucl9kYXlvZm1vbnRoID0gMTsKKwkJCWRzdHIucl90b2QgPSAwOworCQkJZHN0ci5yX3RvZGlzc3RkID0gZHN0ci5yX3RvZGlzZ210ID0gZmFsc2U7CisJCQlkc3RyLnJfc3Rkb2ZmID0gc3RkcnAtPnJfc3Rkb2ZmOworCQkJZHN0ci5yX2FiYnJ2YXIgPSBzdGRycC0+cl9hYmJydmFyOworCQkJc3Rkci5yX21vbnRoID0gVE1fREVDRU1CRVI7CisJCQlzdGRyLnJfZHljb2RlID0gRENfRE9NOworCQkJc3Rkci5yX2RheW9mbW9udGggPSAzMTsKKwkJCXN0ZHIucl90b2QgPSBTRUNTUEVSREFZICsgc3RkcnAtPnJfc3Rkb2ZmOworCQkJc3Rkci5yX3RvZGlzc3RkID0gc3Rkci5yX3RvZGlzZ210ID0gZmFsc2U7CisJCQlzdGRyLnJfc3Rkb2ZmID0gMDsKKwkJCXN0ZHIucl9hYmJydmFyCisJCQkgID0gKHN0ZGFiYnJycCA/IHN0ZGFiYnJycC0+cl9hYmJydmFyIDogIiIpOworCQkJZHN0cnAgPSAmZHN0cjsKKwkJCXN0ZHJwID0gJnN0ZHI7CisJCX0KKwl9CisJaWYgKHN0ZHJwID09IE5VTEwgJiYgKHpwLT56X25ydWxlcyAhPSAwIHx8IHpwLT56X3N0ZG9mZiAhPSAwKSkKKwkJcmV0dXJuIC0xOworCWFiYnJ2YXIgPSAoc3RkcnAgPT0gTlVMTCkgPyAiIiA6IHN0ZHJwLT5yX2FiYnJ2YXI7CisJbGVuID0gZG9hYmJyKHJlc3VsdCwgenAsIGFiYnJ2YXIsIDAsIHRydWUpOworCW9mZnNldGxlbiA9IHN0cmluZ29mZnNldChyZXN1bHQgKyBsZW4sIC16cC0+el9nbXRvZmYpOworCWlmICghIG9mZnNldGxlbikgeworCQlyZXN1bHRbMF0gPSAnXDAnOworCQlyZXR1cm4gLTE7CisJfQorCWxlbiArPSBvZmZzZXRsZW47CisJaWYgKGRzdHJwID09IE5VTEwpCisJCXJldHVybiBjb21wYXQ7CisJbGVuICs9IGRvYWJicihyZXN1bHQgKyBsZW4sIHpwLCBkc3RycC0+cl9hYmJydmFyLCBkc3RycC0+cl9zdGRvZmYsIHRydWUpOworCWlmIChkc3RycC0+cl9zdGRvZmYgIT0gU0VDU1BFUk1JTiAqIE1JTlNQRVJIT1VSKSB7CisJICBvZmZzZXRsZW4gPSBzdHJpbmdvZmZzZXQocmVzdWx0ICsgbGVuLAorCQkJCSAgIC0oenAtPnpfZ210b2ZmICsgZHN0cnAtPnJfc3Rkb2ZmKSk7CisJICBpZiAoISBvZmZzZXRsZW4pIHsKKwkgICAgcmVzdWx0WzBdID0gJ1wwJzsKKwkgICAgcmV0dXJuIC0xOworCSAgfQorCSAgbGVuICs9IG9mZnNldGxlbjsKKwl9CisJcmVzdWx0W2xlbisrXSA9ICcsJzsKKwljID0gc3RyaW5ncnVsZShyZXN1bHQgKyBsZW4sIGRzdHJwLCBkc3RycC0+cl9zdGRvZmYsIHpwLT56X2dtdG9mZik7CisJaWYgKGMgPCAwKSB7CisJCXJlc3VsdFswXSA9ICdcMCc7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGNvbXBhdCA8IGMpCisJCWNvbXBhdCA9IGM7CisJbGVuICs9IHN0cmxlbihyZXN1bHQgKyBsZW4pOworCXJlc3VsdFtsZW4rK10gPSAnLCc7CisJYyA9IHN0cmluZ3J1bGUocmVzdWx0ICsgbGVuLCBzdGRycCwgZHN0cnAtPnJfc3Rkb2ZmLCB6cC0+el9nbXRvZmYpOworCWlmIChjIDwgMCkgeworCQlyZXN1bHRbMF0gPSAnXDAnOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChjb21wYXQgPCBjKQorCQljb21wYXQgPSBjOworCXJldHVybiBjb21wYXQ7Cit9CisKK3N0YXRpYyB2b2lkCitvdXR6b25lKGNvbnN0IHN0cnVjdCB6b25lICp6cGZpcnN0LCBpbnQgem9uZWNvdW50KQoreworCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB6b25lICoJenA7CisJcmVnaXN0ZXIgc3RydWN0IHJ1bGUgKgkJcnA7CisJcmVnaXN0ZXIgaW50CQkJaSwgajsKKwlyZWdpc3RlciBib29sCQkJdXNlc3RhcnQsIHVzZXVudGlsOworCXJlZ2lzdGVyIHppY190CQkJc3RhcnR0aW1lLCB1bnRpbHRpbWU7CisJcmVnaXN0ZXIgemljX3QJCQlnbXRvZmY7CisJcmVnaXN0ZXIgemljX3QJCQlzdGRvZmY7CisJcmVnaXN0ZXIgemljX3QJCQl5ZWFyOworCXJlZ2lzdGVyIHppY190CQkJc3RhcnRvZmY7CisJcmVnaXN0ZXIgYm9vbAkJCXN0YXJ0dHRpc3N0ZDsKKwlyZWdpc3RlciBib29sCQkJc3RhcnR0dGlzZ210OworCXJlZ2lzdGVyIGludAkJCXR5cGU7CisJcmVnaXN0ZXIgY2hhciAqCQkJc3RhcnRidWY7CisJcmVnaXN0ZXIgY2hhciAqCQkJYWI7CisJcmVnaXN0ZXIgY2hhciAqCQkJZW52dmFyOworCXJlZ2lzdGVyIGludAkJCW1heF9hYmJyX2xlbjsKKwlyZWdpc3RlciBpbnQJCQltYXhfZW52dmFyX2xlbjsKKwlyZWdpc3RlciBib29sCQkJcHJvZHN0aWM7IC8qIGFsbCBydWxlcyBhcmUgbWluIHRvIG1heCAqLworCXJlZ2lzdGVyIGludAkJCWNvbXBhdDsKKwlyZWdpc3RlciBib29sCQkJZG9fZXh0ZW5kOworCXJlZ2lzdGVyIGNoYXIJCQl2ZXJzaW9uOworCisJbWF4X2FiYnJfbGVuID0gMiArIG1heF9mb3JtYXRfbGVuICsgbWF4X2FiYnJ2YXJfbGVuOworCW1heF9lbnZ2YXJfbGVuID0gMiAqIG1heF9hYmJyX2xlbiArIDUgKiA5OworCXN0YXJ0YnVmID0gZW1hbGxvYyhtYXhfYWJicl9sZW4gKyAxKTsKKwlhYiA9IGVtYWxsb2MobWF4X2FiYnJfbGVuICsgMSk7CisJZW52dmFyID0gZW1hbGxvYyhtYXhfZW52dmFyX2xlbiArIDEpOworCUlOSVRJQUxJWkUodW50aWx0aW1lKTsKKwlJTklUSUFMSVpFKHN0YXJ0dGltZSk7CisJLyoKKwkqKiBOb3cuIC4gLmZpbmFsbHkuIC4gLmdlbmVyYXRlIHNvbWUgdXNlZnVsIGRhdGEhCisJKi8KKwl0aW1lY250ID0gMDsKKwl0eXBlY250ID0gMDsKKwljaGFyY250ID0gMDsKKwlwcm9kc3RpYyA9IHpvbmVjb3VudCA9PSAxOworCS8qCisJKiogVGhhbmtzIHRvIEVhcmwgQ2hldworCSoqIGZvciBub3RpbmcgdGhlIG5lZWQgdG8gdW5jb25kaXRpb25hbGx5IGluaXRpYWxpemUgc3RhcnR0dGlzc3RkLgorCSovCisJc3RhcnR0dGlzc3RkID0gZmFsc2U7CisJc3RhcnR0dGlzZ210ID0gZmFsc2U7CisJbWluX3llYXIgPSBtYXhfeWVhciA9IEVQT0NIX1lFQVI7CisJaWYgKGxlYXBzZWVuKSB7CisJCXVwZGF0ZW1pbm1heChsZWFwbWlueWVhcik7CisJCXVwZGF0ZW1pbm1heChsZWFwbWF4eWVhciArIChsZWFwbWF4eWVhciA8IFpJQ19NQVgpKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHpvbmVjb3VudDsgKytpKSB7CisJCXpwID0gJnpwZmlyc3RbaV07CisJCWlmIChpIDwgem9uZWNvdW50IC0gMSkKKwkJCXVwZGF0ZW1pbm1heCh6cC0+el91bnRpbHJ1bGUucl9sb3llYXIpOworCQlmb3IgKGogPSAwOyBqIDwgenAtPnpfbnJ1bGVzOyArK2opIHsKKwkJCXJwID0gJnpwLT56X3J1bGVzW2pdOworCQkJaWYgKHJwLT5yX2xvd2FzbnVtKQorCQkJCXVwZGF0ZW1pbm1heChycC0+cl9sb3llYXIpOworCQkJaWYgKHJwLT5yX2hpd2FzbnVtKQorCQkJCXVwZGF0ZW1pbm1heChycC0+cl9oaXllYXIpOworCQkJaWYgKHJwLT5yX2xvd2FzbnVtIHx8IHJwLT5yX2hpd2FzbnVtKQorCQkJCXByb2RzdGljID0gZmFsc2U7CisJCX0KKwl9CisJLyoKKwkqKiBHZW5lcmF0ZSBsb3RzIG9mIGRhdGEgaWYgYSBydWxlIGNhbid0IGNvdmVyIGFsbCBmdXR1cmUgdGltZXMuCisJKi8KKwljb21wYXQgPSBzdHJpbmd6b25lKGVudnZhciwgenBmaXJzdCwgem9uZWNvdW50KTsKKwl2ZXJzaW9uID0gY29tcGF0IDwgMjAxMyA/IFpJQ19WRVJTSU9OX1BSRV8yMDEzIDogWklDX1ZFUlNJT047CisJZG9fZXh0ZW5kID0gY29tcGF0IDwgMCB8fCBjb21wYXQgPT0gWUVBUl9CWV9ZRUFSX1pPTkU7CisJaWYgKG5vaXNlKSB7CisJCWlmICghKmVudnZhcikKKwkJCXdhcm5pbmcoIiVzICVzIiwKKwkJCQlfKCJubyBQT1NJWCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3Igem9uZSIpLAorCQkJCXpwZmlyc3QtPnpfbmFtZSk7CisJCWVsc2UgaWYgKGNvbXBhdCAhPSAwICYmIGNvbXBhdCAhPSBZRUFSX0JZX1lFQVJfWk9ORSkgeworCQkJLyogQ2lyY2EtQ09NUEFUIGNsaWVudHMsIGFuZCBlYXJsaWVyIGNsaWVudHMsIG1pZ2h0CisJCQkgICBub3Qgd29yayBmb3IgdGhpcyB6b25lIHdoZW4gZ2l2ZW4gZGF0ZXMgYmVmb3JlCisJCQkgICAxOTcwIG9yIGFmdGVyIDIwMzguICAqLworCQkJd2FybmluZyhfKCIlczogcHJlLSVkIGNsaWVudHMgbWF5IG1pc2hhbmRsZSIKKwkJCQkgICIgZGlzdGFudCB0aW1lc3RhbXBzIiksCisJCQkJenBmaXJzdC0+el9uYW1lLCBjb21wYXQpOworCQl9CisJfQorCWlmIChkb19leHRlbmQpIHsKKwkJLyoKKwkJKiogU2VhcmNoIHRocm91Z2ggYSBjb3VwbGUgb2YgZXh0cmEgeWVhcnMgcGFzdCB0aGUgb2J2aW91cworCQkqKiA0MDAsIHRvIGF2b2lkIGVkZ2UgY2FzZXMuICBGb3IgZXhhbXBsZSwgc3VwcG9zZSBhIG5vbi1QT1NJWAorCQkqKiBydWxlIGFwcGxpZXMgZnJvbSAyMDEyIG9ud2FyZHMgYW5kIGhhcyB0cmFuc2l0aW9ucyBpbiBNYXJjaAorCQkqKiBhbmQgU2VwdGVtYmVyLCBwbHVzIHNvbWUgb25lLW9mZiB0cmFuc2l0aW9ucyBpbiBOb3ZlbWJlcgorCQkqKiAyMDEzLiAgSWYgemljIGxvb2tlZCBvbmx5IGF0IHRoZSBsYXN0IDQwMCB5ZWFycywgaXQgd291bGQKKwkJKiogc2V0IG1heF95ZWFyPTI0MTMsIHdpdGggdGhlIGludGVudCB0aGF0IHRoZSA0MDAgeWVhcnMgMjAxNAorCQkqKiB0aHJvdWdoIDI0MTMgd2lsbCBiZSByZXBlYXRlZC4gIFRoZSBsYXN0IHRyYW5zaXRpb24gbGlzdGVkCisJCSoqIGluIHRoZSB0emZpbGUgd291bGQgYmUgaW4gMjQxMy0wOSwgbGVzcyB0aGFuIDQwMCB5ZWFycworCQkqKiBhZnRlciB0aGUgbGFzdCBvbmUtb2ZmIHRyYW5zaXRpb24gaW4gMjAxMy0xMS4gIFR3byB5ZWFycworCQkqKiBtaWdodCBiZSBvdmVya2lsbCwgYnV0IHdpdGggdGhlIGtpbmQgb2YgZWRnZSBjYXNlcworCQkqKiBhdmFpbGFibGUgd2UncmUgbm90IHN1cmUgdGhhdCBvbmUgeWVhciB3b3VsZCBzdWZmaWNlLgorCQkqLworCQllbnVtIHsgeWVhcnNfb2Zfb2JzZXJ2YXRpb25zID0gWUVBUlNQRVJSRVBFQVQgKyAyIH07CisKKwkJaWYgKG1pbl95ZWFyID49IFpJQ19NSU4gKyB5ZWFyc19vZl9vYnNlcnZhdGlvbnMpCisJCQltaW5feWVhciAtPSB5ZWFyc19vZl9vYnNlcnZhdGlvbnM7CisJCWVsc2UJbWluX3llYXIgPSBaSUNfTUlOOworCQlpZiAobWF4X3llYXIgPD0gWklDX01BWCAtIHllYXJzX29mX29ic2VydmF0aW9ucykKKwkJCW1heF95ZWFyICs9IHllYXJzX29mX29ic2VydmF0aW9uczsKKwkJZWxzZQltYXhfeWVhciA9IFpJQ19NQVg7CisJCS8qCisJCSoqIFJlZ2FyZGxlc3Mgb2YgYW55IG9mIHRoZSBhYm92ZSwKKwkJKiogZm9yIGEgInByb0RTVGljIiB6b25lIHdoaWNoIHNwZWNpZmllcyB0aGF0IGl0cyBydWxlcworCQkqKiBhbHdheXMgaGF2ZSBhbmQgYWx3YXlzIHdpbGwgYmUgaW4gZWZmZWN0LAorCQkqKiB3ZSBvbmx5IG5lZWQgb25lIGN5Y2xlIHRvIGRlZmluZSB0aGUgem9uZS4KKwkJKi8KKwkJaWYgKHByb2RzdGljKSB7CisJCQltaW5feWVhciA9IDE5MDA7CisJCQltYXhfeWVhciA9IG1pbl95ZWFyICsgeWVhcnNfb2Zfb2JzZXJ2YXRpb25zOworCQl9CisJfQorCS8qCisJKiogRm9yIHRoZSBiZW5lZml0IG9mIG9sZGVyIHN5c3RlbXMsCisJKiogZ2VuZXJhdGUgZGF0YSBmcm9tIDE5MDAgdGhyb3VnaCAyMDM3LgorCSovCisJaWYgKG1pbl95ZWFyID4gMTkwMCkKKwkJbWluX3llYXIgPSAxOTAwOworCWlmIChtYXhfeWVhciA8IDIwMzcpCisJCW1heF95ZWFyID0gMjAzNzsKKwlmb3IgKGkgPSAwOyBpIDwgem9uZWNvdW50OyArK2kpIHsKKwkJLyoKKwkJKiogQSBndWVzcyB0aGF0IG1heSB3ZWxsIGJlIGNvcnJlY3RlZCBsYXRlci4KKwkJKi8KKwkJc3Rkb2ZmID0gMDsKKwkJenAgPSAmenBmaXJzdFtpXTsKKwkJdXNlc3RhcnQgPSBpID4gMCAmJiAoenAgLSAxKS0+el91bnRpbHRpbWUgPiBiaWdfYmFuZ190aW1lOworCQl1c2V1bnRpbCA9IGkgPCAoem9uZWNvdW50IC0gMSk7CisJCWlmICh1c2V1bnRpbCAmJiB6cC0+el91bnRpbHRpbWUgPD0gYmlnX2JhbmdfdGltZSkKKwkJCWNvbnRpbnVlOworCQlnbXRvZmYgPSB6cC0+el9nbXRvZmY7CisJCWVhdCh6cC0+el9maWxlbmFtZSwgenAtPnpfbGluZW51bSk7CisJCSpzdGFydGJ1ZiA9ICdcMCc7CisJCXN0YXJ0b2ZmID0genAtPnpfZ210b2ZmOworCQlpZiAoenAtPnpfbnJ1bGVzID09IDApIHsKKwkJCXN0ZG9mZiA9IHpwLT56X3N0ZG9mZjsKKwkJCWRvYWJicihzdGFydGJ1ZiwgenAsIE5VTEwsIHN0ZG9mZiwgZmFsc2UpOworCQkJdHlwZSA9IGFkZHR5cGUob2FkZCh6cC0+el9nbXRvZmYsIHN0ZG9mZiksCisJCQkJc3RhcnRidWYsIHN0ZG9mZiAhPSAwLCBzdGFydHR0aXNzdGQsCisJCQkJc3RhcnR0dGlzZ210KTsKKwkJCWlmICh1c2VzdGFydCkgeworCQkJCWFkZHR0KHN0YXJ0dGltZSwgdHlwZSk7CisJCQkJdXNlc3RhcnQgPSBmYWxzZTsKKwkJCX0gZWxzZQlhZGR0dChiaWdfYmFuZ190aW1lLCB0eXBlKTsKKwkJfSBlbHNlIGZvciAoeWVhciA9IG1pbl95ZWFyOyB5ZWFyIDw9IG1heF95ZWFyOyArK3llYXIpIHsKKwkJCWlmICh1c2V1bnRpbCAmJiB5ZWFyID4genAtPnpfdW50aWxydWxlLnJfaGl5ZWFyKQorCQkJCWJyZWFrOworCQkJLyoKKwkJCSoqIE1hcmsgd2hpY2ggcnVsZXMgdG8gZG8gaW4gdGhlIGN1cnJlbnQgeWVhci4KKwkJCSoqIEZvciB0aG9zZSB0byBkbywgY2FsY3VsYXRlIHJweXRpbWUocnAsIHllYXIpOworCQkJKi8KKwkJCWZvciAoaiA9IDA7IGogPCB6cC0+el9ucnVsZXM7ICsraikgeworCQkJCXJwID0gJnpwLT56X3J1bGVzW2pdOworCQkJCWVhdHMoenAtPnpfZmlsZW5hbWUsIHpwLT56X2xpbmVudW0sCisJCQkJCXJwLT5yX2ZpbGVuYW1lLCBycC0+cl9saW5lbnVtKTsKKwkJCQlycC0+cl90b2RvID0geWVhciA+PSBycC0+cl9sb3llYXIgJiYKKwkJCQkJCXllYXIgPD0gcnAtPnJfaGl5ZWFyICYmCisJCQkJCQl5ZWFyaXN0eXBlKHllYXIsIHJwLT5yX3lydHlwZSk7CisJCQkJaWYgKHJwLT5yX3RvZG8pCisJCQkJCXJwLT5yX3RlbXAgPSBycHl0aW1lKHJwLCB5ZWFyKTsKKwkJCX0KKwkJCWZvciAoIDsgOyApIHsKKwkJCQlyZWdpc3RlciBpbnQJazsKKwkJCQlyZWdpc3RlciB6aWNfdAlqdGltZSwga3RpbWU7CisJCQkJcmVnaXN0ZXIgemljX3QJb2Zmc2V0OworCisJCQkJSU5JVElBTElaRShrdGltZSk7CisJCQkJaWYgKHVzZXVudGlsKSB7CisJCQkJCS8qCisJCQkJCSoqIFR1cm4gdW50aWx0aW1lIGludG8gVVQKKwkJCQkJKiogYXNzdW1pbmcgdGhlIGN1cnJlbnQgZ210b2ZmIGFuZAorCQkJCQkqKiBzdGRvZmYgdmFsdWVzLgorCQkJCQkqLworCQkJCQl1bnRpbHRpbWUgPSB6cC0+el91bnRpbHRpbWU7CisJCQkJCWlmICghenAtPnpfdW50aWxydWxlLnJfdG9kaXNnbXQpCisJCQkJCQl1bnRpbHRpbWUgPSB0YWRkKHVudGlsdGltZSwKKwkJCQkJCQktZ210b2ZmKTsKKwkJCQkJaWYgKCF6cC0+el91bnRpbHJ1bGUucl90b2Rpc3N0ZCkKKwkJCQkJCXVudGlsdGltZSA9IHRhZGQodW50aWx0aW1lLAorCQkJCQkJCS1zdGRvZmYpOworCQkJCX0KKwkJCQkvKgorCQkJCSoqIEZpbmQgdGhlIHJ1bGUgKG9mIHRob3NlIHRvIGRvLCBpZiBhbnkpCisJCQkJKiogdGhhdCB0YWtlcyBlZmZlY3QgZWFybGllc3QgaW4gdGhlIHllYXIuCisJCQkJKi8KKwkJCQlrID0gLTE7CisJCQkJZm9yIChqID0gMDsgaiA8IHpwLT56X25ydWxlczsgKytqKSB7CisJCQkJCXJwID0gJnpwLT56X3J1bGVzW2pdOworCQkJCQlpZiAoIXJwLT5yX3RvZG8pCisJCQkJCQljb250aW51ZTsKKwkJCQkJZWF0cyh6cC0+el9maWxlbmFtZSwgenAtPnpfbGluZW51bSwKKwkJCQkJCXJwLT5yX2ZpbGVuYW1lLCBycC0+cl9saW5lbnVtKTsKKwkJCQkJb2Zmc2V0ID0gcnAtPnJfdG9kaXNnbXQgPyAwIDogZ210b2ZmOworCQkJCQlpZiAoIXJwLT5yX3RvZGlzc3RkKQorCQkJCQkJb2Zmc2V0ID0gb2FkZChvZmZzZXQsIHN0ZG9mZik7CisJCQkJCWp0aW1lID0gcnAtPnJfdGVtcDsKKwkJCQkJaWYgKGp0aW1lID09IG1pbl90aW1lIHx8CisJCQkJCQlqdGltZSA9PSBtYXhfdGltZSkKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJanRpbWUgPSB0YWRkKGp0aW1lLCAtb2Zmc2V0KTsKKwkJCQkJaWYgKGsgPCAwIHx8IGp0aW1lIDwga3RpbWUpIHsKKwkJCQkJCWsgPSBqOworCQkJCQkJa3RpbWUgPSBqdGltZTsKKwkJCQkJfSBlbHNlIGlmIChqdGltZSA9PSBrdGltZSkgeworCQkJCQkgIGNoYXIgY29uc3QgKmR1cF9ydWxlc19tc2cgPQorCQkJCQkgICAgXygidHdvIHJ1bGVzIGZvciBzYW1lIGluc3RhbnQiKTsKKwkJCQkJICBlYXRzKHpwLT56X2ZpbGVuYW1lLCB6cC0+el9saW5lbnVtLAorCQkJCQkgICAgICAgcnAtPnJfZmlsZW5hbWUsIHJwLT5yX2xpbmVudW0pOworCQkJCQkgIHdhcm5pbmcoIiVzIiwgZHVwX3J1bGVzX21zZyk7CisJCQkJCSAgcnAgPSAmenAtPnpfcnVsZXNba107CisJCQkJCSAgZWF0cyh6cC0+el9maWxlbmFtZSwgenAtPnpfbGluZW51bSwKKwkJCQkJICAgICAgIHJwLT5yX2ZpbGVuYW1lLCBycC0+cl9saW5lbnVtKTsKKwkJCQkJICBlcnJvcigiJXMiLCBkdXBfcnVsZXNfbXNnKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoayA8IDApCisJCQkJCWJyZWFrOwkvKiBnbyBvbiB0byBuZXh0IHllYXIgKi8KKwkJCQlycCA9ICZ6cC0+el9ydWxlc1trXTsKKwkJCQlycC0+cl90b2RvID0gZmFsc2U7CisJCQkJaWYgKHVzZXVudGlsICYmIGt0aW1lID49IHVudGlsdGltZSkKKwkJCQkJYnJlYWs7CisJCQkJc3Rkb2ZmID0gcnAtPnJfc3Rkb2ZmOworCQkJCWlmICh1c2VzdGFydCAmJiBrdGltZSA9PSBzdGFydHRpbWUpCisJCQkJCXVzZXN0YXJ0ID0gZmFsc2U7CisJCQkJaWYgKHVzZXN0YXJ0KSB7CisJCQkJCWlmIChrdGltZSA8IHN0YXJ0dGltZSkgeworCQkJCQkJc3RhcnRvZmYgPSBvYWRkKHpwLT56X2dtdG9mZiwKKwkJCQkJCQlzdGRvZmYpOworCQkJCQkJZG9hYmJyKHN0YXJ0YnVmLCB6cCwKKwkJCQkJCQlycC0+cl9hYmJydmFyLAorCQkJCQkJCXJwLT5yX3N0ZG9mZiwKKwkJCQkJCQlmYWxzZSk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlpZiAoKnN0YXJ0YnVmID09ICdcMCcgJiYKKwkJCQkJCXN0YXJ0b2ZmID09IG9hZGQoenAtPnpfZ210b2ZmLAorCQkJCQkJc3Rkb2ZmKSkgeworCQkJCQkJCWRvYWJicihzdGFydGJ1ZiwKKwkJCQkJCQkJenAsCisJCQkJCQkJCXJwLT5yX2FiYnJ2YXIsCisJCQkJCQkJCXJwLT5yX3N0ZG9mZiwKKwkJCQkJCQkJZmFsc2UpOworCQkJCQl9CisJCQkJfQorCQkJCWVhdHMoenAtPnpfZmlsZW5hbWUsIHpwLT56X2xpbmVudW0sCisJCQkJCXJwLT5yX2ZpbGVuYW1lLCBycC0+cl9saW5lbnVtKTsKKwkJCQlkb2FiYnIoYWIsIHpwLCBycC0+cl9hYmJydmFyLAorCQkJCSAgICAgICBycC0+cl9zdGRvZmYsIGZhbHNlKTsKKwkJCQlvZmZzZXQgPSBvYWRkKHpwLT56X2dtdG9mZiwgcnAtPnJfc3Rkb2ZmKTsKKwkJCQl0eXBlID0gYWRkdHlwZShvZmZzZXQsIGFiLCBycC0+cl9zdGRvZmYgIT0gMCwKKwkJCQkJcnAtPnJfdG9kaXNzdGQsIHJwLT5yX3RvZGlzZ210KTsKKwkJCQlhZGR0dChrdGltZSwgdHlwZSk7CisJCQl9CisJCX0KKwkJaWYgKHVzZXN0YXJ0KSB7CisJCQlpZiAoKnN0YXJ0YnVmID09ICdcMCcgJiYKKwkJCQl6cC0+el9mb3JtYXQgIT0gTlVMTCAmJgorCQkJCXN0cmNocih6cC0+el9mb3JtYXQsICclJykgPT0gTlVMTCAmJgorCQkJCXN0cmNocih6cC0+el9mb3JtYXQsICcvJykgPT0gTlVMTCkKKwkJCQkJc3RyY3B5KHN0YXJ0YnVmLCB6cC0+el9mb3JtYXQpOworCQkJZWF0KHpwLT56X2ZpbGVuYW1lLCB6cC0+el9saW5lbnVtKTsKKwkJCWlmICgqc3RhcnRidWYgPT0gJ1wwJykKK2Vycm9yKF8oImNhbid0IGRldGVybWluZSB0aW1lIHpvbmUgYWJicmV2aWF0aW9uIHRvIHVzZSBqdXN0IGFmdGVyIHVudGlsIHRpbWUiKSk7CisJCQllbHNlCWFkZHR0KHN0YXJ0dGltZSwKKwkJCQkJYWRkdHlwZShzdGFydG9mZiwgc3RhcnRidWYsCisJCQkJCQlzdGFydG9mZiAhPSB6cC0+el9nbXRvZmYsCisJCQkJCQlzdGFydHR0aXNzdGQsCisJCQkJCQlzdGFydHR0aXNnbXQpKTsKKwkJfQorCQkvKgorCQkqKiBOb3cgd2UgbWF5IGdldCB0byBzZXQgc3RhcnR0aW1lIGZvciB0aGUgbmV4dCB6b25lIGxpbmUuCisJCSovCisJCWlmICh1c2V1bnRpbCkgeworCQkJc3RhcnR0dGlzc3RkID0genAtPnpfdW50aWxydWxlLnJfdG9kaXNzdGQ7CisJCQlzdGFydHR0aXNnbXQgPSB6cC0+el91bnRpbHJ1bGUucl90b2Rpc2dtdDsKKwkJCXN0YXJ0dGltZSA9IHpwLT56X3VudGlsdGltZTsKKwkJCWlmICghc3RhcnR0dGlzc3RkKQorCQkJCXN0YXJ0dGltZSA9IHRhZGQoc3RhcnR0aW1lLCAtc3Rkb2ZmKTsKKwkJCWlmICghc3RhcnR0dGlzZ210KQorCQkJCXN0YXJ0dGltZSA9IHRhZGQoc3RhcnR0aW1lLCAtZ210b2ZmKTsKKwkJfQorCX0KKwlpZiAoZG9fZXh0ZW5kKSB7CisJCS8qCisJCSoqIElmIHdlJ3JlIGV4dGVuZGluZyB0aGUgZXhwbGljaXRseSBsaXN0ZWQgb2JzZXJ2YXRpb25zCisJCSoqIGZvciA0MDAgeWVhcnMgYmVjYXVzZSB3ZSBjYW4ndCBmaWxsIHRoZSBQT1NJWC1UWiBmaWVsZCwKKwkJKiogY2hlY2sgd2hldGhlciB3ZSBhY3R1YWxseSBlbmRlZCB1cCBleHBsaWNpdGx5IGxpc3RpbmcKKwkJKiogb2JzZXJ2YXRpb25zIHRocm91Z2ggdGhhdCBwZXJpb2QuICBJZiB0aGVyZSBhcmVuJ3QgYW55CisJCSoqIG5lYXIgdGhlIGVuZCBvZiB0aGUgNDAwLXllYXIgcGVyaW9kLCBhZGQgYSByZWR1bmRhbnQKKwkJKiogb25lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbmFsIHllYXIsIHRvIG1ha2UgaXQgY2xlYXIKKwkJKiogdGhhdCB3ZSBhcmUgY2xhaW1pbmcgdG8gaGF2ZSBkZWZpbml0ZSBrbm93bGVkZ2Ugb2YKKwkJKiogdGhlIGxhY2sgb2YgdHJhbnNpdGlvbnMgdXAgdG8gdGhhdCBwb2ludC4KKwkJKi8KKwkJc3RydWN0IHJ1bGUgeHI7CisJCXN0cnVjdCBhdHR5cGUgKmxhc3RhdDsKKwkJeHIucl9tb250aCA9IFRNX0pBTlVBUlk7CisJCXhyLnJfZHljb2RlID0gRENfRE9NOworCQl4ci5yX2RheW9mbW9udGggPSAxOworCQl4ci5yX3RvZCA9IDA7CisJCWZvciAobGFzdGF0ID0gJmF0dHlwZXNbMF0sIGkgPSAxOyBpIDwgdGltZWNudDsgaSsrKQorCQkJaWYgKGF0dHlwZXNbaV0uYXQgPiBsYXN0YXQtPmF0KQorCQkJCWxhc3RhdCA9ICZhdHR5cGVzW2ldOworCQlpZiAobGFzdGF0LT5hdCA8IHJweXRpbWUoJnhyLCBtYXhfeWVhciAtIDEpKSB7CisJCQkvKgorCQkJKiogQ3JlYXRlIG5ldyB0eXBlIGNvZGUgZm9yIHRoZSByZWR1bmRhbnQgZW50cnksCisJCQkqKiB0byBwcmV2ZW50IGl0IGJlaW5nIG9wdGltaXplZCBhd2F5LgorCQkJKi8KKwkJCWlmICh0eXBlY250ID49IFRaX01BWF9UWVBFUykgeworCQkJCWVycm9yKF8oInRvbyBtYW55IGxvY2FsIHRpbWUgdHlwZXMiKSk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJZ210b2Zmc1t0eXBlY250XSA9IGdtdG9mZnNbbGFzdGF0LT50eXBlXTsKKwkJCWlzZHN0c1t0eXBlY250XSA9IGlzZHN0c1tsYXN0YXQtPnR5cGVdOworCQkJdHRpc3N0ZHNbdHlwZWNudF0gPSB0dGlzc3Rkc1tsYXN0YXQtPnR5cGVdOworCQkJdHRpc2dtdHNbdHlwZWNudF0gPSB0dGlzZ210c1tsYXN0YXQtPnR5cGVdOworCQkJYWJicmluZHNbdHlwZWNudF0gPSBhYmJyaW5kc1tsYXN0YXQtPnR5cGVdOworCQkJKyt0eXBlY250OworCQkJYWRkdHQocnB5dGltZSgmeHIsIG1heF95ZWFyICsgMSksIHR5cGVjbnQtMSk7CisJCX0KKwl9CisJd3JpdGV6b25lKHpwZmlyc3QtPnpfbmFtZSwgZW52dmFyLCB2ZXJzaW9uKTsKKwlmcmVlKHN0YXJ0YnVmKTsKKwlmcmVlKGFiKTsKKwlmcmVlKGVudnZhcik7Cit9CisKK3N0YXRpYyB2b2lkCithZGR0dCh6aWNfdCBzdGFydHRpbWUsIGludCB0eXBlKQoreworCWlmIChzdGFydHRpbWUgPD0gYmlnX2JhbmdfdGltZSB8fAorCQkodGltZWNudCA9PSAxICYmIGF0dHlwZXNbMF0uYXQgPCBiaWdfYmFuZ190aW1lKSkgeworCQlnbXRvZmZzWzBdID0gZ210b2Zmc1t0eXBlXTsKKwkJaXNkc3RzWzBdID0gaXNkc3RzW3R5cGVdOworCQl0dGlzc3Rkc1swXSA9IHR0aXNzdGRzW3R5cGVdOworCQl0dGlzZ210c1swXSA9IHR0aXNnbXRzW3R5cGVdOworCQlpZiAoYWJicmluZHNbdHlwZV0gIT0gMCkKKwkJCXN0cmNweShjaGFycywgJmNoYXJzW2FiYnJpbmRzW3R5cGVdXSk7CisJCWFiYnJpbmRzWzBdID0gMDsKKwkJY2hhcmNudCA9IHN0cmxlbihjaGFycykgKyAxOworCQl0eXBlY250ID0gMTsKKwkJdGltZWNudCA9IDA7CisJCXR5cGUgPSAwOworCX0KKwlhdHR5cGVzID0gZ3Jvd2FsbG9jKGF0dHlwZXMsIHNpemVvZiAqYXR0eXBlcywgdGltZWNudCwgJnRpbWVjbnRfYWxsb2MpOworCWF0dHlwZXNbdGltZWNudF0uYXQgPSBzdGFydHRpbWU7CisJYXR0eXBlc1t0aW1lY250XS50eXBlID0gdHlwZTsKKwkrK3RpbWVjbnQ7Cit9CisKK3N0YXRpYyBpbnQKK2FkZHR5cGUoemljX3QgZ210b2ZmLCBjaGFyIGNvbnN0ICphYmJyLCBib29sIGlzZHN0LCBib29sIHR0aXNzdGQsIGJvb2wgdHRpc2dtdCkKK3sKKwlyZWdpc3RlciBpbnQJaSwgajsKKworCS8qCisJKiogU2VlIGlmIHRoZXJlJ3MgYWxyZWFkeSBhbiBlbnRyeSBmb3IgdGhpcyB6b25lIHR5cGUuCisJKiogSWYgc28sIGp1c3QgcmV0dXJuIGl0cyBpbmRleC4KKwkqLworCWZvciAoaSA9IDA7IGkgPCB0eXBlY250OyArK2kpIHsKKwkJaWYgKGdtdG9mZiA9PSBnbXRvZmZzW2ldICYmIGlzZHN0ID09IGlzZHN0c1tpXSAmJgorCQkJc3RyY21wKGFiYnIsICZjaGFyc1thYmJyaW5kc1tpXV0pID09IDAgJiYKKwkJCXR0aXNzdGQgPT0gdHRpc3N0ZHNbaV0gJiYKKwkJCXR0aXNnbXQgPT0gdHRpc2dtdHNbaV0pCisJCQkJcmV0dXJuIGk7CisJfQorCS8qCisJKiogVGhlcmUgaXNuJ3Qgb25lOyBhZGQgYSBuZXcgb25lLCB1bmxlc3MgdGhlcmUgYXJlIGFscmVhZHkgdG9vCisJKiogbWFueS4KKwkqLworCWlmICh0eXBlY250ID49IFRaX01BWF9UWVBFUykgeworCQllcnJvcihfKCJ0b28gbWFueSBsb2NhbCB0aW1lIHR5cGVzIikpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmICghICgtMUwgLSAyMTQ3NDgzNjQ3TCA8PSBnbXRvZmYgJiYgZ210b2ZmIDw9IDIxNDc0ODM2NDdMKSkgeworCQllcnJvcihfKCJVVCBvZmZzZXQgb3V0IG9mIHJhbmdlIikpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWdtdG9mZnNbaV0gPSBnbXRvZmY7CisJaXNkc3RzW2ldID0gaXNkc3Q7CisJdHRpc3N0ZHNbaV0gPSB0dGlzc3RkOworCXR0aXNnbXRzW2ldID0gdHRpc2dtdDsKKworCWZvciAoaiA9IDA7IGogPCBjaGFyY250OyArK2opCisJCWlmIChzdHJjbXAoJmNoYXJzW2pdLCBhYmJyKSA9PSAwKQorCQkJYnJlYWs7CisJaWYgKGogPT0gY2hhcmNudCkKKwkJbmV3YWJicihhYmJyKTsKKwlhYmJyaW5kc1tpXSA9IGo7CisJKyt0eXBlY250OworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZAorbGVhcGFkZCh6aWNfdCB0LCBib29sIHBvc2l0aXZlLCBpbnQgcm9sbGluZywgaW50IGNvdW50KQoreworCXJlZ2lzdGVyIGludAlpLCBqOworCisJaWYgKGxlYXBjbnQgKyAocG9zaXRpdmUgPyBjb3VudCA6IDEpID4gVFpfTUFYX0xFQVBTKSB7CisJCWVycm9yKF8oInRvbyBtYW55IGxlYXAgc2Vjb25kcyIpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbGVhcGNudDsgKytpKQorCQlpZiAodCA8PSB0cmFuc1tpXSkgeworCQkJaWYgKHQgPT0gdHJhbnNbaV0pIHsKKwkJCQllcnJvcihfKCJyZXBlYXRlZCBsZWFwIHNlY29uZCBtb21lbnQiKSk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwlkbyB7CisJCWZvciAoaiA9IGxlYXBjbnQ7IGogPiBpOyAtLWopIHsKKwkJCXRyYW5zW2pdID0gdHJhbnNbaiAtIDFdOworCQkJY29ycltqXSA9IGNvcnJbaiAtIDFdOworCQkJcm9sbFtqXSA9IHJvbGxbaiAtIDFdOworCQl9CisJCXRyYW5zW2ldID0gdDsKKwkJY29ycltpXSA9IHBvc2l0aXZlID8gMSA6IC1jb3VudDsKKwkJcm9sbFtpXSA9IHJvbGxpbmc7CisJCSsrbGVhcGNudDsKKwl9IHdoaWxlIChwb3NpdGl2ZSAmJiAtLWNvdW50ICE9IDApOworfQorCitzdGF0aWMgdm9pZAorYWRqbGVhcCh2b2lkKQoreworCXJlZ2lzdGVyIGludAlpOworCXJlZ2lzdGVyIHppY190CWxhc3QgPSAwOworCisJLyoKKwkqKiBwcm9wYWdhdGUgbGVhcCBzZWNvbmRzIGZvcndhcmQKKwkqLworCWZvciAoaSA9IDA7IGkgPCBsZWFwY250OyArK2kpIHsKKwkJdHJhbnNbaV0gPSB0YWRkKHRyYW5zW2ldLCBsYXN0KTsKKwkJbGFzdCA9IGNvcnJbaV0gKz0gbGFzdDsKKwl9Cit9CisKK3N0YXRpYyBib29sCit5ZWFyaXN0eXBlKGludCB5ZWFyLCBjb25zdCBjaGFyICp0eXBlKQoreworCXN0YXRpYyBjaGFyICoJYnVmOworCWludAkJcmVzdWx0OworCisJaWYgKHR5cGUgPT0gTlVMTCB8fCAqdHlwZSA9PSAnXDAnKQorCQlyZXR1cm4gdHJ1ZTsKKwlidWYgPSBlcmVhbGxvYyhidWYsIDEzMiArIHN0cmxlbih5aXRjb21tYW5kKSArIHN0cmxlbih0eXBlKSk7CisJc3ByaW50ZihidWYsICIlcyAlZCAlcyIsIHlpdGNvbW1hbmQsIHllYXIsIHR5cGUpOworCXJlc3VsdCA9IHN5c3RlbShidWYpOworCWlmIChXSUZFWElURUQocmVzdWx0KSkgc3dpdGNoIChXRVhJVFNUQVRVUyhyZXN1bHQpKSB7CisJCWNhc2UgMDoKKwkJCXJldHVybiB0cnVlOworCQljYXNlIDE6CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVycm9yKF8oIldpbGQgcmVzdWx0IGZyb20gY29tbWFuZCBleGVjdXRpb24iKSk7CisJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBjb21tYW5kIHdhcyAnJXMnLCByZXN1bHQgd2FzICVkXG4iKSwKKwkJcHJvZ25hbWUsIGJ1ZiwgcmVzdWx0KTsKKwlmb3IgKCA7IDsgKQorCQlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKKy8qIElzIEEgYSBzcGFjZSBjaGFyYWN0ZXIgaW4gdGhlIEMgbG9jYWxlPyAgKi8KK3N0YXRpYyBib29sCitpc19zcGFjZShjaGFyIGEpCit7CisJc3dpdGNoIChhKSB7CisJICBkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJICBjYXNlICcgJzogY2FzZSAnXGYnOiBjYXNlICdcbic6IGNhc2UgJ1xyJzogY2FzZSAnXHQnOiBjYXNlICdcdic6CisJCXJldHVybiB0cnVlOworCX0KK30KKworLyogSXMgQSBhbiBhbHBoYWJldGljIGNoYXJhY3RlciBpbiB0aGUgQyBsb2NhbGU/ICAqLworc3RhdGljIGJvb2wKK2lzX2FscGhhKGNoYXIgYSkKK3sKKwlzd2l0Y2ggKGEpIHsKKwkgIGRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwkgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6IGNhc2UgJ0cnOgorCSAgY2FzZSAnSCc6IGNhc2UgJ0knOiBjYXNlICdKJzogY2FzZSAnSyc6IGNhc2UgJ0wnOiBjYXNlICdNJzogY2FzZSAnTic6CisJICBjYXNlICdPJzogY2FzZSAnUCc6IGNhc2UgJ1EnOiBjYXNlICdSJzogY2FzZSAnUyc6IGNhc2UgJ1QnOiBjYXNlICdVJzoKKwkgIGNhc2UgJ1YnOiBjYXNlICdXJzogY2FzZSAnWCc6IGNhc2UgJ1knOiBjYXNlICdaJzoKKwkgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOgorCSAgY2FzZSAnaCc6IGNhc2UgJ2knOiBjYXNlICdqJzogY2FzZSAnayc6IGNhc2UgJ2wnOiBjYXNlICdtJzogY2FzZSAnbic6CisJICBjYXNlICdvJzogY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNlICdyJzogY2FzZSAncyc6IGNhc2UgJ3QnOiBjYXNlICd1JzoKKwkgIGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6IGNhc2UgJ3knOiBjYXNlICd6JzoKKwkJcmV0dXJuIHRydWU7CisJfQorfQorCisvKiBJZiBBIGlzIGFuIHVwcGVyY2FzZSBjaGFyYWN0ZXIgaW4gdGhlIEMgbG9jYWxlLCByZXR1cm4gaXRzIGxvd2VyY2FzZQorICAgY291bnRlcnBhcnQuICBPdGhlcndpc2UsIHJldHVybiBBLiAgKi8KK3N0YXRpYyBjaGFyCitsb3dlcml0KGNoYXIgYSkKK3sKKwlzd2l0Y2ggKGEpIHsKKwkgIGRlZmF1bHQ6IHJldHVybiBhOworCSAgY2FzZSAnQSc6IHJldHVybiAnYSc7IGNhc2UgJ0InOiByZXR1cm4gJ2InOyBjYXNlICdDJzogcmV0dXJuICdjJzsKKwkgIGNhc2UgJ0QnOiByZXR1cm4gJ2QnOyBjYXNlICdFJzogcmV0dXJuICdlJzsgY2FzZSAnRic6IHJldHVybiAnZic7CisJICBjYXNlICdHJzogcmV0dXJuICdnJzsgY2FzZSAnSCc6IHJldHVybiAnaCc7IGNhc2UgJ0knOiByZXR1cm4gJ2knOworCSAgY2FzZSAnSic6IHJldHVybiAnaic7IGNhc2UgJ0snOiByZXR1cm4gJ2snOyBjYXNlICdMJzogcmV0dXJuICdsJzsKKwkgIGNhc2UgJ00nOiByZXR1cm4gJ20nOyBjYXNlICdOJzogcmV0dXJuICduJzsgY2FzZSAnTyc6IHJldHVybiAnbyc7CisJICBjYXNlICdQJzogcmV0dXJuICdwJzsgY2FzZSAnUSc6IHJldHVybiAncSc7IGNhc2UgJ1InOiByZXR1cm4gJ3InOworCSAgY2FzZSAnUyc6IHJldHVybiAncyc7IGNhc2UgJ1QnOiByZXR1cm4gJ3QnOyBjYXNlICdVJzogcmV0dXJuICd1JzsKKwkgIGNhc2UgJ1YnOiByZXR1cm4gJ3YnOyBjYXNlICdXJzogcmV0dXJuICd3JzsgY2FzZSAnWCc6IHJldHVybiAneCc7CisJICBjYXNlICdZJzogcmV0dXJuICd5JzsgY2FzZSAnWic6IHJldHVybiAneic7CisJfQorfQorCisvKiBjYXNlLWluc2Vuc2l0aXZlIGVxdWFsaXR5ICovCitzdGF0aWMgQVRUUklCVVRFX1BVUkUgYm9vbAorY2llcXVhbChyZWdpc3RlciBjb25zdCBjaGFyICphcCwgcmVnaXN0ZXIgY29uc3QgY2hhciAqYnApCit7CisJd2hpbGUgKGxvd2VyaXQoKmFwKSA9PSBsb3dlcml0KCpicCsrKSkKKwkJaWYgKCphcCsrID09ICdcMCcpCisJCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBBVFRSSUJVVEVfUFVSRSBib29sCitpdHNhYmJyKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKmFiYnIsIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKndvcmQpCit7CisJaWYgKGxvd2VyaXQoKmFiYnIpICE9IGxvd2VyaXQoKndvcmQpKQorCQlyZXR1cm4gZmFsc2U7CisJKyt3b3JkOworCXdoaWxlICgqKythYmJyICE9ICdcMCcpCisJCWRvIHsKKwkJCWlmICgqd29yZCA9PSAnXDAnKQorCQkJCXJldHVybiBmYWxzZTsKKwkJfSB3aGlsZSAobG93ZXJpdCgqd29yZCsrKSAhPSBsb3dlcml0KCphYmJyKSk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBBVFRSSUJVVEVfUFVSRSBjb25zdCBzdHJ1Y3QgbG9va3VwICoKK2J5d29yZChjb25zdCBjaGFyICp3b3JkLCBjb25zdCBzdHJ1Y3QgbG9va3VwICp0YWJsZSkKK3sKKwlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgbG9va3VwICoJZm91bmRscDsKKwlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgbG9va3VwICoJbHA7CisKKwlpZiAod29yZCA9PSBOVUxMIHx8IHRhYmxlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCS8qCisJKiogTG9vayBmb3IgZXhhY3QgbWF0Y2guCisJKi8KKwlmb3IgKGxwID0gdGFibGU7IGxwLT5sX3dvcmQgIT0gTlVMTDsgKytscCkKKwkJaWYgKGNpZXF1YWwod29yZCwgbHAtPmxfd29yZCkpCisJCQlyZXR1cm4gbHA7CisJLyoKKwkqKiBMb29rIGZvciBpbmV4YWN0IG1hdGNoLgorCSovCisJZm91bmRscCA9IE5VTEw7CisJZm9yIChscCA9IHRhYmxlOyBscC0+bF93b3JkICE9IE5VTEw7ICsrbHApCisJCWlmIChpdHNhYmJyKHdvcmQsIGxwLT5sX3dvcmQpKSB7CisJCQlpZiAoZm91bmRscCA9PSBOVUxMKQorCQkJCWZvdW5kbHAgPSBscDsKKwkJCWVsc2UJcmV0dXJuIE5VTEw7CS8qIG11bHRpcGxlIGluZXhhY3QgbWF0Y2hlcyAqLworCQl9CisJcmV0dXJuIGZvdW5kbHA7Cit9CisKK3N0YXRpYyBjaGFyICoqCitnZXRmaWVsZHMocmVnaXN0ZXIgY2hhciAqY3ApCit7CisJcmVnaXN0ZXIgY2hhciAqCQlkcDsKKwlyZWdpc3RlciBjaGFyICoqCWFycmF5OworCXJlZ2lzdGVyIGludAkJbnN1YnM7CisKKwlpZiAoY3AgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJYXJyYXkgPSBlbWFsbG9jKHNpemVfcHJvZHVjdChzdHJsZW4oY3ApICsgMSwgc2l6ZW9mICphcnJheSkpOworCW5zdWJzID0gMDsKKwlmb3IgKCA7IDsgKSB7CisJCXdoaWxlIChpc19zcGFjZSgqY3ApKQorCQkJCSsrY3A7CisJCWlmICgqY3AgPT0gJ1wwJyB8fCAqY3AgPT0gJyMnKQorCQkJYnJlYWs7CisJCWFycmF5W25zdWJzKytdID0gZHAgPSBjcDsKKwkJZG8geworCQkJaWYgKCgqZHAgPSAqY3ArKykgIT0gJyInKQorCQkJCSsrZHA7CisJCQllbHNlIHdoaWxlICgoKmRwID0gKmNwKyspICE9ICciJykKKwkJCQlpZiAoKmRwICE9ICdcMCcpCisJCQkJCSsrZHA7CisJCQkJZWxzZSB7CisJCQkJCWVycm9yKF8oCisJCQkJCQkiT2RkIG51bWJlciBvZiBxdW90YXRpb24gbWFya3MiCisJCQkJCQkpKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCX0gd2hpbGUgKCpjcCAmJiAqY3AgIT0gJyMnICYmICFpc19zcGFjZSgqY3ApKTsKKwkJaWYgKGlzX3NwYWNlKCpjcCkpCisJCQkrK2NwOworCQkqZHAgPSAnXDAnOworCX0KKwlhcnJheVtuc3Vic10gPSBOVUxMOworCXJldHVybiBhcnJheTsKK30KKworc3RhdGljIF9Ob3JldHVybiB2b2lkCit0aW1lX292ZXJmbG93KHZvaWQpCit7CisgIGVycm9yKF8oInRpbWUgb3ZlcmZsb3ciKSk7CisgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIEFUVFJJQlVURV9QVVJFIHppY190CitvYWRkKHppY190IHQxLCB6aWNfdCB0MikKK3sKKwlpZiAodDEgPCAwID8gdDIgPCBaSUNfTUlOIC0gdDEgOiBaSUNfTUFYIC0gdDEgPCB0MikKKwkgIHRpbWVfb3ZlcmZsb3coKTsKKwlyZXR1cm4gdDEgKyB0MjsKK30KKworc3RhdGljIEFUVFJJQlVURV9QVVJFIHppY190Cit0YWRkKHppY190IHQxLCB6aWNfdCB0MikKK3sKKyAgaWYgKHQxIDwgMCkgeworICAgIGlmICh0MiA8IG1pbl90aW1lIC0gdDEpIHsKKyAgICAgIGlmICh0MSAhPSBtaW5fdGltZSkKKwl0aW1lX292ZXJmbG93KCk7CisgICAgICByZXR1cm4gbWluX3RpbWU7CisgICAgfQorICB9IGVsc2UgeworICAgIGlmIChtYXhfdGltZSAtIHQxIDwgdDIpIHsKKyAgICAgIGlmICh0MSAhPSBtYXhfdGltZSkKKwl0aW1lX292ZXJmbG93KCk7CisgICAgICByZXR1cm4gbWF4X3RpbWU7CisgICAgfQorICB9CisgIHJldHVybiB0MSArIHQyOworfQorCisvKgorKiogR2l2ZW4gYSBydWxlLCBhbmQgYSB5ZWFyLCBjb21wdXRlIHRoZSBkYXRlIChpbiBzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwKKyoqIDE5NzAsIDAwOjAwIExPQ0FMIHRpbWUpIGluIHRoYXQgeWVhciB0aGF0IHRoZSBydWxlIHJlZmVycyB0by4KKyovCisKK3N0YXRpYyB6aWNfdAorcnB5dGltZShjb25zdCBzdHJ1Y3QgcnVsZSAqcnAsIHppY190IHdhbnRlZHkpCit7CisJcmVnaXN0ZXIgaW50CW0sIGk7CisJcmVnaXN0ZXIgemljX3QJZGF5b2ZmOwkJCS8qIHdpdGggYSBub2QgdG8gTWFyZ2FyZXQgTy4gKi8KKwlyZWdpc3RlciB6aWNfdAl0LCB5OworCisJaWYgKHdhbnRlZHkgPT0gWklDX01JTikKKwkJcmV0dXJuIG1pbl90aW1lOworCWlmICh3YW50ZWR5ID09IFpJQ19NQVgpCisJCXJldHVybiBtYXhfdGltZTsKKwlkYXlvZmYgPSAwOworCW0gPSBUTV9KQU5VQVJZOworCXkgPSBFUE9DSF9ZRUFSOworCXdoaWxlICh3YW50ZWR5ICE9IHkpIHsKKwkJaWYgKHdhbnRlZHkgPiB5KSB7CisJCQlpID0gbGVuX3llYXJzW2lzbGVhcCh5KV07CisJCQkrK3k7CisJCX0gZWxzZSB7CisJCQktLXk7CisJCQlpID0gLWxlbl95ZWFyc1tpc2xlYXAoeSldOworCQl9CisJCWRheW9mZiA9IG9hZGQoZGF5b2ZmLCBpKTsKKwl9CisJd2hpbGUgKG0gIT0gcnAtPnJfbW9udGgpIHsKKwkJaSA9IGxlbl9tb250aHNbaXNsZWFwKHkpXVttXTsKKwkJZGF5b2ZmID0gb2FkZChkYXlvZmYsIGkpOworCQkrK207CisJfQorCWkgPSBycC0+cl9kYXlvZm1vbnRoOworCWlmIChtID09IFRNX0ZFQlJVQVJZICYmIGkgPT0gMjkgJiYgIWlzbGVhcCh5KSkgeworCQlpZiAocnAtPnJfZHljb2RlID09IERDX0RPV0xFUSkKKwkJCS0taTsKKwkJZWxzZSB7CisJCQllcnJvcihfKCJ1c2Ugb2YgMi8yOSBpbiBub24gbGVhcC15ZWFyIikpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisJfQorCS0taTsKKwlkYXlvZmYgPSBvYWRkKGRheW9mZiwgaSk7CisJaWYgKHJwLT5yX2R5Y29kZSA9PSBEQ19ET1dHRVEgfHwgcnAtPnJfZHljb2RlID09IERDX0RPV0xFUSkgeworCQlyZWdpc3RlciB6aWNfdAl3ZGF5OworCisjZGVmaW5lIExEQVlTUEVSV0VFSwkoKHppY190KSBEQVlTUEVSV0VFSykKKwkJd2RheSA9IEVQT0NIX1dEQVk7CisJCS8qCisJCSoqIERvbid0IHRydXN0IG1vZCBvZiBuZWdhdGl2ZSBudW1iZXJzLgorCQkqLworCQlpZiAoZGF5b2ZmID49IDApCisJCQl3ZGF5ID0gKHdkYXkgKyBkYXlvZmYpICUgTERBWVNQRVJXRUVLOworCQllbHNlIHsKKwkJCXdkYXkgLT0gKCgtZGF5b2ZmKSAlIExEQVlTUEVSV0VFSyk7CisJCQlpZiAod2RheSA8IDApCisJCQkJd2RheSArPSBMREFZU1BFUldFRUs7CisJCX0KKwkJd2hpbGUgKHdkYXkgIT0gcnAtPnJfd2RheSkKKwkJCWlmIChycC0+cl9keWNvZGUgPT0gRENfRE9XR0VRKSB7CisJCQkJZGF5b2ZmID0gb2FkZChkYXlvZmYsIDEpOworCQkJCWlmICgrK3dkYXkgPj0gTERBWVNQRVJXRUVLKQorCQkJCQl3ZGF5ID0gMDsKKwkJCQkrK2k7CisJCQl9IGVsc2UgeworCQkJCWRheW9mZiA9IG9hZGQoZGF5b2ZmLCAtMSk7CisJCQkJaWYgKC0td2RheSA8IDApCisJCQkJCXdkYXkgPSBMREFZU1BFUldFRUsgLSAxOworCQkJCS0taTsKKwkJCX0KKwkJaWYgKGkgPCAwIHx8IGkgPj0gbGVuX21vbnRoc1tpc2xlYXAoeSldW21dKSB7CisJCQlpZiAobm9pc2UpCisJCQkJd2FybmluZyhfKCJydWxlIGdvZXMgcGFzdCBzdGFydC9lbmQgb2YgbW9udGg7IFwKK3dpbGwgbm90IHdvcmsgd2l0aCBwcmUtMjAwNCB2ZXJzaW9ucyBvZiB6aWMiKSk7CisJCX0KKwl9CisJaWYgKGRheW9mZiA8IG1pbl90aW1lIC8gU0VDU1BFUkRBWSkKKwkJcmV0dXJuIG1pbl90aW1lOworCWlmIChkYXlvZmYgPiBtYXhfdGltZSAvIFNFQ1NQRVJEQVkpCisJCXJldHVybiBtYXhfdGltZTsKKwl0ID0gKHppY190KSBkYXlvZmYgKiBTRUNTUEVSREFZOworCXJldHVybiB0YWRkKHQsIHJwLT5yX3RvZCk7Cit9CisKK3N0YXRpYyB2b2lkCituZXdhYmJyKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlyZWdpc3RlciBpbnQJaTsKKworCWlmIChzdHJjbXAoc3RyaW5nLCBHUkFORFBBUkVOVEVEKSAhPSAwKSB7CisJCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKgljcDsKKwkJY29uc3QgY2hhciAqCQltcDsKKworCQljcCA9IHN0cmluZzsKKwkJbXAgPSBOVUxMOworCQl3aGlsZSAoaXNfYWxwaGEoKmNwKSB8fCAoJzAnIDw9ICpjcCAmJiAqY3AgPD0gJzknKQorCQkgICAgICAgfHwgKmNwID09ICctJyB8fCAqY3AgPT0gJysnKQorCQkJCSsrY3A7CisJCWlmIChub2lzZSAmJiBjcCAtIHN0cmluZyA8IDMpCisJCSAgbXAgPSBfKCJ0aW1lIHpvbmUgYWJicmV2aWF0aW9uIGhhcyBmZXdlciB0aGFuIDMgY2hhcmFjdGVycyIpOworCQlpZiAoY3AgLSBzdHJpbmcgPiBaSUNfTUFYX0FCQlJfTEVOX1dPX1dBUk4pCisJCSAgbXAgPSBfKCJ0aW1lIHpvbmUgYWJicmV2aWF0aW9uIGhhcyB0b28gbWFueSBjaGFyYWN0ZXJzIik7CisJCWlmICgqY3AgIT0gJ1wwJykKK21wID0gXygidGltZSB6b25lIGFiYnJldmlhdGlvbiBkaWZmZXJzIGZyb20gUE9TSVggc3RhbmRhcmQiKTsKKwkJaWYgKG1wICE9IE5VTEwpCisJCQl3YXJuaW5nKCIlcyAoJXMpIiwgbXAsIHN0cmluZyk7CisJfQorCWkgPSBzdHJsZW4oc3RyaW5nKSArIDE7CisJaWYgKGNoYXJjbnQgKyBpID4gVFpfTUFYX0NIQVJTKSB7CisJCWVycm9yKF8oInRvbyBtYW55LCBvciB0b28gbG9uZywgdGltZSB6b25lIGFiYnJldmlhdGlvbnMiKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJc3RyY3B5KCZjaGFyc1tjaGFyY250XSwgc3RyaW5nKTsKKwljaGFyY250ICs9IGk7Cit9CisKK3N0YXRpYyBib29sCitta2RpcnMoY2hhciAqYXJnbmFtZSkKK3sKKwlyZWdpc3RlciBjaGFyICoJbmFtZTsKKwlyZWdpc3RlciBjaGFyICoJY3A7CisKKwlpZiAoYXJnbmFtZSA9PSBOVUxMIHx8ICphcmduYW1lID09ICdcMCcpCisJCXJldHVybiB0cnVlOworCWNwID0gbmFtZSA9IGVjcHlhbGxvYyhhcmduYW1lKTsKKwl3aGlsZSAoKGNwID0gc3RyY2hyKGNwICsgMSwgJy8nKSkgIT0gMCkgeworCQkqY3AgPSAnXDAnOworI2lmZGVmIEhBVkVfRE9TX0ZJTEVfTkFNRVMKKwkJLyoKKwkJKiogRE9TIGRyaXZlIHNwZWNpZmllcj8KKwkJKi8KKwkJaWYgKGlzX2FscGhhKG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonICYmIG5hbWVbMl0gPT0gJ1wwJykgeworCQkJCSpjcCA9ICcvJzsKKwkJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCisJCS8qCisJCSoqIFRyeSB0byBjcmVhdGUgaXQuICBJdCdzIE9LIGlmIGNyZWF0aW9uIGZhaWxzIGJlY2F1c2UKKwkJKiogdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cywgcGVyaGFwcyBiZWNhdXNlIHNvbWUKKwkJKiogb3RoZXIgcHJvY2VzcyBqdXN0IGNyZWF0ZWQgaXQuCisJCSovCisJCWlmIChta2RpcihuYW1lLCBNS0RJUl9VTUFTSykgIT0gMCkgeworCQkJaW50IGVyciA9IGVycm5vOworCQkJaWYgKGl0c2RpcihuYW1lKSA8PSAwKSB7CisJCQkJY2hhciBjb25zdCAqZSA9IHN0cmVycm9yKGVycik7CisJCQkJd2FybmluZyhfKCIlczogQ2FuJ3QgY3JlYXRlIGRpcmVjdG9yeSIKKwkJCQkJICAiICVzOiAlcyIpLAorCQkJCQlwcm9nbmFtZSwgbmFtZSwgZSk7CisJCQkJZnJlZShuYW1lKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKwkJKmNwID0gJy8nOworCX0KKwlmcmVlKG5hbWUpOworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3pvbmUudGFiIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3RpbWV6b25lL3pvbmUudGFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YWZmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWJjL2dsaWJjL2dsaWJjLTIuMjMvdGltZXpvbmUvem9uZS50YWIKQEAgLTAsMCArMSw0MjggQEAKKyMgPHByZT4KKyMgQCgjKXpvbmUudGFiCTguMjgKKyMgVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyMgMjAwOS0wNS0xNyBieSBBcnRodXIgRGF2aWQgT2xzb24uCisjCisjIFRaIHpvbmUgZGVzY3JpcHRpb25zCisjCisjIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTYtMDgtMDUpOgorIworIyBUaGlzIGZpbGUgY29udGFpbnMgYSB0YWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKKyMgMS4gIElTTyAzMTY2IDItY2hhcmFjdGVyIGNvdW50cnkgY29kZS4gIFNlZSB0aGUgZmlsZSBgaXNvMzE2Ni50YWInLgorIyAyLiAgTGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBvZiB0aGUgem9uZSdzIHByaW5jaXBhbCBsb2NhdGlvbgorIyAgICAgaW4gSVNPIDY3MDkgc2lnbi1kZWdyZWVzLW1pbnV0ZXMtc2Vjb25kcyBmb3JtYXQsCisjICAgICBlaXRoZXIgKy1ERE1NKy1ERERNTSBvciArLURETU1TUystRERETU1TUywKKyMgICAgIGZpcnN0IGxhdGl0dWRlICgrIGlzIG5vcnRoKSwgdGhlbiBsb25naXR1ZGUgKCsgaXMgZWFzdCkuCisjIDMuICBab25lIG5hbWUgdXNlZCBpbiB2YWx1ZSBvZiBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyMgNC4gIENvbW1lbnRzOyBwcmVzZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBjb3VudHJ5IGhhcyBtdWx0aXBsZSByb3dzLgorIworIyBDb2x1bW5zIGFyZSBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgdGFiLgorIyBUaGUgdGFibGUgaXMgc29ydGVkIGZpcnN0IGJ5IGNvdW50cnksIHRoZW4gYW4gb3JkZXIgd2l0aGluIHRoZSBjb3VudHJ5IHRoYXQKKyMgKDEpIG1ha2VzIHNvbWUgZ2VvZ3JhcGhpY2FsIHNlbnNlLCBhbmQKKyMgKDIpIHB1dHMgdGhlIG1vc3QgcG9wdWxvdXMgem9uZXMgZmlyc3QsIHdoZXJlIHRoYXQgZG9lcyBub3QgY29udHJhZGljdCAoMSkuCisjCisjIExpbmVzIGJlZ2lubmluZyB3aXRoIGAjJyBhcmUgY29tbWVudHMuCisjCisjY291bnRyeS0KKyNjb2RlCWNvb3JkaW5hdGVzCVRaCQkJY29tbWVudHMKK0FECSs0MjMwKzAwMTMxCUV1cm9wZS9BbmRvcnJhCitBRQkrMjUxOCswNTUxOAlBc2lhL0R1YmFpCitBRgkrMzQzMSswNjkxMglBc2lhL0thYnVsCitBRwkrMTcwMy0wNjE0OAlBbWVyaWNhL0FudGlndWEKK0FJCSsxODEyLTA2MzA0CUFtZXJpY2EvQW5ndWlsbGEKK0FMCSs0MTIwKzAxOTUwCUV1cm9wZS9UaXJhbmUKK0FNCSs0MDExKzA0NDMwCUFzaWEvWWVyZXZhbgorQU4JKzEyMTEtMDY5MDAJQW1lcmljYS9DdXJhY2FvCitBTwktMDg0OCswMTMxNAlBZnJpY2EvTHVhbmRhCitBUQktNzc1MCsxNjYzNglBbnRhcmN0aWNhL01jTXVyZG8JTWNNdXJkbyBTdGF0aW9uLCBSb3NzIElzbGFuZAorQVEJLTkwMDArMDAwMDAJQW50YXJjdGljYS9Tb3V0aF9Qb2xlCUFtdW5kc2VuLVNjb3R0IFN0YXRpb24sIFNvdXRoIFBvbGUKK0FRCS02NzM0LTA2ODA4CUFudGFyY3RpY2EvUm90aGVyYQlSb3RoZXJhIFN0YXRpb24sIEFkZWxhaWRlIElzbGFuZAorQVEJLTY0NDgtMDY0MDYJQW50YXJjdGljYS9QYWxtZXIJUGFsbWVyIFN0YXRpb24sIEFudmVycyBJc2xhbmQKK0FRCS02NzM2KzA2MjUzCUFudGFyY3RpY2EvTWF3c29uCU1hd3NvbiBTdGF0aW9uLCBIb2xtZSBCYXkKK0FRCS02ODM1KzA3NzU4CUFudGFyY3RpY2EvRGF2aXMJRGF2aXMgU3RhdGlvbiwgVmVzdGZvbGQgSGlsbHMKK0FRCS02NjE3KzExMDMxCUFudGFyY3RpY2EvQ2FzZXkJQ2FzZXkgU3RhdGlvbiwgQmFpbGV5IFBlbmluc3VsYQorQVEJLTc4MjQrMTA2NTQJQW50YXJjdGljYS9Wb3N0b2sJVm9zdG9rIFN0YXRpb24sIFMgTWFnbmV0aWMgUG9sZQorQVEJLTY2NDArMTQwMDEJQW50YXJjdGljYS9EdW1vbnREVXJ2aWxsZQlEdW1vbnQtZCdVcnZpbGxlIFN0YXRpb24sIFRlcnJlIEFkZWxpZQorQVEJLTY5MDAyMiswMzkzNTI0CUFudGFyY3RpY2EvU3lvd2EJU3lvd2EgU3RhdGlvbiwgRSBPbmd1bCBJCitBUgktMzQzNi0wNTgyNwlBbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXMJQnVlbm9zIEFpcmVzIChCQSwgQ0YpCitBUgktMzEyNC0wNjQxMQlBbWVyaWNhL0FyZ2VudGluYS9Db3Jkb2JhCW1vc3QgbG9jYXRpb25zIChDQiwgQ0MsIENOLCBFUiwgRk0sIE1OLCBTRSwgU0YpCitBUgktMjQ0Ny0wNjUyNQlBbWVyaWNhL0FyZ2VudGluYS9TYWx0YQkoU0EsIExQLCBOUSwgUk4pCitBUgktMjQxMS0wNjUxOAlBbWVyaWNhL0FyZ2VudGluYS9KdWp1eQlKdWp1eSAoSlkpCitBUgktMjY0OS0wNjUxMwlBbWVyaWNhL0FyZ2VudGluYS9UdWN1bWFuCVR1Y3VtYW4gKFRNKQorQVIJLTI4MjgtMDY1NDcJQW1lcmljYS9BcmdlbnRpbmEvQ2F0YW1hcmNhCUNhdGFtYXJjYSAoQ1QpLCBDaHVidXQgKENIKQorQVIJLTI5MjYtMDY2NTEJQW1lcmljYS9BcmdlbnRpbmEvTGFfUmlvamEJTGEgUmlvamEgKExSKQorQVIJLTMxMzItMDY4MzEJQW1lcmljYS9BcmdlbnRpbmEvU2FuX0p1YW4JU2FuIEp1YW4gKFNKKQorQVIJLTMyNTMtMDY4NDkJQW1lcmljYS9BcmdlbnRpbmEvTWVuZG96YQlNZW5kb3phIChNWikKK0FSCS0zMzE5LTA2NjIxCUFtZXJpY2EvQXJnZW50aW5hL1Nhbl9MdWlzCVNhbiBMdWlzIChTTCkKK0FSCS01MTM4LTA2OTEzCUFtZXJpY2EvQXJnZW50aW5hL1Jpb19HYWxsZWdvcwlTYW50YSBDcnV6IChTQykKK0FSCS01NDQ4LTA2ODE4CUFtZXJpY2EvQXJnZW50aW5hL1VzaHVhaWEJVGllcnJhIGRlbCBGdWVnbyAoVEYpCitBUwktMTQxNi0xNzA0MglQYWNpZmljL1BhZ29fUGFnbworQVQJKzQ4MTMrMDE2MjAJRXVyb3BlL1ZpZW5uYQorQVUJLTMxMzMrMTU5MDUJQXVzdHJhbGlhL0xvcmRfSG93ZQlMb3JkIEhvd2UgSXNsYW5kCitBVQktNDI1MysxNDcxOQlBdXN0cmFsaWEvSG9iYXJ0CVRhc21hbmlhIC0gbW9zdCBsb2NhdGlvbnMKK0FVCS0zOTU2KzE0MzUyCUF1c3RyYWxpYS9DdXJyaWUJVGFzbWFuaWEgLSBLaW5nIElzbGFuZAorQVUJLTM3NDkrMTQ0NTgJQXVzdHJhbGlhL01lbGJvdXJuZQlWaWN0b3JpYQorQVUJLTMzNTIrMTUxMTMJQXVzdHJhbGlhL1N5ZG5leQlOZXcgU291dGggV2FsZXMgLSBtb3N0IGxvY2F0aW9ucworQVUJLTMxNTcrMTQxMjcJQXVzdHJhbGlhL0Jyb2tlbl9IaWxsCU5ldyBTb3V0aCBXYWxlcyAtIFlhbmNvd2lubmEKK0FVCS0yNzI4KzE1MzAyCUF1c3RyYWxpYS9CcmlzYmFuZQlRdWVlbnNsYW5kIC0gbW9zdCBsb2NhdGlvbnMKK0FVCS0yMDE2KzE0OTAwCUF1c3RyYWxpYS9MaW5kZW1hbglRdWVlbnNsYW5kIC0gSG9saWRheSBJc2xhbmRzCitBVQktMzQ1NSsxMzgzNQlBdXN0cmFsaWEvQWRlbGFpZGUJU291dGggQXVzdHJhbGlhCitBVQktMTIyOCsxMzA1MAlBdXN0cmFsaWEvRGFyd2luCU5vcnRoZXJuIFRlcnJpdG9yeQorQVUJLTMxNTcrMTE1NTEJQXVzdHJhbGlhL1BlcnRoCVdlc3Rlcm4gQXVzdHJhbGlhIC0gbW9zdCBsb2NhdGlvbnMKK0FVCS0zMTQzKzEyODUyCUF1c3RyYWxpYS9FdWNsYQlXZXN0ZXJuIEF1c3RyYWxpYSAtIEV1Y2xhIGFyZWEKK0FXCSsxMjMwLTA2OTU4CUFtZXJpY2EvQXJ1YmEKK0FYCSs2MDA2KzAxOTU3CUV1cm9wZS9NYXJpZWhhbW4KK0FaCSs0MDIzKzA0OTUxCUFzaWEvQmFrdQorQkEJKzQzNTIrMDE4MjUJRXVyb3BlL1NhcmFqZXZvCitCQgkrMTMwNi0wNTkzNwlBbWVyaWNhL0JhcmJhZG9zCitCRAkrMjM0MyswOTAyNQlBc2lhL0RoYWthCitCRQkrNTA1MCswMDQyMAlFdXJvcGUvQnJ1c3NlbHMKK0JGCSsxMjIyLTAwMTMxCUFmcmljYS9PdWFnYWRvdWdvdQorQkcJKzQyNDErMDIzMTkJRXVyb3BlL1NvZmlhCitCSAkrMjYyMyswNTAzNQlBc2lhL0JhaHJhaW4KK0JJCS0wMzIzKzAyOTIyCUFmcmljYS9CdWp1bWJ1cmEKK0JKCSswNjI5KzAwMjM3CUFmcmljYS9Qb3J0by1Ob3ZvCitCTAkrMTc1My0wNjI1MQlBbWVyaWNhL1N0X0JhcnRoZWxlbXkKK0JNCSszMjE3LTA2NDQ2CUF0bGFudGljL0Jlcm11ZGEKK0JOCSswNDU2KzExNDU1CUFzaWEvQnJ1bmVpCitCTwktMTYzMC0wNjgwOQlBbWVyaWNhL0xhX1BhegorQlIJLTAzNTEtMDMyMjUJQW1lcmljYS9Ob3JvbmhhCUF0bGFudGljIGlzbGFuZHMKK0JSCS0wMTI3LTA0ODI5CUFtZXJpY2EvQmVsZW0JQW1hcGEsIEUgUGFyYQorQlIJLTAzNDMtMDM4MzAJQW1lcmljYS9Gb3J0YWxlemEJTkUgQnJhemlsIChNQSwgUEksIENFLCBSTiwgUEIpCitCUgktMDgwMy0wMzQ1NAlBbWVyaWNhL1JlY2lmZQlQZXJuYW1idWNvCitCUgktMDcxMi0wNDgxMglBbWVyaWNhL0FyYWd1YWluYQlUb2NhbnRpbnMKK0JSCS0wOTQwLTAzNTQzCUFtZXJpY2EvTWFjZWlvCUFsYWdvYXMsIFNlcmdpcGUKK0JSCS0xMjU5LTAzODMxCUFtZXJpY2EvQmFoaWEJQmFoaWEKK0JSCS0yMzMyLTA0NjM3CUFtZXJpY2EvU2FvX1BhdWxvCVMgJiBTRSBCcmF6aWwgKEdPLCBERiwgTUcsIEVTLCBSSiwgU1AsIFBSLCBTQywgUlMpCitCUgktMjAyNy0wNTQzNwlBbWVyaWNhL0NhbXBvX0dyYW5kZQlNYXRvIEdyb3NzbyBkbyBTdWwKK0JSCS0xNTM1LTA1NjA1CUFtZXJpY2EvQ3VpYWJhCU1hdG8gR3Jvc3NvCitCUgktMDIyNi0wNTQ1MglBbWVyaWNhL1NhbnRhcmVtCVcgUGFyYQorQlIJLTA4NDYtMDYzNTQJQW1lcmljYS9Qb3J0b19WZWxobwlSb25kb25pYQorQlIJKzAyNDktMDYwNDAJQW1lcmljYS9Cb2FfVmlzdGEJUm9yYWltYQorQlIJLTAzMDgtMDYwMDEJQW1lcmljYS9NYW5hdXMJRSBBbWF6b25hcworQlIJLTA2NDAtMDY5NTIJQW1lcmljYS9FaXJ1bmVwZQlXIEFtYXpvbmFzCitCUgktMDk1OC0wNjc0OAlBbWVyaWNhL1Jpb19CcmFuY28JQWNyZQorQlMJKzI1MDUtMDc3MjEJQW1lcmljYS9OYXNzYXUKK0JUCSsyNzI4KzA4OTM5CUFzaWEvVGhpbXBodQorQlcJLTI0MzkrMDI1NTUJQWZyaWNhL0dhYm9yb25lCitCWQkrNTM1NCswMjczNAlFdXJvcGUvTWluc2sKK0JaCSsxNzMwLTA4ODEyCUFtZXJpY2EvQmVsaXplCitDQQkrNDczNC0wNTI0MwlBbWVyaWNhL1N0X0pvaG5zCU5ld2ZvdW5kbGFuZCBUaW1lLCBpbmNsdWRpbmcgU0UgTGFicmFkb3IKK0NBCSs0NDM5LTA2MzM2CUFtZXJpY2EvSGFsaWZheAlBdGxhbnRpYyBUaW1lIC0gTm92YSBTY290aWEgKG1vc3QgcGxhY2VzKSwgUEVJCitDQQkrNDYxMi0wNTk1NwlBbWVyaWNhL0dsYWNlX0JheQlBdGxhbnRpYyBUaW1lIC0gTm92YSBTY290aWEgLSBwbGFjZXMgdGhhdCBkaWQgbm90IG9ic2VydmUgRFNUIDE5NjYtMTk3MQorQ0EJKzQ2MDYtMDY0NDcJQW1lcmljYS9Nb25jdG9uCUF0bGFudGljIFRpbWUgLSBOZXcgQnJ1bnN3aWNrCitDQQkrNTMyMC0wNjAyNQlBbWVyaWNhL0dvb3NlX0JheQlBdGxhbnRpYyBUaW1lIC0gTGFicmFkb3IgLSBtb3N0IGxvY2F0aW9ucworQ0EJKzUxMjUtMDU3MDcJQW1lcmljYS9CbGFuYy1TYWJsb24JQXRsYW50aWMgU3RhbmRhcmQgVGltZSAtIFF1ZWJlYyAtIExvd2VyIE5vcnRoIFNob3JlCitDQQkrNDUzMS0wNzMzNAlBbWVyaWNhL01vbnRyZWFsCUVhc3Rlcm4gVGltZSAtIFF1ZWJlYyAtIG1vc3QgbG9jYXRpb25zCitDQQkrNDMzOS0wNzkyMwlBbWVyaWNhL1Rvcm9udG8JRWFzdGVybiBUaW1lIC0gT250YXJpbyAtIG1vc3QgbG9jYXRpb25zCitDQQkrNDkwMS0wODgxNglBbWVyaWNhL05pcGlnb24JRWFzdGVybiBUaW1lIC0gT250YXJpbyAmIFF1ZWJlYyAtIHBsYWNlcyB0aGF0IGRpZCBub3Qgb2JzZXJ2ZSBEU1QgMTk2Ny0xOTczCitDQQkrNDgyMy0wODkxNQlBbWVyaWNhL1RodW5kZXJfQmF5CUVhc3Rlcm4gVGltZSAtIFRodW5kZXIgQmF5LCBPbnRhcmlvCitDQQkrNjM0NC0wNjgyOAlBbWVyaWNhL0lxYWx1aXQJRWFzdGVybiBUaW1lIC0gZWFzdCBOdW5hdnV0IC0gbW9zdCBsb2NhdGlvbnMKK0NBCSs2NjA4LTA2NTQ0CUFtZXJpY2EvUGFuZ25pcnR1bmcJRWFzdGVybiBUaW1lIC0gUGFuZ25pcnR1bmcsIE51bmF2dXQKK0NBCSs3NDQxNDQtMDk0NDk0NQlBbWVyaWNhL1Jlc29sdXRlCUVhc3Rlcm4gU3RhbmRhcmQgVGltZSAtIFJlc29sdXRlLCBOdW5hdnV0CitDQQkrNDg0NTMxLTA5MTM3MTgJQW1lcmljYS9BdGlrb2thbglFYXN0ZXJuIFN0YW5kYXJkIFRpbWUgLSBBdGlrb2thbiwgT250YXJpbyBhbmQgU291dGhhbXB0b24gSSwgTnVuYXZ1dAorQ0EJKzYyNDkwMC0wOTIwNDU5CUFtZXJpY2EvUmFua2luX0lubGV0CUNlbnRyYWwgVGltZSAtIGNlbnRyYWwgTnVuYXZ1dAorQ0EJKzQ5NTMtMDk3MDkJQW1lcmljYS9XaW5uaXBlZwlDZW50cmFsIFRpbWUgLSBNYW5pdG9iYSAmIHdlc3QgT250YXJpbworQ0EJKzQ4NDMtMDk0MzQJQW1lcmljYS9SYWlueV9SaXZlcglDZW50cmFsIFRpbWUgLSBSYWlueSBSaXZlciAmIEZvcnQgRnJhbmNlcywgT250YXJpbworQ0EJKzUwMjQtMTA0MzkJQW1lcmljYS9SZWdpbmEJQ2VudHJhbCBTdGFuZGFyZCBUaW1lIC0gU2Fza2F0Y2hld2FuIC0gbW9zdCBsb2NhdGlvbnMKK0NBCSs1MDE3LTEwNzUwCUFtZXJpY2EvU3dpZnRfQ3VycmVudAlDZW50cmFsIFN0YW5kYXJkIFRpbWUgLSBTYXNrYXRjaGV3YW4gLSBtaWR3ZXN0CitDQQkrNTMzMy0xMTMyOAlBbWVyaWNhL0VkbW9udG9uCU1vdW50YWluIFRpbWUgLSBBbGJlcnRhLCBlYXN0IEJyaXRpc2ggQ29sdW1iaWEgJiB3ZXN0IFNhc2thdGNoZXdhbgorQ0EJKzY5MDY1MC0xMDUwMzEwCUFtZXJpY2EvQ2FtYnJpZGdlX0JheQlNb3VudGFpbiBUaW1lIC0gd2VzdCBOdW5hdnV0CitDQQkrNjIyNy0xMTQyMQlBbWVyaWNhL1llbGxvd2tuaWZlCU1vdW50YWluIFRpbWUgLSBjZW50cmFsIE5vcnRod2VzdCBUZXJyaXRvcmllcworQ0EJKzY4MjA1OS0xMzM0MzAwCUFtZXJpY2EvSW51dmlrCU1vdW50YWluIFRpbWUgLSB3ZXN0IE5vcnRod2VzdCBUZXJyaXRvcmllcworQ0EJKzU5NDYtMTIwMTQJQW1lcmljYS9EYXdzb25fQ3JlZWsJTW91bnRhaW4gU3RhbmRhcmQgVGltZSAtIERhd3NvbiBDcmVlayAmIEZvcnQgU2FpbnQgSm9obiwgQnJpdGlzaCBDb2x1bWJpYQorQ0EJKzQ5MTYtMTIzMDcJQW1lcmljYS9WYW5jb3V2ZXIJUGFjaWZpYyBUaW1lIC0gd2VzdCBCcml0aXNoIENvbHVtYmlhCitDQQkrNjA0My0xMzUwMwlBbWVyaWNhL1doaXRlaG9yc2UJUGFjaWZpYyBUaW1lIC0gc291dGggWXVrb24KK0NBCSs2NDA0LTEzOTI1CUFtZXJpY2EvRGF3c29uCVBhY2lmaWMgVGltZSAtIG5vcnRoIFl1a29uCitDQwktMTIxMCswOTY1NQlJbmRpYW4vQ29jb3MKK0NECS0wNDE4KzAxNTE4CUFmcmljYS9LaW5zaGFzYQl3ZXN0IERlbS4gUmVwLiBvZiBDb25nbworQ0QJLTExNDArMDI3MjgJQWZyaWNhL0x1YnVtYmFzaGkJZWFzdCBEZW0uIFJlcC4gb2YgQ29uZ28KK0NGCSswNDIyKzAxODM1CUFmcmljYS9CYW5ndWkKK0NHCS0wNDE2KzAxNTE3CUFmcmljYS9CcmF6emF2aWxsZQorQ0gJKzQ3MjMrMDA4MzIJRXVyb3BlL1p1cmljaAorQ0kJKzA1MTktMDA0MDIJQWZyaWNhL0FiaWRqYW4KK0NLCS0yMTE0LTE1OTQ2CVBhY2lmaWMvUmFyb3RvbmdhCitDTAktMzMyNy0wNzA0MAlBbWVyaWNhL1NhbnRpYWdvCW1vc3QgbG9jYXRpb25zCitDTAktMjcwOS0xMDkyNglQYWNpZmljL0Vhc3RlcglFYXN0ZXIgSXNsYW5kICYgU2FsYSB5IEdvbWV6CitDTQkrMDQwMyswMDk0MglBZnJpY2EvRG91YWxhCitDTgkrMzExNCsxMjEyOAlBc2lhL1NoYW5naGFpCWVhc3QgQ2hpbmEgLSBCZWlqaW5nLCBHdWFuZ2RvbmcsIFNoYW5naGFpLCBldGMuCitDTgkrNDU0NSsxMjY0MQlBc2lhL0hhcmJpbglIZWlsb25namlhbmcgKGV4Y2VwdCBNb2hlKSwgSmlsaW4KK0NOCSsyOTM0KzEwNjM1CUFzaWEvQ2hvbmdxaW5nCWNlbnRyYWwgQ2hpbmEgLSBTaWNodWFuLCBZdW5uYW4sIEd1YW5neGksIFNoYWFueGksIEd1aXpob3UsIGV0Yy4KK0NOCSs0MzQ4KzA4NzM1CUFzaWEvVXJ1bXFpCW1vc3Qgb2YgVGliZXQgJiBYaW5qaWFuZworQ04JKzM5MjkrMDc1NTkJQXNpYS9LYXNoZ2FyCXdlc3QgVGliZXQgJiBYaW5qaWFuZworQ08JKzA0MzYtMDc0MDUJQW1lcmljYS9Cb2dvdGEKK0NSCSswOTU2LTA4NDA1CUFtZXJpY2EvQ29zdGFfUmljYQorQ1UJKzIzMDgtMDgyMjIJQW1lcmljYS9IYXZhbmEKK0NWCSsxNDU1LTAyMzMxCUF0bGFudGljL0NhcGVfVmVyZGUKK0NYCS0xMDI1KzEwNTQzCUluZGlhbi9DaHJpc3RtYXMKK0NZCSszNTEwKzAzMzIyCUFzaWEvTmljb3NpYQorQ1oJKzUwMDUrMDE0MjYJRXVyb3BlL1ByYWd1ZQorREUJKzUyMzArMDEzMjIJRXVyb3BlL0JlcmxpbgorREoJKzExMzYrMDQzMDkJQWZyaWNhL0RqaWJvdXRpCitESwkrNTU0MCswMTIzNQlFdXJvcGUvQ29wZW5oYWdlbgorRE0JKzE1MTgtMDYxMjQJQW1lcmljYS9Eb21pbmljYQorRE8JKzE4MjgtMDY5NTQJQW1lcmljYS9TYW50b19Eb21pbmdvCitEWgkrMzY0NyswMDMwMwlBZnJpY2EvQWxnaWVycworRUMJLTAyMTAtMDc5NTAJQW1lcmljYS9HdWF5YXF1aWwJbWFpbmxhbmQKK0VDCS0wMDU0LTA4OTM2CVBhY2lmaWMvR2FsYXBhZ29zCUdhbGFwYWdvcyBJc2xhbmRzCitFRQkrNTkyNSswMjQ0NQlFdXJvcGUvVGFsbGlubgorRUcJKzMwMDMrMDMxMTUJQWZyaWNhL0NhaXJvCitFSAkrMjcwOS0wMTMxMglBZnJpY2EvRWxfQWFpdW4KK0VSCSsxNTIwKzAzODUzCUFmcmljYS9Bc21hcmEKK0VTCSs0MDI0LTAwMzQxCUV1cm9wZS9NYWRyaWQJbWFpbmxhbmQKK0VTCSszNTUzLTAwNTE5CUFmcmljYS9DZXV0YQlDZXV0YSAmIE1lbGlsbGEKK0VTCSsyODA2LTAxNTI0CUF0bGFudGljL0NhbmFyeQlDYW5hcnkgSXNsYW5kcworRVQJKzA5MDIrMDM4NDIJQWZyaWNhL0FkZGlzX0FiYWJhCitGSQkrNjAxMCswMjQ1OAlFdXJvcGUvSGVsc2lua2kKK0ZKCS0xODA4KzE3ODI1CVBhY2lmaWMvRmlqaQorRksJLTUxNDItMDU3NTEJQXRsYW50aWMvU3RhbmxleQorRk0JKzA3MjUrMTUxNDcJUGFjaWZpYy9UcnVrCVRydWsgKENodXVrKSBhbmQgWWFwCitGTQkrMDY1OCsxNTgxMwlQYWNpZmljL1BvbmFwZQlQb25hcGUgKFBvaG5wZWkpCitGTQkrMDUxOSsxNjI1OQlQYWNpZmljL0tvc3JhZQlLb3NyYWUKK0ZPCSs2MjAxLTAwNjQ2CUF0bGFudGljL0Zhcm9lCitGUgkrNDg1MiswMDIyMAlFdXJvcGUvUGFyaXMKK0dBCSswMDIzKzAwOTI3CUFmcmljYS9MaWJyZXZpbGxlCitHQgkrNTEzMDMwLTAwMDA3MzEJRXVyb3BlL0xvbmRvbgorR0QJKzEyMDMtMDYxNDUJQW1lcmljYS9HcmVuYWRhCitHRQkrNDE0MyswNDQ0OQlBc2lhL1RiaWxpc2kKK0dGCSswNDU2LTA1MjIwCUFtZXJpY2EvQ2F5ZW5uZQorR0cJKzQ5MjctMDAyMzIJRXVyb3BlL0d1ZXJuc2V5CitHSAkrMDUzMy0wMDAxMwlBZnJpY2EvQWNjcmEKK0dJCSszNjA4LTAwNTIxCUV1cm9wZS9HaWJyYWx0YXIKK0dMCSs2NDExLTA1MTQ0CUFtZXJpY2EvR29kdGhhYgltb3N0IGxvY2F0aW9ucworR0wJKzc2NDYtMDE4NDAJQW1lcmljYS9EYW5tYXJrc2hhdm4JZWFzdCBjb2FzdCwgbm9ydGggb2YgU2NvcmVzYnlzdW5kCitHTAkrNzAyOS0wMjE1OAlBbWVyaWNhL1Njb3Jlc2J5c3VuZAlTY29yZXNieXN1bmQgLyBJdHRvcXFvcnRvb3JtaWl0CitHTAkrNzYzNC0wNjg0NwlBbWVyaWNhL1RodWxlCVRodWxlIC8gUGl0dWZmaWsKK0dNCSsxMzI4LTAxNjM5CUFmcmljYS9CYW5qdWwKK0dOCSswOTMxLTAxMzQzCUFmcmljYS9Db25ha3J5CitHUAkrMTYxNC0wNjEzMglBbWVyaWNhL0d1YWRlbG91cGUKK0dRCSswMzQ1KzAwODQ3CUFmcmljYS9NYWxhYm8KK0dSCSszNzU4KzAyMzQzCUV1cm9wZS9BdGhlbnMKK0dTCS01NDE2LTAzNjMyCUF0bGFudGljL1NvdXRoX0dlb3JnaWEKK0dUCSsxNDM4LTA5MDMxCUFtZXJpY2EvR3VhdGVtYWxhCitHVQkrMTMyOCsxNDQ0NQlQYWNpZmljL0d1YW0KK0dXCSsxMTUxLTAxNTM1CUFmcmljYS9CaXNzYXUKK0dZCSswNjQ4LTA1ODEwCUFtZXJpY2EvR3V5YW5hCitISwkrMjIxNysxMTQwOQlBc2lhL0hvbmdfS29uZworSE4JKzE0MDYtMDg3MTMJQW1lcmljYS9UZWd1Y2lnYWxwYQorSFIJKzQ1NDgrMDE1NTgJRXVyb3BlL1phZ3JlYgorSFQJKzE4MzItMDcyMjAJQW1lcmljYS9Qb3J0LWF1LVByaW5jZQorSFUJKzQ3MzArMDE5MDUJRXVyb3BlL0J1ZGFwZXN0CitJRAktMDYxMCsxMDY0OAlBc2lhL0pha2FydGEJSmF2YSAmIFN1bWF0cmEKK0lECS0wMDAyKzEwOTIwCUFzaWEvUG9udGlhbmFrCXdlc3QgJiBjZW50cmFsIEJvcm5lbworSUQJLTA1MDcrMTE5MjQJQXNpYS9NYWthc3NhcgllYXN0ICYgc291dGggQm9ybmVvLCBDZWxlYmVzLCBCYWxpLCBOdXNhIFRlbmdhcnJhLCB3ZXN0IFRpbW9yCitJRAktMDIzMisxNDA0MglBc2lhL0pheWFwdXJhCUlyaWFuIEpheWEgJiB0aGUgTW9sdWNjYXMKK0lFCSs1MzIwLTAwNjE1CUV1cm9wZS9EdWJsaW4KK0lMCSszMTQ2KzAzNTE0CUFzaWEvSmVydXNhbGVtCitJTQkrNTQwOS0wMDQyOAlFdXJvcGUvSXNsZV9vZl9NYW4KK0lOCSsyMjMyKzA4ODIyCUFzaWEvS29sa2F0YQorSU8JLTA3MjArMDcyMjUJSW5kaWFuL0NoYWdvcworSVEJKzMzMjErMDQ0MjUJQXNpYS9CYWdoZGFkCitJUgkrMzU0MCswNTEyNglBc2lhL1RlaHJhbgorSVMJKzY0MDktMDIxNTEJQXRsYW50aWMvUmV5a2phdmlrCitJVAkrNDE1NCswMTIyOQlFdXJvcGUvUm9tZQorSkUJKzQ5MTItMDAyMDcJRXVyb3BlL0plcnNleQorSk0JKzE4MDAtMDc2NDgJQW1lcmljYS9KYW1haWNhCitKTwkrMzE1NyswMzU1NglBc2lhL0FtbWFuCitKUAkrMzUzOTE2KzEzOTQ0NDEJQXNpYS9Ub2t5bworS0UJLTAxMTcrMDM2NDkJQWZyaWNhL05haXJvYmkKK0tHCSs0MjU0KzA3NDM2CUFzaWEvQmlzaGtlaworS0gJKzExMzMrMTA0NTUJQXNpYS9QaG5vbV9QZW5oCitLSQkrMDEyNSsxNzMwMAlQYWNpZmljL1RhcmF3YQlHaWxiZXJ0IElzbGFuZHMKK0tJCS0wMzA4LTE3MTA1CVBhY2lmaWMvRW5kZXJidXJ5CVBob2VuaXggSXNsYW5kcworS0kJKzAxNTItMTU3MjAJUGFjaWZpYy9LaXJpdGltYXRpCUxpbmUgSXNsYW5kcworS00JLTExNDErMDQzMTYJSW5kaWFuL0NvbW9ybworS04JKzE3MTgtMDYyNDMJQW1lcmljYS9TdF9LaXR0cworS1AJKzM5MDErMTI1NDUJQXNpYS9QeW9uZ3lhbmcKK0tSCSszNzMzKzEyNjU4CUFzaWEvU2VvdWwKK0tXCSsyOTIwKzA0NzU5CUFzaWEvS3V3YWl0CitLWQkrMTkxOC0wODEyMwlBbWVyaWNhL0NheW1hbgorS1oJKzQzMTUrMDc2NTcJQXNpYS9BbG1hdHkJbW9zdCBsb2NhdGlvbnMKK0taCSs0NDQ4KzA2NTI4CUFzaWEvUXl6eWxvcmRhCVF5enlsb3JkYSAoS3l6eWxvcmRhLCBLenlsLU9yZGEpCitLWgkrNTAxNyswNTcxMAlBc2lhL0FxdG9iZQlBcXRvYmUgKEFrdG9iZSkKK0taCSs0NDMxKzA1MDE2CUFzaWEvQXF0YXUJQXR5cmF1IChBdGlyYXUsIEd1cid5ZXYpLCBNYW5nZ2h5c3RhdSAoTWFua2lzdGF1KQorS1oJKzUxMTMrMDUxMjEJQXNpYS9PcmFsCVdlc3QgS2F6YWtoc3RhbgorTEEJKzE3NTgrMTAyMzYJQXNpYS9WaWVudGlhbmUKK0xCCSszMzUzKzAzNTMwCUFzaWEvQmVpcnV0CitMQwkrMTQwMS0wNjEwMAlBbWVyaWNhL1N0X0x1Y2lhCitMSQkrNDcwOSswMDkzMQlFdXJvcGUvVmFkdXoKK0xLCSswNjU2KzA3OTUxCUFzaWEvQ29sb21ibworTFIJKzA2MTgtMDEwNDcJQWZyaWNhL01vbnJvdmlhCitMUwktMjkyOCswMjczMAlBZnJpY2EvTWFzZXJ1CitMVAkrNTQ0MSswMjUxOQlFdXJvcGUvVmlsbml1cworTFUJKzQ5MzYrMDA2MDkJRXVyb3BlL0x1eGVtYm91cmcKK0xWCSs1NjU3KzAyNDA2CUV1cm9wZS9SaWdhCitMWQkrMzI1NCswMTMxMQlBZnJpY2EvVHJpcG9saQorTUEJKzMzMzktMDA3MzUJQWZyaWNhL0Nhc2FibGFuY2EKK01DCSs0MzQyKzAwNzIzCUV1cm9wZS9Nb25hY28KK01ECSs0NzAwKzAyODUwCUV1cm9wZS9DaGlzaW5hdQorTUUJKzQyMjYrMDE5MTYJRXVyb3BlL1BvZGdvcmljYQorTUYJKzE4MDQtMDYzMDUJQW1lcmljYS9NYXJpZ290CitNRwktMTg1NSswNDczMQlJbmRpYW4vQW50YW5hbmFyaXZvCitNSAkrMDcwOSsxNzExMglQYWNpZmljL01hanVybwltb3N0IGxvY2F0aW9ucworTUgJKzA5MDUrMTY3MjAJUGFjaWZpYy9Ld2FqYWxlaW4JS3dhamFsZWluCitNSwkrNDE1OSswMjEyNglFdXJvcGUvU2tvcGplCitNTAkrMTIzOS0wMDgwMAlBZnJpY2EvQmFtYWtvCitNTQkrMTY0NyswOTYxMAlBc2lhL1Jhbmdvb24KK01OCSs0NzU1KzEwNjUzCUFzaWEvVWxhYW5iYWF0YXIJbW9zdCBsb2NhdGlvbnMKK01OCSs0ODAxKzA5MTM5CUFzaWEvSG92ZAlCYXlhbi1PbGdpeSwgR292aS1BbHRhaSwgSG92ZCwgVXZzLCBaYXZraGFuCitNTgkrNDgwNCsxMTQzMAlBc2lhL0Nob2liYWxzYW4JRG9ybm9kLCBTdWtoYmFhdGFyCitNTwkrMjIxNCsxMTMzNQlBc2lhL01hY2F1CitNUAkrMTUxMisxNDU0NQlQYWNpZmljL1NhaXBhbgorTVEJKzE0MzYtMDYxMDUJQW1lcmljYS9NYXJ0aW5pcXVlCitNUgkrMTgwNi0wMTU1NwlBZnJpY2EvTm91YWtjaG90dAorTVMJKzE2NDMtMDYyMTMJQW1lcmljYS9Nb250c2VycmF0CitNVAkrMzU1NCswMTQzMQlFdXJvcGUvTWFsdGEKK01VCS0yMDEwKzA1NzMwCUluZGlhbi9NYXVyaXRpdXMKK01WCSswNDEwKzA3MzMwCUluZGlhbi9NYWxkaXZlcworTVcJLTE1NDcrMDM1MDAJQWZyaWNhL0JsYW50eXJlCitNWAkrMTkyNC0wOTkwOQlBbWVyaWNhL01leGljb19DaXR5CUNlbnRyYWwgVGltZSAtIG1vc3QgbG9jYXRpb25zCitNWAkrMjEwNS0wODY0NglBbWVyaWNhL0NhbmN1bglDZW50cmFsIFRpbWUgLSBRdWludGFuYSBSb28KK01YCSsyMDU4LTA4OTM3CUFtZXJpY2EvTWVyaWRhCUNlbnRyYWwgVGltZSAtIENhbXBlY2hlLCBZdWNhdGFuCitNWAkrMjU0MC0xMDAxOQlBbWVyaWNhL01vbnRlcnJleQlDZW50cmFsIFRpbWUgLSBDb2FodWlsYSwgRHVyYW5nbywgTnVldm8gTGVvbiwgVGFtYXVsaXBhcworTVgJKzIzMTMtMTA2MjUJQW1lcmljYS9NYXphdGxhbglNb3VudGFpbiBUaW1lIC0gUyBCYWphLCBOYXlhcml0LCBTaW5hbG9hCitNWAkrMjgzOC0xMDYwNQlBbWVyaWNhL0NoaWh1YWh1YQlNb3VudGFpbiBUaW1lIC0gQ2hpaHVhaHVhCitNWAkrMjkwNC0xMTA1OAlBbWVyaWNhL0hlcm1vc2lsbG8JTW91bnRhaW4gU3RhbmRhcmQgVGltZSAtIFNvbm9yYQorTVgJKzMyMzItMTE3MDEJQW1lcmljYS9UaWp1YW5hCVBhY2lmaWMgVGltZQorTVkJKzAzMTArMTAxNDIJQXNpYS9LdWFsYV9MdW1wdXIJcGVuaW5zdWxhciBNYWxheXNpYQorTVkJKzAxMzMrMTEwMjAJQXNpYS9LdWNoaW5nCVNhYmFoICYgU2FyYXdhaworTVoJLTI1NTgrMDMyMzUJQWZyaWNhL01hcHV0bworTkEJLTIyMzQrMDE3MDYJQWZyaWNhL1dpbmRob2VrCitOQwktMjIxNisxNjYyNwlQYWNpZmljL05vdW1lYQorTkUJKzEzMzErMDAyMDcJQWZyaWNhL05pYW1leQorTkYJLTI5MDMrMTY3NTgJUGFjaWZpYy9Ob3Jmb2xrCitORwkrMDYyNyswMDMyNAlBZnJpY2EvTGFnb3MKK05JCSsxMjA5LTA4NjE3CUFtZXJpY2EvTWFuYWd1YQorTkwJKzUyMjIrMDA0NTQJRXVyb3BlL0Ftc3RlcmRhbQorTk8JKzU5NTUrMDEwNDUJRXVyb3BlL09zbG8KK05QCSsyNzQzKzA4NTE5CUFzaWEvS2F0aG1hbmR1CitOUgktMDAzMSsxNjY1NQlQYWNpZmljL05hdXJ1CitOVQktMTkwMS0xNjk1NQlQYWNpZmljL05pdWUKK05aCS0zNjUyKzE3NDQ2CVBhY2lmaWMvQXVja2xhbmQJbW9zdCBsb2NhdGlvbnMKK05aCS00MzU3LTE3NjMzCVBhY2lmaWMvQ2hhdGhhbQlDaGF0aGFtIElzbGFuZHMKK09NCSsyMzM2KzA1ODM1CUFzaWEvTXVzY2F0CitQQQkrMDg1OC0wNzkzMglBbWVyaWNhL1BhbmFtYQorUEUJLTEyMDMtMDc3MDMJQW1lcmljYS9MaW1hCitQRgktMTczMi0xNDkzNAlQYWNpZmljL1RhaGl0aQlTb2NpZXR5IElzbGFuZHMKK1BGCS0wOTAwLTEzOTMwCVBhY2lmaWMvTWFycXVlc2FzCU1hcnF1ZXNhcyBJc2xhbmRzCitQRgktMjMwOC0xMzQ1NwlQYWNpZmljL0dhbWJpZXIJR2FtYmllciBJc2xhbmRzCitQRwktMDkzMCsxNDcxMAlQYWNpZmljL1BvcnRfTW9yZXNieQorUEgJKzE0MzUrMTIxMDAJQXNpYS9NYW5pbGEKK1BLCSsyNDUyKzA2NzAzCUFzaWEvS2FyYWNoaQorUEwJKzUyMTUrMDIxMDAJRXVyb3BlL1dhcnNhdworUE0JKzQ3MDMtMDU2MjAJQW1lcmljYS9NaXF1ZWxvbgorUE4JLTI1MDQtMTMwMDUJUGFjaWZpYy9QaXRjYWlybgorUFIJKzE4MjgwNi0wNjYwNjIyCUFtZXJpY2EvUHVlcnRvX1JpY28KK1BTCSszMTMwKzAzNDI4CUFzaWEvR2F6YQorUFQJKzM4NDMtMDA5MDgJRXVyb3BlL0xpc2JvbgltYWlubGFuZAorUFQJKzMyMzgtMDE2NTQJQXRsYW50aWMvTWFkZWlyYQlNYWRlaXJhIElzbGFuZHMKK1BUCSszNzQ0LTAyNTQwCUF0bGFudGljL0F6b3JlcwlBem9yZXMKK1BXCSswNzIwKzEzNDI5CVBhY2lmaWMvUGFsYXUKK1BZCS0yNTE2LTA1NzQwCUFtZXJpY2EvQXN1bmNpb24KK1FBCSsyNTE3KzA1MTMyCUFzaWEvUWF0YXIKK1JFCS0yMDUyKzA1NTI4CUluZGlhbi9SZXVuaW9uCitSTwkrNDQyNiswMjYwNglFdXJvcGUvQnVjaGFyZXN0CitSUwkrNDQ1MCswMjAzMAlFdXJvcGUvQmVsZ3JhZGUKK1JVCSs1NDQzKzAyMDMwCUV1cm9wZS9LYWxpbmluZ3JhZAlNb3Njb3ctMDEgLSBLYWxpbmluZ3JhZAorUlUJKzU1NDUrMDM3MzUJRXVyb3BlL01vc2NvdwlNb3Njb3crMDAgLSB3ZXN0IFJ1c3NpYQorUlUJKzQ4NDQrMDQ0MjUJRXVyb3BlL1ZvbGdvZ3JhZAlNb3Njb3crMDAgLSBDYXNwaWFuIFNlYQorUlUJKzUzMTIrMDUwMDkJRXVyb3BlL1NhbWFyYQlNb3Njb3crMDEgLSBTYW1hcmEsIFVkbXVydGlhCitSVQkrNTY1MSswNjAzNglBc2lhL1lla2F0ZXJpbmJ1cmcJTW9zY293KzAyIC0gVXJhbHMKK1JVCSs1NTAwKzA3MzI0CUFzaWEvT21zawlNb3Njb3crMDMgLSB3ZXN0IFNpYmVyaWEKK1JVCSs1NTAyKzA4MjU1CUFzaWEvTm92b3NpYmlyc2sJTW9zY293KzAzIC0gTm92b3NpYmlyc2sKK1JVCSs1NjAxKzA5MjUwCUFzaWEvS3Jhc25veWFyc2sJTW9zY293KzA0IC0gWWVuaXNlaSBSaXZlcgorUlUJKzUyMTYrMTA0MjAJQXNpYS9Jcmt1dHNrCU1vc2NvdyswNSAtIExha2UgQmFpa2FsCitSVQkrNjIwMCsxMjk0MAlBc2lhL1lha3V0c2sJTW9zY293KzA2IC0gTGVuYSBSaXZlcgorUlUJKzQzMTArMTMxNTYJQXNpYS9WbGFkaXZvc3RvawlNb3Njb3crMDcgLSBBbXVyIFJpdmVyCitSVQkrNDY1OCsxNDI0MglBc2lhL1Nha2hhbGluCU1vc2NvdyswNyAtIFNha2hhbGluIElzbGFuZAorUlUJKzU5MzQrMTUwNDgJQXNpYS9NYWdhZGFuCU1vc2NvdyswOCAtIE1hZ2FkYW4KK1JVCSs1MzAxKzE1ODM5CUFzaWEvS2FtY2hhdGthCU1vc2NvdyswOSAtIEthbWNoYXRrYQorUlUJKzY0NDUrMTc3MjkJQXNpYS9BbmFkeXIJTW9zY293KzEwIC0gQmVyaW5nIFNlYQorUlcJLTAxNTcrMDMwMDQJQWZyaWNhL0tpZ2FsaQorU0EJKzI0MzgrMDQ2NDMJQXNpYS9SaXlhZGgKK1NCCS0wOTMyKzE2MDEyCVBhY2lmaWMvR3VhZGFsY2FuYWwKK1NDCS0wNDQwKzA1NTI4CUluZGlhbi9NYWhlCitTRAkrMTUzNiswMzIzMglBZnJpY2EvS2hhcnRvdW0KK1NFCSs1OTIwKzAxODAzCUV1cm9wZS9TdG9ja2hvbG0KK1NHCSswMTE3KzEwMzUxCUFzaWEvU2luZ2Fwb3JlCitTSAktMTU1NS0wMDU0MglBdGxhbnRpYy9TdF9IZWxlbmEKK1NJCSs0NjAzKzAxNDMxCUV1cm9wZS9ManVibGphbmEKK1NKCSs3ODAwKzAxNjAwCUFyY3RpYy9Mb25neWVhcmJ5ZW4KK1NLCSs0ODA5KzAxNzA3CUV1cm9wZS9CcmF0aXNsYXZhCitTTAkrMDgzMC0wMTMxNQlBZnJpY2EvRnJlZXRvd24KK1NNCSs0MzU1KzAxMjI4CUV1cm9wZS9TYW5fTWFyaW5vCitTTgkrMTQ0MC0wMTcyNglBZnJpY2EvRGFrYXIKK1NPCSswMjA0KzA0NTIyCUFmcmljYS9Nb2dhZGlzaHUKK1NSCSswNTUwLTA1NTEwCUFtZXJpY2EvUGFyYW1hcmlibworU1QJKzAwMjArMDA2NDQJQWZyaWNhL1Nhb19Ub21lCitTVgkrMTM0Mi0wODkxMglBbWVyaWNhL0VsX1NhbHZhZG9yCitTWQkrMzMzMCswMzYxOAlBc2lhL0RhbWFzY3VzCitTWgktMjYxOCswMzEwNglBZnJpY2EvTWJhYmFuZQorVEMJKzIxMjgtMDcxMDgJQW1lcmljYS9HcmFuZF9UdXJrCitURAkrMTIwNyswMTUwMwlBZnJpY2EvTmRqYW1lbmEKK1RGCS00OTIxMTArMDcwMTMwMwlJbmRpYW4vS2VyZ3VlbGVuCitURwkrMDYwOCswMDExMwlBZnJpY2EvTG9tZQorVEgJKzEzNDUrMTAwMzEJQXNpYS9CYW5na29rCitUSgkrMzgzNSswNjg0OAlBc2lhL0R1c2hhbmJlCitUSwktMDkyMi0xNzExNAlQYWNpZmljL0Zha2FvZm8KK1RMCS0wODMzKzEyNTM1CUFzaWEvRGlsaQorVE0JKzM3NTcrMDU4MjMJQXNpYS9Bc2hnYWJhdAorVE4JKzM2NDgrMDEwMTEJQWZyaWNhL1R1bmlzCitUTwktMjExMC0xNzUxMAlQYWNpZmljL1RvbmdhdGFwdQorVFIJKzQxMDErMDI4NTgJRXVyb3BlL0lzdGFuYnVsCitUVAkrMTAzOS0wNjEzMQlBbWVyaWNhL1BvcnRfb2ZfU3BhaW4KK1RWCS0wODMxKzE3OTEzCVBhY2lmaWMvRnVuYWZ1dGkKK1RXCSsyNTAzKzEyMTMwCUFzaWEvVGFpcGVpCitUWgktMDY0OCswMzkxNwlBZnJpY2EvRGFyX2VzX1NhbGFhbQorVUEJKzUwMjYrMDMwMzEJRXVyb3BlL0tpZXYJbW9zdCBsb2NhdGlvbnMKK1VBCSs0ODM3KzAyMjE4CUV1cm9wZS9Vemhnb3JvZAlSdXRoZW5pYQorVUEJKzQ3NTArMDM1MTAJRXVyb3BlL1phcG9yb3poeWUJWmFwb3JvemgneWUsIEUgTHVnYW5zayAvIFphcG9yaXpoaWEsIEUgTHVoYW5zaworVUEJKzQ0NTcrMDM0MDYJRXVyb3BlL1NpbWZlcm9wb2wJY2VudHJhbCBDcmltZWEKK1VHCSswMDE5KzAzMjI1CUFmcmljYS9LYW1wYWxhCitVTQkrMTY0NS0xNjkzMQlQYWNpZmljL0pvaG5zdG9uCUpvaG5zdG9uIEF0b2xsCitVTQkrMjgxMy0xNzcyMglQYWNpZmljL01pZHdheQlNaWR3YXkgSXNsYW5kcworVU0JKzE5MTcrMTY2MzcJUGFjaWZpYy9XYWtlCVdha2UgSXNsYW5kCitVUwkrNDA0MjUxLTA3NDAwMjMJQW1lcmljYS9OZXdfWW9yawlFYXN0ZXJuIFRpbWUKK1VTCSs0MjE5NTMtMDgzMDI0NQlBbWVyaWNhL0RldHJvaXQJRWFzdGVybiBUaW1lIC0gTWljaGlnYW4gLSBtb3N0IGxvY2F0aW9ucworVVMJKzM4MTUxNS0wODU0NTM0CUFtZXJpY2EvS2VudHVja3kvTG91aXN2aWxsZQlFYXN0ZXJuIFRpbWUgLSBLZW50dWNreSAtIExvdWlzdmlsbGUgYXJlYQorVVMJKzM2NDk0Ny0wODQ1MDU3CUFtZXJpY2EvS2VudHVja3kvTW9udGljZWxsbwlFYXN0ZXJuIFRpbWUgLSBLZW50dWNreSAtIFdheW5lIENvdW50eQorVVMJKzM5NDYwNi0wODYwOTI5CUFtZXJpY2EvSW5kaWFuYS9JbmRpYW5hcG9saXMJRWFzdGVybiBUaW1lIC0gSW5kaWFuYSAtIG1vc3QgbG9jYXRpb25zCitVUwkrMzg0MDM4LTA4NzMxNDMJQW1lcmljYS9JbmRpYW5hL1ZpbmNlbm5lcwlFYXN0ZXJuIFRpbWUgLSBJbmRpYW5hIC0gRGF2aWVzcywgRHVib2lzLCBLbm94ICYgTWFydGluIENvdW50aWVzCitVUwkrNDEwMzA1LTA4NjM2MTEJQW1lcmljYS9JbmRpYW5hL1dpbmFtYWMJRWFzdGVybiBUaW1lIC0gSW5kaWFuYSAtIFB1bGFza2kgQ291bnR5CitVUwkrMzgyMjMyLTA4NjIwNDEJQW1lcmljYS9JbmRpYW5hL01hcmVuZ28JRWFzdGVybiBUaW1lIC0gSW5kaWFuYSAtIENyYXdmb3JkIENvdW50eQorVVMJKzM4MjkzMS0wODcxNjQzCUFtZXJpY2EvSW5kaWFuYS9QZXRlcnNidXJnCUVhc3Rlcm4gVGltZSAtIEluZGlhbmEgLSBQaWtlIENvdW50eQorVVMJKzM4NDQ1Mi0wODUwNDAyCUFtZXJpY2EvSW5kaWFuYS9WZXZheQlFYXN0ZXJuIFRpbWUgLSBJbmRpYW5hIC0gU3dpdHplcmxhbmQgQ291bnR5CitVUwkrNDE1MTAwLTA4NzM5MDAJQW1lcmljYS9DaGljYWdvCUNlbnRyYWwgVGltZQorVVMJKzM3NTcxMS0wODY0NTQxCUFtZXJpY2EvSW5kaWFuYS9UZWxsX0NpdHkJQ2VudHJhbCBUaW1lIC0gSW5kaWFuYSAtIFBlcnJ5IENvdW50eQorVVMJKzQxMTc0NS0wODYzNzMwCUFtZXJpY2EvSW5kaWFuYS9Lbm94CUNlbnRyYWwgVGltZSAtIEluZGlhbmEgLSBTdGFya2UgQ291bnR5CitVUwkrNDUwNjI4LTA4NzM2NTEJQW1lcmljYS9NZW5vbWluZWUJQ2VudHJhbCBUaW1lIC0gTWljaGlnYW4gLSBEaWNraW5zb24sIEdvZ2ViaWMsIElyb24gJiBNZW5vbWluZWUgQ291bnRpZXMKK1VTCSs0NzA2NTktMTAxMTc1NwlBbWVyaWNhL05vcnRoX0Rha290YS9DZW50ZXIJQ2VudHJhbCBUaW1lIC0gTm9ydGggRGFrb3RhIC0gT2xpdmVyIENvdW50eQorVVMJKzQ2NTA0Mi0xMDEyNDM5CUFtZXJpY2EvTm9ydGhfRGFrb3RhL05ld19TYWxlbQlDZW50cmFsIFRpbWUgLSBOb3J0aCBEYWtvdGEgLSBNb3J0b24gQ291bnR5IChleGNlcHQgTWFuZGFuIGFyZWEpCitVUwkrMzk0NDIxLTEwNDU5MDMJQW1lcmljYS9EZW52ZXIJTW91bnRhaW4gVGltZQorVVMJKzQzMzY0OS0xMTYxMjA5CUFtZXJpY2EvQm9pc2UJTW91bnRhaW4gVGltZSAtIHNvdXRoIElkYWhvICYgZWFzdCBPcmVnb24KK1VTCSszNjQ3MDgtMTA4NDExMQlBbWVyaWNhL1NoaXByb2NrCU1vdW50YWluIFRpbWUgLSBOYXZham8KK1VTCSszMzI2NTQtMTEyMDQyNAlBbWVyaWNhL1Bob2VuaXgJTW91bnRhaW4gU3RhbmRhcmQgVGltZSAtIEFyaXpvbmEKK1VTCSszNDAzMDgtMTE4MTQzNAlBbWVyaWNhL0xvc19BbmdlbGVzCVBhY2lmaWMgVGltZQorVVMJKzYxMTMwNS0xNDk1NDAxCUFtZXJpY2EvQW5jaG9yYWdlCUFsYXNrYSBUaW1lCitVUwkrNTgxODA3LTEzNDI1MTEJQW1lcmljYS9KdW5lYXUJQWxhc2thIFRpbWUgLSBBbGFza2EgcGFuaGFuZGxlCitVUwkrNTkzMjQ5LTEzOTQzMzgJQW1lcmljYS9ZYWt1dGF0CUFsYXNrYSBUaW1lIC0gQWxhc2thIHBhbmhhbmRsZSBuZWNrCitVUwkrNjQzMDA0LTE2NTI0MjMJQW1lcmljYS9Ob21lCUFsYXNrYSBUaW1lIC0gd2VzdCBBbGFza2EKK1VTCSs1MTUyNDgtMTc2MzkyOQlBbWVyaWNhL0FkYWsJQWxldXRpYW4gSXNsYW5kcworVVMJKzIxMTgyNS0xNTc1MTMwCVBhY2lmaWMvSG9ub2x1bHUJSGF3YWlpCitVWQktMzQ1My0wNTYxMQlBbWVyaWNhL01vbnRldmlkZW8KK1VaCSszOTQwKzA2NjQ4CUFzaWEvU2FtYXJrYW5kCXdlc3QgVXpiZWtpc3RhbgorVVoJKzQxMjArMDY5MTgJQXNpYS9UYXNoa2VudAllYXN0IFV6YmVraXN0YW4KK1ZBCSs0MTU0MDgrMDEyMjcxMQlFdXJvcGUvVmF0aWNhbgorVkMJKzEzMDktMDYxMTQJQW1lcmljYS9TdF9WaW5jZW50CitWRQkrMTAzMC0wNjY1NglBbWVyaWNhL0NhcmFjYXMKK1ZHCSsxODI3LTA2NDM3CUFtZXJpY2EvVG9ydG9sYQorVkkJKzE4MjEtMDY0NTYJQW1lcmljYS9TdF9UaG9tYXMKK1ZOCSsxMDQ1KzEwNjQwCUFzaWEvSG9fQ2hpX01pbmgKK1ZVCS0xNzQwKzE2ODI1CVBhY2lmaWMvRWZhdGUKK1dGCS0xMzE4LTE3NjEwCVBhY2lmaWMvV2FsbGlzCitXUwktMTM1MC0xNzE0NAlQYWNpZmljL0FwaWEKK1lFCSsxMjQ1KzA0NTEyCUFzaWEvQWRlbgorWVQJLTEyNDcrMDQ1MTQJSW5kaWFuL01heW90dGUKK1pBCS0yNjE1KzAyODAwCUFmcmljYS9Kb2hhbm5lc2J1cmcKK1pNCS0xNTI1KzAyODE3CUFmcmljYS9MdXNha2EKK1pXCS0xNzUwKzAzMTAzCUFmcmljYS9IYXJhcmUK