ZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTM4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L01ha2VmaWxlCkBAIC0wLDAgKzEsMzkgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyAtLS0tIFRlc3QgcGF0dGVybnMgZm9yIHByb2plY3Qgc3RyaVZlIC0tLS0KKworLlNVRkZJWEVTOgorLlNJTEVOVDogY2xlYW4gYWxsCisKK1BBVFRFUk5TID0gd2JfcG9ydCByaXNjX2Jvb3QgdXNlcl9yaXNjX2Jvb3QgdXNlcl91YXJ0IHVzZXJfc3BpIHVzZXJfaTJjbSByaXNjdl9yZWdyZXNzIHVzZXJfYmFzaWMgdXNlcl9tYmlzdF90ZXN0MSB1c2VyX3Jpc2Nfc29mdF9ib290IHVzZXJfdWFydF9tYXN0ZXIgdWFydF9tYXN0ZXIKKworYWxsOiAgJHtQQVRURVJOU30KKwlmb3IgaSBpbiAke1BBVFRFUk5TfTsgZG8gXAorCQkoIGNkICQkaSAmJiBtYWtlIC1mIE1ha2VmaWxlICQke2l9LnZjZCAmPiB2ZXJpZnkubG9nICYmIGdyZXAgTW9uaXRvciB2ZXJpZnkubG9nKSA7IFwKKwlkb25lCisKK0RWX1BBVFRFUk5TID0gJChmb3JlYWNoIGR2LCAkKFBBVFRFUk5TKSwgdmVyaWZ5LSQoZHYpKQorJChEVl9QQVRURVJOUyk6IHZlcmlmeS0lIDogCisJY2QgJCogJiYgbWFrZQorCitjbGVhbjogICR7UEFUVEVSTlN9CisJZm9yIGkgaW4gJHtQQVRURVJOU307IGRvIFwKKwkJKCBjZCAkJGkgJiYgbWFrZSBjbGVhbiApIDsgXAorCWRvbmUKKwlybSAtcmYgKi5sb2cKKwkKKy5QSE9OWTogY2xlYW4gYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L1JFQURNRS5tZCBiL3Zlcmlsb2cvZHYvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhODM0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L1JFQURNRS5tZApAQCAtMCwwICsxLDIzNiBAQAorPCEtLS0KKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy0tPgorCisjIFNpbXVsYXRpb24gRW52aXJvbm1lbnQgU2V0dXAKKworVGhlcmUgYXJlIHR3byBvcHRpb25zIGZvciBzZXR0aW5nIHVwIHRoZSBzaW11bGF0aW9uIGVudmlyb25tZW50OiAKKworKiBQdWxsaW5nIGEgcHJlLWJ1aWx0IGRvY2tlciBpbWFnZSAKKyogSW5zdGFsbGluZyB0aGUgZGVwZW5kZWNpZXMgbG9jYWxseQorCisjIyAxLiBEb2NrZXIKKworVGhlcmUgaXMgYW4gYXZhaWxhYmxlIGRvY2tlciBzZXR1cCB3aXRoIHRoZSBuZWVkZWQgdG9vbHMgYXQgW2VmYWJsZXNzL2RvY2tlcml6ZWQtdmVyaWZpY2F0aW9uLXNldHVwXShodHRwczovL2dpdGh1Yi5jb20vZWZhYmxlc3MvZG9ja2VyaXplZC12ZXJpZmljYXRpb24tc2V0dXApIAorCitSdW4gdGhlIGZvbGxvd2luZyB0byBwdWxsIHRoZSBpbWFnZTogCisKK2BgYAorZG9ja2VyIHB1bGwgZWZhYmxlc3MvZHZfc2V0dXA6bGF0ZXN0CitgYGAKKworIyMgMi4gTG9jYWwgSW5zdGFsbGlvbiAoTGludXgpCisKK1lvdSB3aWxsIG5lZWQgdG8gZnVsbGZpbCB0aGVzZSBkZXBlbmRlY2llczogCisKKyogSWNhcnVzIFZlcmlsb2cgKDEwLjIrKQorKiBSVjMySSBUb29sY2hhaW4KKworVXNpbmcgYXB0LCB5b3UgY2FuIGluc3RhbGwgSWNhcnVzIFZlcmlsb2c6CisKK2BgYGJhc2gKK3N1ZG8gYXB0LWdldCBpbnN0YWxsIGl2ZXJpbG9nCitgYGAKKworTmV4dCwgeW91IHdpbGwgbmVlZCB0byBidWlsZCB0aGUgUlYzMkkgdG9vbGNoYWluLiBGaXJzdGx5LCBleHBvcnQgdGhlIGluc3RhbGxhdGlvbiBwYXRoIGZvciB0aGUgUlYzMkkgdG9vbGNoYWluLCAKKworYGBgYmFzaAorZXhwb3J0IEdDQ19QQVRIPTxnY2MtaW5zdGFsbGF0aW9uLXBhdGg+CitgYGAKKworVGhlbiwgcnVuIHRoZSBmb2xsb3dpbmc6IAorCitgYGBiYXNoCisjIHBhY2thZ2VzIG5lZWRlZDoKK3N1ZG8gYXB0LWdldCBpbnN0YWxsIGF1dG9jb25mIGF1dG9tYWtlIGF1dG90b29scy1kZXYgY3VybCBsaWJtcGMtZGV2IFwKKyAgICBsaWJtcGZyLWRldiBsaWJnbXAtZGV2IGdhd2sgYnVpbGQtZXNzZW50aWFsIGJpc29uIGZsZXggdGV4aW5mbyBcCisgICAgZ3BlcmYgbGlidG9vbCBwYXRjaHV0aWxzIGJjIHpsaWIxZy1kZXYgZ2l0IGxpYmV4cGF0MS1kZXYKKworc3VkbyBta2RpciAkR0NDX1BBVEgKK3N1ZG8gY2hvd24gJFVTRVIgJEdDQ19QQVRICisKK2dpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtZ251LXRvb2xjaGFpbiByaXNjdi1nbnUtdG9vbGNoYWluLXJ2MzJpCitjZCByaXNjdi1nbnUtdG9vbGNoYWluLXJ2MzJpCitnaXQgY2hlY2tvdXQgNDExZDEzNAorZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisKK21rZGlyIGJ1aWxkOyBjZCBidWlsZAorLi4vY29uZmlndXJlIC0td2l0aC1hcmNoPXJ2MzJpIC0tcHJlZml4PSRHQ0NfUEFUSAorbWFrZSAtaiQobnByb2MpCitgYGAKKworIyBSdW5uaW5nIFNpbXVsYXRpb24KKworIyMgRG9ja2VyCisKK0ZpcnN0LCB5b3Ugd2lsbCBuZWVkIHRvIGV4cG9ydCBhIG51bWJlciBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXM6IAorCitgYGBiYXNoCitleHBvcnQgUERLX1BBVEg9PHBkay1sb2NhdGlvbi9za3kxMzBBPgorZXhwb3J0IENBUkFWRUxfUk9PVD08Y2FyYXZlbF9yb290PgorZXhwb3J0IFVQUkpfUk9PVD08dXNlcl9wcm9qZWN0X3Jvb3Q+CitgYGAKKworVGhlbiwgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBzdGFydCB0aGUgZG9ja2VyIGNvbnRhaW5lciA6CisKK2BgYAorZG9ja2VyIHJ1biAtaXQgLXYgJENBUkFWRUxfUk9PVDokQ0FSQVZFTF9ST09UIC12ICRQREtfUEFUSDokUERLX1BBVEggLXYgJFVQUkpfUk9PVDokVVBSSl9ST09UIC1lIENBUkFWRUxfUk9PVD0kQ0FSQVZFTF9ST09UIC1lIFBES19QQVRIPSRQREtfUEFUSCAtZSBVUFJKX1JPT1Q9JFVQUkpfUk9PVCAtdSAkKGlkIC11ICRVU0VSKTokKGlkIC1nICRVU0VSKSBlZmFibGVzcy9kdl9zZXR1cDpsYXRlc3QKK2BgYAorCitUaGVuLCBuYXZpZ2F0ZSB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBEViB0ZXN0cyByZXNpZGUgOiAKKworYGBgYmFzaAorY2QgJFVQUkpfUk9PVC92ZXJpbG9nL2R2LworYGBgCisKK1RoZW4sIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGF0IFtCb3RoXSgjYm90aCkgdG8gcnVuIFJUTC9HTCBzaW11bGF0aW9uLgorCisjIyBMb2NhbAorCitZb3Ugd2lsbCBuZWVkIHRvIGV4cG9ydCB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6IAorCitgYGBiYXNoCitleHBvcnQgR0NDX1BBVEg9PGdjYy1pbnN0YWxsYXRpb24tcGF0aD4KK2V4cG9ydCBQREtfUEFUSD08cGRrLWxvY2F0aW9uL3NreTEzMEE+CitgYGAKKworVGhlbiwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbiBhdCBbQm90aF0oI2JvdGgpIHRvIHJ1biBSVEwvR0wgc2ltdWxhdGlvbi4KKworIyMgQm90aAorCitUbyBydW4gUlRMIHNpbXVsYXRpb24gZm9yIG9uZSBvZiB0aGUgRFYgdGVzdHMsIAorCitgYGBiYXNoCitjZCA8ZHYtdGVzdD4KK21ha2UKK2BgYAorCitUbyBydW4gZ2F0ZSBsZXZlbCBzaW11bGF0aW9uIGZvciBvbmUgb2YgdGhlIERWIHRlc3RzLCAKKworYGBgYmFzaAorY2QgPGR2LXRlc3Q+CitTSU09R0wgbWFrZQorYGBgCisKKyMgVXNlciBQcm9qZWN0IEV4YW1wbGUgRFYKKworVGhlIGRpcmVjdG9yeSBpbmNsdWRlcyBmb3VyIHRlc3RzIGZvciB0aGUgY291bnRlciB1c2VyLXByb2plY3QgZXhhbXBsZTogCisKKyMjIyBJTyBQb3J0cyBUZXN0IAorCisqIFRoaXMgdGVzdCBpcyBtZWFudCB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4gY29uZmlndXJlIHRoZSBwYWRzIGZvciB0aGUgdXNlciBwcm9qZWN0IGFyZWEuIFRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSBsb3dlciA4IElPIHBhZHMgaW4gdGhlIHVzZXIgc3BhY2UgYXMgb3V0cHV0czoKKworCWBgYGMKKwlyZWdfbXByal9pb18wID0gIEdQSU9fTU9ERV9VU0VSX1NURF9PVVRQVVQ7CisJcmVnX21wcmpfaW9fMSA9ICBHUElPX01PREVfVVNFUl9TVERfT1VUUFVUOworCS4uLi4uCisJcmVnX21wcmpfaW9fNyA9ICBHUElPX01PREVfVVNFUl9TVERfT1VUUFVUOworCWBgYAorCisqIFRoZW4sIHRoZSBmaXJtd2FyZSBhcHBsaWVzIHRoZSBwYWQgY29uZmlndXJhdGlvbiBieSBlbmFibGluZyB0aGUgc2VyaWFsIHRyYW5zZmVyIG9uIHRoZSBzaGlmdCByZWdpc3RlciByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIHBhZHMgYW5kIHdhaXRzIHVudGlsIHRoZSB0cmFuc2ZlciBpcyBkb25lLiAKKwlgYGBjCisJcmVnX21wcmpfeGZlciA9IDE7CisJd2hpbGUgKHJlZ19tcHJqX3hmZXIgPT0gMSk7CisJYGBgCisKKyogVGhlIHRlc3RiZW5jaCBzdWNjZXNzIGNyaXRlcmlhIGlzIHRoYXQgd2UgY2FuIG9ic2VydmUgdGhlIGNvdW50ZXIgdmFsdWUgb24gdGhlIGxvd2VyIDggSS9PIHBhZHMuIFRoaXMgY3JpdGVyaWEgaXMgY2hlY2tlZCBieSB0aGUgdGVzdGJlbmNoIHRocm91Z2ggb2JzZXJ2aW5nIHRoZSB2YWx1ZXMgb24gdGhlIEkvTyBwYWRzIGFzIGZvbGxvd3M6IAorCisJYGBgdmVyaWxvZworCXdhaXQobXByal9pb18wID09IDgnaDAxKTsKKwl3YWl0KG1wcmpfaW9fMCA9PSA4J2gwMik7CisJd2FpdChtcHJqX2lvXzAgPT0gOCdoMDMpOworCS4uLi4KKwl3YWl0KG1wcmpfaW9fMCA9PSA4J2hGRik7CisJYGBgCisKKyogSWYgdGhlIHRlc3RiZW5jaCBmYWlscywgaXQgd2lsbCBwcmludCBhIHRpbWVvdXQgbWVzc2FnZSB0byB0aGUgdGVybWluYWwuIAorCisjIyMgTG9naWMgQW5hbHl6ZXIgVGVzdCAxCisgCisqIFRoaXMgdGVzdCBpcyBtZWFudCB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4gdXNlIHRoZSBsb2dpYyBhbmFseXplciB0byBtb25pdG9yIGFuZCB3cml0ZSBzaWduYWxzIGluIHRoZSB1c2VyIHByb2plY3QgZnJvbSB0aGUgbWFuYWdlbWVudCBTb0MuIEZpcnN0bHksIHRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSB1cHBlciAxNiBvZiB0aGUgZmlyc3QgMzIgR1BJTyBwYWRzIGFzIG91dHB1dHMgZnJvbSB0aGUgbWFuYWdlbnQgU29DLCBhcHBsaWVzIHRoZSBjb25maWd1cmF0aW9uIGJ5IGluaXRpYXRpbmcgdGhlIHNlcmlhbCB0cmFuc2ZlciBvbiB0aGUgc2hpZnQgcmVnaXN0ZXIsIGFuZCB3cml0ZXMgYSB2YWx1ZSBvbiB0aGUgcGFkcyB0byBpbmRpY2F0ZSB0aGUgZW5kIG9mIHBhZCBjb25maWd1cmF0aW9uIGFuZCB0aGUgc3RhcnQgb2YgdGhlIHRlc3QuIAorCisJYGBgYworCXJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKwlyZWdfbXByal9pb18zMCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisJLi4uLi4KKwlyZWdfbXByal9pb18xNiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisKKwlyZWdfbXByal94ZmVyID0gMTsKKwl3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKworCS8vIEZsYWcgc3RhcnQgb2YgdGhlIHRlc3QgCisJcmVnX21wcmpfZGF0YWwgPSAweEFCNDAwMDAwOworCWBgYAorCQorCVRoaXMgaXMgZG9uZSB0byBmbGFnIHRoZSBzdGFydC9zdWNjZXNzL2VuZCBvZiB0aGUgc2ltdWxhdGlvbiBieSB3cml0aW5nIGEgY2VydGFpbiB2YWx1ZSB0byB0aGUgSS9PcyB3aGljaCBpcyB0aGVuIGNoZWNrZWQgYnkgdGhlIHRlc3RiZW5jaCB0byBrbm93IHdoZXRoZXIgdGhlIHRlc3Qgc3RhcnRlZC9lbmRlZC9zdWNjZWVkZWQuIEZvciBleGFtcGxlLCB0aGUgdGVzdGJlbmNoIGNoZWNrcyBvbiB0aGUgdmFsdWUgb2YgdGhlIHVwcGVyIDE2IG9mIDMyIEkvT3MsIGlmIGl0IGlzIGVxdWFsIHRvIGAxNidoQUI0MGAsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSB0ZXN0IHN0YXJ0ZWQuICAKKworCWBgYHZlcmlsb2cKKwl3YWl0KGNoZWNrYml0cyA9PSAxNidoQUI0MCk7CisJJGRpc3BsYXkoIkxBIFRlc3QgMSBzdGFydGVkIik7CisJYGBgCisJCisqIFRoZW4sIHRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSBsb2dpYyBhbmFseXplciAoTEEpIHByb2JlcyBgWzMxOjBdYCBhcyBpbnB1dHMgdG8gdGhlIG1hbmFnZW1lbnQgU29DIHRvIG1vbml0b3IgdGhlIGNvdW50ZXIgdmFsdWUsIGFuZCBjb25maWd1cmUgdGhlIGxvZ2ljIGFuYWx5emVyIHByb2JlcyBgWzYzOjMyXWAgYXMgb3V0cHV0cyBmcm9tIHRoZSBtYW5hZ2VtZW50IFNvQyAoaW5wdXRzIHRvIHRoZSB1c2VyX3Byb2pfZXhhbXBsZSkgdG8gc2V0IHRoZSBjb3VudGVyIGluaXRpYWwgdmFsdWUuIFRoaXMgaXMgZG9uZSBieSB3cml0aW5nIHRvIHRoZSBMQSBwcm9iZXMgZW5hYmxlIHJlZ2lzdGVycy4gICBOb3RlIHRoYXQgdGhlIG91dHB1dCBlbmFibGUgaXMgYWN0aXZlIGxvdywgd2hpbGUgdGhlIGlucHV0IGVuYWJsZSBpcyBhY3RpdmUgaGlnaC4gIEV2ZXJ5IGNoYW5uZWwgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGlucHV0LCBvdXRwdXQsIG9yIGJvdGggaW5kZXBlbmRlbnRseS4KKworIAorCWBgYGMKKwlyZWdfbGEwX29lbmIgPSByZWdfbGEwX2llbmEgPSAweEZGRkZGRkZGOyAgICAvLyBbMzE6MF0gaW5wdXRzIHRvIG1nbXRfc29jCisJcmVnX2xhMV9vZW5iID0gcmVnX2xhMV9pZW5hID0gMHgwMDAwMDAwMDsgICAgLy8gWzYzOjMyXSBvdXRwdXRzIGZyb20gbWdtdF9zb2MKKwlgYGAKKworKiBUaGVuLCB0aGUgZmlybXdhcmUgd3JpdGVzIGFuIGluaXRpYWwgdmFsdWUgdG8gdGhlIGNvdW50ZXIgdGhyb3VnaCB0aGUgTEExIGRhdGEgcmVnaXN0ZXIuIEFmdGUgd3JpdGluZyB0aGUgY291bnRlciB2YWx1ZSwgdGhlIExBIHByb2JlcyBhcmUgZGlzYWJsZWQgdG8gcHJldmVudCB0aGUgY291bnRlciB3cml0ZSBzaWduYWwgZnJvbSBiZWluZyBhbHdheXMgc2V0IHRvIG9uZS4gCisKKwlgYGBjCisJcmVnX2xhMV9kYXRhID0gMHgwMDAwMDAwMDsgICAgIC8vIFdyaXRlIHplcm8gdG8gY291bnQgcmVnaXN0ZXIKKwlyZWdfbGExX29lbmIgID0gcmVnX2xhMV9pZW5hID0gMHhGRkZGRkZGRjsgICAgIC8vIERpc2FibGUgcHJvYmVzCisJYGBgCisKKyogVGhlIGZpcm13YXJlIHRoZW4gd2FpdHMgdW50aWwgdGhlIGNvdW50IHZhbHVlIGV4Y2VlZHMgNTAwIGFuZCBmbGFncyB0aGUgc3VjY2VzcyBvZiB0aGUgdGVzdCBieSB3cml0aW5nIGAweEFCNDFgIHRvIHBhZHMgMTYgdG8gMzEuICBUaGUgZmlybXdhcmUgcmVhZHMgdGhlIGNvdW50IHZhbHVlIHRocm91Z2ggdGhlIGxvZ2ljIGFuYWx5emVyIHByb2JlcyBgWzMxOjBdYCAKKworCWBgYGMKKwlpZiAocmVnX2xhMF9kYXRhID4gMHgxRjQpIHsJICAgICAvLyBSZWFkIGN1cnJlbnQgY291bnQgdmFsdWUgdGhyb3VnaCBMQQorCQlyZWdfbXByal9kYXRhbCA9IDB4QUI0MTAwMDA7IC8vIEZsYWcgc3VjY2VzcyBvZiB0aGUgdGVzdAorCQlicmVhazsKKwl9CisJYGBgCisgIAorIyMjIExvZ2ljIEFuYWx5emVyIFRlc3QgMgorIAorKiBUaGlzIHRlc3QgaXMgbWVhbnQgdG8gdmVyaWZ5IHRoYXQgd2UgY2FuIGRyaXZlIHRoZSBjbG9jayBhbmQgcmVzZXQgc2lnbmFscyBmb3IgdGhlIHVzZXIgcHJvamVjdCBleGFtcGxlIHRocm91Z2ggdGhlIGxvZ2ljIGFuYWx5emVyLiBJbiB0aGUgW3VzZXJfcHJval9leGFtcGxlXSh2ZXJpbG9nL3J0bC91c2VyX3Byb2pfZXhhbXBsZS52KSBSVEwsIHRoZSBjbG9jayBjYW4gZWl0aGVyIGJlIHN1cHBsaWVkIGZyb20gdGhlIGB3Yl9jbGtfaWAgb3IgZnJvbSB0aGUgbG9naWMgYW5hbHl6ZXIgdGhyb3VnaCBiaXQgYFs2NF1gLiBTaW1pbGFybHksIHRoZSByZXNldCBzaWduYWwgY2FuIGJlIHN1cHBsaWVkIGZyb20gdGhlIGB3Yl9yc3RfaWAgb3IgdGhyb3VnaCBgTEFbNjVdYC4gIFRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSBjbGsgYW5kIHJlc2V0IExBIHByb2JlcyBhcyBvdXRwdXRzIGZyb20gdGhlIG1hbmFnZW1lbnQgU29DIGJ5IHdyaXRpbmcgdG8gdGhlIExBMiBlbmFibGUgcmVnaXN0ZXIuIAorCisJYGBgYworCXJlZ19sYTJfb2VuYiAgPSByZWdfbGEyX2llbmEgPSAweEZGRkZGRkZDOyAJLy8gQ29uZmlndXJlIExBWzY0XSBMQVs2NV0gYXMgb3V0cHV0cyBmcm9tIHRoZSBjcHUKKwlgYGAKKworKiBUaGVuLCB0aGUgZmlybXdhcmUgc3VwcGxpZXMgYm90aCBjbG9jayByZXNldCBzaWduYWxzIHRocm91Z2ggTEEyIGRhdGEgcmVnaXN0ZXIuIEZpcnN0LCBib3RoIGFyZSBzZXQgdG8gb25lLiBUaGVuLCByZXNldCBpcyBkcml2ZW4gdG8gemVybyBhbmQgdGhlIGNsb2NrIGlzIHRvZ2dsZWQgZm9yIDYgY2xvY2sgY3ljbGVzLiAKKworCWBgYGMKKwlyZWdfbGEyX2RhdGEgPSAweDAwMDAwMDAzOwkvLyBXcml0ZSBvbmUgdG8gTEFbNjRdIGFuZCBMQVs2NV0KKwlmb3IgKGk9MDsgaTwxMTsgaT1pKzEpIHsgICAJLy8gVG9nZ2xlIGNsayAmIGRlLWFzc2VydCByZXNldAorCQljbGsgPSAhY2xrOyAgICAgICAgICAgICAgIAkKKwkJcmVnX2xhMl9kYXRhID0gMHgwMDAwMDAwMCB8IGNsazsKKwl9CisJYGBgCisqIFRoZSB0ZXN0YmVuY2ggc3VjY2VzcyBjcml0ZXJpYSBpcyB0aGF0IHRoZSBmaXJtd2FyZSByZWFkcyBhIGNvdW50IHZhbHVlIG9mIGZpdmUgdGhyb3VnaCB0aGUgTEEgcHJvYmVzLiAKKwlgYGBjCisJaWYgKHJlZ19sYTBfZGF0YSA9PSAweDA1KSB7CisJCXJlZ19tcHJqX2RhdGFsID0gMHhBQjYxMDAwMDsgICAvLyBGTGFnIHN1Y2Nlc3Mgb2YgdGhlIHRlc3QKKwl9CisJYGBgCisJCisjIyMgV2lzaGJvbmUgVGVzdAorCisqIFRoaXMgdGVzdCBpcyBtZWFudCB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4gcmVhZCBhbmQgd3JpdGUgdG8gdGhlIGNvdW50IHJlZ2lzdGVyIHRocm91Z2ggdGhlIHdpc2hib25lIHBvcnQuIFRoZSBmaXJtd2FyZSB3cml0ZXMgYSB2YWx1ZSBvZiBgMHgyNzEwYCB0byB0aGUgY291bnQgcmVnaXN0ZXIsIHRoZW4gcmVhZHMgYmFjayB0aGUgY291bnQgdmFsdWUgYWZ0ZXIgc29tZSB0aW1lLiBUaGUgcmVhZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIGhhcHBlbiB0aHJvdWdoIHRoZSBtYW5hZ2VtZW50IFNvQyB3aXNoYm9uZSBidXMgYW5kIGFyZSBpbml0aWF0ZWQgYnkgZWl0aGVyIHdyaXRpbmcgb3IgcmVhZGluZyBmcm9tIHRoZSB1c2VyIHByb2plY3QgYWRkcmVzcyBvbiB0aGUgd2lzaGJvbmUgYnVzLiAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfYWdlbnQudiBiL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfYWdlbnQudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjEyMWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9hZ2VudHMvdWFydF9hZ2VudC52CkBAIC0wLDAgKzEsNTI3IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorbW9kdWxlIHVhcnRfYWdlbnQgKAorCW1jbGssCisJdHhkLAorCXJ4ZAorCSk7CisKK2lucHV0CW1jbGs7CitvdXRwdXQJdHhkOworCitpbnB1dAlyeGQ7CisKK2V2ZW50CXVhcnRfcmVhZF9kb25lLCB1YXJ0X3dyaXRlX2RvbmU7CitldmVudAllcnJvcl9kZXRlY3RlZCx1YXJ0X3Bhcml0eV9lcnJvciwgdWFydF9zdG9wX2Vycm9yMSwgdWFydF9zdG9wX2Vycm9yMjsKK2V2ZW50IAl1YXJ0X3RpbWVvdXRfZXJyb3I7CitldmVudAlhYm9ydDsKKworcmVnIFsxNTowXSByeF9jb3VudDsKK3JlZyBbMTU6MF0gdHhfY291bnQ7CityZWcgWzE1OjBdIHBhcl9lcnJfY291bnQ7CityZWcgWzE1OjBdIHN0b3BfZXJyMV9jbnQ7CityZWcgWzE1OjBdIHN0b3BfZXJyMl9jbnQ7CityZWcgWzE1OjBdIHRpbWVvdXRfZXJyX2NudDsKK3JlZyBbMTU6MF0gZXJyX2NudDsKKworcmVnIAkgICB0eGQsIHJlYWQsIHdyaXRlOword2lyZQkgICB1YXJ0X3J4X2NsazsKK3JlZwkgICB1YXJ0X2NsazsKK3JlZwkgICBzdG9wX2Vycl9jaGVjazsKKworaW50ZWdlciB0aW1lb3V0X2NvdW50OworaW50ZWdlciBkYXRhX2JpdF9udW1iZXI7CityZWcgWzE1OjBdIGNsa19jb3VudDsKK3JlZyAgICAgICAgZGVidWdfbW9kZTsKKworcmVnICAgICAgZXJyb3JfaW5kOyAvLyAxIGluZGljYXRlIGVycm9yCisKK2luaXRpYWwgCitiZWdpbgorCWRlYnVnX21vZGUgPSAxOyAvLyBLZWVwIGluIGRlYnVnIG1vZGUgYW5kIGVuYWJsZSBkaXNwbGF5CisJdHhkID0gMSdiMTsKKyAJdWFydF9jbGsgPSAwOworCWNsa19jb3VudCA9IDA7CisJc3RvcF9lcnJfY2hlY2sgPSAwOworICBlcnJvcl9pbmQgPSAwOworZW5kCisKK2Fsd2F5cyBAKHBvc2VkZ2UgbWNsaykKK2JlZ2luCisgICBpZiAoY2xrX2NvdW50ID09ICdoMCkgYmVnaW4KKyAgICAgIHVhcnRfY2xrICA9IH51YXJ0X2NsazsKKyAgICAgIGNsa19jb3VudCA9IGNvbnRyb2xfc2V0dXAuZGl2aXNvcjsJCisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgY2xrX2NvdW50ID0gY2xrX2NvdW50IC0gMTsJCisgICBlbmQKK2VuZAorYXNzaWduIHVhcnRfcnhfY2xrID0gdWFydF9jbGs7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgbWNsaykKK2JlZ2luCisJdGltZW91dF9jb3VudCA9IHRpbWVvdXRfY291bnQgKyAxOworCWlmICh0aW1lb3V0X2NvdW50ID09IChjb250cm9sX3NldHVwLm1heHRpbWUgKiAxNikpCisJCS0+IGFib3J0OworZW5kCisKK2Fsd2F5cyBAdWFydF9yZWFkX2RvbmUKKyAgICByeF9jb3VudCA9IHJ4X2NvdW50ICsgMTsKKworYWx3YXlzIEB1YXJ0X3dyaXRlX2RvbmUKKyAgICB0eF9jb3VudCA9IHR4X2NvdW50ICsgMTsKKworYWx3YXlzIEB1YXJ0X3Bhcml0eV9lcnJvciBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgcGFyX2Vycl9jb3VudCA9IHBhcl9lcnJfY291bnQgKyAxOworZW5kCisKK2Fsd2F5cyBAdWFydF9zdG9wX2Vycm9yMSBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgc3RvcF9lcnIxX2NudCA9IHN0b3BfZXJyMV9jbnQgKyAxOworZW5kCisKK2Fsd2F5cyBAdWFydF9zdG9wX2Vycm9yMiBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgc3RvcF9lcnIyX2NudCA9IHN0b3BfZXJyMl9jbnQgKyAxOworZW5kCisKK2Fsd2F5cyBAdWFydF90aW1lb3V0X2Vycm9yIGJlZ2luCisgICAgZXJyb3JfaW5kID0gMTsKKyAgICB0aW1lb3V0X2Vycl9jbnQgPSB0aW1lb3V0X2Vycl9jbnQgKyAxOworZW5kCisKKworYWx3YXlzIEBlcnJvcl9kZXRlY3RlZCBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgZXJyX2NudCA9IGVycl9jbnQgKyAxOworZW5kCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3Rhc2sgdWFydF9pbml0OworYmVnaW4KKyAgcmVhZCA9IDA7CisgIHdyaXRlID0gMDsKKyAgdHhfY291bnQgPSAwOworICByeF9jb3VudCA9IDA7CisgIHN0b3BfZXJyX2NoZWNrID0gMDsKKyAgcGFyX2Vycl9jb3VudCA9IDA7CisgIHN0b3BfZXJyMV9jbnQgPSAwOworICBzdG9wX2VycjJfY250ID0gMDsKKyAgdGltZW91dF9lcnJfY250ID0gMDsKKyAgZXJyX2NudCA9IDA7CisgIGNsa19jb3VudCA9IDA7CisKK2VuZCAKK2VuZHRhc2sgCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3Rhc2sgcmVhZF9jaGFyX2NoazsKK2lucHV0IAlleHBlY3RlZF9kYXRhOworCitpbnRlZ2VyIGk7CityZWcJWzc6MF0gZXhwZWN0ZWRfZGF0YTsKK3JlZyAJWzc6MF0gZGF0YTsKK3JlZwlwYXJpdHk7CisKK2JlZ2luCisJZGF0YSA8PSA4J2gwOworCXBhcml0eSA8PSAxOworCXRpbWVvdXRfY291bnQgPSAwOworCitmb3JrCQorICAgYmVnaW4gOiBsb29wXzEKKyAgICAgICAgQChhYm9ydCkKKwlpZihkZWJ1Z19tb2RlKQorICAgICAgICAgJGRpc3BsYXkgKCIlbTogPj4+Pj4gRXhjZWVkIHRpbWUgbGltaXQsIHVhcnQgbm8gcmVzcG9uY2UuXG4iKTsKKyAgICAgICAgIC0+dWFydF90aW1lb3V0X2Vycm9yOworICAgICAgICAgZGlzYWJsZSBsb29wXzI7CisgICBlbmQKKworICAgYmVnaW4gOiBsb29wXzIKKworLy8gc3RhcnQgY3ljbGUKKwlAKG5lZ2VkZ2UgcnhkKSAKKwkgZGlzYWJsZSBsb29wXzE7CisJIHJlYWQgPD0gMTsKKworLy8gZGF0YSBjeWNsZQorCUAocG9zZWRnZSB1YXJ0X3J4X2Nsayk7CisJIGZvciAoaSA9IDA7IGkgPCBkYXRhX2JpdF9udW1iZXI7IGkgPSBpICsgMSkKKwkgIGJlZ2luCisJICAgIEAocG9zZWRnZSB1YXJ0X3J4X2NsaykKKwkgICAgZGF0YVtpXSA8PSAgcnhkOworCSAgICBwYXJpdHkgPD0gcGFyaXR5IF4gcnhkOworCSAgZW5kCQkKKworLy8gcGFyaXR5IGN5Y2xlCisJaWYoY29udHJvbF9zZXR1cC5wYXJpdHlfZW4pCisJYmVnaW4KKyAgICAgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOworCSAgaWYgKChjb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSAmJiAocnhkID09IHBhcml0eSkpIHx8CisJICAgICAoIWNvbnRyb2xfc2V0dXAuZXZlbl9vZGRfcGFyaXR5ICYmIChyeGQgIT0gcGFyaXR5KSkpCisJICAgICBiZWdpbgorCQkgICAkZGlzcGxheSAoIiVtOiA+Pj4+PiAgUGFyaXR5IEVycm9yIik7CQorIAkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJCS0+IHVhcnRfcGFyaXR5X2Vycm9yOworCSAgICAgZW5kCisJZW5kCisKKy8vIHN0b3AgY3ljbGUgMQorICAgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOwkKKwkgIGlmICghcnhkKQorCSAgICAgYmVnaW4KKwkJJGRpc3BsYXkgKCIlbTogPj4+Pj4gIFN0b3Agc2lnbmFsIDEgRXJyb3IiKTsJCisgCQktPiBlcnJvcl9kZXRlY3RlZDsKKwkJLT4gdWFydF9zdG9wX2Vycm9yMTsKKwkgICAgIGVuZAorCisvLyBzdG9wIGN5Y2xlIDIKKwlpZiAoY29udHJvbF9zZXR1cC5zdG9wX2JpdF9udW1iZXIpCisJYmVnaW4KKwkgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOwkvLyBzdG9wIGN5Y2xlIDIKKwkJaWYgKCFyeGQpCisJCSAgYmVnaW4KKwkJICAgICRkaXNwbGF5ICgiJW06ID4+Pj4+ICBTdG9wIHNpZ25hbCAyIEVycm9yIik7CQorIAkJICAgIC0+IGVycm9yX2RldGVjdGVkOworCQkgICAgLT4gdWFydF9zdG9wX2Vycm9yMjsKKwkJICBlbmQKKwllbmQKKworCXJlYWQgPD0gMDsKKwktPiB1YXJ0X3JlYWRfZG9uZTsKKworCWlmIChleHBlY3RlZF9kYXRhICE9IGRhdGEpCisJYmVnaW4KKwkJJGRpc3BsYXkgKCIlbTogRXJyb3IhIERhdGEgcmV0dXJuIGlzICVoLCBleHBlY3RpbmcgJWgiLCBkYXRhLCBleHBlY3RlZF9kYXRhKTsKKwkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJZW5kCisJZWxzZSBiZWdpbgorCSAgICAgICAgaWYoZGVidWdfbW9kZSkKKwkJICAkZGlzcGxheSAoIiVtOiBEYXRhIG1hdGNoICAlaCIsIGV4cGVjdGVkX2RhdGEpOworCWVuZAorCisJaWYoZGVidWdfbW9kZSkKKwkgICAkZGlzcGxheSAoIiVtOi4uLiBSZWFkIERhdGEgZnJvbSBVQVJUIGRvbmUgY250IDolZC4uLiIscnhfY291bnQgKzEpOworICAgZW5kCitqb2luCisKK2VuZAorCitlbmR0YXNrCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit0YXNrIHJlYWRfY2hhcjI7CitvdXRwdXQgWzc6MF0JcnhkX2RhdGE7CitvdXRwdXQgICAgICAgICAgdGltZW91dDsgLy8gMS0+IHRpbWVvdXQKK2ludGVnZXIgaTsKK3JlZwlbNzowXSByeGRfZGF0YTsKK3JlZyAJWzc6MF0gZGF0YTsKK3JlZwlwYXJpdHk7CisKK2JlZ2luCisJZGF0YSA8PSA4J2gwOworCXBhcml0eSA8PSAxOworCXRpbWVvdXRfY291bnQgPSAwOworCXRpbWVvdXQgPSAwOworCisgICBmb3JrCQorICAgYmVnaW4gCisgICAgICAgIEAoYWJvcnQpCisgICAgICAgICAvLyRkaXNwbGF5ICgiPj4+Pj4gIEV4Y2VlZCB0aW1lIGxpbWl0LCB1YXJ0IG5vIHJlc3BvbmNlLlxuIik7CisgICAgICAgICAvLy0+dWFydF90aW1lb3V0X2Vycm9yOworCSAgdGltZW91dCA9IDE7CisgICBlbmQKKworICAgYmVnaW4KKworLy8gc3RhcnQgY3ljbGUKKwlAKG5lZ2VkZ2UgcnhkKSAKKwkgcmVhZCA8PSAxOworCisvLyBkYXRhIGN5Y2xlCisJQChwb3NlZGdlIHVhcnRfcnhfY2xrICk7CisJIGZvciAoaSA9IDA7IGkgPCBkYXRhX2JpdF9udW1iZXI7IGkgPSBpICsgMSkKKwkgIGJlZ2luCisJICAgIEAocG9zZWRnZSB1YXJ0X3J4X2NsaykKKwkgICAgZGF0YVtpXSA8PSAgcnhkOworCSAgICBwYXJpdHkgPD0gcGFyaXR5IF4gcnhkOworCSAgZW5kCQkKKworLy8gcGFyaXR5IGN5Y2xlCisJaWYoY29udHJvbF9zZXR1cC5wYXJpdHlfZW4pCisJYmVnaW4KKyAgICAgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOworCSAgaWYgKChjb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSAmJiAocnhkID09IHBhcml0eSkpIHx8CisJICAgICAoIWNvbnRyb2xfc2V0dXAuZXZlbl9vZGRfcGFyaXR5ICYmIChyeGQgIT0gcGFyaXR5KSkpCisJICAgICBiZWdpbgorCQkkZGlzcGxheSAoIj4+Pj4+ICBQYXJpdHkgRXJyb3IiKTsJCisgCQktPiBlcnJvcl9kZXRlY3RlZDsKKwkJLT4gdWFydF9wYXJpdHlfZXJyb3I7CisJICAgICBlbmQKKwllbmQKKworLy8gc3RvcCBjeWNsZSAxCisgICAgICAgIEAocG9zZWRnZSB1YXJ0X3J4X2Nsayk7CQorCSAgaWYgKCFyeGQpCisJICAgICBiZWdpbgorCQkkZGlzcGxheSAoIj4+Pj4+ICBTdG9wIHNpZ25hbCAxIEVycm9yIik7CQorIAkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJCS0+IHVhcnRfc3RvcF9lcnJvcjE7CisJICAgICBlbmQKKworLy8gc3RvcCBjeWNsZSAyCisJaWYgKGNvbnRyb2xfc2V0dXAuc3RvcF9iaXRfbnVtYmVyKQorCWJlZ2luCisJICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsJLy8gc3RvcCBjeWNsZSAyCisJCWlmICghcnhkKQorCQkgIGJlZ2luCisJCSAgICAkZGlzcGxheSAoIj4+Pj4+ICBTdG9wIHNpZ25hbCAyIEVycm9yIik7CQorIAkJICAgIC0+IGVycm9yX2RldGVjdGVkOworCQkgICAgLT4gdWFydF9zdG9wX2Vycm9yMjsKKwkJICBlbmQKKwllbmQKKworCXJlYWQgPD0gMDsKKwktPiB1YXJ0X3JlYWRfZG9uZTsKKworLy8gICAgICAkZGlzcGxheSAoIiglbSkgUmVjZWl2ZWQgRGF0YSAgJWMiLCBkYXRhKTsKKy8vCSRkaXNwbGF5ICgiLi4uIFJlYWQgRGF0YSBmcm9tIFVBUlQgZG9uZSBjbnQgOiVkLi4uIixyeF9jb3VudCArMSk7CisgICAgICAgICR3cml0ZSAoIiVjIixkYXRhKTsKKwlyeGRfZGF0YSA9IGRhdGE7CisgICBlbmQKKyAgIGpvaW5fYW55CisgICBkaXNhYmxlIGZvcms7IC8vZGlzYWJsZSBwZW5kaW5nIGZvcmsgYWN0aXZpdHkKKworZW5kCisKK2VuZHRhc2sKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordGFzayByZWFkX2NoYXI7CitvdXRwdXQgWzc6MF0JcnhkX2RhdGE7CitvdXRwdXQgICAgICAgICAgdGltZW91dDsgLy8gMS0+IHRpbWVvdXQKKworcmVnCVs3OjBdIHJ4ZF9kYXRhOworCisKK2ludGVnZXIgaTsKK3JlZwlbNzowXSBleHBlY3RlZF9kYXRhOworcmVnIAlbNzowXSBkYXRhOworcmVnCXBhcml0eTsKKworYmVnaW4KKwlkYXRhIDw9IDgnaDA7CisJcGFyaXR5IDw9IDE7CisJdGltZW91dF9jb3VudCA9IDA7CisJdGltZW91dCA9IDA7CisKKworZm9yawkKKyAgIGJlZ2luIDogbG9vcF8xCisgICAgICAgIEAoYWJvcnQpCisJIGlmKGRlYnVnX21vZGUpCisgICAgICAgICAgICAgJGRpc3BsYXkgKCIlbTogPj4+Pj4gRXhjZWVkIHRpbWUgbGltaXQsIHVhcnQgbm8gcmVzcG9uY2UuXG4iKTsKKwkgdGltZW91dCA9IDE7CisgICAgICAgICAtPnVhcnRfdGltZW91dF9lcnJvcjsKKyAgICAgICAgIGRpc2FibGUgbG9vcF8yOworICAgZW5kCisKKyAgIGJlZ2luIDogbG9vcF8yCisKKy8vIHN0YXJ0IGN5Y2xlCisJQChuZWdlZGdlIHJ4ZCkgCisJIGRpc2FibGUgbG9vcF8xOworCSByZWFkIDw9IDE7CisKKy8vIGRhdGEgY3ljbGUKKwlAKHBvc2VkZ2UgdWFydF9yeF9jbGspOworCSBmb3IgKGkgPSAwOyBpIDwgZGF0YV9iaXRfbnVtYmVyOyBpID0gaSArIDEpCisJICBiZWdpbgorCSAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspCisJICAgIGRhdGFbaV0gPD0gIHJ4ZDsKKwkgICAgcGFyaXR5IDw9IHBhcml0eSBeIHJ4ZDsKKwkgIGVuZAkJCisKKy8vIHBhcml0eSBjeWNsZQorCWlmKGNvbnRyb2xfc2V0dXAucGFyaXR5X2VuKQorCWJlZ2luCisgICAgICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsKKwkgIGlmICgoY29udHJvbF9zZXR1cC5ldmVuX29kZF9wYXJpdHkgJiYgKHJ4ZCA9PSBwYXJpdHkpKSB8fAorCSAgICAgKCFjb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSAmJiAocnhkICE9IHBhcml0eSkpKQorCSAgICAgYmVnaW4KKwkJJGRpc3BsYXkgKCIlbTogPj4+Pj4gIFBhcml0eSBFcnJvciIpOwkKKyAJCS0+IGVycm9yX2RldGVjdGVkOworCQktPiB1YXJ0X3Bhcml0eV9lcnJvcjsKKwkgICAgIGVuZAorCWVuZAorCisvLyBzdG9wIGN5Y2xlIDEKKyAgICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsJCisJICBpZiAoIXJ4ZCkKKwkgICAgIGJlZ2luCisJCSRkaXNwbGF5ICgiJW06ID4+Pj4+ICBTdG9wIHNpZ25hbCAxIEVycm9yIik7CQorIAkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJCS0+IHVhcnRfc3RvcF9lcnJvcjE7CisJICAgICBlbmQKKworLy8gc3RvcCBjeWNsZSAyCisJaWYgKGNvbnRyb2xfc2V0dXAuc3RvcF9iaXRfbnVtYmVyKQorCWJlZ2luCisJICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsJLy8gc3RvcCBjeWNsZSAyCisJCWlmICghcnhkKQorCQkgIGJlZ2luCisJCSAgICAkZGlzcGxheSAoIiVtOiA+Pj4+PiAgU3RvcCBzaWduYWwgMiBFcnJvciIpOwkKKyAJCSAgICAtPiBlcnJvcl9kZXRlY3RlZDsKKwkJICAgIC0+IHVhcnRfc3RvcF9lcnJvcjI7CisJCSAgZW5kCisJZW5kCisKKwlyZWFkIDw9IDA7CisJLT4gdWFydF9yZWFkX2RvbmU7CisKKwlyeGRfZGF0YSA9IGRhdGE7CisKKworCWlmKGRlYnVnX21vZGUpIGJlZ2luCisJICAgJGRpc3BsYXkgKCIlbTogUmVjZWl2ZWQgRGF0YSAlaCIsIHJ4ZF9kYXRhKTsKKwkgICAkZGlzcGxheSAoIiVtOi4uLiBSZWFkIERhdGEgZnJvbSBVQVJUIGRvbmUgY250IDolZC4uLiIscnhfY291bnQgKzEpOworICAgICAgICBlbmQKKyAgIGVuZAoram9pbgorCitlbmQKKworZW5kdGFzaworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordGFzayB3cml0ZV9jaGFyOworaW5wdXQgWzc6MF0gZGF0YTsKKworaW50ZWdlciBpOworcmVnIHBhcml0eTsJLy8gMDogb2RkIHBhcml0eSwgMTogZXZlbiBwYXJpdHkKKworYmVnaW4KKwlwYXJpdHkgPD0gICMxIDE7CisKKy8vIHN0YXJ0IGN5Y2xlCisJQChwb3NlZGdlIHVhcnRfY2xrKQorCSBiZWdpbgorCQl0eGQgPD0gIzEgMDsKKwkJd3JpdGUgPD0gIzEgMTsKKwkgZW5kCisKKy8vIGRhdGEgY3ljbGUKKwliZWdpbgorCSAgIGZvciAoaSA9IDA7IGkgPCBkYXRhX2JpdF9udW1iZXI7IGkgPSBpICsgMSkKKwkgICBiZWdpbgorCQlAKHBvc2VkZ2UgdWFydF9jbGspCisJCSAgICB0eGQgPD0gIzEgZGF0YVtpXTsKKwkJcGFyaXR5IDw9IHBhcml0eSBeIGRhdGFbaV07CisJICAgZW5kCisJZW5kCisKKy8vIHBhcml0eSBjeWNsZQorCWlmIChjb250cm9sX3NldHVwLnBhcml0eV9lbikKKwliZWdpbgorCQlAKHBvc2VkZ2UgdWFydF9jbGspCisJCQl0eGQgPD0gIzEgCisvLwkJCQljb250cm9sX3NldHVwLnN0aWNrX3Bhcml0eSA/IH5jb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSA6IAorCQkJCWNvbnRyb2xfc2V0dXAuZXZlbl9vZGRfcGFyaXR5ID8gIXBhcml0eSA6IHBhcml0eTsKKwllbmQKKworLy8gc3RvcCBjeWNsZSAxCisJQChwb3NlZGdlIHVhcnRfY2xrKQorCQl0eGQgPD0gIzEgc3RvcF9lcnJfY2hlY2sgPyAwIDogMTsKKworLy8gc3RvcCBjeWNsZSAyCisJQChwb3NlZGdlIHVhcnRfY2xrKTsKKwkJdHhkIDw9ICMxIDE7CisJaWYgKGRhdGFfYml0X251bWJlciA9PSA1KQorCQlAKG5lZ2VkZ2UgdWFydF9jbGspOworCWVsc2UgaWYgKGNvbnRyb2xfc2V0dXAuc3RvcF9iaXRfbnVtYmVyKQorCQlAKHBvc2VkZ2UgdWFydF9jbGspOworCisJd3JpdGUgPD0gIzEgMDsKKwlpZihkZWJ1Z19tb2RlKQorCSAgICRkaXNwbGF5ICgiJW06Li4uIFdyaXRlIGRhdGEgJWggdG8gVUFSVCBkb25lIGNudCA6ICVkIC4uLlxuIiwgZGF0YSx0eF9jb3VudCsxKTsKKyAgICAgICAgZWxzZQorCSAgICR3cml0ZSAoIiVjIixkYXRhKTsKKwktPiB1YXJ0X3dyaXRlX2RvbmU7CitlbmQKK2VuZHRhc2sKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordGFzayBjb250cm9sX3NldHVwOworaW5wdXQJICBbMTowXSBkYXRhX2JpdF9zZXQ7CQoraW5wdXQJCXN0b3BfYml0X251bWJlcjsKK2lucHV0CQlwYXJpdHlfZW47CitpbnB1dAkJZXZlbl9vZGRfcGFyaXR5OworaW5wdXQJCXN0aWNrX3Bhcml0eTsKK2lucHV0CSBbMTU6MF0gbWF4dGltZTsKK2lucHV0CSBbMTU6MF0gZGl2aXNvcjsKKworYmVnaW4KKyAgICAgICAgY2xrX2NvdW50ID0gZGl2aXNvcjsJCisJZGF0YV9iaXRfbnVtYmVyID0gZGF0YV9iaXRfc2V0ICsgNTsKK2VuZAorZW5kdGFzaworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit0YXNrIHJlcG9ydF9zdGF0dXM7CitvdXRwdXQgCVsxNTowXSByeF9udTsKK291dHB1dCAJWzE1OjBdIHR4X251OworYmVnaW4KKwkkZGlzcGxheSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tIFVBUlQgUmVwb3J0aW5nIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKwkkZGlzcGxheSAoIglEYXRhIGJpdCBudW1iZXIgc2V0dGluZyBpcyA6ICUwZCIsIGRhdGFfYml0X251bWJlcik7CisJJGRpc3BsYXkgKCIJU3RvcCBiaXQgbnVtYmVyIHNldHRpbmcgaXMgOiAlMGQiLCBjb250cm9sX3NldHVwLnN0b3BfYml0X251bWJlciArIDEpOworCSRkaXNwbGF5ICgiCURpdmlzb3Igb2YgVWFydCBjbG9jayAgIGlzIDogJTBkIiwgY29udHJvbF9zZXR1cC5kaXZpc29yKTsKKwlpZiAoY29udHJvbF9zZXR1cC5wYXJpdHlfZW4pIAorCSRkaXNwbGF5ICgiCVBhcml0eSBpcyBlbmFibGUiKTsKKwllbHNlCisJJGRpc3BsYXkgKCIJUGFyaXR5IGlzIGRpc2FibGUiKTsKKwkKKwlpZiAoY29udHJvbF9zZXR1cC5ldmVuX29kZF9wYXJpdHkpCisJJGRpc3BsYXkgKCIJRXZlbiBwYXJpdHkgc2V0dGluZyIpOworCWVsc2UJCisJJGRpc3BsYXkgKCIJT2RkIHBhcml0eSBzZXR0aW5nIik7CisKKworCSRkaXNwbGF5ICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworCSRkaXNwbGF5ICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVwb3J0aW5nIFN0YXR1cyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJJGRpc3BsYXkgKCIJTnVtYmVyIG9mIGNoYXJhY3RlciByZWNlaXZlZCBpcyA6ICVkIiwgcnhfY291bnQpOworCSRkaXNwbGF5ICgiCU51bWJlciBvZiBjaGFyYWN0ZXIgc2VudCAgICAgaXMgOiAlZCIsIHR4X2NvdW50KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2YgcGFyaXR5IGVycm9yIHJ4ZCAgIGlzIDogJWQiLCBwYXJfZXJyX2NvdW50KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2Ygc3RvcDEgIGVycm9yIHJ4ZCAgIGlzIDogJWQiLCBzdG9wX2VycjFfY250KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2Ygc3RvcDIgIGVycm9yIHJ4ZCAgIGlzIDogJWQiLCBzdG9wX2VycjJfY250KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2YgdGltZW91dCBlcnJvciAgICAgIGlzIDogJWQiLCB0aW1lb3V0X2Vycl9jbnQpOworCSRkaXNwbGF5ICgiCU51bWJlciBvZiBlcnJvciAgICAgICAgICAgICAgaXMgOiAlZCIsIGVycl9jbnQpOworCSRkaXNwbGF5ICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworCXJ4X251ID0gcnhfY291bnQ7CisJdHhfbnUgPSB0eF9jb3VudDsKK2VuZAorZW5kdGFzaworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfbWFzdGVyX3Rhc2tzLnN2IGIvdmVyaWxvZy9kdi9hZ2VudHMvdWFydF9tYXN0ZXJfdGFza3Muc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhMWE3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfbWFzdGVyX3Rhc2tzLnN2CkBAIC0wLDAgKzEsMjAxIEBACisKK3Rhc2sgdWFydG1fcmVnX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHI7CitpbnB1dCBbMzE6MF0gZGF0YTsKK3JlZyBbNzowXSByZWFkX2RhdGE7CityZWcgZmxhZzsKK2JlZ2luCisgICBmb3JrCisgICBiZWdpbiA6IGxvb3BfMQorICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoInciKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKCJtIik7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiICIpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoYWRkclszMToyOF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbMjc6MjRdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzIzOjIwXSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoYWRkclsxOToxNl0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbMTU6MTJdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzExOjhdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzc6NF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbMzowXSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoIiAiKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGRhdGFbMzE6MjhdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihkYXRhWzI3OjI0XSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoZGF0YVsyMzoyMF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGRhdGFbMTk6MTZdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihkYXRhWzE1OjEyXSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoZGF0YVsxMTo4XSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoZGF0YVs3OjRdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihkYXRhWzM6MF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKCJcbiIpOworICAgZW5kCisgICBiZWdpbiA6IGxvb3BfMgorICAgICAgIC8vIFdhaXQgZm9yIHN1Y2VzcyBjb21tYW5kCisgICAgICAgZmxhZyA9IDA7CisgICAgICAgd2hpbGUoZmxhZyA9PSAwKQorICAgICAgIGJlZ2luCisgICAgICAgICAgdGJfbWFzdGVyX3VhcnQucmVhZF9jaGFyMihyZWFkX2RhdGEsZmxhZyk7CisgICAgICAgICAgLy8kd3JpdGUgKCIlYyIscmVhZF9kYXRhKTsKKyAgICAgICBlbmQKKyAgIGVuZAorICAgam9pbgorZW5kCitlbmR0YXNrCisKK3Rhc2sgdWFydG1fcmVnX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcjsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyBbNzowXSByZWFkX2RhdGE7CityZWcgZmxhZzsKK2ludGVnZXIgaTsKK2JlZ2luCisgICBmb3JrCisgICBiZWdpbiA6IGxvb3BfMQorICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiciIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigibSIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiICIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzMxOjI4XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzI3OjI0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzIzOjIwXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE5OjE2XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE1OjEyXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzExOjhdKSk7CisgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbNzo0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzM6MF0pKTsKKyAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoIlxuIik7CisgICBlbmQKKyAgIGJlZ2luIDogbG9vcF8yCisgICAgICAvLyBXYWl0IGZvciBzdWNlc3MgY29tbWFuZAorICAgICAgZmxhZyA9IDA7CisgICAgICBpID0gMDsKKyAgICAgIHdoaWxlKGZsYWcgPT0gMCkKKyAgICAgIGJlZ2luCisgICAgICAgICB0Yl9tYXN0ZXJfdWFydC5yZWFkX2NoYXIyKHJlYWRfZGF0YSxmbGFnKTsKKyAgICAgICAgIC8vJHdyaXRlICgiJWQ6JWMiLGkscmVhZF9kYXRhKTsKKyAgICAgICAgICAgY2FzZSAoaSkKKyAgICAgICAgICAgOCdkMTAgOiBkYXRhWzMxOjI4XSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDExIDogZGF0YVsyNzoyNF0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxMiA6IGRhdGFbMjM6MjBdID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTMgOiBkYXRhWzE5OjE2XSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDE0IDogZGF0YVsxNToxMl0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxNSA6IGRhdGFbMTE6OF0gID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTYgOiBkYXRhWzc6NF0gICA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDE3IDogZGF0YVszOjBdICAgPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICBlbmRjYXNlCisJICAgaSA9IGkrMTsKKyAgICAgIGVuZAorICAgZW5kCisgICBqb2luCisgICAkZGlzcGxheSgicmVjZWl2ZWQgRGF0YTogJXgiLGRhdGEpOworCitlbmQKK2VuZHRhc2sKKwordGFzayB1YXJ0bV9yZWdfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyOworaW5wdXQgWzMxOjBdIGV4cF9kYXRhOworcmVnIFszMTowXSByeGRfZGF0YTsKK3JlZyBbNzowXSByZWFkX2RhdGE7CityZWcgZmxhZzsKK2ludGVnZXIgaTsKK2JlZ2luCisgICBmb3JrCisgICBiZWdpbiA6IGxvb3BfMQorICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiciIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigibSIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiICIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzMxOjI4XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzI3OjI0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzIzOjIwXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE5OjE2XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE1OjEyXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzExOjhdKSk7CisgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbNzo0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzM6MF0pKTsKKyAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoIlxuIik7CisgICBlbmQKKyAgIGJlZ2luIDogbG9vcF8yCisgICAgICAvLyBXYWl0IGZvciBzdWNlc3MgY29tbWFuZAorICAgICAgZmxhZyA9IDA7CisgICAgICBpID0gMDsKKyAgICAgIHdoaWxlKGZsYWcgPT0gMCkKKyAgICAgIGJlZ2luCisgICAgICAgICB0Yl9tYXN0ZXJfdWFydC5yZWFkX2NoYXIyKHJlYWRfZGF0YSxmbGFnKTsKKyAgICAgICAgIC8vJHdyaXRlICgiJWQ6JWMiLGkscmVhZF9kYXRhKTsKKyAgICAgICAgICAgY2FzZSAoaSkKKyAgICAgICAgICAgOCdkMTAgOiByeGRfZGF0YVszMToyOF0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxMSA6IHJ4ZF9kYXRhWzI3OjI0XSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDEyIDogcnhkX2RhdGFbMjM6MjBdID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTMgOiByeGRfZGF0YVsxOToxNl0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxNCA6IHJ4ZF9kYXRhWzE1OjEyXSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDE1IDogcnhkX2RhdGFbMTE6OF0gID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTYgOiByeGRfZGF0YVs3OjRdICAgPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxNyA6IHJ4ZF9kYXRhWzM6MF0gICA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIGVuZGNhc2UKKwkgICBpID0gaSsxOworICAgICAgZW5kCisgICBlbmQKKyAgIGpvaW4KKyAgIGlmKHJ4ZF9kYXRhID09IGV4cF9kYXRhKSBiZWdpbgorICAgICAgLy8gJGRpc3BsYXkoIlNUQVRVUzogQUREUkVTUzogJXggUlhEOiAleCIsIGFkZHIscnhkX2RhdGEpOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICRkaXNwbGF5KCJFUlJPUjogIEFERFJFU1M6ICV4IEVYUDogJXggUlhEOiAleCIsIGFkZHIsZXhwX2RhdGEscnhkX2RhdGEpOworICAgICAgdGVzdF9mYWlsID0gMTsKKyAgIGVuZAorCisKK2VuZAorZW5kdGFzaworCisvLyBDaGFyYWN0ZXIgdG8gaGV4IG51bWJlcgorZnVuY3Rpb24gWzM6MF0gY2hhcjJoZXg7CitpbnB1dCBbNzowXSBkYXRhX2luOworY2FzZSAoZGF0YV9pbikKKyAgICAgOCdoMzA6CWNoYXIyaGV4ID0gNCdoMDsgLy8gY2hhcmFjdGVyICcwJyAKKyAgICAgOCdoMzE6CWNoYXIyaGV4ID0gNCdoMTsgLy8gY2hhcmFjdGVyICcxJworICAgICA4J2gzMjoJY2hhcjJoZXggPSA0J2gyOyAvLyBjaGFyYWN0ZXIgJzInCisgICAgIDgnaDMzOgljaGFyMmhleCA9IDQnaDM7IC8vIGNoYXJhY3RlciAnMycKKyAgICAgOCdoMzQ6CWNoYXIyaGV4ID0gNCdoNDsgLy8gY2hhcmFjdGVyICc0JyAKKyAgICAgOCdoMzU6CWNoYXIyaGV4ID0gNCdoNTsgLy8gY2hhcmFjdGVyICc1JworICAgICA4J2gzNjoJY2hhcjJoZXggPSA0J2g2OyAvLyBjaGFyYWN0ZXIgJzYnCisgICAgIDgnaDM3OgljaGFyMmhleCA9IDQnaDc7IC8vIGNoYXJhY3RlciAnNycKKyAgICAgOCdoMzg6CWNoYXIyaGV4ID0gNCdoODsgLy8gY2hhcmFjdGVyICc4JworICAgICA4J2gzOToJY2hhcjJoZXggPSA0J2g5OyAvLyBjaGFyYWN0ZXIgJzknCisgICAgIDgnaDQxOgljaGFyMmhleCA9IDQnaEE7IC8vIGNoYXJhY3RlciAnQScKKyAgICAgOCdoNDI6CWNoYXIyaGV4ID0gNCdoQjsgLy8gY2hhcmFjdGVyICdCJworICAgICA4J2g0MzoJY2hhcjJoZXggPSA0J2hDOyAvLyBjaGFyYWN0ZXIgJ0MnCisgICAgIDgnaDQ0OgljaGFyMmhleCA9IDQnaEQ7IC8vIGNoYXJhY3RlciAnRCcKKyAgICAgOCdoNDU6CWNoYXIyaGV4ID0gNCdoRTsgLy8gY2hhcmFjdGVyICdFJworICAgICA4J2g0NjoJY2hhcjJoZXggPSA0J2hGOyAvLyBjaGFyYWN0ZXIgJ0YnCisgICAgIDgnaDYxOgljaGFyMmhleCA9IDQnaEE7IC8vIGNoYXJhY3RlciAnYScKKyAgICAgOCdoNjI6CWNoYXIyaGV4ID0gNCdoQjsgLy8gY2hhcmFjdGVyICdiJworICAgICA4J2g2MzoJY2hhcjJoZXggPSA0J2hDOyAvLyBjaGFyYWN0ZXIgJ2MnCisgICAgIDgnaDY0OgljaGFyMmhleCA9IDQnaEQ7IC8vIGNoYXJhY3RlciAnZCcKKyAgICAgOCdoNjU6CWNoYXIyaGV4ID0gNCdoRTsgLy8gY2hhcmFjdGVyICdlJworICAgICA4J2g2NjoJY2hhcjJoZXggPSA0J2hGOyAvLyBjaGFyYWN0ZXIgJ2YnCisgICAgICBkZWZhdWx0IDogIGNoYXIyaGV4ID0gNCdoRjsKKyAgIGVuZGNhc2UgCitlbmRmdW5jdGlvbgorCisvLyBIZXggdG8gQXNjaSBDaGFyYWN0ZXIgCitmdW5jdGlvbiBbNzowXSBoZXgyY2hhcjsKK2lucHV0IFszOjBdIGRhdGFfaW47CitjYXNlIChkYXRhX2luKQorICAgICA0J2gwOgloZXgyY2hhciA9IDgnaDMwOyAvLyBjaGFyYWN0ZXIgJzAnIAorICAgICA0J2gxOgloZXgyY2hhciA9IDgnaDMxOyAvLyBjaGFyYWN0ZXIgJzEnCisgICAgIDQnaDI6CWhleDJjaGFyID0gOCdoMzI7IC8vIGNoYXJhY3RlciAnMicKKyAgICAgNCdoMzoJaGV4MmNoYXIgPSA4J2gzMzsgLy8gY2hhcmFjdGVyICczJworICAgICA0J2g0OgloZXgyY2hhciA9IDgnaDM0OyAvLyBjaGFyYWN0ZXIgJzQnIAorICAgICA0J2g1OgloZXgyY2hhciA9IDgnaDM1OyAvLyBjaGFyYWN0ZXIgJzUnCisgICAgIDQnaDY6CWhleDJjaGFyID0gOCdoMzY7IC8vIGNoYXJhY3RlciAnNicKKyAgICAgNCdoNzoJaGV4MmNoYXIgPSA4J2gzNzsgLy8gY2hhcmFjdGVyICc3JworICAgICA0J2g4OgloZXgyY2hhciA9IDgnaDM4OyAvLyBjaGFyYWN0ZXIgJzgnCisgICAgIDQnaDk6CWhleDJjaGFyID0gOCdoMzk7IC8vIGNoYXJhY3RlciAnOScKKyAgICAgNCdoQToJaGV4MmNoYXIgPSA4J2g0MTsgLy8gY2hhcmFjdGVyICdBJworICAgICA0J2hCOgloZXgyY2hhciA9IDgnaDQyOyAvLyBjaGFyYWN0ZXIgJ0InCisgICAgIDQnaEM6CWhleDJjaGFyID0gOCdoNDM7IC8vIGNoYXJhY3RlciAnQycKKyAgICAgNCdoRDoJaGV4MmNoYXIgPSA4J2g0NDsgLy8gY2hhcmFjdGVyICdEJworICAgICA0J2hFOgloZXgyY2hhciA9IDgnaDQ1OyAvLyBjaGFyYWN0ZXIgJ0UnCisgICAgIDQnaEY6CWhleDJjaGFyID0gOCdoNDY7IC8vIGNoYXJhY3RlciAnRicKKyAgIGVuZGNhc2UgCitlbmRmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9MSUNFTlNFIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZmU1MjIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL0xJQ0VOU0UKQEAgLTAsMCArMSwyNCBAQAorQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUsIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgKFJlZ2VudHMpLgorQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFJlZ2VudHMgbm9yIHRoZQorICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitJTiBOTyBFVkVOVCBTSEFMTCBSRUdFTlRTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIERJUkVDVCwgSU5ESVJFQ1QsCitTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIElOQ0xVRElORyBMT1NUIFBST0ZJVFMsIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFJFR0VOVFMgSEFTCitCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitSRUdFTlRTIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gVEhFIFNPRlRXQVJFIEFORCBBQ0NPTVBBTllJTkcgRE9DVU1FTlRBVElPTiwgSUYgQU5ZLCBQUk9WSURFRAorSEVSRVVOREVSIElTIFBST1ZJREVEICJBUyBJUyIuIFJFR0VOVFMgSEFTIE5PIE9CTElHQVRJT04gVE8gUFJPVklERQorTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvY29tbW9uLm1rIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9jb21tb24ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyZDM0NgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY29tbW9uLm1rCkBAIC0wLDAgKzEsNjYgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0FERF9BU01fTUFDUk8gPz0gLURfX0FTU0VNQkxZX189MQorCitGTEFHUyA9IC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgJChBRERfRkxBR1MpCitGTEFHU19TVFIgPSAiJChGTEFHUykiCisKK0NGTEFHU19DT01NT04gPSAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0kKFRDTSkKK0NGTEFHU19BUkNIID0gLVdhLC1tYXJjaD1ydjMyJChBUkNIKSAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9JChBQkkpCisKK0NGTEFHUyA6PSAkKEZMQUdTKSAkKEVYVF9DRkxBR1MpIFwKKyQoQ0ZMQUdTX0NPTU1PTikgXAorJChDRkxBR1NfQVJDSCkgXAorLURGTEFHU19TVFI9XCIkKEZMQUdTX1NUUilcIiBcCiskKEFERF9DRkxBR1MpCisKK0xERkxBR1MgICA/PSAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzIkKEFSQ0gpIC1tYWJpPSQoQUJJKQorCitpZmVxICgsJChmaW5kc3RyaW5nIDAsJChUQ00pKSkKK2xkX3NjcmlwdCA/PSAkKGluY19kaXIpL2xpbmtfdGNtLmxkCithc21fc3JjICAgPz0gY3J0X3RjbS5TCitlbHNlCitsZF9zY3JpcHQgPz0gJChpbmNfZGlyKS9saW5rLmxkCithc21fc3JjICAgPz0gY3J0LlMKK2VuZGlmCisKK1ZQQVRIICs9ICQoc3JjX2RpcikgJChpbmNfZGlyKSAkKEFERF9WUEFUSCkKK2luY3MgICs9IC1JJChzcmNfZGlyKSAtSSQoaW5jX2RpcikgJChBRERfaW5jcykKKworY19vYmpzICAgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS8sJChwYXRzdWJzdCAlLmMsICUubywgJChjX3NyYykpKQorYXNtX29ianMgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS8sJChwYXRzdWJzdCAlLlMsICUubywgJChhc21fc3JjKSkpCisKKyQoYmxkX2RpcikvJS5vOiAlLlMKKwkkKFJJU0NWX0dDQykgJChDRkxBR1MpICQoQUREX0FTTV9NQUNSTykgLWMgJChpbmNzKSAkPCAtbyAkQAorCiskKGJsZF9kaXIpLyUubzogJS5jCisJJChSSVNDVl9HQ0MpICQoQ0ZMQUdTKSAtYyAkKGluY3MpICQ8IC1vICRACisKKyQoYmxkX2RpcikvJS5lbGY6ICQobGRfc2NyaXB0KSAkKGNfb2JqcykgJChhc21fb2JqcykKKwkkKFJJU0NWX0dDQykgLW8gJEAgLVQgJF4gJChMREZMQUdTKQorCiskKGJsZF9kaXIpLyUuaGV4OiAkKGJsZF9kaXIpLyUuZWxmCisJJChSSVNDVl9ST01fT0JKQ09QWSkgJF4gJEAKKwkkKFJJU0NWX1JBTV9PQkpDT1BZKSAkXiAkQC5yYW0KKwkjYXNzaWduIDB4MDgwMF8weHh4ICB0byAweDAwMDBfMHh4eCB0byBtYXAgdG8gVENNIE1lbW9yeQorCXNlZCAtaSAncy9AMDgwMDAvQDAwMDAwL2cnICRALnJhbQorCisKKyQoYmxkX2RpcikvJS5kdW1wOiAkKGJsZF9kaXIpLyUuZWxmCisJJChSSVNDVl9PQkpEVU1QKSAkXiA+ICRACmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2NydC5TIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9jcnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTBjYjZiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9jcnQuUwpAQCAtMCwwICsxLDE2MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7ICAgICAgICAvLy8vCisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgIC8vLy8KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAvLy8vCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgIC8vLy8KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLi8vLworLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgICAvLy8vCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+ICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgorI2luY2x1ZGUgInNjX3Rlc3QuaCIKKworIyBkZWZpbmUgTFJFRyBsdworIyBkZWZpbmUgU1JFRyBzdworIyBkZWZpbmUgUkVHQllURVMgNAorCisgICAgLmdsb2JsIF9zdGFydAorICAgIC5nbG9ibCBtYWluCisgICAgLmdsb2JsIHRyYXBfZW50cnkKKyAgICAuZ2xvYmwgaGFuZGxlX3RyYXAKKyAgICAuZ2xvYmwgc2NfZXhpdAorICAgIC53ZWFrIHRyYXBfZW50cnksIGhhbmRsZV90cmFwCisKKyAgICAudGV4dAorICAgIC5vcmcgKDY0KjMpCisgICAgLmJhbGlnbiA2NAorbWFjaGluZV90cmFwX2VudHJ5OgorICAgIGogdHJhcF9lbnRyeQorCisgICAgLmJhbGlnbiA2NAorCitfc3RhcnQ6CisjaWZuZGVmIF9fUlZFX0VYVAorICAgIHplcm9faW50X3JlZ3MgMSwgMzEKKyNlbHNlCisgICAgemVyb19pbnRfcmVncyAxLCAxNQorI2VuZGlmCisgICAgIyBHbG9iYWwgcG9pbnRlciBpbml0CisgICAgLm9wdGlvbiBwdXNoCisgICAgLm9wdGlvbiBub3JlbGF4CisgICAgbGEgICAgZ3AsIF9fZ2xvYmFsX3BvaW50ZXIkCisgICAgLm9wdGlvbiBwb3AKKyAgICAjIGNsZWFyIGJzcworICAgIGxhICAgICAgYTEsIF9fQlNTX1NUQVJUX18KKyAgICBsYSAgICAgIGEyLCBfX0JTU19FTkRfXworICAgIGogICAgICAgNGYKKzM6ICBzdyAgICAgIHplcm8sIDAoYTEpCisgICAgYWRkICAgICBhMSwgYTEsIDQKKzQ6ICBibmUgICAgIGExLCBhMiwgM2IKKyAgICBsYSAgICAgIHNwLCBfX0NfU1RBQ0tfVE9QX18KKworICAgIC8vIFRpbWVyIGluaXQKKyAgICBsaSAgICAgIHQwLCBtdGltZV9jdHJsCisgICAgbGkgICAgICB0MSwgKDEgPDwgWUNSMV9NVElNRV9DVFJMX0VOKSAgIC8vIGVuYWJsZSwgdXNlIGludGVybmFsIGNsb2NrCisgICAgc3cgICAgICB0MSwgKHQwKQorICAgIGxpICAgICAgdDAsIG10aW1lX2RpdgorICAgIGxpICAgICAgdDEsICgxMDAtMSkgICAgICAgICAgICAgICAgICAgICAvLyBkaXZpZGUgYnkgMTAwCisgICAgc3cgICAgICB0MSwgKHQwKQorICAgIGxpICAgICAgdDAsIG10aW1lY21wCisgICAgbGkgICAgICB0MSwgLTEKKyAgICBzdyAgICAgIHQxLCAodDApICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHZhbHVlIGZvciBtdGltZWNtcAorICAgIHN3ICAgICAgdDEsIDQodDApCisKKyAgICBsaSAgICAgIGEwLCAwCisgICAgbGkgICAgICBhMSwgMAorICAgIGphbCAgICAgbWFpbgorICAgIGogICAgICAgc2NfZXhpdAorCit0cmFwX2VudHJ5OgorICAgIGFkZGkgc3AsIHNwLCAtMjcyCisKKyAgICBTUkVHIHgxLCAxKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIsIDIqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MywgMypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg0LCA0KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDUsIDUqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NiwgNipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg3LCA3KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDgsIDgqUkVHQllURVMoc3ApCisgICAgU1JFRyB4OSwgOSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMCwgMTAqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTEsIDExKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDEyLCAxMipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMywgMTMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTQsIDE0KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE1LCAxNSpSRUdCWVRFUyhzcCkKKyNpZm5kZWYgX19SVkVfRVhUCisgICAgU1JFRyB4MTYsIDE2KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE3LCAxNypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxOCwgMTgqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTksIDE5KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIwLCAyMCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMSwgMjEqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjIsIDIyKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIzLCAyMypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNCwgMjQqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjUsIDI1KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI2LCAyNipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNywgMjcqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjgsIDI4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI5LCAyOSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgzMCwgMzAqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MzEsIDMxKlJFR0JZVEVTKHNwKQorI2VuZGlmIC8vIF9fUlZFX0VYVAorCisgICAgY3NyciBhMCwgbWNhdXNlCisgICAgY3NyciBhMSwgbWVwYworICAgIG12IGEyLCBzcAorICAgIGphbCBoYW5kbGVfdHJhcAorCisgICAgTFJFRyB4MSwgMSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyLCAyKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDMsIDMqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NCwgNCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg1LCA1KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDYsIDYqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NywgNypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg4LCA4KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDksIDkqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTAsIDEwKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDExLCAxMSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxMiwgMTIqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTMsIDEzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE0LCAxNCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxNSwgMTUqUkVHQllURVMoc3ApCisjaWZuZGVmIF9fUlZFX0VYVAorICAgIExSRUcgeDE2LCAxNipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxNywgMTcqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTgsIDE4KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE5LCAxOSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMCwgMjAqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjEsIDIxKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDIyLCAyMipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMywgMjMqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjQsIDI0KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI1LCAyNSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyNiwgMjYqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjcsIDI3KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI4LCAyOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyOSwgMjkqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MzAsIDMwKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDMxLCAzMSpSRUdCWVRFUyhzcCkKKyNlbmRpZiAvLyBfX1JWRV9FWFQKKworICAgIGFkZGkgc3AsIHNwLCAyNzIKKyAgICBtcmV0CisKK2hhbmRsZV90cmFwOgorICAgIGogU0lNX0VYSVQKKworLy8gZW5kIG9mIGNydC5TCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2NydF90Y20uUyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3J0X3RjbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYmNiNjUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2NydF90Y20uUwpAQCAtMCwwICsxLDE3MSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7ICAgICAgICAvLy8vCisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgIC8vLy8KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAvLy8vCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgIC8vLy8KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLi8vLworLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgICAvLy8vCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+ICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgorI2luY2x1ZGUgInJlbG9jLmgiCisjaW5jbHVkZSAic2NfdGVzdC5oIgorCisjIGRlZmluZSBMUkVHIGx3CisjIGRlZmluZSBTUkVHIHN3CisjIGRlZmluZSBSRUdCWVRFUyA0CisKKyAgICAuZ2xvYmwgX3N0YXJ0CisgICAgLmdsb2JsIG1haW4KKyAgICAuZ2xvYmwgdHJhcF9lbnRyeQorICAgIC5nbG9ibCBoYW5kbGVfdHJhcAorICAgIC5nbG9ibCBzY19leGl0CisgICAgLndlYWsgdHJhcF9lbnRyeSwgaGFuZGxlX3RyYXAKKworICAgIC5zZWN0aW9uIC50ZXh0LmluaXQKKyAgICAub3JnICg2NCozKQorICAgIC5hbGlnbiA2OworbWFjaGluZV90cmFwX2VudHJ5OgorICAgIGogdHJhcF9lbnRyeQorCisgICAgLmFsaWduIDYKK19zdGFydDoKKyNpZm5kZWYgX19SVkVfRVhUCisgICAgemVyb19pbnRfcmVncyAxLCAzMQorI2Vsc2UKKyAgICB6ZXJvX2ludF9yZWdzIDEsIDE1CisjZW5kaWYKKyAgICAjIEdsb2JhbCBwb2ludGVyIGluaXQKKyAgICAub3B0aW9uIHB1c2gKKyAgICAub3B0aW9uIG5vcmVsYXgKKyAgICBsYSAgICBncCwgX19nbG9iYWxfcG9pbnRlciQKKyAgICAub3B0aW9uIHBvcAorCisgICAgUkVMT0NfUFJPQzsKKworICAgIC8vIGluaXQgdGRhdGEKKyAgICBtdiAgICBhMSwgdHAKKyAgICBsYSAgICBhMiwgX3RkYXRhX2VuZAorICAgIGogICAgIDZmCis1OiAgbHcgICAgYTMsIDAoYTApCisgICAgc3cgICAgYTMsIDAoYTEpCisgICAgYWRkICAgYTAsIGEwLCA0CisgICAgYWRkICAgYTEsIGExLCA0Cis2OiAgYm5lICAgYTAsIGEyLCA1YgorICAgIC8vIGNsZWFyIHRic3MKKyAgICBqICAgICA4ZgorNzogIHN3ICAgIHplcm8sIDAoYTEpCisgICAgYWRkICAgYTEsIGExLCA0Cis4OiAgYm5lICAgYTEsIGE0LCA3YgorCisgICAgLy8gVGltZXIgaW5pdAorICAgIGxpICAgIHQwLCBtdGltZV9jdHJsCisgICAgbGkgICAgdDEsICgxIDw8IFlDUjFfTVRJTUVfQ1RSTF9FTikgICAvLyBlbmFibGUsIHVzZSBpbnRlcm5hbCBjbG9jaworICAgIHN3ICAgIHQxLCAodDApCisgICAgbGkgICAgdDAsIG10aW1lX2RpdgorICAgIGxpICAgIHQxLCAoMTAwLTEpICAgICAgICAgICAgICAgICAgICAgLy8gZGl2aWRlIGJ5IDEwMAorICAgIHN3ICAgIHQxLCAodDApCisgICAgbGkgICAgdDAsIG10aW1lY21wCisgICAgbGkgICAgdDEsIC0xCisgICAgc3cgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXggdmFsdWUgZm9yIG10aW1lY21wCisgICAgc3cgICAgdDEsIDQodDApCisKKyAgICBsaSAgICBhMCwgMAorICAgIGxpICAgIGExLCAwCis5OiAgYXVpcGMgdDAsICVwY3JlbF9oaShtYWluKQorICAgIGphbHIgIHQwLCAlcGNyZWxfbG8oOWIpCisgICAgbGEgICAgdDAsIHNjX2V4aXQKKyAgICAvL2ogICAgIHNjX2V4aXQKKwordHJhcF9lbnRyeToKKyAgICBhZGRpIHNwLCBzcCwgLTI3MgorCisgICAgU1JFRyB4MSwgMSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyLCAyKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDMsIDMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NCwgNCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg1LCA1KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDYsIDYqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NywgNypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg4LCA4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDksIDkqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTAsIDEwKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDExLCAxMSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMiwgMTIqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTMsIDEzKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE0LCAxNCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxNSwgMTUqUkVHQllURVMoc3ApCisjaWZuZGVmIF9fUlZFX0VYVAorICAgIFNSRUcgeDE2LCAxNipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxNywgMTcqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTgsIDE4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE5LCAxOSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMCwgMjAqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjEsIDIxKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIyLCAyMipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMywgMjMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjQsIDI0KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI1LCAyNSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNiwgMjYqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjcsIDI3KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI4LCAyOCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyOSwgMjkqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MzAsIDMwKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDMxLCAzMSpSRUdCWVRFUyhzcCkKKyNlbmRpZiAvLyBfX1JWRV9FWFQKKworICAgIGNzcnIgYTAsIG1jYXVzZQorICAgIGNzcnIgYTEsIG1lcGMKKyAgICBtdiBhMiwgc3AKKyAgICBqYWwgaGFuZGxlX3RyYXAKKworICAgIExSRUcgeDEsIDEqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MiwgMipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgzLCAzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDQsIDQqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NSwgNSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg2LCA2KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDcsIDcqUkVHQllURVMoc3ApCisgICAgTFJFRyB4OCwgOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg5LCA5KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDEwLCAxMCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxMSwgMTEqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTIsIDEyKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDEzLCAxMypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxNCwgMTQqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTUsIDE1KlJFR0JZVEVTKHNwKQorI2lmbmRlZiBfX1JWRV9FWFQKKyAgICBMUkVHIHgxNiwgMTYqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTcsIDE3KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE4LCAxOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxOSwgMTkqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjAsIDIwKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDIxLCAyMSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMiwgMjIqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjMsIDIzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI0LCAyNCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyNSwgMjUqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjYsIDI2KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI3LCAyNypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyOCwgMjgqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjksIDI5KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDMwLCAzMCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgzMSwgMzEqUkVHQllURVMoc3ApCisjZW5kaWYgLy8gX19SVkVfRVhUCisKKyAgICBhZGRpIHNwLCBzcCwgMjcyCisgICAgbXJldAorCitoYW5kbGVfdHJhcDoKKyAgICBqIFNJTV9FWElUCisKKy8vIGVuZCBvZiBjcnQuUwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9jc3IuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3NyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2ZjFmYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3NyLmgKQEAgLTAsMCArMSwxMjggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8gQXJjaGl0ZWN0dXJlIHNwZWNpZmljIENTUidzIGRlZnMgYW5kIGlubGluZXMKKworI2lmbmRlZiBZQ1JfQ1NSX0gKKyNkZWZpbmUgWUNSX0NTUl9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNkZWZpbmUgX194c3RyaW5naWZ5KHMpIF9fc3RyaW5naWZ5KHMpCisjZGVmaW5lIF9fc3RyaW5naWZ5KHMpICNzCisKKyNpZmRlZiByZWFkX2NzcgorI3VuZGVmIHJlYWRfY3NyCisjZW5kaWYKKworI2lmZGVmIHdyaXRlX2NzcgorI3VuZGVmIHdyaXRlX2NzcgorI2VuZGlmCisKKyNpZmRlZiBzd2FwX2NzcgorI3VuZGVmIHN3YXBfY3NyCisjZW5kaWYKKworI2lmZGVmIHNldF9jc3IKKyN1bmRlZiBzZXRfY3NyCisjZW5kaWYKKworI2lmZGVmIGNsZWFyX2NzcgorI3VuZGVmIGNsZWFyX2NzcgorI2VuZGlmCisKKyNpZmRlZiByZHRpbWUKKyN1bmRlZiByZHRpbWUKKyNlbmRpZgorCisjaWZkZWYgcmRjeWNsZQorI3VuZGVmIHJkY3ljbGUKKyNlbmRpZgorCisjaWZkZWYgcmRpbnN0cmV0CisjdW5kZWYgcmRpbnN0cmV0CisjZW5kaWYKKworI2RlZmluZSByZWFkX2NzcihyZWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyBfX3RtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JyICUwLCAiIF9feHN0cmluZ2lmeShyZWcpIDogIj1yIihfX3RtcCkpOyBcCisgICAgICAgIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIHdyaXRlX2NzcihyZWcsIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh2YWwpICYmICh2YWwpID09IDApICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3J3ICIgX194c3RyaW5naWZ5KHJlZykgIiwgemVybyIgOjopOyAgICAgICBcCisgICAgICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbCkgJiYgKHVuc2lnbmVkIGxvbmcpKHZhbCkgPCAzMikgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NydyAiIF9feHN0cmluZ2lmeShyZWcpICIsICUwIiA6OiAiaSIodmFsKSk7IFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNzcncgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMCIgOjogInIiKHZhbCkpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzd2FwX2NzcihyZWcsIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AodmFsKSAmJiAodmFsKSA9PSAwKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycncgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgemVybyIgOiAgIj1yIihfX3RtcCkgOik7IFwKKyAgICAgICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AodmFsKSAmJiAodW5zaWduZWQgbG9uZykodmFsKSA8IDMyKSBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JydyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIih2YWwpKTsgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycncgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIodmFsKSk7IFwKKyAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIHNldF9jc3IocmVnLCBiaXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiaXQpICYmIChiaXQpIDwgMzIpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JycyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIihiaXQpKTsgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycnMgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIoYml0KSk7IFwKKyAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIGNsZWFyX2NzcihyZWcsIGJpdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiaXQpICYmIChiaXQpIDwgMzIpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JyYyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIihiaXQpKTsgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycmMgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIoYml0KSk7IFwKKyAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIHJkdGltZSgpIHJlYWRfY3NyKHRpbWUpCisjZGVmaW5lIHJkY3ljbGUoKSByZWFkX2NzcihjeWNsZSkKKyNkZWZpbmUgcmRpbnN0cmV0KCkgcmVhZF9jc3IoaW5zdHJldCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKGNvbnN0KSkgY3B1aWQoKQoreworICB1bnNpZ25lZCBsb25nIHJlczsKKyAgYXNtICgiY3NyciAlMCwgbWNwdWlkIiA6ICI9ciIocmVzKSk7CisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChjb25zdCkpIGltcGlkKCkKK3sKKyAgdW5zaWduZWQgbG9uZyByZXM7CisgIGFzbSAoImNzcnIgJTAsIG1pbXBpZCIgOiAiPXIiKHJlcykpOworICByZXR1cm4gcmVzOworfQorCisjZW5kaWYgLy8gWUNSX0NTUl9ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2xpbmsubGQgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2xpbmsubGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyMzYzZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvbGluay5sZApAQCAtMCwwICsxLDExOCBAQAorLyoKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisqKi8KKy8qCisqIEBicmllZiAgICAgIGJhcmUgbWV0YWwgdGVzdHMnIGxpbmtlciBzY3JpcHQKKyovCisKK09VVFBVVF9BUkNIKCAicmlzY3YiICkKK0VOVFJZKF9zdGFydCkKKworTUVNT1JZIHsKKyAgUk9NIChyeHgpIDogT1JJR0lOID0gMHgwLCBMRU5HVEggPSA2NEsKKyAgUkFNIChyd3gpIDogT1JJR0lOID0gMHgwODAwMDAwMCwgTEVOR1RIID0gNjRLCisgIFRDTSAocnd4KSA6IE9SSUdJTiA9IDB4MEM0ODAwMDAsIExFTkdUSCA9IDJLCit9CisKK1NUQUNLX1NJWkUgPSAxMDI0OworCitDTF9TSVpFID0gMzI7CisKK1NFQ1RJT05TIHsKKworICAvKiBjb2RlIHNlZ21lbnQgKi8KKyAgLnRleHQuaW5pdCAwIDogeyAKKyAgICBGSUxMKDApOworICAgIC4gPSAweDEwMCAtIDEyOworICAgIFNJTV9FWElUID0gLjsKKyAgICBMT05HKDB4MTMpOworICAgIFNJTV9TVE9QID0gLjsKKyAgICBMT05HKDB4NkYpOworICAgIExPTkcoLTEpOworICAgIC4gPSAweDEwMDsKKyAgICBQUk9WSURFKF9fVEVYVF9TVEFSVF9fID0gLik7CisgICAgKigudGV4dC5pbml0KSAKKyAgfSA+Uk9NCisKKyAgLnRleHQgIDogeworICAgICpjcnQubygudGV4dCAudGV4dC4qKQorICAgICooLnRleHQgLnRleHQuKikKKyAgICAqKHNjX3Rlc3Rfc2VjdGlvbikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgICAgIFBST1ZJREUoX19URVhUX0VORF9fID0gLik7CisgIH0gPlJPTQorCisgIC8qIGRhdGEgc2VnbWVudCAqLworICAuZGF0YSA6IHsKKyAgICAqKC5kYXRhIC5kYXRhLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5SQU0KKworICAuc2RhdGEgOiB7CisgICAgX19nbG9iYWxfcG9pbnRlciQgPSAuICsgMHg4MDA7CisgICAgKiguc3JvZGF0YS5jc3QxNikgKiguc3JvZGF0YS5jc3Q4KSAqKC5zcm9kYXRhLmNzdDQpICooLnNyb2RhdGEuY3N0MikgKiguc3JvZGF0YSopCisgICAgKiguc2RhdGEgLnNkYXRhLiogLmdudS5saW5rb25jZS5zLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5SQU0KKworICAvKiB0aHJlYWQtbG9jYWwgZGF0YSBzZWdtZW50ICovCisgIC50ZGF0YSA6IHsKKyAgICBQUk9WSURFKF90bHNfZGF0YSA9IC4pOworICAgIFBST1ZJREUoX3RkYXRhX2JlZ2luID0gLik7CisgICAgKigudGRhdGEgLnRkYXRhLiopCisgICAgUFJPVklERShfdGRhdGFfZW5kID0gLik7CisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5SQU0KKworICAudGJzcyA6IHsKKyAgICBQUk9WSURFKF9fQlNTX1NUQVJUX18gPSAuKTsKKyAgICAqKC50YnNzIC50YnNzLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICAgIFBST1ZJREUoX3Ric3NfZW5kID0gLik7CisgIH0gPlJBTQorCisgIC8qIGJzcyBzZWdtZW50ICovCisgIC5zYnNzIDogeworICAgICooLnNic3MgLnNic3MuKiAuZ251LmxpbmtvbmNlLnNiLiopCisgICAgKiguc2NvbW1vbikKKyAgfSA+UkFNCisKKyAgLmJzcyA6IHsKKyAgICAqKC5ic3MgLmJzcy4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICBQUk9WSURFKF9fQlNTX0VORF9fID0gLik7CisgIH0gPlJBTQorCisgIF9lbmQgPSAuOworICBQUk9WSURFKF9fZW5kID0gLik7CisKKyAgLyogRW5kIG9mIHVuaW5pdGFsaXplZCBkYXRhIHNlZ2VtZW50ICovCisKKyAgLnN0YWNrIE9SSUdJTihUQ00pICsgTEVOR1RIKFRDTSkgLSBTVEFDS19TSVpFIDogeworICAgIEZJTEwoMCk7CisgICAgUFJPVklERShfX1NUQUNLX1NUQVJUX18gPSAuKTsKKyAgICAuICs9IFNUQUNLX1NJWkU7CisgICAgUFJPVklERShfX0NfU1RBQ0tfVE9QX18gPSAuKTsKKyAgICBQUk9WSURFKF9fU1RBQ0tfRU5EX18gPSAuKTsKKyAgfSA+VENNCisKKyAgL0RJU0NBUkQvIDogeworICAgICooLmVoX2ZyYW1lIC5laF9mcmFtZS4qKQorICB9Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2xpbmtfdGNtLmxkIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9saW5rX3RjbS5sZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjA5ODgxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9saW5rX3RjbS5sZApAQCAtMCwwICsxLDEzMSBAQAorLyoqCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKi8KKy8qCisqIEBicmllZiAgICAgIGJhcmUgbWV0YWwgdGVzdHMnIGxpbmtlciBzY3JpcHQKKyovCisKK09VVFBVVF9BUkNIKCAicmlzY3YiICkKK0VOVFJZKF9zdGFydCkKKworTUVNT1JZIHsKKyAgUk9NIChyeHgpIDogT1JJR0lOID0gMHgwLCBMRU5HVEggPSA2NEsKKyAgVENNIChyd3gpIDogT1JJR0lOID0gMHgwMDQ4MDAwMCwgTEVOR1RIID0gNEsKK30KKworU1RBQ0tfU0laRSA9IDI1NjsKKworQ0xfU0laRSA9IDMyOworCitTRUNUSU9OUyB7CisKKyAgLyogY29kZSBzZWdtZW50ICovCisgIC50ZXh0LmluaXQgT1JJR0lOKFJPTSkgOiB7IAorICAgIEZJTEwoMCk7CisgICAgLiA9IDB4MTAwIC0gMTI7CisgICAgU0lNX0VYSVQgPSAuOworICAgIExPTkcoMHgxMyk7CisgICAgU0lNX1NUT1AgPSAuOworICAgIExPTkcoMHg2Rik7CisgICAgTE9ORygtMSk7CisgICAgLiA9IDB4MTAwOworICAgICpjcnRfdGNtLm8oLnRleHQgLnRleHQuKikKKyAgICAqKC50ZXh0LmluaXQpCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5ST00KKworICBfX3JlbG9jX3N0YXJ0ID0gLjsKKworICAudGV4dCA6IHsKKyAgICBQUk9WSURFKF9fVEVYVF9TVEFSVF9fID0gLik7CisgICAgKigudGV4dCAudGV4dC4qKQorICAgICooc2NfdGVzdF9zZWN0aW9uKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICAgUFJPVklERShfX1RFWFRfRU5EX18gPSAuKTsKKyAgfSA+VENNIEFUPlJPTQorCisKKyAgLnJvZGF0YSBBTElHTihDTF9TSVpFKSA6IHsKKyAgICBfX2dsb2JhbF9wb2ludGVyJCA9IC4gKyAweDgwMDsKKyAgICAqKC5yb2RhdGEpICooLnJvZGF0YS4qKSAqKC5nbnUubGlua29uY2Uuci4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICBMT05HKDB4MTMpOworICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgfSA+VENNIEFUPlJPTQorCisKKyAgLyogZGF0YSBzZWdtZW50ICovCisgIC5kYXRhIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX19EQVRBX1NUQVJUX18gPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5UQ00gCisgIAorICAuc2RhdGEgQUxJR04oQ0xfU0laRSkgOiB7CisgICAgKiguc2RhdGEgLnNkYXRhLiogLmdudS5saW5rb25jZS5zLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICAgIFBST1ZJREUoX19EQVRBX0VORF9fID0gLik7CisgIH0gPlRDTQorCisgIC8qIHRocmVhZC1sb2NhbCBkYXRhIHNlZ21lbnQgKi8KKyAgLnRkYXRhIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX3Rsc19kYXRhID0gLik7CisgICAgUFJPVklERShfdGRhdGFfYmVnaW4gPSAuKTsKKyAgICAqKC50ZGF0YSAudGRhdGEuKikKKyAgICBQUk9WSURFKF90ZGF0YV9lbmQgPSAuKTsKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgIH0gPlRDTQorCisgIC50YnNzIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX3Ric3NfYmVnaW4gPSAuKTsKKyAgICAqKC50YnNzIC50YnNzLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICAgIFBST1ZJREUoX3Ric3NfZW5kID0gLik7CisgIH0gPlRDTQorCisgIC8qIGJzcyBzZWdtZW50ICovCisgIC5zYnNzIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX19CU1NfU1RBUlRfXyA9IC4pOworICAgICooLnNic3MgLnNic3MuKiAuZ251LmxpbmtvbmNlLnNiLiopCisgICAgKiguc2NvbW1vbikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgIH0gPlRDTQorCisgIC5ic3MgQUxJR04oQ0xfU0laRSkgOiB7CisgICAgKiguZHluYnNzKSAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKSAqKENPTU1PTikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgICAgUFJPVklERShfX0JTU19FTkRfXyA9IC4pOworICB9ID5UQ00KKworICBfZW5kID0gLjsKKyAgUFJPVklERShfX2VuZCA9IC4pOworCisgIC8qIEVuZCBvZiB1bmluaXRhbGl6ZWQgZGF0YSBzZWdlbWVudCAqLworCisgIC5zdGFjayBPUklHSU4oVENNKSArIExFTkdUSChUQ00pIC0gU1RBQ0tfU0laRSA6IHsKKyAgICBQUk9WSURFKF9fU1RBQ0tfU1RBUlRfXyA9IC4pOworICAgIC4gKz0gU1RBQ0tfU0laRTsKKyAgICBQUk9WSURFKF9fQ19TVEFDS19UT1BfXyA9IC4pOworICAgIFBST1ZJREUoX19TVEFDS19FTkRfXyA9IC4pOworICB9ID5UQ00KKworICAvRElTQ0FSRC8gOiB7CisgICAgKiguZWhfZnJhbWUgLmVoX2ZyYW1lLiopCisgIH0KK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmVsb2MuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmVsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzgxNjdlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9yZWxvYy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworI2lmbmRlZiBSRUxPQ19ICisjZGVmaW5lIFJFTE9DX0gKKworI2lmIChUQ00gPT0gMSkKKyNkZWZpbmUgUkVMT0NfUFJPQyAgICAgICAgICAgICAgXAorICAgIGxhICAgIGEwLCBfX3JlbG9jX3N0YXJ0OyAgICBcCisgICAgbGEgICAgYTEsIF9fVEVYVF9TVEFSVF9fOyAgIFwKKyAgICBsYSAgICBhMiwgX19EQVRBX0VORF9fOyAgICAgXAorICAgIGJlcSAgIGEwLCBhMSwgMjFmOyAgICAgICAgICBcCisgICAgaiAgICAgMmY7ICAgICAgICAgICAgICAgICAgIFwKKzE6ICBsdyAgICBhMywgMChhMCk7ICAgICAgICAgICAgXAorICAgIHN3ICAgIGEzLCAwKGExKTsgICAgICAgICAgICBcCisgICAgYWRkICAgYTAsIGEwLCA0OyAgICAgICAgICAgIFwKKyAgICBhZGQgICBhMSwgYTEsIDQ7ICAgICAgICAgICAgXAorMjogIGJuZSAgIGExLCBhMiwgMWI7ICAgICAgICAgICBcCisgICAgLyogY2xlYXIgYnNzICovICAgICAgICAgICAgIFwKKyAgICBsYSAgICBhMiwgX19CU1NfU1RBUlRfXzsgICAgXAorMjE6IGxhICAgIGExLCBfX0JTU19FTkRfXzsgICAgICBcCisgICAgaiAgICAgNGY7ICAgICAgICAgICAgICAgICAgIFwKKzM6ICBzdyAgICB6ZXJvLCAwKGEyKTsgICAgICAgICAgXAorICAgIGFkZCAgIGEyLCBhMiwgNDsgICAgICAgICAgICBcCis0OiAgYm5lICAgYTEsIGEyLCAzYjsgICAgICAgICAgIFwKKyAgICAvKiBpbml0IHN0YWNrICovICAgICAgICAgICAgXAorICAgIGxhICAgIHNwLCBfX0NfU1RBQ0tfVE9QX187ICBcCisgICAgLyogaW5pdCBoYXJ0MCBUTFMgKi8gICAgICAgIFwKKyAgICBsYSAgICBhMCwgX3RkYXRhX2JlZ2luOyAgICAgXAorICAgIGxhICAgIGEyLCBfdGJzc19lbmQ7ICAgICAgICBcCisgICAgc3ViICAgYTEsIGEyLCBhMDsgICAgICAgICAgIFwKKyAgICBsYSAgICBhNCwgX19TVEFDS19TVEFSVF9fOyAgXAorICAgIHN1YiAgIHRwLCBhNCwgYTE7ICAgCisjZWxzZSAgLy8gI2lmIFRDTQorCisjZGVmaW5lIFJFTE9DX1BST0MKKworI2VuZGlmICAvLyAjZWxzZSAjaWYgVENNCisKKyNlbmRpZiAgLy8gCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL3Jpc2N2X2Nzcl9lbmNvZGluZy5oIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9yaXNjdl9jc3JfZW5jb2RpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY1YWJiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9yaXNjdl9jc3JfZW5jb2RpbmcuaApAQCAtMCwwICsxLDE0ODkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgUklTQ1ZfQ1NSX0VOQ09ESU5HX0gKKyNkZWZpbmUgUklTQ1ZfQ1NSX0VOQ09ESU5HX0gKKworI2RlZmluZSBNU1RBVFVTX1VJRSAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTVNUQVRVU19TSUUgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1TVEFUVVNfSElFICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNU1RBVFVTX01JRSAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTVNUQVRVU19VUElFICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE1TVEFUVVNfU1BJRSAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBNU1RBVFVTX0hQSUUgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTVNUQVRVU19NUElFICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIE1TVEFUVVNfU1BQICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBNU1RBVFVTX0hQUCAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgTVNUQVRVU19NUFAgICAgICAgICAweDAwMDAxODAwCisjZGVmaW5lIE1TVEFUVVNfRlMgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBNU1RBVFVTX1hTICAgICAgICAgIDB4MDAwMTgwMDAKKyNkZWZpbmUgTVNUQVRVU19NUFJWICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIE1TVEFUVVNfU1VNICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBNU1RBVFVTX01YUiAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgTVNUQVRVU19UVk0gICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIE1TVEFUVVNfVFcgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBNU1RBVFVTX1RTUiAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgTVNUQVRVUzMyX1NEICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIE1TVEFUVVNfVVhMICAgICAgICAgMHgwMDAwMDAwMzAwMDAwMDAwCisjZGVmaW5lIE1TVEFUVVNfU1hMICAgICAgICAgMHgwMDAwMDAwQzAwMDAwMDAwCisjZGVmaW5lIE1TVEFUVVM2NF9TRCAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwCisKKyNkZWZpbmUgU1NUQVRVU19VSUUgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTVEFUVVNfU0lFICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU1RBVFVTX1VQSUUgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgU1NUQVRVU19TUElFICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFNTVEFUVVNfU1BQICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBTU1RBVFVTX0ZTICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgU1NUQVRVU19YUyAgICAgICAgICAweDAwMDE4MDAwCisjZGVmaW5lIFNTVEFUVVNfU1VNICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBTU1RBVFVTX01YUiAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgU1NUQVRVUzMyX1NEICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNTVEFUVVNfVVhMICAgICAgICAgMHgwMDAwMDAwMzAwMDAwMDAwCisjZGVmaW5lIFNTVEFUVVM2NF9TRCAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwCisKKyNkZWZpbmUgRENTUl9YREVCVUdWRVIgICAgICAoM1U8PDMwKQorI2RlZmluZSBEQ1NSX05EUkVTRVQgICAgICAgICgxPDwyOSkKKyNkZWZpbmUgRENTUl9GVUxMUkVTRVQgICAgICAoMTw8MjgpCisjZGVmaW5lIERDU1JfRUJSRUFLTSAgICAgICAgKDE8PDE1KQorI2RlZmluZSBEQ1NSX0VCUkVBS0ggICAgICAgICgxPDwxNCkKKyNkZWZpbmUgRENTUl9FQlJFQUtTICAgICAgICAoMTw8MTMpCisjZGVmaW5lIERDU1JfRUJSRUFLVSAgICAgICAgKDE8PDEyKQorI2RlZmluZSBEQ1NSX1NUT1BDWUNMRSAgICAgICgxPDwxMCkKKyNkZWZpbmUgRENTUl9TVE9QVElNRSAgICAgICAoMTw8OSkKKyNkZWZpbmUgRENTUl9DQVVTRSAgICAgICAgICAoNzw8NikKKyNkZWZpbmUgRENTUl9ERUJVR0lOVCAgICAgICAoMTw8NSkKKyNkZWZpbmUgRENTUl9IQUxUICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgRENTUl9TVEVQICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgRENTUl9QUlYgICAgICAgICAgICAoMzw8MCkKKworI2RlZmluZSBEQ1NSX0NBVVNFX05PTkUgICAgIDAKKyNkZWZpbmUgRENTUl9DQVVTRV9TV0JQICAgICAxCisjZGVmaW5lIERDU1JfQ0FVU0VfSFdCUCAgICAgMgorI2RlZmluZSBEQ1NSX0NBVVNFX0RFQlVHSU5UIDMKKyNkZWZpbmUgRENTUl9DQVVTRV9TVEVQICAgICA0CisjZGVmaW5lIERDU1JfQ0FVU0VfSEFMVCAgICAgNQorCisjZGVmaW5lIE1DT05UUk9MX1RZUEUoeGxlbikgICAgKDB4ZlVMTDw8KCh4bGVuKS00KSkKKyNkZWZpbmUgTUNPTlRST0xfRE1PREUoeGxlbikgICAoMVVMTDw8KCh4bGVuKS01KSkKKyNkZWZpbmUgTUNPTlRST0xfTUFTS01BWCh4bGVuKSAoMHgzZlVMTDw8KCh4bGVuKS0xMSkpCisKKyNkZWZpbmUgTUNPTlRST0xfU0VMRUNUICAgICAoMTw8MTkpCisjZGVmaW5lIE1DT05UUk9MX1RJTUlORyAgICAgKDE8PDE4KQorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT04gICAgICgweDNmPDwxMikKKyNkZWZpbmUgTUNPTlRST0xfQ0hBSU4gICAgICAoMTw8MTEpCisjZGVmaW5lIE1DT05UUk9MX01BVENIICAgICAgKDB4Zjw8NykKKyNkZWZpbmUgTUNPTlRST0xfTSAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgTUNPTlRST0xfSCAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgTUNPTlRST0xfUyAgICAgICAgICAoMTw8NCkKKyNkZWZpbmUgTUNPTlRST0xfVSAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgTUNPTlRST0xfRVhFQ1VURSAgICAoMTw8MikKKyNkZWZpbmUgTUNPTlRST0xfU1RPUkUgICAgICAoMTw8MSkKKyNkZWZpbmUgTUNPTlRST0xfTE9BRCAgICAgICAoMTw8MCkKKworI2RlZmluZSBNQ09OVFJPTF9UWVBFX05PTkUgICAgICAwCisjZGVmaW5lIE1DT05UUk9MX1RZUEVfTUFUQ0ggICAgIDIKKworI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fREVCVUdfRVhDRVBUSU9OICAgMAorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fREVCVUdfTU9ERSAgICAgICAgMQorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fVFJBQ0VfU1RBUlQgICAgICAgMgorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fVFJBQ0VfU1RPUCAgICAgICAgMworI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fVFJBQ0VfRU1JVCAgICAgICAgNAorCisjZGVmaW5lIE1DT05UUk9MX01BVENIX0VRVUFMICAgICAwCisjZGVmaW5lIE1DT05UUk9MX01BVENIX05BUE9UICAgICAxCisjZGVmaW5lIE1DT05UUk9MX01BVENIX0dFICAgICAgICAyCisjZGVmaW5lIE1DT05UUk9MX01BVENIX0xUICAgICAgICAzCisjZGVmaW5lIE1DT05UUk9MX01BVENIX01BU0tfTE9XICA0CisjZGVmaW5lIE1DT05UUk9MX01BVENIX01BU0tfSElHSCA1CisKKyNkZWZpbmUgTUlQX1NTSVAgICAgICAgICAgICAoMSA8PCBJUlFfU19TT0ZUKQorI2RlZmluZSBNSVBfSFNJUCAgICAgICAgICAgICgxIDw8IElSUV9IX1NPRlQpCisjZGVmaW5lIE1JUF9NU0lQICAgICAgICAgICAgKDEgPDwgSVJRX01fU09GVCkKKyNkZWZpbmUgTUlQX1NUSVAgICAgICAgICAgICAoMSA8PCBJUlFfU19USU1FUikKKyNkZWZpbmUgTUlQX0hUSVAgICAgICAgICAgICAoMSA8PCBJUlFfSF9USU1FUikKKyNkZWZpbmUgTUlQX01USVAgICAgICAgICAgICAoMSA8PCBJUlFfTV9USU1FUikKKyNkZWZpbmUgTUlQX1NFSVAgICAgICAgICAgICAoMSA8PCBJUlFfU19FWFQpCisjZGVmaW5lIE1JUF9IRUlQICAgICAgICAgICAgKDEgPDwgSVJRX0hfRVhUKQorI2RlZmluZSBNSVBfTUVJUCAgICAgICAgICAgICgxIDw8IElSUV9NX0VYVCkKKworI2RlZmluZSBTSVBfU1NJUCBNSVBfU1NJUAorI2RlZmluZSBTSVBfU1RJUCBNSVBfU1RJUAorCisjZGVmaW5lIFBSVl9VIDAKKyNkZWZpbmUgUFJWX1MgMQorI2RlZmluZSBQUlZfSCAyCisjZGVmaW5lIFBSVl9NIDMKKworI2RlZmluZSBTUFRCUjMyX01PREUgMHg4MDAwMDAwMAorI2RlZmluZSBTUFRCUjMyX0FTSUQgMHg3RkMwMDAwMAorI2RlZmluZSBTUFRCUjMyX1BQTiAgMHgwMDNGRkZGRgorI2RlZmluZSBTUFRCUjY0X01PREUgMHhGMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFNQVEJSNjRfQVNJRCAweDBGRkZGMDAwMDAwMDAwMDAKKyNkZWZpbmUgU1BUQlI2NF9QUE4gIDB4MDAwMDBGRkZGRkZGRkZGRgorCisjZGVmaW5lIFNQVEJSX01PREVfT0ZGICAwCisjZGVmaW5lIFNQVEJSX01PREVfU1YzMiAxCisjZGVmaW5lIFNQVEJSX01PREVfU1YzOSA4CisjZGVmaW5lIFNQVEJSX01PREVfU1Y0OCA5CisjZGVmaW5lIFNQVEJSX01PREVfU1Y1NyAxMAorI2RlZmluZSBTUFRCUl9NT0RFX1NWNjQgMTEKKworI2RlZmluZSBQTVBfUiAgICAgMHgwMQorI2RlZmluZSBQTVBfVyAgICAgMHgwMgorI2RlZmluZSBQTVBfWCAgICAgMHgwNAorI2RlZmluZSBQTVBfQSAgICAgMHgxOAorI2RlZmluZSBQTVBfTCAgICAgMHg4MAorI2RlZmluZSBQTVBfU0hJRlQgMgorCisjZGVmaW5lIFBNUF9UT1IgICAweDA4CisjZGVmaW5lIFBNUF9OQTQgICAweDEwCisjZGVmaW5lIFBNUF9OQVBPVCAweDE4CisKKyNkZWZpbmUgSVJRX1NfU09GVCAgIDEKKyNkZWZpbmUgSVJRX0hfU09GVCAgIDIKKyNkZWZpbmUgSVJRX01fU09GVCAgIDMKKyNkZWZpbmUgSVJRX1NfVElNRVIgIDUKKyNkZWZpbmUgSVJRX0hfVElNRVIgIDYKKyNkZWZpbmUgSVJRX01fVElNRVIgIDcKKyNkZWZpbmUgSVJRX1NfRVhUICAgIDkKKyNkZWZpbmUgSVJRX0hfRVhUICAgIDEwCisjZGVmaW5lIElSUV9NX0VYVCAgICAxMQorI2RlZmluZSBJUlFfQ09QICAgICAgMTIKKyNkZWZpbmUgSVJRX0hPU1QgICAgIDEzCisKKyNkZWZpbmUgREVGQVVMVF9SU1RWRUMgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ0xJTlRfQkFTRSAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ0xJTlRfU0laRSAgICAgICAgIDB4MDAwYzAwMDAKKyNkZWZpbmUgRVhUX0lPX0JBU0UgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRFJBTV9CQVNFICAgICAgICAgIDB4ODAwMDAwMDAKKworLy8gcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBmaWVsZHMKKyNkZWZpbmUgUFRFX1YgICAgIDB4MDAxIC8vIFZhbGlkCisjZGVmaW5lIFBURV9SICAgICAweDAwMiAvLyBSZWFkCisjZGVmaW5lIFBURV9XICAgICAweDAwNCAvLyBXcml0ZQorI2RlZmluZSBQVEVfWCAgICAgMHgwMDggLy8gRXhlY3V0ZQorI2RlZmluZSBQVEVfVSAgICAgMHgwMTAgLy8gVXNlcgorI2RlZmluZSBQVEVfRyAgICAgMHgwMjAgLy8gR2xvYmFsCisjZGVmaW5lIFBURV9BICAgICAweDA0MCAvLyBBY2Nlc3NlZAorI2RlZmluZSBQVEVfRCAgICAgMHgwODAgLy8gRGlydHkKKyNkZWZpbmUgUFRFX1NPRlQgIDB4MzAwIC8vIFJlc2VydmVkIGZvciBTb2Z0d2FyZQorCisjZGVmaW5lIFBURV9QUE5fU0hJRlQgMTAKKworI2RlZmluZSBQVEVfVEFCTEUoUFRFKSAoKChQVEUpICYgKFBURV9WIHwgUFRFX1IgfCBQVEVfVyB8IFBURV9YKSkgPT0gUFRFX1YpCisKKyNpZmRlZiBfX3Jpc2N2CisKKyNpZiBfX3Jpc2N2X3hsZW4gPT0gNjQKKyMgZGVmaW5lIE1TVEFUVVNfU0QgTVNUQVRVUzY0X1NECisjIGRlZmluZSBTU1RBVFVTX1NEIFNTVEFUVVM2NF9TRAorIyBkZWZpbmUgUklTQ1ZfUEdMRVZFTF9CSVRTIDkKKyMgZGVmaW5lIFNQVEJSX01PREUgU1BUQlI2NF9NT0RFCisjZWxzZQorIyBkZWZpbmUgTVNUQVRVU19TRCBNU1RBVFVTMzJfU0QKKyMgZGVmaW5lIFNTVEFUVVNfU0QgU1NUQVRVUzMyX1NECisjIGRlZmluZSBSSVNDVl9QR0xFVkVMX0JJVFMgMTAKKyMgZGVmaW5lIFNQVEJSX01PREUgU1BUQlIzMl9NT0RFCisjZW5kaWYKKyNkZWZpbmUgUklTQ1ZfUEdTSElGVCAxMgorI2RlZmluZSBSSVNDVl9QR1NJWkUgKDEgPDwgUklTQ1ZfUEdTSElGVCkKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKyNpZmRlZiBfX0dOVUNfXworCisjZGVmaW5lIHJlYWRfY3NyKHJlZykgKHsgdW5zaWduZWQgbG9uZyBfX3RtcDsgXAorICBhc20gdm9sYXRpbGUgKCJjc3JyICUwLCAiICNyZWcgOiAiPXIiKF9fdG1wKSk7IFwKKyAgX190bXA7IH0pCisKKyNkZWZpbmUgd3JpdGVfY3NyKHJlZywgdmFsKSAoeyBcCisgIGFzbSB2b2xhdGlsZSAoImNzcncgIiAjcmVnICIsICUwIiA6OiAicksiKHZhbCkpOyB9KQorCisjZGVmaW5lIHN3YXBfY3NyKHJlZywgdmFsKSAoeyB1bnNpZ25lZCBsb25nIF9fdG1wOyBcCisgIGFzbSB2b2xhdGlsZSAoImNzcnJ3ICUwLCAiICNyZWcgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAicksiKHZhbCkpOyBcCisgIF9fdG1wOyB9KQorCisjZGVmaW5lIHNldF9jc3IocmVnLCBiaXQpICh7IHVuc2lnbmVkIGxvbmcgX190bXA7IFwKKyAgYXNtIHZvbGF0aWxlICgiY3NycnMgJTAsICIgI3JlZyAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJySyIoYml0KSk7IFwKKyAgX190bXA7IH0pCisKKyNkZWZpbmUgY2xlYXJfY3NyKHJlZywgYml0KSAoeyB1bnNpZ25lZCBsb25nIF9fdG1wOyBcCisgIGFzbSB2b2xhdGlsZSAoImNzcnJjICUwLCAiICNyZWcgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAicksiKGJpdCkpOyBcCisgIF9fdG1wOyB9KQorCisjZGVmaW5lIHJkdGltZSgpIHJlYWRfY3NyKHRpbWUpCisjZGVmaW5lIHJkY3ljbGUoKSByZWFkX2NzcihjeWNsZSkKKyNkZWZpbmUgcmRpbnN0cmV0KCkgcmVhZF9jc3IoaW5zdHJldCkKKworI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCisvKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBwYXJzZS1vcGNvZGVzLiAgKi8KKyNpZm5kZWYgUklTQ1ZfRU5DT0RJTkdfSAorI2RlZmluZSBSSVNDVl9FTkNPRElOR19ICisjZGVmaW5lIE1BVENIX0JFUSAweDYzCisjZGVmaW5lIE1BU0tfQkVRICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQk5FIDB4MTA2MworI2RlZmluZSBNQVNLX0JORSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0JMVCAweDQwNjMKKyNkZWZpbmUgTUFTS19CTFQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9CR0UgMHg1MDYzCisjZGVmaW5lIE1BU0tfQkdFICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQkxUVSAweDYwNjMKKyNkZWZpbmUgTUFTS19CTFRVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQkdFVSAweDcwNjMKKyNkZWZpbmUgTUFTS19CR0VVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfSkFMUiAweDY3CisjZGVmaW5lIE1BU0tfSkFMUiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0pBTCAweDZmCisjZGVmaW5lIE1BU0tfSkFMICAweDdmCisjZGVmaW5lIE1BVENIX0xVSSAweDM3CisjZGVmaW5lIE1BU0tfTFVJICAweDdmCisjZGVmaW5lIE1BVENIX0FVSVBDIDB4MTcKKyNkZWZpbmUgTUFTS19BVUlQQyAgMHg3ZgorI2RlZmluZSBNQVRDSF9BRERJIDB4MTMKKyNkZWZpbmUgTUFTS19BRERJICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xMSSAweDEwMTMKKyNkZWZpbmUgTUFTS19TTExJICAweGZjMDA3MDdmCisjZGVmaW5lIE1BVENIX1NMVEkgMHgyMDEzCisjZGVmaW5lIE1BU0tfU0xUSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1NMVElVIDB4MzAxMworI2RlZmluZSBNQVNLX1NMVElVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfWE9SSSAweDQwMTMKKyNkZWZpbmUgTUFTS19YT1JJICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JMSSAweDUwMTMKKyNkZWZpbmUgTUFTS19TUkxJICAweGZjMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSQUkgMHg0MDAwNTAxMworI2RlZmluZSBNQVNLX1NSQUkgIDB4ZmMwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfT1JJIDB4NjAxMworI2RlZmluZSBNQVNLX09SSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0FOREkgMHg3MDEzCisjZGVmaW5lIE1BU0tfQU5ESSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0FERCAweDMzCisjZGVmaW5lIE1BU0tfQUREICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NVQiAweDQwMDAwMDMzCisjZGVmaW5lIE1BU0tfU1VCICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NMTCAweDEwMzMKKyNkZWZpbmUgTUFTS19TTEwgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xUIDB4MjAzMworI2RlZmluZSBNQVNLX1NMVCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TTFRVIDB4MzAzMworI2RlZmluZSBNQVNLX1NMVFUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfWE9SIDB4NDAzMworI2RlZmluZSBNQVNLX1hPUiAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TUkwgMHg1MDMzCisjZGVmaW5lIE1BU0tfU1JMICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSQSAweDQwMDA1MDMzCisjZGVmaW5lIE1BU0tfU1JBICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX09SIDB4NjAzMworI2RlZmluZSBNQVNLX09SICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0FORCAweDcwMzMKKyNkZWZpbmUgTUFTS19BTkQgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQURESVcgMHgxYgorI2RlZmluZSBNQVNLX0FERElXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xMSVcgMHgxMDFiCisjZGVmaW5lIE1BU0tfU0xMSVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JMSVcgMHg1MDFiCisjZGVmaW5lIE1BU0tfU1JMSVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JBSVcgMHg0MDAwNTAxYgorI2RlZmluZSBNQVNLX1NSQUlXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0FERFcgMHgzYgorI2RlZmluZSBNQVNLX0FERFcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1VCVyAweDQwMDAwMDNiCisjZGVmaW5lIE1BU0tfU1VCVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TTExXIDB4MTAzYgorI2RlZmluZSBNQVNLX1NMTFcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JMVyAweDUwM2IKKyNkZWZpbmUgTUFTS19TUkxXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSQVcgMHg0MDAwNTAzYgorI2RlZmluZSBNQVNLX1NSQVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEIgMHgzCisjZGVmaW5lIE1BU0tfTEIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9MSCAweDEwMDMKKyNkZWZpbmUgTUFTS19MSCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0xXIDB4MjAwMworI2RlZmluZSBNQVNLX0xXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEQgMHgzMDAzCisjZGVmaW5lIE1BU0tfTEQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9MQlUgMHg0MDAzCisjZGVmaW5lIE1BU0tfTEJVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEhVIDB4NTAwMworI2RlZmluZSBNQVNLX0xIVSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0xXVSAweDYwMDMKKyNkZWZpbmUgTUFTS19MV1UgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9TQiAweDIzCisjZGVmaW5lIE1BU0tfU0IgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9TSCAweDEwMjMKKyNkZWZpbmUgTUFTS19TSCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1NXIDB4MjAyMworI2RlZmluZSBNQVNLX1NXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0QgMHgzMDIzCisjZGVmaW5lIE1BU0tfU0QgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GRU5DRSAweGYKKyNkZWZpbmUgTUFTS19GRU5DRSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZFTkNFX0kgMHgxMDBmCisjZGVmaW5lIE1BU0tfRkVOQ0VfSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX01VTCAweDIwMDAwMzMKKyNkZWZpbmUgTUFTS19NVUwgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTVVMSCAweDIwMDEwMzMKKyNkZWZpbmUgTUFTS19NVUxIICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX01VTEhTVSAweDIwMDIwMzMKKyNkZWZpbmUgTUFTS19NVUxIU1UgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTVVMSFUgMHgyMDAzMDMzCisjZGVmaW5lIE1BU0tfTVVMSFUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRElWIDB4MjAwNDAzMworI2RlZmluZSBNQVNLX0RJViAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9ESVZVIDB4MjAwNTAzMworI2RlZmluZSBNQVNLX0RJVlUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfUkVNIDB4MjAwNjAzMworI2RlZmluZSBNQVNLX1JFTSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9SRU1VIDB4MjAwNzAzMworI2RlZmluZSBNQVNLX1JFTVUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTVVMVyAweDIwMDAwM2IKKyNkZWZpbmUgTUFTS19NVUxXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0RJVlcgMHgyMDA0MDNiCisjZGVmaW5lIE1BU0tfRElWVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9ESVZVVyAweDIwMDUwM2IKKyNkZWZpbmUgTUFTS19ESVZVVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9SRU1XIDB4MjAwNjAzYgorI2RlZmluZSBNQVNLX1JFTVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfUkVNVVcgMHgyMDA3MDNiCisjZGVmaW5lIE1BU0tfUkVNVVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQUREX1cgMHgyMDJmCisjZGVmaW5lIE1BU0tfQU1PQUREX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PWE9SX1cgMHgyMDAwMjAyZgorI2RlZmluZSBNQVNLX0FNT1hPUl9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT09SX1cgMHg0MDAwMjAyZgorI2RlZmluZSBNQVNLX0FNT09SX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQU5EX1cgMHg2MDAwMjAyZgorI2RlZmluZSBNQVNLX0FNT0FORF9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT01JTl9XIDB4ODAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5fVyAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTU9NQVhfVyAweGEwMDAyMDJmCisjZGVmaW5lIE1BU0tfQU1PTUFYX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUlOVV9XIDB4YzAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5VX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUFYVV9XIDB4ZTAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9NQVhVX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PU1dBUF9XIDB4ODAwMjAyZgorI2RlZmluZSBNQVNLX0FNT1NXQVBfVyAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9MUl9XIDB4MTAwMDIwMmYKKyNkZWZpbmUgTUFTS19MUl9XICAweGY5ZjA3MDdmCisjZGVmaW5lIE1BVENIX1NDX1cgMHgxODAwMjAyZgorI2RlZmluZSBNQVNLX1NDX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQUREX0QgMHgzMDJmCisjZGVmaW5lIE1BU0tfQU1PQUREX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PWE9SX0QgMHgyMDAwMzAyZgorI2RlZmluZSBNQVNLX0FNT1hPUl9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT09SX0QgMHg0MDAwMzAyZgorI2RlZmluZSBNQVNLX0FNT09SX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQU5EX0QgMHg2MDAwMzAyZgorI2RlZmluZSBNQVNLX0FNT0FORF9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT01JTl9EIDB4ODAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5fRCAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTU9NQVhfRCAweGEwMDAzMDJmCisjZGVmaW5lIE1BU0tfQU1PTUFYX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUlOVV9EIDB4YzAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5VX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUFYVV9EIDB4ZTAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9NQVhVX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PU1dBUF9EIDB4ODAwMzAyZgorI2RlZmluZSBNQVNLX0FNT1NXQVBfRCAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9MUl9EIDB4MTAwMDMwMmYKKyNkZWZpbmUgTUFTS19MUl9EICAweGY5ZjA3MDdmCisjZGVmaW5lIE1BVENIX1NDX0QgMHgxODAwMzAyZgorI2RlZmluZSBNQVNLX1NDX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRUNBTEwgMHg3MworI2RlZmluZSBNQVNLX0VDQUxMICAweGZmZmZmZmZmCisjZGVmaW5lIE1BVENIX0VCUkVBSyAweDEwMDA3MworI2RlZmluZSBNQVNLX0VCUkVBSyAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9VUkVUIDB4MjAwMDczCisjZGVmaW5lIE1BU0tfVVJFVCAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9TUkVUIDB4MTAyMDAwNzMKKyNkZWZpbmUgTUFTS19TUkVUICAweGZmZmZmZmZmCisjZGVmaW5lIE1BVENIX01SRVQgMHgzMDIwMDA3MworI2RlZmluZSBNQVNLX01SRVQgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgTUFUQ0hfRFJFVCAweDdiMjAwMDczCisjZGVmaW5lIE1BU0tfRFJFVCAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9TRkVOQ0VfVk1BIDB4MTIwMDAwNzMKKyNkZWZpbmUgTUFTS19TRkVOQ0VfVk1BICAweGZlMDA3ZmZmCisjZGVmaW5lIE1BVENIX1dGSSAweDEwNTAwMDczCisjZGVmaW5lIE1BU0tfV0ZJICAweGZmZmZmZmZmCisjZGVmaW5lIE1BVENIX0NTUlJXIDB4MTA3MworI2RlZmluZSBNQVNLX0NTUlJXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1NSUlMgMHgyMDczCisjZGVmaW5lIE1BU0tfQ1NSUlMgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DU1JSQyAweDMwNzMKKyNkZWZpbmUgTUFTS19DU1JSQyAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NTUlJXSSAweDUwNzMKKyNkZWZpbmUgTUFTS19DU1JSV0kgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DU1JSU0kgMHg2MDczCisjZGVmaW5lIE1BU0tfQ1NSUlNJICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1NSUkNJIDB4NzA3MworI2RlZmluZSBNQVNLX0NTUlJDSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZBRERfUyAweDUzCisjZGVmaW5lIE1BU0tfRkFERF9TICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZTVUJfUyAweDgwMDAwNTMKKyNkZWZpbmUgTUFTS19GU1VCX1MgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1VTF9TIDB4MTAwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVVMX1MgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkRJVl9TIDB4MTgwMDAwNTMKKyNkZWZpbmUgTUFTS19GRElWX1MgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpfUyAweDIwMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNHTkpfUyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GU0dOSk5fUyAweDIwMDAxMDUzCisjZGVmaW5lIE1BU0tfRlNHTkpOX1MgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpYX1MgMHgyMDAwMjA1MworI2RlZmluZSBNQVNLX0ZTR05KWF9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZNSU5fUyAweDI4MDAwMDUzCisjZGVmaW5lIE1BU0tfRk1JTl9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZNQVhfUyAweDI4MDAxMDUzCisjZGVmaW5lIE1BU0tfRk1BWF9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTUVJUX1MgMHg1ODAwMDA1MworI2RlZmluZSBNQVNLX0ZTUVJUX1MgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkFERF9EIDB4MjAwMDA1MworI2RlZmluZSBNQVNLX0ZBRERfRCAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GU1VCX0QgMHhhMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNVQl9EICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVUxfRCAweDEyMDAwMDUzCisjZGVmaW5lIE1BU0tfRk1VTF9EICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZESVZfRCAweDFhMDAwMDUzCisjZGVmaW5lIE1BU0tfRkRJVl9EICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZTR05KX0QgMHgyMjAwMDA1MworI2RlZmluZSBNQVNLX0ZTR05KX0QgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpOX0QgMHgyMjAwMTA1MworI2RlZmluZSBNQVNLX0ZTR05KTl9EICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTR05KWF9EIDB4MjIwMDIwNTMKKyNkZWZpbmUgTUFTS19GU0dOSlhfRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUlOX0QgMHgyYTAwMDA1MworI2RlZmluZSBNQVNLX0ZNSU5fRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUFYX0QgMHgyYTAwMTA1MworI2RlZmluZSBNQVNLX0ZNQVhfRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1NfRCAweDQwMTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9EX1MgMHg0MjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfRF9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZTUVJUX0QgMHg1YTAwMDA1MworI2RlZmluZSBNQVNLX0ZTUVJUX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkFERF9RIDB4NjAwMDA1MworI2RlZmluZSBNQVNLX0ZBRERfUSAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GU1VCX1EgMHhlMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNVQl9RICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVUxfUSAweDE2MDAwMDUzCisjZGVmaW5lIE1BU0tfRk1VTF9RICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZESVZfUSAweDFlMDAwMDUzCisjZGVmaW5lIE1BU0tfRkRJVl9RICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZTR05KX1EgMHgyNjAwMDA1MworI2RlZmluZSBNQVNLX0ZTR05KX1EgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpOX1EgMHgyNjAwMTA1MworI2RlZmluZSBNQVNLX0ZTR05KTl9RICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTR05KWF9RIDB4MjYwMDIwNTMKKyNkZWZpbmUgTUFTS19GU0dOSlhfUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUlOX1EgMHgyZTAwMDA1MworI2RlZmluZSBNQVNLX0ZNSU5fUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUFYX1EgMHgyZTAwMTA1MworI2RlZmluZSBNQVNLX0ZNQVhfUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1NfUSAweDQwMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX1EgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9RX1MgMHg0NjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfUV9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9RIDB4NDIzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0RfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1FfRCAweDQ2MTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9RX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRlNRUlRfUSAweDVlMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNRUlRfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTEVfUyAweGEwMDAwMDUzCisjZGVmaW5lIE1BU0tfRkxFX1MgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxUX1MgMHhhMDAwMTA1MworI2RlZmluZSBNQVNLX0ZMVF9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZFUV9TIDB4YTAwMDIwNTMKKyNkZWZpbmUgTUFTS19GRVFfUyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTEVfRCAweGEyMDAwMDUzCisjZGVmaW5lIE1BU0tfRkxFX0QgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxUX0QgMHhhMjAwMTA1MworI2RlZmluZSBNQVNLX0ZMVF9EICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZFUV9EIDB4YTIwMDIwNTMKKyNkZWZpbmUgTUFTS19GRVFfRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTEVfUSAweGE2MDAwMDUzCisjZGVmaW5lIE1BU0tfRkxFX1EgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxUX1EgMHhhNjAwMTA1MworI2RlZmluZSBNQVNLX0ZMVF9RICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZFUV9RIDB4YTYwMDIwNTMKKyNkZWZpbmUgTUFTS19GRVFfUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1dfUyAweGMwMDAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9XX1MgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9XVV9TIDB4YzAxMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1dVX1MgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9MX1MgMHhjMDIwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfTF9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfTFVfUyAweGMwMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9MVV9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVl9YX1cgMHhlMDAwMDA1MworI2RlZmluZSBNQVNLX0ZNVl9YX1cgIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNMQVNTX1MgMHhlMDAwMTA1MworI2RlZmluZSBNQVNLX0ZDTEFTU19TICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfV19EIDB4YzIwMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1dfRCAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1dVX0QgMHhjMjEwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfV1VfRCAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0xfRCAweGMyMjAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9MX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9MVV9EIDB4YzIzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0xVX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1WX1hfRCAweGUyMDAwMDUzCisjZGVmaW5lIE1BU0tfRk1WX1hfRCAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ0xBU1NfRCAweGUyMDAxMDUzCisjZGVmaW5lIE1BU0tfRkNMQVNTX0QgIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9XX1EgMHhjNjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfV19RICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfV1VfUSAweGM2MTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9XVV9RICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfTF9RIDB4YzYyMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0xfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0xVX1EgMHhjNjMwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfTFVfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVZfWF9RIDB4ZTYwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVZfWF9RICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDTEFTU19RIDB4ZTYwMDEwNTMKKyNkZWZpbmUgTUFTS19GQ0xBU1NfUSAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1NfVyAweGQwMDAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX1cgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9TX1dVIDB4ZDAxMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1NfV1UgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9TX0wgMHhkMDIwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfU19MICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfU19MVSAweGQwMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX0xVICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVl9XX1ggMHhmMDAwMDA1MworI2RlZmluZSBNQVNLX0ZNVl9XX1ggIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9EX1cgMHhkMjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfRF9XICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9XVSAweGQyMTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9EX1dVICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9MIDB4ZDIyMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0RfTCAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0RfTFUgMHhkMjMwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfRF9MVSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVZfRF9YIDB4ZjIwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVZfRF9YICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfUV9XIDB4ZDYwMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1FfVyAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1FfV1UgMHhkNjEwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfUV9XVSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1FfTCAweGQ2MjAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9RX0wgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9RX0xVIDB4ZDYzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1FfTFUgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1WX1FfWCAweGY2MDAwMDUzCisjZGVmaW5lIE1BU0tfRk1WX1FfWCAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GTFcgMHgyMDA3CisjZGVmaW5lIE1BU0tfRkxXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxEIDB4MzAwNworI2RlZmluZSBNQVNLX0ZMRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZMUSAweDQwMDcKKyNkZWZpbmUgTUFTS19GTFEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GU1cgMHgyMDI3CisjZGVmaW5lIE1BU0tfRlNXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNEIDB4MzAyNworI2RlZmluZSBNQVNLX0ZTRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZTUSAweDQwMjcKKyNkZWZpbmUgTUFTS19GU1EgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GTUFERF9TIDB4NDMKKyNkZWZpbmUgTUFTS19GTUFERF9TICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1TVUJfUyAweDQ3CisjZGVmaW5lIE1BU0tfRk1TVUJfUyAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTVNVQl9TIDB4NGIKKyNkZWZpbmUgTUFTS19GTk1TVUJfUyAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTUFERF9TIDB4NGYKKyNkZWZpbmUgTUFTS19GTk1BRERfUyAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNQUREX0QgMHgyMDAwMDQzCisjZGVmaW5lIE1BU0tfRk1BRERfRCAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNU1VCX0QgMHgyMDAwMDQ3CisjZGVmaW5lIE1BU0tfRk1TVUJfRCAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTVNVQl9EIDB4MjAwMDA0YgorI2RlZmluZSBNQVNLX0ZOTVNVQl9EICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk5NQUREX0QgMHgyMDAwMDRmCisjZGVmaW5lIE1BU0tfRk5NQUREX0QgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTUFERF9RIDB4NjAwMDA0MworI2RlZmluZSBNQVNLX0ZNQUREX1EgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVNVQl9RIDB4NjAwMDA0NworI2RlZmluZSBNQVNLX0ZNU1VCX1EgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTk1TVUJfUSAweDYwMDAwNGIKKyNkZWZpbmUgTUFTS19GTk1TVUJfUSAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTUFERF9RIDB4NjAwMDA0ZgorI2RlZmluZSBNQVNLX0ZOTUFERF9RICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfQ19OT1AgMHgxCisjZGVmaW5lIE1BU0tfQ19OT1AgIDB4ZmZmZgorI2RlZmluZSBNQVRDSF9DX0FEREkxNlNQIDB4NjEwMQorI2RlZmluZSBNQVNLX0NfQURESTE2U1AgIDB4ZWY4MworI2RlZmluZSBNQVRDSF9DX0pSIDB4ODAwMgorI2RlZmluZSBNQVNLX0NfSlIgIDB4ZjA3ZgorI2RlZmluZSBNQVRDSF9DX0pBTFIgMHg5MDAyCisjZGVmaW5lIE1BU0tfQ19KQUxSICAweGYwN2YKKyNkZWZpbmUgTUFUQ0hfQ19FQlJFQUsgMHg5MDAyCisjZGVmaW5lIE1BU0tfQ19FQlJFQUsgIDB4ZmZmZgorI2RlZmluZSBNQVRDSF9DX0xEIDB4NjAwMAorI2RlZmluZSBNQVNLX0NfTEQgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NEIDB4ZTAwMAorI2RlZmluZSBNQVNLX0NfU0QgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0FERElXIDB4MjAwMQorI2RlZmluZSBNQVNLX0NfQURESVcgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0xEU1AgMHg2MDAyCisjZGVmaW5lIE1BU0tfQ19MRFNQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19TRFNQIDB4ZTAwMgorI2RlZmluZSBNQVNLX0NfU0RTUCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfQURESTRTUE4gMHgwCisjZGVmaW5lIE1BU0tfQ19BRERJNFNQTiAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfRkxEIDB4MjAwMAorI2RlZmluZSBNQVNLX0NfRkxEICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MVyAweDQwMDAKKyNkZWZpbmUgTUFTS19DX0xXICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GTFcgMHg2MDAwCisjZGVmaW5lIE1BU0tfQ19GTFcgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0ZTRCAweGEwMDAKKyNkZWZpbmUgTUFTS19DX0ZTRCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfU1cgMHhjMDAwCisjZGVmaW5lIE1BU0tfQ19TVyAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfRlNXIDB4ZTAwMAorI2RlZmluZSBNQVNLX0NfRlNXICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19BRERJIDB4MQorI2RlZmluZSBNQVNLX0NfQURESSAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfSkFMIDB4MjAwMQorI2RlZmluZSBNQVNLX0NfSkFMICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MSSAweDQwMDEKKyNkZWZpbmUgTUFTS19DX0xJICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MVUkgMHg2MDAxCisjZGVmaW5lIE1BU0tfQ19MVUkgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NSTEkgMHg4MDAxCisjZGVmaW5lIE1BU0tfQ19TUkxJICAweGVjMDMKKyNkZWZpbmUgTUFUQ0hfQ19TUkFJIDB4ODQwMQorI2RlZmluZSBNQVNLX0NfU1JBSSAgMHhlYzAzCisjZGVmaW5lIE1BVENIX0NfQU5ESSAweDg4MDEKKyNkZWZpbmUgTUFTS19DX0FOREkgIDB4ZWMwMworI2RlZmluZSBNQVRDSF9DX1NVQiAweDhjMDEKKyNkZWZpbmUgTUFTS19DX1NVQiAgMHhmYzYzCisjZGVmaW5lIE1BVENIX0NfWE9SIDB4OGMyMQorI2RlZmluZSBNQVNLX0NfWE9SICAweGZjNjMKKyNkZWZpbmUgTUFUQ0hfQ19PUiAweDhjNDEKKyNkZWZpbmUgTUFTS19DX09SICAweGZjNjMKKyNkZWZpbmUgTUFUQ0hfQ19BTkQgMHg4YzYxCisjZGVmaW5lIE1BU0tfQ19BTkQgIDB4ZmM2MworI2RlZmluZSBNQVRDSF9DX1NVQlcgMHg5YzAxCisjZGVmaW5lIE1BU0tfQ19TVUJXICAweGZjNjMKKyNkZWZpbmUgTUFUQ0hfQ19BRERXIDB4OWMyMQorI2RlZmluZSBNQVNLX0NfQUREVyAgMHhmYzYzCisjZGVmaW5lIE1BVENIX0NfSiAweGEwMDEKKyNkZWZpbmUgTUFTS19DX0ogIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0JFUVogMHhjMDAxCisjZGVmaW5lIE1BU0tfQ19CRVFaICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19CTkVaIDB4ZTAwMQorI2RlZmluZSBNQVNLX0NfQk5FWiAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfU0xMSSAweDIKKyNkZWZpbmUgTUFTS19DX1NMTEkgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0ZMRFNQIDB4MjAwMgorI2RlZmluZSBNQVNLX0NfRkxEU1AgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0xXU1AgMHg0MDAyCisjZGVmaW5lIE1BU0tfQ19MV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GTFdTUCAweDYwMDIKKyNkZWZpbmUgTUFTS19DX0ZMV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19NViAweDgwMDIKKyNkZWZpbmUgTUFTS19DX01WICAweGYwMDMKKyNkZWZpbmUgTUFUQ0hfQ19BREQgMHg5MDAyCisjZGVmaW5lIE1BU0tfQ19BREQgIDB4ZjAwMworI2RlZmluZSBNQVRDSF9DX0ZTRFNQIDB4YTAwMgorI2RlZmluZSBNQVNLX0NfRlNEU1AgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NXU1AgMHhjMDAyCisjZGVmaW5lIE1BU0tfQ19TV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GU1dTUCAweGUwMDIKKyNkZWZpbmUgTUFTS19DX0ZTV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMCAweGIKKyNkZWZpbmUgTUFTS19DVVNUT00wICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SUzEgMHgyMDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00wX1JTMV9SUzIgMHgzMDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SRCAweDQwMGIKKyNkZWZpbmUgTUFTS19DVVNUT00wX1JEICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SRF9SUzEgMHg2MDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SRF9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00wX1JEX1JTMV9SUzIgMHg3MDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SRF9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMSAweDJiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUlMxIDB4MjAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUlMxICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMV9SUzFfUlMyIDB4MzAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUlMxX1JTMiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUkQgMHg0MDJiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMV9SRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUkRfUlMxIDB4NjAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUkRfUlMxICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMV9SRF9SUzFfUlMyIDB4NzAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUkRfUlMxX1JTMiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTIgMHg1YgorI2RlZmluZSBNQVNLX0NVU1RPTTIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JTMSAweDIwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JTMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTJfUlMxX1JTMiAweDMwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JTMV9SUzIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JEIDB4NDA1YgorI2RlZmluZSBNQVNLX0NVU1RPTTJfUkQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JEX1JTMSAweDYwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JEX1JTMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTJfUkRfUlMxX1JTMiAweDcwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JEX1JTMV9SUzIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00zIDB4N2IKKyNkZWZpbmUgTUFTS19DVVNUT00zICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SUzEgMHgyMDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00zX1JTMV9SUzIgMHgzMDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SRCAweDQwN2IKKyNkZWZpbmUgTUFTS19DVVNUT00zX1JEICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SRF9SUzEgMHg2MDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SRF9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00zX1JEX1JTMV9SUzIgMHg3MDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SRF9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgQ1NSX0ZGTEFHUyAweDEKKyNkZWZpbmUgQ1NSX0ZSTSAweDIKKyNkZWZpbmUgQ1NSX0ZDU1IgMHgzCisjZGVmaW5lIENTUl9DWUNMRSAweGMwMAorI2RlZmluZSBDU1JfVElNRSAweGMwMQorI2RlZmluZSBDU1JfSU5TVFJFVCAweGMwMgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMgMHhjMDMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI0IDB4YzA0CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSNSAweGMwNQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjYgMHhjMDYKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI3IDB4YzA3CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSOCAweGMwOAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjkgMHhjMDkKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMCAweGMwYQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjExIDB4YzBiCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTIgMHhjMGMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMyAweGMwZAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE0IDB4YzBlCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTUgMHhjMGYKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNiAweGMxMAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE3IDB4YzExCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTggMHhjMTIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxOSAweGMxMworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIwIDB4YzE0CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjEgMHhjMTUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMiAweGMxNgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIzIDB4YzE3CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjQgMHhjMTgKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNSAweGMxOQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI2IDB4YzFhCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjcgMHhjMWIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyOCAweGMxYworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI5IDB4YzFkCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMzAgMHhjMWUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzMSAweGMxZgorI2RlZmluZSBDU1JfU1NUQVRVUyAweDEwMAorI2RlZmluZSBDU1JfU0lFIDB4MTA0CisjZGVmaW5lIENTUl9TVFZFQyAweDEwNQorI2RlZmluZSBDU1JfU0NPVU5URVJFTiAweDEwNgorI2RlZmluZSBDU1JfU1NDUkFUQ0ggMHgxNDAKKyNkZWZpbmUgQ1NSX1NFUEMgMHgxNDEKKyNkZWZpbmUgQ1NSX1NDQVVTRSAweDE0MgorI2RlZmluZSBDU1JfU0JBREFERFIgMHgxNDMKKyNkZWZpbmUgQ1NSX1NJUCAweDE0NAorI2RlZmluZSBDU1JfU1BUQlIgMHgxODAKKyNkZWZpbmUgQ1NSX01TVEFUVVMgMHgzMDAKKyNkZWZpbmUgQ1NSX01JU0EgMHgzMDEKKyNkZWZpbmUgQ1NSX01FREVMRUcgMHgzMDIKKyNkZWZpbmUgQ1NSX01JREVMRUcgMHgzMDMKKyNkZWZpbmUgQ1NSX01JRSAweDMwNAorI2RlZmluZSBDU1JfTVRWRUMgMHgzMDUKKyNkZWZpbmUgQ1NSX01DT1VOVEVSRU4gMHgzMDYKKyNkZWZpbmUgQ1NSX01TQ1JBVENIIDB4MzQwCisjZGVmaW5lIENTUl9NRVBDIDB4MzQxCisjZGVmaW5lIENTUl9NQ0FVU0UgMHgzNDIKKyNkZWZpbmUgQ1NSX01CQURBRERSIDB4MzQzCisjZGVmaW5lIENTUl9NSVAgMHgzNDQKKyNkZWZpbmUgQ1NSX1BNUENGRzAgMHgzYTAKKyNkZWZpbmUgQ1NSX1BNUENGRzEgMHgzYTEKKyNkZWZpbmUgQ1NSX1BNUENGRzIgMHgzYTIKKyNkZWZpbmUgQ1NSX1BNUENGRzMgMHgzYTMKKyNkZWZpbmUgQ1NSX1BNUEFERFIwIDB4M2IwCisjZGVmaW5lIENTUl9QTVBBRERSMSAweDNiMQorI2RlZmluZSBDU1JfUE1QQUREUjIgMHgzYjIKKyNkZWZpbmUgQ1NSX1BNUEFERFIzIDB4M2IzCisjZGVmaW5lIENTUl9QTVBBRERSNCAweDNiNAorI2RlZmluZSBDU1JfUE1QQUREUjUgMHgzYjUKKyNkZWZpbmUgQ1NSX1BNUEFERFI2IDB4M2I2CisjZGVmaW5lIENTUl9QTVBBRERSNyAweDNiNworI2RlZmluZSBDU1JfUE1QQUREUjggMHgzYjgKKyNkZWZpbmUgQ1NSX1BNUEFERFI5IDB4M2I5CisjZGVmaW5lIENTUl9QTVBBRERSMTAgMHgzYmEKKyNkZWZpbmUgQ1NSX1BNUEFERFIxMSAweDNiYgorI2RlZmluZSBDU1JfUE1QQUREUjEyIDB4M2JjCisjZGVmaW5lIENTUl9QTVBBRERSMTMgMHgzYmQKKyNkZWZpbmUgQ1NSX1BNUEFERFIxNCAweDNiZQorI2RlZmluZSBDU1JfUE1QQUREUjE1IDB4M2JmCisjZGVmaW5lIENTUl9UU0VMRUNUIDB4N2EwCisjZGVmaW5lIENTUl9UREFUQTEgMHg3YTEKKyNkZWZpbmUgQ1NSX1REQVRBMiAweDdhMgorI2RlZmluZSBDU1JfVERBVEEzIDB4N2EzCisjZGVmaW5lIENTUl9EQ1NSIDB4N2IwCisjZGVmaW5lIENTUl9EUEMgMHg3YjEKKyNkZWZpbmUgQ1NSX0RTQ1JBVENIIDB4N2IyCisjZGVmaW5lIENTUl9NQ1lDTEUgMHhiMDAKKyNkZWZpbmUgQ1NSX01JTlNUUkVUIDB4YjAyCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMgMHhiMDMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSNCAweGIwNAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVI1IDB4YjA1CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjYgMHhiMDYKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSNyAweGIwNworI2RlZmluZSBDU1JfTUhQTUNPVU5URVI4IDB4YjA4CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjkgMHhiMDkKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTAgMHhiMGEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTEgMHhiMGIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTIgMHhiMGMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTMgMHhiMGQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTQgMHhiMGUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTUgMHhiMGYKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTYgMHhiMTAKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTcgMHhiMTEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTggMHhiMTIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTkgMHhiMTMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjAgMHhiMTQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjEgMHhiMTUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjIgMHhiMTYKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjMgMHhiMTcKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjQgMHhiMTgKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjUgMHhiMTkKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjYgMHhiMWEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjcgMHhiMWIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjggMHhiMWMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjkgMHhiMWQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMzAgMHhiMWUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMzEgMHhiMWYKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDMgMHgzMjMKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDQgMHgzMjQKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDUgMHgzMjUKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDYgMHgzMjYKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDcgMHgzMjcKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDggMHgzMjgKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDkgMHgzMjkKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDEwIDB4MzJhCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxMSAweDMyYgorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTIgMHgzMmMKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDEzIDB4MzJkCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxNCAweDMyZQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTUgMHgzMmYKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDE2IDB4MzMwCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxNyAweDMzMQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTggMHgzMzIKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDE5IDB4MzMzCisjZGVmaW5lIENTUl9NSFBNRVZFTlQyMCAweDMzNAorI2RlZmluZSBDU1JfTUhQTUVWRU5UMjEgMHgzMzUKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDIyIDB4MzM2CisjZGVmaW5lIENTUl9NSFBNRVZFTlQyMyAweDMzNworI2RlZmluZSBDU1JfTUhQTUVWRU5UMjQgMHgzMzgKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDI1IDB4MzM5CisjZGVmaW5lIENTUl9NSFBNRVZFTlQyNiAweDMzYQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMjcgMHgzM2IKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDI4IDB4MzNjCisjZGVmaW5lIENTUl9NSFBNRVZFTlQyOSAweDMzZAorI2RlZmluZSBDU1JfTUhQTUVWRU5UMzAgMHgzM2UKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDMxIDB4MzNmCisjZGVmaW5lIENTUl9NVkVORE9SSUQgMHhmMTEKKyNkZWZpbmUgQ1NSX01BUkNISUQgMHhmMTIKKyNkZWZpbmUgQ1NSX01JTVBJRCAweGYxMworI2RlZmluZSBDU1JfTUhBUlRJRCAweGYxNAorI2RlZmluZSBDU1JfQ1lDTEVIIDB4YzgwCisjZGVmaW5lIENTUl9USU1FSCAweGM4MQorI2RlZmluZSBDU1JfSU5TVFJFVEggMHhjODIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzSCAweGM4MworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjRIIDB4Yzg0CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSNUggMHhjODUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI2SCAweGM4NgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjdIIDB4Yzg3CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSOEggMHhjODgKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI5SCAweGM4OQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEwSCAweGM4YQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjExSCAweGM4YgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEySCAweGM4YworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEzSCAweGM4ZAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE0SCAweGM4ZQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE1SCAweGM4ZgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE2SCAweGM5MAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE3SCAweGM5MQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE4SCAweGM5MgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE5SCAweGM5MworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIwSCAweGM5NAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIxSCAweGM5NQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIySCAweGM5NgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIzSCAweGM5NworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI0SCAweGM5OAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI1SCAweGM5OQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI2SCAweGM5YQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI3SCAweGM5YgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI4SCAweGM5YworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI5SCAweGM5ZAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMwSCAweGM5ZQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMxSCAweGM5ZgorI2RlZmluZSBDU1JfTUNZQ0xFSCAweGI4MAorI2RlZmluZSBDU1JfTUlOU1RSRVRIIDB4YjgyCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjNIIDB4YjgzCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjRIIDB4Yjg0CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjVIIDB4Yjg1CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjZIIDB4Yjg2CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjdIIDB4Yjg3CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjhIIDB4Yjg4CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjlIIDB4Yjg5CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEwSCAweGI4YQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxMUggMHhiOGIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTJIIDB4YjhjCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEzSCAweGI4ZAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxNEggMHhiOGUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTVIIDB4YjhmCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE2SCAweGI5MAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxN0ggMHhiOTEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMThIIDB4YjkyCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE5SCAweGI5MworI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyMEggMHhiOTQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjFIIDB4Yjk1CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIySCAweGI5NgorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyM0ggMHhiOTcKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjRIIDB4Yjk4CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI1SCAweGI5OQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyNkggMHhiOWEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjdIIDB4YjliCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI4SCAweGI5YworI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyOUggMHhiOWQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMzBIIDB4YjllCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMxSCAweGI5ZgorI2RlZmluZSBDQVVTRV9NSVNBTElHTkVEX0ZFVENIIDB4MAorI2RlZmluZSBDQVVTRV9GRVRDSF9BQ0NFU1MgMHgxCisjZGVmaW5lIENBVVNFX0lMTEVHQUxfSU5TVFJVQ1RJT04gMHgyCisjZGVmaW5lIENBVVNFX0JSRUFLUE9JTlQgMHgzCisjZGVmaW5lIENBVVNFX01JU0FMSUdORURfTE9BRCAweDQKKyNkZWZpbmUgQ0FVU0VfTE9BRF9BQ0NFU1MgMHg1CisjZGVmaW5lIENBVVNFX01JU0FMSUdORURfU1RPUkUgMHg2CisjZGVmaW5lIENBVVNFX1NUT1JFX0FDQ0VTUyAweDcKKyNkZWZpbmUgQ0FVU0VfVVNFUl9FQ0FMTCAweDgKKyNkZWZpbmUgQ0FVU0VfU1VQRVJWSVNPUl9FQ0FMTCAweDkKKyNkZWZpbmUgQ0FVU0VfSFlQRVJWSVNPUl9FQ0FMTCAweGEKKyNkZWZpbmUgQ0FVU0VfTUFDSElORV9FQ0FMTCAweGIKKyNkZWZpbmUgQ0FVU0VfRkVUQ0hfUEFHRV9GQVVMVCAweGMKKyNkZWZpbmUgQ0FVU0VfTE9BRF9QQUdFX0ZBVUxUIDB4ZAorI2RlZmluZSBDQVVTRV9TVE9SRV9QQUdFX0ZBVUxUIDB4ZgorI2VuZGlmCisjaWZkZWYgREVDTEFSRV9JTlNOCitERUNMQVJFX0lOU04oYmVxLCBNQVRDSF9CRVEsIE1BU0tfQkVRKQorREVDTEFSRV9JTlNOKGJuZSwgTUFUQ0hfQk5FLCBNQVNLX0JORSkKK0RFQ0xBUkVfSU5TTihibHQsIE1BVENIX0JMVCwgTUFTS19CTFQpCitERUNMQVJFX0lOU04oYmdlLCBNQVRDSF9CR0UsIE1BU0tfQkdFKQorREVDTEFSRV9JTlNOKGJsdHUsIE1BVENIX0JMVFUsIE1BU0tfQkxUVSkKK0RFQ0xBUkVfSU5TTihiZ2V1LCBNQVRDSF9CR0VVLCBNQVNLX0JHRVUpCitERUNMQVJFX0lOU04oamFsciwgTUFUQ0hfSkFMUiwgTUFTS19KQUxSKQorREVDTEFSRV9JTlNOKGphbCwgTUFUQ0hfSkFMLCBNQVNLX0pBTCkKK0RFQ0xBUkVfSU5TTihsdWksIE1BVENIX0xVSSwgTUFTS19MVUkpCitERUNMQVJFX0lOU04oYXVpcGMsIE1BVENIX0FVSVBDLCBNQVNLX0FVSVBDKQorREVDTEFSRV9JTlNOKGFkZGksIE1BVENIX0FEREksIE1BU0tfQURESSkKK0RFQ0xBUkVfSU5TTihzbGxpLCBNQVRDSF9TTExJLCBNQVNLX1NMTEkpCitERUNMQVJFX0lOU04oc2x0aSwgTUFUQ0hfU0xUSSwgTUFTS19TTFRJKQorREVDTEFSRV9JTlNOKHNsdGl1LCBNQVRDSF9TTFRJVSwgTUFTS19TTFRJVSkKK0RFQ0xBUkVfSU5TTih4b3JpLCBNQVRDSF9YT1JJLCBNQVNLX1hPUkkpCitERUNMQVJFX0lOU04oc3JsaSwgTUFUQ0hfU1JMSSwgTUFTS19TUkxJKQorREVDTEFSRV9JTlNOKHNyYWksIE1BVENIX1NSQUksIE1BU0tfU1JBSSkKK0RFQ0xBUkVfSU5TTihvcmksIE1BVENIX09SSSwgTUFTS19PUkkpCitERUNMQVJFX0lOU04oYW5kaSwgTUFUQ0hfQU5ESSwgTUFTS19BTkRJKQorREVDTEFSRV9JTlNOKGFkZCwgTUFUQ0hfQURELCBNQVNLX0FERCkKK0RFQ0xBUkVfSU5TTihzdWIsIE1BVENIX1NVQiwgTUFTS19TVUIpCitERUNMQVJFX0lOU04oc2xsLCBNQVRDSF9TTEwsIE1BU0tfU0xMKQorREVDTEFSRV9JTlNOKHNsdCwgTUFUQ0hfU0xULCBNQVNLX1NMVCkKK0RFQ0xBUkVfSU5TTihzbHR1LCBNQVRDSF9TTFRVLCBNQVNLX1NMVFUpCitERUNMQVJFX0lOU04oeG9yLCBNQVRDSF9YT1IsIE1BU0tfWE9SKQorREVDTEFSRV9JTlNOKHNybCwgTUFUQ0hfU1JMLCBNQVNLX1NSTCkKK0RFQ0xBUkVfSU5TTihzcmEsIE1BVENIX1NSQSwgTUFTS19TUkEpCitERUNMQVJFX0lOU04ob3IsIE1BVENIX09SLCBNQVNLX09SKQorREVDTEFSRV9JTlNOKGFuZCwgTUFUQ0hfQU5ELCBNQVNLX0FORCkKK0RFQ0xBUkVfSU5TTihhZGRpdywgTUFUQ0hfQURESVcsIE1BU0tfQURESVcpCitERUNMQVJFX0lOU04oc2xsaXcsIE1BVENIX1NMTElXLCBNQVNLX1NMTElXKQorREVDTEFSRV9JTlNOKHNybGl3LCBNQVRDSF9TUkxJVywgTUFTS19TUkxJVykKK0RFQ0xBUkVfSU5TTihzcmFpdywgTUFUQ0hfU1JBSVcsIE1BU0tfU1JBSVcpCitERUNMQVJFX0lOU04oYWRkdywgTUFUQ0hfQUREVywgTUFTS19BRERXKQorREVDTEFSRV9JTlNOKHN1YncsIE1BVENIX1NVQlcsIE1BU0tfU1VCVykKK0RFQ0xBUkVfSU5TTihzbGx3LCBNQVRDSF9TTExXLCBNQVNLX1NMTFcpCitERUNMQVJFX0lOU04oc3JsdywgTUFUQ0hfU1JMVywgTUFTS19TUkxXKQorREVDTEFSRV9JTlNOKHNyYXcsIE1BVENIX1NSQVcsIE1BU0tfU1JBVykKK0RFQ0xBUkVfSU5TTihsYiwgTUFUQ0hfTEIsIE1BU0tfTEIpCitERUNMQVJFX0lOU04obGgsIE1BVENIX0xILCBNQVNLX0xIKQorREVDTEFSRV9JTlNOKGx3LCBNQVRDSF9MVywgTUFTS19MVykKK0RFQ0xBUkVfSU5TTihsZCwgTUFUQ0hfTEQsIE1BU0tfTEQpCitERUNMQVJFX0lOU04obGJ1LCBNQVRDSF9MQlUsIE1BU0tfTEJVKQorREVDTEFSRV9JTlNOKGxodSwgTUFUQ0hfTEhVLCBNQVNLX0xIVSkKK0RFQ0xBUkVfSU5TTihsd3UsIE1BVENIX0xXVSwgTUFTS19MV1UpCitERUNMQVJFX0lOU04oc2IsIE1BVENIX1NCLCBNQVNLX1NCKQorREVDTEFSRV9JTlNOKHNoLCBNQVRDSF9TSCwgTUFTS19TSCkKK0RFQ0xBUkVfSU5TTihzdywgTUFUQ0hfU1csIE1BU0tfU1cpCitERUNMQVJFX0lOU04oc2QsIE1BVENIX1NELCBNQVNLX1NEKQorREVDTEFSRV9JTlNOKGZlbmNlLCBNQVRDSF9GRU5DRSwgTUFTS19GRU5DRSkKK0RFQ0xBUkVfSU5TTihmZW5jZV9pLCBNQVRDSF9GRU5DRV9JLCBNQVNLX0ZFTkNFX0kpCitERUNMQVJFX0lOU04obXVsLCBNQVRDSF9NVUwsIE1BU0tfTVVMKQorREVDTEFSRV9JTlNOKG11bGgsIE1BVENIX01VTEgsIE1BU0tfTVVMSCkKK0RFQ0xBUkVfSU5TTihtdWxoc3UsIE1BVENIX01VTEhTVSwgTUFTS19NVUxIU1UpCitERUNMQVJFX0lOU04obXVsaHUsIE1BVENIX01VTEhVLCBNQVNLX01VTEhVKQorREVDTEFSRV9JTlNOKGRpdiwgTUFUQ0hfRElWLCBNQVNLX0RJVikKK0RFQ0xBUkVfSU5TTihkaXZ1LCBNQVRDSF9ESVZVLCBNQVNLX0RJVlUpCitERUNMQVJFX0lOU04ocmVtLCBNQVRDSF9SRU0sIE1BU0tfUkVNKQorREVDTEFSRV9JTlNOKHJlbXUsIE1BVENIX1JFTVUsIE1BU0tfUkVNVSkKK0RFQ0xBUkVfSU5TTihtdWx3LCBNQVRDSF9NVUxXLCBNQVNLX01VTFcpCitERUNMQVJFX0lOU04oZGl2dywgTUFUQ0hfRElWVywgTUFTS19ESVZXKQorREVDTEFSRV9JTlNOKGRpdnV3LCBNQVRDSF9ESVZVVywgTUFTS19ESVZVVykKK0RFQ0xBUkVfSU5TTihyZW13LCBNQVRDSF9SRU1XLCBNQVNLX1JFTVcpCitERUNMQVJFX0lOU04ocmVtdXcsIE1BVENIX1JFTVVXLCBNQVNLX1JFTVVXKQorREVDTEFSRV9JTlNOKGFtb2FkZF93LCBNQVRDSF9BTU9BRERfVywgTUFTS19BTU9BRERfVykKK0RFQ0xBUkVfSU5TTihhbW94b3JfdywgTUFUQ0hfQU1PWE9SX1csIE1BU0tfQU1PWE9SX1cpCitERUNMQVJFX0lOU04oYW1vb3JfdywgTUFUQ0hfQU1PT1JfVywgTUFTS19BTU9PUl9XKQorREVDTEFSRV9JTlNOKGFtb2FuZF93LCBNQVRDSF9BTU9BTkRfVywgTUFTS19BTU9BTkRfVykKK0RFQ0xBUkVfSU5TTihhbW9taW5fdywgTUFUQ0hfQU1PTUlOX1csIE1BU0tfQU1PTUlOX1cpCitERUNMQVJFX0lOU04oYW1vbWF4X3csIE1BVENIX0FNT01BWF9XLCBNQVNLX0FNT01BWF9XKQorREVDTEFSRV9JTlNOKGFtb21pbnVfdywgTUFUQ0hfQU1PTUlOVV9XLCBNQVNLX0FNT01JTlVfVykKK0RFQ0xBUkVfSU5TTihhbW9tYXh1X3csIE1BVENIX0FNT01BWFVfVywgTUFTS19BTU9NQVhVX1cpCitERUNMQVJFX0lOU04oYW1vc3dhcF93LCBNQVRDSF9BTU9TV0FQX1csIE1BU0tfQU1PU1dBUF9XKQorREVDTEFSRV9JTlNOKGxyX3csIE1BVENIX0xSX1csIE1BU0tfTFJfVykKK0RFQ0xBUkVfSU5TTihzY193LCBNQVRDSF9TQ19XLCBNQVNLX1NDX1cpCitERUNMQVJFX0lOU04oYW1vYWRkX2QsIE1BVENIX0FNT0FERF9ELCBNQVNLX0FNT0FERF9EKQorREVDTEFSRV9JTlNOKGFtb3hvcl9kLCBNQVRDSF9BTU9YT1JfRCwgTUFTS19BTU9YT1JfRCkKK0RFQ0xBUkVfSU5TTihhbW9vcl9kLCBNQVRDSF9BTU9PUl9ELCBNQVNLX0FNT09SX0QpCitERUNMQVJFX0lOU04oYW1vYW5kX2QsIE1BVENIX0FNT0FORF9ELCBNQVNLX0FNT0FORF9EKQorREVDTEFSRV9JTlNOKGFtb21pbl9kLCBNQVRDSF9BTU9NSU5fRCwgTUFTS19BTU9NSU5fRCkKK0RFQ0xBUkVfSU5TTihhbW9tYXhfZCwgTUFUQ0hfQU1PTUFYX0QsIE1BU0tfQU1PTUFYX0QpCitERUNMQVJFX0lOU04oYW1vbWludV9kLCBNQVRDSF9BTU9NSU5VX0QsIE1BU0tfQU1PTUlOVV9EKQorREVDTEFSRV9JTlNOKGFtb21heHVfZCwgTUFUQ0hfQU1PTUFYVV9ELCBNQVNLX0FNT01BWFVfRCkKK0RFQ0xBUkVfSU5TTihhbW9zd2FwX2QsIE1BVENIX0FNT1NXQVBfRCwgTUFTS19BTU9TV0FQX0QpCitERUNMQVJFX0lOU04obHJfZCwgTUFUQ0hfTFJfRCwgTUFTS19MUl9EKQorREVDTEFSRV9JTlNOKHNjX2QsIE1BVENIX1NDX0QsIE1BU0tfU0NfRCkKK0RFQ0xBUkVfSU5TTihlY2FsbCwgTUFUQ0hfRUNBTEwsIE1BU0tfRUNBTEwpCitERUNMQVJFX0lOU04oZWJyZWFrLCBNQVRDSF9FQlJFQUssIE1BU0tfRUJSRUFLKQorREVDTEFSRV9JTlNOKHVyZXQsIE1BVENIX1VSRVQsIE1BU0tfVVJFVCkKK0RFQ0xBUkVfSU5TTihzcmV0LCBNQVRDSF9TUkVULCBNQVNLX1NSRVQpCitERUNMQVJFX0lOU04obXJldCwgTUFUQ0hfTVJFVCwgTUFTS19NUkVUKQorREVDTEFSRV9JTlNOKGRyZXQsIE1BVENIX0RSRVQsIE1BU0tfRFJFVCkKK0RFQ0xBUkVfSU5TTihzZmVuY2Vfdm1hLCBNQVRDSF9TRkVOQ0VfVk1BLCBNQVNLX1NGRU5DRV9WTUEpCitERUNMQVJFX0lOU04od2ZpLCBNQVRDSF9XRkksIE1BU0tfV0ZJKQorREVDTEFSRV9JTlNOKGNzcnJ3LCBNQVRDSF9DU1JSVywgTUFTS19DU1JSVykKK0RFQ0xBUkVfSU5TTihjc3JycywgTUFUQ0hfQ1NSUlMsIE1BU0tfQ1NSUlMpCitERUNMQVJFX0lOU04oY3NycmMsIE1BVENIX0NTUlJDLCBNQVNLX0NTUlJDKQorREVDTEFSRV9JTlNOKGNzcnJ3aSwgTUFUQ0hfQ1NSUldJLCBNQVNLX0NTUlJXSSkKK0RFQ0xBUkVfSU5TTihjc3Jyc2ksIE1BVENIX0NTUlJTSSwgTUFTS19DU1JSU0kpCitERUNMQVJFX0lOU04oY3NycmNpLCBNQVRDSF9DU1JSQ0ksIE1BU0tfQ1NSUkNJKQorREVDTEFSRV9JTlNOKGZhZGRfcywgTUFUQ0hfRkFERF9TLCBNQVNLX0ZBRERfUykKK0RFQ0xBUkVfSU5TTihmc3ViX3MsIE1BVENIX0ZTVUJfUywgTUFTS19GU1VCX1MpCitERUNMQVJFX0lOU04oZm11bF9zLCBNQVRDSF9GTVVMX1MsIE1BU0tfRk1VTF9TKQorREVDTEFSRV9JTlNOKGZkaXZfcywgTUFUQ0hfRkRJVl9TLCBNQVNLX0ZESVZfUykKK0RFQ0xBUkVfSU5TTihmc2dual9zLCBNQVRDSF9GU0dOSl9TLCBNQVNLX0ZTR05KX1MpCitERUNMQVJFX0lOU04oZnNnbmpuX3MsIE1BVENIX0ZTR05KTl9TLCBNQVNLX0ZTR05KTl9TKQorREVDTEFSRV9JTlNOKGZzZ25qeF9zLCBNQVRDSF9GU0dOSlhfUywgTUFTS19GU0dOSlhfUykKK0RFQ0xBUkVfSU5TTihmbWluX3MsIE1BVENIX0ZNSU5fUywgTUFTS19GTUlOX1MpCitERUNMQVJFX0lOU04oZm1heF9zLCBNQVRDSF9GTUFYX1MsIE1BU0tfRk1BWF9TKQorREVDTEFSRV9JTlNOKGZzcXJ0X3MsIE1BVENIX0ZTUVJUX1MsIE1BU0tfRlNRUlRfUykKK0RFQ0xBUkVfSU5TTihmYWRkX2QsIE1BVENIX0ZBRERfRCwgTUFTS19GQUREX0QpCitERUNMQVJFX0lOU04oZnN1Yl9kLCBNQVRDSF9GU1VCX0QsIE1BU0tfRlNVQl9EKQorREVDTEFSRV9JTlNOKGZtdWxfZCwgTUFUQ0hfRk1VTF9ELCBNQVNLX0ZNVUxfRCkKK0RFQ0xBUkVfSU5TTihmZGl2X2QsIE1BVENIX0ZESVZfRCwgTUFTS19GRElWX0QpCitERUNMQVJFX0lOU04oZnNnbmpfZCwgTUFUQ0hfRlNHTkpfRCwgTUFTS19GU0dOSl9EKQorREVDTEFSRV9JTlNOKGZzZ25qbl9kLCBNQVRDSF9GU0dOSk5fRCwgTUFTS19GU0dOSk5fRCkKK0RFQ0xBUkVfSU5TTihmc2duanhfZCwgTUFUQ0hfRlNHTkpYX0QsIE1BU0tfRlNHTkpYX0QpCitERUNMQVJFX0lOU04oZm1pbl9kLCBNQVRDSF9GTUlOX0QsIE1BU0tfRk1JTl9EKQorREVDTEFSRV9JTlNOKGZtYXhfZCwgTUFUQ0hfRk1BWF9ELCBNQVNLX0ZNQVhfRCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3NfZCwgTUFUQ0hfRkNWVF9TX0QsIE1BU0tfRkNWVF9TX0QpCitERUNMQVJFX0lOU04oZmN2dF9kX3MsIE1BVENIX0ZDVlRfRF9TLCBNQVNLX0ZDVlRfRF9TKQorREVDTEFSRV9JTlNOKGZzcXJ0X2QsIE1BVENIX0ZTUVJUX0QsIE1BU0tfRlNRUlRfRCkKK0RFQ0xBUkVfSU5TTihmYWRkX3EsIE1BVENIX0ZBRERfUSwgTUFTS19GQUREX1EpCitERUNMQVJFX0lOU04oZnN1Yl9xLCBNQVRDSF9GU1VCX1EsIE1BU0tfRlNVQl9RKQorREVDTEFSRV9JTlNOKGZtdWxfcSwgTUFUQ0hfRk1VTF9RLCBNQVNLX0ZNVUxfUSkKK0RFQ0xBUkVfSU5TTihmZGl2X3EsIE1BVENIX0ZESVZfUSwgTUFTS19GRElWX1EpCitERUNMQVJFX0lOU04oZnNnbmpfcSwgTUFUQ0hfRlNHTkpfUSwgTUFTS19GU0dOSl9RKQorREVDTEFSRV9JTlNOKGZzZ25qbl9xLCBNQVRDSF9GU0dOSk5fUSwgTUFTS19GU0dOSk5fUSkKK0RFQ0xBUkVfSU5TTihmc2duanhfcSwgTUFUQ0hfRlNHTkpYX1EsIE1BU0tfRlNHTkpYX1EpCitERUNMQVJFX0lOU04oZm1pbl9xLCBNQVRDSF9GTUlOX1EsIE1BU0tfRk1JTl9RKQorREVDTEFSRV9JTlNOKGZtYXhfcSwgTUFUQ0hfRk1BWF9RLCBNQVNLX0ZNQVhfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3NfcSwgTUFUQ0hfRkNWVF9TX1EsIE1BU0tfRkNWVF9TX1EpCitERUNMQVJFX0lOU04oZmN2dF9xX3MsIE1BVENIX0ZDVlRfUV9TLCBNQVNLX0ZDVlRfUV9TKQorREVDTEFSRV9JTlNOKGZjdnRfZF9xLCBNQVRDSF9GQ1ZUX0RfUSwgTUFTS19GQ1ZUX0RfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3FfZCwgTUFUQ0hfRkNWVF9RX0QsIE1BU0tfRkNWVF9RX0QpCitERUNMQVJFX0lOU04oZnNxcnRfcSwgTUFUQ0hfRlNRUlRfUSwgTUFTS19GU1FSVF9RKQorREVDTEFSRV9JTlNOKGZsZV9zLCBNQVRDSF9GTEVfUywgTUFTS19GTEVfUykKK0RFQ0xBUkVfSU5TTihmbHRfcywgTUFUQ0hfRkxUX1MsIE1BU0tfRkxUX1MpCitERUNMQVJFX0lOU04oZmVxX3MsIE1BVENIX0ZFUV9TLCBNQVNLX0ZFUV9TKQorREVDTEFSRV9JTlNOKGZsZV9kLCBNQVRDSF9GTEVfRCwgTUFTS19GTEVfRCkKK0RFQ0xBUkVfSU5TTihmbHRfZCwgTUFUQ0hfRkxUX0QsIE1BU0tfRkxUX0QpCitERUNMQVJFX0lOU04oZmVxX2QsIE1BVENIX0ZFUV9ELCBNQVNLX0ZFUV9EKQorREVDTEFSRV9JTlNOKGZsZV9xLCBNQVRDSF9GTEVfUSwgTUFTS19GTEVfUSkKK0RFQ0xBUkVfSU5TTihmbHRfcSwgTUFUQ0hfRkxUX1EsIE1BU0tfRkxUX1EpCitERUNMQVJFX0lOU04oZmVxX3EsIE1BVENIX0ZFUV9RLCBNQVNLX0ZFUV9RKQorREVDTEFSRV9JTlNOKGZjdnRfd19zLCBNQVRDSF9GQ1ZUX1dfUywgTUFTS19GQ1ZUX1dfUykKK0RFQ0xBUkVfSU5TTihmY3Z0X3d1X3MsIE1BVENIX0ZDVlRfV1VfUywgTUFTS19GQ1ZUX1dVX1MpCitERUNMQVJFX0lOU04oZmN2dF9sX3MsIE1BVENIX0ZDVlRfTF9TLCBNQVNLX0ZDVlRfTF9TKQorREVDTEFSRV9JTlNOKGZjdnRfbHVfcywgTUFUQ0hfRkNWVF9MVV9TLCBNQVNLX0ZDVlRfTFVfUykKK0RFQ0xBUkVfSU5TTihmbXZfeF93LCBNQVRDSF9GTVZfWF9XLCBNQVNLX0ZNVl9YX1cpCitERUNMQVJFX0lOU04oZmNsYXNzX3MsIE1BVENIX0ZDTEFTU19TLCBNQVNLX0ZDTEFTU19TKQorREVDTEFSRV9JTlNOKGZjdnRfd19kLCBNQVRDSF9GQ1ZUX1dfRCwgTUFTS19GQ1ZUX1dfRCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3d1X2QsIE1BVENIX0ZDVlRfV1VfRCwgTUFTS19GQ1ZUX1dVX0QpCitERUNMQVJFX0lOU04oZmN2dF9sX2QsIE1BVENIX0ZDVlRfTF9ELCBNQVNLX0ZDVlRfTF9EKQorREVDTEFSRV9JTlNOKGZjdnRfbHVfZCwgTUFUQ0hfRkNWVF9MVV9ELCBNQVNLX0ZDVlRfTFVfRCkKK0RFQ0xBUkVfSU5TTihmbXZfeF9kLCBNQVRDSF9GTVZfWF9ELCBNQVNLX0ZNVl9YX0QpCitERUNMQVJFX0lOU04oZmNsYXNzX2QsIE1BVENIX0ZDTEFTU19ELCBNQVNLX0ZDTEFTU19EKQorREVDTEFSRV9JTlNOKGZjdnRfd19xLCBNQVRDSF9GQ1ZUX1dfUSwgTUFTS19GQ1ZUX1dfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3d1X3EsIE1BVENIX0ZDVlRfV1VfUSwgTUFTS19GQ1ZUX1dVX1EpCitERUNMQVJFX0lOU04oZmN2dF9sX3EsIE1BVENIX0ZDVlRfTF9RLCBNQVNLX0ZDVlRfTF9RKQorREVDTEFSRV9JTlNOKGZjdnRfbHVfcSwgTUFUQ0hfRkNWVF9MVV9RLCBNQVNLX0ZDVlRfTFVfUSkKK0RFQ0xBUkVfSU5TTihmbXZfeF9xLCBNQVRDSF9GTVZfWF9RLCBNQVNLX0ZNVl9YX1EpCitERUNMQVJFX0lOU04oZmNsYXNzX3EsIE1BVENIX0ZDTEFTU19RLCBNQVNLX0ZDTEFTU19RKQorREVDTEFSRV9JTlNOKGZjdnRfc193LCBNQVRDSF9GQ1ZUX1NfVywgTUFTS19GQ1ZUX1NfVykKK0RFQ0xBUkVfSU5TTihmY3Z0X3Nfd3UsIE1BVENIX0ZDVlRfU19XVSwgTUFTS19GQ1ZUX1NfV1UpCitERUNMQVJFX0lOU04oZmN2dF9zX2wsIE1BVENIX0ZDVlRfU19MLCBNQVNLX0ZDVlRfU19MKQorREVDTEFSRV9JTlNOKGZjdnRfc19sdSwgTUFUQ0hfRkNWVF9TX0xVLCBNQVNLX0ZDVlRfU19MVSkKK0RFQ0xBUkVfSU5TTihmbXZfd194LCBNQVRDSF9GTVZfV19YLCBNQVNLX0ZNVl9XX1gpCitERUNMQVJFX0lOU04oZmN2dF9kX3csIE1BVENIX0ZDVlRfRF9XLCBNQVNLX0ZDVlRfRF9XKQorREVDTEFSRV9JTlNOKGZjdnRfZF93dSwgTUFUQ0hfRkNWVF9EX1dVLCBNQVNLX0ZDVlRfRF9XVSkKK0RFQ0xBUkVfSU5TTihmY3Z0X2RfbCwgTUFUQ0hfRkNWVF9EX0wsIE1BU0tfRkNWVF9EX0wpCitERUNMQVJFX0lOU04oZmN2dF9kX2x1LCBNQVRDSF9GQ1ZUX0RfTFUsIE1BU0tfRkNWVF9EX0xVKQorREVDTEFSRV9JTlNOKGZtdl9kX3gsIE1BVENIX0ZNVl9EX1gsIE1BU0tfRk1WX0RfWCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3FfdywgTUFUQ0hfRkNWVF9RX1csIE1BU0tfRkNWVF9RX1cpCitERUNMQVJFX0lOU04oZmN2dF9xX3d1LCBNQVRDSF9GQ1ZUX1FfV1UsIE1BU0tfRkNWVF9RX1dVKQorREVDTEFSRV9JTlNOKGZjdnRfcV9sLCBNQVRDSF9GQ1ZUX1FfTCwgTUFTS19GQ1ZUX1FfTCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3FfbHUsIE1BVENIX0ZDVlRfUV9MVSwgTUFTS19GQ1ZUX1FfTFUpCitERUNMQVJFX0lOU04oZm12X3FfeCwgTUFUQ0hfRk1WX1FfWCwgTUFTS19GTVZfUV9YKQorREVDTEFSRV9JTlNOKGZsdywgTUFUQ0hfRkxXLCBNQVNLX0ZMVykKK0RFQ0xBUkVfSU5TTihmbGQsIE1BVENIX0ZMRCwgTUFTS19GTEQpCitERUNMQVJFX0lOU04oZmxxLCBNQVRDSF9GTFEsIE1BU0tfRkxRKQorREVDTEFSRV9JTlNOKGZzdywgTUFUQ0hfRlNXLCBNQVNLX0ZTVykKK0RFQ0xBUkVfSU5TTihmc2QsIE1BVENIX0ZTRCwgTUFTS19GU0QpCitERUNMQVJFX0lOU04oZnNxLCBNQVRDSF9GU1EsIE1BU0tfRlNRKQorREVDTEFSRV9JTlNOKGZtYWRkX3MsIE1BVENIX0ZNQUREX1MsIE1BU0tfRk1BRERfUykKK0RFQ0xBUkVfSU5TTihmbXN1Yl9zLCBNQVRDSF9GTVNVQl9TLCBNQVNLX0ZNU1VCX1MpCitERUNMQVJFX0lOU04oZm5tc3ViX3MsIE1BVENIX0ZOTVNVQl9TLCBNQVNLX0ZOTVNVQl9TKQorREVDTEFSRV9JTlNOKGZubWFkZF9zLCBNQVRDSF9GTk1BRERfUywgTUFTS19GTk1BRERfUykKK0RFQ0xBUkVfSU5TTihmbWFkZF9kLCBNQVRDSF9GTUFERF9ELCBNQVNLX0ZNQUREX0QpCitERUNMQVJFX0lOU04oZm1zdWJfZCwgTUFUQ0hfRk1TVUJfRCwgTUFTS19GTVNVQl9EKQorREVDTEFSRV9JTlNOKGZubXN1Yl9kLCBNQVRDSF9GTk1TVUJfRCwgTUFTS19GTk1TVUJfRCkKK0RFQ0xBUkVfSU5TTihmbm1hZGRfZCwgTUFUQ0hfRk5NQUREX0QsIE1BU0tfRk5NQUREX0QpCitERUNMQVJFX0lOU04oZm1hZGRfcSwgTUFUQ0hfRk1BRERfUSwgTUFTS19GTUFERF9RKQorREVDTEFSRV9JTlNOKGZtc3ViX3EsIE1BVENIX0ZNU1VCX1EsIE1BU0tfRk1TVUJfUSkKK0RFQ0xBUkVfSU5TTihmbm1zdWJfcSwgTUFUQ0hfRk5NU1VCX1EsIE1BU0tfRk5NU1VCX1EpCitERUNMQVJFX0lOU04oZm5tYWRkX3EsIE1BVENIX0ZOTUFERF9RLCBNQVNLX0ZOTUFERF9RKQorREVDTEFSRV9JTlNOKGNfbm9wLCBNQVRDSF9DX05PUCwgTUFTS19DX05PUCkKK0RFQ0xBUkVfSU5TTihjX2FkZGkxNnNwLCBNQVRDSF9DX0FEREkxNlNQLCBNQVNLX0NfQURESTE2U1ApCitERUNMQVJFX0lOU04oY19qciwgTUFUQ0hfQ19KUiwgTUFTS19DX0pSKQorREVDTEFSRV9JTlNOKGNfamFsciwgTUFUQ0hfQ19KQUxSLCBNQVNLX0NfSkFMUikKK0RFQ0xBUkVfSU5TTihjX2VicmVhaywgTUFUQ0hfQ19FQlJFQUssIE1BU0tfQ19FQlJFQUspCitERUNMQVJFX0lOU04oY19sZCwgTUFUQ0hfQ19MRCwgTUFTS19DX0xEKQorREVDTEFSRV9JTlNOKGNfc2QsIE1BVENIX0NfU0QsIE1BU0tfQ19TRCkKK0RFQ0xBUkVfSU5TTihjX2FkZGl3LCBNQVRDSF9DX0FERElXLCBNQVNLX0NfQURESVcpCitERUNMQVJFX0lOU04oY19sZHNwLCBNQVRDSF9DX0xEU1AsIE1BU0tfQ19MRFNQKQorREVDTEFSRV9JTlNOKGNfc2RzcCwgTUFUQ0hfQ19TRFNQLCBNQVNLX0NfU0RTUCkKK0RFQ0xBUkVfSU5TTihjX2FkZGk0c3BuLCBNQVRDSF9DX0FEREk0U1BOLCBNQVNLX0NfQURESTRTUE4pCitERUNMQVJFX0lOU04oY19mbGQsIE1BVENIX0NfRkxELCBNQVNLX0NfRkxEKQorREVDTEFSRV9JTlNOKGNfbHcsIE1BVENIX0NfTFcsIE1BU0tfQ19MVykKK0RFQ0xBUkVfSU5TTihjX2ZsdywgTUFUQ0hfQ19GTFcsIE1BU0tfQ19GTFcpCitERUNMQVJFX0lOU04oY19mc2QsIE1BVENIX0NfRlNELCBNQVNLX0NfRlNEKQorREVDTEFSRV9JTlNOKGNfc3csIE1BVENIX0NfU1csIE1BU0tfQ19TVykKK0RFQ0xBUkVfSU5TTihjX2ZzdywgTUFUQ0hfQ19GU1csIE1BU0tfQ19GU1cpCitERUNMQVJFX0lOU04oY19hZGRpLCBNQVRDSF9DX0FEREksIE1BU0tfQ19BRERJKQorREVDTEFSRV9JTlNOKGNfamFsLCBNQVRDSF9DX0pBTCwgTUFTS19DX0pBTCkKK0RFQ0xBUkVfSU5TTihjX2xpLCBNQVRDSF9DX0xJLCBNQVNLX0NfTEkpCitERUNMQVJFX0lOU04oY19sdWksIE1BVENIX0NfTFVJLCBNQVNLX0NfTFVJKQorREVDTEFSRV9JTlNOKGNfc3JsaSwgTUFUQ0hfQ19TUkxJLCBNQVNLX0NfU1JMSSkKK0RFQ0xBUkVfSU5TTihjX3NyYWksIE1BVENIX0NfU1JBSSwgTUFTS19DX1NSQUkpCitERUNMQVJFX0lOU04oY19hbmRpLCBNQVRDSF9DX0FOREksIE1BU0tfQ19BTkRJKQorREVDTEFSRV9JTlNOKGNfc3ViLCBNQVRDSF9DX1NVQiwgTUFTS19DX1NVQikKK0RFQ0xBUkVfSU5TTihjX3hvciwgTUFUQ0hfQ19YT1IsIE1BU0tfQ19YT1IpCitERUNMQVJFX0lOU04oY19vciwgTUFUQ0hfQ19PUiwgTUFTS19DX09SKQorREVDTEFSRV9JTlNOKGNfYW5kLCBNQVRDSF9DX0FORCwgTUFTS19DX0FORCkKK0RFQ0xBUkVfSU5TTihjX3N1YncsIE1BVENIX0NfU1VCVywgTUFTS19DX1NVQlcpCitERUNMQVJFX0lOU04oY19hZGR3LCBNQVRDSF9DX0FERFcsIE1BU0tfQ19BRERXKQorREVDTEFSRV9JTlNOKGNfaiwgTUFUQ0hfQ19KLCBNQVNLX0NfSikKK0RFQ0xBUkVfSU5TTihjX2JlcXosIE1BVENIX0NfQkVRWiwgTUFTS19DX0JFUVopCitERUNMQVJFX0lOU04oY19ibmV6LCBNQVRDSF9DX0JORVosIE1BU0tfQ19CTkVaKQorREVDTEFSRV9JTlNOKGNfc2xsaSwgTUFUQ0hfQ19TTExJLCBNQVNLX0NfU0xMSSkKK0RFQ0xBUkVfSU5TTihjX2ZsZHNwLCBNQVRDSF9DX0ZMRFNQLCBNQVNLX0NfRkxEU1ApCitERUNMQVJFX0lOU04oY19sd3NwLCBNQVRDSF9DX0xXU1AsIE1BU0tfQ19MV1NQKQorREVDTEFSRV9JTlNOKGNfZmx3c3AsIE1BVENIX0NfRkxXU1AsIE1BU0tfQ19GTFdTUCkKK0RFQ0xBUkVfSU5TTihjX212LCBNQVRDSF9DX01WLCBNQVNLX0NfTVYpCitERUNMQVJFX0lOU04oY19hZGQsIE1BVENIX0NfQURELCBNQVNLX0NfQUREKQorREVDTEFSRV9JTlNOKGNfZnNkc3AsIE1BVENIX0NfRlNEU1AsIE1BU0tfQ19GU0RTUCkKK0RFQ0xBUkVfSU5TTihjX3N3c3AsIE1BVENIX0NfU1dTUCwgTUFTS19DX1NXU1ApCitERUNMQVJFX0lOU04oY19mc3dzcCwgTUFUQ0hfQ19GU1dTUCwgTUFTS19DX0ZTV1NQKQorREVDTEFSRV9JTlNOKGN1c3RvbTAsIE1BVENIX0NVU1RPTTAsIE1BU0tfQ1VTVE9NMCkKK0RFQ0xBUkVfSU5TTihjdXN0b20wX3JzMSwgTUFUQ0hfQ1VTVE9NMF9SUzEsIE1BU0tfQ1VTVE9NMF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMF9yczFfcnMyLCBNQVRDSF9DVVNUT00wX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTBfcmQsIE1BVENIX0NVU1RPTTBfUkQsIE1BU0tfQ1VTVE9NMF9SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20wX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NMF9SRF9SUzEsIE1BU0tfQ1VTVE9NMF9SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMF9yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00wX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMF9SRF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTEsIE1BVENIX0NVU1RPTTEsIE1BU0tfQ1VTVE9NMSkKK0RFQ0xBUkVfSU5TTihjdXN0b20xX3JzMSwgTUFUQ0hfQ1VTVE9NMV9SUzEsIE1BU0tfQ1VTVE9NMV9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMV9yczFfcnMyLCBNQVRDSF9DVVNUT00xX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMV9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTFfcmQsIE1BVENIX0NVU1RPTTFfUkQsIE1BU0tfQ1VTVE9NMV9SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20xX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NMV9SRF9SUzEsIE1BU0tfQ1VTVE9NMV9SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMV9yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00xX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMV9SRF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTIsIE1BVENIX0NVU1RPTTIsIE1BU0tfQ1VTVE9NMikKK0RFQ0xBUkVfSU5TTihjdXN0b20yX3JzMSwgTUFUQ0hfQ1VTVE9NMl9SUzEsIE1BU0tfQ1VTVE9NMl9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMl9yczFfcnMyLCBNQVRDSF9DVVNUT00yX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMl9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTJfcmQsIE1BVENIX0NVU1RPTTJfUkQsIE1BU0tfQ1VTVE9NMl9SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20yX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NMl9SRF9SUzEsIE1BU0tfQ1VTVE9NMl9SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMl9yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00yX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMl9SRF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTMsIE1BVENIX0NVU1RPTTMsIE1BU0tfQ1VTVE9NMykKK0RFQ0xBUkVfSU5TTihjdXN0b20zX3JzMSwgTUFUQ0hfQ1VTVE9NM19SUzEsIE1BU0tfQ1VTVE9NM19SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tM19yczFfcnMyLCBNQVRDSF9DVVNUT00zX1JTMV9SUzIsIE1BU0tfQ1VTVE9NM19SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTNfcmQsIE1BVENIX0NVU1RPTTNfUkQsIE1BU0tfQ1VTVE9NM19SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20zX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NM19SRF9SUzEsIE1BU0tfQ1VTVE9NM19SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tM19yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00zX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NM19SRF9SUzFfUlMyKQorI2VuZGlmCisjaWZkZWYgREVDTEFSRV9DU1IKK0RFQ0xBUkVfQ1NSKGZmbGFncywgQ1NSX0ZGTEFHUykKK0RFQ0xBUkVfQ1NSKGZybSwgQ1NSX0ZSTSkKK0RFQ0xBUkVfQ1NSKGZjc3IsIENTUl9GQ1NSKQorREVDTEFSRV9DU1IoY3ljbGUsIENTUl9DWUNMRSkKK0RFQ0xBUkVfQ1NSKHRpbWUsIENTUl9USU1FKQorREVDTEFSRV9DU1IoaW5zdHJldCwgQ1NSX0lOU1RSRVQpCitERUNMQVJFX0NTUihocG1jb3VudGVyMywgQ1NSX0hQTUNPVU5URVIzKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjQsIENTUl9IUE1DT1VOVEVSNCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI1LCBDU1JfSFBNQ09VTlRFUjUpCitERUNMQVJFX0NTUihocG1jb3VudGVyNiwgQ1NSX0hQTUNPVU5URVI2KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjcsIENTUl9IUE1DT1VOVEVSNykKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI4LCBDU1JfSFBNQ09VTlRFUjgpCitERUNMQVJFX0NTUihocG1jb3VudGVyOSwgQ1NSX0hQTUNPVU5URVI5KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEwLCBDU1JfSFBNQ09VTlRFUjEwKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjExLCBDU1JfSFBNQ09VTlRFUjExKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEyLCBDU1JfSFBNQ09VTlRFUjEyKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEzLCBDU1JfSFBNQ09VTlRFUjEzKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE0LCBDU1JfSFBNQ09VTlRFUjE0KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE1LCBDU1JfSFBNQ09VTlRFUjE1KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE2LCBDU1JfSFBNQ09VTlRFUjE2KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE3LCBDU1JfSFBNQ09VTlRFUjE3KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE4LCBDU1JfSFBNQ09VTlRFUjE4KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE5LCBDU1JfSFBNQ09VTlRFUjE5KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIwLCBDU1JfSFBNQ09VTlRFUjIwKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIxLCBDU1JfSFBNQ09VTlRFUjIxKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIyLCBDU1JfSFBNQ09VTlRFUjIyKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIzLCBDU1JfSFBNQ09VTlRFUjIzKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI0LCBDU1JfSFBNQ09VTlRFUjI0KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI1LCBDU1JfSFBNQ09VTlRFUjI1KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI2LCBDU1JfSFBNQ09VTlRFUjI2KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI3LCBDU1JfSFBNQ09VTlRFUjI3KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI4LCBDU1JfSFBNQ09VTlRFUjI4KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI5LCBDU1JfSFBNQ09VTlRFUjI5KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjMwLCBDU1JfSFBNQ09VTlRFUjMwKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjMxLCBDU1JfSFBNQ09VTlRFUjMxKQorREVDTEFSRV9DU1Ioc3N0YXR1cywgQ1NSX1NTVEFUVVMpCitERUNMQVJFX0NTUihzaWUsIENTUl9TSUUpCitERUNMQVJFX0NTUihzdHZlYywgQ1NSX1NUVkVDKQorREVDTEFSRV9DU1Ioc2NvdW50ZXJlbiwgQ1NSX1NDT1VOVEVSRU4pCitERUNMQVJFX0NTUihzc2NyYXRjaCwgQ1NSX1NTQ1JBVENIKQorREVDTEFSRV9DU1Ioc2VwYywgQ1NSX1NFUEMpCitERUNMQVJFX0NTUihzY2F1c2UsIENTUl9TQ0FVU0UpCitERUNMQVJFX0NTUihzYmFkYWRkciwgQ1NSX1NCQURBRERSKQorREVDTEFSRV9DU1Ioc2lwLCBDU1JfU0lQKQorREVDTEFSRV9DU1Ioc3B0YnIsIENTUl9TUFRCUikKK0RFQ0xBUkVfQ1NSKG1zdGF0dXMsIENTUl9NU1RBVFVTKQorREVDTEFSRV9DU1IobWlzYSwgQ1NSX01JU0EpCitERUNMQVJFX0NTUihtZWRlbGVnLCBDU1JfTUVERUxFRykKK0RFQ0xBUkVfQ1NSKG1pZGVsZWcsIENTUl9NSURFTEVHKQorREVDTEFSRV9DU1IobWllLCBDU1JfTUlFKQorREVDTEFSRV9DU1IobXR2ZWMsIENTUl9NVFZFQykKK0RFQ0xBUkVfQ1NSKG1jb3VudGVyZW4sIENTUl9NQ09VTlRFUkVOKQorREVDTEFSRV9DU1IobXNjcmF0Y2gsIENTUl9NU0NSQVRDSCkKK0RFQ0xBUkVfQ1NSKG1lcGMsIENTUl9NRVBDKQorREVDTEFSRV9DU1IobWNhdXNlLCBDU1JfTUNBVVNFKQorREVDTEFSRV9DU1IobWJhZGFkZHIsIENTUl9NQkFEQUREUikKK0RFQ0xBUkVfQ1NSKG1pcCwgQ1NSX01JUCkKK0RFQ0xBUkVfQ1NSKHBtcGNmZzAsIENTUl9QTVBDRkcwKQorREVDTEFSRV9DU1IocG1wY2ZnMSwgQ1NSX1BNUENGRzEpCitERUNMQVJFX0NTUihwbXBjZmcyLCBDU1JfUE1QQ0ZHMikKK0RFQ0xBUkVfQ1NSKHBtcGNmZzMsIENTUl9QTVBDRkczKQorREVDTEFSRV9DU1IocG1wYWRkcjAsIENTUl9QTVBBRERSMCkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxLCBDU1JfUE1QQUREUjEpCitERUNMQVJFX0NTUihwbXBhZGRyMiwgQ1NSX1BNUEFERFIyKQorREVDTEFSRV9DU1IocG1wYWRkcjMsIENTUl9QTVBBRERSMykKK0RFQ0xBUkVfQ1NSKHBtcGFkZHI0LCBDU1JfUE1QQUREUjQpCitERUNMQVJFX0NTUihwbXBhZGRyNSwgQ1NSX1BNUEFERFI1KQorREVDTEFSRV9DU1IocG1wYWRkcjYsIENTUl9QTVBBRERSNikKK0RFQ0xBUkVfQ1NSKHBtcGFkZHI3LCBDU1JfUE1QQUREUjcpCitERUNMQVJFX0NTUihwbXBhZGRyOCwgQ1NSX1BNUEFERFI4KQorREVDTEFSRV9DU1IocG1wYWRkcjksIENTUl9QTVBBRERSOSkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMCwgQ1NSX1BNUEFERFIxMCkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMSwgQ1NSX1BNUEFERFIxMSkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMiwgQ1NSX1BNUEFERFIxMikKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMywgQ1NSX1BNUEFERFIxMykKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxNCwgQ1NSX1BNUEFERFIxNCkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxNSwgQ1NSX1BNUEFERFIxNSkKK0RFQ0xBUkVfQ1NSKHRzZWxlY3QsIENTUl9UU0VMRUNUKQorREVDTEFSRV9DU1IodGRhdGExLCBDU1JfVERBVEExKQorREVDTEFSRV9DU1IodGRhdGEyLCBDU1JfVERBVEEyKQorREVDTEFSRV9DU1IodGRhdGEzLCBDU1JfVERBVEEzKQorREVDTEFSRV9DU1IoZGNzciwgQ1NSX0RDU1IpCitERUNMQVJFX0NTUihkcGMsIENTUl9EUEMpCitERUNMQVJFX0NTUihkc2NyYXRjaCwgQ1NSX0RTQ1JBVENIKQorREVDTEFSRV9DU1IobWN5Y2xlLCBDU1JfTUNZQ0xFKQorREVDTEFSRV9DU1IobWluc3RyZXQsIENTUl9NSU5TVFJFVCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMywgQ1NSX01IUE1DT1VOVEVSMykKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNCwgQ1NSX01IUE1DT1VOVEVSNCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNSwgQ1NSX01IUE1DT1VOVEVSNSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNiwgQ1NSX01IUE1DT1VOVEVSNikKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNywgQ1NSX01IUE1DT1VOVEVSNykKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyOCwgQ1NSX01IUE1DT1VOVEVSOCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyOSwgQ1NSX01IUE1DT1VOVEVSOSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTAsIENTUl9NSFBNQ09VTlRFUjEwKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxMSwgQ1NSX01IUE1DT1VOVEVSMTEpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjEyLCBDU1JfTUhQTUNPVU5URVIxMikKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTMsIENTUl9NSFBNQ09VTlRFUjEzKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNCwgQ1NSX01IUE1DT1VOVEVSMTQpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE1LCBDU1JfTUhQTUNPVU5URVIxNSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTYsIENTUl9NSFBNQ09VTlRFUjE2KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNywgQ1NSX01IUE1DT1VOVEVSMTcpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE4LCBDU1JfTUhQTUNPVU5URVIxOCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTksIENTUl9NSFBNQ09VTlRFUjE5KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMCwgQ1NSX01IUE1DT1VOVEVSMjApCitERUNMQVJFX0NTUihtaHBtY291bnRlcjIxLCBDU1JfTUhQTUNPVU5URVIyMSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjIsIENTUl9NSFBNQ09VTlRFUjIyKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMywgQ1NSX01IUE1DT1VOVEVSMjMpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI0LCBDU1JfTUhQTUNPVU5URVIyNCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjUsIENTUl9NSFBNQ09VTlRFUjI1KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNiwgQ1NSX01IUE1DT1VOVEVSMjYpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI3LCBDU1JfTUhQTUNPVU5URVIyNykKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjgsIENTUl9NSFBNQ09VTlRFUjI4KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyOSwgQ1NSX01IUE1DT1VOVEVSMjkpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjMwLCBDU1JfTUhQTUNPVU5URVIzMCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMzEsIENTUl9NSFBNQ09VTlRFUjMxKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MywgQ1NSX01IUE1FVkVOVDMpCitERUNMQVJFX0NTUihtaHBtZXZlbnQ0LCBDU1JfTUhQTUVWRU5UNCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDUsIENTUl9NSFBNRVZFTlQ1KQorREVDTEFSRV9DU1IobWhwbWV2ZW50NiwgQ1NSX01IUE1FVkVOVDYpCitERUNMQVJFX0NTUihtaHBtZXZlbnQ3LCBDU1JfTUhQTUVWRU5UNykKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDgsIENTUl9NSFBNRVZFTlQ4KQorREVDTEFSRV9DU1IobWhwbWV2ZW50OSwgQ1NSX01IUE1FVkVOVDkpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxMCwgQ1NSX01IUE1FVkVOVDEwKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTEsIENTUl9NSFBNRVZFTlQxMSkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDEyLCBDU1JfTUhQTUVWRU5UMTIpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxMywgQ1NSX01IUE1FVkVOVDEzKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTQsIENTUl9NSFBNRVZFTlQxNCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDE1LCBDU1JfTUhQTUVWRU5UMTUpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxNiwgQ1NSX01IUE1FVkVOVDE2KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTcsIENTUl9NSFBNRVZFTlQxNykKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDE4LCBDU1JfTUhQTUVWRU5UMTgpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxOSwgQ1NSX01IUE1FVkVOVDE5KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjAsIENTUl9NSFBNRVZFTlQyMCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDIxLCBDU1JfTUhQTUVWRU5UMjEpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyMiwgQ1NSX01IUE1FVkVOVDIyKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjMsIENTUl9NSFBNRVZFTlQyMykKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDI0LCBDU1JfTUhQTUVWRU5UMjQpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyNSwgQ1NSX01IUE1FVkVOVDI1KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjYsIENTUl9NSFBNRVZFTlQyNikKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDI3LCBDU1JfTUhQTUVWRU5UMjcpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyOCwgQ1NSX01IUE1FVkVOVDI4KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjksIENTUl9NSFBNRVZFTlQyOSkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDMwLCBDU1JfTUhQTUVWRU5UMzApCitERUNMQVJFX0NTUihtaHBtZXZlbnQzMSwgQ1NSX01IUE1FVkVOVDMxKQorREVDTEFSRV9DU1IobXZlbmRvcmlkLCBDU1JfTVZFTkRPUklEKQorREVDTEFSRV9DU1IobWFyY2hpZCwgQ1NSX01BUkNISUQpCitERUNMQVJFX0NTUihtaW1waWQsIENTUl9NSU1QSUQpCitERUNMQVJFX0NTUihtaGFydGlkLCBDU1JfTUhBUlRJRCkKK0RFQ0xBUkVfQ1NSKGN5Y2xlaCwgQ1NSX0NZQ0xFSCkKK0RFQ0xBUkVfQ1NSKHRpbWVoLCBDU1JfVElNRUgpCitERUNMQVJFX0NTUihpbnN0cmV0aCwgQ1NSX0lOU1RSRVRIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjNoLCBDU1JfSFBNQ09VTlRFUjNIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjRoLCBDU1JfSFBNQ09VTlRFUjRIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjVoLCBDU1JfSFBNQ09VTlRFUjVIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjZoLCBDU1JfSFBNQ09VTlRFUjZIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjdoLCBDU1JfSFBNQ09VTlRFUjdIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjhoLCBDU1JfSFBNQ09VTlRFUjhIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjloLCBDU1JfSFBNQ09VTlRFUjlIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEwaCwgQ1NSX0hQTUNPVU5URVIxMEgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTFoLCBDU1JfSFBNQ09VTlRFUjExSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMmgsIENTUl9IUE1DT1VOVEVSMTJIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEzaCwgQ1NSX0hQTUNPVU5URVIxM0gpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTRoLCBDU1JfSFBNQ09VTlRFUjE0SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNWgsIENTUl9IUE1DT1VOVEVSMTVIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE2aCwgQ1NSX0hQTUNPVU5URVIxNkgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTdoLCBDU1JfSFBNQ09VTlRFUjE3SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxOGgsIENTUl9IUE1DT1VOVEVSMThIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE5aCwgQ1NSX0hQTUNPVU5URVIxOUgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjBoLCBDU1JfSFBNQ09VTlRFUjIwSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMWgsIENTUl9IUE1DT1VOVEVSMjFIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIyaCwgQ1NSX0hQTUNPVU5URVIyMkgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjNoLCBDU1JfSFBNQ09VTlRFUjIzSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNGgsIENTUl9IUE1DT1VOVEVSMjRIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI1aCwgQ1NSX0hQTUNPVU5URVIyNUgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjZoLCBDU1JfSFBNQ09VTlRFUjI2SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyN2gsIENTUl9IUE1DT1VOVEVSMjdIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI4aCwgQ1NSX0hQTUNPVU5URVIyOEgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjloLCBDU1JfSFBNQ09VTlRFUjI5SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzMGgsIENTUl9IUE1DT1VOVEVSMzBIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjMxaCwgQ1NSX0hQTUNPVU5URVIzMUgpCitERUNMQVJFX0NTUihtY3ljbGVoLCBDU1JfTUNZQ0xFSCkKK0RFQ0xBUkVfQ1NSKG1pbnN0cmV0aCwgQ1NSX01JTlNUUkVUSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyM2gsIENTUl9NSFBNQ09VTlRFUjNIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXI0aCwgQ1NSX01IUE1DT1VOVEVSNEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjVoLCBDU1JfTUhQTUNPVU5URVI1SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNmgsIENTUl9NSFBNQ09VTlRFUjZIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXI3aCwgQ1NSX01IUE1DT1VOVEVSN0gpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjhoLCBDU1JfTUhQTUNPVU5URVI4SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyOWgsIENTUl9NSFBNQ09VTlRFUjlIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxMGgsIENTUl9NSFBNQ09VTlRFUjEwSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTFoLCBDU1JfTUhQTUNPVU5URVIxMUgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjEyaCwgQ1NSX01IUE1DT1VOVEVSMTJIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxM2gsIENTUl9NSFBNQ09VTlRFUjEzSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTRoLCBDU1JfTUhQTUNPVU5URVIxNEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE1aCwgQ1NSX01IUE1DT1VOVEVSMTVIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNmgsIENTUl9NSFBNQ09VTlRFUjE2SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTdoLCBDU1JfTUhQTUNPVU5URVIxN0gpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE4aCwgQ1NSX01IUE1DT1VOVEVSMThIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxOWgsIENTUl9NSFBNQ09VTlRFUjE5SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjBoLCBDU1JfTUhQTUNPVU5URVIyMEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjIxaCwgQ1NSX01IUE1DT1VOVEVSMjFIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMmgsIENTUl9NSFBNQ09VTlRFUjIySCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjNoLCBDU1JfTUhQTUNPVU5URVIyM0gpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI0aCwgQ1NSX01IUE1DT1VOVEVSMjRIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNWgsIENTUl9NSFBNQ09VTlRFUjI1SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjZoLCBDU1JfTUhQTUNPVU5URVIyNkgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI3aCwgQ1NSX01IUE1DT1VOVEVSMjdIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyOGgsIENTUl9NSFBNQ09VTlRFUjI4SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjloLCBDU1JfTUhQTUNPVU5URVIyOUgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjMwaCwgQ1NSX01IUE1DT1VOVEVSMzBIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIzMWgsIENTUl9NSFBNQ09VTlRFUjMxSCkKKyNlbmRpZgorI2lmZGVmIERFQ0xBUkVfQ0FVU0UKK0RFQ0xBUkVfQ0FVU0UoIm1pc2FsaWduZWQgZmV0Y2giLCBDQVVTRV9NSVNBTElHTkVEX0ZFVENIKQorREVDTEFSRV9DQVVTRSgiZmV0Y2ggYWNjZXNzIiwgQ0FVU0VfRkVUQ0hfQUNDRVNTKQorREVDTEFSRV9DQVVTRSgiaWxsZWdhbCBpbnN0cnVjdGlvbiIsIENBVVNFX0lMTEVHQUxfSU5TVFJVQ1RJT04pCitERUNMQVJFX0NBVVNFKCJicmVha3BvaW50IiwgQ0FVU0VfQlJFQUtQT0lOVCkKK0RFQ0xBUkVfQ0FVU0UoIm1pc2FsaWduZWQgbG9hZCIsIENBVVNFX01JU0FMSUdORURfTE9BRCkKK0RFQ0xBUkVfQ0FVU0UoImxvYWQgYWNjZXNzIiwgQ0FVU0VfTE9BRF9BQ0NFU1MpCitERUNMQVJFX0NBVVNFKCJtaXNhbGlnbmVkIHN0b3JlIiwgQ0FVU0VfTUlTQUxJR05FRF9TVE9SRSkKK0RFQ0xBUkVfQ0FVU0UoInN0b3JlIGFjY2VzcyIsIENBVVNFX1NUT1JFX0FDQ0VTUykKK0RFQ0xBUkVfQ0FVU0UoInVzZXJfZWNhbGwiLCBDQVVTRV9VU0VSX0VDQUxMKQorREVDTEFSRV9DQVVTRSgic3VwZXJ2aXNvcl9lY2FsbCIsIENBVVNFX1NVUEVSVklTT1JfRUNBTEwpCitERUNMQVJFX0NBVVNFKCJoeXBlcnZpc29yX2VjYWxsIiwgQ0FVU0VfSFlQRVJWSVNPUl9FQ0FMTCkKK0RFQ0xBUkVfQ0FVU0UoIm1hY2hpbmVfZWNhbGwiLCBDQVVTRV9NQUNISU5FX0VDQUxMKQorREVDTEFSRV9DQVVTRSgiZmV0Y2ggcGFnZSBmYXVsdCIsIENBVVNFX0ZFVENIX1BBR0VfRkFVTFQpCitERUNMQVJFX0NBVVNFKCJsb2FkIHBhZ2UgZmF1bHQiLCBDQVVTRV9MT0FEX1BBR0VfRkFVTFQpCitERUNMQVJFX0NBVVNFKCJzdG9yZSBwYWdlIGZhdWx0IiwgQ0FVU0VfU1RPUkVfUEFHRV9GQVVMVCkKKyNlbmRpZgorCisjaW5jbHVkZSAieWNyMV9zcGVjaWZpYy5oIgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9yaXNjdl9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmlzY3ZfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmYzhjYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmlzY3ZfbWFjcm9zLmgKQEAgLTAsMCArMSw4MzUgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgX19SSVNDVl9NQUNST1NfSAorI2RlZmluZSBfX1JJU0NWX01BQ1JPU19ICisKKyNpbmNsdWRlICJyaXNjdl9jc3JfZW5jb2RpbmcuaCIKKyNpbmNsdWRlICJzY190ZXN0LmgiCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJlZ2luIE1hY3JvCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgUlZURVNUX1JWNjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlY2NFVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSVlRFU1RfRlBfRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjZGVmaW5lIFJWVEVTVF9SVjMyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5lbmRtCisKKyNkZWZpbmUgUlZURVNUX1JWMzJVRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgUlZURVNUX0ZQX0VOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlY2NE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSVlRFU1RfRU5BQkxFX01BQ0hJTkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjZGVmaW5lIFJWVEVTVF9SVjY0UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFJWVEVTVF9FTkFCTEVfU1VQRVJWSVNPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5lbmRtCisKKyNkZWZpbmUgUlZURVNUX1JWMzJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgUlZURVNUX0VOQUJMRV9NQUNISU5FOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlYzMlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSVlRFU1RfRU5BQkxFX1NVUEVSVklTT1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjaWYgX19yaXNjdl94bGVuID09IDY0CisjIGRlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJnZXogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMToKKyNlbHNlCisjIGRlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJsdHogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMToKKyNlbmRpZgorCisjZGVmaW5lIElOSVRfUE1QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxhIHQwLCAxZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcncgbXR2ZWMsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpIHQwLCAtMTsgICAgICAgIC8qIFNldCB1cCBhIFBNUCB0byBwZXJtaXQgYWxsIGFjY2Vzc2VzICovICAgICAgICAgICBcCisgIGNzcncgcG1wYWRkcjAsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpIHQwLCBQTVBfTkFQT1QgfCBQTVBfUiB8IFBNUF9XIHwgUE1QX1g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcncgcG1wY2ZnMCwgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5iYWxpZ24gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMToKKworI2RlZmluZSBJTklUX1NQVEJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsYSB0MCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3J3IG10dmVjLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3J3aSBzcHRiciwgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuYmFsaWduIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKzE6CisKKyNkZWZpbmUgREVMRUdBVEVfTk9fVFJBUFMKKworI2RlZmluZSBSVlRFU1RfRU5BQkxFX1NVUEVSVklTT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaSBhMCwgTVNUQVRVU19NUFAgJiAoTVNUQVRVU19NUFAgPj4gMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3JzIG1zdGF0dXMsIGEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaSBhMCwgU0lQX1NTSVAgfCBTSVBfU1RJUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3JzIG1pZGVsZWcsIGEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCisjZGVmaW5lIFJWVEVTVF9FTkFCTEVfTUFDSElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpIGEwLCBNU1RBVFVTX01QUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcnMgbXN0YXR1cywgYTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZURVNUX0ZQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbGkgYTAsIE1TVEFUVVNfRlMgJiAoTVNUQVRVU19GUyA+PiAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3NycyBtc3RhdHVzLCBhMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3Nyd2kgZmNzciwgMAorCisjZGVmaW5lIFJJU0NWX01VTFRJQ09SRV9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcnIgYTAsIG1oYXJ0aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIDE6IGJuZXogYTAsIDFiCisKKyNkZWZpbmUgRVhUUkFfVFZFQ19VU0VSCisjZGVmaW5lIEVYVFJBX1RWRUNfU1VQRVJWSVNPUgorI2RlZmluZSBFWFRSQV9UVkVDX0hZUEVSVklTT1IKKyNkZWZpbmUgRVhUUkFfVFZFQ19NQUNISU5FCisjZGVmaW5lIEVYVFJBX0lOSVQKKyNkZWZpbmUgRVhUUkFfSU5JVF9USU1FUgorCisjZGVmaW5lIElOVEVSUlVQVF9IQU5ETEVSIGogb3RoZXJfZXhjZXB0aW9uIC8qIE5vIGludGVycnVwdHMgc2hvdWxkIG9jY3VyICovCisKKyNkZWZpbmUgUlZURVNUX0NPREVfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnNlY3Rpb24gLnRleHQuaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLm9yZyAweEMwLCAweDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmJhbGlnbiAgNjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLndlYWsgc3R2ZWNfaGFuZGxlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLndlYWsgbXR2ZWNfaGFuZGxlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3RyYXBfdmVjdG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogdGVzdCB3aGV0aGVyIHRoZSB0ZXN0IGNhbWUgZnJvbSBwYXNzL2ZhaWwgKi8gICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NyciBhNCwgbWNhdXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgYTUsIENBVVNFX1VTRVJfRUNBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxIGE0LCBhNSwgX3JlcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgYTUsIENBVVNFX1NVUEVSVklTT1JfRUNBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxIGE0LCBhNSwgX3JlcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgYTUsIENBVVNFX01BQ0hJTkVfRUNBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxIGE0LCBhNSwgX3JlcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogaWYgYW4gbXR2ZWNfaGFuZGxlciBpcyBkZWZpbmVkLCBqdW1wIHRvIGl0ICovICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGEgYTQsIG10dmVjX2hhbmRsZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxeiBhNCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAganIgYTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogd2FzIGl0IGFuIGludGVycnVwdCBvciBhbiBleGNlcHRpb24/ICovICAgICAgICAgICAgICAgICAgICAgIFwKKzE6ICAgICAgY3NyciBhNCwgbWNhdXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmdleiBhNCwgaGFuZGxlX2V4Y2VwdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgSU5URVJSVVBUX0hBTkRMRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2hhbmRsZV9leGNlcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIHdoYXRldmVyIHRoZSBleGNlcHRpb24gd2FzICovICAgIFwKK290aGVyX2V4Y2VwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogc29tZSB1bmhhbmRsYWJsZSBleGNlcHRpb24gb2NjdXJyZWQgKi8gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgICBhMCwgMHgxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19yZXBvcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaiBzY19leGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmJhbGlnbiAgNjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmdsb2JsIF9zdGFydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19zdGFydDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUklTQ1ZfTVVMVElDT1JFX0RJU0FCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLypJTklUX1NQVEJSOyovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLypJTklUX1BNUDsqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgREVMRUdBVEVfTk9fVFJBUFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgVEVTVE5VTSwgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGEgdDAsIHRyYXBfdmVjdG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBtdHZlYywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ0hFQ0tfWExFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogaWYgYW4gc3R2ZWNfaGFuZGxlciBpcyBkZWZpbmVkLCBkZWxlZ2F0ZSBleGNlcHRpb25zIHRvIGl0ICovIFwKKyAgICAgICAgbGEgdDAsIHN0dmVjX2hhbmRsZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxeiB0MCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBzdHZlYywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgdDAsICgxIDw8IENBVVNFX0xPQURfUEFHRV9GQVVMVCkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX1NUT1JFX1BBR0VfRkFVTFQpIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX0ZFVENIX1BBR0VfRkFVTFQpIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX01JU0FMSUdORURfRkVUQ0gpIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX1VTRVJfRUNBTEwpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX0JSRUFLUE9JTlQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBtZWRlbGVnLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NyciB0MSwgbWVkZWxlZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYm5lIHQwLCB0MSwgb3RoZXJfZXhjZXB0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKzE6ICAgICAgY3Nyd2kgbXN0YXR1cywgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRVhUUkFfSU5JVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRVhUUkFfSU5JVF9USU1FUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGEgdDAsIF9ydW5fdGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBtZXBjLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NyciBhMCwgbWhhcnRpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbXJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnNlY3Rpb24gLnRleHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19ydW5fdGVzdDoKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRW5kIE1hY3JvCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgUlZURVNUX0NPREVfRU5EIGVjYWxsOiBlY2FsbAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQYXNzL0ZhaWwgTWFjcm8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBSVlRFU1RfUEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmZW5jZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtdiBhMSwgVEVTVE5VTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsaSAgYTAsIDB4MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlY2FsbAorCisjZGVmaW5lIFRFU1ROVU0geDI4CisjZGVmaW5lIFJWVEVTVF9GQUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZlbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG12IGExLCBURVNUTlVNOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxpICBhMCwgMHgxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVjYWxsCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhdGEgU2VjdGlvbiBNYWNybworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIEVYVFJBX0RBVEEKKworI2RlZmluZSBSVlRFU1RfREFUQV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEVYVFJBX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnB1c2hzZWN0aW9uIC50b2hvc3QsImF3IixAcHJvZ2JpdHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuYmFsaWduIDY0OyAuZ2xvYmFsIHRvaG9zdDsgdG9ob3N0OiAuZHdvcmQgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5iYWxpZ24gNjQ7IC5nbG9iYWwgZnJvbWhvc3Q7IGZyb21ob3N0OiAuZHdvcmQgMDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnBvcHNlY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuYmFsaWduIDE2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5nbG9iYWwgYmVnaW5fcmVnc3RhdGU7ICBiZWdpbl9yZWdzdGF0ZTogLmR3b3JkIDA7IC5kd29yZCAwOyAuZHdvcmQgMDsgIFwKKyAgICAgICAgLmJhbGlnbiAxNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuZ2xvYmFsIGJlZ2luX3NpZ25hdHVyZTsgYmVnaW5fc2lnbmF0dXJlOgorCisjZGVmaW5lIFJWVEVTVF9EQVRBX0VORCAuYmFsaWduIDE2OyAuZ2xvYmFsIGVuZF9zaWduYXR1cmU7IGVuZF9zaWduYXR1cmU6CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgbWFjcm9zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBNQVNLX1hMRU4oeCkgKCh4KSAmICgoMSA8PCAoX19yaXNjdl94bGVuIC0gMSkgPDwgMSkgLSAxKSkKKworI2RlZmluZSBURVNUX0NBU0UoIHRlc3RudW0sIHRlc3RyZWcsIGNvcnJlY3R2YWwsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgY29kZTsgXAorICAgIGxpICB4MjksIE1BU0tfWExFTihjb3JyZWN0dmFsKTsgXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgYm5lIHRlc3RyZWcsIHgyOSwgZmFpbDsKKworIyBXZSB1c2UgYSBtYWNybyBoYWNrIHRvIHNpbXBpZnkgY29kZSBnZW5lcmF0aW9uIGZvciB2YXJpb3VzIG51bWJlcnMKKyMgb2YgYnViYmxlIGN5Y2xlcy4KKworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzAKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMAorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzIgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU18xCisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMyAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzIKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU180ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzUgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU180CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNiAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzUKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU183ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNgorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzggIG5vcDsgVEVTVF9JTlNFUlRfTk9QU183CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfOSAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzgKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xMCBub3A7IFRFU1RfSU5TRVJUX05PUFNfOQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUkgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBpbnN0cnVjdGlvbnMgd2l0aCBpbW1lZGlhdGUgb3BlcmFuZAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisjZGVmaW5lIFRFU1RfSU1NX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IHgzLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9PUF9SVkMoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgxLCBpbW07IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fU1JDMV9FUV9ERVNUKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IHgxLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9ERVNUX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IHgzLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgICBhZGRpICB4NiwgeDMsIDA7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgaW5zdCB4MywgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1pFUk9TUkMxKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGluc3QgeDEsIHgwLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1pFUk9ERVNUKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MCwgMCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgeDAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZm9yIHZlY3RvciBjb25maWcgaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX1ZTRVRDRkdJVkwoIHRlc3RudW0sIG54cHIsIG5mcHIsIGJhbmssIHZsLCByZXN1bHQgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSB4MSwgKGJhbmsgPDwgMTIpOyBcCisgICAgICB2c2V0Y2ZnIHgxLG54cHIsbmZwcjsgXAorICAgICAgbGkgeDEsIHZsOyBcCisgICAgICB2c2V0dmwgeDEseDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9WVkNGRyggdGVzdG51bSwgbnhwciwgbmZwciwgYmFuaywgdmwsIHJlc3VsdCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGxpIHgxLCAoYmFuayA8PCAxMikgfCAobmZwciA8PCA2KSB8IG54cHI7IFwKKyAgICAgIHZzZXRjZmcgeDE7IFwKKyAgICAgIGxpIHgxLCB2bDsgXAorICAgICAgdnNldHZsIHgxLHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfVlNFVFZMKCB0ZXN0bnVtLCBueHByLCBuZnByLCBiYW5rLCB2bCwgcmVzdWx0ICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIChiYW5rIDw8IDEyKTsgXAorICAgICAgdnNldGNmZyB4MSxueHByLG5mcHI7IFwKKyAgICAgIGxpIHgxLCB2bDsgXAorICAgICAgdnNldHZsIHgxLCB4MTsgXAorICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBhbiBpbnN0cnVjdGlvbiB3aXRoIHJlZ2lzdGVyIG9wZXJhbmRzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX1JfT1AoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgdmFsMTsgXAorICAgICAgaW5zdCB4MywgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzLCB4MTsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgICBhZGRpICB4NiwgeDMsIDA7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZm9yIGFuIGluc3RydWN0aW9uIHdpdGggcmVnaXN0ZXItcmVnaXN0ZXIgb3BlcmFuZHMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfUlJfT1AoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MywgeDEsIHgyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMV9FUV9ERVNUKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgeDEsIHgxLCB4MjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzJfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgyLCB4MSwgeDI7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMxMl9FUV9ERVNUKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MSwgeDEsIHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgzLCB4MSwgeDI7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgYWRkaSAgeDYsIHgzLCAwOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICAgIGluc3QgeDMsIHgxLCB4MjsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMyMV9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzLCB4MSwgeDI7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST1NSQzEoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IHgyLCB4MCwgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPU1JDMiggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MiwgcmVzdWx0LCBcCisgICAgICBsaSB4MSwgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgeDIsIHgxLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9TUkMxMiggdGVzdG51bSwgaW5zdCwgcmVzdWx0ICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgaW5zdCB4MSwgeDAsIHgwOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST0RFU1QoIHRlc3RudW0sIGluc3QsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MCwgMCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgeDEsIHgyOyBcCisgICAgKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBtZW1vcnkgaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX0xEX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxhICB4MSwgYmFzZTsgXAorICAgICAgaW5zdCB4Mywgb2Zmc2V0KHgxKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1NUX09QKCB0ZXN0bnVtLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMsIHJlc3VsdCwgXAorICAgICAgbGEgIHgxLCBiYXNlOyBcCisgICAgICBsaSAgeDIsIHJlc3VsdDsgXAorICAgICAgc3RvcmVfaW5zdCB4Miwgb2Zmc2V0KHgxKTsgXAorICAgICAgbG9hZF9pbnN0IHgzLCBvZmZzZXQoeDEpOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfTERfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGEgIHgxLCBiYXNlOyBcCisgICAgaW5zdCB4Mywgb2Zmc2V0KHgxKTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgIGFkZGkgIHg2LCB4MywgMDsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4NiwgeDI5LCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWI7IFwKKworI2RlZmluZSBURVNUX0xEX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4MSwgYmFzZTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgIGluc3QgeDMsIG9mZnNldCh4MSk7IFwKKyAgICBsaSAgeDI5LCByZXN1bHQ7IFwKKyAgICBibmUgeDMsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHJlc3VsdDsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGEgIHgyLCBiYXNlOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzLCBvZmZzZXQoeDIpOyBcCisgICAgbGkgIHgyOSwgcmVzdWx0OyBcCisgICAgYm5lIHgzLCB4MjksIGZhaWw7IFwKKyAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKyNkZWZpbmUgVEVTVF9TVF9TUkMyMV9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGEgIHgyLCBiYXNlOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMV9ub3BzIFwKKyAgICBsaSAgeDEsIHJlc3VsdDsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgc3RvcmVfaW5zdCB4MSwgb2Zmc2V0KHgyKTsgXAorICAgIGxvYWRfaW5zdCB4Mywgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MywgeDI5LCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBicmFuY2ggaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX0JSMV9PUF9UQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGluc3QgeDEsIDJmOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCAzZjsgXAorMjogIGluc3QgeDEsIDFiOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCiszOgorCisjZGVmaW5lIFRFU1RfQlIxX09QX05PVFRBS0VOKCB0ZXN0bnVtLCBpbnN0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgaW5zdCB4MSwgMWY7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIDJmOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgaW5zdCB4MSwgMWI7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjFfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHZhbDEgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgxLCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjZGVmaW5lIFRFU1RfQlIyX09QX1RBS0VOKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCB2YWwyICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgbGkgIHgyLCB2YWwyOyBcCisgICAgaW5zdCB4MSwgeDIsIDJmOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCAzZjsgXAorMjogIGluc3QgeDEsIHgyLCAxYjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMzoKKworI2RlZmluZSBURVNUX0JSMl9PUF9OT1RUQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIGluc3QgeDEsIHgyLCAxZjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgMmY7IFwKKzE6ICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzI6ICBpbnN0IHgxLCB4MiwgMWI7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjJfU1JDMTJfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxpICB4MSwgdmFsMTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGkgIHgyLCB2YWwyOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBpbnN0IHgxLCB4MiwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0JSMl9TUkMyMV9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBpbnN0LCB2YWwxLCB2YWwyICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGkgIHgyLCB2YWwyOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMV9ub3BzIFwKKyAgICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMyX25vcHMgXAorICAgIGluc3QgeDEsIHgyLCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBqdW1wIGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9KUl9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4NiwgMmY7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHg2OyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjZGVmaW5lIFRFU1RfSkFMUl9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4NiwgMmY7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgxOSwgeDYsIDA7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzI6ICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJWNjRVRiBNQUNST1MKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBxTmFOZiAwZjo3ZmMwMDAwMAorI2RlZmluZSBzTmFOZiAwZjo3ZjgwMDAwMQorI2RlZmluZSBxTmFOIDBkOjdmZjgwMDAwMDAwMDAwMDAKKyNkZWZpbmUgc05hTiAwZDo3ZmYwMDAwMDAwMDAwMDAxCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgZmx3IGYwLCAwKGEwKTsgXAorICBmbHcgZjEsIDQoYTApOyBcCisgIGZsdyBmMiwgOChhMCk7IFwKKyAgbHcgIGEzLCAxMihhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgYTEsIGEyLCBmYWlsOyBcCisgIGogMmY7IFwKKyAgLmJhbGlnbiA0OyBcCisgIC5kYXRhOyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmZsb2F0IHZhbDE7IFwKKyAgLmZsb2F0IHZhbDI7IFwKKyAgLmZsb2F0IHZhbDM7IFwKKyAgLnJlc3VsdDsgXAorICAudGV4dDsgXAorMjoKKworI2RlZmluZSBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbGQgIGEzLCAyNChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgYTEsIGEyLCBmYWlsOyBcCisgIGogMmY7IFwKKyAgLmRhdGE7IFwKKyAgLmJhbGlnbiA4OyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmRvdWJsZSB2YWwxOyBcCisgIC5kb3VibGUgdmFsMjsgXAorICAuZG91YmxlIHZhbDM7IFwKKyAgLnJlc3VsdDsgXAorICAudGV4dDsgXAorMjoKKworI2RlZmluZSBURVNUX0ZDVlRfU19EKCB0ZXN0bnVtLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRF9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRkNWVF9EX1MoIHRlc3RudW0sIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCAwLCBmbG9hdCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGZjdnQuZC5zIGYzLCBmMDsgZmN2dC5zLmQgZjMsIGYzOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZm12LnguZCBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDFfU19EV09SRF9SRVNVTFQoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0RfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMl9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgIFRFU1RfRlBfT1BfRF9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGRvdWJsZSByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AzX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGZsb2F0IHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjEsIGYyOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QM19EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwLCBmMSwgZjI7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfSU5UX09QX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCB3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIHJtKQorCisjZGVmaW5lIFRFU1RfRlBfSU5UX09QX0QoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBybSkKKworI2RlZmluZSBURVNUX0ZQX0NNUF9PUF9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCB3b3JkIHJlc3VsdCwgdmFsMSwgdmFsMiwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBmMSkKKworI2RlZmluZSBURVNUX0ZQX0NNUF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjEpCisKKyNkZWZpbmUgVEVTVF9GQ0xBU1NfUyh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LnMueCBmYTAsIGEwOyBcCisgICAgICAgICAgICAgICAgICAgIGZjbGFzcy5zIGEwLCBmYTApCisKKyNkZWZpbmUgVEVTVF9GQ0xBU1NfRCh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LmQueCBmYTAsIGEwOyBcCisgICAgICAgICAgICAgICAgICAgIGZjbGFzcy5kIGEwLCBmYTApCisKKyNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfUyggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsaSAgYTAsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTA7IFwKKyAgZnNmbGFncyB4MDsgXAorICBmbXYueC5zIGEwLCBmMDsgXAorICBibmUgYTAsIGEzLCBmYWlsOyBcCisgIGogMWY7IFwKKyAgLmJhbGlnbiA0OyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmZsb2F0IHJlc3VsdDsgXAorMToKKworI2RlZmluZSBURVNUX0lOVF9GUF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBsZCAgYTMsIDAoYTApOyBcCisgIGxpICBhMCwgdmFsMTsgXAorICBpbnN0IGYwLCBhMDsgXAorICBmc2ZsYWdzIHgwOyBcCisgIGZtdi54LmQgYTAsIGYwOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgaiAxZjsgXAorICAuYmFsaWduIDg7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorMToKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBhc3MgYW5kIGZhaWwgY29kZSAoYXNzdW1lcyB0ZXN0IG51bSBpcyBpbiBURVNUTlVNKQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9QQVNTRkFJTCBcCisgICAgICAgIGJuZSB4MCwgVEVTVE5VTSwgcGFzczsgXAorZmFpbDogXAorICAgICAgICBSVlRFU1RfRkFJTDsgXAorcGFzczogXAorICAgICAgICBSVlRFU1RfUEFTUyBcCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgZGF0YSBzZWN0aW9uCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX0RBVEEKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuYyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzM2ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9zY19wcmludC5jCkBAIC0wLDAgKzEsMjk2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAic2NfcHJpbnQuaCIKKworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgQ0hBUl9CSVQgKDgpCisKK3N0YXRpYyB2b2lkCitzY19wdXRzKGxvbmcgc3RyLCBsb25nIHN0cmxlbikgeworCXZvbGF0aWxlIGNoYXIgKm91dF9wdHIgPSAodm9sYXRpbGUgY2hhciopU0NfU0lNX09VVFBPUlQ7CisJY29uc3QgY2hhciAqaW5fcHRyID0gKGNvbnN0IGNoYXIqKXN0cjsKKwlmb3IgKGxvbmcgbGVuID0gc3RybGVuOyBsZW4gPiAwOyAtLWxlbikKKwkgICpvdXRfcHRyID0gKmluX3B0cisrOworfQorCisjdW5kZWYgcHV0Y2hhcgoraW50CitwdXRjaGFyKGludCBjaCkgeworCXN0YXRpYyBfX3RocmVhZCBjaGFyIGJ1Zls2NF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKTsKKyAgICBzdGF0aWMgX190aHJlYWQgaW50IGJ1ZmxlbiA9IDA7CisKKyAgICBidWZbYnVmbGVuKytdID0gY2g7CisKKwlpZiAoIGNoID09ICdcbicgfHwgYnVmbGVuID09IHNpemVvZihidWYpICkgeworICAgICAgICBzY19wdXRzKChsb25nKWJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgYnVmbGVuID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3ByaW50Zl9wdXRjaChpbnQgY2gsIHZvaWQqKiBkYXRhKQoreworICAgIHB1dGNoYXIoY2gpOworfQorCitzdGF0aWMgdm9pZAorcHJpbnQoY29uc3QgY2hhciAqc3RyKQoreworICBzY19wdXRzKChsb25nKXN0ciwgc3RybGVuKHN0cikpOworfQorCisKK3N0YXRpYyBsb25nIGxvbmcKK2dldGludCh2YV9saXN0ICphcCwgaW50IGxmbGFnKQoreworICAgIGlmICggbGZsYWcgPj0gMiApCisgICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCBsb25nIGxvbmcpOworICAgIGVsc2UgaWYgKCBsZmxhZyApCisgICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCBsb25nKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCBpbnQpOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcKK2dldHVpbnQodmFfbGlzdCAqYXAsIGludCBsZmxhZykKK3sKKyAgICBpZiAoIGxmbGFnID49IDIgKQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgdW5zaWduZWQgbG9uZyBsb25nKTsKKyAgICBlbHNlIGlmICggbGZsYWcgKQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgdW5zaWduZWQgbG9uZyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgdW5zaWduZWQgaW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwcmludG51bSh2b2lkKCpwdXRjaCkoaW50LCB2b2lkKiopLAordm9pZCAqKnB1dGRhdCwKK3Vuc2lnbmVkIGxvbmcgbG9uZyBudW0sCit1bnNpZ25lZCBiYXNlLAoraW50IHdpZHRoLAoraW50IHBhZGMsCitpbnQgaGV4X0EpCit7CisgICAgdW5zaWduZWQgZGlnc1tzaXplb2YobnVtKSAqIENIQVJfQklUXTsKKyAgICBpbnQgcG9zID0gMDsKKworICAgIGZvciAoIDs7ICkgeworICAgICAgICBkaWdzW3BvcysrXSA9IG51bSAlIGJhc2U7CisgICAgICAgIGlmICggbnVtIDwgYmFzZSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbnVtIC89IGJhc2U7CisgICAgfQorCisgICAgd2hpbGUgKCB3aWR0aC0tID4gcG9zICkKKyAgICAgICAgcHV0Y2gocGFkYywgcHV0ZGF0KTsKKworICAgIHdoaWxlICggcG9zLS0gPiAwICkKKyAgICAgICAgcHV0Y2goZGlnc1twb3NdICsgKGRpZ3NbcG9zXSA+PSAxMCA/IGhleF9BIC0gMTAgOiAnMCcpLCBwdXRkYXQpOworfQorCitzdGF0aWMgdm9pZAordnByaW50Zm10KHZvaWQoKnB1dGNoKShpbnQsIHZvaWQqKiksIHZvaWQgKipwdXRkYXQsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKyAgICByZWdpc3RlciBjb25zdCBjaGFyKiBwOworICAgIGNvbnN0IGNoYXIqIGxhc3RfZm10OworICAgIHJlZ2lzdGVyIGludCBjaDsKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBudW07CisgICAgaW50IGJhc2U7CisgICAgaW50IGxmbGFnOworICAgIGludCB3aWR0aDsKKyAgICBpbnQgcHJlY2lzaW9uOworICAgIGludCBhbHRmbGFnOworICAgIGNoYXIgcGFkYzsKKyAgICBpbnQgaGV4X0EgPSAnYSc7CisgICAgZm9yICggOzsgKSB7CisgICAgICAgIHdoaWxlICggKGNoID0gKih1bnNpZ25lZCBjaGFyICopZm10KSAhPSAnJScgKSB7CisgICAgICAgICAgICBpZiAoIGNoID09ICdcMCcgKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICsrZm10OworICAgICAgICAgICAgcHV0Y2goY2gsIHB1dGRhdCk7CisgICAgICAgIH0KKyAgICAgICAgKytmbXQ7CisKKyAgICAgICAgLy8gUHJvY2VzcyBhICUtZXNjYXBlIHNlcXVlbmNlCisgICAgICAgIGxhc3RfZm10ID0gZm10OworICAgICAgICBwYWRjID0gJyAnOworICAgICAgICB3aWR0aCA9IC0xOworICAgICAgICBwcmVjaXNpb24gPSAtMTsKKyAgICAgICAgbGZsYWcgPSAwOworICAgICAgICBhbHRmbGFnID0gMDsKKworcmVzd2l0Y2g6CisgICAgICAgIHN3aXRjaCAoIGNoID0gKih1bnNpZ25lZCBjaGFyICopZm10KysgKSB7CisgICAgICAgICAgICAvLyBmbGFnIHRvIHBhZCBvbiB0aGUgcmlnaHQKKyAgICAgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgICAgIHBhZGMgPSAnLSc7CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworICAgICAgICAgICAgICAgIC8vIGZsYWcgdG8gcGFkIHdpdGggMCdzIGluc3RlYWQgb2Ygc3BhY2VzCisgICAgICAgICAgICBjYXNlICcwJzoKKyAgICAgICAgICAgICAgICBwYWRjID0gJzAnOworICAgICAgICAgICAgICAgIGdvdG8gcmVzd2l0Y2g7CisKKyAgICAgICAgICAgICAgICAvLyB3aWR0aCBmaWVsZAorICAgICAgICAgICAgY2FzZSAnMSc6CisgICAgICAgICAgICBjYXNlICcyJzoKKyAgICAgICAgICAgIGNhc2UgJzMnOgorICAgICAgICAgICAgY2FzZSAnNCc6CisgICAgICAgICAgICBjYXNlICc1JzoKKyAgICAgICAgICAgIGNhc2UgJzYnOgorICAgICAgICAgICAgY2FzZSAnNyc6CisgICAgICAgICAgICBjYXNlICc4JzoKKyAgICAgICAgICAgIGNhc2UgJzknOgorICAgICAgICAgICAgICAgIGZvciAoIHByZWNpc2lvbiA9IDA7OyArK2ZtdCApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uICogMTAgKyBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqZm10OworICAgICAgICAgICAgICAgICAgICBpZiAoIGNoIDwgJzAnIHx8IGNoID4gJzknICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHByb2Nlc3NfcHJlY2lzaW9uOworCisgICAgICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSB2YV9hcmcoYXAsIGludCk7CisgICAgICAgICAgICAgICAgZ290byBwcm9jZXNzX3ByZWNpc2lvbjsKKworICAgICAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAgICAgICAgaWYgKCB3aWR0aCA8IDAgKQorICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworICAgICAgICAgICAgY2FzZSAnIyc6CisgICAgICAgICAgICAgICAgYWx0ZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworcHJvY2Vzc19wcmVjaXNpb246CisgICAgICAgICAgICAgICAgaWYgKCB3aWR0aCA8IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcHJlY2lzaW9uOworICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworICAgICAgICAgICAgICAgIC8vIGxvbmcgZmxhZyAoZG91YmxlZCBmb3IgbG9uZyBsb25nKQorICAgICAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICAgICAgbGZsYWcrKzsKKyAgICAgICAgICAgICAgICBnb3RvIHJlc3dpdGNoOworCisgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyCisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBwdXRjaCh2YV9hcmcoYXAsIGludCksIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyBzdHJpbmcKKyAgICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIGlmICggKHAgPSB2YV9hcmcoYXAsIGNoYXIgKikpID09IE5VTEwgKQorICAgICAgICAgICAgICAgICAgICBwID0gIihudWxsKSI7CisgICAgICAgICAgICAgICAgaWYgKCB3aWR0aCA+IDAgJiYgcGFkYyAhPSAnLScgKQorICAgICAgICAgICAgICAgICAgICBmb3IgKCB3aWR0aCAtPSBzdHJubGVuKHAsIHByZWNpc2lvbik7IHdpZHRoID4gMDsgd2lkdGgtLSApCisgICAgICAgICAgICAgICAgICAgICAgICBwdXRjaChwYWRjLCBwdXRkYXQpOworICAgICAgICAgICAgICAgIGZvciAoIDsgKGNoID0gKnApICE9ICdcMCcgJiYgKHByZWNpc2lvbiA8IDAgfHwgLS1wcmVjaXNpb24gPj0gMCk7IHdpZHRoLS0gKSB7CisgICAgICAgICAgICAgICAgICAgIHB1dGNoKGNoLCBwdXRkYXQpOworICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoIDsgd2lkdGggPiAwOyB3aWR0aC0tICkKKyAgICAgICAgICAgICAgICAgICAgcHV0Y2goJyAnLCBwdXRkYXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gKHNpZ25lZCkgZGVjaW1hbAorICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgbnVtID0gZ2V0aW50KCZhcCwgbGZsYWcpOworICAgICAgICAgICAgICAgIGlmICggKGxvbmcgbG9uZyludW0gPCAwICkgeworICAgICAgICAgICAgICAgICAgICBwdXRjaCgnLScsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgICAgIG51bSA9IC0obG9uZyBsb25nKW51bTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmFzZSA9IDEwOworICAgICAgICAgICAgICAgIGdvdG8gc2lnbmVkX251bWJlcjsKKworICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAjaWZuZGVmIG5vcGZsb2F0CisgICAgICAgICAgICAgICAgICAgIC8vIGRvdWJsZSBudW0gPSBnZXRkb3VibGUoJmFwLCBsZmxhZyk7CisgICAgICAgICAgICAgICAgICAgIC8vIHByaW50ZG91YmxlRihwdXRjaCwgcHV0ZGF0LCBudW0sIHdpZHRoLCBwcmVjaXNpb24sIHBhZGMpOworICAgICAgICAgICAgICAgICAgICAvLyAjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyB1bnNpZ25lZCBkZWNpbWFsCisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICAgICAgZ290byB1bnNpZ25lZF9udW1iZXI7CisKKyAgICAgICAgICAgICAgICAvLyAodW5zaWduZWQpIG9jdGFsCisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICAvLyBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggcGFkZGluZyBzbyBpdCdzIGFsd2F5cyAzIG9jdGl0cworICAgICAgICAgICAgICAgIGJhc2UgPSA4OworICAgICAgICAgICAgICAgIGdvdG8gdW5zaWduZWRfbnVtYmVyOworCisgICAgICAgICAgICAgICAgLy8gcG9pbnRlcgorICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgLy8gc3RhdGljX2Fzc2VydChzaXplb2YobG9uZykgPT0gc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgICAgICAgICAgbGZsYWcgPSAxOworICAgICAgICAgICAgICAgIHB1dGNoKCcwJywgcHV0ZGF0KTsKKyAgICAgICAgICAgICAgICBwdXRjaCgneCcsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoIHRvICd4JyAqLworCisgICAgICAgICAgICAgICAgLy8gKHVuc2lnbmVkKSBoZXhhZGVjaW1hbAorICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgaGV4X0EgPSAnYSc7CisgICAgICAgICAgICAgICAgYmFzZSA9IDE2OworICAgICAgICAgICAgICAgIGdvdG8gdW5zaWduZWRfbnVtYmVyOworCisgICAgICAgICAgICBjYXNlICdYJzoKKyAgICAgICAgICAgICAgICBoZXhfQSA9ICdBJzsKKyAgICAgICAgICAgICAgICBiYXNlID0gMTY7Cit1bnNpZ25lZF9udW1iZXI6CisgICAgICAgICAgICAgICAgbnVtID0gZ2V0dWludCgmYXAsIGxmbGFnKTsKK3NpZ25lZF9udW1iZXI6CisgICAgICAgICAgICAgICAgcHJpbnRudW0ocHV0Y2gsIHB1dGRhdCwgbnVtLCBiYXNlLCB3aWR0aCwgcGFkYywgaGV4X0EpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gZXNjYXBlZCAnJScgY2hhcmFjdGVyCisgICAgICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgICAgICBwdXRjaChjaCwgcHV0ZGF0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2UgLSBqdXN0IHByaW50IGl0IGxpdGVyYWxseQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBwdXRjaCgnJScsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgZm10ID0gbGFzdF9mbXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludAorc2NfcHJpbnRmKGNvbnN0IGNoYXIqIGZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisKKyAgICB2cHJpbnRmbXQocHJpbnRmX3B1dGNoLCBOVUxMLCBmbXQsIGFwKTsKKworICAgIHZhX2VuZChhcCk7CisgICAgcmV0dXJuIDA7IC8vIGluY29ycmVjdCByZXR1cm4gdmFsdWUsIGJ1dCB3aG8gY2FyZXMsIGFueXdheT8KK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQ2YjYxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9zY19wcmludC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgU0NfUFJJTlRfSAorI2RlZmluZSBTQ19QUklOVF9ICisKK2V4dGVybiBpbnQgc2NfcHJpbnRmKGNvbnN0IGNoYXIqIGZtdCwgLi4uKTsKKworI2VuZGlmIC8vIFNDX1BSSU5UX0gKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfdGVzdC5oIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9zY190ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2NDQ4YQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfdGVzdC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgU0NfVEVTVF9ICisjZGVmaW5lIFNDX1RFU1RfSAorCisjaWYgZGVmaW5lZChfX0FTU0VNQkxFUl9fKQorLmFsdG1hY3JvCisKKy5tYWNybyB6ZXJvX2ludF9yZWcgcmVnbgorbXYgICB4XHJlZ24sIHplcm8KKy5lbmRtCisKKy5tYWNybyB6ZXJvX2ludF9yZWdzIHJlZ19maXJzdCwgcmVnX2xhc3QKKy5zZXQgcmVnbiwgXHJlZ19maXJzdAorLnJlcHQgXHJlZ19sYXN0IC0gXHJlZ19maXJzdCArIDEKK3plcm9faW50X3JlZyAlKHJlZ24pCisuc2V0IHJlZ24sIHJlZ24rMQorLmVuZHIKKy5lbmRtCisKKyNkZWZpbmUgcmVwb3J0X3Jlc3VsdHMocmVzdWx0KSBcCitsaSAgYTAsIHJlc3VsdDsgIFwKK2xhIHQwLCBzY19leGl0OyAgXAoranIJIHQwOworCisucHVzaHNlY3Rpb24gc2NfdGVzdF9zZWN0aW9uLCAiYXgiCitzY19leGl0OiBsYSB0MCwgU0lNX0VYSVQ7IGpyIHQwOworLmJhbGlnbiAzMgorLnBvcHNlY3Rpb24KKyNkZWZpbmUgc2NfcGFzcyByZXBvcnRfcmVzdWx0cygweDApCisjZGVmaW5lIHNjX2ZhaWwgcmVwb3J0X3Jlc3VsdHMoMHgxKQorCisjZWxzZQorCitleHRlcm4gdm9pZCBzY19leGl0KHVuc2lnbmVkIHJlc3VsdCwgdW5zaWduZWQgcmVzMCwgdW5zaWduZWQgcmVzMSwgdW5zaWduZWQgcmVzMiwgdW5zaWduZWQgcmVzMykKKyAgICBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUsIG5vcmV0dXJuKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkKK3JlcG9ydF9yZXN1bHRzKHVuc2lnbmVkIHJlc3VsdCwgdW5zaWduZWQgcmVzMCwgdW5zaWduZWQgcmVzMSwgdW5zaWduZWQgcmVzMiwgdW5zaWduZWQgcmVzMykKK3sKKyAgICBzY19leGl0KHJlc3VsdCwgcmVzMCwgcmVzMSwgcmVzMiwgcmVzMyk7Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gU0NfVEVTVF9ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL3ljcjFfc3BlY2lmaWMuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUveWNyMV9zcGVjaWZpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGM1ODMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL3ljcjFfc3BlY2lmaWMuaApAQCAtMCwwICsxLDM4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIF9fWUNSMV9fU1BFQ0lGSUMKKyNkZWZpbmUgX19ZQ1IxX19TUEVDSUZJQworCisjZGVmaW5lIG1jb3VudGVuICAgICAgICAweDdFMAorCisvLyBNZW1vcnktbWFwcGVkIHJlZ2lzdGVycworI2RlZmluZSBtdGltZV9jdHJsICAgICAgMHgwQzQ5MDAwMAorI2RlZmluZSBtdGltZV9kaXYgICAgICAgMHgwQzQ5MDAwNAorI2RlZmluZSBtdGltZSAgICAgICAgICAgMHgwQzQ5MDAwOAorI2RlZmluZSBtdGltZWggICAgICAgICAgMHgwQzQ5MDAwQworI2RlZmluZSBtdGltZWNtcCAgICAgICAgMHgwQzQ5MDAxMAorI2RlZmluZSBtdGltZWNtcGggICAgICAgMHgwQzQ5MDAxNAorCisjZGVmaW5lIFlDUjFfTVRJTUVfQ1RSTF9FTiAgICAgICAgICAwCisjZGVmaW5lIFlDUjFfTVRJTUVfQ1RSTF9DTEtTUkMgICAgICAxCisKKyNkZWZpbmUgWUNSMV9NVElNRV9DVFJMX1dSX01BU0sgICAgIDB4MworI2RlZmluZSBZQ1IxX01USU1FX0RJVl9XUl9NQVNLICAgICAgMHgzRkYKKworI2VuZGlmIC8vIF9ZQ1IxX19TUEVDSUZJQwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9tb2RlbC9pMmNfc2xhdmVfbW9kZWwudiBiL3Zlcmlsb2cvZHYvbW9kZWwvaTJjX3NsYXZlX21vZGVsLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODNiOGY4YgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvbW9kZWwvaTJjX3NsYXZlX21vZGVsLnYKQEAgLTAsMCArMSwzNzMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIFJpY2hhcmQgSGVydmVpbGxlCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBXSVNIQk9ORSByZXYuQjIgY29tcGxpYW50IHN5bnRoZXNpemFibGUgSTJDIFNsYXZlIG1vZGVsICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3JzOiBSaWNoYXJkIEhlcnZlaWxsZSAocmljaGFyZEBhc2ljcy53cykgd3d3LmFzaWNzLndzIC8vLy8KKy8vLy8gICAgICAgICAgIEpvaG4gU2hlYWhhbiAoanJzaGVhaGFuQG9wdHVzaG9tZS5jb20uYXUpICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9wcm9qZWN0cy9pMmMvICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgUmljaGFyZCBIZXJ2ZWlsbGUgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICByaWNoYXJkQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogaTJjX3NsYXZlX21vZGVsLnYsdiAxLjcgMjAwNi0wOS0wNCAwOTowODo1MSByaGVydmVpbGxlIEV4cCAkCisvLworLy8gICREYXRlOiAyMDA2LTA5LTA0IDA5OjA4OjUxICQKKy8vICAkUmV2aXNpb246IDEuNyAkCisvLyAgJEF1dGhvcjogcmhlcnZlaWxsZSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuNiAgMjAwNS8wMi8yOCAxMTozMzo0OCAgcmhlcnZlaWxsZQorLy8gICAgICAgICAgICAgICBGaXhlZCBUc3U6c3RhIHRpbWluZyBjaGVjay4KKy8vICAgICAgICAgICAgICAgQWRkZWQgVGhkOnN0YSB0aW1pbmcgY2hlY2suCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjUgIDIwMDMvMTIvMDUgMTE6MDU6MTkgIHJoZXJ2ZWlsbGUKKy8vICAgICAgICAgICAgICAgRml4ZWQgc2xhdmUgYWRkcmVzcyBNU0I9JzEnIGJ1ZworLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS40ICAyMDAzLzA5LzExIDA4OjI1OjM3ICByaGVydmVpbGxlCisvLyAgICAgICAgICAgICAgIEZpeGVkIGEgYnVnIGluIHRoZSB0aW1pbmcgc2VjdGlvbi4gQ2hhbmdlZCAndHN0X3NjbCcgaW50byAndHN0X3N0bycuCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjMgIDIwMDIvMTAvMzAgMTg6MTE6MDYgIHJoZXJ2ZWlsbGUKKy8vICAgICAgICAgICAgICAgQWRkZWQgdGltaW5nIHRlc3RzIHRvIGkyY19tb2RlbC4KKy8vICAgICAgICAgICAgICAgVXBkYXRlZCB0ZXN0YmVuY2guCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjIgIDIwMDIvMDMvMTcgMTA6MjY6MzggIHJoZXJ2ZWlsbGUKKy8vICAgICAgICAgICAgICAgRml4ZWQgc29tZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGkyYy1zbGF2ZSBtb2RlbC4KKy8vICAgICAgICAgICAgICAgQWRkZWQgZGVidWcgaW5mb3JtYXRpb24uCisvLyAgICAgICAgICAgICAgIEFkZGVkIGhlYWRlcnMuCisvLworCisKK21vZHVsZSBpMmNfc2xhdmVfbW9kZWwgKHNjbCwgc2RhKTsKKworCS8vCisJLy8gcGFyYW1ldGVycworCS8vCisJcGFyYW1ldGVyIEkyQ19BRFIgPSA3J2IwMDFfMDAwMDsKKworCS8vCisJLy8gaW5wdXQgJiYgb3V0cHVzCisJLy8KKwlpbnB1dCBzY2w7CisJaW5vdXQgc2RhOworCisJLy8KKwkvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbgorCS8vCisJd2lyZSBkZWJ1ZyA9IDEnYjE7CisKKwlyZWcgWzc6MF0gbWVtIFsyNTU6MF07IC8vIGluaXRpYXRlIG1lbW9yeQorCXJlZyBbNzowXSBtZW1fYWRyOyAgIC8vIG1lbW9yeSBhZGRyZXNzCisJcmVnIFs3OjBdIG1lbV9kbzsgICAgLy8gbWVtb3J5IGRhdGEgb3V0cHV0CisKKwlyZWcgc3RhLCBkX3N0YTsKKwlyZWcgc3RvLCBkX3N0bzsKKworCXJlZyBbNzowXSBzcjsgICAgICAgIC8vIDhiaXQgc2hpZnQgcmVnaXN0ZXIKKwlyZWcgICAgICAgcnc7ICAgICAgICAvLyByZWFkL3dyaXRlIGRpcmVjdGlvbgorCisJd2lyZSAgICAgIG15X2FkcjsgICAgLy8gbXkgYWRkcmVzcyBjYWxsZWQgPz8KKwl3aXJlICAgICAgaTJjX3Jlc2V0OyAvLyBpMmMtc3RhdGVtYWNoaW5lIHJlc2V0CisJcmVnIFsyOjBdIGJpdF9jbnQ7ICAgLy8gM2JpdCBkb3duY291bnRlcgorCXdpcmUgICAgICBhY2NfZG9uZTsgIC8vIDhiaXRzIHRyYW5zZmVyZWQKKwlyZWcgICAgICAgbGQ7ICAgICAgICAvLyBsb2FkIGRvd25jb3VudGVyCisKKwlyZWcgICAgICAgc2RhX287ICAgICAvLyBzZGEtZHJpdmUgbGV2ZWwKKwl3aXJlICAgICAgc2RhX2RseTsgICAvLyBkZWxheWVkIHZlcnNpb24gb2Ygc2RhCisKKwkvLyBzdGF0ZW1hY2hpbmUgZGVjbGFyYXRpb24KKwlwYXJhbWV0ZXIgaWRsZSAgICAgICAgPSAzJ2IwMDA7CisJcGFyYW1ldGVyIHNsYXZlX2FjayAgID0gMydiMDAxOworCXBhcmFtZXRlciBnZXRfbWVtX2FkciA9IDMnYjAxMDsKKwlwYXJhbWV0ZXIgZ21hX2FjayAgICAgPSAzJ2IwMTE7CisJcGFyYW1ldGVyIGRhdGEgICAgICAgID0gMydiMTAwOworCXBhcmFtZXRlciBkYXRhX2FjayAgICA9IDMnYjEwMTsKKworCXJlZyBbMjowXSBzdGF0ZTsgLy8gc3lub3BzeXMgZW51bV9zdGF0ZQorCisJLy8KKwkvLyBtb2R1bGUgYm9keQorCS8vCisKKwlpbml0aWFsCisJYmVnaW4KKwkgICBzZGFfbyA9IDEnYjE7CisJICAgc3RhdGUgPSBpZGxlOworCWVuZAorCisJLy8gZ2VuZXJhdGUgc2hpZnQgcmVnaXN0ZXIKKwlhbHdheXMgQChwb3NlZGdlIHNjbCkKKwkgIHNyIDw9ICMxIHtzcls2OjBdLHNkYX07CisKKwkvL2RldGVjdCBteV9hZGRyZXNzCisJYXNzaWduIG15X2FkciA9IChzcls3OjFdID09IEkyQ19BRFIpOworCS8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgYSBnZW5lcmljIGFzc2lnbiwgYnV0IHJhdGhlcgorCS8vIHF1YWxpZmllZCBvbiBhZGRyZXNzIHRyYW5zZmVyIHBoYXNlIGFuZCBwcm9iYWJseSByZXNldCBieSBzdG9wCisKKwkvL2dlbmVyYXRlIGJpdC1jb3VudGVyCisJYWx3YXlzIEAocG9zZWRnZSBzY2wpCisJICBpZihsZCkKKwkgICAgYml0X2NudCA8PSAjMSAzJ2IxMTE7CisJICBlbHNlCisJICAgIGJpdF9jbnQgPD0gIzEgYml0X2NudCAtIDMnaDE7CisKKwkvL2dlbmVyYXRlIGFjY2VzcyBkb25lIHNpZ25hbAorCWFzc2lnbiBhY2NfZG9uZSA9ICEofGJpdF9jbnQpOworCisJLy8gZ2VuZXJhdGUgZGVsYXllZCB2ZXJzaW9uIG9mIHNkYQorCS8vIHRoaXMgbW9kZWwgYXNzdW1lcyBhIGhvbGQgdGltZSBmb3Igc2RhIGFmdGVyIHRoZSBmYWxsaW5nIGVkZ2Ugb2Ygc2NsLgorCS8vIEFjY29yZGluZyB0byB0aGUgUGhpbGxpcHMgaTJjIHNwZWMsIHRoZXJlIHMvYiBhIDAgbnMgaG9sZCB0aW1lIGZvciBzZGEKKwkvLyB3aXRoIHJlZ2FyZHMgdG8gc2NsLiBJZiB0aGUgZGF0YSBjaGFuZ2VzIGNvaW5jaWRlbnQgd2l0aCB0aGUgY2xvY2ssIHRoZQorCS8vIGFja25vd2xlZGdlIGlzIG1pc3NlZAorCS8vIEZpeCBieSBNaWNoYWVsIFNvc25vc2tpCisJYXNzaWduICMxIHNkYV9kbHkgPSBzZGE7CisKKworCS8vZGV0ZWN0IHN0YXJ0IGNvbmRpdGlvbgorCWFsd2F5cyBAKG5lZ2VkZ2Ugc2RhKQorCSAgaWYoc2NsKQorCSAgICBiZWdpbgorCSAgICAgICAgc3RhICAgPD0gIzEgMSdiMTsKKwkJZF9zdGEgPD0gIzEgMSdiMDsKKwkJc3RvICAgPD0gIzEgMSdiMDsKKworCSAgICAgICAgaWYoZGVidWcpCisJICAgICAgICAgICRkaXNwbGF5KCJERUJVRyBpMmNfc2xhdmU7IHN0YXJ0IGNvbmRpdGlvbiBkZXRlY3RlZCBhdCAldCIsICR0aW1lKTsKKwkgICAgZW5kCisJICBlbHNlCisJICAgIHN0YSA8PSAjMSAxJ2IwOworCisJYWx3YXlzIEAocG9zZWRnZSBzY2wpCisJICBkX3N0YSA8PSAjMSBzdGE7CisKKwkvLyBkZXRlY3Qgc3RvcCBjb25kaXRpb24KKwlhbHdheXMgQChwb3NlZGdlIHNkYSkKKwkgIGlmKHNjbCkKKwkgICAgYmVnaW4KKwkgICAgICAgc3RhIDw9ICMxIDEnYjA7CisJICAgICAgIHN0byA8PSAjMSAxJ2IxOworCisJICAgICAgIGlmKGRlYnVnKQorCSAgICAgICAgICRkaXNwbGF5KCJERUJVRyBpMmNfc2xhdmU7IHN0b3AgY29uZGl0aW9uIGRldGVjdGVkIGF0ICV0IiwgJHRpbWUpOworCSAgICBlbmQKKwkgIGVsc2UKKwkgICAgc3RvIDw9ICMxIDEnYjA7CisKKwkvL2dlbmVyYXRlIGkyY19yZXNldCBzaWduYWwKKwlhc3NpZ24gaTJjX3Jlc2V0ID0gc3RhIHx8IHN0bzsKKworCS8vIGdlbmVyYXRlIHN0YXRlbWFjaGluZQorCWFsd2F5cyBAKG5lZ2VkZ2Ugc2NsIG9yIHBvc2VkZ2Ugc3RvKQorCSAgaWYgKHN0byB8fCAoc3RhICYmICFkX3N0YSkgKQorCSAgICBiZWdpbgorCSAgICAgICAgc3RhdGUgPD0gIzEgaWRsZTsgLy8gcmVzZXQgc3RhdGVtYWNoaW5lCisKKwkgICAgICAgIHNkYV9vIDw9ICMxIDEnYjE7CisJICAgICAgICBsZCAgICA8PSAjMSAxJ2IxOworCSAgICBlbmQKKwkgIGVsc2UKKwkgICAgYmVnaW4KKwkgICAgICAgIC8vIGluaXRpYWwgc2V0dGluZ3MKKwkgICAgICAgIHNkYV9vIDw9ICMxIDEnYjE7CisJICAgICAgICBsZCAgICA8PSAjMSAxJ2IwOworCisJICAgICAgICBjYXNlKHN0YXRlKSAvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgICAgICAgICAgIGlkbGU6IC8vIGlkbGUgc3RhdGUKKwkgICAgICAgICAgICAgIGlmIChhY2NfZG9uZSAmJiBteV9hZHIpCisJICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICBzdGF0ZSA8PSAjMSBzbGF2ZV9hY2s7CisJICAgICAgICAgICAgICAgICAgICBydyA8PSAjMSBzclswXTsKKwkgICAgICAgICAgICAgICAgICAgIHNkYV9vIDw9ICMxIDEnYjA7IC8vIGdlbmVyYXRlIGkyY19hY2sKKworCSAgICAgICAgICAgICAgICAgICAgIzI7CisJICAgICAgICAgICAgICAgICAgICBpZihkZWJ1ZyAmJiBydykKKwkgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkRFQlVHIGkyY19zbGF2ZTsgY29tbWFuZCBieXRlIHJlY2VpdmVkIChyZWFkKSBhdCAldCIsICR0aW1lKTsKKwkgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnICYmICFydykKKwkgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkRFQlVHIGkyY19zbGF2ZTsgY29tbWFuZCBieXRlIHJlY2VpdmVkICh3cml0ZSkgYXQgJXQiLCAkdGltZSk7CisKKwkgICAgICAgICAgICAgICAgICAgIGlmKHJ3KQorCSAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtX2RvIDw9ICMxIG1lbVttZW1fYWRyXTsKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGVidWcpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMiAkZGlzcGxheSgiREVCVUcgaTJjX3NsYXZlOyBkYXRhIGJsb2NrIHJlYWQgJXggZnJvbSBhZGRyZXNzICV4ICgxKSIsIG1lbV9kbywgbWVtX2Fkcik7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMiAkZGlzcGxheSgiREVCVUcgaTJjX3NsYXZlOyBtZW1jaGVjayBbJXhdPSV4IiwgbWVtX2FkciwgbWVtW21lbV9hZHJdKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgICAgIGVuZAorCSAgICAgICAgICAgICAgICBlbmQKKworCSAgICAgICAgICAgIHNsYXZlX2FjazoKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgaWYocncpCisJICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlIDw9ICMxIGRhdGE7CisJICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgbWVtX2RvWzddOworCSAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZ2V0X21lbV9hZHI7CisKKwkgICAgICAgICAgICAgICAgICBsZCAgICA8PSAjMSAxJ2IxOworCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgICAgICBnZXRfbWVtX2FkcjogLy8gd2FpdCBmb3IgbWVtb3J5IGFkZHJlc3MKKwkgICAgICAgICAgICAgIGlmKGFjY19kb25lKQorCSAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZ21hX2FjazsKKwkgICAgICAgICAgICAgICAgICAgIG1lbV9hZHIgPD0gIzEgc3I7IC8vIHN0b3JlIG1lbW9yeSBhZGRyZXNzCisJICAgICAgICAgICAgICAgICAgICBzZGFfbyA8PSAjMSAhKHNyIDw9IDI1NSk7IC8vIGdlbmVyYXRlIGkyY19hY2ssIGZvciB2YWxpZCBhZGRyZXNzCisKKwkgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnKQorCSAgICAgICAgICAgICAgICAgICAgICAjMSAkZGlzcGxheSgiREVCVUcgaTJjX3NsYXZlOyBhZGRyZXNzIHJlY2VpdmVkLiBhZHI9JXgsIGFjaz0lYiIsIHNyLCBzZGFfbyk7CisJICAgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgZ21hX2FjazoKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZGF0YTsKKwkgICAgICAgICAgICAgICAgICBsZCAgICA8PSAjMSAxJ2IxOworCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgICAgICBkYXRhOiAvLyByZWNlaXZlIG9yIGRyaXZlIGRhdGEKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgaWYocncpCisJICAgICAgICAgICAgICAgICAgICBzZGFfbyA8PSAjMSBtZW1fZG9bN107CisKKwkgICAgICAgICAgICAgICAgICBpZihhY2NfZG9uZSkKKwkgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZGF0YV9hY2s7CisJICAgICAgICAgICAgICAgICAgICAgICAgbWVtX2FkciA8PSAjMiBtZW1fYWRyICsgOCdoMTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBzZGFfbyA8PSAjMSAocncgJiYgKG1lbV9hZHIgPD0gMjU1KSApOyAvLyBzZW5kIGFjayBvbiB3cml0ZSwgcmVjZWl2ZSBhY2sgb24gcmVhZAorCisJICAgICAgICAgICAgICAgICAgICAgICAgaWYocncpCisJICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMzIG1lbV9kbyA8PSBtZW1bbWVtX2Fkcl07CisKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkZWJ1ZykKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM1ICRkaXNwbGF5KCJERUJVRyBpMmNfc2xhdmU7IGRhdGEgYmxvY2sgcmVhZCAleCBmcm9tIGFkZHJlc3MgJXggKDIpIiwgbWVtX2RvLCBtZW1fYWRyKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXJ3KQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1bIG1lbV9hZHIgXSA8PSAjMSBzcjsgLy8gc3RvcmUgZGF0YSBpbiBtZW1vcnkKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzIgJGRpc3BsYXkoIkRFQlVHIGkyY19zbGF2ZTsgZGF0YSBibG9jayB3cml0ZSAleCB0byBhZGRyZXNzICV4Iiwgc3IsIG1lbV9hZHIpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgZGF0YV9hY2s6CisJICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgIGxkIDw9ICMxIDEnYjE7CisKKwkgICAgICAgICAgICAgICAgICBpZihydykKKwkgICAgICAgICAgICAgICAgICAgIGlmKHNyWzBdKSAvLyByZWFkIG9wZXJhdGlvbiAmJiBtYXN0ZXIgc2VuZCBOQUNLCisJICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA8PSAjMSBpZGxlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgMSdiMTsKKwkgICAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA8PSAjMSBkYXRhOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgbWVtX2RvWzddOworCSAgICAgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlIDw9ICMxIGRhdGE7CisJICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgMSdiMTsKKwkgICAgICAgICAgICAgICAgICAgIGVuZAorCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgIGVuZGNhc2UKKwkgICAgZW5kCisKKwkvLyByZWFkIGRhdGEgZnJvbSBtZW1vcnkKKwlhbHdheXMgQChwb3NlZGdlIHNjbCkKKwkgIGlmKCFhY2NfZG9uZSAmJiBydykKKwkgICAgbWVtX2RvIDw9ICMxIHttZW1fZG9bNjowXSwgMSdiMX07IC8vIGluc2VydCAxJ2IxIGZvciBob3N0IGFjayBnZW5lcmF0aW9uCisKKwkvLyBnZW5lcmF0ZSB0cmktc3RhdGVzCisJYXNzaWduIHNkYSA9IHNkYV9vID8gMSdieiA6IDEnYjA7CisKKworCS8vCisJLy8gVGltaW5nIGNoZWNrcworCS8vCisKKwl3aXJlIHRzdF9zdG8gPSBzdG87CisJd2lyZSB0c3Rfc3RhID0gc3RhOworCisJc3BlY2lmeQorCSAgc3BlY3BhcmFtIG5vcm1hbF9zY2xfbG93ICA9IDQ3MDAsCisJICAgICAgICAgICAgbm9ybWFsX3NjbF9oaWdoID0gNDAwMCwKKwkgICAgICAgICAgICBub3JtYWxfdHN1X3N0YSAgPSA0NzAwLAorCSAgICAgICAgICAgIG5vcm1hbF90aGRfc3RhICA9IDQwMDAsCisJICAgICAgICAgICAgbm9ybWFsX3RzdV9zdG8gID0gNDAwMCwKKwkgICAgICAgICAgICBub3JtYWxfdGJ1ZiAgICAgPSA0NzAwLAorCisJICAgICAgICAgICAgZmFzdF9zY2xfbG93ICA9IDEzMDAsCisJICAgICAgICAgICAgZmFzdF9zY2xfaGlnaCA9ICA2MDAsCisJICAgICAgICAgICAgZmFzdF90c3Vfc3RhICA9IDEzMDAsCisJICAgICAgICAgICAgZmFzdF90aGRfc3RhICA9ICA2MDAsCisJICAgICAgICAgICAgZmFzdF90c3Vfc3RvICA9ICA2MDAsCisJICAgICAgICAgICAgZmFzdF90YnVmICAgICA9IDEzMDA7CisKKwkgICR3aWR0aChuZWdlZGdlIHNjbCwgbm9ybWFsX3NjbF9sb3cpOyAgLy8gc2NsIGxvdyB0aW1lCisJICAkd2lkdGgocG9zZWRnZSBzY2wsIG5vcm1hbF9zY2xfaGlnaCk7IC8vIHNjbCBoaWdoIHRpbWUKKworCSAgJHNldHVwKHBvc2VkZ2Ugc2NsLCBuZWdlZGdlIHNkYSAmJiYgc2NsLCBub3JtYWxfdHN1X3N0YSk7IC8vIHNldHVwIHN0YXJ0CisJICAkc2V0dXAobmVnZWRnZSBzZGEgJiYmIHNjbCwgbmVnZWRnZSBzY2wsIG5vcm1hbF90aGRfc3RhKTsgLy8gaG9sZCBzdGFydAorCSAgJHNldHVwKHBvc2VkZ2Ugc2NsLCBwb3NlZGdlIHNkYSAmJiYgc2NsLCBub3JtYWxfdHN1X3N0byk7IC8vIHNldHVwIHN0b3AKKworCSAgJHNldHVwKHBvc2VkZ2UgdHN0X3N0YSwgcG9zZWRnZSB0c3Rfc3RvLCBub3JtYWxfdGJ1Zik7IC8vIHN0b3AgdG8gc3RhcnQgdGltZQorCWVuZHNwZWNpZnkKKworZW5kbW9kdWxlCisKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9tb2RlbC9tdDQ4bGM4bThhMi52IGIvdmVyaWxvZy9kdi9tb2RlbC9tdDQ4bGM4bThhMi52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmMzA5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L21vZGVsL210NDhsYzhtOGEyLnYKQEAgLTAsMCArMSw5OTIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAxMiBNaWNyb24gVGVjaG5vbG9neSwgSW5jLgorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgIEZpbGUgTmFtZTogIE1UNDhMQzhNOEEyLlYgIAorKiAgICAgIFZlcnNpb246ICAwLjBmCisqICAgICAgICAgRGF0ZTogIEp1bHkgOHRoLCAxOTk5CisqICAgICAgICBNb2RlbDogIEJVUyBGdW5jdGlvbmFsCisqICAgIFNpbXVsYXRvcjogIE1vZGVsIFRlY2hub2xvZ3kgKFBDIHZlcnNpb24gNS4yZSBQRSkKKyoKKyogRGVwZW5kZW5jaWVzOiAgTm9uZQorKgorKiAgICAgICBBdXRob3I6ICBTb24gUC4gSHV5bmgKKyogICAgICAgIEVtYWlsOiAgc3BodXluaEBtaWNyb24uY29tCisqICAgICAgICBQaG9uZTogICgyMDgpIDM2OC0zODI1CisqICAgICAgQ29tcGFueTogIE1pY3JvbiBUZWNobm9sb2d5LCBJbmMuCisqICAgICAgICBNb2RlbDogIE1UNDhMQzhNMTZBMiAoMk1lZyB4IDggeCA0IEJhbmtzKQorKgorKiAgRGVzY3JpcHRpb246ICBNaWNyb24gMTI4TWIgU0RSQU0gVmVyaWxvZyBtb2RlbAorKgorKiAgIExpbWl0YXRpb246ICAtIERvZXNuJ3QgY2hlY2sgZm9yIDQwOTYgY3ljbGUgcmVmcmVzaAorKgorKiAgICAgICAgIE5vdGU6ICAtIFNldCBzaW11bGF0b3IgcmVzb2x1dGlvbiB0byAicHMiIGFjY3VyYWN5CisqICAgICAgICAgICAgICAgIC0gU2V0IERlYnVnID0gMCB0byBkaXNhYmxlICRkaXNwbGF5IG1lc3NhZ2VzCisqCisqICAgRGlzY2xhaW1lcjogIFRIRVNFIERFU0lHTlMgQVJFIFBST1ZJREVEICJBUyBJUyIgV0lUSCBOTyBXQVJSQU5UWSAKKyogICAgICAgICAgICAgICAgV0hBVFNPRVZFUiBBTkQgTUlDUk9OIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIAorKiAgICAgICAgICAgICAgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUgorKiAgICAgICAgICAgICAgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgQUdBSU5TVCBJTkZSSU5HRU1FTlQuCisqCisqICAgICAgICAgICAgICAgIENvcHlyaWdodCCpIDE5OTggTWljcm9uIFNlbWljb25kdWN0b3IgUHJvZHVjdHMsIEluYy4KKyogICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlYXJ2ZWQKKyoKKyogUmV2ICAgQXV0aG9yICAgICAgICAgIFBob25lICAgICAgICAgRGF0ZSAgICAgICAgQ2hhbmdlcworKiAtLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogMC4wZiAgU29uIEh1eW5oICAgICAgIDIwOC0zNjgtMzgyNSAgMDcvMDgvMTk5OSAgLSBGaXggdFdSID0gMSBDbGsgKyA3LjUgbnMgKEF1dG8pCisqICAgICAgIE1pY3JvbiBUZWNobm9sb2d5IEluYy4gICAgICAgICAgICAgICAgICAgIC0gRml4IHRXUiA9IDE1IG5zIChNYW51YWwpCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRml4IHRSUCAoQXV0b3ByZWNoYXJnZSB0byBBdXRvUmVmcmVzaCkKKyoKKyogMC4wYSAgU29uIEh1eW5oICAgICAgIDIwOC0zNjgtMzgyNSAgMDUvMTMvMTk5OCAgLSBGaXJzdCBSZWxlYXNlIChmcm9tIDY0TWIgcmV2IDAuMGUpCisqICAgICAgIE1pY3JvbiBUZWNobm9sb2d5IEluYy4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2B0aW1lc2NhbGUgMW5zIC8gMTAwcHMKKworbW9kdWxlIG10NDhsYzhtOGEyIChEcSwgQWRkciwgQmEsIENsaywgQ2tlLCBDc19uLCBSYXNfbiwgQ2FzX24sIFdlX24sIERxbSk7CisKKyAgICBwYXJhbWV0ZXIgYWRkcl9iaXRzID0gICAgICAxMjsKKyAgICBwYXJhbWV0ZXIgZGF0YV9iaXRzID0gICAgICA4OworICAgIHBhcmFtZXRlciBjb2xfYml0cyAgPSAgICAgICA5OworICAgIHBhcmFtZXRlciBtZW1fc2l6ZXMgPSAyMDk3MTUxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyIE1lZworCisgICAgaW5vdXQgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gRHE7CisgICAgaW5wdXQgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gQWRkcjsKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgWzEgOiAwXSBCYTsKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDbGs7CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgQ2tlOworICAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgIENzX247CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgUmFzX247CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgQ2FzX247CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgV2VfbjsKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgWzAgOiAwXSBEcW07CisKKyAgICByZWcgICAgICAgW2RhdGFfYml0cyAtIDEgOiAwXSBCYW5rMCBbMCA6IG1lbV9zaXplc107CisgICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazEgWzAgOiBtZW1fc2l6ZXNdOworICAgIHJlZyAgICAgICBbZGF0YV9iaXRzIC0gMSA6IDBdIEJhbmsyIFswIDogbWVtX3NpemVzXTsKKyAgICByZWcgICAgICAgW2RhdGFfYml0cyAtIDEgOiAwXSBCYW5rMyBbMCA6IG1lbV9zaXplc107CisKKyAgICByZWcgICAgICAgICAgICAgICAgICAgWzEgOiAwXSBCYW5rX2FkZHIgWzAgOiAzXTsgICAgICAgICAgICAgICAgLy8gQmFuayBBZGRyZXNzIFBpcGVsaW5lCisgICAgcmVnICAgICAgICBbY29sX2JpdHMgLSAxIDogMF0gQ29sX2FkZHIgWzAgOiAzXTsgICAgICAgICAgICAgICAgIC8vIENvbHVtbiBBZGRyZXNzIFBpcGVsaW5lCisgICAgcmVnICAgICAgICAgICAgICAgICAgIFszIDogMF0gQ29tbWFuZCBbMCA6IDNdOyAgICAgICAgICAgICAgICAgIC8vIENvbW1hbmQgT3BlcmF0aW9uIFBpcGVsaW5lCisgICAgcmVnICAgICAgICAgICAgICAgICAgIFswIDogMF0gRHFtX3JlZzAsIERxbV9yZWcxOyAgICAgICAgICAgICAgIC8vIERRTSBPcGVyYXRpb24gUGlwZWxpbmUKKyAgICByZWcgICAgICAgW2FkZHJfYml0cyAtIDEgOiAwXSBCMF9yb3dfYWRkciwgQjFfcm93X2FkZHIsIEIyX3Jvd19hZGRyLCBCM19yb3dfYWRkcjsKKworICAgIHJlZyAgICAgICBbYWRkcl9iaXRzIC0gMSA6IDBdIE1vZGVfcmVnOworICAgIHJlZyAgICAgICBbZGF0YV9iaXRzIC0gMSA6IDBdIERxX3JlZywgRHFfZHFtOworICAgIHJlZyAgICAgICAgW2NvbF9iaXRzIC0gMSA6IDBdIENvbF90ZW1wLCBCdXJzdF9jb3VudGVyOworCisgICAgcmVnICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0X2IwLCBBY3RfYjEsIEFjdF9iMiwgQWN0X2IzOyAgIC8vIEJhbmsgQWN0aXZhdGUKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBQY19iMCwgUGNfYjEsIFBjX2IyLCBQY19iMzsgICAgICAgLy8gQmFuayBQcmVjaGFyZ2UKKworICAgIHJlZyAgICAgICAgICAgICAgICAgICBbMSA6IDBdIEJhbmtfcHJlY2hhcmdlICAgICBbMCA6IDNdOyAgICAgICAvLyBQcmVjaGFyZ2UgQ29tbWFuZAorICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIEExMF9wcmVjaGFyZ2UgICAgICBbMCA6IDNdOyAgICAgICAvLyBBZGRyWzEwXSA9IDEgKEFsbCBiYW5rcykKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZSAgICAgWzAgOiAzXTsgICAgICAgLy8gUlcgQXV0b1ByZWNoYXJnZSAoQmFuaykKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkX3ByZWNoYXJnZSAgICAgWzAgOiAzXTsgICAgICAgLy8gUiAgQXV0b1ByZWNoYXJnZQorICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZSAgICBbMCA6IDNdOyAgICAgICAvLyAgVyBBdXRvUHJlY2hhcmdlCisgICAgaW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlICAgIFswIDogM107ICAgICAgIC8vIFJXIEF1dG9QcmVjaGFyZ2UgKENvdW50ZXIpCisgICAgcmVnICAgICAgICAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWQgIFswIDogM107ICAgICAgIC8vIFJXIEludGVycnVwdCBSZWFkIHdpdGggQXV0byBQcmVjaGFyZ2UKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfd3JpdGUgWzAgOiAzXTsgICAgICAgLy8gUlcgSW50ZXJydXB0IFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UKKworICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlOworICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZTsKKworICAgIHJlZyAgICAgICAgICAgICAgICAgICBbMSA6IDBdIEJhbmssIFByZXZpb3VzX2Jhbms7CisgICAgcmVnICAgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gUm93OworICAgIHJlZyAgICAgICAgW2NvbF9iaXRzIC0gMSA6IDBdIENvbCwgQ29sX2Jyc3Q7CisKKyAgICAvLyBJbnRlcm5hbCBzeXN0ZW0gY2xvY2sKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBDa2VaLCBTeXNfY2xrOworCisgICAgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfZGV0ZWN0ZWQ7CisKKyAgICAvLyBDb21tYW5kcyBEZWNvZGUKKyAgICB3aXJlICAgICAgQWN0aXZlX2VuYWJsZSAgICA9IH5Dc19uICYgflJhc19uICYgIENhc19uICYgIFdlX247CisgICAgd2lyZSAgICAgIEFyZWZfZW5hYmxlICAgICAgPSB+Q3NfbiAmIH5SYXNfbiAmIH5DYXNfbiAmICBXZV9uOworICAgIHdpcmUgICAgICBCdXJzdF90ZXJtICAgICAgID0gfkNzX24gJiAgUmFzX24gJiAgQ2FzX24gJiB+V2VfbjsKKyAgICB3aXJlICAgICAgTW9kZV9yZWdfZW5hYmxlICA9IH5Dc19uICYgflJhc19uICYgfkNhc19uICYgfldlX247CisgICAgd2lyZSAgICAgIFByZWNoX2VuYWJsZSAgICAgPSB+Q3NfbiAmIH5SYXNfbiAmICBDYXNfbiAmIH5XZV9uOworICAgIHdpcmUgICAgICBSZWFkX2VuYWJsZSAgICAgID0gfkNzX24gJiAgUmFzX24gJiB+Q2FzX24gJiAgV2VfbjsKKyAgICB3aXJlICAgICAgV3JpdGVfZW5hYmxlICAgICA9IH5Dc19uICYgIFJhc19uICYgfkNhc19uICYgfldlX247CisKKyAgICAvLyBCdXJzdCBMZW5ndGggRGVjb2RlCisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF8xICAgPSB+TW9kZV9yZWdbMl0gJiB+TW9kZV9yZWdbMV0gJiB+TW9kZV9yZWdbMF07CisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF8yICAgPSB+TW9kZV9yZWdbMl0gJiB+TW9kZV9yZWdbMV0gJiAgTW9kZV9yZWdbMF07CisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF80ICAgPSB+TW9kZV9yZWdbMl0gJiAgTW9kZV9yZWdbMV0gJiB+TW9kZV9yZWdbMF07CisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF84ICAgPSB+TW9kZV9yZWdbMl0gJiAgTW9kZV9yZWdbMV0gJiAgTW9kZV9yZWdbMF07CisKKyAgICAvLyBDQVMgTGF0ZW5jeSBEZWNvZGUKKyAgICB3aXJlICAgICAgQ2FzX2xhdGVuY3lfMiAgICA9IH5Nb2RlX3JlZ1s2XSAmICBNb2RlX3JlZ1s1XSAmIH5Nb2RlX3JlZ1s0XTsKKyAgICB3aXJlICAgICAgQ2FzX2xhdGVuY3lfMyAgICA9IH5Nb2RlX3JlZ1s2XSAmICBNb2RlX3JlZ1s1XSAmICBNb2RlX3JlZ1s0XTsKKworYGlmZGVmIFZFUkJPU0UKKyAgICB3aXJlICAgICAgRGVidWcgICAgICAgICAgICA9IDEnYjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBtZXNzYWdlcyA6IDEgPSBPbgorYGVsc2UKKyAgICB3aXJlICAgICAgRGVidWcgICAgICAgICAgICA9IDEnYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBtZXNzYWdlcyA6IDEgPSBPbgorYGVuZGlmCisgICAgLy8gV3JpdGUgQnVyc3QgTW9kZQorICAgIHdpcmUgICAgICBXcml0ZV9idXJzdF9tb2RlID0gTW9kZV9yZWdbOV07CisKKyAgICB3aXJlICAgICAgRHFfY2hrICAgICAgICAgICA9IFN5c19jbGsgJiBEYXRhX2luX2VuYWJsZTsgICAgICAvLyBDaGVjayBzZXR1cC9ob2xkIHRpbWUgZm9yIERRCisKKyAgICBhc3NpZ24gICAgRHEgICAgICAgICAgICAgICA9IERxX3JlZzsgICAgICAgICAgICAgICAgICAgICAgICAvLyBEUSBidWZmZXIKKworICAgIC8vIENvbW1hbmRzIE9wZXJhdGlvbgorICAgIGBkZWZpbmUgICBBQ1QgICAgICAgMAorICAgIGBkZWZpbmUgICBOT1AgICAgICAgMQorICAgIGBkZWZpbmUgICBSRUFEICAgICAgMgorICAgIGBkZWZpbmUgICBSRUFEX0EgICAgMworICAgIGBkZWZpbmUgICBTRFJBTV9XUklURSAgICAgNAorICAgIGBkZWZpbmUgICBXUklURV9BICAgNQorICAgIGBkZWZpbmUgICBTRFJBTV9QUkVDSCAgICAgNgorICAgIGBkZWZpbmUgICBTRFJBTV9BX1JFRiAgICAgNworICAgIGBkZWZpbmUgICBTRFJBTV9CU1QgICAgICAgOAorICAgIGBkZWZpbmUgICBTRFJBTV9MTVIgICAgICAgOQorCisgICAgLy8gVGltaW5nIFBhcmFtZXRlcnMgZm9yIC03NSAoUEMxMzMpIGFuZCBDQVMgTGF0ZW5jeSA9IDIKKyAgICBwYXJhbWV0ZXIgdEFDICA9ICAgNi4wOworICAgIHBhcmFtZXRlciB0SFogID0gICA3LjA7CisgICAgcGFyYW1ldGVyIHRPSCAgPSAgIDIuNzsKKyAgICBwYXJhbWV0ZXIgdE1SRCA9ICAgMi4wOyAgICAgLy8gMiBDbGsgQ3ljbGVzCisgICAgcGFyYW1ldGVyIHRSQVMgPSAgNDQuMDsKKyAgICBwYXJhbWV0ZXIgdFJDICA9ICA2Ni4wOworICAgIHBhcmFtZXRlciB0UkNEID0gIDIwLjA7CisgICAgcGFyYW1ldGVyIHRSUCAgPSAgMjAuMDsKKyAgICBwYXJhbWV0ZXIgdFJSRCA9ICAxNS4wOworICAgIHBhcmFtZXRlciB0V1JhID0gICA3LjU7ICAgICAvLyBBMiBWZXJzaW9uIC0gQXV0byBwcmVjaGFyZ2UgbW9kZSBvbmx5ICgxIENsayArIDcuNSBucykKKyAgICBwYXJhbWV0ZXIgdFdScCA9ICAxNS4wOyAgICAgLy8gQTIgVmVyc2lvbiAtIFByZWNoYXJnZSBtb2RlIG9ubHkgKDE1IG5zKQorCisgICAgLy8gVGltaW5nIENoZWNrIHZhcmlhYmxlCisgICAgaW50ZWdlciAgIE1SRF9jaGs7CisgICAgaW50ZWdlciAgIFdSX2NvdW50ZXIgWzAgOiAzXTsKKyAgICB0aW1lICAgICAgV1JfY2hrIFswIDogM107CisgICAgdGltZSAgICAgIFJDX2NoaywgUlJEX2NoazsKKyAgICB0aW1lICAgICAgUkFTX2NoazAsIFJBU19jaGsxLCBSQVNfY2hrMiwgUkFTX2NoazM7CisgICAgdGltZSAgICAgIFJDRF9jaGswLCBSQ0RfY2hrMSwgUkNEX2NoazIsIFJDRF9jaGszOworICAgIHRpbWUgICAgICBSUF9jaGswLCBSUF9jaGsxLCBSUF9jaGsyLCBSUF9jaGszOworCisgICAgaW5pdGlhbCBiZWdpbgorICAgICAgCisgICAgICAgIERxX3JlZyA9IHtkYXRhX2JpdHN7MSdien19OworICAgICAgICB7RGF0YV9pbl9lbmFibGUsIERhdGFfb3V0X2VuYWJsZX0gPSAwOworICAgICAgICB7QWN0X2IwLCBBY3RfYjEsIEFjdF9iMiwgQWN0X2IzfSA9IDQnYjAwMDA7CisgICAgICAgIHtQY19iMCwgUGNfYjEsIFBjX2IyLCBQY19iM30gPSA0J2IwMDAwOworICAgICAgICB7V1JfY2hrWzBdLCBXUl9jaGtbMV0sIFdSX2Noa1syXSwgV1JfY2hrWzNdfSA9IDA7CisgICAgICAgIHtXUl9jb3VudGVyWzBdLCBXUl9jb3VudGVyWzFdLCBXUl9jb3VudGVyWzJdLCBXUl9jb3VudGVyWzNdfSA9IDA7CisgICAgICAgIHtSV19pbnRlcnJ1cHRfcmVhZFswXSwgUldfaW50ZXJydXB0X3JlYWRbMV0sIFJXX2ludGVycnVwdF9yZWFkWzJdLCBSV19pbnRlcnJ1cHRfcmVhZFszXX0gPSAwOworICAgICAgICB7UldfaW50ZXJydXB0X3dyaXRlWzBdLCBSV19pbnRlcnJ1cHRfd3JpdGVbMV0sIFJXX2ludGVycnVwdF93cml0ZVsyXSwgUldfaW50ZXJydXB0X3dyaXRlWzNdfSA9IDA7CisgICAgICAgIHtNUkRfY2hrLCBSQ19jaGssIFJSRF9jaGt9ID0gMDsKKyAgICAgICAge1JBU19jaGswLCBSQVNfY2hrMSwgUkFTX2NoazIsIFJBU19jaGszfSA9IDA7CisgICAgICAgIHtSQ0RfY2hrMCwgUkNEX2NoazEsIFJDRF9jaGsyLCBSQ0RfY2hrM30gPSAwOworICAgICAgICB7UlBfY2hrMCwgUlBfY2hrMSwgUlBfY2hrMiwgUlBfY2hrM30gPSAwOworICAgICAgICAkdGltZWZvcm1hdCAoLTksIDAsICIgbnMiLCAxMik7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMC50eHQiLCBCYW5rMCk7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMS50eHQiLCBCYW5rMSk7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMi50eHQiLCBCYW5rMik7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMy50eHQiLCBCYW5rMyk7CisgICAgZW5kCisKKyAgICAvLyBTeXN0ZW0gY2xvY2sgZ2VuZXJhdG9yCisgICAgYWx3YXlzIGJlZ2luCisgICAgICAgIEAgKHBvc2VkZ2UgQ2xrKSBiZWdpbgorICAgICAgICAgICAgU3lzX2NsayA9IENrZVo7CisgICAgICAgICAgICBDa2VaID0gQ2tlOworICAgICAgICBlbmQKKyAgICAgICAgQCAobmVnZWRnZSBDbGspIGJlZ2luCisgICAgICAgICAgICBTeXNfY2xrID0gMSdiMDsKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBhbHdheXMgQCAocG9zZWRnZSBTeXNfY2xrKSBiZWdpbgorICAgICAgICAvLyBJbnRlcm5hbCBDb21tYW1kIFBpcGVsaW5lZAorICAgICAgICBDb21tYW5kWzBdID0gQ29tbWFuZFsxXTsKKyAgICAgICAgQ29tbWFuZFsxXSA9IENvbW1hbmRbMl07CisgICAgICAgIENvbW1hbmRbMl0gPSBDb21tYW5kWzNdOworICAgICAgICBDb21tYW5kWzNdID0gYE5PUDsKKworICAgICAgICBDb2xfYWRkclswXSA9IENvbF9hZGRyWzFdOworICAgICAgICBDb2xfYWRkclsxXSA9IENvbF9hZGRyWzJdOworICAgICAgICBDb2xfYWRkclsyXSA9IENvbF9hZGRyWzNdOworICAgICAgICBDb2xfYWRkclszXSA9IHtjb2xfYml0c3sxJ2IwfX07CisKKyAgICAgICAgQmFua19hZGRyWzBdID0gQmFua19hZGRyWzFdOworICAgICAgICBCYW5rX2FkZHJbMV0gPSBCYW5rX2FkZHJbMl07CisgICAgICAgIEJhbmtfYWRkclsyXSA9IEJhbmtfYWRkclszXTsKKyAgICAgICAgQmFua19hZGRyWzNdID0gMidiMDsKKworICAgICAgICBCYW5rX3ByZWNoYXJnZVswXSA9IEJhbmtfcHJlY2hhcmdlWzFdOworICAgICAgICBCYW5rX3ByZWNoYXJnZVsxXSA9IEJhbmtfcHJlY2hhcmdlWzJdOworICAgICAgICBCYW5rX3ByZWNoYXJnZVsyXSA9IEJhbmtfcHJlY2hhcmdlWzNdOworICAgICAgICBCYW5rX3ByZWNoYXJnZVszXSA9IDInYjA7CisKKyAgICAgICAgQTEwX3ByZWNoYXJnZVswXSA9IEExMF9wcmVjaGFyZ2VbMV07CisgICAgICAgIEExMF9wcmVjaGFyZ2VbMV0gPSBBMTBfcHJlY2hhcmdlWzJdOworICAgICAgICBBMTBfcHJlY2hhcmdlWzJdID0gQTEwX3ByZWNoYXJnZVszXTsKKyAgICAgICAgQTEwX3ByZWNoYXJnZVszXSA9IDEnYjA7CisKKyAgICAgICAgLy8gRHFtIHBpcGVsaW5lIGZvciBSZWFkCisgICAgICAgIERxbV9yZWcwID0gRHFtX3JlZzE7CisgICAgICAgIERxbV9yZWcxID0gRHFtOworCisgICAgICAgIC8vIFJlYWQgb3IgV3JpdGUgd2l0aCBBdXRvIFByZWNoYXJnZSBDb3VudGVyCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVswXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzBdID0gQ291bnRfcHJlY2hhcmdlWzBdICsgMTsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzFdID0gQ291bnRfcHJlY2hhcmdlWzFdICsgMTsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVsyXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzJdID0gQ291bnRfcHJlY2hhcmdlWzJdICsgMTsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzNdID0gQ291bnRfcHJlY2hhcmdlWzNdICsgMTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgLy8gdE1SRCBDb3VudGVyCisgICAgICAgIE1SRF9jaGsgPSBNUkRfY2hrICsgMTsKKworICAgICAgICAvLyB0V1IgQ291bnRlciBmb3IgV3JpdGUKKyAgICAgICAgV1JfY291bnRlclswXSA9IFdSX2NvdW50ZXJbMF0gKyAxOworICAgICAgICBXUl9jb3VudGVyWzFdID0gV1JfY291bnRlclsxXSArIDE7CisgICAgICAgIFdSX2NvdW50ZXJbMl0gPSBXUl9jb3VudGVyWzJdICsgMTsKKyAgICAgICAgV1JfY291bnRlclszXSA9IFdSX2NvdW50ZXJbM10gKyAxOworCisgICAgICAgIC8vIEF1dG8gUmVmcmVzaAorICAgICAgICBpZiAoQXJlZl9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEFSRUYgOiBBdXRvIFJlZnJlc2giLCAkdGltZSk7CisgICAgICAgICAgICAvLyBBdXRvIFJlZnJlc2ggdG8gQXV0byBSZWZyZXNoCisgICAgICAgICAgICBpZiAoJHRpbWUgLSBSQ19jaGsgPCB0UkMpIGJlZ2luCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkMgdmlvbGF0aW9uIGR1cmluZyBBdXRvIFJlZnJlc2giLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBBdXRvIFJlZnJlc2gKKyAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazAgPCB0UlAgfHwgJHRpbWUgLSBSUF9jaGsxIDwgdFJQIHx8ICR0aW1lIC0gUlBfY2hrMiA8IHRSUCB8fCAkdGltZSAtIFJQX2NoazMgPCB0UlApIGJlZ2luCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlAgdmlvbGF0aW9uIGR1cmluZyBBdXRvIFJlZnJlc2giLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBSZWZyZXNoCisgICAgICAgICAgICBpZiAoUGNfYjAgPT0gMSdiMCB8fCBQY19iMSA9PSAxJ2IwIHx8IFBjX2IyID09IDEnYjAgfHwgUGNfYjMgPT0gMSdiMCkgYmVnaW4KKwkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IEFsbCBiYW5rcyBtdXN0IGJlIFByZWNoYXJnZSBiZWZvcmUgQXV0byBSZWZyZXNoIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBSZWNvcmQgQ3VycmVudCB0UkMgdGltZQorICAgICAgICAgICAgUkNfY2hrID0gJHRpbWU7CisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgLy8gTG9hZCBNb2RlIFJlZ2lzdGVyCisgICAgICAgIGlmIChNb2RlX3JlZ19lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgIC8vIERlY29kZSBDQVMgTGF0ZW5jeSwgQnVyc3QgTGVuZ3RoLCBCdXJzdCBUeXBlLCBhbmQgV3JpdGUgQnVyc3QgTW9kZQorICAgICAgICAgICAgaWYgKFBjX2IwID09IDEnYjEgJiYgUGNfYjEgPT0gMSdiMSAmJiBQY19iMiA9PSAxJ2IxICYmIFBjX2IzID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgTW9kZV9yZWcgPSBBZGRyOworICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IExNUiAgOiBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIENBUyBMYXRlbmN5CisgICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzYgOiA0XSA9PSAzJ2IwMTApCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gMiIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzYgOiA0XSA9PSAzJ2IwMTEpCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gMyIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gUmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgTGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMDApCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gMSIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMDEpCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gMiIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMTApCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gNCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMTEpCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gOCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzMgOiAwXSA9PSA0J2IwMTExKQorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IEZ1bGwiKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IFJlc2VydmVkIik7CisgICAgICAgICAgICAgICAgICAgIC8vIEJ1cnN0IFR5cGUKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFkZHJbM10gPT0gMSdiMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IFR5cGUgICAgICAgPSBTZXF1ZW50aWFsIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFkZHJbM10gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IFR5cGUgICAgICAgPSBJbnRlcmxlYXZlZCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBUeXBlICAgICAgID0gUmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gV3JpdGUgQnVyc3QgTW9kZQorICAgICAgICAgICAgICAgICAgICBpZiAoQWRkcls5XSA9PSAxJ2IwKQorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUgQnVyc3QgTW9kZSA9IFByb2dyYW1tZWQgQnVyc3QgTGVuZ3RoIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFkZHJbOV0gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlIEJ1cnN0IE1vZGUgPSBTaW5nbGUgTG9jYXRpb24gQWNjZXNzIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlIEJ1cnN0IE1vZGUgPSBSZXNlcnZlZCIpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogYWxsIGJhbmtzIG11c3QgYmUgUHJlY2hhcmdlIGJlZm9yZSBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFJFRiB0byBMTVIKKyAgICAgICAgICAgIGlmICgkdGltZSAtIFJDX2NoayA8IHRSQykgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJDIHZpb2xhdGlvbiBkdXJpbmcgTG9hZCBNb2RlIFJlZ2lzdGVyIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBMTVIgdG8gTE1SCisgICAgICAgICAgICBpZiAoTVJEX2NoayA8IHRNUkQpIGJlZ2luCisKKwkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRNUkQgdmlvbGF0aW9uIGR1cmluZyBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIE1SRF9jaGsgPSAwOworICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIC8vIEFjdGl2ZSBCbG9jayAoTGF0Y2ggQmFuayBBZGRyZXNzIGFuZCBSb3cgQWRkcmVzcykKKyAgICAgICAgaWYgKEFjdGl2ZV9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgIGlmIChCYSA9PSAyJ2IwMCAmJiBQY19iMCA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIHtBY3RfYjAsIFBjX2IwfSA9IDInYjEwOworICAgICAgICAgICAgICAgIEIwX3Jvd19hZGRyID0gQWRkciBbYWRkcl9iaXRzIC0gMSA6IDBdOworICAgICAgICAgICAgICAgIFJDRF9jaGswID0gJHRpbWU7CisgICAgICAgICAgICAgICAgUkFTX2NoazAgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBBQ1QgIDogQmFuayA9IDAgUm93ID0gJWQiLCAkdGltZSwgQWRkcik7CisgICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRvIEFjdGl2YXRlIEJhbmsgMAorICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazAgPCB0UlApIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSUCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgMCIsICR0aW1lKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IwMSAmJiBQY19iMSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIHtBY3RfYjEsIFBjX2IxfSA9IDInYjEwOworICAgICAgICAgICAgICAgIEIxX3Jvd19hZGRyID0gQWRkciBbYWRkcl9iaXRzIC0gMSA6IDBdOworICAgICAgICAgICAgICAgIFJDRF9jaGsxID0gJHRpbWU7CisgICAgICAgICAgICAgICAgUkFTX2NoazEgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBBQ1QgIDogQmFuayA9IDEgUm93ID0gJWQiLCAkdGltZSwgQWRkcik7CisgICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRvIEFjdGl2YXRlIEJhbmsgMQorICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazEgPCB0UlApIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlAgdmlvbGF0aW9uIGR1cmluZyBBY3RpdmF0ZSBiYW5rIDEiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTAgJiYgUGNfYjIgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICB7QWN0X2IyLCBQY19iMn0gPSAyJ2IxMDsKKyAgICAgICAgICAgICAgICBCMl9yb3dfYWRkciA9IEFkZHIgW2FkZHJfYml0cyAtIDEgOiAwXTsKKyAgICAgICAgICAgICAgICBSQ0RfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgIFJBU19jaGsyID0gJHRpbWU7CisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgQUNUICA6IEJhbmsgPSAyIFJvdyA9ICVkIiwgJHRpbWUsIEFkZHIpOworICAgICAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBBY3RpdmF0ZSBCYW5rIDIKKyAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSUF9jaGsyIDwgdFJQKSBiZWdpbgorCisJCSAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJQIHZpb2xhdGlvbiBkdXJpbmcgQWN0aXZhdGUgYmFuayAyIiwgJHRpbWUpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjExICYmIFBjX2IzID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAge0FjdF9iMywgUGNfYjN9ID0gMidiMTA7CisgICAgICAgICAgICAgICAgQjNfcm93X2FkZHIgPSBBZGRyIFthZGRyX2JpdHMgLSAxIDogMF07CisgICAgICAgICAgICAgICAgUkNEX2NoazMgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBSQVNfY2hrMyA9ICR0aW1lOworICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEFDVCAgOiBCYW5rID0gMyBSb3cgPSAlZCIsICR0aW1lLCBBZGRyKTsKKyAgICAgICAgICAgICAgICAvLyBQcmVjaGFyZ2UgdG8gQWN0aXZhdGUgQmFuayAzCisgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gUlBfY2hrMyA8IHRSUCkgYmVnaW4KKworCQkgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSUCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgMyIsICR0aW1lKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IwMCAmJiBQY19iMCA9PSAxJ2IwKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiBCYW5rIDAgaXMgbm90IFByZWNoYXJnZWQuIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjAxICYmIFBjX2IxID09IDEnYjApIGJlZ2luCisKKwkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IEJhbmsgMSBpcyBub3QgUHJlY2hhcmdlZC4iLCAkdGltZSk7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTAgJiYgUGNfYjIgPT0gMSdiMCkgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogQmFuayAyIGlzIG5vdCBQcmVjaGFyZ2VkLiIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IxMSAmJiBQY19iMyA9PSAxJ2IwKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiBCYW5rIDMgaXMgbm90IFByZWNoYXJnZWQuIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBBY3RpdmUgQmFuayBBIHRvIEFjdGl2ZSBCYW5rIEIKKyAgICAgICAgICAgIGlmICgoUHJldmlvdXNfYmFuayAhPSBCYSkgJiYgKCR0aW1lIC0gUlJEX2NoayA8IHRSUkQpKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlJEIHZpb2xhdGlvbiBkdXJpbmcgQWN0aXZhdGUgYmFuayA9ICVkIiwgJHRpbWUsIEJhKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgLy8gTG9hZCBNb2RlIFJlZ2lzdGVyIHRvIEFjdGl2ZQorICAgICAgICAgICAgaWYgKE1SRF9jaGsgPCB0TVJEICkgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdE1SRCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgPSAlZCIsICR0aW1lLCBCYSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIEF1dG8gUmVmcmVzaCB0byBBY3RpdmF0ZQorICAgICAgICAgICAgaWYgKCR0aW1lIC0gUkNfY2hrIDwgdFJDKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkMgdmlvbGF0aW9uIGR1cmluZyBBY3RpdmF0ZSBiYW5rID0gJWQiLCAkdGltZSwgQmEpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBSZWNvcmQgdmFyaWFibGVzIGZvciBjaGVja2luZyB2aW9sYXRpb24KKyAgICAgICAgICAgIFJSRF9jaGsgPSAkdGltZTsKKyAgICAgICAgICAgIFByZXZpb3VzX2JhbmsgPSBCYTsKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAvLyBQcmVjaGFyZ2UgQmxvY2sKKyAgICAgICAgaWYgKFByZWNoX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgaWYgKEFkZHJbMTBdID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAge1BjX2IwLCBQY19iMSwgUGNfYjIsIFBjX2IzfSA9IDQnYjExMTE7CisgICAgICAgICAgICAgICAge0FjdF9iMCwgQWN0X2IxLCBBY3RfYjIsIEFjdF9iM30gPSA0J2IwMDAwOworICAgICAgICAgICAgICAgIFJQX2NoazAgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBSUF9jaGsxID0gJHRpbWU7CisgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgIFJQX2NoazMgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBQUkUgIDogQmFuayA9IEFMTCIsJHRpbWUpOworICAgICAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRvIFByZWNoYXJnZSBhbGwgYmFua3MKKyAgICAgICAgICAgICAgICBpZiAoKCR0aW1lIC0gUkFTX2NoazAgPCB0UkFTKSB8fCAoJHRpbWUgLSBSQVNfY2hrMSA8IHRSQVMpIHx8CisgICAgICAgICAgICAgICAgICAgICgkdGltZSAtIFJBU19jaGsyIDwgdFJBUykgfHwgKCR0aW1lIC0gUkFTX2NoazMgPCB0UkFTKSkgYmVnaW4KKworCQkgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYWxsIGJhbmsiLCAkdGltZSk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGswIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEswIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazAsdFJBUyk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGsxIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEsxIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazEsdFJBUyk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGsyIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEsyIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazIsdFJBUyk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGszIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEszIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazMsdFJBUyk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgLy8gdFdSIHZpb2xhdGlvbiBjaGVjayBmb3Igd3JpdGUKKyAgICAgICAgICAgICAgICBpZiAoKCR0aW1lIC0gV1JfY2hrWzBdIDwgdFdScCkgfHwgKCR0aW1lIC0gV1JfY2hrWzFdIDwgdFdScCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCR0aW1lIC0gV1JfY2hrWzJdIDwgdFdScCkgfHwgKCR0aW1lIC0gV1JfY2hrWzNdIDwgdFdScCkpIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0V1IgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYWxsIGJhbmsiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQWRkclsxMF0gPT0gMSdiMCkgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoQmEgPT0gMidiMDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHtQY19iMCwgQWN0X2IwfSA9IDInYjEwOworICAgICAgICAgICAgICAgICAgICBSUF9jaGswID0gJHRpbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IFBSRSAgOiBCYW5rID0gMCIsJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmF0ZSB0byBQcmVjaGFyZ2UgQmFuayAwCisgICAgICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJBU19jaGswIDwgdFJBUykgYmVnaW4KKworCQkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBiYW5rIDAiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IwMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAge1BjX2IxLCBBY3RfYjF9ID0gMidiMTA7CisgICAgICAgICAgICAgICAgICAgIFJQX2NoazEgPSAkdGltZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgUFJFICA6IEJhbmsgPSAxIiwkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRvIFByZWNoYXJnZSBCYW5rIDEKKyAgICAgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gUkFTX2NoazEgPCB0UkFTKSBiZWdpbgorCisJCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkFTIHZpb2xhdGlvbiBkdXJpbmcgUHJlY2hhcmdlIGJhbmsgMSIsICR0aW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjEwKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICB7UGNfYjIsIEFjdF9iMn0gPSAyJ2IxMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBQUkUgIDogQmFuayA9IDIiLCR0aW1lKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUHJlY2hhcmdlIEJhbmsgMgorICAgICAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSQVNfY2hrMiA8IHRSQVMpIGJlZ2luCisKKwkJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYmFuayAyIiwgJHRpbWUpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHtQY19iMywgQWN0X2IzfSA9IDInYjEwOworICAgICAgICAgICAgICAgICAgICBSUF9jaGszID0gJHRpbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IFBSRSAgOiBCYW5rID0gMyIsJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmF0ZSB0byBQcmVjaGFyZ2UgQmFuayAzCisgICAgICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJBU19jaGszIDwgdFJBUykgYmVnaW4KKworCQkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBiYW5rIDMiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIC8vIHRXUiB2aW9sYXRpb24gY2hlY2sgZm9yIHdyaXRlCisgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gV1JfY2hrW0JhXSA8IHRXUnApIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0V1IgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYmFuayAlZCIsICR0aW1lLCBCYSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSBhIFdyaXRlIEltbWVkaWF0ZWx5IChpZiBzYW1lIGJhbmsgb3IgYWxsIGJhbmtzKQorICAgICAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEgJiYgKEJhbmsgPT0gQmEgfHwgQWRkclsxMF0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBQcmVjaGFyZ2UgQ29tbWFuZCBQaXBlbGluZSBmb3IgUmVhZAorICAgICAgICAgICAgaWYgKENhc19sYXRlbmN5XzMgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBDb21tYW5kWzJdID0gYFNEUkFNX1BSRUNIOworICAgICAgICAgICAgICAgIEJhbmtfcHJlY2hhcmdlWzJdID0gQmE7CisgICAgICAgICAgICAgICAgQTEwX3ByZWNoYXJnZVsyXSA9IEFkZHJbMTBdOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKENhc19sYXRlbmN5XzIgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBDb21tYW5kWzFdID0gYFNEUkFNX1BSRUNIOworICAgICAgICAgICAgICAgIEJhbmtfcHJlY2hhcmdlWzFdID0gQmE7CisgICAgICAgICAgICAgICAgQTEwX3ByZWNoYXJnZVsxXSA9IEFkZHJbMTBdOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgLy8gQnVyc3QgdGVybWluYXRlCisgICAgICAgIGlmIChCdXJzdF90ZXJtID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAvLyBUZXJtaW5hdGUgYSBXcml0ZSBJbW1lZGlhdGVseQorICAgICAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBUZXJtaW5hdGUgYSBSZWFkIERlcGVuZCBvbiBDQVMgTGF0ZW5jeQorICAgICAgICAgICAgaWYgKENhc19sYXRlbmN5XzMgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBDb21tYW5kWzJdID0gYFNEUkFNX0JTVDsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChDYXNfbGF0ZW5jeV8yID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgQ29tbWFuZFsxXSA9IGBTRFJBTV9CU1Q7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEJTVCAgOiBCdXJzdCBUZXJtaW5hdGUiLCR0aW1lKTsKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAvLyBSZWFkLCBXcml0ZSwgQ29sdW1uIExhdGNoCisgICAgICAgIGlmIChSZWFkX2VuYWJsZSA9PSAxJ2IxIHx8IFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGJhbmsgaXMgb3BlbiAoQUNUKQorICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IwMCAmJiBQY19iMCA9PSAxJ2IxKSB8fCAoQmEgPT0gMidiMDEgJiYgUGNfYjEgPT0gMSdiMSkgfHwKKyAgICAgICAgICAgICAgICAoQmEgPT0gMidiMTAgJiYgUGNfYjIgPT0gMSdiMSkgfHwgKEJhID09IDInYjExICYmIFBjX2IzID09IDEnYjEpKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IENhbm5vdCBSZWFkIG9yIFdyaXRlIC0gQmFuayAlZCBpcyBub3QgQWN0aXZhdGVkIiwgJHRpbWUsIEJhKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUmVhZCBvciBXcml0ZQorICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IwMCkgJiYgKCR0aW1lIC0gUkNEX2NoazAgPCB0UkNEKSkKKwkgICAgICBiZWdpbgorCQkgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IHRSQ0QgdmlvbGF0aW9uIGR1cmluZyBSZWFkIG9yIFdyaXRlIHRvIEJhbmsgMCIsICR0aW1lKTsKKwkgICAgICBlbmQKKwkgICAKKyAgICAgICAgICAgIGlmICgoQmEgPT0gMidiMDEpICYmICgkdGltZSAtIFJDRF9jaGsxIDwgdFJDRCkpCisJICAgICAgYmVnaW4KKwkJIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJhdCB0aW1lICV0IEVSUk9SOiB0UkNEIHZpb2xhdGlvbiBkdXJpbmcgUmVhZCBvciBXcml0ZSB0byBCYW5rIDEiLCAkdGltZSk7CisJICAgICAgZW5kCisgICAgICAgICAgICBpZiAoKEJhID09IDInYjEwKSAmJiAoJHRpbWUgLSBSQ0RfY2hrMiA8IHRSQ0QpKQorCSAgICAgIGJlZ2luCisJCSAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAkZGlzcGxheSgiYXQgdGltZSAldCBFUlJPUjogdFJDRCB2aW9sYXRpb24gZHVyaW5nIFJlYWQgb3IgV3JpdGUgdG8gQmFuayAyIiwgJHRpbWUpOworCSAgICAgIGVuZAorICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IxMSkgJiYgKCR0aW1lIC0gUkNEX2NoazMgPCB0UkNEKSkKKwkgICAgICBiZWdpbgorCQkgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IHRSQ0QgdmlvbGF0aW9uIGR1cmluZyBSZWFkIG9yIFdyaXRlIHRvIEJhbmsgMyIsICR0aW1lKTsKKwkgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFJlYWQgQ29tbWFuZAorICAgICAgICAgICAgaWYgKFJlYWRfZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gQ0FTIExhdGVuY3kgcGlwZWxpbmUKKyAgICAgICAgICAgICAgICBpZiAoQ2FzX2xhdGVuY3lfMyA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoQWRkclsxMF0gPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRbMl0gPSBgUkVBRF9BOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFsyXSA9IGBSRUFEOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgQ29sX2FkZHJbMl0gPSBBZGRyOworICAgICAgICAgICAgICAgICAgICBCYW5rX2FkZHJbMl0gPSBCYTsKKyAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQ2FzX2xhdGVuY3lfMiA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoQWRkclsxMF0gPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRbMV0gPSBgUkVBRF9BOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFsxXSA9IGBSRUFEOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgQ29sX2FkZHJbMV0gPSBBZGRyOworICAgICAgICAgICAgICAgICAgICBCYW5rX2FkZHJbMV0gPSBCYTsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIC8vIFJlYWQgaW50ZXJydXB0IFdyaXRlICh0ZXJtaW5hdGUgV3JpdGUgaW1tZWRpYXRlbHkpCisgICAgICAgICAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgLy8gV3JpdGUgQ29tbWFuZAorICAgICAgICAgICAgZW5kIGVsc2UgaWYgKFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBDb21tYW5kWzBdID0gYFdSSVRFX0E7CisgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFswXSA9IGBTRFJBTV9XUklURTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBDb2xfYWRkclswXSA9IEFkZHI7CisgICAgICAgICAgICAgICAgQmFua19hZGRyWzBdID0gQmE7CisKKyAgICAgICAgICAgICAgICAvLyBXcml0ZSBpbnRlcnJ1cHQgV3JpdGUgKHRlcm1pbmF0ZSBXcml0ZSBpbW1lZGlhdGVseSkKKyAgICAgICAgICAgICAgICBpZiAoRGF0YV9pbl9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgLy8gV3JpdGUgaW50ZXJydXB0IFJlYWQgKHRlcm1pbmF0ZSBSZWFkIGltbWVkaWF0ZWx5KQorICAgICAgICAgICAgICAgIGlmIChEYXRhX291dF9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBJbnRlcnJ1cHRpbmcgYSBXcml0ZSB3aXRoIEF1dG9wcmVjaGFyZ2UKKyAgICAgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxICYmIFdyaXRlX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVtCYW5rXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFJlYWQvV3JpdGUgQmFuayAlZCBpbnRlcnJ1cHQgV3JpdGUgQmFuayAlZCB3aXRoIEF1dG9wcmVjaGFyZ2UiLCAkdGltZSwgQmEsIEJhbmspOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIC8vIEludGVycnVwdGluZyBhIFJlYWQgd2l0aCBBdXRvcHJlY2hhcmdlCisgICAgICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbQmFua10gPT0gMSdiMSAmJiBSZWFkX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF9yZWFkW0JhbmtdID0gMSdiMTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogUmVhZC9Xcml0ZSBCYW5rICVkIGludGVycnVwdCBSZWFkIEJhbmsgJWQgd2l0aCBBdXRvcHJlY2hhcmdlIiwgJHRpbWUsIEJhLCBCYW5rKTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBSZWFkIG9yIFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UKKyAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlW0JhXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlW0JhXSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKFJlYWRfZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlW0JhXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBXcml0ZV9wcmVjaGFyZ2VbQmFdID0gMSdiMTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICAvLyAgUmVhZCB3aXRoIEF1dG8gUHJlY2hhcmdlIENhbGN1bGF0aW9uCisgICAgICAgIC8vICAgICAgVGhlIGRldmljZSBzdGFydCBpbnRlcm5hbCBwcmVjaGFyZ2U6CisgICAgICAgIC8vICAgICAgICAgIDEuICBDQVMgTGF0ZW5jeSAtIDEgY3ljbGVzIGJlZm9yZSBsYXN0IGJ1cnN0CisgICAgICAgIC8vICAgICAgYW5kIDIuICBNZWV0IG1pbmltdW0gdFJBUyByZXF1aXJlbWVudAorICAgICAgICAvLyAgICAgICBvciAzLiAgSW50ZXJydXB0IGJ5IGEgUmVhZCBvciBXcml0ZSAod2l0aCBvciB3aXRob3V0IEF1dG9QcmVjaGFyZ2UpCisgICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbMF0gPT0gMSdiMSkgJiYgKFJlYWRfcHJlY2hhcmdlWzBdID09IDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMCA+PSB0UkFTKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMgorICAgICAgICAgICAgICAgICgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMF0gPj0gMSkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMF0gPj0gMikgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzBdID49IDQpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVswXSA+PSA4KSkpIHx8CisgICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfcmVhZFswXSA9PSAxJ2IxKSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAzCisgICAgICAgICAgICAgICAgICAgIFBjX2IwID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMCA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMCIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbMV0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsxID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsxXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzFdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsxXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMV0gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbMV0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBjX2IxID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IxID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMSA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMSIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsyXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbMl0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsyID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsyXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzJdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsyXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMl0gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbMl0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBjX2IyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IyID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVsyXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzJdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMiIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbM10gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGszID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVszXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzNdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVszXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbM10gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbM10gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBjX2IzID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IzID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMyA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzNdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbM10gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMyIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICAvLyBJbnRlcm5hbCBQcmVjaGFyZ2Ugb3IgQnN0CisgICAgICAgIGlmIChDb21tYW5kWzBdID09IGBTRFJBTV9QUkVDSCkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRlcm1pbmF0ZSBhIHJlYWQgd2l0aCBzYW1lIGJhbmsgb3IgYWxsIGJhbmtzCisgICAgICAgICAgICBpZiAoQmFua19wcmVjaGFyZ2VbMF0gPT0gQmFuayB8fCBBMTBfcHJlY2hhcmdlWzBdID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKERhdGFfb3V0X2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCBlbHNlIGlmIChDb21tYW5kWzBdID09IGBTRFJBTV9CU1QpIGJlZ2luICAgICAgICAgICAgICAgICAgLy8gQlNUIHRlcm1pbmF0ZSBhIHJlYWQgdG8gY3VycmVudCBiYW5rCisgICAgICAgICAgICBpZiAoRGF0YV9vdXRfZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBpZiAoRGF0YV9vdXRfZW5hYmxlID09IDEnYjApIGJlZ2luCisgICAgICAgICAgICBEcV9yZWcgPD0gI3RPSCB7ZGF0YV9iaXRzezEnYnp9fTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgLy8gRGV0ZWN0IFJlYWQgb3IgV3JpdGUgY29tbWFuZAorICAgICAgICBpZiAoQ29tbWFuZFswXSA9PSBgUkVBRCB8fCBDb21tYW5kWzBdID09IGBSRUFEX0EpIGJlZ2luCisgICAgICAgICAgICBCYW5rID0gQmFua19hZGRyWzBdOworICAgICAgICAgICAgQ29sID0gQ29sX2FkZHJbMF07CisgICAgICAgICAgICBDb2xfYnJzdCA9IENvbF9hZGRyWzBdOworICAgICAgICAgICAgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IwMCkgYmVnaW4KKyAgICAgICAgICAgICAgICBSb3cgPSBCMF9yb3dfYWRkcjsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMDEpIGJlZ2luCisgICAgICAgICAgICAgICAgUm93ID0gQjFfcm93X2FkZHI7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmFua19hZGRyWzBdID09IDInYjEwKSBiZWdpbgorICAgICAgICAgICAgICAgIFJvdyA9IEIyX3Jvd19hZGRyOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IxMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBSb3cgPSBCM19yb3dfYWRkcjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgQnVyc3RfY291bnRlciA9IDA7CisgICAgICAgICAgICBEYXRhX2luX2VuYWJsZSA9IDEnYjA7CisgICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IxOworICAgICAgICBlbmQgZWxzZSBpZiAoQ29tbWFuZFswXSA9PSBgU0RSQU1fV1JJVEUgfHwgQ29tbWFuZFswXSA9PSBgV1JJVEVfQSkgYmVnaW4KKyAgICAgICAgICAgIEJhbmsgPSBCYW5rX2FkZHJbMF07CisgICAgICAgICAgICBDb2wgPSBDb2xfYWRkclswXTsKKyAgICAgICAgICAgIENvbF9icnN0ID0gQ29sX2FkZHJbMF07CisgICAgICAgICAgICBpZiAoQmFua19hZGRyWzBdID09IDInYjAwKSBiZWdpbgorICAgICAgICAgICAgICAgIFJvdyA9IEIwX3Jvd19hZGRyOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IwMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBSb3cgPSBCMV9yb3dfYWRkcjsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMTApIGJlZ2luCisgICAgICAgICAgICAgICAgUm93ID0gQjJfcm93X2FkZHI7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmFua19hZGRyWzBdID09IDInYjExKSBiZWdpbgorICAgICAgICAgICAgICAgIFJvdyA9IEIzX3Jvd19hZGRyOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBCdXJzdF9jb3VudGVyID0gMDsKKyAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMTsKKyAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZSA9IDEnYjA7CisgICAgICAgIGVuZAorCisgICAgICAgIC8vIERRIGJ1ZmZlciAoRHJpdmVyL1JlY2VpdmVyKQorICAgICAgICBpZiAoRGF0YV9pbl9lbmFibGUgPT0gMSdiMSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdyaXRpbmcgRGF0YSB0byBNZW1vcnkKKyAgICAgICAgICAgIC8vIEFycmF5IGJ1ZmZlcgorICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDApIERxX2RxbSBbMTUgOiAwXSA9IEJhbmswIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjAxKSBEcV9kcW0gWzE1IDogMF0gPSBCYW5rMSBbe1JvdywgQ29sfV07CisgICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMCkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazIgW3tSb3csIENvbH1dOworICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTEpIERxX2RxbSBbMTUgOiAwXSA9IEJhbmszIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIC8vIERxbSBvcGVyYXRpb24KKyAgICAgICAgICAgIGlmIChEcW1bMF0gPT0gMSdiMCkgRHFfZHFtIFsgNyA6IDBdID0gRHEgWyA3IDogMF07CisgICAgICAgICAgICAvLyBXcml0ZSB0byBtZW1vcnkKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjAwKSBCYW5rMCBbe1JvdywgQ29sfV0gPSBEcV9kcW0gWzE1IDogMF07CisgICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IwMSkgQmFuazEgW3tSb3csIENvbH1dID0gRHFfZHFtIFsxNSA6IDBdOworICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTApIEJhbmsyIFt7Um93LCBDb2x9XSA9IERxX2RxbSBbMTUgOiAwXTsKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjExKSBCYW5rMyBbe1JvdywgQ29sfV0gPSBEcV9kcW0gWzE1IDogMF07CisgICAgICAgICAgICAvLyBPdXRwdXQgcmVzdWx0CisgICAgICAgICAgICBpZiAoRHFtID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSgiYXQgdGltZSAldCBXUklURTogQmFuayA9ICVkIFJvdyA9ICVkLCBDb2wgPSAlZCwgRGF0YSA9IEhpLVogZHVlIHRvIERRTSIsICR0aW1lLCBCYW5rLCBSb3csIENvbCk7CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkoImF0IHRpbWUgJXQgV1JJVEU6IEJhbmsgPSAlZCBSb3cgPSAlZCwgQ29sID0gJWQsIERhdGEgPSAlaCwgRHFtID0gJWIiLCAkdGltZSwgQmFuaywgUm93LCBDb2wsIERxX2RxbSwgRHFtKTsKKyAgICAgICAgICAgICAgICAvLyBSZWNvcmQgdFdSIHRpbWUgYW5kIHJlc2V0IGNvdW50ZXIKKyAgICAgICAgICAgICAgICBXUl9jaGsgW0JhbmtdID0gJHRpbWU7CisgICAgICAgICAgICAgICAgV1JfY291bnRlciBbQmFua10gPSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBBZHZhbmNlIGJ1cnN0IGNvdW50ZXIgc3Vicm91dGluZQorICAgICAgICAgICAgI3RIWiBCdXJzdDsKKyAgICAgICAgZW5kIGVsc2UgaWYgKERhdGFfb3V0X2VuYWJsZSA9PSAxJ2IxKSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkaW5nIERhdGEgZnJvbSBNZW1vcnkKKyAgICAgICAgICAgIC8vIEFycmF5IGJ1ZmZlcgorICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDApIERxX2RxbSBbMTUgOiAwXSA9IEJhbmswIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjAxKSBEcV9kcW0gWzE1IDogMF0gPSBCYW5rMSBbe1JvdywgQ29sfV07CisgICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMCkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazIgW3tSb3csIENvbH1dOworICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTEpIERxX2RxbSBbMTUgOiAwXSA9IEJhbmszIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIC8vIERxbSBvcGVyYXRpb24KKyAgICAgICAgICAgIGlmIChEcW1fcmVnMFswXSA9PSAxJ2IxKSBEcV9kcW0gWyA3IDogMF0gPSA4J2J6OworICAgICAgICAgICAgLy8gRGlzcGxheSByZXN1bHQKKyAgICAgICAgICAgIERxX3JlZyBbMTUgOiAwXSA9ICN0QUMgRHFfZHFtIFsxNSA6IDBdOworICAgICAgICAgICAgaWYgKERxbV9yZWcwID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSgiYXQgdGltZSAldCBSRUFEIDogQmFuayA9ICVkIFJvdyA9ICVkLCBDb2wgPSAlZCwgRGF0YSA9IEhpLVogZHVlIHRvIERRTSIsICR0aW1lLCBCYW5rLCBSb3csIENvbCk7CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkoImF0IHRpbWUgJXQgUkVBRCA6IEJhbmsgPSAlZCBSb3cgPSAlZCwgQ29sID0gJWQsIERhdGEgPSAlaCwgRHFtID0gJWIiLCAkdGltZSwgQmFuaywgUm93LCBDb2wsIERxX3JlZywgRHFtX3JlZzApOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBBZHZhbmNlIGJ1cnN0IGNvdW50ZXIgc3Vicm91dGluZQorICAgICAgICAgICAgQnVyc3Q7CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgLy8gIFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UgQ2FsY3VsYXRpb24KKyAgICAvLyAgICAgIFRoZSBkZXZpY2Ugc3RhcnQgaW50ZXJuYWwgcHJlY2hhcmdlOgorICAgIC8vICAgICAgICAgIDEuICB0V1IgQ2xvY2sgYWZ0ZXIgbGFzdCBidXJzdAorICAgIC8vICAgICAgYW5kIDIuICBNZWV0IG1pbmltdW0gdFJBUyByZXF1aXJlbWVudAorICAgIC8vICAgICAgIG9yIDMuICBJbnRlcnJ1cHQgYnkgYSBSZWFkIG9yIFdyaXRlICh3aXRoIG9yIHdpdGhvdXQgQXV0b1ByZWNoYXJnZSkKKyAgICBhbHdheXMgQCAoV1JfY291bnRlclswXSkgYmVnaW4KKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVswXSA9PSAxJ2IxKSAmJiAoV3JpdGVfcHJlY2hhcmdlWzBdID09IDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMCA+PSB0UkFTKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDIKKyAgICAgICAgICAgICAgICgoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgfHwgV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSAmJiBDb3VudF9wcmVjaGFyZ2UgWzBdID49IDEpIHx8ICAgLy8gQ2FzZSAxCisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMF0gPj0gMikgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFswXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzBdID49IDgpKSkgfHwKKyAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF93cml0ZVswXSA9PSAxJ2IxICYmIFdSX2NvdW50ZXJbMF0gPj0gMikpIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAzIChzdG9wIGNvdW50IHdoZW4gaW50ZXJydXB0KQorICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICN0V1JhOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdFdSCisgICAgICAgICAgICAgICAgICAgIFBjX2IwID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMCA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMCIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICBhbHdheXMgQCAoV1JfY291bnRlclsxXSkgYmVnaW4KKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSAmJiAoV3JpdGVfcHJlY2hhcmdlWzFdID09IDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMSA+PSB0UkFTKSAmJgorICAgICAgICAgICAgICAgKCgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSB8fCBXcml0ZV9idXJzdF9tb2RlID09IDEnYjEpICYmIENvdW50X3ByZWNoYXJnZSBbMV0gPj0gMSkgfHwgCisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMV0gPj0gMikgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFsxXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzFdID49IDgpKSkgfHwKKyAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF93cml0ZVsxXSA9PSAxJ2IxICYmIFdSX2NvdW50ZXJbMV0gPj0gMikpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgV3JpdGVfcHJlY2hhcmdlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3dyaXRlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgI3RXUmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0V1IKKyAgICAgICAgICAgICAgICAgICAgUGNfYjEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBBY3RfYjEgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBSUF9jaGsxID0gJHRpbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IE5PVEUgOiBTdGFydCBJbnRlcm5hbCBBdXRvIFByZWNoYXJnZSBmb3IgQmFuayAxIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGFsd2F5cyBAIChXUl9jb3VudGVyWzJdKSBiZWdpbgorICAgICAgICBpZiAoKEF1dG9fcHJlY2hhcmdlWzJdID09IDEnYjEpICYmIChXcml0ZV9wcmVjaGFyZ2VbMl0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsyID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAoKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxIHx8IFdyaXRlX2J1cnN0X21vZGUgPT0gMSdiMSkgJiYgQ291bnRfcHJlY2hhcmdlIFsyXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFsyXSA+PSAyKSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzQgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzJdID49IDQpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMl0gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3dyaXRlWzJdID09IDEnYjEgJiYgV1JfY291bnRlclsyXSA+PSAyKSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgQXV0b19wcmVjaGFyZ2VbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBXcml0ZV9wcmVjaGFyZ2VbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfd3JpdGVbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAjdFdSYTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRXUgorICAgICAgICAgICAgICAgICAgICBQY19iMiA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIEFjdF9iMiA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJQX2NoazIgPSAkdGltZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFN0YXJ0IEludGVybmFsIEF1dG8gUHJlY2hhcmdlIGZvciBCYW5rIDIiLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgYWx3YXlzIEAgKFdSX2NvdW50ZXJbM10pIGJlZ2luCisgICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbM10gPT0gMSdiMSkgJiYgKFdyaXRlX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSkgYmVnaW4KKyAgICAgICAgICAgIGlmICgoKCR0aW1lIC0gUkFTX2NoazMgPj0gdFJBUykgJiYKKyAgICAgICAgICAgICAgICgoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgfHwgV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSAmJiBDb3VudF9wcmVjaGFyZ2UgWzNdID49IDEpIHx8IAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzNdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbM10gPj0gNCkgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF84ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFszXSA+PSA4KSkpIHx8CisgICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfd3JpdGVbM10gPT0gMSdiMSAmJiBXUl9jb3VudGVyWzNdID49IDIpKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICN0V1JhOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdFdSCisgICAgICAgICAgICAgICAgICAgIFBjX2IzID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IzID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMyA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMyIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIHRhc2sgQnVyc3Q7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBBZHZhbmNlIEJ1cnN0IENvdW50ZXIKKyAgICAgICAgICAgIEJ1cnN0X2NvdW50ZXIgPSBCdXJzdF9jb3VudGVyICsgMTsKKworICAgICAgICAgICAgLy8gQnVyc3QgVHlwZQorICAgICAgICAgICAgaWYgKE1vZGVfcmVnWzNdID09IDEnYjApIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcXVlbnRpYWwgQnVyc3QKKyAgICAgICAgICAgICAgICBDb2xfdGVtcCA9IENvbCArIDE7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoTW9kZV9yZWdbM10gPT0gMSdiMSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZWQgQnVyc3QKKyAgICAgICAgICAgICAgICBDb2xfdGVtcFsyXSA9ICBCdXJzdF9jb3VudGVyWzJdIF4gIENvbF9icnN0WzJdOworICAgICAgICAgICAgICAgIENvbF90ZW1wWzFdID0gIEJ1cnN0X2NvdW50ZXJbMV0gXiAgQ29sX2Jyc3RbMV07CisgICAgICAgICAgICAgICAgQ29sX3RlbXBbMF0gPSAgQnVyc3RfY291bnRlclswXSBeICBDb2xfYnJzdFswXTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGgKKyAgICAgICAgICAgIGlmIChCdXJzdF9sZW5ndGhfMikgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGggPSAyCisgICAgICAgICAgICAgICAgQ29sIFswXSA9IENvbF90ZW1wIFswXTsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfNCkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGggPSA0CisgICAgICAgICAgICAgICAgQ29sIFsxIDogMF0gPSBDb2xfdGVtcCBbMSA6IDBdOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJ1cnN0X2xlbmd0aF84KSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1cnN0IExlbmd0aCA9IDgKKyAgICAgICAgICAgICAgICBDb2wgWzIgOiAwXSA9IENvbF90ZW1wIFsyIDogMF07CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgTGVuZ3RoID0gRlVMTAorICAgICAgICAgICAgICAgIENvbCA9IENvbF90ZW1wOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIC8vIEJ1cnN0IFJlYWQgU2luZ2xlIFdyaXRlICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBEYXRhIENvdW50ZXIKKyAgICAgICAgICAgIGlmIChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDIpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDQpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmR0YXNrCisKKyAgICAvLyBUaW1pbmcgUGFyYW1ldGVycyBmb3IgLTc1IChQQzEzMykgYW5kIENBUyBMYXRlbmN5ID0gMgorICAgIHNwZWNpZnkKKyAgICAgICAgc3BlY3BhcmFtCisgICAgICAgICAgICAgICAgICAgIHRBSCAgPSAgMC44LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGRyLCBCYSBIb2xkIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdEFTICA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZHIsIEJhIFNldHVwIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdENIICA9ICAyLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb2NrIEhpZ2gtTGV2ZWwgV2lkdGgKKyAgICAgICAgICAgICAgICAgICAgdENMICA9ICAyLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb2NrIExvdy1MZXZlbCBXaWR0aAorICAgICAgICAgICAgICAgICAgICB0Q0sgID0gMTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvY2sgQ3ljbGUgVGltZQorICAgICAgICAgICAgICAgICAgICB0REggID0gIDAuOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YS1pbiBIb2xkIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdERTICA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEtaW4gU2V0dXAgVGltZQorICAgICAgICAgICAgICAgICAgICB0Q0tIID0gIDAuOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0tFIEhvbGQgIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdENLUyA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENLRSBTZXR1cCBUaW1lCisgICAgICAgICAgICAgICAgICAgIHRDTUggPSAgMC44LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDUyMsIFJBUyMsIENBUyMsIFdFIywgRFFNIyBIb2xkICBUaW1lCisgICAgICAgICAgICAgICAgICAgIHRDTVMgPSAgMS41OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDUyMsIFJBUyMsIENBUyMsIFdFIywgRFFNIyBTZXR1cCBUaW1lCisgICAgICAgICR3aWR0aCAgICAocG9zZWRnZSBDbGssICAgICAgICAgICB0Q0gpOworICAgICAgICAkd2lkdGggICAgKG5lZ2VkZ2UgQ2xrLCAgICAgICAgICAgdENMKTsKKyAgICAgICAgJHBlcmlvZCAgIChuZWdlZGdlIENsaywgICAgICAgICAgIHRDSyk7CisgICAgICAgICRwZXJpb2QgICAocG9zZWRnZSBDbGssICAgICAgICAgICB0Q0spOworICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBDa2UsICAgdENLUywgdENLSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIENzX24sICB0Q01TLCB0Q01IKTsKKyAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIENsaywgICAgQ2FzX24sIHRDTVMsIHRDTUgpOworICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBSYXNfbiwgdENNUywgdENNSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIFdlX24sICB0Q01TLCB0Q01IKTsKKyAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIENsaywgICAgQWRkciwgIHRBUywgIHRBSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIEJhLCAgICB0QVMsICB0QUgpOworICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBEcW0sICAgdENNUywgdENNSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBEcV9jaGssIERxLCAgICB0RFMsICB0REgpOworICAgIGVuZHNwZWNpZnkKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvbW9kZWwvczI1ZmwyNTZzLnN2IGIvdmVyaWxvZy9kdi9tb2RlbC9zMjVmbDI1NnMuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyMzBjZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvbW9kZWwvczI1ZmwyNTZzLnN2CkBAIC0wLDAgKzEsODIwNiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDEyIFNwYW5zaW9uLCBMTEMuCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICBGaWxlIG5hbWUgOiBzMjVmbDI1NnMudgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIENvcHlyaWdodCAoQykgMjAxMiBTcGFuc2lvbiwgTExDLgorLy8KKy8vICBNT0RJRklDQVRJT04gSElTVE9SWSA6CisvLworLy8gIHZlcnNpb246IHwgYXV0aG9yOiAgICAgfCAgbW9kIGRhdGU6ICB8IGNoYW5nZXMgbWFkZToKKy8vICAgIFYxLjAgICAgICBWLk1hbmNldiAgICAgMTkgTm92IDA5ICAgICAgSW5pdGlhbAorLy8gICAgICAgICAgICBSLlByb2tvcG92aWMKKy8vICAgIFYxLjEgICAgICBWLk1hbmNldiAgICAgMDQgTWFyIDEwICAgIGFkZHJfY250IGZvciBzZWNvbmQgcmVhZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaCBwZXJmb3JtYW5jZSByZWFkIGNvbnRpbnVvdXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgY2FuIGNoYW5nZSBpdHMgdmFsdWUgb25seQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBDU05lZyA9ICcwJworLy8gICAgVjEuMiAgICAgIFYuTWFuY2V2ICAgICAyMyBNYXIgMTAgICAgRHVyaW5nIHJlYWQgb3BlcmF0aW9ucyByZWFkX291dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGNoYW5nZXMgaXRzIHZhbHVlIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydGVyIGludGVydmFsCisvLyAgICBWMS4zICAgICAgVi5NYW5jZXYgICAgIDEyIEFwciAxMCAgICBIT0xEIG1vZGUgY29ycmVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gZm9yIFBQIG9wZXJhdGlvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdGVkCisvLyAgICBWMS40ICAgICAgVi5NYW5jZXYgICAgIDIwIE1heSAxMCAgICBTUldEIGJpdCBhc3NpZ25tZW50IGlzIGNvcnJlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uIGZvciBXUlIgY29tbWFuZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfY3ljbGUgX2RlY29kZSBzZWN0aW9uIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NraW5nIGFzc2lnbm1lbnRzIGZvciBzaWduYWxzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXU1RBUlQgYW5kIFBTVEFSVCBhcmUgcmVwbGFjZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggbm9uYmxvY2tpbmcgYXNzaWdubWVudHMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbnMgaW4gUGFnZSBQcm9ncmFtCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGFyZSBmaXhlZAorLy8gICAgVjEuNSAgICAgIFYuTWFuY2V2ICAgICAyNSBNYXkgMTAgICAgQ29uZGl0aW9ucyBpbiBwcm9ncmFtbWluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMgYXJlIGZpeGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1pbmcgY29udHJvbCBzZWN0aW9ucyBmb3IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW0gYW5kIEVyYXNlIG9wZXJhdGlvbiBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQKKy8vICAgIFYxLjYgICAgICBWLk1hbmNldiAgICAgMDMgSnVuZSAxMCAgIGJ1c19jeWNsZV9zdGF0ZSBzZWN0aW9uIGZvcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdTUCBjb21tYW5kIGlzIGZpeGVkCisvLyAgICBWMS43ICAgICAgVi5NYW5jZXYgICAgIDI4IEp1bHkgMTAgICBEdXJpbmcgdGhlIFFVQUQgbW9kZSBIT0xEIyBpbnB1dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IG1vbml0b3JlZCBmb3IgaXRzIG5vcm1hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlIGN5Y2xlIGRlY29kZSBzZWN0aW9uIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkCisvLyAgICBWMS44ICAgICBCLkNvbGFrb3ZpYyAgIDI0IEF1ZyAxMCAgICBBbGwgcmVkdW5kYW50IHNpZ25hbHMgYXJlIHJlbW92ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gQnVzQ3ljbGUgcHJvY2VzcworLy8gICAgVjEuOSAgICAgIFYuTWFuY2V2ICAgICAzMCBTZXAgMTAgICAgTGF0ZXN0IGRhdGFzaGVldCBhbGlnbmVkCisvLyAgICAgICAgICAgICBCLkNvbGFrb3ZpYworLy8KKy8vICAgIFYyLjAgICAgICBWLk1hbmNldiAgICAgMDUgTm92IDEwICAgIEh5YnJpZCBjb25maWd1cmF0aW9uIGFkZGVkCisvLworLy8gICAgVjIuMSAgICAgIFYuTWFuY2V2ICAgICAxMiBOb3YgMTAgICAgUVVBRCBQcm9ncmFtIG9wZXJhdGlvbiBkdXJpbmcgRXJhc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1c3BlbmQgaXMgYWRkZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhcm5pbmcgZm9yIFJlc3VtZSB0byBTdXNwZW5kIHRpbWUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFkZGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdXJpbmcgRXJhc2UgU3VzcGVuZCwgYWZ0ZXIgUHJvZ3JhbQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgV0VMIGJpdCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGVtZXRhdGlvbiBvZiBTb2Z0d2FyZSBSZXNldCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZAorLy8gICAgVjIuMiAgICAgIFMuUGV0cm92aWMgICAxOCBBcHIgMTEgICAgQ29ycmVjdGVkIHRpbWluZyBpbiBhbHdheXMgYmxvY2sKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZ2VuZXJhdGVzIHJpc2luZ19lZGdlX0NTTmVnX2lwZAorLy8gICAgVjIuMyAgICAgIEIuQ29sYWtvdmljICAwNSBKdWx5IDExICAgTGF0ZXN0IGRhdGFzaGVldCBhbGlnbmVkCisvLyAgICBWMi40ICAgICAgQi5Db2xha292aWMgIDE0IEp1bHkgMTEgICBPcHRpbWl6YXRpb24gaXNzdWUgaXMgZml4ZWQKKy8vICAgIFYyLjUgICAgICBWLk1hbmNldiAgICAgMTkgSnVseSAxMSAgIFRpbWluZyBjaGVjayBpc3N1ZSBpcyBmaXhlZAorLy8gICAgVjIuNiAgICAgIFYuIE1hbmNldiAgICAxOCBOb3YgMTEgICAgVGltZSB0SE8gaXMgY2hhbmdlZCB0byAxIG5zCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VzdG9tZXIncyByZXF1ZXN0KQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJXUiBpbnN0cnVjdGlvbiBpcyBjb3JyZWN0ZWQKKy8vICAgIFYyLjcgICAgICBTLlBldHJvdmljICAgMjggQXVnIDEyICAgIFFQUCBJbnN0cnVjdGlvbiBpcyBhbGxvd2VkIG9uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IHByb2dyYW1tZWQgcGFnZQorLy8gICAgVjIuOCAgICAgIFYuIE1hbmNldiAgICAxMyBGZWIgMTMgICAgUmV2ZXJ0ZWQgcmVzdHJpY3Rpb24gZm9yIFFQUAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gcHJvZ3JhbW1lZCBwYWdlIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgY2xlYXJpbmcgd2l0aCBzZWN0b3IgZXJhc2UKKy8vICAgIFYyLjkgICAgICBTLlBldHJvdmljICAgMTMgTm92IDI4ICAgIENvcnJlY3RlZCBGU00gc3RhdGUgdHJhbnNpdGlvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCBvbiBQb3dlci1VcCBhbmQgSFcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0IGluIFN0YXRlR2VuIHByb2Nlc3MKKy8vICAgIFYyLjEwICAgICBWLiBNYW5jZXYgICAgMTMgRGVjIDIwICAgICBDb3JyZWN0ZWQgRExQIHJlYWQKKy8vICAgIFYyLjExICAgICBNLlN0b2phbm92aWMgMTUgTWF5IDE1ICAgIElnbm9yZWQgdXBwZXIgYWRkcmVzcyBiaXRzIGZvciBSRDQKKy8vICAgIFYyLjEyICAgICBNLlN0b2phbm92aWMgMTUgTWF5IDI5ICAgIElnbm9yZWQgdXBwZXIgYWRkcmVzcyBiaXRzIGZvciBhbGwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzIGluIFFVQUQgbW9kZQorLy8gICAgVjIuMTMgICAgIE0uU3RvamFub3ZpYyAxNiBNYXkgMTEgICAgRHVyaW5nIFFQUCBhbmQgUVBQNCBjb21tYW5kcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgcGFnZSBtdXN0IG5vdCBiZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbW1lZCBtb3JlIHRoYW4gb25jZS4gSG93ZXZlcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IGdlbmVyYXRlIFBfRVJSIGlmIHRoaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jY3Vycy4KKy8vICAgIFYyLjE0ICAgICBNLktybmV0YSAgICAgMTkgTWF5IDA3ICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSByZXYgKlAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChRUFAgYW5kIFFQUDQgY29tbWFuZHMgY2hhbmdlZCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVDQ1JEIGNvbW1hbmQgYWRkZWQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0NLIGJpdCByZW1vdmVkKQorLy8gICAgVjIuMTUgICAgIEIuQmFyYWMgICAgICAyMCBKYW4gMjQgICAgQnVnIDQ5IGZpeGVkLCBpc3N1ZSB3aXRoIG5vdCBhc3NpZ25pbmcgCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3IgaW4gY29tbWFuZHMgUDRFNCBhbmQgUDRFCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIFBBUlQgREVTQ1JJUFRJT046CisvLworLy8gIExpYnJhcnk6ICAgIEZMQVNICisvLyAgVGVjaG5vbG9neTogRkxBU0ggTUVNT1JZCisvLyAgUGFydDogICAgICAgUzI1RkwyNTZTCisvLworLy8gIERlc2NyaXB0aW9uOiAyNTYgTWVnYWJpdCBTZXJpYWwgRmxhc2ggTWVtb3J5CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgQ29tbWVudHMgOgorLy8gICAgICBGb3IgY29ycmVjdCBzaW11bGF0aW9uLCBzaW11bGF0b3IgcmVzb2x1dGlvbiBzaG91bGQgYmUgc2V0IHRvIDEgcHMKKy8vICAgICAgQSBkZXZpY2Ugb3JkZXJpbmcgKHRyaW0pIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBmZWF0dXJlIGlzIGVuYWJsZWQKKy8vICAgICAgb3Igbm90LCBvciBwcm92aWRlIHJlbGV2YW50IHBhcmFtZXRlcnM6CisvLyAgICAgICAgLTE1dGggY2hhcmFjdGVyIGluIFRpbWluZ01vZGVsIGRldGVybWluZXMgaWYgZW5oYW5jZWQgaGlnaAorLy8gICAgICAgICBwZXJmb3JtYW5jZSBvcHRpb24gaXMgYXZhaWxhYmxlCisvLyAgICAgICAgICAgICgwLDIsMyxSLEEsQixDLEQpIEVIUExDCisvLyAgICAgICAgICAgIChZLFosUyxULEssTCkgICAgIFNlY3VyaXR5IEVIUExDCisvLyAgICAgICAgICAgICg0LDYsNyw4LDksUSkgICAgIEhQTEMKKy8vICAgICAgICAtMTV0aCBjaGFyYWN0ZXIgaW4gVGltaW5nTW9kZWwgZGV0ZXJtaW5lcyBpZiBSRVNFVCMgaW5wdXQKKy8vICAgICAgICAgaXMgYXZhaWxhYmxlCisvLyAgICAgICAgICAgIChSLEEsQixDLEQsUS42LDcsSyxMLFMsVCxNLE4sVSxWKSAgUkVTRVQjIGlzIGF2YWlsYWJsZQorLy8gICAgICAgICAgICAoMCwyLDMsNCw4LDksWS5aLlcsWCkgICAgICAgICAgICAgIFJFU0VUIyBpcyB0aWVkIHRvIHRoZSBpbmFjdGl2ZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLGluc2lkZSB0aGUgcGFja2FnZS4KKy8vICAgICAgICAtMTZ0aCBjaGFyYWN0ZXIgaW4gVGltaW5nTW9kZWwgZGV0ZXJtaW5lcyBTZWN0b3IgYW5kIFBhZ2UgU2l6ZToKKy8vICAgICAgICAgICAgKDApIFNlY3RvciBTaXplID0gNjQga0I7ICBQYWdlIFNpemUgPSAyNTYgYnl0ZXMKKy8vICAgICAgICAgICAgICAgIEh5YnJpZCBUb3AvQm90dG9tIHNlY3RvciBzaXplIGFyY2hpdGVjdHVyZQorLy8gICAgICAgICAgICAoMSkgU2VjdG9yIFNpemUgPSAyNTYga0I7IFBhZ2UgU2l6ZSA9IDUxMiBieXRlcworLy8gICAgICAgICAgICAgICAgVW5pZm9ybSBzZWN0b3Igc2l6ZSBhcmNoaXRlY3R1cmUKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIEtub3duIEJ1Z3M6CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTU9EVUxFIERFQ0xBUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2B0aW1lc2NhbGUgMSBwcy8xIHBzCisKK21vZHVsZSBzMjVmbDI1NnMKKyAgICAoCisgICAgICAgIC8vIERhdGEgSW5wdXRzL091dHB1dHMKKyAgICAgICAgU0kgICAgICwKKyAgICAgICAgU08gICAgICwKKyAgICAgICAgLy8gQ29udHJvbHMKKyAgICAgICAgU0NLICAgICwKKyAgICAgICAgQ1NOZWcgICwKKyAgICAgICAgUlNUTmVnICwKKyAgICAgICAgV1BOZWcgICwKKyAgICAgICAgSE9MRE5lZworCispOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBQb3J0IC8gUGFydCBQaW4gRGVjbGFyYXRpb25zCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBpbm91dCAgIFNJICAgICAgICAgICAgOworICAgIGlub3V0ICAgU08gICAgICAgICAgICA7CisKKyAgICBpbnB1dCAgIFNDSyAgICAgICAgICAgOworICAgIGlucHV0ICAgQ1NOZWcgICAgICAgICA7CisgICAgaW5wdXQgICBSU1ROZWcgICAgICAgIDsKKyAgICBpbm91dCAgIEhPTEROZWcgICAgICAgOworICAgIGlub3V0ICAgV1BOZWcgICAgICAgICA7CisKKyAgICAvLyBpbnRlcmNvbm5lY3QgcGF0aCBkZWxheSBzaWduYWxzCisgICAgd2lyZSAgIFNDS19pcGQgICAgICAgIDsKKyAgICB3aXJlICAgU0lfaXBkICAgICAgICAgOworICAgIHdpcmUgICBTT19pcGQgICAgICAgICA7CisKKyAgICB3aXJlIFNJX2luICAgICAgICAgICAgOworICAgIGFzc2lnbiBTSV9pbiA9IFNJX2lwZCA7CisKKyAgICB3aXJlIFNJX291dCAgICAgICAgICAgOworICAgIGFzc2lnbiBTSV9vdXQgPSBTSSAgICA7CisKKyAgICB3aXJlIFNPX2luICAgICAgICAgICAgOworICAgIGFzc2lnbiBTT19pbiA9IFNPX2lwZCA7CisKKyAgICB3aXJlIFNPX291dCAgICAgICAgICAgOworICAgIGFzc2lnbiBTT19vdXQgPSBTTyAgICA7CisKKyAgICB3aXJlICAgQ1NOZWdfaXBkICAgICAgOworICAgIHdpcmUgICBIT0xETmVnX2lwZCAgICA7CisgICAgd2lyZSAgIFdQTmVnX2lwZCAgICAgIDsKKyAgICB3aXJlICAgUlNUTmVnX2lwZCAgICAgOworCisgICAgd2lyZSBIT0xETmVnX2luICAgICAgICAgICAgICAgICA7CisgICAgLy9JbnRlcm5hbCBwdWxsLXVwCisgICAgYXNzaWduIEhPTEROZWdfaW4gPSAoSE9MRE5lZ19pcGQgPT09IDEnYngpID8gMSdiMSA6IEhPTEROZWdfaXBkOworCisgICAgd2lyZSBIT0xETmVnX291dCAgICAgICAgICAgICAgICA7CisgICAgYXNzaWduIEhPTEROZWdfb3V0ID0gSE9MRE5lZyAgICA7CisKKyAgICB3aXJlICAgV1BOZWdfaW4gICAgICAgICAgICAgICAgIDsKKyAgICAvL0ludGVybmFsIHB1bGwtdXAKKyAgICBhc3NpZ24gV1BOZWdfaW4gPSAoV1BOZWdfaXBkID09PSAxJ2J4KSA/IDEnYjEgOiBXUE5lZ19pcGQ7CisKKyAgICB3aXJlICAgV1BOZWdfb3V0ICAgICAgICAgICAgICAgIDsKKyAgICBhc3NpZ24gV1BOZWdfb3V0ID0gV1BOZWcgICAgICAgIDsKKworICAgIHdpcmUgICBSU1ROZWdfaW4gICAgICAgICAgICAgICAgIDsKKyAgICAvL0ludGVybmFsIHB1bGwtdXAKKyAgICBhc3NpZ24gUlNUTmVnX2luID0gKFJTVE5lZ19pcGQgPT09IDEnYngpID8gMSdiMSA6IFJTVE5lZ19pcGQ7CisKKyAgICAvLyBpbnRlcm5hbCBkZWxheXMKKyAgICByZWcgUFBfaW4gICAgICAgOworICAgIHJlZyBQUF9vdXQgICAgICA7CisgICAgcmVnIEJQX2luICAgICAgIDsKKyAgICByZWcgQlBfb3V0ICAgICAgOworICAgIHJlZyBTRV9pbiAgICAgICA7CisgICAgcmVnIFNFX291dCAgICAgIDsKKyAgICByZWcgQkVfaW4gICAgICAgOworICAgIHJlZyBCRV9vdXQgICAgICA7CisgICAgcmVnIFdSUl9pbiAgICAgIDsKKyAgICByZWcgV1JSX291dCAgICAgOworICAgIHJlZyBFUlNTVVNQX2luICA7CisgICAgcmVnIEVSU1NVU1Bfb3V0IDsKKyAgICByZWcgUFJHU1VTUF9pbiAgOworICAgIHJlZyBQUkdTVVNQX291dCA7CisgICAgcmVnIFBVX2luICAgICAgIDsKKyAgICByZWcgUFVfb3V0ICAgICAgOworICAgIHJlZyBSU1RfaW4gICAgICA7CisgICAgcmVnIFJTVF9vdXQgICAgIDsKKyAgICByZWcgUFBCRVJBU0VfaW4gOworICAgIHJlZyBQUEJFUkFTRV9vdXQ7CisgICAgcmVnIFBBU1NVTENLX2luIDsKKyAgICByZWcgUEFTU1VMQ0tfb3V0OworICAgIHJlZyBQQVNTQUNDX2luIDsKKyAgICByZWcgUEFTU0FDQ19vdXQ7CisKKyAgICAvLyBldmVudCBjb250cm9sIHJlZ2lzdGVycworICAgIHJlZyBQUkdTVVNQX291dF9ldmVudDsKKyAgICByZWcgRVJTU1VTUF9vdXRfZXZlbnQ7CisgICAgcmVnIFJlc2V0ZWRfZXZlbnQ7CisgICAgcmVnIFNDS19pcGRfZXZlbnQ7CisgICAgcmVnIG5leHRfc3RhdGVfZXZlbnQ7CisKKyAgICByZWcgcmlzaW5nX2VkZ2VfUG93ZXJlZFVwOworICAgIHJlZyByaXNpbmdfZWRnZV9SZXNldGVkOworICAgIHJlZyByaXNpbmdfZWRnZV9QQVNTVUxDS19pbjsKKyAgICByZWcgcmlzaW5nX2VkZ2VfUkVTX291dDsKKyAgICByZWcgcmlzaW5nX2VkZ2VfUFNUQVJUOworICAgIHJlZyByaXNpbmdfZWRnZV9XU1RBUlQ7CisgICAgcmVnIHJpc2luZ19lZGdlX0VTVEFSVDsKKyAgICByZWcgcmlzaW5nX2VkZ2VfUlNUTmVnOworICAgIHJlZyByaXNpbmdfZWRnZV9SU1Q7CisgICAgcmVnIGZhbGxpbmdfZWRnZV9SU1ROZWc7CisgICAgcmVnIGZhbGxpbmdfZWRnZV9SU1Q7CisgICAgcmVnIHJpc2luZ19lZGdlX1JTVF9vdXQ7CisgICAgcmVnIHJpc2luZ19lZGdlX0NTTmVnX2lwZCAgPSAxJ2IwOworICAgIHJlZyBmYWxsaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMDsKKyAgICByZWcgcmlzaW5nX2VkZ2VfU0NLX2lwZCAgICA9IDEnYjA7CisgICAgcmVnIGZhbGxpbmdfZWRnZV9TQ0tfaXBkICAgPSAxJ2IwOworCisgICAgcmVnIFJTVCAgICAgICAgICAgICAgICA7CisKKyAgICByZWcgIFNPdXRfemQgPSAxJ2JaICAgICA7CisgICAgcmVnICBTT3V0X3ogID0gMSdiWiAgICAgOworCisgICAgd2lyZSBTSV96ICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlIFNPX3ogICAgICAgICAgICAgICAgOworCisgICAgcmVnICBTSU91dF96ZCA9IDEnYlogICAgIDsKKyAgICByZWcgIFNJT3V0X3ogID0gMSdiWiAgICAgOworCisgICAgcmVnICBXUE5lZ091dF96ZCAgID0gMSdiWiAgOworICAgIHJlZyAgSE9MRE5lZ091dF96ZCA9IDEnYlogIDsKKworICAgIGFzc2lnbiBTSV96ID0gU0lPdXRfejsKKyAgICBhc3NpZ24gU09feiA9IFNPdXRfejsKKworICAgIHBhcmFtZXRlciBVc2VyUHJlbG9hZCAgICAgICA9IDE7CisgICAgcGFyYW1ldGVyIG1lbV9maWxlX25hbWUgICAgID0gIm5vbmUiOy8vInMyNWZsMjU2cy5tZW0iOworICAgIHBhcmFtZXRlciBvdHBfZmlsZV9uYW1lICAgICA9ICJzMjVmbDI1NnNPVFAubWVtIjsvLyJub25lIjsKKworICAgIHBhcmFtZXRlciBUaW1pbmdNb2RlbCAgICAgICA9ICJEZWZhdWx0VGltaW5nTW9kZWwiOworCisgICAgcGFyYW1ldGVyICBQYXJ0SUQgICAgICAgICAgID0gInMyNWZsMjU2cyI7CisgICAgcGFyYW1ldGVyICBNYXhEYXRhICAgICAgICAgID0gMjU1OworICAgIHBhcmFtZXRlciAgTWVtU2l6ZSAgICAgICAgICA9IDI4J2gxRkZGRkZGOworICAgIHBhcmFtZXRlciAgU2VjU2l6ZTI1NiAgICAgICA9IDIwJ2gzRkZGRjsKKyAgICBwYXJhbWV0ZXIgIFNlY1NpemU2NCAgICAgICAgPSAxNidoRkZGRjsKKyAgICBwYXJhbWV0ZXIgIFNlY1NpemU0ICAgICAgICAgPSAxMidoRkZGOworICAgIHBhcmFtZXRlciAgU2VjTnVtNjQgICAgICAgICA9IDU0MTsKKyAgICBwYXJhbWV0ZXIgIFNlY051bTI1NiAgICAgICAgPSAxMjc7CisgICAgcGFyYW1ldGVyICBQYWdlTnVtNjQgICAgICAgID0gMjAnaDNGRkZGOworICAgIHBhcmFtZXRlciAgUGFnZU51bTI1NiAgICAgICA9IDE2J2hGRkZGOworICAgIHBhcmFtZXRlciAgQWRkclJBTkdFICAgICAgICA9IDI4J2gxRkZGRkZGOworICAgIHBhcmFtZXRlciAgSGlBZGRyQml0ICAgICAgICA9IDMxOworICAgIHBhcmFtZXRlciAgT1RQU2l6ZSAgICAgICAgICA9IDEwMjM7CisgICAgcGFyYW1ldGVyICBPVFBMb0FkZHIgICAgICAgID0gMTInaDAwMDsKKyAgICBwYXJhbWV0ZXIgIE9UUEhpQWRkciAgICAgICAgPSAxMidoM0ZGOworICAgIHBhcmFtZXRlciAgQllURSAgICAgICAgICAgICA9IDg7CisKKyAgICAvLyBNYW51ZmFjdHVyZXIgSWRlbnRpZmljYXRpb24KKyAgICBwYXJhbWV0ZXIgIE1hbnVmX0lEICAgICAgID0gOCdoMDE7CisgICAgcGFyYW1ldGVyICBEZXZpY2VJRCAgICAgICA9IDgnaDE4OworICAgIC8vIEVsZWN0cm9uaWMgU2lnbmF0dXJlCisgICAgcGFyYW1ldGVyICBFU2lnbmF0dXJlICAgICA9IDgnaDE4OworICAgIC8vICBEZXZpY2UgSUQKKyAgICAvL01hbnVmYWN0dXJlciBJZGVudGlmaWNhdGlvbiAmJiBNZW1vcnkgVHlwZSAmJiBNZW1vcnkgQ2FwYWNpdHkKKyAgICBwYXJhbWV0ZXIgIEplZGVjX0lEICAgICAgID0gOCdoMDE7CisgICAgcGFyYW1ldGVyICBEZXZpY2VJRDEgICAgICA9IDgnaDAyOworICAgIHBhcmFtZXRlciAgRGV2aWNlSUQyICAgICAgPSA4J2gxOTsKKyAgICBwYXJhbWV0ZXIgIEV4dGVuZGVkQnl0ZXMgID0gOCdoNEQ7CisgICAgcGFyYW1ldGVyICBFeHRlbmRlZElENjQgICA9IDgnaDAxOworICAgIHBhcmFtZXRlciAgRXh0ZW5kZWRJRDI1NiAgPSA4J2gwMDsKKyAgICBwYXJhbWV0ZXIgIERpZVJldiAgICAgICAgID0gOCdoMDA7CisgICAgcGFyYW1ldGVyICBNYXNrUmV2ICAgICAgICA9IDgnaDAwOworCisgICAgaW50ZWdlciAgICBQYWdlU2l6ZTsKKyAgICBpbnRlZ2VyICAgIFBhZ2VOdW07CisgICAgaW50ZWdlciAgICBTZWNTaXplOworICAgIGludGVnZXIgICAgYl9hY3QgPSAwOworCisgICAgaW50ZWdlciAgICBBU1BfUHJvdFNFID0gMDsKKyAgICBpbnRlZ2VyICAgIFNlY19Qcm90U0UgPSAwOworCisgICAgaW50ZWdlciAgICBFSFA7IC8vRW5oYW5jZWQgSGlnaCBQZXJmb3JtYW5jZSBNb2RlIGFjdGl2ZQorCisgICAgaW50ZWdlciAgICBCQVJfQUNDID0gMDsgLy9CYW5rIFJlZ2lzdGVyIEFjY2VzcyBhY3RpdmUKKworICAgIC8vdmFyYWlibGVzIHRvIHJlc29sdmUgYXJjaGl0ZWN0dXJlIHVzZWQKKyAgICByZWcgWzI0KjgtMTowXSB0bXBfdGltaW5nOy8vc3RvcmVzIGNvcHkgb2YgVGltaW5nTW9kZWwKKyAgICByZWcgWzc6MF0gdG1wX2NoYXIxOy8vRGVmaW5lIEVIUExDIG9yIEhQTEMgTW9kZQorICAgIHJlZyBbNzowXSB0bXBfY2hhcjI7Ly9zdG9yZXMgIjAiIG9yICIxIiBjaGFyYWN0ZXIgZGVmaW5pbmcgc2VjdG9yL3BhZ2Ugc2l6ZQorICAgIGludGVnZXIgZm91bmQgPSAxJ2IwOworCisgICAgLy8gSWYgc3BlZWRzaW11bGF0aW9uIGlzIG5lZWRlZCB1bmNvbW1lbnQgZm9sbG93aW5nIGxpbmUKKworICAgICAgIGBkZWZpbmUgU1BFRURTSU07CisKKyAgICAvLyBwb3dlcnVwCisgICAgcmVnIFBvd2VyZWRVcDsKKworICAgIC8vIE1lbW9yeSBBcnJheSBDb25maWd1cmF0aW9uCisgICAgcmVnIEJvdHRvbUJvb3QgICAgICAgICAgPSAxJ2IwOworICAgIHJlZyBUb3BCb290ICAgICAgICAgICAgID0gMSdiMDsKKyAgICByZWcgVW5pZm9ybVNlYyAgICAgICAgICA9IDEnYjA7CisKKyAgICAvLyBGU00gY29udHJvbCBzaWduYWxzCisgICAgcmVnIFBET05FICAgICA7CisgICAgcmVnIFBTVEFSVCAgICA7CisgICAgcmVnIFBHU1VTUCAgICA7CisgICAgcmVnIFBHUkVTICAgICA7CisKKyAgICByZWcgVFNVICAgICAgIDsKKworICAgIHJlZyBSRVNfVE9fU1VTUF9NSU5fVElNRTsKKyAgICByZWcgUkVTX1RPX1NVU1BfVFlQX1RJTUU7CisKKyAgICByZWcgV0RPTkUgICAgIDsKKyAgICByZWcgV1NUQVJUICAgIDsKKworICAgIHJlZyBFRE9ORSAgICAgOworICAgIHJlZyBFU1RBUlQgICAgOworICAgIHJlZyBFU1VTUCAgICAgOworICAgIHJlZyBFUkVTICAgICAgOworCisgICAgcmVnIFJlc2V0ZWQgICA7CisKKyAgICByZWcgUEFSQU1fUkVHSU9OICAgICAgPSAxJ2IwOworCisgICAgLy8gTG9jayBCaXQgaXMgZW5hYmxlZCBmb3IgY3VzdG9tZXIgcHJvZ3JhbW1pbmcKKyAgICByZWcgV1JMT0NLRU5BQkxFICAgICAgPSAxJ2IxOworICAgIC8vIEZsYWcgdGhhdCBtYXJrIGlmIEFTUCBSZWdpc3RlciBpcyBhbGxyZWFkeSBwcm9ncmFtbWVkCisgICAgcmVnIEFTUE9UUEZMQUcgICAgICAgID0gMSdiMDsKKworICAgIC8vRmxhZyBmb3IgUGFzc3dvcmQgdW5sb2NrIGNvbW1hbmQKKyAgICByZWcgUEFTU19VTkxPQ0tFRCAgICAgPSAxJ2IwOworICAgIHJlZyBbNjM6MF0gUEFTU19URU1QICA9IDY0J2hGRkZGRkZGRkZGRkZGRkZGOworCisgICAgcmVnIFFVQURSRCAgICAgICAgICAgID0gMSdiMDsKKyAgICByZWcgSU5JVElBTF9DT05GSUcgICAgPSAxJ2IwOworICAgIHJlZyBDSEVDS19GUkVRICAgICAgICA9IDEnYjA7CisKKyAgICAvLyBQcm9ncmFtbWluZyBidWZmZXIKKyAgICBpbnRlZ2VyIFdCeXRlWzA6NTExXTsKKyAgICAvLyBDRkkgYXJyYXkKKyAgICBpbnRlZ2VyIENGSV9hcnJheVs4J2gwMDo4J2g1MF07CisgICAgLy8gT1RQIE1lbW9yeSBBcnJheQorICAgIGludGVnZXIgT1RQTWVtW09UUExvQWRkcjpPVFBIaUFkZHJdOworICAgIC8vIEZsYXNoIE1lbW9yeSBBcnJheQorICAgIGludGVnZXIgTWVtWzA6QWRkclJBTkdFXTsKKworICAgIC8vIFJlZ2lzdGVycworICAgIC8vIFZETFIgUmVnaXN0ZXIKKyAgICByZWdbNzowXSBWRExSX3JlZyAgICAgICAgICA9IDgnaDAwOworICAgIHJlZ1s3OjBdIFZETFJfcmVnX2luICAgICAgID0gOCdoMDA7CisgICAgLy8gTlZETFIgUmVnaXN0ZXIKKyAgICByZWdbNzowXSBOVkRMUl9yZWcgICAgICAgICA9IDgnaDAwOworICAgIHJlZ1s3OjBdIE5WRExSX3JlZ19pbiAgICAgID0gOCdoMDA7CisgICAgcmVnIHN0YXJ0X2RscCAgICAgICAgICAgICAgPSAxJ2IwOworCisgICAgLy8gU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICByZWdbNzowXSBTdGF0dXNfcmVnMSAgICAgICA9IDgnaDAwOworICAgIHJlZ1s3OjBdIFN0YXR1c19yZWcxX2luICAgID0gOCdoMDA7CisKKyAgICB3aXJlIFNSV0QgOworICAgIHdpcmUgUF9FUlI7CisgICAgd2lyZSBFX0VSUjsKKyAgICB3aXJlIFsyOjBdQlA7CisgICAgd2lyZSBXRUw7CisgICAgd2lyZSBXSVA7CisgICAgYXNzaWduIFNSV0QgICA9IFN0YXR1c19yZWcxWzddOworICAgIGFzc2lnbiBQX0VSUiAgPSBTdGF0dXNfcmVnMVs2XTsKKyAgICBhc3NpZ24gRV9FUlIgID0gU3RhdHVzX3JlZzFbNV07CisgICAgYXNzaWduIEJQICAgICA9IFN0YXR1c19yZWcxWzQ6Ml07CisgICAgYXNzaWduIFdFTCAgICA9IFN0YXR1c19yZWcxWzFdOworICAgIGFzc2lnbiBXSVAgICAgPSBTdGF0dXNfcmVnMVswXTsKKworICAgIC8vIFN0YXR1cyBSZWdpc3RlciAyCisgICAgcmVnWzc6MF0gU3RhdHVzX3JlZzIgICAgICAgPSA4J2gwMDsKKyAgICByZWdbNzowXSBTdGF0dXNfcmVnMl9pbiAgICA9IDgnaDAwOworCisgICAgd2lyZSBFUyA7CisgICAgd2lyZSBQUyA7CisgICAgYXNzaWduIEVTICAgPSBTdGF0dXNfcmVnMlsxXTsKKyAgICBhc3NpZ24gUFMgICA9IFN0YXR1c19yZWcyWzBdOworCisgICAgLy8gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgcmVnWzc6MF0gQ29uZmlnX3JlZzEgICAgICAgPSA4J2gwMDsKKyAgICByZWdbNzowXSBDb25maWdfcmVnMV9pbiAgICA9IDgnaDAwOworCisgICAgd2lyZSAgIExDMSAgICAgICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlICAgTEMwICAgICAgICAgICAgICAgICAgICAgOworICAgIHdpcmUgICBUQlBST1QgICAgICAgICAgICAgICAgICA7CisvLyAgICAgd2lyZSAgIExPQ0sgICAgICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlICAgQlBOViAgICAgICAgICAgICAgICAgICAgOworICAgIHdpcmUgICBUQlBBUk0gICAgICAgICAgICAgICAgICA7CisgICAgd2lyZSAgIFFVQUQgICAgICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlICAgRlJFRVpFICAgICAgICAgICAgICAgICAgOworICAgIGFzc2lnbiBMQzEgICAgID0gQ29uZmlnX3JlZzFbN107CisgICAgYXNzaWduIExDMCAgICAgPSBDb25maWdfcmVnMVs2XTsKKyAgICBhc3NpZ24gVEJQUk9UICA9IENvbmZpZ19yZWcxWzVdOworLy8gICAgIGFzc2lnbiBMT0NLICAgID0gQ29uZmlnX3JlZzFbNF07CisgICAgYXNzaWduIEJQTlYgICAgPSBDb25maWdfcmVnMVszXTsKKyAgICBhc3NpZ24gVEJQQVJNICA9IENvbmZpZ19yZWcxWzJdOworICAgIGFzc2lnbiBRVUFEICAgID0gQ29uZmlnX3JlZzFbMV07CisgICAgYXNzaWduIEZSRUVaRSAgPSBDb25maWdfcmVnMVswXTsKKworICAgIC8vIEF1dG9ib290IFJlZ2lzdGVyCisgICAgcmVnWzMxOjBdIEF1dG9Cb290X3JlZyAgICAgPSAzMidoMDAwMDAwMDA7CisgICAgcmVnWzMxOjBdIEF1dG9Cb290X3JlZ19pbiAgPSAzMidoMDAwMDAwMDA7CisKKyAgICB3aXJlIEFCRTsKKyAgICBhc3NpZ24gQUJFICAgICA9IEF1dG9Cb290X3JlZ1swXTsKKworICAgIC8vIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgIHJlZyBbNzowXSBCYW5rX0FkZHJfcmVnICAgID0gOCdoMDA7CisgICAgcmVnIFs3OjBdIEJhbmtfQWRkcl9yZWdfaW4gPSA4J2gwMDsKKworICAgIHdpcmUgICBFWFRBREQ7CisgICAgd2lyZSAgIEJBMjQ7CisKKyAgICBhc3NpZ24gRVhUQUREICA9IEJhbmtfQWRkcl9yZWdbN107CisgICAgYXNzaWduIEJBMjQgICAgPSBCYW5rX0FkZHJfcmVnWzBdOworICAgIAorICAgIC8vIEVDQyBTdGF0dXMgUmVnaXN0ZXIKKyAgICByZWdbNzowXSBFQ0NTUiAgICAgID0gOCdoMDA7CisgICAgCisgICAgd2lyZSAgIEVFQ0M7CisgICAgd2lyZSAgIEVFQ0NEOworICAgIHdpcmUgICBFQ0NESTsKKyAgICAKKyAgICBhc3NpZ24gRUVDQyAgID0gRUNDU1JbMl07CisgICAgYXNzaWduIEVFQ0NEICA9IEVDQ1NSWzFdOworICAgIGFzc2lnbiBFQ0NESSAgPSBFQ0NTUlswXTsKKworICAgIC8vIEFTUCBSZWdpc3RlcgorICAgIHJlZ1sxNTowXSBBU1BfcmVnICAgOworICAgIHJlZ1sxNTowXSBBU1BfcmVnX2luOworCisgICAgd2lyZSAgICBSUE1FICAgICAgICAgOworICAgIHdpcmUgICAgUFBCT1RQICAgICAgIDsKKyAgICB3aXJlICAgIFBXRE1MQiAgICAgICA7CisgICAgd2lyZSAgICBQU1RNTEIgICAgICAgOworICAgIGFzc2lnbiAgUlBNRSAgICAgPSBBU1BfcmVnWzVdOworICAgIGFzc2lnbiAgUFBCT1RQICAgPSBBU1BfcmVnWzNdOworICAgIGFzc2lnbiAgUFdETUxCICAgPSBBU1BfcmVnWzJdOworICAgIGFzc2lnbiAgUFNUTUxCICAgPSBBU1BfcmVnWzFdOworCisgICAgLy8gUGFzc3dvcmQgcmVnaXN0ZXIKKyAgICByZWdbNjM6MF0gUGFzc3dvcmRfcmVnICAgICA9IDY0J2hGRkZGRkZGRkZGRkZGRkZGOworICAgIHJlZ1s2MzowXSBQYXNzd29yZF9yZWdfaW4gID0gNjQnaEZGRkZGRkZGRkZGRkZGRkY7CisKKyAgICAvLyBQUEIgTG9jayBSZWdpc3RlcgorICAgIHJlZ1s3OjBdIFBQQkwgICAgICAgICAgICAgID0gOCdoMDA7CisgICAgcmVnWzc6MF0gUFBCTF9pbiAgICAgICAgICAgPSA4J2gwMDsKKworICAgIHdpcmUgICBQUEJfTE9DSyAgICAgICAgICAgICAgOworICAgIGFzc2lnbiBQUEJfTE9DSyAgICAgPSBQUEJMWzBdOworCisgICAgLy8gUFBCIEFjY2VzcyBSZWdpc3RlcgorICAgIHJlZ1s3OjBdIFBQQkFSICAgICAgICAgICAgID0gOCdoRkY7CisgICAgcmVnWzc6MF0gUFBCQVJfaW4gICAgICAgICAgPSA4J2hGRjsKKworICAgIHJlZ1tTZWNOdW02NDowXSBQUEJfYml0cyAgID0gezU0MnsxJ2IxfX07CisKKyAgICAvLyBEWUIgQWNjZXNzIFJlZ2lzdGVyCisgICAgcmVnWzc6MF0gRFlCQVIgICAgICAgICAgICAgPSA4J2hGRjsKKyAgICByZWdbNzowXSBEWUJBUl9pbiAgICAgICAgICA9IDgnaEZGOworCisgICAgcmVnW1NlY051bTY0OjBdIERZQl9iaXRzICAgPSB7NTQyezEnYjF9fTsKKworICAgIC8vVGhlIExvY2sgUHJvdGVjdGlvbiBSZWdpc3RlcnMgZm9yIE9UUCBNZW1vcnkgc3BhY2UKKyAgICByZWdbNzowXSBMT0NLX0JZVEUxOworICAgIHJlZ1s3OjBdIExPQ0tfQllURTI7CisgICAgcmVnWzc6MF0gTE9DS19CWVRFMzsKKyAgICByZWdbNzowXSBMT0NLX0JZVEU0OworCisgICAgLy8gQ29tbWFuZCBSZWdpc3RlcgorICAgIHJlZyB3cml0ZTsKKyAgICByZWcgY2ZnX3dyaXRlOworICAgIHJlZyByZWFkX291dDsKKyAgICByZWcgZHVhbCAgICAgICAgICA9IDEnYjA7CisgICAgcmVnIHJkX2Zhc3QgICAgICAgPSAxJ2IxOworICAgIHJlZyByZF9zbG93ICAgICAgID0gMSdiMDsKKyAgICByZWcgZGRyICAgICAgICAgICA9IDEnYjA7CisgICAgcmVnIGRkcjgwICAgICAgICAgPSAxJ2IwOworICAgIHJlZyBkZHJfZmFzdCAgICAgID0gMSdiMDsKKyAgICByZWcgaG9sZF9tb2RlICAgICA9IDEnYjA7CisgICAgcmVnIGFueV9yZWFkICAgICAgPSAxJ2IwOworICAgIHJlZyBxdWFkX3BnICAgICAgID0gMSdiMDsKKworICAgIHdpcmUgcmQgOworICAgIHdpcmUgZmFzdF9yZCA7CisgICAgd2lyZSBkZHJkIDsKKyAgICB3aXJlIGZhc3RfZGRyIDsKKyAgICB3aXJlIGRkcmQ4MCA7CisKKyAgICB3aXJlIHF1YWRwZyA7CisgICAgYXNzaWduIHF1YWRwZyA9IHF1YWRfcGc7CisKKyAgICB3aXJlIFJEX0VRVV8xOworICAgIGFzc2lnbiBSRF9FUVVfMSA9IGFueV9yZWFkOworCisgICAgd2lyZSBSRF9FUVVfMDsKKyAgICBhc3NpZ24gUkRfRVFVXzAgPSB+YW55X3JlYWQ7CisKKyAgICByZWcgIGNoYW5nZV9UQlBBUk0gPSAwOworCisgICAgcmVnICBjaGFuZ2VfQlAgPSAwOworICAgIHJlZyBbMjowXSBCUF9iaXRzICAgPSAzJ2IwOworCisgICAgcmVnIERPVUJMRSAgICAgICAgICA9IDEnYjA7IC8vRG91YmxlIERhdGEgUmF0ZSAoRERSKSBmbGFnCisKKyAgICByZWcgUmRQc3dkUHJvdE1vZGUgICAgPSAxJ2IwOy8vUmVhZCBQYXNzd29yZCBQcm90ZWN0aW9uIE1vZGUgQWN0aXZlIGZsYWcKKyAgICByZWcgUmRQc3dkUHJvdEVuYWJsZSAgPSAxJ2IwOy8vUmVhZCBQYXNzd29yZCBQcm90ZWN0aW9uIE1vZGUgU3VwcG9ydCBmbGFnCisKKyAgICBpbnRlZ2VyIEJ5dGVfbnVtYmVyID0gMDsKKworICAgIHJlZyBvZSAgID0gMSdiMDsKKyAgICByZWcgb2VfeiA9IDEnYjA7CisKKyAgICByZWcgWzY0NzowXSBDRklfYXJyYXlfdG1wIDsKKyAgICByZWcgWzc6MF0gQ0ZJX3RtcDsKKworICAgIGludGVnZXIgc3RhcnRfZGVsYXk7CisgICAgcmVnIHN0YXJ0X2F1dG9ib290OworICAgIGludGVnZXIgQUJTRDsKKworICAgIHJlZyAgY2hhbmdlX2FkZHIgOworICAgIGludGVnZXIgQWRkcmVzcyA9IDA7CisgICAgaW50ZWdlciBTZWN0b3JTdXNwZW5kID0gMDsKKworICAgIC8vU2VjdG9yIGFuZCBzdWJzZWN0b3IgYWRkcmVzc2VzCisgICAgaW50ZWdlciBTQSAgICAgICAgPSAwOworCisgICAgLy8gU2VjdG9yIGlzIHByb3RlY3QgaWYgU2VjX1Byb3QoU2VjTnVtKSA9ICcxJworICAgIHJlZyBbU2VjTnVtNjQ6MF0gU2VjX1Byb3QgID0gezU0MnsxJ2IwfX07CisKKyAgICAvLyB0aW1pbmcgY2hlY2sgdmlvbGF0aW9uCisgICAgcmVnIFZpb2wgPSAxJ2IwOworCisgICAgaW50ZWdlciBXT1RQQnl0ZTsKKyAgICBpbnRlZ2VyIEFkZHJMbzsKKyAgICBpbnRlZ2VyIEFkZHJIaTsKKworICAgIHJlZ1s3OjBdICBvbGRfYml0LCBuZXdfYml0OworICAgIGludGVnZXIgb2xkX2ludCwgbmV3X2ludDsKKyAgICByZWdbNjM6MF0gb2xkX3Bhc3M7CisgICAgcmVnWzYzOjBdIG5ld19wYXNzOworICAgIGludGVnZXIgd3JfY250OworICAgIGludGVnZXIgY250OworCisgICAgaW50ZWdlciByZWFkX2NudCA9IDA7CisgICAgaW50ZWdlciBieXRlX2NudCA9IDE7CisgICAgaW50ZWdlciByZWFkX2FkZHIgPSAwOworICAgIGludGVnZXIgcmVhZF9hZGRyX3RtcCA9IDA7CisgICAgaW50ZWdlciBTZWNfYWRkciA9IDA7CisgICAgaW50ZWdlciBTZWNBZGRyID0gMDsKKyAgICBpbnRlZ2VyIFBhZ2VfYWRkciA9IDA7CisgICAgaW50ZWdlciBwZ21fcGFnZSA9IDA7CisKKyAgICByZWdbNzowXSBkYXRhX291dDsKKyAgICByZWdbNjQ3OjBdIGlkZW50X291dDsKKworICAgIHRpbWUgU0NLX2N5Y2xlID0gMDsKKyAgICB0aW1lIHByZXZfU0NLOworICAgIHRpbWUgc3RhcnRfZGRyOworICAgIHRpbWUgb3V0X3RpbWU7CisgICAgdGltZSBTQ0tfU09fRERSOworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9JbnRlcmNvbm5lY3QgUGF0aCBEZWxheSBTZWN0aW9uCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgYnVmICAgKFNDS19pcGQsIFNDSyk7CisgYnVmICAgKFNJX2lwZCwgU0kpOworCisgYnVmICAgKFNPX2lwZCwgU08pOworIGJ1ZiAgIChDU05lZ19pcGQsIENTTmVnKTsKKyBidWYgICAoSE9MRE5lZ19pcGQsIEhPTEROZWcpOworIGJ1ZiAgIChXUE5lZ19pcGQsIFdQTmVnKTsKKyBidWYgICAoUlNUTmVnX2lwZCwgUlNUTmVnKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUHJvcGFnYXRpb24gIGRlbGF5IFNlY3Rpb24KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICBubW9zICAgKFNJLCAgIFNJX3ogLCAxKTsKKworICAgIG5tb3MgICAoU08sICAgU09feiAsIDEpOworICAgIG5tb3MgICAoSE9MRE5lZywgICBIT0xETmVnT3V0X3pkICwgMSk7CisgICAgbm1vcyAgIChXUE5lZywgICBXUE5lZ091dF96ZCAsIDEpOworCisgICAgd2lyZSBkZWdfcGluOworICAgIHdpcmUgZGVnX3NpbjsKKyAgICB3aXJlIGRlZ19ob2xkaW47CisgICAgd2lyZSBkZWhfcGluOworICAgIHdpcmUgZGVoX3NvdXQ7CisgICAgd2lyZSBkZWhfZGRyX3NvdXQ7CisgICAgd2lyZSBkZWhfaG9sZGluOworICAgIC8vVkhETCBWSVRBTCBDaGVja0VuYWJsZSBlcXVpdmFsZW50cworICAgIHdpcmUgcXVhZF9yZDsKKyAgICBhc3NpZ24gcXVhZF9yZCA9IGRlZ19ob2xkaW4gJiYgflFVQUQgJiYgKFNJT3V0X3ogIT0gMSdieik7CisgICAgd2lyZSB3cl9wcm90OworICAgIGFzc2lnbiB3cl9wcm90ID0gU1JXRCAmJiBXRUwgJiYgflFVQUQ7CisgICAgd2lyZSBkdWFsX3JkOworICAgIGFzc2lnbiBkdWFsX3JkID0gZHVhbCA7CisgICAgd2lyZSBkZHJvOworICAgIGFzc2lnbiBkZHJvID0gZGRyICYmIH5kZHI4MCAmJiB+ZHVhbCA7CisgICAgd2lyZSBkZHJvODA7CisgICAgYXNzaWduIGRkcm84MCA9IGRkciAmJiBkZHI4MCAmJiB+ZHVhbCA7CisgICAgd2lyZSBkZHJfcmQ7CisgICAgYXNzaWduIGRkcl9yZCA9IFBvd2VyZWRVcCAmJiBkZHI7CisgICAgd2lyZSBzZHJfcmQ7CisgICAgYXNzaWduIHNkcl9yZCA9IFBvd2VyZWRVcCAmJiB+ZGRyOworCitzcGVjaWZ5CisgICAgICAgIC8vIHRpcGQgZGVsYXlzOiBpbnRlcmNvbm5lY3QgcGF0aCBkZWxheXMgLCBtYXBwZWQgdG8gaW5wdXQgcG9ydCBkZWxheXMuCisgICAgICAgIC8vIEluIFZlcmlsb2cgaXMgbm90IG5lY2Vzc2FyeSB0byBkZWNsYXJlIGFueSB0aXBkXyBkZWxheSB2YXJpYWJsZXMsCisgICAgICAgIC8vIHRoZXkgY2FuIGJlIHRha2VuIGZyb20gU0RGIGZpbGUKKyAgICAgICAgLy8gV2l0aCBhbGwgdGhlIG90aGVyIGRlbGF5cyByZWFsIGRlbGF5cyB3b3VsZCBiZSB0YWtlbiBmcm9tIFNERiBmaWxlCisKKyAgICAvLyB0cGQgZGVsYXlzCisgICAgc3BlY3BhcmFtICAgICAgICB0cGRfU0NLX1NPX25vcm1hbCAgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZF9DU05lZ19TTyAgICAgICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHBkX0hPTEROZWdfU08gICAgICAgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cGRfUlNUTmVnX1NPICAgICAgICAgICAgICAgICA9MTsKKyAgICAvL0REUiBvcGVyYXRpb24gdmFsdWVzCisgICAgc3BlY3BhcmFtICAgICAgICB0cGRfU0NLX1NPX0REUiAgICAgICAgICAgICAgICA9MTsKKworICAgIC8vdHNldHVwIHZhbHVlczogc2V0dXAgdGltZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRzZXR1cF9DU05lZ19TQ0sgICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHNldHVwX1NJX1NDS19ub3JtYWwgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0c2V0dXBfV1BOZWdfQ1NOZWcgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRzZXR1cF9IT0xETmVnX1NDSyAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHNldHVwX1JTVE5lZ19DU05lZyAgICAgICAgICAgPTE7CisgICAgLy8gRERSIG9wZXJhdGlvbiB2YWx1ZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRzZXR1cF9TSV9TQ0tfRERSICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHNldHVwX1NJX1NDS19ERFJfZmFzdCAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0c2V0dXBfQ1NOZWdfU0NLX0REUiAgICAgICAgICA9MTsKKworICAgIC8vdGhvbGQgdmFsdWVzOiBob2xkIHRpbWVzCisgICAgc3BlY3BhcmFtICAgICAgICB0aG9sZF9DU05lZ19TQ0sgICAgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRob2xkX1NJX1NDS19ub3JtYWwgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdGhvbGRfU09fU0NLX25vcm1hbCAgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0aG9sZF9XUE5lZ19DU05lZyAgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRob2xkX0hPTEROZWdfU0NLICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdGhvbGRfQ1NOZWdfUlNUTmVnICAgICAgICAgICAgPTE7CisgICAgLy8gRERSIG9wZXJhdGlvbiB2YWx1ZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRob2xkX1NJX1NDS19ERFIgICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdGhvbGRfU0lfU0NLX0REUl9mYXN0ICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0aG9sZF9DU05lZ19TQ0tfRERSICAgICAgICAgICA9MTsKKworICAgIC8vIHRwdyB2YWx1ZXM6IHB1bHNlIHdpZHRoCisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX3NlcmlhbF9wb3NlZGdlICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfZHVhbF9wb3NlZGdlICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1NDS19mYXN0X3Bvc2VkZ2UgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX3F1YWRwZ19wb3NlZGdlICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfc2VyaWFsX25lZ2VkZ2UgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1NDS19kdWFsX25lZ2VkZ2UgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX2Zhc3RfbmVnZWRnZSAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfcXVhZHBnX25lZ2VkZ2UgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X0NTTmVnX3JlYWRfcG9zZWRnZSAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfQ1NOZWdfcGdlcnNfcG9zZWRnZSAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19SU1ROZWdfbmVnZWRnZSAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1JTVE5lZ19wb3NlZGdlICAgICAgICAgICAgPTE7CisgICAgLy8gRERSIG9wZXJhdGlvbiB2YWx1ZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfRERSX3Bvc2VkZ2UgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1NDS19ERFJfbmVnZWRnZSAgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX0REUjgwX3Bvc2VkZ2UgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfRERSODBfbmVnZWRnZSAgICAgICAgID0xOworCisgICAgLy8gdHBlcmlvZCBtaW4gKGNhbGN1bGF0ZWQgYXMgMS9tYXggZnJlcSkKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZXJpb2RfU0NLX3NlcmlhbF9yZCAgICAgICAgID0xOy8vIDUwIE1IegorICAgIHNwZWNwYXJhbSAgICAgICAgdHBlcmlvZF9TQ0tfZmFzdF9yZCAgICAgICAgICAgPTE7Ly8xMzMgTUh6CisgICAgc3BlY3BhcmFtICAgICAgICB0cGVyaW9kX1NDS19kdWFsX3JkICAgICAgICAgICA9MTsvLzEwNCBNSHoKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZXJpb2RfU0NLX3F1YWRwZyAgICAgICAgICAgID0xOy8vIDgwIE1IegorICAgIC8vIEREUiBvcGVyYXRpb24gdmFsdWVzCisgICAgc3BlY3BhcmFtICAgICAgICB0cGVyaW9kX1NDS19ERFJfcmQgICAgICAgICAgICA9MTsvLyA2NiBNSHoKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZXJpb2RfU0NLX0REUjgwX3JkICAgICAgICAgID0xOy8vIDgwIE1IegorCisgICAgYGlmZGVmIFNQRUVEU0lNCisgICAgICAgIC8vIFBhZ2UgUHJvZ3JhbSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BQXzI1NiAgICAgICAgICAgID0gNzVlNzsvL3RQUAorICAgICAgICAvLyBQYWdlIFByb2dyYW0gT3BlcmF0aW9uCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QUF81MTIgICAgICAgICAgICA9IDc1ZTc7Ly90UFAKKyAgICAgICAgLy8gVHlwaWNhbCBCeXRlIFByb2dyYW1taW5nIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX0JQICAgICAgICAgICAgICAgID0gNGU4Oy8vdEJQCisgICAgICAgIC8vIFNlY3RvciBFcmFzZSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1NFNjQgICAgICAgICAgICAgID0gMTBlNzsgLy8gNjUwZTc7Ly90U0UgRGluZXNoIEEKKyAgICAgICAgLy8gU2VjdG9yIEVyYXNlIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfU0UyNTYgICAgICAgICAgICAgPSAxMGU3OyAvLyAxODc1ZTc7Ly90U0UgRGluZXNoIEEKKyAgICAgICAgLy8gQnVsayBFcmFzZSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX0JFICAgICAgICAgICAgICAgID0gMzMwZTk7Ly90QkUKKyAgICAgICAgLy8gV1JSIEN5Y2xlIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1dSUiAgICAgICAgICAgICAgID0gMTsgLy8gMmU5Oy8vdFcgRGluZXNoIEEKKyAgICAgICAgLy8gRXJhc2UgU3VzcGVuZC9FcmFzZSBSZXN1bWUgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfRVJTU1VTUCAgICAgICAgICAgPSA0NWU2Oy8vdEVTTAorICAgICAgICAvLyBQcm9ncmFtIFN1c3BlbmQvUHJvZ3JhbSBSZXN1bWUgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFJHU1VTUCAgICAgICAgICAgPSAxOyAvLyA0MGU2Oy8vIERpbmVzaCBBCisgICAgICAgIC8vIFZDQyAobWluKSB0byBDUyMgTG93CisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QVSAgICAgICAgICAgICAgICA9IDE7IC8vIDNlODsvL3RQVSBEaW5lc2ggQQorICAgICAgICAvLyBQUEIgRXJhc2UgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFBCRVJBU0UgICAgICAgICAgPSAxOyAvLyAxNWU5Oy8vIERpbmVzaCBBCisgICAgICAgIC8vIFBhc3N3b3JkIFVubG9jayBUaW1lCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QQVNTVUxDSyAgICAgICAgICA9IDFlNjsvLworICAgICAgICAvLyBQYXNzd29yZCBVbmxvY2sgdG8gUGFzc3dvcmQgVW5sb2NrIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BBU1NBQ0MgICAgICAgICAgID0gMTAwZTY7CisgICAgICAgIC8vIERhdGEgSW4gU2V0dXAgTWF4IHRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1RTVSAgICAgICAgICAgICAgID0gMzAwZTM7CisgICAgYGVsc2UKKyAgICAgICAgLy8gUGFnZSBQcm9ncmFtIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFBfMjU2ICAgICAgICAgICAgPSA3NWU3Oy8vdFBQCisgICAgICAgIC8vIFBhZ2UgUHJvZ3JhbSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BQXzUxMiAgICAgICAgICAgID0gNzVlNzsvL3RQUAorICAgICAgICAvLyBUeXBpY2FsIEJ5dGUgUHJvZ3JhbW1pbmcgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfQlAgICAgICAgICAgICAgICAgPSA0ZTg7Ly90QlAKKyAgICAgICAgLy8gU2VjdG9yIEVyYXNlIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfU0U2NCAgICAgICAgICAgICAgPSA2NTBlOTsvL3RTRQorICAgICAgICAvLyBTZWN0b3IgRXJhc2UgT3BlcmF0aW9uCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9TRTI1NiAgICAgICAgICAgICA9IDE4NzVlOTsvL3RTRQorICAgICAgICAvLyBCdWxrIEVyYXNlIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfQkUgICAgICAgICAgICAgICAgPSAzMzBlMTI7Ly90QkUKKyAgICAgICAgLy8gV1JSIEN5Y2xlIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1dSUiAgICAgICAgICAgICAgID0gMmUxMTsvL3RXCisgICAgICAgIC8vIEVyYXNlIFN1c3BlbmQvRXJhc2UgUmVzdW1lIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX0VSU1NVU1AgICAgICAgICAgID0gNDVlNjsvL3RFU0wKKyAgICAgICAgLy8gUHJvZ3JhbSBTdXNwZW5kL1Byb2dyYW0gUmVzdW1lIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BSR1NVU1AgICAgICAgICAgID0gNDBlNjsvLworICAgICAgICAvLyBWQ0MgKG1pbikgdG8gQ1MjIExvdworICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFUgICAgICAgICAgICAgICAgPSAzZTg7Ly90UFUKKyAgICAgICAgLy8gUFBCIEVyYXNlIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BQQkVSQVNFICAgICAgICAgID0gMTVlOTsvLworICAgICAgICAvLyBQYXNzd29yZCBVbmxvY2sgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUEFTU1VMQ0sgICAgICAgICAgPSAxZTY7Ly8KKyAgICAgICAgLy8gUGFzc3dvcmQgVW5sb2NrIHRvIFBhc3N3b3JkIFVubG9jayBUaW1lCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QQVNTQUNDICAgICAgICAgICA9IDEwMGU2OworICAgICAgICAvLyBEYXRhIEluIFNldHVwIE1heCB0aW1lCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9UU1UgICAgICAgICAgICAgICA9IDMwMGUzOworICAgIGBlbmRpZiAvLyBTUEVFRFNJTQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBJbnB1dCBQb3J0ICBEZWxheXMgIGRvbid0IHJlcXVpcmUgVmVyaWxvZyBkZXNjcmlwdGlvbgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUGF0aCBkZWxheXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICBpZiAofmRkcikgICAgICAgICAgIChTQ0sgPT4gU08pID0gdHBkX1NDS19TT19ub3JtYWw7CisgIGlmIChkZHIgfHwgcmRfZmFzdCkgKFNDSyA9PiBTTykgPSB0cGRfU0NLX1NPX0REUjsKKworICBpZiAofmRkciAmJiBkdWFsKSAoU0NLID0+IFNJKSA9IHRwZF9TQ0tfU09fbm9ybWFsOworICBpZiAoIGRkciAmJiBkdWFsKSAoU0NLID0+IFNJKSA9IHRwZF9TQ0tfU09fRERSOworCisgIGlmICh+ZGRyICYmIFFVQUQpKFNDSyA9PiBIT0xETmVnKSA9IHRwZF9TQ0tfU09fbm9ybWFsOworICBpZiAoIGRkciAmJiBRVUFEKShTQ0sgPT4gSE9MRE5lZykgPSB0cGRfU0NLX1NPX0REUjsKKyAgaWYgKH5kZHIgJiYgUVVBRCkoU0NLID0+IFdQTmVnKSAgID0gdHBkX1NDS19TT19ub3JtYWw7CisgIGlmICggZGRyICYmIFFVQUQpKFNDSyA9PiBXUE5lZykgICA9IHRwZF9TQ0tfU09fRERSOworCisgIGlmIChDU05lZykgICAgICAgICAoQ1NOZWcgPT4gU08pID0gdHBkX0NTTmVnX1NPOworICBpZiAoQ1NOZWcgJiYgZHVhbCkgKENTTmVnID0+IFNJKSA9IHRwZF9DU05lZ19TTzsKKworICBpZiAoQ1NOZWcgJiYgUVVBRCkgKENTTmVnID0+IEhPTEROZWcpID0gdHBkX0NTTmVnX1NPOworICBpZiAoQ1NOZWcgJiYgUVVBRCkgKENTTmVnID0+IFdQTmVnKSAgID0gdHBkX0NTTmVnX1NPOworCisgIGlmICh+UVVBRCkgICAgICAgICAgKEhPTEROZWcgPT4gU08pID0gdHBkX0hPTEROZWdfU087CisgIGlmICh+UVVBRCAmJiBkdWFsKSAgKEhPTEROZWcgPT4gU0kpID0gdHBkX0hPTEROZWdfU087CisKKyAgIChSU1ROZWcgPT4gU08pID0gdHBkX1JTVE5lZ19TTzsKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRpbWluZyBWaW9sYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgJHNldHVwICggQ1NOZWcgICAgICAgICAgLCBwb3NlZGdlIFNDSyAmJiYgc2RyX3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX0NTTmVnX1NDSywgICAgICAgVmlvbCk7CisgICAgICAgICRzZXR1cCAoIENTTmVnICAgICAgICAgICwgcG9zZWRnZSBTQ0sgJiYmIGRkcl9yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZXR1cF9DU05lZ19TQ0tfRERSLCAgIFZpb2wpOworICAgICAgICAkc2V0dXAgKCBTSSAgICAgICAgICAgICAsIHBvc2VkZ2UgU0NLICYmJiBkZWdfc2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX1NJX1NDS19ub3JtYWwsICAgVmlvbCk7CisgICAgICAgICRzZXR1cCAoIFdQTmVnICAgICAgICAgICwgbmVnZWRnZSBDU05lZyAmJiYgd3JfcHJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZXR1cF9XUE5lZ19DU05lZywgICAgIFZpb2wpOworICAgICAgICAkc2V0dXAgKCBIT0xETmVnICAgICAgICAsIHBvc2VkZ2UgU0NLICYmJiBxdWFkX3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX0hPTEROZWdfU0NLLCAgICAgVmlvbCk7CisgICAgICAgICRzZXR1cCAoIFNJICAgICAgICAgICAgICwgcG9zZWRnZSBTQ0sgJiYmIGRkcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2V0dXBfU0lfU0NLX0REUiwgICAgICBWaW9sKTsKKyAgICAgICAgJHNldHVwICggU0kgICAgICAgICAgICAgLCBuZWdlZGdlIFNDSyAmJiYgZGRybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZXR1cF9TSV9TQ0tfRERSLCAgICAgIFZpb2wpOworICAgICAgICAkc2V0dXAgKCBTSSAgICAgICAgICAgICAsIHBvc2VkZ2UgU0NLICYmJiBkZHJvODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2V0dXBfU0lfU0NLX0REUiwgICAgICBWaW9sKTsKKyAgICAgICAgJHNldHVwICggU0kgICAgICAgICAgICAgLCBuZWdlZGdlIFNDSyAmJiYgZGRybzgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX1NJX1NDS19ERFIsICAgICAgVmlvbCk7CisKKyAgICAgICAgJHNldHVwICggUlNUTmVnICAgICAgICAgLCBuZWdlZGdlIENTTmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX1JTVE5lZ19DU05lZywgICAgVmlvbCk7CisKKyAgICAgICAgJGhvbGQgICggcG9zZWRnZSBTQ0sgJiYmIHNkcl9yZCAgICwgQ1NOZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9sZF9DU05lZ19TQ0ssICAgICAgICBWaW9sKTsKKyAgICAgICAgJGhvbGQgICggcG9zZWRnZSBTQ0sgJiYmIGRkcl9yZCAgICwgQ1NOZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9sZF9DU05lZ19TQ0tfRERSLCAgICBWaW9sKTsKKyAgICAgICAgJGhvbGQgICggcG9zZWRnZSBTQ0sgJiYmIGRlZ19zaW4gICAgICwgU0kgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvbGRfU0lfU0NLX25vcm1hbCwgICAgVmlvbCk7CisgICAgICAgICRob2xkICAoIG5lZ2VkZ2UgU0NLICYmJiBkZWhfc291dCAgICAsIFNPICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NPX1NDS19ub3JtYWwsICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBuZWdlZGdlIFNDSyAmJiYgZGVoX2Rkcl9zb3V0ICAgICAgICAsIFNPICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NPX1NDS19ub3JtYWwsICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIFNDSyAmJiYgZGVoX2Rkcl9zb3V0ICAgICAgICAsIFNPICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NPX1NDS19ub3JtYWwsICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIENTTmVnICYmJiB3cl9wcm90ICwgV1BOZWcgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvbGRfV1BOZWdfQ1NOZWcsICAgICAgVmlvbCk7CisgICAgICAgICRob2xkICAoIHBvc2VkZ2UgU0NLICAmJiYgcXVhZF9yZCAgLCBIT0xETmVnICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX0hPTEROZWdfU0NLLCAgICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIFNDSyAmJiYgZGRybyAgICAgLCBTSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NJX1NDS19ERFIsICAgICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBuZWdlZGdlIFNDSyAmJiYgZGRybyAgICAgLCBTSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NJX1NDS19ERFIsICAgICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIFNDSyAmJiYgZGRybzgwICAgICAsIFNJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvbGRfU0lfU0NLX0REUiwgICAgICAgVmlvbCk7CisgICAgICAgICRob2xkICAoIG5lZ2VkZ2UgU0NLICYmJiBkZHJvODAgICAgICwgU0ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9sZF9TSV9TQ0tfRERSLCAgICAgICBWaW9sKTsKKworICAgICAgICAkaG9sZCAgKCBuZWdlZGdlIFJTVE5lZyAgLCBDU05lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX0NTTmVnX1JTVE5lZywgICAgIFZpb2wpOworCisgICAgICAgICR3aWR0aCAoIHBvc2VkZ2UgU0NLICYmJiByZCAgICAgICAgLCB0cHdfU0NLX3NlcmlhbF9wb3NlZGdlKTsKKyAgICAgICAgJHdpZHRoICggbmVnZWRnZSBTQ0sgJiYmIHJkICAgICAgICAsIHRwd19TQ0tfc2VyaWFsX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgZHVhbF9yZCAgICwgdHB3X1NDS19kdWFsX3Bvc2VkZ2UpOworICAgICAgICAkd2lkdGggKCBuZWdlZGdlIFNDSyAmJiYgZHVhbF9yZCAgICwgdHB3X1NDS19kdWFsX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgZmFzdF9yZCAgICwgdHB3X1NDS19mYXN0X3Bvc2VkZ2UpOworICAgICAgICAkd2lkdGggKCBuZWdlZGdlIFNDSyAmJiYgZmFzdF9yZCAgICwgdHB3X1NDS19mYXN0X25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgZGRyZCAgICAgICwgdHB3X1NDS19ERFJfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgU0NLICYmJiBkZHJkICAgICAgLCB0cHdfU0NLX0REUl9uZWdlZGdlKTsKKyAgICAgICAgJHdpZHRoICggcG9zZWRnZSBTQ0sgJiYmIGRkcmQ4MCAgICAsIHRwd19TQ0tfRERSODBfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgU0NLICYmJiBkZHJkODAgICAgLCB0cHdfU0NLX0REUjgwX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgcXVhZHBnICAgICwgdHB3X1NDS19xdWFkcGdfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgU0NLICYmJiBxdWFkcGcgICAgLCB0cHdfU0NLX3F1YWRwZ19uZWdlZGdlKTsKKworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIENTTmVnICYmJiBSRF9FUVVfMSwgdHB3X0NTTmVnX3JlYWRfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIHBvc2VkZ2UgQ1NOZWcgJiYmIFJEX0VRVV8wLCB0cHdfQ1NOZWdfcGdlcnNfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgUlNUTmVnICAgICAgICAgICAgLCB0cHdfUlNUTmVnX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFJTVE5lZyAgICAgICAgICAgICwgdHB3X1JTVE5lZ19wb3NlZGdlKTsKKworICAgICAgICAkcGVyaW9kICggcG9zZWRnZSBTQ0sgJiYmIHJkICAgICAgICwgdHBlcmlvZF9TQ0tfc2VyaWFsX3JkKTsKKyAgICAgICAgJHBlcmlvZCAoIHBvc2VkZ2UgU0NLICYmJiBmYXN0X3JkICAsIHRwZXJpb2RfU0NLX2Zhc3RfcmQpOworICAgICAgICAkcGVyaW9kICggcG9zZWRnZSBTQ0sgJiYmIGR1YWxfcmQgICwgdHBlcmlvZF9TQ0tfZHVhbF9yZCk7CisgICAgICAgICRwZXJpb2QgKCBwb3NlZGdlIFNDSyAmJiYgcXVhZHBnICAgLCB0cGVyaW9kX1NDS19xdWFkcGcpOworICAgICAgICAkcGVyaW9kICggcG9zZWRnZSBTQ0sgJiYmIGRkcmQgICAgICwgdHBlcmlvZF9TQ0tfRERSX3JkKTsKKyAgICAgICAgJHBlcmlvZCAoIHBvc2VkZ2UgU0NLICYmJiBkZHJkODAgICAsIHRwZXJpb2RfU0NLX0REUjgwX3JkKTsKKworZW5kc3BlY2lmeQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNYWluIEJlaGF2aW9yIEJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBGU00gc3RhdGVzCisgcGFyYW1ldGVyIElETEUgICAgICAgICAgICA9IDUnZDA7CisgcGFyYW1ldGVyIFJFU0VUX1NUQVRFICAgICA9IDUnZDE7CisgcGFyYW1ldGVyIEFVVE9CT09UICAgICAgICA9IDUnZDI7CisgcGFyYW1ldGVyIFdSSVRFX1NSICAgICAgICA9IDUnZDM7CisgcGFyYW1ldGVyIFBBR0VfUEcgICAgICAgICA9IDUnZDQ7CisgcGFyYW1ldGVyIE9UUF9QRyAgICAgICAgICA9IDUnZDU7CisgcGFyYW1ldGVyIFBHX1NVU1AgICAgICAgICA9IDUnZDY7CisgcGFyYW1ldGVyIFNFQ1RPUl9FUlMgICAgICA9IDUnZDc7CisgcGFyYW1ldGVyIEJVTEtfRVJTICAgICAgICA9IDUnZDg7CisgcGFyYW1ldGVyIEVSU19TVVNQICAgICAgICA9IDUnZDk7CisgcGFyYW1ldGVyIEVSU19TVVNQX1BHICAgICA9IDUnZDEwOworIHBhcmFtZXRlciBFUlNfU1VTUF9QR19TVVNQPSA1J2QxMTsKKyBwYXJhbWV0ZXIgUEFTU19QRyAgICAgICAgID0gNSdkMTI7CisgcGFyYW1ldGVyIFBBU1NfVU5MT0NLICAgICA9IDUnZDEzOworIHBhcmFtZXRlciBQUEJfUEcgICAgICAgICAgPSA1J2QxNDsKKyBwYXJhbWV0ZXIgUFBCX0VSUyAgICAgICAgID0gNSdkMTU7CisgcGFyYW1ldGVyIEFVVE9CT09UX1BHICAgICA9IDUnZDE2OworIHBhcmFtZXRlciBBU1BfUEcgICAgICAgICAgPSA1J2QxNzsKKyBwYXJhbWV0ZXIgUExCX1BHICAgICAgICAgID0gNSdkMTg7CisgcGFyYW1ldGVyIERZQl9QRyAgICAgICAgICA9IDUnZDE5OworIHBhcmFtZXRlciBOVkRMUl9QRyAgICAgICAgPSA1J2QyMDsKKworIHJlZyBbNDowXSBjdXJyZW50X3N0YXRlOworIHJlZyBbNDowXSBuZXh0X3N0YXRlOworCisvLyBJbnN0cnVjdGlvbiB0eXBlCisgcGFyYW1ldGVyIE5PTkUgICAgICAgICAgICA9IDcnZDA7CisgcGFyYW1ldGVyIFdSUiAgICAgICAgICAgICA9IDcnZDE7CisgcGFyYW1ldGVyIFBQICAgICAgICAgICAgICA9IDcnZDI7CisgcGFyYW1ldGVyIFJFQUQgICAgICAgICAgICA9IDcnZDM7CisgcGFyYW1ldGVyIFdSREkgICAgICAgICAgICA9IDcnZDQ7CisgcGFyYW1ldGVyIFJEU1IgICAgICAgICAgICA9IDcnZDU7CisgcGFyYW1ldGVyIFdSRU4gICAgICAgICAgICA9IDcnZDY7CisgcGFyYW1ldGVyIFJEU1IyICAgICAgICAgICA9IDcnZDc7CisgcGFyYW1ldGVyIEZTVFJEICAgICAgICAgICA9IDcnZDg7CisgcGFyYW1ldGVyIEZTVFJENCAgICAgICAgICA9IDcnZDk7CisgcGFyYW1ldGVyIEREUkZSICAgICAgICAgICA9IDcnZDEwOworIHBhcmFtZXRlciBERFJGUjQgICAgICAgICAgPSA3J2QxMTsKKyBwYXJhbWV0ZXIgUFA0ICAgICAgICAgICAgID0gNydkMTI7CisgcGFyYW1ldGVyIFJENCAgICAgICAgICAgICA9IDcnZDEzOworIHBhcmFtZXRlciBBQlJEICAgICAgICAgICAgPSA3J2QxNDsKKyBwYXJhbWV0ZXIgQUJXUiAgICAgICAgICAgID0gNydkMTU7CisgcGFyYW1ldGVyIEJSUkQgICAgICAgICAgICA9IDcnZDE2OworIHBhcmFtZXRlciBCUldSICAgICAgICAgICAgPSA3J2QxNzsKKyBwYXJhbWV0ZXIgUDRFICAgICAgICAgICAgID0gNydkMTk7CisgcGFyYW1ldGVyIFA0RTQgICAgICAgICAgICA9IDcnZDIwOworIHBhcmFtZXRlciBBU1BSRCAgICAgICAgICAgPSA3J2QyMTsKKyBwYXJhbWV0ZXIgQVNQUCAgICAgICAgICAgID0gNydkMjI7CisgcGFyYW1ldGVyIENMU1IgICAgICAgICAgICA9IDcnZDIzOworIHBhcmFtZXRlciBRUFAgICAgICAgICAgICAgPSA3J2QyNDsKKyBwYXJhbWV0ZXIgUVBQNCAgICAgICAgICAgID0gNydkMjU7CisgcGFyYW1ldGVyIFJEQ1IgICAgICAgICAgICA9IDcnZDI2OworIHBhcmFtZXRlciBET1IgICAgICAgICAgICAgPSA3J2QyNzsKKyBwYXJhbWV0ZXIgRE9SNCAgICAgICAgICAgID0gNydkMjg7CisgcGFyYW1ldGVyIERMUFJEICAgICAgICAgICA9IDcnZDI5OworIHBhcmFtZXRlciBPVFBQICAgICAgICAgICAgPSA3J2QzMDsKKyBwYXJhbWV0ZXIgUE5WRExSICAgICAgICAgID0gNydkMzE7CisgcGFyYW1ldGVyIE9UUFIgICAgICAgICAgICA9IDcnZDMyOworIHBhcmFtZXRlciBXVkRMUiAgICAgICAgICAgPSA3J2QzMzsKKyBwYXJhbWV0ZXIgQkUgICAgICAgICAgICAgID0gNydkMzQ7CisgcGFyYW1ldGVyIFFPUiAgICAgICAgICAgICA9IDcnZDM1OworIHBhcmFtZXRlciBRT1I0ICAgICAgICAgICAgPSA3J2QzNjsKKyBwYXJhbWV0ZXIgRVJTUCAgICAgICAgICAgID0gNydkMzc7CisgcGFyYW1ldGVyIEVSUlMgICAgICAgICAgICA9IDcnZDM4OworIHBhcmFtZXRlciBQR1NQICAgICAgICAgICAgPSA3J2QzOTsKKyBwYXJhbWV0ZXIgUEdSUyAgICAgICAgICAgID0gNydkNDA7CisgcGFyYW1ldGVyIFJFTVMgICAgICAgICAgICA9IDcnZDQxOworIHBhcmFtZXRlciBSRElEICAgICAgICAgICAgPSA3J2Q0MjsKKyBwYXJhbWV0ZXIgTVBNICAgICAgICAgICAgID0gNydkNDM7CisgcGFyYW1ldGVyIFBMQldSICAgICAgICAgICA9IDcnZDQ0OworIHBhcmFtZXRlciBQTEJSRCAgICAgICAgICAgPSA3J2Q0NTsKKyBwYXJhbWV0ZXIgUkVTICAgICAgICAgICAgID0gNydkNDY7CisgcGFyYW1ldGVyIERJT1IgICAgICAgICAgICA9IDcnZDQ3OworIHBhcmFtZXRlciBESU9SNCAgICAgICAgICAgPSA3J2Q0ODsKKyBwYXJhbWV0ZXIgRERSRElPUiAgICAgICAgID0gNydkNDk7CisgcGFyYW1ldGVyIEREUkRJT1I0ICAgICAgICA9IDcnZDUwOworIHBhcmFtZXRlciBTRSAgICAgICAgICAgICAgPSA3J2Q1MTsKKyBwYXJhbWV0ZXIgU0U0ICAgICAgICAgICAgID0gNydkNTI7CisgcGFyYW1ldGVyIERZQlJEICAgICAgICAgICA9IDcnZDUzOworIHBhcmFtZXRlciBEWUJXUiAgICAgICAgICAgPSA3J2Q1NDsKKyBwYXJhbWV0ZXIgUFBCUkQgICAgICAgICAgID0gNydkNTU7CisgcGFyYW1ldGVyIFBQQlAgICAgICAgICAgICA9IDcnZDU2OworIHBhcmFtZXRlciBQUEJFUlMgICAgICAgICAgPSA3J2Q1NzsKKyBwYXJhbWV0ZXIgUEFTU1JEICAgICAgICAgID0gNydkNTg7CisgcGFyYW1ldGVyIFBBU1NQICAgICAgICAgICA9IDcnZDU5OworIHBhcmFtZXRlciBQQVNTVSAgICAgICAgICAgPSA3J2Q2MDsKKyBwYXJhbWV0ZXIgUUlPUiAgICAgICAgICAgID0gNydkNjE7CisgcGFyYW1ldGVyIFFJT1I0ICAgICAgICAgICA9IDcnZDYyOworIHBhcmFtZXRlciBERFJRSU9SICAgICAgICAgPSA3J2Q2MzsKKyBwYXJhbWV0ZXIgRERSUUlPUjQgICAgICAgID0gNydkNjQ7CisgcGFyYW1ldGVyIFJFU0VUICAgICAgICAgICA9IDcnZDY1OworIHBhcmFtZXRlciBNQlIgICAgICAgICAgICAgPSA3J2Q2NjsKKyBwYXJhbWV0ZXIgQlJBQyAgICAgICAgICAgID0gNydkNjc7CisgcGFyYW1ldGVyIEVDQ1JEICAgICAgICAgICA9IDcnZDY4OworCisgcmVnIFs2OjBdIEluc3RydWN0OworCisvL0J1cyBjeWNsZSBzdGF0ZQorIHBhcmFtZXRlciBTVEFORF9CWSAgICAgICAgPSAzJ2QwOworIHBhcmFtZXRlciBPUENPREVfQllURSAgICAgPSAzJ2QxOworIHBhcmFtZXRlciBBRERSRVNTX0JZVEVTICAgPSAzJ2QyOworIHBhcmFtZXRlciBEVU1NWV9CWVRFUyAgICAgPSAzJ2QzOworIHBhcmFtZXRlciBNT0RFX0JZVEUgICAgICAgPSAzJ2Q0OworIHBhcmFtZXRlciBEQVRBX0JZVEVTICAgICAgPSAzJ2Q1OworCisgcmVnIFsyOjBdIGJ1c19jeWNsZV9zdGF0ZTsKKworIHJlZyBkZXFfcGluOworICAgIGFsd2F5cyBAKFNPX2luLCBTT196KQorICAgIGJlZ2luCisgICAgICBpZiAoU09faW49PVNPX3opCisgICAgICAgIGRlcV9waW49MSdiMDsKKyAgICAgIGVsc2UKKyAgICAgICAgZGVxX3Bpbj0xJ2IxOworICAgIGVuZAorICAgIC8vIGNoZWNrIHdoZW4gZGF0YSBpcyBnZW5lcmF0ZWQgZnJvbSBtb2RlbCB0byBhdm9pZCBzZXR1cGhvbGQgY2hlY2sgaW4KKyAgICAvLyB0aGlzIG9jY2FzaW9uCisgICAgYXNzaWduIGRlZ19waW4gPSBkZXFfcGluOworICAgIGFzc2lnbiBkZWhfcGluID0gKGRlcV9waW4gPT0gMSdiMCkgJiYgKFNPX3ogIT0gMSdieik7CisgcmVnIGRlcV9zaW47CisgICAgYWx3YXlzIEAoU0lfaW4sIFNJT3V0X3opCisgICAgYmVnaW4KKyAgICAgIGlmIChTSV9pbj09U0lPdXRfeikKKyAgICAgICAgZGVxX3Npbj0xJ2IwOworICAgICAgZWxzZQorICAgICAgICBkZXFfc2luPTEnYjE7CisgICAgZW5kCisgICAgLy8gY2hlY2sgd2hlbiBkYXRhIGlzIGdlbmVyYXRlZCBmcm9tIG1vZGVsIHRvIGF2b2lkIHNldHVwaG9sZCBjaGVjayBpbgorICAgIC8vIHRoaXMgb2NjYXNpb24KKyAgICBhc3NpZ24gZGVnX3Npbj1kZXFfc2luCisgICAgICAgICAgICYmIChkZHIgPT0gMSdiMCkgJiYgKEluc3RydWN0ICE9PSBERFJGUikKKyAgICAgICAgICAgJiYgKEluc3RydWN0ICE9PSBERFJGUjQpICYmIChJbnN0cnVjdCAhPT0gRERSRElPUikKKyAgICAgICAgICAgJiYgKEluc3RydWN0ICE9PSBERFJESU9SNCkgJiYgKEluc3RydWN0ICE9PSBERFJRSU9SKQorICAgICAgICAgICAmJiAoSW5zdHJ1Y3QgIT09IEREUlFJT1I0KSAmJiAoU0lPdXRfeiAhPSAxJ2J6KTsKKyByZWcgZGVxX3NvdXQ7CisgICAgYWx3YXlzIEAoU09fb3V0LCBTSU91dF96KQorICAgIGJlZ2luCisgICAgICBpZiAoU09fb3V0PT1TSU91dF96KQorICAgICAgICBkZXFfc291dD0xJ2IwOworICAgICAgZWxzZQorICAgICAgICBkZXFfc291dD0xJ2IxOworICAgIGVuZAorICAgIC8vIGNoZWNrIHdoZW4gZGF0YSBpcyBnZW5lcmF0ZWQgZnJvbSBtb2RlbAorICAgIGFzc2lnbiBkZWhfc291dD0gKGRlcV9zb3V0ID09IDEnYjApCisgICAgICAgICAgICYmIChkZHIgPT0gMSdiMCkgJiYgKFNPdXRfeiAhPSAxJ2J6KTsKKyAgICBhc3NpZ24gZGVoX2Rkcl9zb3V0PSAoZGVxX3NvdXQgPT0gMSdiMCkKKyAgICAgICAgICAgJiYgKGRkciA9PSAxJ2IxKSAmJiAoU091dF96ICE9IDEnYnopOworCisgcmVnIGRlcV9ob2xkaW47CisgICAgYWx3YXlzIEAoSE9MRE5lZ19pcGQsIEhPTEROZWdPdXRfemQpCisgICAgYmVnaW4KKyAgICAgIGlmIChIT0xETmVnX2lwZD09SE9MRE5lZ091dF96ZCkKKyAgICAgICAgZGVxX2hvbGRpbj0xJ2IwOworICAgICAgZWxzZQorICAgICAgICBkZXFfaG9sZGluPTEnYjE7CisgICAgZW5kCisgICAgLy8gY2hlY2sgd2hlbiBkYXRhIGlzIGdlbmVyYXRlZCBmcm9tIG1vZGVsIHRvIGF2b2lkIHNldHVwaG9sZCBjaGVjayBpbgorICAgIC8vIHRoaXMgb2NjYXNpb24KKyAgICBhc3NpZ24gZGVnX2hvbGRpbj1kZXFfaG9sZGluOworICAgIGFzc2lnbiBkZWhfaG9sZGluPShkZXFfaG9sZGluID09IDEnYjApICYmIChIT0xETmVnT3V0X3pkICE9IDEnYnopOworCisgICAgLy9Qb3dlciBVcCB0aW1lOworICAgIGluaXRpYWwKKyAgICBiZWdpbgorICAgICAgICBQb3dlcmVkVXAgPSAxJ2IwOworCSRkaXNwbGF5KCIlMHQ9PlNUQVRVUzogU1BJIEZMQVNIIFBPV0VSIFVQIFdhaXQgVGltZTogJTBkOiUwZCIsJHRpbWUsdGRldmljZV9QVSx0ZGV2aWNlX1BSR1NVU1ApOworICAgICAgICAjdGRldmljZV9QVSBQb3dlcmVkVXAgPSAxJ2IxOworCSRkaXNwbGF5KCIlMHQ9PlNUQVRVUzogU1BJIEZMQVNIIFBPV0VSIFVQIiwkdGltZSwpOworICAgIGVuZAorCisgICAgaW5pdGlhbAorICAgIGJlZ2luIDogSW5pdAorICAgICAgICB3cml0ZSAgICAgICA9IDEnYjA7CisgICAgICAgIGNmZ193cml0ZSAgID0gMSdiMDsKKyAgICAgICAgcmVhZF9vdXQgICAgPSAxJ2IwOworICAgICAgICBBZGRyZXNzICAgICA9IDA7CisgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMDsKKyAgICAgICAgY250ICAgICAgICAgPSAwOworICAgICAgICBSU1QgICAgICAgICA9IDEnYjA7CisgICAgICAgIFJTVF9pbiAgICAgID0gMSdiMDsKKyAgICAgICAgUlNUX291dCAgICAgPSAxJ2IxOworICAgICAgICBQRE9ORSAgICAgICA9IDEnYjE7CisgICAgICAgIFBTVEFSVCAgICAgID0gMSdiMDsKKyAgICAgICAgUEdTVVNQICAgICAgPSAxJ2IwOworICAgICAgICBQR1JFUyAgICAgICA9IDEnYjA7CisgICAgICAgIFBSR1NVU1BfaW4gID0gMSdiMDsKKyAgICAgICAgRVJTU1VTUF9pbiAgPSAxJ2IwOworICAgICAgICBSRVNfVE9fU1VTUF9NSU5fVElNRSAgPSAxJ2IwOworICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSAgPSAxJ2IwOworCisgICAgICAgIEVET05FICAgICAgID0gMSdiMTsKKyAgICAgICAgRVNUQVJUICAgICAgPSAxJ2IwOworICAgICAgICBFU1VTUCAgICAgICA9IDEnYjA7CisgICAgICAgIEVSRVMgICAgICAgID0gMSdiMDsKKworICAgICAgICBXRE9ORSAgICAgICA9IDEnYjE7CisgICAgICAgIFdTVEFSVCAgICAgID0gMSdiMDsKKworICAgICAgICBSZXNldGVkICAgICA9IDEnYjA7CisKKyAgICAgICAgSW5zdHJ1Y3QgICAgICAgID0gTk9ORTsKKyAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gU1RBTkRfQlk7CisgICAgICAgIGN1cnJlbnRfc3RhdGUgICA9IFJFU0VUX1NUQVRFOworICAgICAgICBuZXh0X3N0YXRlICAgICAgPSBSRVNFVF9TVEFURTsKKyAgICBlbmQKKworICAgIC8vIGluaXRpYWxpemUgbWVtb3J5IGFuZCBsb2FkIHByZWxvYWQgZmlsZXMgaWYgYW55CisgICAgaW5pdGlhbAorICAgIGJlZ2luOiBJbml0TWVtb3J5CisgICAgICAgIGludGVnZXIgaTsKKworICAgICAgICBmb3IgKGk9MDtpPD1BZGRyUkFOR0U7aT1pKzEpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBNZW1baV0gPSBNYXhEYXRhOworICAgICAgICBlbmQKKworICAgICAgICBpZiAoKFVzZXJQcmVsb2FkKSAmJiAhKG1lbV9maWxlX25hbWUgPT0gIm5vbmUiKSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgLy8gTWVtb3J5IFByZWxvYWQKKyAgICAgICAgICAgLy9zMjVmbDI1NnMubWVtLCBtZW1vcnkgcHJlbG9hZCBmaWxlCisgICAgICAgICAgIC8vICBAYWFhYWFhIC0gPGFhYWFhYT4gc3RhbmRzIGZvciBhZGRyZXNzCisgICAgICAgICAgIC8vICBkZCAgICAgIC0gPGRkPiBpcyBieXRlIHRvIGJlIHdyaXR0ZW4gYXQgTWVtKGFhYWFhYSsrKQorICAgICAgICAgICAvLyAoYWFhYWFhIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IGxvYWQpCisJICAgJGRpc3BsYXkoIiVtOiBMb2FkaW5nIE1lbWZpbGUgOiAlcyIsbWVtX2ZpbGVfbmFtZSk7CisgICAgICAgICAgICRyZWFkbWVtaChtZW1fZmlsZV9uYW1lLE1lbSk7CisgICAgICAgIGVuZAorCisgICAgICAgIGZvciAoaT1PVFBMb0FkZHI7aTw9T1RQSGlBZGRyO2k9aSsxKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgT1RQTWVtW2ldID0gTWF4RGF0YTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgaWYgKFVzZXJQcmVsb2FkICYmICEob3RwX2ZpbGVfbmFtZSA9PSAibm9uZSIpKQorICAgICAgICBiZWdpbgorICAgICAgICAvL3MyNWZsMjU2c19vdHAgbWVtb3J5IGZpbGUKKyAgICAgICAgLy8gICAvICAgICAgIC0gY29tbWVudAorICAgICAgICAvLyAgIEBhYWFhYWEgICAgIC0gPGFhYWFhYT4gc3RhbmRzIGZvciBhZGRyZXNzIHdpdGhpbiBsYXN0IGRlZmluZWQKKyAgICAgICAgLy8gICBzZWN0b3IKKyAgICAgICAgLy8gICBkZCAgICAgIC0gPGRkPiBpcyBieXRlIHRvIGJlIHdyaXR0ZW4gYXQgT1RQTWVtKGFhYSsrKQorICAgICAgICAvLyAgIChhYSBpcyBpbmNyZW1lbnRlZCBhdCBldmVyeSBsb2FkKQorICAgICAgICAvLyAgIG9ubHkgZmlyc3QgMS00IGNvbHVtbnMgYXJlIGxvYWRlZC4gTk8gZW1wdHkgbGluZXMgISEhISEhISEhISEhISEhIQorICAgICAgICAgICAkcmVhZG1lbWgob3RwX2ZpbGVfbmFtZSxPVFBNZW0pOworICAgICAgICBlbmQKKworICAgICAgICBMT0NLX0JZVEUxWzc6MF0gPSBPVFBNZW1bMTZdOworICAgICAgICBMT0NLX0JZVEUyWzc6MF0gPSBPVFBNZW1bMTddOworICAgICAgICBMT0NLX0JZVEUzWzc6MF0gPSBPVFBNZW1bMThdOworICAgICAgICBMT0NLX0JZVEU0Wzc6MF0gPSBPVFBNZW1bMTldOworICAgIGVuZAorCisgICAgLy8gaW5pdGlhbGl6ZSBtZW1vcnkgYW5kIGxvYWQgcHJlbG9hZCBmaWxlcyBpZiBhbnkKKyAgICBpbml0aWFsCisgICAgYmVnaW46IEluaXRUaW1pbmdNb2RlbAorICAgIGludGVnZXIgaTsKKyAgICBpbnRlZ2VyIGo7CisgICAgICAgIC8vVU5JRk9STSBPUiBIWUJSSUQgYXJjaCBtb2RlbCBpcyB1c2VkCisgICAgICAgIC8vYXNzdW1wdGlvbnM6CisgICAgICAgIC8vMS4gVGltaW5nTW9kZWwgaGFzIGZvcm1hdCBhcyBTMjVGTDEyOFNYWFhYWFhYWF9YX1hYcEYKKyAgICAgICAgLy9pdCBpcyBpbXBvcnRhbnQgdGhhdCAxNi10aCBjaGFyYWN0ZXIgZnJvbSBmaXJzdCBvbmUgaXMgIjAiIG9yICIxIgorICAgICAgICAvLzIuIFRpbWluZ01vZGVsIGRvZXMgbm90IGhhdmUgbW9yZSB0aGVuIDI0IGNoYXJhY3RlcnMKKyAgICAgICAgdG1wX3RpbWluZyA9IFRpbWluZ01vZGVsOy8vY29weSBvZiBUaW1pbmdNb2RlbAorCisgICAgICAgIGkgPSAyMzsKKyAgICAgICAgd2hpbGUgKChpID49IDApICYmIChmb3VuZCAhPSAxJ2IxKSkvL3NlYXJjaCBmb3IgZmlyc3Qgbm9uIG51bGwgY2hhcmFjdGVyCisgICAgICAgIGJlZ2luICAgICAgICAvL2kga2VlcHMgcG9zaXRpb24gb2YgZmlyc3Qgbm9uIG51bGwgY2hhcmFjdGVyCisgICAgICAgICAgICBqID0gNzsKKyAgICAgICAgICAgIHdoaWxlICgoaiA+PSAwKSAmJiAoZm91bmQgIT0gMSdiMSkpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmICh0bXBfdGltaW5nW2kqOCtqXSAhPSAxJ2QwKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBqID0gai0xOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpID0gaSAtIDE7CisgICAgICAgIGVuZAorICAgICAgICBpID0gaSArMTsKKyAgICAgICAgaWYgKGZvdW5kKS8vaWYgbm9uIG51bGwgY2hhcmFjdGVyIGlzIGZvdW5kCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBmb3IgKGo9MDtqPD03O2o9aisxKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vRUhQTEMvSFBMQyBjaGFyYWN0ZXIgaXMgMTUKKyAgICAgICAgICAgIHRtcF9jaGFyMVtqXSA9IFRpbWluZ01vZGVsWyhpLTE0KSo4K2pdOworICAgICAgICAgICAgLy8yNTZCLzUxMkIgUGFnZSBjaGFyYWN0ZXIgaXMgMTYKKyAgICAgICAgICAgIHRtcF9jaGFyMltqXSA9IFRpbWluZ01vZGVsWyhpLTE1KSo4K2pdOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBpZiAodG1wX2NoYXIxID09ICIwIiB8fCB0bXBfY2hhcjEgPT0gIjIiIHx8IHRtcF9jaGFyMSA9PSAiMyIgfHwKKyAgICAgICAgICAgIHRtcF9jaGFyMSA9PSAiUiIgfHwgdG1wX2NoYXIxID09ICJBIiB8fCB0bXBfY2hhcjEgPT0gIkIiIHx8CisgICAgICAgICAgICB0bXBfY2hhcjEgPT0gIkMiIHx8IHRtcF9jaGFyMSA9PSAiRCIgfHwgdG1wX2NoYXIxID09ICJZIiB8fAorICAgICAgICAgICAgdG1wX2NoYXIxID09ICJaIiB8fCB0bXBfY2hhcjEgPT0gIlMiIHx8IHRtcF9jaGFyMSA9PSAiVCIgfHwKKyAgICAgICAgICAgIHRtcF9jaGFyMSA9PSAiSyIgfHwgdG1wX2NoYXIxID09ICJMIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIEVIUCA9IDE7CisgICAgICAgICAgICBpZih0bXBfY2hhcjEgPT0gIloiIHx8IHRtcF9jaGFyMSA9PSAiUyIgfHwgdG1wX2NoYXIxID09ICJUIiB8fAorICAgICAgICAgICAgICAgdG1wX2NoYXIxID09ICJLIiB8fCB0bXBfY2hhcjEgPT0gIkwiIHx8IHRtcF9jaGFyMSA9PSAiWSIpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RFbmFibGUgPSAxOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjEgPT0gIjQiIHx8IHRtcF9jaGFyMSA9PSAiNiIgfHwgdG1wX2NoYXIxID09ICI3IiB8fAorICAgICAgICAgICAgICAgICB0bXBfY2hhcjEgPT0gIjgiIHx8IHRtcF9jaGFyMSA9PSAiOSIgfHwgdG1wX2NoYXIxID09ICJRIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIEVIUCA9IDA7CisgICAgICAgIGVuZAorCisgICAgICAgIGlmICh0bXBfY2hhcjEgPT0gIjAiIHx8IHRtcF9jaGFyMSA9PSAiMiIgfHwgdG1wX2NoYXIxID09ICIzIiB8fAorICAgICAgICAgICAgdG1wX2NoYXIxID09ICJSIiB8fCB0bXBfY2hhcjEgPT0gIkEiIHx8IHRtcF9jaGFyMSA9PSAiQiIgfHwKKyAgICAgICAgICAgIHRtcF9jaGFyMSA9PSAiQyIgfHwgdG1wX2NoYXIxID09ICJEIiB8fCB0bXBfY2hhcjEgPT0gIjQiIHx8CisgICAgICAgICAgICB0bXBfY2hhcjEgPT0gIjYiIHx8IHRtcF9jaGFyMSA9PSAiNyIgfHwgdG1wX2NoYXIxID09ICI4IiB8fAorICAgICAgICAgICAgdG1wX2NoYXIxID09ICI5IiB8fCB0bXBfY2hhcjEgPT0gIlEiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgQVNQX3JlZyAgICA9IDE2J2hGRTdGOworICAgICAgICAgICAgQVNQX3JlZ19pbiA9IDE2J2hGRTdGOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIxID09ICJZIiB8fCB0bXBfY2hhcjEgPT0gIloiIHx8IHRtcF9jaGFyMSA9PSAiUyIgfHwKKyAgICAgICAgICAgICAgICAgdG1wX2NoYXIxID09ICJUIiB8fCB0bXBfY2hhcjEgPT0gIksiIHx8IHRtcF9jaGFyMSA9PSAiTCIpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBBU1BfcmVnICAgID0gMTYnaEZFNEY7CisgICAgICAgICAgICBBU1BfcmVnX2luID0gMTYnaEZFNEY7CisgICAgICAgIGVuZAorCisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgUGFnZVNpemUgPSAyNTU7CisgICAgICAgICAgICBQYWdlTnVtICA9IFBhZ2VOdW02NDsKKyAgICAgICAgICAgIFNlY1NpemUgID0gU2VjU2l6ZTY0OworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFBhZ2VTaXplID0gNTExOworICAgICAgICAgICAgUGFnZU51bSAgPSBQYWdlTnVtMjU2OworICAgICAgICAgICAgU2VjU2l6ZSAgPSBTZWNTaXplMjU2OworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIC8vQ0ZJCisgICAgaW5pdGlhbAorICAgIGJlZ2luOiBJbml0Q0ZJCisgICAgaW50ZWdlciBpOworICAgIGludGVnZXIgajsKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gSUQtQ0ZJIGFycmF5IGRhdGEKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gTWFudWZhY3R1cmVyIGFuZCBEZXZpY2UgSUQKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDAwXSA9IEplZGVjX0lEOworICAgICAgICBDRklfYXJyYXlbOCdoMDFdID0gRGV2aWNlSUQxOworICAgICAgICBDRklfYXJyYXlbOCdoMDJdID0gRGV2aWNlSUQyOworICAgICAgICBDRklfYXJyYXlbOCdoMDNdID0gOCdoMDA7CisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICAvLyBVbmlmb3JtIDY0a0Igc2VjdG9ycworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDA0XSA9IEV4dGVuZGVkSUQ2NDsKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgLy8gVW5pZm9ybSAyNTZrQiBzZWN0b3JzCisgICAgICAgICAgICBDRklfYXJyYXlbOCdoMDRdID0gRXh0ZW5kZWRJRDI1NjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDA1XSA9IDgnaDgwOworICAgICAgICBDRklfYXJyYXlbOCdoMDZdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gwN10gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDA4XSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMDldID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gwQV0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDBCXSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMENdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gwRF0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDBFXSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMEZdID0gOCdoMDA7CisgICAgICAgIC8vIENGSSBRdWVyeSBJZGVudGlmaWNhdGlvbiBTdHJpbmcKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDEwXSA9IDgnaDUxOworICAgICAgICBDRklfYXJyYXlbOCdoMTFdID0gOCdoNTI7CisgICAgICAgIENGSV9hcnJheVs4J2gxMl0gPSA4J2g1OTsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDEzXSA9IDgnaDAyOworICAgICAgICBDRklfYXJyYXlbOCdoMTRdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gxNV0gPSA4J2g0MDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDE2XSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMTddID0gOCdoNTM7CisgICAgICAgIENGSV9hcnJheVs4J2gxOF0gPSA4J2g0NjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDE5XSA9IDgnaDUxOworICAgICAgICBDRklfYXJyYXlbOCdoMUFdID0gOCdoMDA7CisgICAgICAgIC8vQ0ZJIHN5c3RlbSBpbnRlcmZhY2Ugc3RyaW5nCisgICAgICAgIENGSV9hcnJheVs4J2gxQl0gPSA4J2gyNzsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDFDXSA9IDgnaDM2OworICAgICAgICBDRklfYXJyYXlbOCdoMURdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gxRV0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDFGXSA9IDgnaDA2OworICAgICAgICBpZiAodG1wX2NoYXIyID09ICIwIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgLy8gNjRrQiBzZWN0b3IgYW5kIDI1NkIgcGFnZQorICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDIwXSA9IDgnaDA4OworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDIxXSA9IDgnaDA4OworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgLy8gMjU2a0Igc2VjdG9yIGFuZCA1MTJCIHBhZ2UKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyMF0gPSA4J2gwOTsKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyMV0gPSA4J2gwOTsKKyAgICAgICAgZW5kCisgICAgICAgIENGSV9hcnJheVs4J2gyMl0gPSA4J2gxMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDIzXSA9IDgnaDAyOworICAgICAgICBDRklfYXJyYXlbOCdoMjRdID0gOCdoMDI7CisgICAgICAgIENGSV9hcnJheVs4J2gyNV0gPSA4J2gwMzsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDI2XSA9IDgnaDAzOworICAgICAgICAvLyBEZXZpY2UgR2VvbWV0cnkgRGVmaW5pdGlvbihVbmlmb3JtIFNlY3RvciBEZXZpY2VzKQorICAgICAgICBDRklfYXJyYXlbOCdoMjddID0gOCdoMTk7CisgICAgICAgIENGSV9hcnJheVs4J2gyOF0gPSA4J2gwMjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDI5XSA9IDgnaDAxOworCisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICAvLyA2NGtCIHNlY3RvcnMKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyQV0gPSA4J2gwODsKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyQV0gPSA4J2gwOTsKKworICAgICAgICBDRklfYXJyYXlbOCdoMkJdID0gOCdoMDA7CisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJDXSA9IDgnaDAxOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJEXSA9IDgnaDdGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJFXSA9IDgnaDAwOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJGXSA9IDgnaDAwOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMwXSA9IDgnaDA0OworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMxXSA9IDgnaEZGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMyXSA9IDgnaEZGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMzXSA9IDgnaEZGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDM0XSA9IDgnaEZGOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJDXSA9IDgnaDAyOworICAgICAgICAgICAgaWYgKFRCUEFSTSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyA0S0IgcGh5c2ljYWwgc2VjdG9ycyBhdCB0b3AKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMkRdID0gOCdoRkQ7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJFXSA9IDgnaDAwOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gyRl0gPSA4J2gwMDsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMzBdID0gOCdoMDE7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMxXSA9IDgnaDFGOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gzMl0gPSA4J2gwMTsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMzNdID0gOCdoMTA7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDM0XSA9IDgnaDAwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gNEtCIHBoeXNpY2FsIHNlY3RvcnMgYXQgYm90dG9tCisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJEXSA9IDgnaDFGOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gyRV0gPSA4J2gwMDsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMkZdID0gOCdoMTA7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMwXSA9IDgnaDAwOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gzMV0gPSA4J2hGRDsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMzJdID0gOCdoMDE7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMzXSA9IDgnaDAwOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gzNF0gPSA4J2gwMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDM1XSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoMzZdID0gOCdoRkY7CisgICAgICAgIENGSV9hcnJheVs4J2gzN10gPSA4J2hGRjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDM4XSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoMzldID0gOCdoRkY7CisgICAgICAgIENGSV9hcnJheVs4J2gzQV0gPSA4J2hGRjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDNCXSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoM0NdID0gOCdoRkY7CisgICAgICAgIENGSV9hcnJheVs4J2gzRF0gPSA4J2hGRjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDNFXSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoM0ZdID0gOCdoRkY7CisgICAgICAgIC8vIENGSSBQcmltYXJ5IFZlbmRvci1TcGVjaWZpYyBFeHRlbmRlZCBRdWVyeQorICAgICAgICBDRklfYXJyYXlbOCdoNDBdID0gOCdoNTA7CisgICAgICAgIENGSV9hcnJheVs4J2g0MV0gPSA4J2g1MjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDQyXSA9IDgnaDQ5OworICAgICAgICBDRklfYXJyYXlbOCdoNDNdID0gOCdoMzE7CisgICAgICAgIENGSV9hcnJheVs4J2g0NF0gPSA4J2gzMzsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDQ1XSA9IDgnaDIxOworICAgICAgICBDRklfYXJyYXlbOCdoNDZdID0gOCdoMDI7CisgICAgICAgIENGSV9hcnJheVs4J2g0N10gPSA4J2gwMTsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDQ4XSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoNDldID0gOCdoMDg7CisgICAgICAgIENGSV9hcnJheVs4J2g0QV0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDRCXSA9IDgnaDAxOworICAgICAgICBDRklfYXJyYXlbOCdoNENdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2g0RF0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDRFXSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoNEZdID0gOCdoMDc7CisgICAgICAgIENGSV9hcnJheVs4J2g1MF0gPSA4J2gwMTsKKworICAgICAgICBiZWdpbgorICAgICAgICAgICAgZm9yKGk9ODA7aT49MDtpPWktMSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgQ0ZJX3RtcCA9IENGSV9hcnJheVs4J2gwMC1pKzgwXTsKKyAgICAgICAgICAgICAgICBmb3Ioaj03O2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgQ0ZJX2FycmF5X3RtcFs4Kmkral0gPSBDRklfdG1wW2pdOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorCisgICAgZW5kCisKKyAgICBhbHdheXMgQChuZXh0X3N0YXRlX2V2ZW50IG9yIFBvd2VyZWRVcCBvciBSU1Qgb3IgUlNUX291dCBvcgorICAgICAgICAgICAgUlNUTmVnX2luIG9yIHJpc2luZ19lZGdlX1JTVE5lZyBvciBmYWxsaW5nX2VkZ2VfUlNUKQorICAgIGJlZ2luOiBTdGF0ZVRyYW5zaXRpb24KKyAgICAgICAgaWYgKFBvd2VyZWRVcCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmICgoUlNUTmVnX2luID09IDEnYjEpICYmIChSU1Rfb3V0ID09IDEnYjEpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRfc3RhdGUgPSAjKDEwMDApIG5leHRfc3RhdGU7CisgICAgICAgICAgICBlbHNlIGlmICgoflJTVE5lZ19pbiB8fCByaXNpbmdfZWRnZV9SU1ROZWcpICYmIGZhbGxpbmdfZWRnZV9SU1QpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gbm8gc3RhdGUgdHJhbnNpdGlvbiB3aGlsZSBSRVNFVCMgbG93CisgICAgICAgICAgICAgICAgY3VycmVudF9zdGF0ZSA9IFJFU0VUX1NUQVRFOworICAgICAgICAgICAgICAgIFJTVF9pbiA9IDEnYjE7CisgICAgICAgICAgICAgICAgIzEwMDAgUlNUX2luID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgUlNUX2luKQorICAgIGJlZ2luOlRocmVzZXQKKyAgICAgICAgUlNUX291dCA9IDEnYjA7CisgICAgICAgICMoMzUwMDAwMDAtMjAwMDAwKSBSU1Rfb3V0ID0gMSdiMTsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgQ1NOZWdfaXBkKQorICAgIGJlZ2luOkNoZWNrQ0VPblBvd2VyVVAKKyAgICAgICAgaWYgKH5Qb3dlcmVkVXApCisgICAgICAgICAgICAkZGlzcGxheSAoIiUwdD0+IERldmljZSBpcyBzZWxlY3RlZCBkdXJpbmcgUG93ZXIgVXAiLCR0aW1lKTsKKyAgICBlbmQKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vLy8gSW50ZXJuYWwgRGVsYXlzCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBSR1NVU1BfaW4pCisgICAgYmVnaW46UFJHU3VzcGVuZAorICAgICAgICBQUkdTVVNQX291dCA9IDEnYjA7CisgICAgICAgICN0ZGV2aWNlX1BSR1NVU1AgUFJHU1VTUF9vdXQgPSAxJ2IxOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQUEJFUkFTRV9pbikKKyAgICBiZWdpbjpQUEJFcnMKKyAgICAgICAgUFBCRVJBU0Vfb3V0ID0gMSdiMDsKKyAgICAgICAgI3RkZXZpY2VfUFBCRVJBU0UgUFBCRVJBU0Vfb3V0ID0gMSdiMTsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVJTU1VTUF9pbikKKyAgICBiZWdpbjpFUlNTdXNwZW5kCisgICAgICAgIEVSU1NVU1Bfb3V0ID0gMSdiMDsKKyAgICAgICAgI3RkZXZpY2VfRVJTU1VTUCBFUlNTVVNQX291dCA9IDEnYjE7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBBU1NVTENLX2luKQorICAgIGJlZ2luOlBBU1NVTG9jaworICAgICAgICBQQVNTVUxDS19vdXQgPSAxJ2IwOworICAgICAgICAjdGRldmljZV9QQVNTVUxDSyBQQVNTVUxDS19vdXQgPSAxJ2IxOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQQVNTQUNDX2luKQorICAgIGJlZ2luOlBBU1NBY2MKKyAgICAgICAgUEFTU0FDQ19vdXQgPSAxJ2IwOworICAgICAgICAjdGRldmljZV9QQVNTQUNDIFBBU1NBQ0Nfb3V0ID0gMSdiMTsKKyAgICBlbmQKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gd3JpdGUgY3ljbGUgZGVjb2RlCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgaW50ZWdlciBvcGNvZGVfY250ID0gMDsKKyAgICBpbnRlZ2VyIGFkZHJfY250ICAgPSAwOworICAgIGludGVnZXIgbW9kZV9jbnQgICA9IDA7CisgICAgaW50ZWdlciBkdW1teV9jbnQgID0gMDsKKyAgICBpbnRlZ2VyIGRhdGFfY250ICAgPSAwOworICAgIGludGVnZXIgYml0X2NudCAgICA9IDA7CisKKyAgICByZWcgWzQwOTU6MF0gRGF0YV9pbiA9IDQwOTYnYjA7CisgICAgcmVnIFs3OjBdIG9wY29kZTsKKyAgICByZWcgWzc6MF0gb3Bjb2RlX2luOworICAgIHJlZyBbNzowXSBvcGNvZGVfdG1wOworICAgIHJlZyBbMzE6MF0gYWRkcl9ieXRlczsKKyAgICByZWcgWzMxOjBdIGhpYWRkcl9ieXRlczsKKyAgICByZWcgWzMxOjBdIEFkZHJlc3NfaW47CisgICAgcmVnIFs3OjBdIG1vZGVfYnl0ZXM7CisgICAgcmVnIFs3OjBdIG1vZGVfaW47CisgICAgaW50ZWdlciBMYXRlbmN5X2NvZGU7CisgICAgaW50ZWdlciBxdWFkX2RhdGFfaW4gWzA6MTAyM107CisgICAgcmVnIFszOjBdIHF1YWRfbnliYmxlID0gNCdiMDsKKyAgICByZWcgWzM6MF0gUXVhZF9zbHY7CisgICAgcmVnIFs3OjBdIEJ5dGVfc2x2OworCisgICBhbHdheXMgQChyaXNpbmdfZWRnZV9DU05lZ19pcGQgb3IgZmFsbGluZ19lZGdlX0NTTmVnX2lwZCBvcgorICAgICAgICAgICAgcmlzaW5nX2VkZ2VfU0NLX2lwZCBvciBmYWxsaW5nX2VkZ2VfU0NLX2lwZCBvcgorICAgICAgICAgICAgY3VycmVudF9zdGF0ZSkKKyAgIGJlZ2luOiBCdXNjeWNsZQorICAgICAgICBpbnRlZ2VyIGk7CisgICAgICAgIGludGVnZXIgajsKKyAgICAgICAgaW50ZWdlciBrOworICAgICAgICB0aW1lIENMS19QRVI7CisgICAgICAgIHRpbWUgTEFTVF9DTEs7CisKKyAgICAgICAgaWYgKGN1cnJlbnRfc3RhdGUgPT0gUkVTRVRfU1RBVEUpCisgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBTVEFORF9CWTsKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV9DU05lZ19pcGQpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChidXNfY3ljbGVfc3RhdGU9PVNUQU5EX0JZKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBjZmdfd3JpdGUgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ICAgPSAwOworICAgICAgICAgICAgICAgICAgICBtb2RlX2NudCAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRhdGFfY250ICAgPSAwOworICAgICAgICAgICAgICAgICAgICBvcGNvZGVfdG1wID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwICA9IDA7CisgICAgICAgICAgICAgICAgICAgIERPVUJMRSAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBRVUFEUkQgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgQ0xLX1BFUiAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIExBU1RfQ0xLICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9zdGF0ZSA9PSBBVVRPQk9PVCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBPUENPREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1NDS19pcGQpIC8vIEluc3RydWN0aW9ucywgYWRkcmVzc2VzIG9yIGRhdGEgcHJlc2VudAorICAgICAgICAgICAgYmVnaW4gICAgICAgICAgICAgICAgICAgIC8vIGF0IFNJIGFyZSBsYXRjaGVkIG9uIHRoZSByaXNpbmcgZWRnZSBvZiBTQ0sKKworICAgICAgICAgICAgICAgIENMS19QRVIgPSAkdGltZSAtIExBU1RfQ0xLOworICAgICAgICAgICAgICAgIExBU1RfQ0xLID0gJHRpbWU7CisgICAgICAgICAgICAgICAgaWYgKENIRUNLX0ZSRVEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKChDTEtfUEVSIDwgMjAwMDAgJiYgTGF0ZW5jeV9jb2RlID09IDMpIHx8CisgICAgICAgICAgICAgICAgICAgIChDTEtfUEVSIDwgMTI1MDAgJiYgTGF0ZW5jeV9jb2RlID09IDApIHx8CisgICAgICAgICAgICAgICAgICAgIChDTEtfUEVSIDwgMTExMDAgJiYgTGF0ZW5jeV9jb2RlID09IDEpIHx8CisgICAgICAgICAgICAgICAgICAgIChDTEtfUEVSIDwgOTYwMCAmJiBMYXRlbmN5X2NvZGUgPT0gMikpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIk1vcmUgd2FpdCBzdGF0ZXMgYXJlIHJlcXVpcmVkIGZvciIpOworICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJ0aGlzIGNsb2NrIGZyZXF1ZW5jeSB2YWx1ZSIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCB8fCBJbnN0cnVjdCA9PSBERFJESU9SIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJESU9SNCB8fCBJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICBpZiAgIChDTEtfUEVSIDwgMTI1MDApCisgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHI4MCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHI4MCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDA7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAofkNTTmVnX2lwZCkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBjYXNlIChidXNfY3ljbGVfc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBPUENPREVfQllURToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV9pbltvcGNvZGVfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGVfY250ID0gb3Bjb2RlX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhdGVuY3lfY29kZSA9IENvbmZpZ19yZWcxWzc6Nl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGNvZGVfY250ID09IEJZVEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT03O2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZVtpXSA9IG9wY29kZV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChvcGNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDAxMTAgOiAvLyAwNmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdSRU47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDAxMDAgOiAvLyAwNGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdSREk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDAwMDEgOiAvLyAwMWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdSUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAwMDAxMSA6IC8vIDAzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkVBRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAxMDAxMSA6IC8vIDEzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkQ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMDAxMDExIDogLy8gNEJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBPVFBSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAwMTAxIDogLy8gMDVoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBSRFNSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAwMTExIDogLy8gMDdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBSRFNSMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDExMDEwMSA6IC8vIDM1aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkRDUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDAxMDAwMCA6IC8vIDkwaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkVNUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDAxMTExMSA6IC8vIDlGaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkRJRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDEwMTAxMSA6IC8vIEFCaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAwMTAxMSA6IC8vIDBCaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRlNUUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAxMTAwIDogLy8gMENoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBGU1RSRDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAxMTAxIDogLy8gMERoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBERFJGUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDExMTAgOiAvLyAwRWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEREUkZSNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMTEwMTEgOiAvLyAzQmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IERPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMTExMDAgOiAvLyAzQ2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IERPUjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTExMDExIDogLy8gQkJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBESU9SOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDExMTEwMCA6IC8vIEJDaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRElPUjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTExMTAxIDogLy8gQkRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBERFJESU9SOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDExMTExMCA6IC8vIEJFaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRERSRElPUjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMTAxMDExIDogLy8gNkJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBRT1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMTAxMTAwIDogLy8gNkNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBRT1I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMTAxMSA6IC8vIEVCaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUUlPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMDExMDAgOiAvLyBFQ2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFFJT1I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMTEwMSA6IC8vIEVEaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRERSUUlPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMDExMTAgOiAvLyBFRWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEREUlFJT1I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAwMDAxMCA6IC8vIDAyaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUFA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAwMTAgOiAvLyAxMmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFBQNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDExMDAxMDogLy8gMzJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBRUFA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRfcGcgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTExMDAwOiAvLyAzOGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFFQUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZF9wZyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMTAxMDAgOiAvLyAzNGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFFQUDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRfcGcgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMDAwMDEwIDogLy8gNDJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBPVFBQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMDAwMTAxIDogLy8gODVoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQR1NQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMDAxMDEwIDogLy8gOEFoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQR1JTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMDAwMTExIDogLy8gQzdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBCRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMTEwMDAwMCA6IC8vIDYwaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gQkU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTEwMTEwMDAgOiAvLyBEOGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMDExMTAwIDogLy8gRENoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBTRTQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDExMTAxMDEgOiAvLyA3NWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEVSU1A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDExMTEwMTAgOiAvLyA3QWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEVSUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMDAgOiAvLyAxNGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEFCUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMDEgOiAvLyAxNWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEFCV1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMTAgOiAvLyAxNmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEJSUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMTEgOiAvLyAxN2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEJSV1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMDEwMTEgOiAvLyAyQmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEFTUFJEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTAxMTExIDogLy8gMkZoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBBU1BQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAwMDAwIDogLy8gRTBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBEWUJSRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMDAwMSA6IC8vIEUxaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRFlCV1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMDAwMTAgOiAvLyBFMmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFBQQlJEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAwMDExIDogLy8gRTNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQUEJQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAwMTAwIDogLy8gRTRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQUEJFUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTAxMDAxMTAgOiAvLyBBNmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFBMQldSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTAwMTExIDogLy8gQTdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQTEJSRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMDExMSA6IC8vIEU3aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUEFTU1JEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAxMDAwIDogLy8gRThoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQQVNTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMTAwMSA6IC8vIEU5aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUEFTU1U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMTAwMDAgOiAvLyBGMGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFJFU0VUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTEwMDAwIDogLy8gMzBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBDTFNSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTAwMDAwIDogLy8gMjBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQNEU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMDAwMDEgOiAvLyAyMWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFA0RTQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDEwMDAwMDEgOiAvLyA0MWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IERMUFJEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMDAwMDExIDogLy8gNDNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQTlZETFI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDEwMDEwMTAgOiAvLyA0QWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdWRExSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTExMDAxIDogLy8gQjloCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBCUkFDOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTExMTExIDogLy8gRkZoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBNQlI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAxMTAwMCA6IC8vIDE4aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRUNDUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC8vZW5kIG9mIE9QQ09ERSBCWVRFCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEFERFJFU1NfQllURVMgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSKSAgfHwgKEluc3RydWN0ID09IEREUkZSNCkgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdCA9PSBERFJESU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRERSRElPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdCA9PSBERFJRSU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRERSUUlPUjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET1VCTEUgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9VQkxFID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IFFPUikgIHx8IChJbnN0cnVjdCA9PSBRT1I0KSAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IFFJT1IpIHx8IChJbnN0cnVjdCA9PSBRSU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IEREUlFJT1IpIHx8IChJbnN0cnVjdCA9PSBERFJRSU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVQURSRCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUFEUkQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoKEluc3RydWN0ID09IEZTVFJEKSAmJiAofkVYVEFERCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3QgPT0gRE9SKSAgJiYgKH5FWFRBREQpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3QgPT0gT1RQUikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3QgPT0gUU9SKSAmJiBRVUFEICYmICh+RVhUQUREKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW5zdHJ1Y3Rpb24gKyAzIEJ5dGVzIEFkZHJlc3MgKyBEdW1teSBCeXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gMypCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0yMztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjMtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzE6MjVdID0gNydiMDAwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzI0XSA9IEJhbmtfQWRkcl9yZWdbMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IGFkZHJfYnl0ZXMgOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0PT1GU1RSRCB8fCBJbnN0cnVjdD09RE9SIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFPUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdD09RUNDUkQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW5zdHJ1Y3Rpb24gKyA0IEJ5dGVzIEFkZHJlc3MgKyBEdW1teSBCeXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0zMTtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpYWRkcl9ieXRlc1szMS1pXSA9IEFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9IaWdoIG9yZGVyIGFkZHJlc3MgYml0cyBhcmUgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSB7aGlhZGRyX2J5dGVzWzMxOjRdLDQnYjAwMDB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoKEluc3RydWN0PT1GU1RSRDQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1ET1I0KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PUZTVFJEKSAmJiBFWFRBREQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RE9SKSAmJiBFWFRBREQpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09UU9SNCkgJiYgUVVBRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1RT1IpICYmIFFVQUQgJiYgRVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JbnN0cnVjdGlvbiArIDQgQnl0ZXMgQWRkcmVzcyArIER1bW15IEJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bYWRkcl9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCA9PSA0KkJZVEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlhZGRyX2J5dGVzWzMxLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hpZ2ggb3JkZXIgYWRkcmVzcyBiaXRzIGFyZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGhpYWRkcl9ieXRlc1syNDowXX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIGNoYW5nZV9hZGRyID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PURJT1IpICYmICh+RVhUQUREKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0RVQUwgSS9PIEhpZ2ggUGVyZm9ybWFuY2UgUmVhZCgzIEJ5dGVzIEFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzIqYWRkcl9jbnRdICAgICA9IFNPX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250ICsgMV0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURS8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldPUFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMToyNV0gPSA3J2IwMDAwMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjRdID0gQmFua19BZGRyX3JlZ1swXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzID0gYWRkcl9ieXRlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfYWRkciA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFSFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKEluc3RydWN0PT1ESU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1ESU9SKSAmJiBFWFRBREQpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luIC8vRFVBTCBJL08gSGlnaCBQZXJmb3JtYW5jZSBSZWFkKDRCeXRlcyBBZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSAgICAgPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bMiphZGRyX2NudCArIDFdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCA9PSA0KkJZVEUvMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMS1pXSA9IEFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGFkZHJfYnl0ZXNbMjQ6MF19OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBRSU9SKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUVVBRCBJL08gSGlnaCBQZXJmb3JtYW5jZSBSZWFkICgzQnl0ZXMgQWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMV0gPSBXUE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrM10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURS80KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjMtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMToyNV0gPSA3J2IwMDAwMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzI0XSA9IEJhbmtfQWRkcl9yZWdbMF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IGFkZHJfYnl0ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBNT0RFX0JZVEU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBTVEFORF9CWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09UUlPUjQpIHx8ICgoSW5zdHJ1Y3Q9PVFJT1IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgRVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUVVBRCBJL08gSGlnaCBQZXJmb3JtYW5jZSBSZWFkICg0Qnl0ZXMgQWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMV0gPSBXUE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrM10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFLzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWFkZHJfYnl0ZXNbMzEtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9IaWdoIG9yZGVyIGFkZHJlc3MgYml0cyBhcmUgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzID0gezcnYjAwMDAwMDAsaGlhZGRyX2J5dGVzWzI0OjBdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IFNUQU5EX0JZOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKCgoSW5zdHJ1Y3Q9PVJENCkgfHwgKEluc3RydWN0PT1QUDQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1TRTQpIHx8KEluc3RydWN0PT1QUEJSRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PURZQlJEKSB8fChJbnN0cnVjdD09RFlCV1IpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1QUEJQKSB8fCAoSW5zdHJ1Y3Q9PVA0RTQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09UkVBRCkgJiYgRVhUQUREKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PVBQKSAmJiBFWFRBREQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09UDRFKSAmJiBFWFRBREQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09U0UpICYmIEVYVEFERCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUVVBRCAmJiAoSW5zdHJ1Y3Q9PVFQUDQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1RUFApICYmIEVYVEFERCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bYWRkcl9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCA9PSA0KkJZVEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlhZGRyX2J5dGVzWzMxLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hpZ2ggb3JkZXIgYWRkcmVzcyBiaXRzIGFyZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGhpYWRkcl9ieXRlc1syNDowXX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIGNoYW5nZV9hZGRyID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5FWFRBREQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblthZGRyX2NudF0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzMxOjI1XSA9IDcnYjAwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1syNF0gPSBCYW5rX0FkZHJfcmVnWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSBhZGRyX2J5dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdD09RERSRlIpICYmICh+RVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GYXN0IEREUiBSZWFkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bYWRkcl9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFkZHJfY250LzIpIDw9IDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGVfdG1wW2FkZHJfY250LzJdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0PT1ERFJGUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RERSRlIpICYmIEVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhZGRyX2NudC8yKSA8PSAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX3RtcFthZGRyX2NudC8yXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICAgIC8vRHVhbCBJL08gRERSIFJlYWQgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSA9IFNPX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250KzFdPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYWRkcl9jbnQvMikgPD0gMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV90bXBbYWRkcl9jbnQvMl0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUkRJT1I0KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PUREUkRJT1IpICYmIEVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICAgIC8vRHVhbCBJL08gRERSIFJlYWQgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSAgID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzIqYWRkcl9jbnQrMV0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYWRkcl9jbnQvMikgPD0gMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV90bXBbYWRkcl9jbnQvMl0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUlFJT1IpICYmICh+RVhUQUREKSAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAvL1F1YWQgSS9PIEREUiBSZWFkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX3RtcFthZGRyX2NudC8yXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFFVQUQgJiYgKChJbnN0cnVjdD09RERSUUlPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RERSUUlPUikgJiYgRVhUQUREKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCsxXSA9IFdQTmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzJdID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrM10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV90bXBbYWRkcl9jbnQvMl0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PREVfQllURSA6CisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKEluc3RydWN0PT1ESU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRElPUjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bMiptb2RlX2NudF0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pblsyKm1vZGVfY250KzFdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfY250ID0gbW9kZV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZV9jbnQgPT0gQllURS8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9NztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2J5dGVzW2ldID0gbW9kZV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDAgfHwgTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChJbnN0cnVjdD09UUlPUikgfHwgKEluc3RydWN0ID09IFFJT1I0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250XSA9IEhPTEROZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bNCptb2RlX2NudCsxXSA9IFdQTmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzQqbW9kZV9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250KzNdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfY250ID0gbW9kZV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZV9jbnQgPT0gQllURS80KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9NztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2J5dGVzW2ldID0gbW9kZV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IEREUkZSKSB8fCAoSW5zdHJ1Y3QgPT0gRERSRlI0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pblsyKm1vZGVfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUikgfHwgKEluc3RydWN0PT1ERFJESU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250XSAgID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bNCptb2RlX2NudCsxXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoSW5zdHJ1Y3Q9PUREUlFJT1IpIHx8IChJbnN0cnVjdCA9PSBERFJRSU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bMF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pblszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgRFVNTVlfQllURVMgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5fRExQKEluc3RydWN0LCBFSFAsIExhdGVuY3lfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCwgc3RhcnRfZGxwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRE9VQkxFID09IDEnYjEgJiYgKGhvbGRfbW9kZT09MCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKEluc3RydWN0PT1GU1RSRCkgfHwgKEluc3RydWN0PT1GU1RSRDQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1ET1IpICB8fCAoSW5zdHJ1Y3Q9PURPUjQpICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09T1RQUikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChJbnN0cnVjdD09UU9SKXx8KEluc3RydWN0PT1RT1I0KSkgJiYgUVVBRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR1bW15X2NudCA9PSBCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUkZSKSB8fCAoSW5zdHJ1Y3Q9PUREUkZSNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT0xKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT0yKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT01KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT01KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT02KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT03KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3Q9PVJFUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1teV9jbnQgPSBkdW1teV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHVtbXlfY250ID09IDMqQllURSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdD09RUNDUkQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR1bW15X2NudCA9PSBCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBESU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRElPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCA9IGR1bW15X2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFSFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChMYXRlbmN5X2NvZGUgPT0gMSkgJiYgKGR1bW15X2NudD09MSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMikgJiYgKGR1bW15X2NudD09MikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChMYXRlbmN5X2NvZGUgPT0gMykgJiYgKGR1bW15X2NudD09NCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMCkgJiYgKGR1bW15X2NudD09NCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMSkgJiYgKGR1bW15X2NudD09NSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMikgJiYgKGR1bW15X2NudD09NikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUikgfHwgKEluc3RydWN0PT1ERFJESU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT0yKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT01KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT02KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT02KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT03KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT04KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChJbnN0cnVjdCA9PSBRSU9SKSB8fCAoSW5zdHJ1Y3QgPT0gUUlPUjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1teV9jbnQgPSBkdW1teV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChMYXRlbmN5X2NvZGUgPT0gMykgJiYgKGR1bW15X2NudD09MSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTGF0ZW5jeV9jb2RlID09IDEpICYmIChkdW1teV9jbnQ9PTQpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMikgJiYgKGR1bW15X2NudD09NSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChJbnN0cnVjdD09RERSUUlPUikgfHwgKEluc3RydWN0PT1ERFJRSU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCA9IGR1bW15X2NudCArIDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoTGF0ZW5jeV9jb2RlID09IDMpICYmIChkdW1teV9jbnQ9PTMpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMCkgJiYgKGR1bW15X2NudD09NikpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT03KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTGF0ZW5jeV9jb2RlID09IDIpICYmIChkdW1teV9jbnQ9PTgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIERBVEFfQllURVMgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSAmJiAoaG9sZF9tb2RlPT0wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFFVQUQpICYmICgoSW5zdHJ1Y3Q9PVFQUCkgfHwgKEluc3RydWN0ID09IFFQUDQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX255YmJsZSA9IHtIT0xETmVnX2luLCBXUE5lZ19pbiwgU09faW4sIFNJX2lufTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFfY250ID4gKChQYWdlU2l6ZSsxKSoyLTEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0luIGNhc2Ugb2YgcXVhZCBtb2RlIGFuZCBRUFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgbW9yZSB0aGFuIDUxMiBieXRlcyBhcmUgc2VudCB0byB0aGUgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0wO2k8PShQYWdlU2l6ZSoyLTEpO2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX2RhdGFfaW5baV0gPSBxdWFkX2RhdGFfaW5baSsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZF9kYXRhX2luWyhQYWdlU2l6ZSsxKSoyLTFdID0gcXVhZF9ueWJibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NudCA9IGRhdGFfY250ICsxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWRfbnliYmxlICE9PSA0J2JaWlpaKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX2RhdGFfaW5bZGF0YV9jbnRdID0gcXVhZF9ueWJibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfY250ID0gZGF0YV9jbnQgKzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCh+UVVBRFJEKSAmJiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+ICgoUGFnZVNpemUrMSkqOC0xKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JbiBjYXNlIG9mIHNlcmlhbCBtb2RlIGFuZCBQUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiBtb3JlIHRoYW4gUGFnZVNpemUgYXJlIHNlbnQgdG8gdGhlIGRldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByZXZpb3VzbHkgbGF0Y2hlZCBkYXRhIGFyZSBkaXNjYXJkZWQgYW5kIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNTYvNTEyIGRhdGEgYnl0ZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcHJvZ3JhbW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvcnJlY3RseSB3aXRoaW4gdGhlIHNhbWUgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRfY250ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9KFBhZ2VTaXplKkJZVEUtMSk7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pbltpXSA9IERhdGFfaW5baSs4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pbltQYWdlU2l6ZSpCWVRFICsgYml0X2NudF0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9jbnQgPSBiaXRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NudCA9IGRhdGFfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bZGF0YV9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NudCA9IGRhdGFfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV9TQ0tfaXBkKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAofkNTTmVnX2lwZCkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBjYXNlIChidXNfY3ljbGVfc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSRVNTX0JZVEVTIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERPVUJMRSA9PSAxJ2IxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3Q9PUREUkZSKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRmFzdCBERFIgUmVhZCBNb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gMypCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzMxOjI1XSA9IDcnYjAwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1syNF0gPSBCYW5rX0FkZHJfcmVnWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSBhZGRyX2J5dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRlI0KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PUREUkZSKSAmJiBFWFRBREQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblthZGRyX2NudF0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDQqQllURSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMS1pXSA9IEFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGFkZHJfYnl0ZXNbMjQ6MF19OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERPVUJMRSA9PSAxJ2IxICYmIChob2xkX21vZGU9PTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9vdXQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEwIHJlYWRfb3V0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICAgIC8vRHVhbCBJL08gRERSIFJlYWQgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSA9IFNPX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250KzFdPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURS8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzMxOjI1XSA9IDcnYjAwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1syNF0gPSBCYW5rX0FkZHJfcmVnWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSBhZGRyX2J5dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RERSRElPUikgJiYgRVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gICAgLy9EdWFsIEkvTyBERFIgUmVhZCBNb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzIqYWRkcl9jbnRdICAgPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bMiphZGRyX2NudCsxXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFLzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0zMTtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzEtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSB7NydiMDAwMDAwMCxhZGRyX2J5dGVzWzI0OjBdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfYWRkciA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFSFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSAmJiAoaG9sZF9tb2RlPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUlFJT1IpICYmICh+RVhUQUREKSAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAvL1F1YWQgSS9PIEREUiBSZWFkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gMypCWVRFLzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0yMztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjMtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzE6MjVdID0gNydiMDAwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzI0XSA9IEJhbmtfQWRkcl9yZWdbMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IGFkZHJfYnl0ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoUVVBRCAmJiAoKEluc3RydWN0PT1ERFJRSU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1ERFJRSU9SKSAmJiBFWFRBREQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFLzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0zMTtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzEtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSB7NydiMDAwMDAwMCxhZGRyX2J5dGVzWzI0OjBdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfYWRkciA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RFX0JZVEUgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSKSB8fCAoSW5zdHJ1Y3QgPT0gRERSRlI0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzIqbW9kZV9jbnQrMV0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9jbnQgPSBtb2RlX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlX2NudCA9PSBCWVRFLzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT03O2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfYnl0ZXNbaV0gPSBtb2RlX2luWzctaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuX0RMUChJbnN0cnVjdCwgRUhQLCBMYXRlbmN5X2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCwgc3RhcnRfZGxwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSAmJiAoaG9sZF9tb2RlPT0wKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUikgfHwgKEluc3RydWN0PT1ERFJESU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250KzJdID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bNCptb2RlX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2NudCA9IG1vZGVfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVfY250ID09IEJZVEUvNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTc7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9ieXRlc1tpXSA9IG1vZGVfaW5bNy1pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5fRExQKEluc3RydWN0LCBFSFAsIExhdGVuY3lfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250LCBzdGFydF9kbHApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERPVUJMRSA9PSAxJ2IxICYmIChob2xkX21vZGU9PTApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9vdXQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0PT1ERFJRSU9SKSB8fCAoSW5zdHJ1Y3Q9PUREUlFJT1I0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls1XSA9IFdQTmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzZdID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bN10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9NztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9ieXRlc1tpXSA9IG1vZGVfaW5bNy1pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5fRExQKEluc3RydWN0LCBFSFAsIExhdGVuY3lfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250LCBzdGFydF9kbHApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRE9VQkxFID09IDEnYjEgJiYgKGhvbGRfbW9kZT09MCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBEQVRBX0JZVEVTOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZF9tb2RlPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0PT1SRUFEKSB8fCAoSW5zdHJ1Y3Q9PVJENCkgICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09RlNUUkQpfHwgKEluc3RydWN0PT1GU1RSRDQpfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PVJEU1IpIHx8IChJbnN0cnVjdD09UkRTUjIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1SRENSKSB8fCAoSW5zdHJ1Y3Q9PU9UUFIpICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09RE9SKSB8fCAoSW5zdHJ1Y3Q9PURPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1ESU9SKXx8IChJbnN0cnVjdD09RElPUjQpfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PUFCUkQpIHx8IChJbnN0cnVjdD09QlJSRCkgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1BU1BSRCl8fCAoSW5zdHJ1Y3Q9PURZQlJEKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UFBCUkQpfHwgKEluc3RydWN0ID09IEVDQ1JEKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UEFTU1JEKXx8IChJbnN0cnVjdD09UkRJRCl8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UkVTKSB8fCAoSW5zdHJ1Y3Q9PVJFTVMpICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UExCUkQpfHwgKEluc3RydWN0PT1ETFBSRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudF9zdGF0ZSA9PSBBVVRPQk9PVCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RlbGF5ID09IDApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoSW5zdHJ1Y3Q9PVFPUikgfHwgKEluc3RydWN0PT1RSU9SKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PVFJT1I0KSkgJiYgUVVBRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIERVTU1ZX0JZVEVTOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZF9tb2RlPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybl9ETFAoSW5zdHJ1Y3QsIEVIUCwgTGF0ZW5jeV9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCwgc3RhcnRfZGxwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRE9VQkxFID09IDEnYjEgJiYgVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9DU05lZ19pcGQpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChidXNfY3ljbGVfc3RhdGUgIT0gREFUQV9CWVRFUykKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoYnVzX2N5Y2xlX3N0YXRlID09IEFERFJFU1NfQllURVMgJiYgb3Bjb2RlX3RtcCA9PSA4J2hGRikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gTUJSOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gU1RBTkRfQlk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChidXNfY3ljbGVfc3RhdGUgPT0gREFUQV9CWVRFUykKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKG1vZGVfYnl0ZXNbNzo0XSA9PSA0J2IxMDEwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09RElPUiB8fCBJbnN0cnVjdD09RElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdD09UUlPUiB8fCBJbnN0cnVjdD09UUlPUjQpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobW9kZV9ieXRlc1s3OjRdID09IH5tb2RlX2J5dGVzWzM6MF0pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IEREUkZSICB8fCBJbnN0cnVjdCA9PSBERFJGUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IFNUQU5EX0JZOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChJbnN0cnVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUkVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSREksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0U0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFA0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQNEU0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMU1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJBQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJFUlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTEJXUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHUlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJTUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJTOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUlI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIENTIyBpcyBkcml2ZW4gaGlnaCBhZnRlciBlaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jeWNsZSxvbmx5IHRoZSBTdGF0dXMgUmVnaXN0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd3JpdHRlbiB0by4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCQVJfQUNDID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD03O2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFfaW5baV09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luWzctaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUF9FUlIgPT0gMCAmJiBFX0VSUiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD03O2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnX2luW2ldPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bNy1pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0YV9jbnQgPT0gMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0FmdGVyIHRoZSAxNnRoIGN5Y2xlIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N0YXR1cyBhbmQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYXJlIHdyaXR0ZW4gdG8uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQkFSX0FDQyA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZ193cml0ZSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9NztpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxX2luW2ldPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFfaW5baV09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luWzE1LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9NztpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ19pbltpXT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luWzctaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RQUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGRhdGFfY250ICUgOCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9UGFnZVNpemU7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj03O2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRGF0YV9pblsoaSo4KSsoNy1qKV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9PSAxJ2JYKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVfc2x2W2pdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pblsoaSo4KSsoNy1qKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdCeXRlW2ldID0gQnl0ZV9zbHY7CisJCQkJCQkvLyRkaXNwbGF5KCIlbTogTG9jOiAleCBCeXRlOiAleCIsaSxCeXRlX3Nsdik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+IChQYWdlU2l6ZSsxKSpCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9udW1iZXIgPSBQYWdlU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9udW1iZXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZGF0YV9jbnQvOCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUFA0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZGF0YV9jbnQgJSAyKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZF9wZyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD1QYWdlU2l6ZTtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0xO2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFkX3NsdiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX2RhdGFfaW5bKGkqMikrKDEtaildOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGo9PTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9zbHZbNzo0XSA9IFF1YWRfc2x2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaj09MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlX3NsdlszOjBdID0gUXVhZF9zbHY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQnl0ZVtpXSA9IEJ5dGVfc2x2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+IChQYWdlU2l6ZSsxKSoyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlX251bWJlciA9IFBhZ2VTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9udW1iZXIgPSAoKGRhdGFfY250LzIpLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJXUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gMzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0wO2o8PTMxO2o9aisxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9Cb290X3JlZ19pbltqXSA9IERhdGFfaW5bMzEtal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUldSOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDtqPD03O2o9aisxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdfaW5bal0gPSBEYXRhX2luWzctal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1BQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9MTU7aj1qKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNQX3JlZ19pbltqXSA9IERhdGFfaW5bMTUtal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJXUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJBUl9pbltqXSA9IERhdGFfaW5bNy1qXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBOVkRMUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVkRMUl9yZWdfaW5bal0gPSBEYXRhX2luWzctal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXVkRMUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRExSX3JlZ19pbltqXSA9IERhdGFfaW5bNy1qXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSA2NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTE7ajw9ODtqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaz0xO2s8PTg7az1rKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzd29yZF9yZWdfaW5baio4LWtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bOCooai0xKStrLTFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NVOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSA2NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTE7ajw9ODtqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaz0xO2s8PTg7az1rKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTX1RFTVBbaio4LWtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bOCooai0xKStrLTFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRpbWluZyBjb250cm9sIGZvciB0aGUgUGFnZSBQcm9ncmFtCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgdGltZSBwb2I7CisgICAgdGltZSBlbGFwc2VkX3BnbTsKKyAgICB0aW1lIGVsYXBzZWRfdHN1OworICAgIHRpbWUgc3RhcnRfcGdtOworICAgIHRpbWUgc3RhcnRfdHN1OworICAgIHRpbWUgZHVyYXRpb25fcGdtOworICAgIHRpbWUgZHVyYXRpb25fdHN1OworICAgIGV2ZW50IHBkb25lX2V2ZW50OworCisgICAgYWx3YXlzIEAocmlzaW5nX2VkZ2VfUFNUQVJUKQorICAgIGJlZ2luCisgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gUFApIHx8IChJbnN0cnVjdCA9PSBQUDQpIHx8IChJbnN0cnVjdCA9PSBPVFBQKSB8fAorICAgICAgICAgICAoSW5zdHJ1Y3QgPT0gUVBQKSB8fCAoSW5zdHJ1Y3QgPT0gUVBQNCkpCisgICAgICAgICAgICBpZiAoUGFnZVNpemUgPT0gMjU1KQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBwb2IgPSB0ZGV2aWNlX1BQXzI1NjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBwb2IgPSB0ZGV2aWNlX1BQXzUxMjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwb2IgPSB0ZGV2aWNlX0JQOworICAgICAgICBpZiAoKHJpc2luZ19lZGdlX1BTVEFSVCkgJiYgUERPTkUpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBlbGFwc2VkX3BnbSA9IDA7CisgICAgICAgICAgICBkdXJhdGlvbl9wZ20gPSBwb2I7CisgICAgICAgICAgICBQRE9ORSA9IDEnYjA7CisgICAgICAgICAgICAtPnBkb25lX2V2ZW50OworICAgICAgICAgICAgc3RhcnRfcGdtID0gJHRpbWU7CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQR1NVU1ApCisgICAgYmVnaW4KKyAgICAgICAgaWYgKFBHU1VTUCAmJiAoflBET05FKSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGRpc2FibGUgcGRvbmVfcHJvY2VzczsKKyAgICAgICAgICAgIGVsYXBzZWRfcGdtID0gJHRpbWUgLSBzdGFydF9wZ207CisgICAgICAgICAgICBkdXJhdGlvbl9wZ20gPSBwb2IgLSBlbGFwc2VkX3BnbTsKKyAgICAgICAgICAgIFBET05FID0gMSdiMDsKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBHUkVTKQorICAgIGJlZ2luCisgICAgICAgIHN0YXJ0X3BnbSA9ICR0aW1lOworICAgICAgICAtPnBkb25lX2V2ZW50OworICAgIGVuZAorCisgICAgYWx3YXlzIEAocGRvbmVfZXZlbnQpCisgICAgYmVnaW46cGRvbmVfcHJvY2VzcworICAgICAgICBQRE9ORSA9IDEnYjA7CisgICAgICAgICNkdXJhdGlvbl9wZ20gUERPTkUgPSAxJ2IxOworICAgIGVuZAorCisgICAgYWx3YXlzIEAoU0kpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBQR1NQKSB8fCAoSW5zdHJ1Y3QgPT0gUEdSUykgfHwKKyAgICAgICAgICAgKEluc3RydWN0ID09IEVSU1ApIHx8IChJbnN0cnVjdCA9PSBFUlJTKSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIHN0YXJ0X3RzdSA9ICR0aW1lOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgU0NLKQorICAgIGJlZ2luCisgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gUEdTUCkgfHwgKEluc3RydWN0ID09IFBHUlMpIHx8CisgICAgICAgICAgIChJbnN0cnVjdCA9PSBFUlNQKSB8fCAoSW5zdHJ1Y3QgPT0gRVJSUykpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBlbGFwc2VkX3RzdSA9ICR0aW1lIC0gc3RhcnRfdHN1OworICAgICAgICAgICAgZHVyYXRpb25fdHN1ID0gdGRldmljZV9UU1UgLSBlbGFwc2VkX3RzdTsKKyAgICAgICAgICAgIGlmIChkdXJhdGlvbl90c3UgPiAwKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBUU1UgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIFRTVSA9IDEnYjE7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkoIldhcm5pbmcgYXQiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkoInRTVSBtYXggdGltZSB2aW9sYXRpb24iKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRpbWluZyBjb250cm9sIGZvciB0aGUgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgdGltZSB3b2I7CisgICAgYWx3YXlzIEAocG9zZWRnZSBXU1RBUlQpCisgICAgYmVnaW46d2RvbmVfcHJvY2VzcworICAgICAgICB3b2IgPSB0ZGV2aWNlX1dSUjsKKyAgICAgICAgaWYgKFdTVEFSVCAmJiBXRE9ORSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFdET05FID0gMSdiMDsKKyAgICAgICAgICAgICN3b2IgV0RPTkUgPSAxJ2IxOworICAgICAgICBlbmQKKyAgICBlbmQKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUmVzZXQgVGltaW5nCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICB0aW1lIHN0YXJ0bG87CisgICAgdGltZSBzdGFydGhpOworICAgIHRpbWUgZHVyYXRpb25sbzsKKyAgICB0aW1lIGR1cmF0aW9uaGk7CisKKyAgICBhbHdheXMgQChuZWdlZGdlIFJTVE5lZ19pbiBvciBJbnN0cnVjdCkKKyAgICBiZWdpbgorICAgICAgICBpZiAoflJTVE5lZ19pbikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFJTVCA9IDEnYjE7CisgICAgICAgICAgICAjMjAwMDAwIFJTVCA9IDEnYjA7ICAvLyAyMDAgbnMKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJFU0VUKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgUmVzZXRlZCA9IDEnYjA7CisgICAgICAgICAgICAjMTAwMDAgUmVzZXRlZCA9IDEnYjE7ICAgLy8gIDEwIG5zCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAoUlNUX2luIG9yIHJpc2luZ19lZGdlX1Jlc2V0ZWQpIC8vIFJlc2V0IGRvbmUscHJvZ3JhbSB0ZXJtaW5hdGVkCisgICAgYmVnaW4KKyAgICAgICAgaWYgKChSU1RfaW4gJiYgflJTVCkgfHwgKHJpc2luZ19lZGdlX1Jlc2V0ZWQpKQorICAgICAgICAgICAgZGlzYWJsZSBwZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgZGlzYWJsZSBlZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgZGlzYWJsZSB3ZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgUERPTkUgPSAxJ2IxOworICAgICAgICAgICAgRURPTkUgPSAxJ2IxOworICAgICAgICAgICAgV0RPTkUgPSAxJ2IxOworICAgIGVuZAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBUaW1pbmcgY29udHJvbCBmb3IgdGhlIEJ1bGsgRXJhc2UKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICB0aW1lIHNlbzsKKyAgICB0aW1lIGJlbzsKKyAgICBldmVudCBlZG9uZV9ldmVudDsKKyAgICB0aW1lIGVsYXBzZWRfZXJzOworICAgIHRpbWUgc3RhcnRfZXJzOworICAgIHRpbWUgZHVyYXRpb25fZXJzOworCisgICAgYWx3YXlzIEAocmlzaW5nX2VkZ2VfRVNUQVJUKQorICAgIGJlZ2luCisgICAgICAgIGlmIChVbmlmb3JtU2VjKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgc2VvID0gdGRldmljZV9TRTI1NjsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIHNlbyA9IHRkZXZpY2VfU0U2NDsKKyAgICAgICAgZW5kCisgICAgICAgIGJlbyA9IHRkZXZpY2VfQkU7CisgICAgICAgIGlmICgocmlzaW5nX2VkZ2VfRVNUQVJUKSAmJiBFRE9ORSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCRSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgZHVyYXRpb25fZXJzID0gYmVvOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGR1cmF0aW9uX2VycyA9IHNlbzsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxhcHNlZF9lcnMgPSAwOworICAgICAgICAgICAgRURPTkUgPSAxJ2IwOworICAgICAgICAgICAgLT5lZG9uZV9ldmVudDsKKyAgICAgICAgICAgIHN0YXJ0X2VycyA9ICR0aW1lOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVNVU1ApCisgICAgYmVnaW4KKyAgICAgICAgaWYgKEVTVVNQICYmICh+RURPTkUpKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgZGlzYWJsZSBlZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgZWxhcHNlZF9lcnMgPSAkdGltZSAtIHN0YXJ0X2VyczsKKyAgICAgICAgICAgIGR1cmF0aW9uX2VycyA9IHNlbyAtIGVsYXBzZWRfZXJzOworICAgICAgICAgICAgRURPTkUgPSAxJ2IwOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVJFUykKKyAgICBiZWdpbgorICAgICAgICBpZiAgKEVSRVMgJiYgKH5FRE9ORSkpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBzdGFydF9lcnMgPSAkdGltZTsKKyAgICAgICAgICAgIC0+ZWRvbmVfZXZlbnQ7CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAoZWRvbmVfZXZlbnQpCisgICAgYmVnaW4gOiBlZG9uZV9wcm9jZXNzCisgICAgICAgIEVET05FID0gMSdiMDsKKyAgICAgICAgI2R1cmF0aW9uX2VycyBFRE9ORSA9IDEnYjE7CisgICAgZW5kCisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gUHJvY2VzcyBmb3IgY2xvY2sgZnJlcXVlbmN5IGRldGVybWluYXRpb24KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgYWx3YXlzIEAocG9zZWRnZSBTQ0tfaXBkKQorICAgIGJlZ2luIDogY2xvY2tfcGVyaW9kCisgICAgICAgIGlmIChTQ0tfaXBkKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgU0NLX2N5Y2xlID0gJHRpbWUgLSBwcmV2X1NDSzsKKyAgICAgICAgICAgIHByZXZfU0NLID0gJHRpbWU7CisgICAgICAgIGVuZAorICAgIGVuZAorCisvLyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAvLyBNYWluIEJlaGF2aW9yIFByb2Nlc3MKKy8vICAgIC8vIGNvbWJpbmF0aW9uYWwgcHJvY2VzcyBmb3IgbmV4dCBzdGF0ZSBnZW5lcmF0aW9uCisvLyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICByZWcgcmlzaW5nX2VkZ2VfUERPTkUgPSAxJ2IwOworICAgIHJlZyByaXNpbmdfZWRnZV9FRE9ORSA9IDEnYjA7CisgICAgcmVnIHJpc2luZ19lZGdlX1dET05FID0gMSdiMDsKKyAgICByZWcgZmFsbGluZ19lZGdlX3dyaXRlID0gMSdiMDsKKyAgICByZWcgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luID0gMSdiMDsKKyAgICByZWcgZmFsbGluZ19lZGdlX1BBU1NVTENLX2luID0gMSdiMDsKKworICAgIGludGVnZXIgaTsKKyAgICBpbnRlZ2VyIGo7CisKKyAgICBhbHdheXMgQChyaXNpbmdfZWRnZV9Qb3dlcmVkVXAgb3IgZmFsbGluZ19lZGdlX3dyaXRlIG9yCisgICAgICAgICAgICAgZmFsbGluZ19lZGdlX1JTVE5lZyBvciByaXNpbmdfZWRnZV9QRE9ORSBvciByaXNpbmdfZWRnZV9XRE9ORSBvcgorICAgICAgICAgICAgIHJpc2luZ19lZGdlX0VET05FIG9yIEVSU1NVU1Bfb3V0X2V2ZW50IG9yIHJpc2luZ19lZGdlX1JTVE5lZyBvcgorICAgICAgICAgICAgIFBSR1NVU1Bfb3V0X2V2ZW50IG9yIHJpc2luZ19lZGdlX0NTTmVnX2lwZCBvciByaXNpbmdfZWRnZV9SU1Rfb3V0CisgICAgICAgICAgICAgb3IgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luIG9yIGZhbGxpbmdfZWRnZV9QQVNTVUxDS19pbiBvciBSU1Rfb3V0KQorICAgIGJlZ2luOiBTdGF0ZUdlbjEKKworICAgICAgICBpbnRlZ2VyIHNlY3Q7CisKKyAgICAgICAgaWYgKHJpc2luZ19lZGdlX1Bvd2VyZWRVcCAmJiBSU1ROZWdfaW4gJiYgUlNUX291dCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChBQkUgPT0gMSAmJiBSUE1FICE9PSAwICkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSAgICAgPSBBVVRPQk9PVDsKKyAgICAgICAgICAgICAgICByZWFkX2NudCAgICAgICA9IDA7CisgICAgICAgICAgICAgICAgYnl0ZV9jbnQgICAgICAgPSAxOworICAgICAgICAgICAgICAgIHJlYWRfYWRkciAgICAgID0ge0F1dG9Cb290X3JlZ1szMTo5XSwgOSdiMH07CisgICAgICAgICAgICAgICAgc3RhcnRfZGVsYXkgICAgPSBBdXRvQm9vdF9yZWdbODoxXTsKKyAgICAgICAgICAgICAgICBzdGFydF9hdXRvYm9vdCA9IDA7CisgICAgICAgICAgICAgICAgQUJTRCAgICAgICAgICAgPSBBdXRvQm9vdF9yZWdbODoxXTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAoUG93ZXJlZFVwKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFJTVF9vdXQgPT0gMSdiMCkKKyAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gY3VycmVudF9zdGF0ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSAmJiBJbnN0cnVjdCA9PSBSRVNFVCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKEFCRSA9PSAxICYmIFJQTUUgIT09IDApCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgICAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICBieXRlX2NudCAgICAgICA9IDE7CisgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciAgICAgID0ge0F1dG9Cb290X3JlZ1szMTo5XSwgOSdiMH07CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RlbGF5ICAgID0gQXV0b0Jvb3RfcmVnWzg6MV07CisgICAgICAgICAgICAgICAgICAgIEFCU0QgICAgICAgICAgID0gQXV0b0Jvb3RfcmVnWzg6MV07CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2F1dG9ib290ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSAgICAgPSBBVVRPQk9PVDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBjYXNlIChjdXJyZW50X3N0YXRlKQorICAgICAgICAgICAgICAgICAgICBSRVNFVF9TVEFURSA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJpc2luZ19lZGdlX1JTVF9vdXQgJiYgUlNUTmVnX2luKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHJpc2luZ19lZGdlX1JTVE5lZyAmJiBSU1Rfb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFCRSA9PSAxICYmIFJQTUUhPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gQVVUT0JPT1Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICAgICAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9jbnQgICAgICAgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgICAgICA9IHtBdXRvQm9vdF9yZWdbMzE6OV0sOSdiMH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RlbGF5ICAgID0gQXV0b0Jvb3RfcmVnWzg6MV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2F1dG9ib290ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJTRCAgICAgICAgICAgPSBBdXRvQm9vdF9yZWdbODoxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIElETEUgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gV1JSICYmIFdFTCA9PSAxICYmIEJBUl9BQ0MgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgoKH4oU1JXRCA9PSAxICYmIH5XUE5lZ19pbikpJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBub3QgZXhlY3V0ZSBpZiBIUE0gaXMgZW50ZXJlZCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIFdFTCBiaXQgaXMgemVybworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChUQlBST1Q9PTEgJiYgQ29uZmlnX3JlZzFfaW5bNV09PTEnYjApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRCUEFSTT09MSAmJiBDb25maWdfcmVnMV9pblsyXT09MSdiMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQlBOViAgPT0xICYmIENvbmZpZ19yZWcxX2luWzNdPT0xJ2IwKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmdfd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlIG9mICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJDb25maWd1cmF0aW9uIFJlZ2lzdGVyIE9UUCAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYml0IGZyb20gMSB0byAwIGlzIG5vdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gV1JJVEVfU1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFdSUiAmJiBCQVJfQUNDID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbG93ZXIgYWRkcmVzcyBiaXRzIG9mIHRoZSBCQVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gUFAgfHwgSW5zdHJ1Y3QgPT0gUVBQIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFBQNCB8fCBJbnN0cnVjdCA9PSBRUFA0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IEFkZHJlc3MgLyAoUGFnZVNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XT09IDAgJiYgUFBCX2JpdHNbc2VjdF09PSAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gUEFHRV9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3Q9PU9UUFAgJiYgV0VMPT0xICYmIEZSRUVaRT09MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoKEFkZHJlc3M+PTE2J2gwMDEwICYmIEFkZHJlc3M8PTE2J2gwMDEzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwoQWRkcmVzcz49MTYnaDAwMjAgJiYgQWRkcmVzczw9MTYnaDAwRkYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFMVtBZGRyZXNzLzMyXSA9PSAxKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBZGRyZXNzPj0xNidoMDEwMCAmJiBBZGRyZXNzPD0xNidoMDFGRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIExPQ0tfQllURTJbKEFkZHJlc3MtMTYnaDAxMDApLzMyXT09MSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQWRkcmVzcz49MTYnaDAyMDAgJiYgQWRkcmVzczw9MTYnaDAyRkYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBMT0NLX0JZVEUzWyhBZGRyZXNzLTE2J2gwMjAwKS8zMl09PTEpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFkZHJlc3M+PTE2J2gwMzAwICYmIEFkZHJlc3M8PTE2J2gwM0ZGKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFNFsoQWRkcmVzcy0xNidoMDMwMCkvMzJdID09IDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKEFkZHJlc3MgKyBCeXRlX251bWJlciA8PSBPVFBIaUFkZHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gIE9UUF9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gU0UgfHwgSW5zdHJ1Y3QgPT0gU0U0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVuaWZvcm1TZWMgfHwgKFRvcEJvb3QgJiYgc2VjdCA8IDUxMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJvdHRvbUJvb3QgJiYgc2VjdCA+IDMxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XT09IDAgJiYgUFBCX2JpdHNbc2VjdF09PSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIERZQl9iaXRzW3NlY3RdPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gIFNFQ1RPUl9FUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoVG9wQm9vdCAmJiBzZWN0ID49IDUxMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQm90dG9tQm9vdCAmJiBzZWN0IDw9IDMxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFNFID09IDMyICYmIEFTUF9Qcm90U0UgPT0gMzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NlY3RvciBlcmFzZSBjb21tYW5kIGlzIGFwcGxpZWQgdG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy82NCBLQiByYW5nZSB0aGF0IGluY2x1ZGVzIDQgS0Igc2VjdG9ycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gIFNFQ1RPUl9FUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBQNEUgfHwgSW5zdHJ1Y3QgPT0gUDRFNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVbmlmb3JtU2VjIHx8IChUb3BCb290ICYmIHNlY3QgPCA1MTApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCb3R0b21Cb290ICYmIHNlY3QgPiAzMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiVGhlIGluc3RydWN0aW9uIGlzIGFwcGxpZWQgdG8iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJhIHNlY3RvciB0aGF0IGlzIGxhcmdlciB0aGFuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiNCBLQi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJJbnN0cnVjdGlvbiBpcyBpZ25vcmVkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlY19Qcm90W3NlY3RdPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT09IDEgJiYgRFlCX2JpdHNbc2VjdF09PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSAgU0VDVE9SX0VSUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQkUgJiYgV0VMID09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0YXR1c19yZWcxWzRdPT0gMCAmJiBTdGF0dXNfcmVnMVszXT09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzJdPT0gMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBCVUxLX0VSUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBBQldSICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0F1dG9ib290IFJlZ2lzdGVyIFdyaXRlIENvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEFVVE9CT09UX1BHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSV1IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQmFuayBSZWdpc3RlciBXcml0ZSBDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFTUFAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BU1AgUmVnaXN0ZXIgUHJvZ3JhbSBDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+KEFTUE9UUEZMQUcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEFTUF9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQTEJXUiAmJiBXRUwgPT0gMSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RFbmFibGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBMQl9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQQVNTUCAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAofihQV0RNTEI9PSAwICYmIFBTVE1MQj09IDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBBU1NfUEc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUEFTU1UgJiYgV0VMICYmIH5XSVApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBQQVNTX1VOTE9DSzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJQICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlIDw9IFBQQl9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJFUlMgJiYgV0VMICYmIFBQQk9UUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA8PSBQUEJfRVJTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IERZQldSICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gRFlCX1BHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBOVkRMUiAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IE5WRExSX1BHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2Vfd3JpdGUgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMSAmJiB+V0lQKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUEFTU1UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBQQVNTX1VOTE9DSzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBBVVRPQk9PVCA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfQ1NOZWdfaXBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBXUklURV9TUiA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfV0RPTkUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIFBBR0VfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBSR1NVU1Bfb3V0X2V2ZW50ICYmIFBSR1NVU1Bfb3V0ID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBHX1NVU1A7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgUEdfU1VTUCA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJXUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9CYW5rIFJlZ2lzdGVyIFdyaXRlIENvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBHX1NVU1A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUEdSUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBBR0VfUEc7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgT1RQX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgQlVMS19FUlMgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX0VET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBTRUNUT1JfRVJTIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFUlNTVVNQX291dF9ldmVudCAmJiBFUlNTVVNQX291dCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJpc2luZ19lZGdlX0VET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBFUlNfU1VTUCA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IFBQIHx8IEluc3RydWN0ID09IFFQUCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUFA0IHx8IEluc3RydWN0ID09IFFQUDQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFBBUkFNX1JFR0lPTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gQWRkcmVzcy8oU2VjU2l6ZSsxKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5QQVJBTV9SRUdJT04gJiYgU2VjdG9yU3VzcGVuZCAhPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gQWRkcmVzcyAvIChQYWdlU2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQUEJfYml0c1tzZWN0XT09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUF9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBCUldSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQmFuayBSZWdpc3RlciBXcml0ZSBDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBEWUJXUiAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IERZQl9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICAoSW5zdHJ1Y3QgPT0gRVJSUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFNFQ1RPUl9FUlM7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgRVJTX1NVU1BfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFBSR1NVU1Bfb3V0X2V2ZW50ICYmIFBSR1NVU1Bfb3V0ID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEVSU19TVVNQX1BHX1NVU1A7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIEVSU19TVVNQX1BHX1NVU1AgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2Vfd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUldSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSAgRVJTX1NVU1BfUEdfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQR1JTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSAgRVJTX1NVU1BfUEc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgUEFTU19QRyA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBQQVNTX1VOTE9DSyA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2VfUEFTU1VMQ0tfaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgUFBCX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIFBQQl9FUlMgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIEFVVE9CT09UX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIFBMQl9QRyA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBEWUJfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfUERPTkUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEVSU19TVVNQOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBBU1BfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfUERPTkUpCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5WRExSX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy9GU00gT3V0cHV0IGdlbmVyYXRpb24gYW5kIGdlbmVyYWwgZnVuY3Rpb25hbGl0eQorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIHJlZyByaXNpbmdfZWRnZV9yZWFkX291dCA9IDEnYjA7CisgICAgcmVnIEluc3RydWN0X2V2ZW50ICAgICAgID0gMSdiMDsKKyAgICByZWcgY2hhbmdlX2FkZHJfZXZlbnQgICAgPSAxJ2IwOworICAgIHJlZyBjdXJyZW50X3N0YXRlX2V2ZW50ICA9IDEnYjA7CisgICAgcmVnIHJpc2luZ19lZGdlX0RQX291dCAgID0gMSdiMDsKKworICAgIGludGVnZXIgV0RhdGEgWzA6NTExXTsKKyAgICBpbnRlZ2VyIFdPVFBEYXRhOworICAgIGludGVnZXIgQWRkcjsKKyAgICBpbnRlZ2VyIEFkZHJfdG1wOworCisgICAgYWx3YXlzIEAoSW5zdHJ1Y3RfZXZlbnQpCisgICAgYmVnaW4KKyAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICBieXRlX2NudCA9IDE7CisgICAgICAgIHJkX2Zhc3QgID0gMSdiMTsKKyAgICAgICAgZHVhbCAgICAgPSAxJ2IwOworICAgICAgICByZF9zbG93ICA9IDEnYjA7CisgICAgICAgIGFueV9yZWFkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHJpc2luZ19lZGdlX3JlYWRfb3V0KQorICAgIGJlZ2luCisgICAgICAgIGlmIChyaXNpbmdfZWRnZV9yZWFkX291dCA9PSAxJ2IxKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFBvd2VyZWRVcCA9PSAxJ2IxKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBvZV96ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAjMTAwMCBvZV96ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBvZSA9IDEnYjE7CisgICAgICAgICAgICAgICAgIzEwMDAgb2UgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAoY2hhbmdlX2FkZHJfZXZlbnQpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKGNoYW5nZV9hZGRyX2V2ZW50KQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgcmVhZF9hZGRyID0gQWRkcmVzczsKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBBU1NBQ0Nfb3V0KQorICAgIGJlZ2luCisgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsgLy9XSVAKKyAgICAgICAgUEFTU0FDQ19pbiA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChJbnN0cnVjdCBvciBwb3NlZGdlIHN0YXJ0X2F1dG9ib290IG9yIG9lIG9yIGN1cnJlbnRfc3RhdGVfZXZlbnQgb3IKKyAgICAgICAgICAgICBmYWxsaW5nX2VkZ2Vfd3JpdGUgb3IgcG9zZWRnZSBQRE9ORSBvciBwb3NlZGdlIFdET05FIG9yIG9lX3ogb3IKKyAgICAgICAgICAgICBwb3NlZGdlIEVET05FIG9yIEVSU1NVU1Bfb3V0IG9yIHJpc2luZ19lZGdlX1Jlc2V0ZWQgb3IKKyAgICAgICAgICAgICByaXNpbmdfZWRnZV9Qb3dlcmVkVXAgb3IgcmlzaW5nX2VkZ2VfQ1NOZWdfaXBkIG9yIFBSR1NVU1Bfb3V0IG9yCisgICAgICAgICAgICAgQWRkcmVzcykKKyAgICBiZWdpbjogRnVuY3Rpb25hbGl0eQorICAgIGludGVnZXIgaSxqOworICAgIGludGVnZXIgc2VjdDsKKworICAgICAgICBpZiAocmlzaW5nX2VkZ2VfUG93ZXJlZFVwKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy90aGUgZGVmYXVsdCBjb25kaXRpb24gYWZ0ZXIgcG93ZXItdXAKKyAgICAgICAgICAgIC8vVGhlIEJhbmsgQWRkcmVzcyBSZWdpc3RlciBpcyBsb2FkZWQgdG8gYWxsIHplcm9lcworICAgICAgICAgICAgQmFua19BZGRyX3JlZyA9IDgnaDA7CisgICAgICAgICAgICAvL1RoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIEZSRUVaRSBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIENvbmZpZ19yZWcxWzBdID0gMDsKKyAgICAgICAgICAgIC8vVGhlIFdFTCBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMDsKKyAgICAgICAgICAgIC8vV2hlbiBCUE5WIGlzIHNldCB0byAnMScuIHRoZSBCUDItMCBiaXRzIGluIFN0YXR1cyBSZWdpc3RlciBhcmUKKyAgICAgICAgICAgIC8vdm9sYXRpbGUgYW5kIHdpbGwgYmUgcmVzZXQgYmluYXJ5IDExMSBhZnRlciBwb3dlci1vbiByZXNldAorICAgICAgICAgICAgaWYgKEJQTlYgPT0gMSAgJiYgRlJFRVpFID09IDAgKSAvLyYmIExPQ0sgPT0gMAorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs0XSA9IDEnYjA7Ly8gQlAyCisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbM10gPSAxJ2IwOy8vIEJQMQorICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzJdID0gMSdiMDsvLyBCUDAKKyAgICAgICAgICAgICAgICBCUF9iaXRzID0ge1N0YXR1c19yZWcxWzRdLFN0YXR1c19yZWcxWzNdLFN0YXR1c19yZWcxWzJdfTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VfQlAgPSAxJ2IxOworICAgICAgICAgICAgICAgICMxMDAwIGNoYW5nZV9CUCA9IDEnYjA7CisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgLy9BcyBzaGlwcGVkIGZyb20gdGhlIGZhY3RvcnksIGFsbCBkZXZpY2VzIGRlZmF1bHQgQVNQIHRvIHRoZQorICAgICAgICAgICAgLy9QZXJzaXN0ZW50IFByb3RlY3Rpb24gbW9kZSwgd2l0aCBhbGwgc2VjdG9ycyB1bnByb3RlY3RlZCwKKyAgICAgICAgICAgIC8vd2hlbiBwb3dlciBpcyBhcHBsaWVkLiBUaGUgZGV2aWNlIHByb2dyYW1tZXIgb3IgaG9zdCBzeXN0ZW0gbXVzdAorICAgICAgICAgICAgLy90aGVuIGNob29zZSB3aGljaCBzZWN0b3IgcHJvdGVjdGlvbiBtZXRob2QgdG8gdXNlLgorICAgICAgICAgICAgLy9Gb3IgUGVyc2lzdGVudCBQcm90ZWN0aW9uIG1vZGUsIFBQQkxPQ0sgZGVmYXVsdHMgdG8gIjEiCisgICAgICAgICAgICBQUEJMWzBdID0gMSdiMTsKKworICAgICAgICAgICAgLy9BbGwgdGhlIERZQiBwb3dlci11cCBpbiB0aGUgdW5wcm90ZWN0ZWQgc3RhdGUKKyAgICAgICAgICAgIERZQl9iaXRzID0gezU0MnsxJ2IxfX07CisKKyAgICAgICAgZW5kCisKKyAgICAgICAgaWYgKEluc3RydWN0ID09IFJFU0VUKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy9FWFRBREQgaXMgY2xlYXJlZCB0byDigJww4oCdCisgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzddID0gMSdiMDsKKyAgICAgICAgICAgIC8vUF9FUlIgYml0IGlzIGNsZWFyZWQKKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMDsKKyAgICAgICAgICAgIC8vRV9FUlIgYml0IGlzIGNsZWFyZWQKKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMDsKKyAgICAgICAgICAgIC8vVGhlIFdFTCBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgIC8vVGhlIFdJUCBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgIC8vVGhlIEVTIGJpdCBpcyBjbGVhcmVkLgorICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gPSAxJ2IwOworICAgICAgICAgICAgLy9UaGUgUFMgYml0IGlzIGNsZWFyZWQuCisgICAgICAgICAgICBTdGF0dXNfcmVnMlswXSA9IDEnYjA7CisgICAgICAgICAgICAvL1doZW4gQlBOViBpcyBzZXQgdG8gJzEnLiB0aGUgQlAyLTAgYml0cyBpbiBTdGF0dXMKKyAgICAgICAgICAgIC8vUmVnaXN0ZXIgYXJlIHZvbGF0aWxlIGFuZCB3aWxsIGJlIHJlc2V0ZWQgYWZ0ZXIKKyAgICAgICAgICAgIC8vcmVzZXQgY29tbWFuZAorICAgICAgICAgICAgaWYgKEJQTlYgPT0gMSAgJiYgRlJFRVpFID09IDApIC8vJiYgTE9DSz09IDAKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNF0gPSAxJ2IxOworICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzNdID0gMSdiMTsKKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsyXSA9IDEnYjE7CisKKyAgICAgICAgICAgICAgICBCUF9iaXRzID0ge1N0YXR1c19yZWcxWzRdLFN0YXR1c19yZWcxWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMl19OworICAgICAgICAgICAgICAgIGNoYW5nZV9CUCA9IDEnYjE7CisgICAgICAgICAgICAgICAgIzEwMDAgY2hhbmdlX0JQID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBjYXNlIChjdXJyZW50X3N0YXRlKQorICAgICAgICAgICAgSURMRSA6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIEFTUF9Qcm90U0UgPSAwOworICAgICAgICAgICAgICAgIFNlY19Qcm90U0UgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKEJvdHRvbUJvb3QpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChqPTMxO2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX2JpdHNbal0gPT0gMSAmJiBEWUJfYml0c1tqXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1BfUHJvdFNFID0gQVNQX1Byb3RTRSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtqXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFNFID0gU2VjX1Byb3RTRSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVG9wQm9vdCkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBmb3IgKGo9NTQxO2o+PTUxMDtqPWotMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQUEJfYml0c1tqXSA9PSAxICYmIERZQl9iaXRzW2pdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTUF9Qcm90U0UgPSBBU1BfUHJvdFNFICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlY19Qcm90W2pdID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90U0UgPSBTZWNfUHJvdFNFICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2Vfd3JpdGUgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZihJbnN0cnVjdCA9PSBQQVNTVSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+V0lQKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTVUxDS19pbiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOyAvL1dJUAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiVGhlIFBBU1NVIGNvbW1hbmQgY2Fubm90IGJlIGFjY2VwdGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgYW55IGZhc3RlciB0aGFuIG9uY2UgZXZlcnkgMTAwdXMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQ0xTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9UaGUgQ2xlYXIgU3RhdHVzIFJlZ2lzdGVyIENvbW1hbmQgcmVzZXRzIGJpdCBTUjFbNV0KKyAgICAgICAgICAgICAgICAgICAgLy8oRXJhc2UgRmFpbCBGbGFnKSBhbmQgYml0IFNSMVs2XSAoUHJvZ3JhbSBGYWlsIEZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs1XSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnl0ZV9jbnQgPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gV1JFTikKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gV1JESSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFdSUikgJiYgV0VMID09IDEgJiYgV0RPTkUgPT0gMSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkFSX0FDQyA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgofihTUldEID09IDEgJiYgfldQTmVnX2luKSkmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoVEJQUk9UPT0xICYmIENvbmZpZ19yZWcxX2luWzVdPT0xJ2IwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRCUEFSTT09MSAmJiBDb25maWdfcmVnMV9pblsyXT09MSdiMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCUE5WICA9PTEgJiYgQ29uZmlnX3JlZzFfaW5bM109PTEnYjApKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBfRVJSIGJpdCBpcyBzZXQgdG8gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIG5vdCBleGVjdXRlIGlmIEhhcmR3YXJlIFByb3RlY3Rpb24gTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGVudGVyZWQgb3IgaWYgV0VMIGJpdCBpcyB6ZXJvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gUFAgfHwgSW5zdHJ1Y3QgPT0gUFA0KSAmJiBXRUwgPT0xICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRE9ORSA9PSAxICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VjX1Byb3Rbc2VjdF0gPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQQl9iaXRzW3NlY3RdPT0gMSAmJiBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHU1VTUCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHUkVTICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ09ORklHID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0EgICAgICA9IHNlY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciAgICA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcl90bXA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfY250ICA9IEJ5dGVfbnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT13cl9jbnQ7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmlvbCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RhdGFbaV0gPSAtMTsKKwkJCSAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gV0J5dGVbaV07CisJCQkJCS8vJGRpc3BsYXkoIiVtOiBMb2M6ICV4IFdEYXRhOiAleCIsaSxXRGF0YVtpXSk7CisJCQkgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9QX0VSUiBiaXQgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy90byBwcm9ncmFtIHdpdGhpbiBhIHByb3RlY3RlZCBtYWluIG1lbW9yeSBzZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7IC8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7IC8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBRUFAgfHwgSW5zdHJ1Y3QgPT0gUVBQNCkgJiYgV0VMID09MSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUERPTkUgPT0gMSApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgcGdtX3BhZ2UgPSBBZGRyZXNzIC8gKFBhZ2VTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlY19Qcm90W3NlY3RdID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT09IDEgJiYgRFlCX2JpdHNbc2VjdF09PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NVU1AgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1JFUyAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTklUSUFMX0NPTkZJRyA9IDE7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUFBfcGFnZVtwZ21fcGFnZV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQSAgICAgID0gc2VjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyICAgID0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyX3RtcD0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9jbnQgID0gQnl0ZV9udW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPXdyX2NudDtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWaW9sICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IFdCeXRlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9QX0VSUiBiaXQgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy90byBwcm9ncmFtIHdpdGhpbiBhIHByb3RlY3RlZCBtYWluIG1lbW9yeSBzZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7IC8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7IC8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IE9UUFAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcyBsb25nIGFzIHRoZSBGUkVFWkUgYml0IHJlbWFpbnMgY2xlYXJlZCB0byBhIGxvZ2ljCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMCcgdGhlIE9UUCBhZGRyZXNzIHNwYWNlIGlzIHByb2dyYW1tYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGUkVFWkUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKChBZGRyZXNzPj0gMTYnaDAwMTAgJiYgQWRkcmVzczw9IDE2J2gwMDEzKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQWRkcmVzcyA+PSAxNidoMDAyMCAmJiBBZGRyZXNzIDw9IDE2J2gwMEZGKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFMVtBZGRyZXNzLzMyXSA9PSAxKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFkZHJlc3MgPj0gMTYnaDAxMDAgJiYgQWRkcmVzcyA8PSAxNidoMDFGRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFMlsoQWRkcmVzcy0xNidoMDEwMCkvMzJdID09IDEpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQWRkcmVzcyA+PSAxNidoMDIwMCAmJiBBZGRyZXNzIDw9IDE2J2gwMkZGKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBMT0NLX0JZVEUzWyhBZGRyZXNzLTE2J2gwMjAwKS8zMl0gPT0gMSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBZGRyZXNzID49IDE2J2gwMzAwICYmIEFkZHJlc3MgPD0gMTYnaDAzRkYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIExPQ0tfQllURTRbKEFkZHJlc3MtMTYnaDAzMDApLzMyXSA9PSAxKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFkZHJlc3MgKyBCeXRlX251bWJlciA8PSBPVFBIaUFkZHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgICAgPSBBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyX3RtcD0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfY250ICA9IEJ5dGVfbnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9d3JfY250O2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmlvbCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RhdGFbaV0gPSBXQnl0ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEFkZHJlc3MgPCA4J2gxMCB8fCAoQWRkcmVzcyA+IDgnaDEzICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIDwgOCdoMjApIHx8IEFkZHJlc3MgPiAxMidoM0ZGICkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOy8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOy8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBZGRyZXNzIDwgOCdoMjApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkdpdmVuICBhZGRyZXNzIGlzICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJpbiByZXNlcnZlZCBhZGRyZXNzIHJhbmdlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyZXNzID4gMTInaDNGRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiR2l2ZW4gIGFkZHJlc3MgaXMgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIm91dCBvZiBPVFAgYWRkcmVzcyByYW5nZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1BfRVJSIGJpdCB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gcHJvZ3JhbSB3aXRoaW4gbG9ja2VkIE9UUCByZWdpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOy8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOy8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1BfRVJSIGJpdCB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHByb2dyYW0gd2l0aGluIGxvY2tlZCBPVFAgcmVnaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOy8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7Ly9XRUwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFNFIHx8IEluc3RydWN0ID09IFNFNCkgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVuaWZvcm1TZWMgfHwgKFRvcEJvb3QgJiYgc2VjdCA8IDUxMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChCb3R0b21Cb290ICYmIHNlY3QgPiAzMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgPSBzZWN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBUkFNX1JFR0lPTiAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCX2JpdHNbc2VjdF09PSAxICYmIERZQl9iaXRzW3NlY3RdPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU1RBUlQgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNVU1AgICAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJFUyAgICAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5JVElBTF9DT05GSUcgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgPSBBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRV9FUlIgYml0IHdpbGwgYmUgc2V0IHdoZW4gdGhlIHVzZXIgYXR0ZW1wdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VyYXNlIGFuIGluZGl2aWR1YWwgcHJvdGVjdGVkIG1haW4gbWVtb3J5IHNlY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs1XSA9IDEnYjE7Ly9FX0VSUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7Ly9XRUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKFRvcEJvb3QgJiYgc2VjdCA+PSA1MTApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCb3R0b21Cb290ICYmIHNlY3QgPD0gMzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VjX1Byb3RTRSA9PSAzMiAmJiBBU1BfUHJvdFNFID09IDMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU2VjdG9yIGVyYXNlIGNvbW1hbmQgaXMgYXBwbGllZCB0byBhIDY0IEtCIHJhbmdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0IGluY2x1ZGVzIDQgS0Igc2VjdG9ycworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUb3BCb290KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCA9IDUxMCArICg1NDEgLSBzZWN0KS8xNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgPSBzZWN0LzE2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFSQU1fUkVHSU9OICA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU1VTUCAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkVTICAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTklUSUFMX0NPTkZJRyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9FX0VSUiBiaXQgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXJhc2UgYW4gaW5kaXZpZHVhbCBwcm90ZWN0ZWQgbWFpbiBtZW1vcnkgc2VjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMTsvL0VfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsvL1dFTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gUDRFIHx8IEluc3RydWN0ID09IFA0RTQpICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVbmlmb3JtU2VjIHx8IChUb3BCb290ICYmIHNlY3QgPCA1MTApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoQm90dG9tQm9vdCAmJiBzZWN0ID4gMzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7Ly9XRUwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VjX1Byb3Rbc2VjdF0gPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT09IDEgJiYgRFlCX2JpdHNbc2VjdF09PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQSBQNEUgaW5zdHJ1Y3Rpb24gYXBwbGllZCB0byBhIHNlY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhhdCBoYXMgYmVlbiBXcml0ZSBQcm90ZWN0ZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Jsb2NrIFByb3RlY3QgQml0cyBvciBBU1Agd2lsbCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2V4ZWN1dGVkIGFuZCB3aWxsIHNldCB0aGUgRV9FUlIgc3RhdHVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVVNQICAgICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSRVMgICAgICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ09ORklHID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyID0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0VfRVJSIGJpdCB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lcmFzZSBhbiBpbmRpdmlkdWFsIHByb3RlY3RlZCBtYWluIG1lbW9yeSBzZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNV0gPSAxJ2IxOy8vRV9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOy8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJFICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0YXR1c19yZWcxWzRdPT0gMCAmJiBTdGF0dXNfcmVnMVszXT09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsyXT09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNVU1AgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkVTICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ09ORklHID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBCdWxrIEVyYXNlIGNvbW1hbmQgd2lsbCBub3Qgc2V0IEVfRVJSIGlmIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJvdGVjdGVkIHNlY3RvciBpcyBmb3VuZCBkdXJpbmcgdGhlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsvL1dFTAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQQVNTUCAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+KFBXRE1MQj09IDAgJiYgUFNUTUxCPT0gMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiUGFzc3dvcmQgcHJvZ3JhbW1pbmcgaXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiBpbiBQYXNzd29yZCBQcm90ZWN0aW9uIE1vZGUuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBBU1NVICAmJiBXRUwpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAofldJUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFTU1VMQ0tfaW4gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsgLy9XSVAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIlRoZSBQQVNTVSBjb21tYW5kIGNhbm5vdCBiZSBhY2NlcHRlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiIGFueSBmYXN0ZXIgdGhhbiBvbmNlIGV2ZXJ5IDEwMHVzIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSV1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzddID0gQmFua19BZGRyX3JlZ19pbls3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFua19BZGRyX3JlZ19pblsxXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJhbmsgQWRkcmVzcyBSZWdpc3RlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQkEyNSBpcyBub3QgYWxsb3dlZCEhISIpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXUlIgJiYgQkFSX0FDQyA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbG93ZXIgYWRkcmVzcyBiaXRzIG9mIHRoZSBCQVIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQX0VSUiA9PSAwICYmIEVfRVJSID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJhbmtfQWRkcl9yZWdfaW5bMV0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCYW5rIEFkZHJlc3MgUmVnaXN0ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCQTI1IGlzIG5vdCBhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFTUFAgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH4oQVNQT1RQRkxBRykpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIk9uY2UgdGhlIFByb3RlY3Rpb24gTW9kZSBpcyBzZWxlY3RlZCwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIm5vIGZ1cnRoZXIgY2hhbmdlcyB0byB0aGUgQVNQICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgicmVnaXN0ZXIgaXMgYWxsb3dlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQUJXUiAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJQICAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJFUlMgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBQQk9UUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCRVJBU0VfaW4gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQTEJXUiAgJiYgV0VMID09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmRQc3dkUHJvdEVuYWJsZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRFlCV1IgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gQWRkcmVzcyAvIChQYWdlU2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBOVkRMUiAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXVkRMUiAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBWRExSX3JlZyA9IFZETFJfcmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQ0xTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9UaGUgQ2xlYXIgU3RhdHVzIFJlZ2lzdGVyIENvbW1hbmQgcmVzZXRzIGJpdCBTUjFbNV0KKyAgICAgICAgICAgICAgICAgICAgLy8oRXJhc2UgRmFpbCBGbGFnKSBhbmQgYml0IFNSMVs2XSAoUHJvZ3JhbSBGYWlsIEZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs1XSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUkFDICYmIFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQkFSX0FDQyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBSRVMgIHx8CisgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdCA9PSBETFBSRCAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFFVQUQpKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IERJT1IgfHwgSW5zdHJ1Y3QgPT0gRElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3QgPT0gUU9SICB8fCBJbnN0cnVjdCA9PSBRT1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBRSU9SIHx8IEluc3RydWN0ID09IFFJT1I0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEVDQ1JEKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEVDQyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IEVDQ1NSWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRUFEIHx8IEluc3RydWN0ID09IFJENCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEZTVFJEIHx8IEluc3RydWN0ID09IEZTVFJENCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBMZWFybmluZyBQYXR0ZXJuIChETFApIGlzIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25hbCBETFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyX3RtcCA9IHJlYWRfYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNBZGRyID0gcmVhZF9hZGRyLyhTZWNTaXplKzEpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNfYWRkciA9IHJlYWRfYWRkciAtIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjQWRkciA9IFJldHVyblNlY3RvcklEUmRQc3dkTWQoVEJQUk9UKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSBTZWNfYWRkciArIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyX3RtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWVtW3JlYWRfYWRkcl0gIT09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBNZW1bcmVhZF9hZGRyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSA4J2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRElPUiB8fCBJbnN0cnVjdCA9PSBESU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkcl90bXAgPSByZWFkX2FkZHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjQWRkciA9IHJlYWRfYWRkci8oU2VjU2l6ZSsxKSA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjX2FkZHIgPSByZWFkX2FkZHIgLSBTZWNBZGRyKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY0FkZHIgPSBSZXR1cm5TZWN0b3JJRFJkUHN3ZE1kKFRCUFJPVCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gU2VjX2FkZHIgKyBTZWNBZGRyKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHJfdG1wOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNi0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFFPUiAgfHwgSW5zdHJ1Y3QgPT0gUU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgTGVhcm5pbmcgUGF0dGVybiAoRExQKSBpcyBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW9uYWwgRExQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICA9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyX3RtcCA9IHJlYWRfYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNBZGRyID0gcmVhZF9hZGRyLyhTZWNTaXplKzEpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNfYWRkciA9IHJlYWRfYWRkciAtIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjQWRkciA9IFJldHVyblNlY3RvcklEUmRQc3dkTWQoVEJQUk9UKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSBTZWNfYWRkciArIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkcl90bXA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gTWVtW3JlYWRfYWRkcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IGRhdGFfb3V0WzctNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IGRhdGFfb3V0WzYtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgID0gZGF0YV9vdXRbNS00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgID0gZGF0YV9vdXRbNC00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gT1RQUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlYWRfYWRkcj49T1RQTG9BZGRyICYmIHJlYWRfYWRkcjw9T1RQSGlBZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBPVFAgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE9UUE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgocmVhZF9hZGRyID4gT1RQSGlBZGRyKXx8KFJkUHN3ZFByb3RNb2RlPT0xKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL09UUCBSZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCB3cmFwIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9zdGFydGluZyBhZGRyZXNzIGFmdGVyIHRoZSBPVFAgYWRkcmVzcyBpcyBhdAorICAgICAgICAgICAgICAgICAgICAgICAgLy9pdHMgbWF4aW11bSBvciBSZWFkIFBhc3N3b3JkIFByb3RlY3Rpb24gTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyBzZWxlY3RlZCBpbnN0ZWFkLCB0aGUgZGF0YSBiZXlvbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvL21heGltdW0gT1RQIGFkZHJlc3Mgd2lsbCBiZSB1bmRlZmluZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IDEnYlg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkVNUykKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNYW51ZmFjdHVyZXIgYW5kIERldmljZSBJRAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciAlIDIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1hbnVmX0lEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IERldmljZUlEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJESUQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZGVudF9vdXQgPSBDRklfYXJyYXlfdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVhZF9jbnQgPCA2NDgpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBpZGVudF9vdXRbNjQ3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL0NvbnRpbnVlZCBzaGlmdGluZyBvZiBvdXRwdXQgYmV5b25kIHRoZSBlbmQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlIGRlZmluZWQgSUQtQ0ZJIGFkZHJlc3Mgc3BhY2Ugd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgLy9wcm92aWRlIHVuZGVmaW5lZCBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2JYOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRVMpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0ID0gRVNpZ25hdHVyZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRExQUkQgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIERMUAorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gVkRMUl9yZWdbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFCUkQgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEF1dG9Cb290IHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBBdXRvQm9vdF9yZWdfaW5bMzEtcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSUkQgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQmFua19BZGRyX3JlZ1s3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFTUFJEICYmIFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBBU1AgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IEFTUF9yZWdbMTUtcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBBU1NSRCAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgUGFzc3dvcmQgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+KFBXRE1MQiA9PSAwICYmIFBTVE1MQiA9PSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRfcmVnWyg4KmJ5dGVfY250LTEpLXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX2NudCA9IGJ5dGVfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVfY250ID09IDkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX2NudCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBMQlJEKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgUFBCIExvY2sgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFBQQkxbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBEWUJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIERZQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IEFkZHJlc3MgLyAoUGFnZVNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIERZQkFSWzc6MF0gPSA4J2JYWFhYWFhYWDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEWUJfYml0c1tzZWN0XSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJBUls3OjBdID0gOCdoRkY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERZQkFSWzc6MF0gPSA4J2gwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gRFlCQVJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFBQQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBQQkFSWzc6MF0gPSA4J2JYWFhYWFhYWDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX2JpdHNbc2VjdF0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCQVJbNzowXSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJBUls3OjBdID0gOCdoMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFBQQkFSWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBBVVRPQk9PVDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0X2F1dG9ib290ID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFFVQUQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFCU0QgPiAwKSAgICAgIC8vSWYgQUJTRCA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gICAgICAgICAgICAgIC8vbWF4IFNDSyBmcmVxdWVuY3kgaXMgMTA0TUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgLy8gSWYgQUJTRCA9IDAsIG1heCBTQ0sgZnJlcXVlbmN5IGlzIDUwIE1IegorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBNZW1bcmVhZF9hZGRyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gZGF0YV9vdXRbNy00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gZGF0YV9vdXRbNi00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgPSBkYXRhX291dFs1LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSBkYXRhX291dFs0LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQUJTRCA+IDApICAgICAgLy9JZiBBQlNEID4gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAgICAgICAgICAgLy9tYXggU0NLIGZyZXF1ZW5jeSBpcyAxMzNNSHoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvLyBJZiBBQlNEID0gMCwgbWF4IFNDSyBmcmVxdWVuY3kgaXMgNTAgTUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUVVBRCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQUJTRCA+IDApICAgICAgLy9JZiBBQlNEID4gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAgICAgICAgICAgLy9tYXggU0NLIGZyZXF1ZW5jeSBpcyAxMDRNSHoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvLyBJZiBBQlNEID0gMCwgbWF4IFNDSyBmcmVxdWVuY3kgaXMgNTAgTUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFCU0QgPiAwKSAgICAgIC8vSWYgQUJTRCA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gICAgICAgICAgICAgIC8vbWF4IFNDSyBmcmVxdWVuY3kgaXMgMTMzTUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgLy8gSWYgQUJTRCA9IDAsIG1heCBTQ0sgZnJlcXVlbmN5IGlzIDUwIE1IegorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgV1JJVEVfU1I6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoV0RPTkUgPT0gMSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7IC8vV0lQCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsgLy9XRUwKKyAgICAgICAgICAgICAgICAgICAgLy9TUldEIGJpdAorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs3XSA9IFN0YXR1c19yZWcxX2luWzddOyAvL01TQiBmaXJzdAorCisvLyAgICAgICAgICAgICAgICAgICAgIGlmIChMT0NLID09IDApCisvLyAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRlJFRVpFID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBGcmVlemUgQml0LCB3aGVuIHNldCB0byAxLCBsb2NrcyB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgLy9zdGF0ZSBvZiB0aGUgQlAyLTAgYml0cyBpbiBTdGF0dXMgUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBUQlBST1QgYW5kIFRCUEFSTSBiaXRzIGluIHRoZSBDb25maWcgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vQXMgbG9uZyBhcyB0aGUgRlJFRVpFIGJpdCByZW1haW5zIGNsZWFyZWQgdG8gbG9naWMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vJzAnLCB0aGUgb3RoZXIgYml0cyBvZiB0aGUgQ29uZmlndXJhdGlvbiByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgLy9pbmNsdWRpbmcgRlJFRVpFIGFyZSB3cml0ZWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzRdID0gU3RhdHVzX3JlZzFfaW5bNF07Ly9CUDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVszXSA9IFN0YXR1c19yZWcxX2luWzNdOy8vQlAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMl0gPSBTdGF0dXNfcmVnMV9pblsyXTsvL0JQMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBfYml0cyA9IHtTdGF0dXNfcmVnMVs0XSxTdGF0dXNfcmVnMVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzJdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVEJQUk9UID09IDEnYjAgJiYgSU5JVElBTF9DT05GSUcgPT0gMSdiMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVs1XSA9IENvbmZpZ19yZWcxX2luWzVdOy8vVEJQUk9UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRCUEFSTSA9PSAxJ2IwICYmIElOSVRJQUxfQ09ORklHID09IDEnYjAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX2NoYXIyID09ICIwIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVsyXSA9IENvbmZpZ19yZWcxX2luWzJdOy8vVEJQQVJNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9UQlBBUk0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAwMCBjaGFuZ2VfVEJQQVJNID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfQlAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMDAwIGNoYW5nZV9CUCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKy8vICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFbN10gPSBDb25maWdfcmVnMV9pbls3XTsvL0xDMQorICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVs2XSA9IENvbmZpZ19yZWcxX2luWzZdOy8vTEMwCisgICAgICAgICAgICAgICAgICAgIENvbmZpZ19yZWcxWzFdID0gQ29uZmlnX3JlZzFfaW5bMV07Ly9RVUFECisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZSRUVaRSA9PSAxJ2IwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFbMF0gPSBDb25maWdfcmVnMV9pblswXTsvL0ZSRUVaRQorICAgICAgICAgICAgICAgICAgICBlbmQKKworLy8gICAgICAgICAgICAgICAgICAgICBpZiAoV1JMT0NLRU5BQkxFPT0gMSdiMSAmJiBMT0NLID09IDEnYjApCisvLyAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVs0XSA9IENvbmZpZ19yZWcxX2luWzRdOy8vTE9DSworLy8gICAgICAgICAgICAgICAgICAgICAgICAgV1JMT0NLRU5BQkxFID0gMSdiMDsKKy8vICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGlmIChCUE5WID09IDEnYjApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVszXSA9IENvbmZpZ19yZWcxX2luWzNdOy8vQlBOVgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQQUdFX1BHIDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBQQUdFX1BHKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+UERPTkUpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSSElMT19QRyhBZGRyTG8sIEFkZHJIaSwgQWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjbnQgPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD13cl9jbnQ7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19pbnQgPSBXRGF0YVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfaW50ID0gTWVtW0FkZHIgKyBpIC0gY250XTsKKwkJCSAgICAvLyRkaXNwbGF5KCIlbTogTmV3IExvYzogJXggTmV3IERhdGE6ICV4IE9sZCBEYXRhOiAleCIsaSxuZXdfaW50LG9sZF9pbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdCA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfYml0ID0gb2xkX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5vbGRfYml0W2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYml0W2pdPTEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19pbnQ9bmV3X2JpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldPSBuZXdfaW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW0FkZHIgKyBpIC0gY250XSA9IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEFkZHIgKyBpKSA9PSBBZGRySGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyID0gQWRkckxvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnQgPSBpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgY250ID0gMDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQRE9ORSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgcXVhZF9wZyAgICAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD13cl9jbnQ7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1bQWRkcl90bXAgKyBpIC0gY250XSA9IFdEYXRhW2ldOworCQkJLy8kZGlzcGxheSgiJW0gPT4gU0ZMQVNIIFdSIEFkZHJlc3M6ICV4IERhdGE6ICV4IixBZGRyX3RtcCArIGkgLSBjbnQsIFdEYXRhW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoQWRkcl90bXAgKyBpKSA9PSBBZGRySGkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJfdG1wID0gQWRkckxvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudCA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBQR1NQICYmIH5QUkdTVVNQX2luKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5SRVNfVE9fU1VTUF9NSU5fVElNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdTVVNQID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NVU1AgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkdTVVNQX2luID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVTX1RPX1NVU1BfVFlQX1RJTUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlR5cGljYWwgcGVyaW9kcyBhcmUgbmVlZGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvZ3JhbSB0byBwcm9ncmVzcyB0byBjb21wbGV0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1pbmltdW0gZm9yIHRQUlMgaXMgbm90IHNhdGlzZmllZCEgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEdTUCBjb21tYW5kIGlzIGlnbm9yZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQR19TVVNQOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKworICAgICAgICAgICAgICAgIGlmIChQUkdTVVNQX291dCAmJiBQUkdTVVNQX2luKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBSR1NVU1BfaW4gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAvL1RoZSBSRFkvQlNZIGJpdCBpbiB0aGUgU3RhdHVzIFJlZ2lzdGVyIHdpbGwgaW5kaWNhdGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAvL3RoZSBkZXZpY2UgaXMgcmVhZHkgZm9yIGFub3RoZXIgb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIC8vVGhlIFByb2dyYW0gU3VzcGVuZCAoUFMpIGJpdCBpbiB0aGUgU3RhdHVzIFJlZ2lzdGVyIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgLy9iZSBzZXQgdG8gdGhlIGxvZ2ljYWwg4oCcMeKAnSBzdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAvL3Byb2dyYW0gb3BlcmF0aW9uIGhhcyBiZWVuIHN1c3BlbmRlZC4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBQRE9ORSA9IDEnYjE7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQlJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQmFua19BZGRyX3JlZ1s3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBBcnJheSBPcGVyYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRlNUUkQgfHwgSW5zdHJ1Y3QgPT0gRlNUUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0ICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNZW1vcnkgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRUFEIHx8IEluc3RydWN0ID09IFJENCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ21fcGFnZSAhPSByZWFkX2FkZHIgLyAoUGFnZVNpemUrMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICA9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSA4J2J4eHh4eHh4eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRE9SIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRElPUiB8fCBJbnN0cnVjdCA9PSBESU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs2LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUUlPUiB8fCBJbnN0cnVjdCA9PSBRSU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgTGVhcm5pbmcgUGF0dGVybiAoRExQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBlbmFibGVkIE9wdGlvbmFsIERMUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQ9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gZGF0YV9vdXRbNy00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IGRhdGFfb3V0WzYtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IGRhdGFfb3V0WzUtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSBkYXRhX291dFs0LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRE9SIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IERJT1IgfHwgSW5zdHJ1Y3QgPT0gRElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUldSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ1s3XSA9IEJhbmtfQWRkcl9yZWdfaW5bN107CisgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzBdID0gQmFua19BZGRyX3JlZ19pblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJhbmtfQWRkcl9yZWdfaW5bMV0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJXQVJOSU5HOiBDaGFuZ2luZyB2YWx1ZXMgb2YgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCYW5rIEFkZHJlc3MgUmVnaXN0ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJBMjUgaXMgbm90IGFsbG93ZWQhISEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gV1JSICYmIEJBUl9BQ0MgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy8gV3JpdGUgdG8gdGhlIGxvd2VyIGFkZHJlc3MgYml0cyBvZiB0aGUgQkFSCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUF9FUlIgPT0gMCAmJiBFX0VSUiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzBdID0gQmFua19BZGRyX3JlZ19pblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihCYW5rX0FkZHJfcmVnX2luWzFdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJXQVJOSU5HOiBDaGFuZ2luZyB2YWx1ZXMgb2YgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQmFuayBBZGRyZXNzIFJlZ2lzdGVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQkEyNSBpcyBub3QgYWxsb3dlZCEhISIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQR1JTKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUEdSRVMgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUEdSRVMgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX01JTl9USU1FID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX01JTl9USU1FIDw9ICM2MDAwMCAxJ2IwOy8vNjAgbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX1RZUF9USU1FID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX1RZUF9USU1FIDw9ICMxMDAwMDAwMDAgMSdiMDsvLzEwMHVzCisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUkFDICYmIFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQkFSX0FDQyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIEVSU19TVVNQX1BHX1NVU1A6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworCisgICAgICAgICAgICAgICAgaWYgKFBSR1NVU1Bfb3V0ICYmIFBSR1NVU1BfaW4pCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgUFJHU1VTUF9pbiA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIC8vVGhlIFJEWS9CU1kgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbCBpbmRpY2F0ZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vdGhlIGRldmljZSBpcyByZWFkeSBmb3IgYW5vdGhlciBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgLy9UaGUgUHJvZ3JhbSBTdXNwZW5kIChQUykgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbAorICAgICAgICAgICAgICAgICAgICAvL2JlIHNldCB0byB0aGUgbG9naWNhbCDigJwx4oCdIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vcHJvZ3JhbSBvcGVyYXRpb24gaGFzIGJlZW4gc3VzcGVuZGVkLgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMlswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQlJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQmFua19BZGRyX3JlZ1s3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBBcnJheSBPcGVyYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRlNUUkQgfHwgSW5zdHJ1Y3QgPT0gRlNUUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0ICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNZW1vcnkgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRUFEIHx8IEluc3RydWN0ID09IFJENCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBWRExSX3JlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gTWVtW3JlYWRfYWRkcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICA9IDgnYnh4eHh4eHh4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgfHwgSW5zdHJ1Y3QgPT0gRE9SNCAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBESU9SIHx8IEluc3RydWN0ID09IERJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIExlYXJuaW5nIFBhdHRlcm4gKERMUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgZW5hYmxlZCBPcHRpb25hbCBETFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs2LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUUlPUiB8fCBJbnN0cnVjdCA9PSBRSU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFNlY3RvclN1c3BlbmQgIT0gcmVhZF9hZGRyLyhTZWNTaXplKzEpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHBnbV9wYWdlICE9IHJlYWRfYWRkciAvIChQYWdlU2l6ZSsxKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gRERSUUlPUiB8fCBJbnN0cnVjdCA9PSBERFJRSU9SNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBMZWFybmluZyBQYXR0ZXJuIChETFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGVuYWJsZWQgT3B0aW9uYWwgRExQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBWRExSX3JlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9ZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBNZW1bcmVhZF9hZGRyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IGRhdGFfb3V0WzctNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSBkYXRhX291dFs2LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgPSBkYXRhX291dFs1LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgID0gZGF0YV9vdXRbNC00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IERPUiB8fCBJbnN0cnVjdCA9PSBET1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBESU9SIHx8IEluc3RydWN0ID09IERJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFPUiB8fCBJbnN0cnVjdCA9PSBRT1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBRSU9SIHx8IEluc3RydWN0ID09IFFJT1I0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJXUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbN10gPSBCYW5rX0FkZHJfcmVnX2luWzddOworICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ1swXSA9IEJhbmtfQWRkcl9yZWdfaW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZihCYW5rX0FkZHJfcmVnX2luWzFdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiV0FSTklORzogQ2hhbmdpbmcgdmFsdWVzIG9mICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQmFuayBBZGRyZXNzIFJlZ2lzdGVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCQTI1IGlzIG5vdCBhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFdSUiAmJiBCQVJfQUNDID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vIFdyaXRlIHRvIHRoZSBsb3dlciBhZGRyZXNzIGJpdHMgb2YgdGhlIEJBUgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ1swXSA9IEJhbmtfQWRkcl9yZWdfaW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFua19BZGRyX3JlZ19pblsxXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiV0FSTklORzogQ2hhbmdpbmcgdmFsdWVzIG9mICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJhbmsgQWRkcmVzcyBSZWdpc3RlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJBMjUgaXMgbm90IGFsbG93ZWQhISEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUEdSUykKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcyWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBHUkVTID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBHUkVTIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9NSU5fVElNRSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9NSU5fVElNRSA8PSAjNjAwMDAgMSdiMDsvLzYwIG5zCisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA8PSAjMTAwMDAwMDAwIDEnYjA7Ly8xMDB1cworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJBQyAmJiBQX0VSUiA9PSAwICYmIEVfRVJSID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCQVJfQUNDID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBPVFBfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZihjdXJyZW50X3N0YXRlX2V2ZW50ICYmIGN1cnJlbnRfc3RhdGUgPT0gT1RQX1BHKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+UERPTkUpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQWRkcmVzcyArIHdyX2NudCA8PSBPVFBIaUFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8PXdyX2NudDtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfaW50ID0gV0RhdGFbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9pbnQgPSBPVFBNZW1bQWRkciArIGldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3X2ludCA+IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdCA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkX2ludCA+IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfYml0ID0gb2xkX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0wO2o8PTc7aj1qKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5vbGRfYml0W2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdFtqXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ludCA9IG5ld19iaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gbmV3X2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFBNZW1bQWRkciArIGldID0gIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiUHJvZ3JhbW1pbmcgd2lsbCByZWFjaCBvdmVyICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYWRkcmVzcyBsaW1pdCBvZiBPVFAgYXJyYXkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQRE9ORSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7aTw9d3JfY250O2k9aSsxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgT1RQTWVtW0FkZHIgKyBpXSA9IFdEYXRhW2ldOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgTE9DS19CWVRFMSA9IE9UUE1lbVsxNl07CisgICAgICAgICAgICAgICAgICAgIExPQ0tfQllURTIgPSBPVFBNZW1bMTddOworICAgICAgICAgICAgICAgICAgICBMT0NLX0JZVEUzID0gT1RQTWVtWzE4XTsKKyAgICAgICAgICAgICAgICAgICAgTE9DS19CWVRFNCA9IE9UUE1lbVsxOV07CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgU0VDVE9SX0VSUzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBTRUNUT1JfRVJTKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+RURPTkUpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSSElMT19TRUMoQWRkckxvLCBBZGRySGksIEFkZHIpOworCQkJJGRpc3BsYXkoIiVtOiBTZWN0b3IgRXJhc2UgQWRkcmVzczogJXggU3RhcnQ6ICV4IEVuZDogJXgiLEFkZHIsQWRkckxvLEFkZHJIaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9QWRkckxvO2k8PUFkZHJIaTtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoRURPTkUgPT0gMSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpPUFkZHJMbztpPD1BZGRySGk7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1baV0gPSBNYXhEYXRhOworCisgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IGkgLyAoUGFnZVNpemUrMSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIFFQUF9wYWdlW3BnbV9wYWdlXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEVSU1AgJiYgfkVSU1NVU1BfaW4pCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgRVNVU1AgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBFU1VTUCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBFUlNTVVNQX2luID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFJFU19UT19TVVNQX1RZUF9USU1FKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlR5cGljYWwgcGVyaW9kcyBhcmUgbmVlZGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2dyYW0gdG8gcHJvZ3Jlc3MgdG8gY29tcGxldGlvbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBCVUxLX0VSUzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBCVUxLX0VSUykKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAofkVET05FKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7aTw9QWRkclJBTkdFO2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQUEJfYml0c1tzZWN0XSA9PSAxICYmIERZQl9iaXRzW3NlY3RdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChFRE9ORSA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD1BZGRyUkFOR0U7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LGkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBQQl9iaXRzW3NlY3RdID09IDEgJiYgRFlCX2JpdHNbc2VjdF0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW2ldID0gTWF4RGF0YTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gaSAvIChQYWdlU2l6ZSsxKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQUF9wYWdlW3BnbV9wYWdlXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgRVJTX1NVU1A6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChFUlNTVVNQX291dCA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEVSU1NVU1BfaW4gPSAwOworICAgICAgICAgICAgICAgICAgICAvL1RoZSBFcmFzZSBTdXNwZW5kIChFUykgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbAorICAgICAgICAgICAgICAgICAgICAvL2JlIHNldCB0byB0aGUgbG9naWNhbCDigJwx4oCdIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vZXJhc2Ugb3BlcmF0aW9uIGhhcyBiZWVuIHN1c3BlbmRlZC4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAvL1RoZSBXSVAgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbCBpbmRpY2F0ZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vdGhlIGRldmljZSBpcyByZWFkeSBmb3IgYW5vdGhlciBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBEWUJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIERZQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEWUJfYml0c1tzZWN0XSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERZQkFSWzc6MF0gPSA4J2hGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFlCQVJbNzowXSA9IDgnaDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBEWUJBUls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSUkQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBCYW5rIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IEJhbmtfQWRkcl9yZWdbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFBQQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBQQkFSWzc6MF0gPSA4J2JYWFhYWFhYWDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX2JpdHNbc2VjdF0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCQVJbNzowXSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJBUls3OjBdID0gOCdoMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFBQQkFSWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBGU1RSRCB8fCBJbnN0cnVjdCA9PSBGU1RSRDQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChQQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5QQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBMZWFybmluZyBQYXR0ZXJuIChETFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGVuYWJsZWQgT3B0aW9uYWwgRExQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBWRExSX3JlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gTWVtW3JlYWRfYWRkcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgfHwgSW5zdHJ1Y3QgPT0gRE9SNCAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBESU9SIHx8IEluc3RydWN0ID09IERJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoUEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gcmVhZF9hZGRyLyhTZWNTaXplKzEpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh+UEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gcmVhZF9hZGRyLyhTZWNTaXplKzEpKzMwKmJfYWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIExlYXJuaW5nIFBhdHRlcm4gKERMUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgZW5hYmxlZCBPcHRpb25hbCBETFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs2LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUU9SICB8fCBJbnN0cnVjdCA9PSBRT1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0ICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNZW1vcnkgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChQQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5QQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgTGVhcm5pbmcgUGF0dGVybiAoRExQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBlbmFibGVkIE9wdGlvbmFsIERMUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQ9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gZGF0YV9vdXRbNy00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IGRhdGFfb3V0WzYtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IGRhdGFfb3V0WzUtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSBkYXRhX291dFs0LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRE9SIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IERJT1IgfHwgSW5zdHJ1Y3QgPT0gRElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gUFAgfHwgSW5zdHJ1Y3QgPT0gUFA0KSAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoUEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gQWRkcmVzcy8oU2VjU2l6ZSsxKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoflBBUkFNX1JFR0lPTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0b3JTdXNwZW5kICE9IEFkZHJlc3MvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQQl9iaXRzW3NlY3RdPT0gMSAmJiBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHU1VTUCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1JFUyAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQSAgICAgID0gc2VjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciAgICA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJfdG1wPSBBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9jbnQgID0gQnl0ZV9udW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT13cl9jbnQ7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWaW9sICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RhdGFbaV0gPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IFdCeXRlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFFQUCB8fCBJbnN0cnVjdCA9PSBRUFA0KSAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoUEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gQWRkcmVzcy8oU2VjU2l6ZSsxKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoflBBUkFNX1JFR0lPTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0b3JTdXNwZW5kICE9IEFkZHJlc3MvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gQWRkcmVzcyAvIChQYWdlU2l6ZSsxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQQl9iaXRzW3NlY3RdPT0gMSAmJiBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHU1VTUCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1JFUyAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQUF9wYWdlW3BnbV9wYWdlXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBICAgICAgPSBzZWN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyICAgID0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcl90bXA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2NudCAgPSBCeXRlX251bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPXdyX2NudDtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZpb2wgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gV0J5dGVbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXUkVOKQorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBDTFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1RoZSBDbGVhciBTdGF0dXMgUmVnaXN0ZXIgQ29tbWFuZCByZXNldHMgYml0IFNSMVs1XQorICAgICAgICAgICAgICAgICAgICAvLyhFcmFzZSBGYWlsIEZsYWcpIGFuZCBiaXQgU1IxWzZdIChQcm9ncmFtIEZhaWwgRmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSV1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzddID0gQmFua19BZGRyX3JlZ19pbls3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFua19BZGRyX3JlZ19pblsxXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJhbmsgQWRkcmVzcyBSZWdpc3RlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQkEyNSBpcyBub3QgYWxsb3dlZCEhISIpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXUlIgJiYgQkFSX0FDQyA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbG93ZXIgYWRkcmVzcyBiaXRzIG9mIHRoZSBCQVIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQX0VSUiA9PSAwICYmIEVfRVJSID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJhbmtfQWRkcl9yZWdfaW5bMV0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCYW5rIEFkZHJlc3MgUmVnaXN0ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCQTI1IGlzIG5vdCBhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IERZQldSICAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IEFkZHJlc3MgLyAoUGFnZVNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBFUlJTKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCb3R0b21Cb290KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUEFSQU1fUkVHSU9OKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgPSBTZWN0b3JTdXNwZW5kKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyID0gKFNlY3RvclN1c3BlbmQtMzApKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgPSBTZWN0b3JTdXNwZW5kKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSSElMT19TRUMoQWRkckxvLCBBZGRySGksIEFkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgRVJFUyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBFUkVTIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA8PSAjMTAwMDAwMDAwIDEnYjA7Ly8xMDB1cworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJBQyAmJiBQX0VSUiA9PSAwICYmIEVfRVJSID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCQVJfQUNDID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBFUlNfU1VTUF9QRzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBFUlNfU1VTUF9QRykKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoflBET05FKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQUREUkhJTE9fUEcoQWRkckxvLCBBZGRySGksIEFkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8PXdyX2NudDtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ludCA9IFdEYXRhW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9pbnQgPSBNZW1bQWRkciArIGkgLSBjbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdCA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfYml0ID0gb2xkX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5vbGRfYml0W2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYml0W2pdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ludCA9IG5ld19iaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEFkZHIgKyBpKSA9PSBBZGRySGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciA9IEFkZHJMbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY250ID0gaSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGNudCA9MDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKFBET05FID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IwOy8vV0lQCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsvL1dFTAorICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD13cl9jbnQ7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1bQWRkcl90bXAgKyBpIC0gY250XSA9IFdEYXRhW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChBZGRyX3RtcCArIGkpID09IEFkZHJIaSApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJfdG1wID0gQWRkckxvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudCA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBQR1NQICYmIH5QUkdTVVNQX2luKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5SRVNfVE9fU1VTUF9NSU5fVElNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdTVVNQID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NVU1AgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkdTVVNQX2luID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVTX1RPX1NVU1BfVFlQX1RJTUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlR5cGljYWwgcGVyaW9kcyBhcmUgbmVlZGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvZ3JhbSB0byBwcm9ncmVzcyB0byBjb21wbGV0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1pbmltdW0gZm9yIHRQUlMgaXMgbm90IHNhdGlzZmllZCEgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEdTUCBjb21tYW5kIGlzIGlnbm9yZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQQVNTX1BHOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIG5ld19wYXNzID0gUGFzc3dvcmRfcmVnX2luOworICAgICAgICAgICAgICAgIG9sZF9wYXNzID0gUGFzc3dvcmRfcmVnOworICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8PTYzO2k9aSsxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfcGFzc1tqXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3Bhc3Nbal0gPSAwOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKFBET05FID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRfcmVnID0gbmV3X3Bhc3M7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIFBBU1NfVU5MT0NLOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQQVNTX1RFTVAgPT0gUGFzc3dvcmRfcmVnKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBBU1NfVU5MT0NLRUQgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBQQVNTX1VOTE9DS0VEID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBpZiAoUEFTU1VMQ0tfb3V0ID09IDEnYjEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKChQQVNTX1VOTE9DS0VEID09IDEnYjEpICYmICh+UFdETUxCKSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBQQkxbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IwOyAvL1dJUAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NBQ0NfaW4gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBQQVNTVUxDS19pbiA9IDEnYjA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgUFBCX1BHOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQRE9ORSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX0xPQ0sgIT09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgUFBCX0VSUzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUFBCRVJBU0Vfb3V0ID09IDEnYjEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKChQUEJfTE9DSyAhPT0gMCkgJiYgUFBCT1RQKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUFBCX2JpdHMgPSB7NTQyezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBQUEJFUkFTRV9pbiA9IDEnYjA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgQVVUT0JPT1RfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUERPTkUpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD0zO2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDtqPD03O2o9aisxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9Cb290X3JlZ1tpKjgral0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9Cb290X3JlZ19pblsoMy1pKSo4K2pdOworICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQTEJfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvZV96KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKFBET05FKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBQQkxbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBEWUJfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvZV96KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKFBET05FKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERZQkFSID0gRFlCQVJfaW47CisgICAgICAgICAgICAgICAgICAgIGlmIChEWUJBUiA9PSA4J2hGRikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIERZQl9iaXRzW3NlY3RdPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoRFlCQVIgPT0gOCdoMDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBEWUJfYml0c1tzZWN0XT0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIEFTUF9QRzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUERPTkUpCisgICAgICAgICAgICAgICAgYmVnaW4KKworICAgICAgICAgICAgICAgICAgICBpZiAoUlBNRSA9PSAxJ2IwICYmIEFTUF9yZWdfaW5bNV0gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOyAvL1BfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJSUE1FIGJpdCBpcyBhbGxyZWFkeSBwcm9ncmFtbWVkIik7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBBU1BfcmVnWzVdID0gQVNQX3JlZ19pbls1XTsvL1JQTUUKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKFBQQk9UUCA9PSAxJ2IwICYmIEFTUF9yZWdfaW5bM10gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOyAvL1BfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJQUEJPVFAgYml0IGlzIGFsbHJlYWR5IHByb2dyYW1tZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTUF9yZWdbM10gPSBBU1BfcmVnX2luWzNdOy8vUFBCT1RQCisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIGlmIChQV0RNTEIgPT0gMSdiMSAmJiBQU1RNTEIgPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBU1BfcmVnX2luWzJdID09IDEnYjAgJiYgQVNQX3JlZ19pblsxXSA9PSAxJ2IwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiQVNQUlsyOjFdID0gMDAgIElsbGVnYWwgY29uZGl0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOyAvL1BfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFTUF9yZWdfaW5bMl0hPT0xJ2IxIHx8IEFTUF9yZWdfaW5bMV0hPT0xJ2IxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTUE9UUEZMQUcgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTUF9yZWdbMl0gPSBBU1BfcmVnX2luWzJdOy8vUFdETUxCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNQX3JlZ1sxXSA9IEFTUF9yZWdfaW5bMV07Ly9QU1RNTEIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBOVkRMUl9QRzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUERPTkUpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKE5WRExSX3JlZyA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgTlZETFJfcmVnID0gTlZETFJfcmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgVkRMUl9yZWcgPSBOVkRMUl9yZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7IC8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJOVkRMUiBiaXRzIGFsbHJlYWR5IHByb2dyYW1tZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgUkVTRVRfU1RBVEU6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy90aGUgZGVmYXVsdCBjb25kaXRpb24gaGFyZHdhcmUgcmVzZXQKKyAgICAgICAgICAgIC8vVGhlIEJhbmsgQWRkcmVzcyBSZWdpc3RlciBpcyBsb2FkZWQgdG8gYWxsIHplcm9lcworICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWcgPSA4J2gwOworICAgICAgICAgICAgICAgIGlmIChCUE5WICYmIH5GUkVFWkUpIC8vJiYgfkxPQ0sgCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMl0gPSAxJ2IxOy8vIEJQMAorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVszXSA9IDEnYjE7Ly8gQlAxCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzRdID0gMSdiMTsvLyBCUDIKKyAgICAgICAgICAgICAgICAgICAgQlBfYml0cyA9IDMnYjExMTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlX0JQID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgIzEwMDAgY2hhbmdlX0JQID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAvL1Jlc2V0cyB0aGUgdm9sYXRpbGUgYml0cyBpbiB0aGUgU3RhdHVzIHJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjA7CisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgLy9SZXNldHMgdGhlIHZvbGF0aWxlIGJpdHMgaW4gdGhlIFN0YXR1cyByZWdpc3RlciAyCisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIFN0YXR1c19yZWcyWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAvL1Jlc2V0cyB0aGUgdm9sYXRpbGUgYml0cyBpbiB0aGUgQ29uZmlndXJhdGlvbiByZWdpc3RlciAxCisgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgIC8vT24gcmVzZXQgY3ljbGVzIHRoZSBkYXRhIHBhdHRlcm4gcmV2ZXJ0cyBiYWNrCisgICAgICAgICAgICAgICAgLy90byB3aGF0IGlzIGluIHRoZSBOVkRMUgorICAgICAgICAgICAgICAgIFZETFJfcmVnID0gTlZETFJfcmVnOworICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgLy9Mb2FkcyB0aGUgUHJvZ3JhbSBCdWZmZXIgd2l0aCBhbGwgb25lcworICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9NTExO2k9aSsxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gTWF4RGF0YTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBpZiAoflBXRE1MQikKKyAgICAgICAgICAgICAgICAgICAgUFBCTFswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBQUEJMWzBdID0gMSdiMTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgIGVuZGNhc2UKKworICAgICAgICAvL091dHB1dCBEaXNhYmxlIENvbnRyb2wKKyAgICAgICAgaWYgKENTTmVnX2lwZCApCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBTT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgIFNJT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgV1BOZWdPdXRfemQgPSAxJ2JaOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFzc2lnbiBmYXN0X3JkID0gcmRfZmFzdDsKKyAgICBhc3NpZ24gcmQgPSByZF9zbG93OworICAgIGFzc2lnbiBkZHJkID0gZGRyICYmIH5kZHI4MDsKKyAgICBhc3NpZ24gZGRyZDgwID0gZGRyICYmIGRkcjgwOworICAgIGFzc2lnbiBmYXN0X2RkciA9IGRkcl9mYXN0OworCisgICAgYWx3YXlzIEAoY2hhbmdlX1RCUEFSTSwgcG9zZWRnZSBQb3dlcmVkVXApCisgICAgYmVnaW4KKyAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMCIpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiAoVEJQQVJNID09IDApCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIEJvdHRvbUJvb3QgPSAxOworICAgICAgICAgICAgICAgIGJfYWN0ID0gMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBUb3BCb290ICAgICA9IDE7CisgICAgICAgICAgICAgICAgQm90dG9tQm9vdCAgPSAwOworICAgICAgICAgICAgICAgIGJfYWN0ID0gMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFVuaWZvcm1TZWMgPSAxOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2hhbmdlX0JQKQorICAgIGJlZ2luCisgICAgICAgIGNhc2UgKFN0YXR1c19yZWcxWzQ6Ml0pCisKKyAgICAgICAgICAgIDMnYjAwMDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgU2VjX1Byb3RbNTQxOjBdID0gezU0MnsxJ2IwfX07CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIDMnYjAwMToKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMSIpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTY6KFNlY051bTI1NisxKSo2My82NF0gPSAyJ2IxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkqNjMvNjQtMSA6IDBdID0gMTI2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTI1NisxKS82NC0xIDogMF0gPSAyJ2IxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTI1NiA6IChTZWNOdW0yNTYrMSkvNjRdID0gMTI2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjIgPT0gIjAiICYmIFRCUEFSTSA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQ6KFNlY051bTY0LTI5KSo2My82NF0gPSB7Mzh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSo2My82NC0xIDogMF0gICAgPSA1MDQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpLzY0LTEgOiAwXSA9IHs4ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS82NF0gPSA1MzQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoflRCUFJPVCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0OihTZWNOdW02NC0yOSkqNjMvNjQrMzBdID0gezh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSo2My82NCsyOSA6IDBdID0gNTM0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS82NCsyOSA6IDBdICAgICAgICA9IHszOHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkvNjQrMzBdID0gNTA0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAzJ2IwMTA6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKSozMS8zMl0gPSB7NHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpKjMxLzMyLTEgOiAwXSA9IDEyNCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkvMzItMSA6IDBdID0gezR7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKS8zMl0gPSAxMjQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMzEvMzJdID0gezQ2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkqMzEvMzItMSA6IDBdID0gNDk2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8zMi0xIDogMF0gPSB7MTZ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzMyXSA9IDUyNidoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQ6KFNlY051bTY0LTI5KSozMS8zMiszMF0gPSB7MTZ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSozMS8zMisyOSA6IDBdID0gNTI2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8zMisyOSA6IDBdID0gezQ2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS8zMiszMF0gPSA0OTYnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIDMnYjAxMToKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMSIpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTYgOiAoU2VjTnVtMjU2KzEpKjE1LzE2XSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTI1NisxKSoxNS8xNi0xIDogMF0gPSAxMjAnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpLzE2LTEgOiAwXSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKS8xNl0gPSAxMjAnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMTUvMTZdID0gezYyezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkqMTUvMTYtMSA6IDBdID0gNDgwJ2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8xNi0xIDogMF0gPSB7MzJ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzE2XSA9IDUxMCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpKjE1LzE2KzMwXT17MzJ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSoxNS8xNisyOSA6IDBdID0gNTEwJ2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8xNisyOSA6IDBdID17NjJ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzE2KzMwXSA9IDQ4MCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgMydiMTAwOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoflRCUFJPVCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTI1NiA6IChTZWNOdW0yNTYrMSkqNy84XSA9IHsxNnsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpKjcvOC0xIDogMF0gPSAxMTInaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpLzgtMSA6IDBdID0gezE2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTI1NiA6IChTZWNOdW0yNTYrMSkvOF0gPSAxMTInaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqNy84XSA9IHs5NHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpKjcvOC0xIDogMF0gPSA0NDgnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpLzgtMSA6IDBdID0gezY0ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS84XSA9IDQ3OCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpKjcvOCszMF0gPXs2NHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpKjcvOCsyOSA6IDBdID0gNDc4J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS84KzI5IDogMF0gPSB7OTR7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzgrMzBdID0gNDQ4J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAzJ2IxMDE6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKSozLzRdID0gezMyezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkqMy80LTEgOiAwXSA9IDk2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTI1NisxKS80LTEgOiAwXSA9IHszMnsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTYgOiAoU2VjTnVtMjU2KzEpLzRdID0gOTYnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMy80XSA9IHsxNTh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSozLzQtMSA6IDBdID0gMzg0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS80LTEgOiAwXSA9IHsxMjh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzRdID0gNDE0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMy80KzMwXSA9IHsxMjh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSozLzQrMjkgOiAwXSA9IDQxNCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkvNCsyOSA6IDBdID0gezE1OHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkvNCszMF0gPSAzODQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIDMnYjExMDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMSIpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTYgOiAoU2VjTnVtMjU2KzEpLzJdID0gezY0ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkvMi0xIDogMF0gPSA2NCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkvMi0xIDogMF0gPSB7NjR7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKS8yXSA9IDY0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjIgPT0gIjAiICYmIFRCUEFSTSA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzJdID0gezI4NnsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpLzItMSA6IDBdID0gMjU2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8yLTEgOiAwXSA9IHsyNTZ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzJdID0gMjg2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkvMiszMF0gPSB7MjU2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkvMisyOSA6IDBdID0gMjg2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8yKzI5IDogMF0gPSB7Mjg2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS8yKzMwXSA9IDI1NidoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgMydiMTExOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NDowXSA9ICB7NTQyezEnYjF9fTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCisKKyAgICBhbHdheXMgQChTT3V0X3pkIG9yIEhPTEROZWdfaW4gb3IgU0lPdXRfemQpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKEhPTEROZWdfaW4gPT0gMCAmJiB+UVVBRCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGhvbGRfbW9kZSA9IDEnYjE7CisgICAgICAgICAgICBTSU91dF96ICAgPSAxJ2JaOworICAgICAgICAgICAgU091dF96ICAgID0gMSdiWjsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChob2xkX21vZGUgPT0gMSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgU0lPdXRfeiA8PSAjKHRwZF9IT0xETmVnX1NPKSBTSU91dF96ZDsKKyAgICAgICAgICAgICAgICBTT3V0X3ogIDw9ICModHBkX0hPTEROZWdfU08pIFNPdXRfemQ7CisgICAgICAgICAgICAgICAgaG9sZF9tb2RlID0gIyh0cGRfSE9MRE5lZ19TTykgMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBTSU91dF96ID0gU0lPdXRfemQ7CisgICAgICAgICAgICAgICAgU091dF96ICA9IFNPdXRfemQ7CisgICAgICAgICAgICAgICAgaG9sZF9tb2RlID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIGF1dG9ib290IGNvbnRyb2wgbG9naWMKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICBhbHdheXMgQChyaXNpbmdfZWRnZV9TQ0tfaXBkIG9yIGN1cnJlbnRfc3RhdGVfZXZlbnQpCisgICAgYmVnaW4KKyAgICAgICAgaWYoY3VycmVudF9zdGF0ZSA9PSBBVVRPQk9PVCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9TQ0tfaXBkKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRfZGVsYXkgPiAwKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kZWxheSA9IHN0YXJ0X2RlbGF5IC0gMTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBpZiAoc3RhcnRfZGVsYXkgPT0gMCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgc3RhcnRfYXV0b2Jvb3QgPSAxOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gZnVuY3Rpb25zICYgdGFza3MKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBQcm9jZWR1cmUgRkREUl9EUEwKK3Rhc2sgUmV0dXJuX0RMUDsKKyAgICBpbnB1dCBpbnRlZ2VyIEluc3RydWN0OworICAgIGlucHV0IGludGVnZXIgRUhQOworICAgIGlucHV0IGludGVnZXIgTGF0ZW5jeV9jb2RlOworICAgIGlucHV0IGludGVnZXIgZHVtbXlfY250OworICAgIGlub3V0IHN0YXJ0X2RscDsKKyAgICBiZWdpbgorICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAyICYmIGR1bW15X2NudCA+PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoTGF0ZW5jeV9jb2RlID09IDMgfHwgTGF0ZW5jeV9jb2RlID09IDApCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIldhcm5pbmcgYXQiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJJbmFwcHJvcHJpYXRlIGxhdGVuY3kgaXMgc2V0IGR1cmluZyBEUEwgbW9kZSIpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAwICYmIGR1bW15X2NudCA+PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoTGF0ZW5jeV9jb2RlID09IDEgJiYgZHVtbXlfY250ID49IDIpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZihMYXRlbmN5X2NvZGUgPT0gMiAmJiBkdW1teV9jbnQgPj0gMykKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0KQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAxICYmIGR1bW15X2NudCA+PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAyICYmIGR1bW15X2NudCA+PSAyKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIExhdGVuY3lfY29kZSA9PSAzIHx8IExhdGVuY3lfY29kZSA9PSAwKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJXYXJuaW5nIGF0IiwgJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiSW5hcHByb3ByaWF0ZSBsYXRlbmN5IGlzIHNldCBkdXJpbmcgRFBMIG1vZGUiKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAwICYmIGR1bW15X2NudCA+PSAyKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAxICYmIGR1bW15X2NudCA+PSAzKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoTGF0ZW5jeV9jb2RlID09IDIgJiYgZHVtbXlfY250ID49IDQpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmIFFVQUQpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiAoRUhQKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDAgJiYgZHVtbXlfY250ID49IDIpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoTGF0ZW5jeV9jb2RlID09IDEgJiYgZHVtbXlfY250ID49IDMpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoTGF0ZW5jeV9jb2RlID09IDIgJiYgZHVtbXlfY250ID49IDQpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIldhcm5pbmcgYXQiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJJbmFwcHJvcHJpYXRlIGxhdGVuY3kgaXMiKTsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoInNldCBkdXJpbmcgRFBMIG1vZGUiKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCAgPSAxJ2IwOworCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAwICYmIGR1bW15X2NudCA+PSAyKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAxICYmIGR1bW15X2NudCA+PSAzKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAyICYmIGR1bW15X2NudCA+PSA0KQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIExhdGVuY3lfY29kZSA9PSAzKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJXYXJuaW5nIGF0IiwgJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiSW5hcHByb3ByaWF0ZSBsYXRlbmN5IGlzIik7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJzZXQgZHVyaW5nIERQTCBtb2RlIik7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIGZ1bmN0aW9uIGludGVnZXIgUmV0dXJuU2VjdG9ySURSZFBzd2RNZDsKKyAgICAgICAgaW5wdXQgcmVnIFRCUFJPVDsKKyAgICBiZWdpbgorICAgICAgICBpZihUQlBST1QgPT0gMCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFJldHVyblNlY3RvcklEUmRQc3dkTWQgPSAwOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFVuaWZvcm1TZWMpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEUmRQc3dkTWQgPSBTZWNOdW0yNTY7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySURSZFBzd2RNZCA9IDUxMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICBlbmRmdW5jdGlvbgorCisgICAgLy8gUHJvY2VkdXJlIEFERFJISUxPX1NFQworICAgIHRhc2sgQUREUkhJTE9fU0VDOworICAgIGlub3V0ICBBZGRyTE9XOworICAgIGlub3V0ICBBZGRySElHSDsKKyAgICBpbnB1dCAgIEFkZHI7CisgICAgaW50ZWdlciBBZGRyTE9XOworICAgIGludGVnZXIgQWRkckhJR0g7CisgICAgaW50ZWdlciBBZGRyOworICAgIGludGVnZXIgc2VjdG9yOworICAgIGJlZ2luCisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFRCUEFSTSA9PSAwKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoQWRkci8oU2VjU2l6ZTY0KzEpIDw9IDEgJiYKKyAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3QgPT0gUDRFIHx8IEluc3RydWN0ID09IFA0RTQpKSAgLy80S0IgU2VjdG9ycworICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gQWRkci8oU2VjU2l6ZTQrMSk7CisgICAgICAgICAgICAgICAgICAgIEFkZHJMT1cgID0gc2VjdG9yKihTZWNTaXplNCsxKTsKKyAgICAgICAgICAgICAgICAgICAgQWRkckhJR0ggPSBzZWN0b3IqKFNlY1NpemU0KzEpICsgU2VjU2l6ZTQ7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gQWRkci8oU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRyTE9XICA9IHNlY3RvciooU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRySElHSCA9IHNlY3RvciooU2VjU2l6ZTY0KzEpICsgU2VjU2l6ZTY0OworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChBZGRyLyhTZWNTaXplNjQrMSkgPj0gNTEwICYmCisgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IFA0RSB8fCBJbnN0cnVjdCA9PSBQNEU0KSkgLy80S0IgU2VjdG9ycworICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gNTEwICsgKEFkZHItKFNlY1NpemU2NCsxKSo1MTApLyhTZWNTaXplNCsxKTsKKyAgICAgICAgICAgICAgICAgICAgQWRkckxPVyAgPSA1MTAqKFNlY1NpemU2NCsxKSsoc2VjdG9yLTUxMCkqKFNlY1NpemU0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRySElHSCA9IDUxMCooU2VjU2l6ZTY0KzEpKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VjdG9yLTUxMCkqKFNlY1NpemU0KzEpICsgU2VjU2l6ZTQ7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gQWRkci8oU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRyTE9XICA9IHNlY3RvciooU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRySElHSCA9IHNlY3RvciooU2VjU2l6ZTY0KzEpICsgU2VjU2l6ZTY0OworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgc2VjdG9yICAgPSBBZGRyLyhTZWNTaXplMjU2KzEpOworICAgICAgICAgICAgQWRkckxPVyAgPSBzZWN0b3IqKFNlY1NpemUyNTYrMSk7CisgICAgICAgICAgICBBZGRySElHSCA9IHNlY3RvciooU2VjU2l6ZTI1NisxKSArIFNlY1NpemUyNTY7CisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIC8vIFByb2NlZHVyZSBBRERSSElMT19QRworICAgIHRhc2sgQUREUkhJTE9fUEc7CisgICAgaW5vdXQgIEFkZHJMT1c7CisgICAgaW5vdXQgIEFkZHJISUdIOworICAgIGlucHV0ICAgQWRkcjsKKyAgICBpbnRlZ2VyIEFkZHJMT1c7CisgICAgaW50ZWdlciBBZGRySElHSDsKKyAgICBpbnRlZ2VyIEFkZHI7CisgICAgaW50ZWdlciBwYWdlOworICAgIGJlZ2luCisgICAgICAgIHBhZ2UgPSBBZGRyIC8gKFBhZ2VTaXplICsgMSk7CisgICAgICAgIEFkZHJMT1cgPSBwYWdlICogKFBhZ2VTaXplICsgMSk7CisgICAgICAgIEFkZHJISUdIID0gcGFnZSAqIChQYWdlU2l6ZSArIDEpICsgUGFnZVNpemUgOworICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIC8vIFByb2NlZHVyZSBSZXR1cm5TZWN0b3JJRAorICAgIHRhc2sgUmV0dXJuU2VjdG9ySUQ7CisgICAgaW5vdXQgICBzZWN0OworICAgIGlucHV0ICAgQWRkcmVzczsKKyAgICBpbnRlZ2VyIHNlY3Q7CisgICAgaW50ZWdlciBBZGRyZXNzOworICAgIGludGVnZXIgY29udjsKKyAgICBiZWdpbgorICAgICAgICBpZiAodG1wX2NoYXIyID09ICIwIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGNvbnYgPSBBZGRyZXNzIC8gKFNlY1NpemU2NCsxKTsKKyAgICAgICAgICAgIGlmIChCb3R0b21Cb290KQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoY29udiA8PSAxKSAgICAgIC8vNEtCIFNlY3RvcnMKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBzZWN0ID0gQWRkcmVzcy8oU2VjU2l6ZTQrMSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3QgPSBjb252ICsgMzA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UgaWYgKFRvcEJvb3QpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChjb252ID49IDUxMCkgICAgICAgLy80S0IgU2VjdG9ycworICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3QgPSA1MTAgKyAoQWRkcmVzcy0oU2VjU2l6ZTY0KzEpKjUxMCkvKFNlY1NpemU0KzEpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBzZWN0ID0gY29udjsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgc2VjdCA9IEFkZHJlc3MvKFNlY1NpemUyNTYrMSk7CisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIGFsd2F5cyBAKFBQQkxbMF0sIEFTUF9yZWcpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKFBQQkxbMF0gPT0gMCAmJiBQV0RNTEIgPT0gMCAmJiBSUE1FID09IDAgJiYgUmRQc3dkUHJvdEVuYWJsZSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFJkUHN3ZFByb3RNb2RlID0gMTsKKyAgICAgICAgICAgIEF1dG9Cb290X3JlZ1swXSA9IDA7Ly9BVVRPQk9PVCBpcyBkaXNhYmxlZCB3aGVuIFJlYWQgUGFzc3dvcmQKKyAgICAgICAgZW5kICAgICAgICAgICAgICAgICAgICAgLy9Qcm90ZWN0aW9uIGlzIGVuYWJsZWQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgUmRQc3dkUHJvdE1vZGUgPSAwOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIGVkZ2UgY29udHJvbGwgcHJvY2Vzc2VzCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBvd2VyZWRVcCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9Qb3dlcmVkVXAgPSAxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9Qb3dlcmVkVXAgPSAwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBTQ0tfaXBkKQorICAgIGJlZ2luCisgICAgICAgcmlzaW5nX2VkZ2VfU0NLX2lwZCA9IDEnYjE7CisgICAgICAgIzEwMDAgcmlzaW5nX2VkZ2VfU0NLX2lwZCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChuZWdlZGdlIFNDS19pcGQpCisgICAgYmVnaW4KKyAgICAgICBmYWxsaW5nX2VkZ2VfU0NLX2lwZCA9IDEnYjE7CisgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX1NDS19pcGQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSByZWFkX291dCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9yZWFkX291dCA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX3JlYWRfb3V0ID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2Ugd3JpdGUpCisgICAgYmVnaW4KKyAgICAgICAgZmFsbGluZ19lZGdlX3dyaXRlID0gMTsKKyAgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX3dyaXRlID0gMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgUFJHU1VTUF9vdXQpCisgICAgYmVnaW4KKyAgICAgICAgUFJHU1VTUF9vdXRfZXZlbnQgPSAxOworICAgICAgICAjMTAwMCBQUkdTVVNQX291dF9ldmVudCA9IDA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIEVSU1NVU1Bfb3V0KQorICAgIGJlZ2luCisgICAgICAgIEVSU1NVU1Bfb3V0X2V2ZW50ID0gMTsKKyAgICAgICAgIzEwMDAgRVJTU1VTUF9vdXRfZXZlbnQgPSAwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBDU05lZ19pcGQpCisgICAgYmVnaW4KKyAgICAgICAgcmlzaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMTsKKyAgICAgICAgIzEwMDAgcmlzaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgQ1NOZWdfaXBkKQorICAgIGJlZ2luCisgICAgICAgIGZhbGxpbmdfZWRnZV9DU05lZ19pcGQgPSAxJ2IxOworICAgICAgICAjMTAwMCBmYWxsaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUlNUTmVnX2luKQorICAgIGJlZ2luCisgICAgICAgIGZhbGxpbmdfZWRnZV9SU1ROZWcgPSAxJ2IxOworICAgICAgICAjNTAwMDAgZmFsbGluZ19lZGdlX1JTVE5lZyA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFJTVE5lZ19pbikKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9SU1ROZWcgPSAxJ2IxOworICAgICAgICAjMTAwMDAgcmlzaW5nX2VkZ2VfUlNUTmVnID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUlNUKQorICAgIGJlZ2luCisgICAgICAgIGZhbGxpbmdfZWRnZV9SU1QgPSAxJ2IxOworICAgICAgICAjMTAwMDAgZmFsbGluZ19lZGdlX1JTVCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFJTVCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9SU1QgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9SU1QgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQRE9ORSkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9QRE9ORSA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX1BET05FID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgV0RPTkUpCisgICAgYmVnaW4KKyAgICAgICAgcmlzaW5nX2VkZ2VfV0RPTkUgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9XRE9ORSA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFdTVEFSVCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9XU1RBUlQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9XU1RBUlQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBFRE9ORSkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9FRE9ORSA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX0VET05FID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVNUQVJUKQorICAgIGJlZ2luCisgICAgICAgIHJpc2luZ19lZGdlX0VTVEFSVCA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX0VTVEFSVCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBTVEFSVCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9QU1RBUlQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9QU1RBUlQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBSZXNldGVkKQorICAgIGJlZ2luCisgICAgICAgIHJpc2luZ19lZGdlX1Jlc2V0ZWQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9SZXNldGVkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUEFTU1VMQ0tfaW4pCisgICAgYmVnaW4KKyAgICAgICAgZmFsbGluZ19lZGdlX1BBU1NVTENLX2luID0gMSdiMTsKKyAgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX1BBU1NVTENLX2luID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUFBCRVJBU0VfaW4pCisgICAgYmVnaW4KKyAgICAgICAgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luID0gMSdiMTsKKyAgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKEluc3RydWN0KQorICAgIGJlZ2luCisgICAgICAgIEluc3RydWN0X2V2ZW50ID0gMSdiMTsKKyAgICAgICAgIzEwMDAgSW5zdHJ1Y3RfZXZlbnQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAoY2hhbmdlX2FkZHIpCisgICAgYmVnaW4KKyAgICAgICAgY2hhbmdlX2FkZHJfZXZlbnQgPSAxJ2IxOworICAgICAgICAjMTAwMCBjaGFuZ2VfYWRkcl9ldmVudCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChuZXh0X3N0YXRlKQorICAgIGJlZ2luCisgICAgICAgIG5leHRfc3RhdGVfZXZlbnQgPSAxJ2IxOworICAgICAgICAjMTAwMCBuZXh0X3N0YXRlX2V2ZW50ID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKGN1cnJlbnRfc3RhdGUpCisgICAgYmVnaW4KKyAgICAgICAgY3VycmVudF9zdGF0ZV9ldmVudCA9IDEnYjE7CisgICAgICAgICMxMDAwIGN1cnJlbnRfc3RhdGVfZXZlbnQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBSU1Rfb3V0KQorICAgIGJlZ2luCisgICAgICAgIHJpc2luZ19lZGdlX1JTVF9vdXQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9SU1Rfb3V0ID0gMSdiMDsKKyAgICBlbmQKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L21vZGVsL3NwaXJhbS52IGIvdmVyaWxvZy9kdi9tb2RlbC9zcGlyYW0udgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDMzYzExCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9tb2RlbC9zcGlyYW0udgpAQCAtMCwwICsxLDMyOSBAQAorYGRlZmF1bHRfbmV0dHlwZSBub25lCisvKgorICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjIgPERpbmVzaCBBbm5heXlhPgorICoKKyAqICBSaXNjZHVuaW8gCisgKgorICogIENvcHlyaWdodCAoQykgMjAyMiAgRGluZXNoIEFubmF5eWEgPGRpbmVzaGEub3BlbmNvcmUub3JnPgorICoKKyAqICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQworICovCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgcHMKKworLy8KKy8vIFNpbXBsZSBTUEkgUmFtIHNpbXVsYXRpb24gbW9kZWwgZm9yIDEyOEt4OCBMT1cgVk9MVEFHRSwgRkFTVCBTRVJJQUwgU1JBTQorLy8gKElTNjIvNjVXVlMxMjg4R0FMTCkKKy8vCisvLyBUaGlzIG1vZGVsIHNhbXBsZXMgaW8gaW5wdXQgc2lnbmFscyAxbnMgYmVmb3JlIHRoZSBTUEkgY2xvY2sgZWRnZSBhbmQKKy8vIHVwZGF0ZXMgb3V0cHV0IHNpZ25hbHMgMW5zIGFmdGVyIHRoZSBTUEkgY2xvY2sgZWRnZS4KKy8vCisvLyBTdXBwb3J0ZWQgY29tbWFuZHM6CisvLyAgICAweDAzLCAweDAyLCAweDNCICwgMHgzOCwgMHhGRiwgMHgwNSAsIDB4MDEKKy8vICAgIEluc3RydWN0aW9uICAgSGV4ICAgICBEZXNjcmlwdGlvbgorLy8gICAgUkVBRCAgICAgICAgICAweDAzICAgIFJlYWQgZGF0YSBmcm9tIG1lbW9yeSBhcnJheSBiZWdpbm5pbmcgYXQgc2VsZWN0ZWQgYWRkcmVzcworLy8gICAgV1JJVEUgICAgICAgICAweDAyICAgIFdyaXRlIGRhdGEgdG8gbWVtb3J5IGFycmF5IGJlZ2lubmluZyBhdCBzZWxlY3RlZCBhZGRyZXNzCisvLyAgICBFU0RJICAgICAgICAgIDB4M0IgICAgRW50ZXIgU0RJIG1vZGUKKy8vICAgIEVTUUkgICAgICAgICAgMHgzOCAgICBFbnRlciBTUUkgbW9kZQorLy8gICAgUlNURFFJICAgICAgICAweEZGICAgIFJlc2V0IFNESS9TUUkgbW9kZQorLy8gICAgUkRNUiAgICAgICAgICAweDA1ICAgIFJlYWQgTW9kZSBSZWdpc3RlcgorLy8gICAgV1JNUiAgICAgICAgICAweDAxICAgIFdyaXRlIE1vZGUgUmVnaXN0ZXIKKy8vCisKK21vZHVsZSBzcGlyYW0gIygKKwlwYXJhbWV0ZXIgbWVtX2ZpbGVfbmFtZSA9ICJmaXJtd2FyZS5oZXgiCispKAorCWlucHV0IGNzYiwKKwlpbnB1dCBjbGssCisJaW5vdXQgaW8wLCAvLyBNT1NJCisJaW5vdXQgaW8xLCAvLyBNSVNPCisJaW5vdXQgaW8yLAorCWlub3V0IGlvMworKTsKKwlsb2NhbHBhcmFtIHZlcmJvc2UgPSAwOworCWxvY2FscGFyYW0gaW50ZWdlciBsYXRlbmN5ID0gODsKKwkKKwlyZWcgWzc6MF0gYnVmZmVyOworCXJlZyBbMzowXSByZXNldF9jb3VudCA9IDA7CisJcmVnIFszOjBdIHJlc2V0X21vbml0b3IgPSAwOworCWludGVnZXIgYml0Y291bnQgPSAwOworCWludGVnZXIgYnl0ZWNvdW50ID0gMDsKKwlpbnRlZ2VyIGR1bW15Y291bnQgPSAwOworCisJcmVnIFs3OjBdIHNwaV9jbWQ7CisJcmVnIFsyMzowXSBzcGlfYWRkcjsKKworCXJlZyBbNzowXSBzcGlfaW47CisJcmVnIFs3OjBdIHNwaV9vdXQ7CisJcmVnIHNwaV9pb192bGQ7CisKKworCWxvY2FscGFyYW0gWzE6MF0gc3NwaSAgICAgPSAxOworCWxvY2FscGFyYW0gWzE6MF0gZHNwaSAgICAgPSAyOworCWxvY2FscGFyYW0gWzE6MF0gcXNwaSAgICAgPSAzOworCisJbG9jYWxwYXJhbSBbMzowXSBtb2RlX3NzcGlfcmQgICAgID0gMTsKKwlsb2NhbHBhcmFtIFszOjBdIG1vZGVfc3NwaV93ciAgICAgPSAyOworCWxvY2FscGFyYW0gWzM6MF0gbW9kZV9kc3BpX3JkICAgICA9IDM7CisJbG9jYWxwYXJhbSBbMzowXSBtb2RlX2RzcGlfd3IgICAgID0gNDsKKwlsb2NhbHBhcmFtIFszOjBdIG1vZGVfcXNwaV9yZCAgICAgPSA1OworCWxvY2FscGFyYW0gWzM6MF0gbW9kZV9xc3BpX3dyICAgICA9IDY7CisKKwlyZWcgWzM6MF0gc3BpX3BoYXNlID0gbW9kZV9zc3BpX3JkOworCXJlZyBbMzowXSBzcGlfZGF0YV9waGFzZSA9IDA7CisJcmVnIFszOjBdIHNwaV9tb2RlID0gc3NwaTsKKworCXJlZyBpbzBfb2UgPSAwOworCXJlZyBpbzFfb2UgPSAwOworCXJlZyBpbzJfb2UgPSAwOworCXJlZyBpbzNfb2UgPSAwOworCisJcmVnIGlvMF9kb3V0ID0gMDsKKwlyZWcgaW8xX2RvdXQgPSAwOworCXJlZyBpbzJfZG91dCA9IDA7CisJcmVnIGlvM19kb3V0ID0gMDsKKworCWFzc2lnbiAjMSBpbzAgPSBpbzBfb2UgPyBpbzBfZG91dCA6IDEnYno7CisJYXNzaWduICMxIGlvMSA9IGlvMV9vZSA/IGlvMV9kb3V0IDogMSdiejsKKwlhc3NpZ24gIzEgaW8yID0gaW8yX29lID8gaW8yX2RvdXQgOiAxJ2J6OworCWFzc2lnbiAjMSBpbzMgPSBpbzNfb2UgPyBpbzNfZG91dCA6IDEnYno7CisKKwl3aXJlIGlvMF9kZWxheWVkOworCXdpcmUgaW8xX2RlbGF5ZWQ7CisJd2lyZSBpbzJfZGVsYXllZDsKKwl3aXJlIGlvM19kZWxheWVkOworCisJYXNzaWduICMxIGlvMF9kZWxheWVkID0gaW8wOworCWFzc2lnbiAjMSBpbzFfZGVsYXllZCA9IGlvMTsKKwlhc3NpZ24gIzEgaW8yX2RlbGF5ZWQgPSBpbzI7CisJYXNzaWduICMxIGlvM19kZWxheWVkID0gaW8zOworCisJLy8gMTI4S0IgUkFNCisJcmVnIFs3OjBdIG1lbW9yeSBbMDoxMjgqMTAyNC0xXTsKKworCWluaXRpYWwgYmVnaW4KKyAgICAgICAgICAgaWYgKCEobWVtX2ZpbGVfbmFtZSA9PSAibm9uZSIpKQorICAgICAgICAgICAgICAkcmVhZG1lbWgobWVtX2ZpbGVfbmFtZSxtZW1vcnkpOworCWVuZAorCisJdGFzayBzcGlfYWN0aW9uOworCQliZWdpbgorCQkgICBzcGlfaW4gPSBidWZmZXI7CisKKwkJICAgaWYgKGJ5dGVjb3VudCA9PSAxKSBiZWdpbgorCQkgICAJc3BpX2NtZCA9IGJ1ZmZlcjsKKworCQkJaWYgKHNwaV9jbWQgPT0gOCdoIDNiKSBiZWdpbgorCQkgICAJCXNwaV9tb2RlID0gZHNwaTsKKwkJCWVuZAorCisJCQlpZiAoc3BpX2NtZCA9PSA4J2ggMzgpIGJlZ2luCisJCSAgIAkJc3BpX21vZGUgPSBxc3BpOworCQkJZW5kCisKKwkJCWlmIChzcGlfY21kID09IDgnaCBmZikgYmVnaW4KKwkJICAgCQlzcGlfbW9kZSA9IHNzcGk7CisJCQllbmQKKworCQkJLy8gc3BpIHJlYWQKKwkJICAgCWlmIChzcGlfY21kID09IDgnaCAwMyAmJiBzcGlfbW9kZSA9PSBzc3BpKQorCQkJICAgc3BpX3BoYXNlID0gbW9kZV9zc3BpX3JkOworCisJCSAgICAgICAgLy8gc3BpIHdyaXRlCisJCSAgIAlpZiAoc3BpX2NtZCA9PSA4J2ggMDIgJiYgc3BpX21vZGUgPT0gc3NwaSkKKwkJCSAgIHNwaV9waGFzZSA9IG1vZGVfc3NwaV93cjsKKworCQkgICAgICAgIC8vIGR1YWwgc3BpIHJlYWQKKwkJICAgCWlmIChzcGlfY21kID09IDgnaCAwMyAmJiBzcGlfbW9kZSA9PSBkc3BpKQorCQkJICAgc3BpX3BoYXNlID0gbW9kZV9kc3BpX3JkOworCisJCSAgICAgICAgLy8gZHVhbCBzcGkgd3JpdGUKKwkJICAgCWlmIChzcGlfY21kID09IDgnaCAwMiAmJiBzcGlfbW9kZSA9PSBkc3BpKQorCQkJICAgc3BpX3BoYXNlID0gbW9kZV9kc3BpX3dyOworCisJCSAgICAgICAgLy8gcXVhZCBzcGkgcmVhZAorCQkgICAJaWYgKHNwaV9jbWQgPT0gOCdoIDAzICYmIHNwaV9tb2RlID09IHFzcGkpCisJCQkgICBzcGlfcGhhc2UgPSBtb2RlX3FzcGlfcmQ7CisKKwkJICAgICAgICAvLyBxdWFkIHNwaSB3cml0ZQorCQkgICAJaWYgKHNwaV9jbWQgPT0gOCdoIDAyICYmIHNwaV9tb2RlID09IHFzcGkpCisJCQkgICBzcGlfcGhhc2UgPSBtb2RlX3FzcGlfd3I7CisJCSAgIGVuZAorCisJCSAgIGlmIChzcGlfY21kID09ICdoIDAzIHx8IChzcGlfY21kID09ICdoIDAyKSkgYmVnaW4KKwkJICAgCWlmIChieXRlY291bnQgPT0gMikKKwkJICAgCQlzcGlfYWRkclsyMzoxNl0gPSBidWZmZXI7CisKKwkJICAgCWlmIChieXRlY291bnQgPT0gMykKKwkJICAgCQlzcGlfYWRkclsxNTo4XSA9IGJ1ZmZlcjsKKworCQkJaWYgKGJ5dGVjb3VudCA9PSA0KSBiZWdpbgorCQkgICAJICAgc3BpX2FkZHJbNzowXSA9IGJ1ZmZlcjsKKwkJCSAgIHNwaV9kYXRhX3BoYXNlID0gc3BpX3BoYXNlOworCQkJZW5kCisKKwkJCS8vIER1bW15IGJ5IHNlbGVjdGlvbiBhdCBlbmQgb2YgYWRkcmVzcyBwaGFzZSBmb3IgcmVhZAorCQkJLy8gbW9kZSBvbmx5CisJCSAgIAlpZiAoYnl0ZWNvdW50ID09IDQgJiYgc3BpX21vZGUgPT0gc3NwaSAmJiBzcGlfY21kID09OCdoMDMgKQorCQkJCWR1bW15Y291bnQgPSA4OworCQkgICAJaWYgKGJ5dGVjb3VudCA9PSA0ICYmIHNwaV9tb2RlID09IGRzcGkgJiYgc3BpX2NtZCA9PTgnaDAzKQorCQkJCWR1bW15Y291bnQgPSA0OworCQkgICAJaWYgKGJ5dGVjb3VudCA9PSA0ICYmIHNwaV9tb2RlID09IHFzcGkgJiYgc3BpX2NtZCA9PTgnaDAzKQorCQkJCWR1bW15Y291bnQgPSAyOworCisJCSAgIAlpZiAoYnl0ZWNvdW50ID49IDQgJiYgc3BpX2NtZCA9PTgnaDAzKSBiZWdpbiAvLyBEYXRhIFJlYWQgUGhhc2UKKwkJICAgCQlidWZmZXIgPSBtZW1vcnlbc3BpX2FkZHJdOworCQkJCS8vJGRpc3BsYXkoIiVtOiBSZWFkIE1lbW9yeSBBZGRyZXNzOiAleCBEYXRhOiAleCIsc3BpX2FkZHIsYnVmZmVyKTsKKwkJICAgCQlzcGlfYWRkciA9IHNwaV9hZGRyICsgMTsKKwkJICAgCWVuZAorCQkgICAJaWYgKGJ5dGVjb3VudCA+IDQgJiYgc3BpX2NtZCA9PTgnaDAyKSBiZWdpbiAvLyBEYXRhIFdyaXRlIFBoYXNlCisJCSAgIAkJbWVtb3J5W3NwaV9hZGRyXSA9IGJ1ZmZlcjsKKwkJCQkvLyRkaXNwbGF5KCIlbTogV3JpdGUgTWVtb3J5IEFkZHJlc3M6ICV4IERhdGE6ICV4IixzcGlfYWRkcixidWZmZXIpOworCQkgICAJCXNwaV9hZGRyID0gc3BpX2FkZHIgKyAxOworCQkgICAJZW5kCisJCSAgIGVuZAorCisJCQlzcGlfb3V0ID0gYnVmZmVyOworCQkJc3BpX2lvX3ZsZCA9IDE7CisKKwkJCWlmICh2ZXJib3NlKSBiZWdpbgorCQkJCWlmIChieXRlY291bnQgPT0gMSkKKwkJCQkJJHdyaXRlKCI8U1BJLVNUQVJUPiIpOworCQkJCSR3cml0ZSgiPFNQSTolMDJ4OiUwMng+Iiwgc3BpX2luLCBzcGlfb3V0KTsKKwkJCWVuZAorCisJCWVuZAorCWVuZHRhc2sKKworCisJYWx3YXlzIEAoY3NiKSBiZWdpbgorCQlpZiAoY3NiKSBiZWdpbgorCQkJaWYgKHZlcmJvc2UpIGJlZ2luCisJCQkJJGRpc3BsYXkoIiIpOworCQkJCSRmZmx1c2g7CisJCQllbmQKKwkJCWJ1ZmZlciA9IDA7CisJCQliaXRjb3VudCA9IDA7CisJCQlieXRlY291bnQgPSAwOworCQkJaW8wX29lID0gMDsKKwkJCWlvMV9vZSA9IDA7CisJCQlpbzJfb2UgPSAwOworCQkJaW8zX29lID0gMDsgCisJCQlzcGlfZGF0YV9waGFzZSA9IDA7CisKKwkJZW5kCisJZW5kCisKKworCWFsd2F5cyBAKGNzYiwgY2xrKSBiZWdpbgorCQlzcGlfaW9fdmxkID0gMDsKKwkJaWYgKCFjc2IgJiYgIWNsaykgYmVnaW4KKwkJCWlmIChkdW1teWNvdW50ID4gMCkgYmVnaW4KKwkJCQlpbzBfb2UgPSAwOworCQkJCWlvMV9vZSA9IDA7CisJCQkJaW8yX29lID0gMDsKKwkJCQlpbzNfb2UgPSAwOworCQkJZW5kIGVsc2UKKwkJCWNhc2UgKHNwaV9kYXRhX3BoYXNlKQorCQkJCW1vZGVfc3NwaV9yZDogYmVnaW4KKwkJCQkJaW8wX29lID0gMDsKKwkJCQkJaW8xX29lID0gMTsKKwkJCQkJaW8yX29lID0gMDsKKwkJCQkJaW8zX29lID0gMDsKKwkJCQkJaW8xX2RvdXQgPSBidWZmZXJbN107CisJCQkJZW5kCisJCQkJbW9kZV9zc3BpX3dyOiBiZWdpbgorCQkJCQlpbzBfb2UgPSAwOworCQkJCQlpbzFfb2UgPSAwOworCQkJCQlpbzJfb2UgPSAwOworCQkJCQlpbzNfb2UgPSAwOworCQkJCWVuZAorCQkJCW1vZGVfZHNwaV93cjogYmVnaW4KKwkJCQkJaW8wX29lID0gMDsKKwkJCQkJaW8xX29lID0gMDsKKwkJCQkJaW8yX29lID0gMDsKKwkJCQkJaW8zX29lID0gMDsKKwkJCQllbmQKKwkJCQltb2RlX2RzcGlfcmQ6IGJlZ2luCisJCQkJCWlvMF9vZSA9IDE7CisJCQkJCWlvMV9vZSA9IDE7CisJCQkJCWlvMl9vZSA9IDA7CisJCQkJCWlvM19vZSA9IDA7CisJCQkJCWlvMF9kb3V0ID0gYnVmZmVyWzZdOworCQkJCQlpbzFfZG91dCA9IGJ1ZmZlcls3XTsKKwkJCQllbmQKKwkJCQltb2RlX3FzcGlfd3I6IGJlZ2luCisJCQkJCWlvMF9vZSA9IDA7CisJCQkJCWlvMV9vZSA9IDA7CisJCQkJCWlvMl9vZSA9IDA7CisJCQkJCWlvM19vZSA9IDA7CisJCQkJZW5kCisJCQkJbW9kZV9xc3BpX3JkOiBiZWdpbgorCQkJCQlpbzBfb2UgPSAxOworCQkJCQlpbzFfb2UgPSAxOworCQkJCQlpbzJfb2UgPSAxOworCQkJCQlpbzNfb2UgPSAxOworCQkJCQlpbzBfZG91dCA9IGJ1ZmZlcls0XTsKKwkJCQkJaW8xX2RvdXQgPSBidWZmZXJbNV07CisJCQkJCWlvMl9kb3V0ID0gYnVmZmVyWzZdOworCQkJCQlpbzNfZG91dCA9IGJ1ZmZlcls3XTsKKwkJCQllbmQKKwkJCQlkZWZhdWx0OiBiZWdpbgorCQkJCQlpbzBfb2UgPSAwOworCQkJCQlpbzFfb2UgPSAwOworCQkJCQlpbzJfb2UgPSAwOworCQkJCQlpbzNfb2UgPSAwOworCQkJCWVuZAorCQkJZW5kY2FzZQorCQllbmQKKwllbmQKKworCWFsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorCQlpZiAoIWNzYikgYmVnaW4KKwkJCWlmIChkdW1teWNvdW50ID4gMCkgYmVnaW4KKwkJCQlkdW1teWNvdW50ID0gZHVtbXljb3VudCAtIDE7CisJCQllbmQgZWxzZQorCQkJY2FzZSAoc3BpX21vZGUpCisJCQkJc3NwaTogYmVnaW4KKwkJCQkJYnVmZmVyID0ge2J1ZmZlciwgaW8wfTsKKwkJCQkJYml0Y291bnQgPSBiaXRjb3VudCArIDE7CisJCQkJCWlmIChiaXRjb3VudCA9PSA4KSBiZWdpbgorCQkJCQkJYml0Y291bnQgPSAwOworCQkJCQkJYnl0ZWNvdW50ID0gYnl0ZWNvdW50ICsgMTsKKwkJCQkJCXNwaV9hY3Rpb247CisJCQkJCWVuZAorCQkJCWVuZAorCQkJCWRzcGk6IGJlZ2luCisJCQkJCWJ1ZmZlciA9IHtidWZmZXIsIGlvMSwgaW8wfTsKKwkJCQkJYml0Y291bnQgPSBiaXRjb3VudCArIDI7CisJCQkJCWlmIChiaXRjb3VudCA9PSA4KSBiZWdpbgorCQkJCQkJYml0Y291bnQgPSAwOworCQkJCQkJYnl0ZWNvdW50ID0gYnl0ZWNvdW50ICsgMTsKKwkJCQkJCXNwaV9hY3Rpb247CisJCQkJCWVuZAorCQkJCWVuZAorCQkJCXFzcGk6IGJlZ2luCisJCQkJCWJ1ZmZlciA9IHtidWZmZXIsIGlvMywgaW8yLCBpbzEsIGlvMH07CisJCQkJCWJpdGNvdW50ID0gYml0Y291bnQgKyA0OworCQkJCQlpZiAoYml0Y291bnQgPT0gOCkgYmVnaW4KKwkJCQkJCWJpdGNvdW50ID0gMDsKKwkJCQkJCWJ5dGVjb3VudCA9IGJ5dGVjb3VudCArIDE7CisJCQkJCQlzcGlfYWN0aW9uOworCQkJCQllbmQKKwkJCQllbmQKKwkJCWVuZGNhc2UKKwkJZW5kCisJZW5kCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY19ib290L01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjODM4YwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY19ib290L01ha2VmaWxlCkBAIC0wLDAgKzEsMTEzIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIFBESyAKK1BES19QQVRIID0gJChQREtfUk9PVCkvc2t5MTMwQQorCisjIyBDYXJhdmVsIFBvaW50ZXJzCitDQVJBVkVMX1JPT1QgPz0gLi4vLi4vLi4vY2FyYXZlbAorQ0FSQVZFTF9QQVRIID89ICQoQ0FSQVZFTF9ST09UKQorQ0FSQVZFTF9GSVJNV0FSRV9QQVRIID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cvZHYvY2FyYXZlbAorQ0FSQVZFTF9WRVJJTE9HX1BBVEggID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cKK0NBUkFWRUxfUlRMX1BBVEggPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9ydGwKK0NBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvZHYvY2FyYXZlbAorCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKK1VQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKworIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTV9ERUZJTkVTID0gLURGVU5DVElPTkFMIC1EU0lNCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHJpc2NfYm9vdAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52ICUuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MCAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9jcnQuUyAtbyBjcnQubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLVQgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvbGluay5sZCB1c2VyX3VhcnQubyBjcnQubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW8gdXNlcl91YXJ0LmVsZiAtTgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIHZlcmlsb2cgdXNlcl91YXJ0LmVsZiB1c2VyX3VhcnQuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl91YXJ0LmVsZiA+IHVzZXJfdWFydC5kdW1wCisJcm0gY3J0Lm8gdXNlcl91YXJ0Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMTIgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpICBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVsc2UKKwlpdmVyaWxvZyAtZzIwMTIgLURXRkRVTVAgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpICBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAkKFNJTV9ERUZJTkVTKSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSQoVVBSSl9SVExfUEFUSCkgICAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCSQ8IC1vICRAIAorZW5kaWYKKworJS52Y2Q6ICUudnZwCisJdnZwICQ8CisKKyUuZWxmOiAlLmMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcyAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucworCSR7R0NDNjRfUFJFRklYfS1nY2MgLUkgJChDQVJBVkVMX1BBVEgpIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1XbCwtQnN0YXRpYywtVCwkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzLC0tc3RyaXAtZGVidWcgLWZmcmVlc3RhbmRpbmcgLW5vc3RkbGliIC1vICRAICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zICQ8CisKKyUuaGV4OiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIHZlcmlsb2cgJDwgJEAgCisJIyB0byBmaXggZmxhc2ggYmFzZSBhZGRyZXNzCisJc2VkIC1pICdzL0AxMDAwMDAwMC9AMDAwMDAwMDAvZycgJEAKKworJS5iaW46ICUuZWxmCisJJHtHQ0NfUEFUSH0vJHtHQ0NfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2NfYm9vdC9yaXNjX2Jvb3QuYyBiL3Zlcmlsb2cvZHYvcmlzY19ib290L3Jpc2NfYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTU0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2NfYm9vdC9yaXNjX2Jvb3QuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICovCisKKy8vIFRoaXMgaW5jbHVkZSBpcyByZWxhdGl2ZSB0byAkQ0FSQVZFTF9QQVRIIChzZWUgTWFrZWZpbGUpCisjaW5jbHVkZSAidmVyaWxvZy9kdi9jYXJhdmVsL2RlZnMuaCIKKyNpbmNsdWRlICJ2ZXJpbG9nL2R2L2NhcmF2ZWwvc3R1Yi5jIgorCisvLyBVc2VyIFByb2plY3QgU2xhdmVzICgweDMwMDBfMDAwMCkKKworI2RlZmluZSByZWdfbXByal93Ymhvc3RfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDgwMDAwMCkKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAzQykKKworI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMDApCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDA4KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMEMpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDE0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMTgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc4ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDIwKQorCisjZGVmaW5lIEdQSU9fTU9ERV9VU0VSX1NURF9CSURJUkVDVElPTkFMX1BVTExVUCAgIDB4MUMwMAorCisjZGVmaW5lIFNDX1NJTV9PVVRQT1JUICgweGYwMDAwMDAwKQorCisvKgorICAgICAgICAgUmlzY1YgSGVsbG8gV29ybGQgdGVzdC4KKwkgICAgICAgIC0gV2FrZSB1cCB0aGUgUmlzYyBWCisJCS0gQm9vdCBmcm9tIFNQSSBGbGFzaAorCQktIFJpc2N2IFdyaXRlIEhlbGxvIFdvcmxkIHRvIFNEUkFNLAorCQktIEV4dGVybmFsIFdpc2hib25lIHJlYWQgYmFjayB2YWxpZGF0aW9uIHRoZSBkYXRhCisqLworaW50IGkgPSAwOyAKK2ludCBjbGsgPSAwOworCit2b2lkIG1haW4oKQoreworCisJaW50IGJGYWlsID0gMDsKKwkvKiAKKwlJTyBDb250cm9sIFJlZ2lzdGVycworCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAzLWJpdHMgfCAxLWJpdCB8IDEtYml0IHwgMS1iaXQgIHwgMS1iaXQgIHwgMS1iaXQgfCAxLWJpdCAgIHwgMS1iaXQgICB8IDEtYml0IHwgMS1iaXQgfCAxLWJpdCAgIHwKKwlPdXRwdXQ6IDAwMDBfMDExMF8wMDAwXzExMTAgICgweDE4MDgpID0gR1BJT19NT0RFX1VTRVJfU1REX09VVFBVVAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMSAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkKKwkgCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MDQwMikgPSBHUElPX01PREVfVVNFUl9TVERfSU5QVVRfTk9QVUxMCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDAwMSAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgfCAwICAgICAgfCAwICAgICB8IDAgICAgICAgfCAwICAgICAgIHwgMCAgICAgfCAxICAgICB8IDAgICAgICAgfAorCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MTgwMCkgPSBHUElPX01PREVfVVNFUl9TVERfQklESVJFQ1RJT05BTAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMCAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkqLworCisJLyogU2V0IHVwIHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIGJlIGNvbm5lY3RlZCBpbnRlcm5hbGx5IHNvCSovCisJLyogdGhhdCBleHRlcm5hbCBwaW4gY2hhbmdlcyBkb24ndCBhZmZlY3QgaXQuCQkJKi8KKworCXJlZ19zcGltYXN0ZXJfY29uZmlnID0gMHhhMDAyOwkvLyBFbmFibGUsIHByZXNjYWxlciA9IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ubmVjdCB0byBob3VzZWtlZXBpbmcgU1BJCisKKwkvLyBDb25uZWN0IHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIHRoZSBTUEkgbWFzdGVyCisJLy8gc28gdGhhdCB0aGUgQ1NCIGxpbmUgaXMgbm90IGxlZnQgZmxvYXRpbmcuICBUaGlzIGFsbG93cworCS8vIGFsbCBvZiB0aGUgR1BJTyBwaW5zIHRvIGJlIHVzZWQgZm9yIHVzZXIgZnVuY3Rpb25zLgorICAgICAgICByZWdfbXByal9pb18zMSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjkgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yOCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjYgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yNSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjMgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yMiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjAgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xOSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMTcgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xNiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisKKworICAgICAvKiBBcHBseSBjb25maWd1cmF0aW9uICovCisgICAgcmVnX21wcmpfeGZlciA9IDE7CisgICAgd2hpbGUgKHJlZ19tcHJqX3hmZXIgPT0gMSk7CisKKyAgICByZWdfbGEyX29lbmIgPSByZWdfbGEyX2llbmEgPSAweEZGRkZGRkZGOyAgICAvLyBbOTU6NjRdCisKKyAgICAvLyBGbGFnIHN0YXJ0IG9mIHRoZSB0ZXN0CisJcmVnX21wcmpfZGF0YWwgPSAweEFCNjAwMDAwOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFN0YXJ0IG9mIFVzZXIgRnVuY3Rpb25hbGl0eSBhbmQgdGFrZSBvdmVyIHRoZSBHUElPIFBpbnMKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBVc2VyIGJsb2NrIGRlY2lkZSBvbiB0aGUgR1BJTyBmdW5jdGlvbgorICAgIHJlZ19tcHJqX2lvXzM3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzExID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzkgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzggID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzcgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzYgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzUgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzQgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzAgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworCisgICAgIC8qIEFwcGx5IGNvbmZpZ3VyYXRpb24gKi8KKyAgICByZWdfbXByal94ZmVyID0gMTsKKyAgICB3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAwOworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAxOyAvLyBSZW1vdmUgU29mdCBSZXNldAorCisKKyAgICAvLyBSZW1vdmUgV2lzaGJvbmUgUmVzZXQKKyAgICByZWdfbXByal93Ymhvc3RfcmVnMCA9IDB4MTsKKworCisgICAgLy8gUmVtb3ZlIEFsbCBSZXNldAorICAgIHJlZ19tcHJqX3diaG9zdF9yZWcwID0gMHgxRjsKKworICAgIC8vIEVuYWJsZSBVQVJUIE11bHRpIEZ1bmN0aW9uYWwgUG9ydHMKKworICAgIHJlZ19tcHJqX2dsb2JsX3JlZzE0ID0gMHgxMDA7CisKKyAgICAvLyBjb25maWd1cmUgdGhlIHVzZXIgdWFydAorICAgIHJlZ19tcHJqX3VhcnRfcmVnMCAgPSAweDc7CisKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY19ib290L3Jpc2NfYm9vdF90Yi52IGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvcmlzY19ib290X3RiLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0ZGI2MwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY19ib290L3Jpc2NfYm9vdF90Yi52CkBAIC0wLDAgKzEsMzg5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVXNlciBSaXNjIENvcmUgQm9vdCBWYWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgMS4gVXNlciBSaXNjIGNvcmUgaXMgYm9vdGVkIHVzaW5nICBjb21waWxlZCBjb2RlIG9mICAgICAgLy8vLworLy8vLyAgICAgICAgdXNlcl9yaXNjX2Jvb3QuaGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgMi4gVXNlciBSaXNjIGNvcmUgdXNlcyBTZXJpYWwgRmxhc2ggYW5kIFNEUkFNIHRvIGJvb3QgICAgLy8vLworLy8vLyAgICAgMy4gQWZ0ZXIgc3VjY2Vzc2Z1bCBib290LCBSaXNjIGNvcmUgd2lsbCAgd3JpdGUgc2lnbmF0dXJlLy8vLworLy8vLyAgICAgICAgaW4gdG8gIHVzZXIgcmVnaXN0ZXIgZnJvbSAweDMwMDBfMDAxOCB0byAweDMwMDBfMDAyQyAgLy8vLworLy8vLyAgICAgNC4gVGhyb3VnaCB0aGUgRXh0ZXJuYWwgV2lzaGJvbmUgSW50ZXJmYWNlIHdlIHJlYWQgYmFjayAgLy8vLworLy8vLyAgICAgICAgIGFuZCB2YWxpZGF0ZSB0aGUgdXNlciByZWdpc3RlciB0byBkZWNsYXJlZCBwYXNzIGZhaWwgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAxMnRoIEp1bmUgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitgZGVmYXVsdF9uZXR0eXBlIG5vbmUKKworYHRpbWVzY2FsZSAxIG5zIC8gMSBwcworCitgaW5jbHVkZSAiczI1ZmwyNTZzLnN2IgorYGluY2x1ZGUgInVwcmpfbmV0bGlzdHMudiIKK2BpbmNsdWRlICJjYXJhdmVsX25ldGxpc3RzLnYiCitgaW5jbHVkZSAic3BpZmxhc2gudiIKK2BpbmNsdWRlICJtdDQ4bGM4bThhMi52IgorYGluY2x1ZGUgInVhcnRfYWdlbnQudiIKKworbW9kdWxlIHJpc2NfYm9vdF90YjsKKwlyZWcgY2xvY2s7CisJcmVnIFJTVEI7CisJcmVnIENTQjsKKwlyZWcgcG93ZXIxLCBwb3dlcjI7CisJcmVnIHBvd2VyMywgcG93ZXI0OworCisJd2lyZSBncGlvOworCXdpcmUgWzM3OjBdIG1wcmpfaW87CisJd2lyZSBbNzowXSBtcHJqX2lvXzA7CisJd2lyZSBbMTU6MF0gY2hlY2tiaXRzOworCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBVYXJ0IENvbmZpZ3VyYXRpb24KKyAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHJlZyBbMTowXSAgICAgIHVhcnRfZGF0YV9iaXQgICAgICAgIDsKKyAgICAgICAgcmVnCSAgICAgICB1YXJ0X3N0b3BfYml0cyAgICAgICA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CisgICAgICAgIHJlZwkgICAgICAgdWFydF9zdGlja19wYXJpdHkgICAgOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorICAgICAgICByZWcJICAgICAgIHVhcnRfcGFyaXR5X2VuICAgICAgIDsgLy8gcGFyaXR5IGVuYWJsZQorICAgICAgICByZWcJICAgICAgIHVhcnRfZXZlbl9vZGRfcGFyaXR5IDsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKKyAgICAgICAgCisgICAgICAgIHJlZyBbNzowXSAgICAgIHVhcnRfZGF0YSAgICAgICAgICAgIDsKKyAgICAgICAgcmVnIFsxNTowXSAgICAgdWFydF9kaXZpc29yICAgICAgICAgOwkvLyBkaXZpZGVkIGJ5IG4gKiAxNgorICAgICAgICByZWcgWzE1OjBdICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICA7Ly8gd2FpdCB0aW1lIGxpbWl0CisgICAgICAgIAorICAgICAgICByZWcgWzE1OjBdICAgICB1YXJ0X3J4X251ICAgICAgICAgICA7CisgICAgICAgIHJlZyBbMTU6MF0gICAgIHVhcnRfdHhfbnUgICAgICAgICAgIDsKKyAgICAgICAgcmVnIFs3OjBdICAgICAgdWFydF93cml0ZV9kYXRhIFswOjM5XTsKKyAgICAgICAgcmVnIAkgICAgICAgdWFydF9maWZvX2VuYWJsZSAgICAgOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorCXJlZyAgICAgICAgICAgIHRlc3RfZmFpbCAgICAgICAgICAgIDsKKyAgICAgICAgCisgICAgICAgIGludGVnZXIgaSxqOworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCisJYXNzaWduIGNoZWNrYml0cyA9IG1wcmpfaW9bMzE6MTZdOworCisJYXNzaWduIG1wcmpfaW9bM10gPSAoQ1NCID09IDEnYjEpID8gMSdiMSA6IDEnYno7CisKKwkvLyBFeHRlcm5hbCBjbG9jayBpcyB1c2VkIGJ5IGRlZmF1bHQuICBNYWtlIHRoaXMgYXJ0aWZpY2lhbGx5IGZhc3QgZm9yIHRoZQorCS8vIHNpbXVsYXRpb24uICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgc2xvdyBjbG9jayBhbmQgdGhlIGRpZ2l0YWwgUExMCisJLy8gd291bGQgYmUgdGhlIGZhc3QgY2xvY2suCisKKwlhbHdheXMgIzEyLjUgY2xvY2sgPD0gKGNsb2NrID09PSAxJ2IwKTsKKworCWluaXRpYWwgYmVnaW4KKwkJY2xvY2sgPSAwOworCWVuZAorCisJYGlmZGVmIFdGRFVNUAorICAgICAgICBpbml0aWFsCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICRkdW1wZmlsZSgic2lteC52Y2QiKTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDEscmlzY19ib290X3RiKTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDEscmlzY19ib290X3RiLnVfc3BpX2ZsYXNoXzI1Nm1iKTsKKyAgICAgICAgICAgLy8kZHVtcHZhcnMoMixyaXNjX2Jvb3RfdGIudXV0KTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDQscmlzY19ib290X3RiLnV1dC5tcHJqKTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDAscmlzY19ib290X3RiLnRiX3VhcnQpOworICAgICAgICAgICAvLyRkdW1wdmFycygwLHJpc2NfYm9vdF90Yi51X3VzZXJfc3BpZmxhc2gpOworCSAgICRkaXNwbGF5KCJXYXZlZm9ybSBEdW1wIHN0YXJ0ZWQiKTsKKyAgICAgICAgZW5kCisgICAgICAgIGBlbmRpZgorCisKKyAgICAgICAgaW5pdGlhbAorICAgICAgICBiZWdpbgorICAgICAgICAgICB1YXJ0X2RhdGFfYml0ICAgICAgICAgICA9IDInYjExOworICAgICAgICAgICB1YXJ0X3N0b3BfYml0cyAgICAgICAgICA9IDA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CisgICAgICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5ICAgICAgID0gMDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKKyAgICAgICAgICAgdWFydF9wYXJpdHlfZW4gICAgICAgICAgPSAwOyAvLyBwYXJpdHkgZW5hYmxlCisgICAgICAgICAgIHVhcnRfZXZlbl9vZGRfcGFyaXR5ICAgID0gMTsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKKyAgICAgICAgICAgdWFydF9kaXZpc29yICAgICAgICAgICAgPSAxNTsvLyBkaXZpZGVkIGJ5IG4gKiAxNgorICAgICAgICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICAgICA9IDUwMDsvLyB3YWl0IHRpbWUgbGltaXQKKyAgICAgICAgICAgdWFydF9maWZvX2VuYWJsZSAgICAgICAgPSAwOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorICAgICAgICAKKyAgICAgICAgICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCisgICAgICAgICAgIGZvcmsKKwkgICBiZWdpbgorICAgICAgICAgIAorCSAgICAgIC8vIFdhaXQgZm9yIE1hbmFnbWVudCBjb3JlIHRvIGJvb3QgdXAgCisJICAgICAgd2FpdChjaGVja2JpdHMgPT0gMTYnaCBBQjYwKTsKKwkgICAgICAkZGlzcGxheSgiTW9uaXRvcjogVGVzdCBVc2VyIFJpc2MgQm9vdCBTdGFydGVkIik7CisgICAgICAgCisJICAgICAgLy8gV2FpdCBmb3IgdXNlciByaXNjIGNvcmUgdG8gYm9vdCB1cCAKKyAgICAgICAgICAgICAgcmVwZWF0ICgzMDAwMCkgQChwb3NlZGdlIGNsb2NrKTsgIAorICAgICAgICAgICAgICB0Yl91YXJ0LnVhcnRfaW5pdDsKKyAgICAgICAgICAgICAgdGJfdWFydC5jb250cm9sX3NldHVwICh1YXJ0X2RhdGFfYml0LCB1YXJ0X3N0b3BfYml0cywgdWFydF9wYXJpdHlfZW4sIHVhcnRfZXZlbl9vZGRfcGFyaXR5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5LCB1YXJ0X3RpbWVvdXQsIHVhcnRfZGl2aXNvcik7CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBmb3IgKGk9MDsgaTw0MDsgaT1pKzEpCisgICAgICAgICAgICAgIAl1YXJ0X3dyaXRlX2RhdGFbaV0gPSAkcmFuZG9tOworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBmb3JrCisgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDQwOyBpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIlxuLi4uIFVBUlQgQWdlbnQgV3JpdGluZyBjaGFyICV4IC4uLiIsIHVhcnRfd3JpdGVfZGF0YVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgIHRiX3VhcnQud3JpdGVfY2hhciAodWFydF93cml0ZV9kYXRhW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8NDA7IGo9aisxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgIHRiX3VhcnQucmVhZF9jaGFyX2Noayh1YXJ0X3dyaXRlX2RhdGFbal0pOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgIGpvaW4KKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICMxMDAKKyAgICAgICAgICAgICAgICAgdGJfdWFydC5yZXBvcnRfc3RhdHVzKHVhcnRfcnhfbnUsIHVhcnRfdHhfbnUpOworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgdGVzdF9mYWlsID0gMDsKKyAgICAgICAgCisgICAgICAgICAgICAgICAgIC8vIENoZWNrIAorICAgICAgICAgICAgICAgICAvLyBpZiBhbGwgdGhlIDQwIGJ5dGUgdHJhbnNtaXR0ZWQKKyAgICAgICAgICAgICAgICAgLy8gaWYgYWxsIHRoZSA0MCBieXRlIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgIC8vIGlmIG5vIGVycm9yIAorICAgICAgICAgICAgICAgICBpZih1YXJ0X3R4X251ICE9IDQwKSB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICAgICBpZih1YXJ0X3J4X251ICE9IDQwKSB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICAgICBpZih0Yl91YXJ0LmVycl9jbnQgIT0gMCkgdGVzdF9mYWlsID0gMTsKKyAgICAgICAgCisJICAgICAgZW5kCisJICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAvLyBMb29wIGZvciBUaW1lT3V0CisgICAgICAgICAgICAgICAgICAgcmVwZWF0ICg2MDAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgICAgICAJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKyAgICAgICAgICAgICAgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgam9pbl9hbnkKKyAgICAgICAgICAgICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisKKyAgICAgICAgICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICBpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoR0wpIFBhc3NlZCIpOworICAgICAgICAgICAgICAgICBgZWxzZQorICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKFJUTCkgUGFzc2VkIik7CisgICAgICAgICAgICAgICAgIGBlbmRpZgorICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgIGBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKFJUTCkgRmFpbGVkIik7CisgICAgICAgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICMxMDAKKyAgICAgICAgICAgICAgJGZpbmlzaDsKKyAgICAgICAgZW5kCisKKworCWluaXRpYWwgYmVnaW4KKwkJUlNUQiA8PSAxJ2IwOworCQlDU0IgIDw9IDEnYjE7CQkvLyBGb3JjZSBDU0IgaGlnaAorCQkjMjAwMDsKKwkJUlNUQiA8PSAxJ2IxOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKwkJIzE3MDAwMDsKKwkJQ1NCID0gMSdiMDsJCS8vIENTQiBjYW4gYmUgcmVsZWFzZWQKKwllbmQKKworCWluaXRpYWwgYmVnaW4JCS8vIFBvd2VyLXVwIHNlcXVlbmNlCisJCXBvd2VyMSA8PSAxJ2IwOworCQlwb3dlcjIgPD0gMSdiMDsKKwkJcG93ZXIzIDw9IDEnYjA7CisJCXBvd2VyNCA8PSAxJ2IwOworCQkjMTAwOworCQlwb3dlcjEgPD0gMSdiMTsKKwkJIzEwMDsKKwkJcG93ZXIyIDw9IDEnYjE7CisJCSMxMDA7CisJCXBvd2VyMyA8PSAxJ2IxOworCQkjMTAwOworCQlwb3dlcjQgPD0gMSdiMTsKKwllbmQKKworCS8vYWx3YXlzIEAobXByal9pbykgYmVnaW4KKwkvLwkjMSAkZGlzcGxheSgiTVBSSi1JTyBzdGF0ZSA9ICViICIsIG1wcmpfaW9bNzowXSk7CisJLy9lbmQKKworCXdpcmUgZmxhc2hfY3NiOworCXdpcmUgZmxhc2hfY2xrOworCXdpcmUgZmxhc2hfaW8wOworCXdpcmUgZmxhc2hfaW8xOworCisJd2lyZSBWREQzVjMgPSBwb3dlcjE7CisJd2lyZSBWREQxVjggPSBwb3dlcjI7CisJd2lyZSBVU0VSX1ZERDNWMyA9IHBvd2VyMzsKKwl3aXJlIFVTRVJfVkREMVY4ID0gcG93ZXI0OworCXdpcmUgVlNTID0gMSdiMDsKKworCWNhcmF2ZWwgdXV0ICgKKwkJLnZkZGlvCSAgKFZERDNWMyksCisJCS52c3NpbwkgIChWU1MpLAorCQkudmRkYQkgIChWREQzVjMpLAorCQkudnNzYQkgIChWU1MpLAorCQkudmNjZAkgIChWREQxVjgpLAorCQkudnNzZAkgIChWU1MpLAorCQkudmRkYTEgICAgKFVTRVJfVkREM1YzKSwKKwkJLnZkZGEyICAgIChVU0VSX1ZERDNWMyksCisJCS52c3NhMQkgIChWU1MpLAorCQkudnNzYTIJICAoVlNTKSwKKwkJLnZjY2QxCSAgKFVTRVJfVkREMVY4KSwKKwkJLnZjY2QyCSAgKFVTRVJfVkREMVY4KSwKKwkJLnZzc2QxCSAgKFZTUyksCisJCS52c3NkMgkgIChWU1MpLAorCQkuY2xvY2sJICAoY2xvY2spLAorCQkuZ3BpbyAgICAgKGdwaW8pLAorICAgICAgICAubXByal9pbyAgKG1wcmpfaW8pLAorCQkuZmxhc2hfY3NiKGZsYXNoX2NzYiksCisJCS5mbGFzaF9jbGsoZmxhc2hfY2xrKSwKKwkJLmZsYXNoX2lvMChmbGFzaF9pbzApLAorCQkuZmxhc2hfaW8xKGZsYXNoX2lvMSksCisJCS5yZXNldGIJICAoUlNUQikKKwkpOworCisJc3BpZmxhc2ggIygKKwkJLkZJTEVOQU1FKCJyaXNjX2Jvb3QuaGV4IikKKwkpIHNwaWZsYXNoICgKKwkJLmNzYihmbGFzaF9jc2IpLAorCQkuY2xrKGZsYXNoX2NsayksCisJCS5pbzAoZmxhc2hfaW8wKSwKKwkJLmlvMShmbGFzaF9pbzEpLAorCQkuaW8yKCksCQkJLy8gbm90IHVzZWQKKwkJLmlvMygpCQkJLy8gbm90IHVzZWQKKwkpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb25uZWN0IFF1YWQgRmxhc2ggdG8gZm9yIHVzciBSaXNjIENvcmUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2lyZSB1c2VyX2ZsYXNoX2NsayA9IG1wcmpfaW9bMjRdOworICAgd2lyZSB1c2VyX2ZsYXNoX2NzYiA9IG1wcmpfaW9bMjhdOworICAgLy90cmkgIHVzZXJfZmxhc2hfaW8wID0gbXByal9pb1syNl07CisgICAvL3RyaSAgdXNlcl9mbGFzaF9pbzEgPSBtcHJqX2lvWzI3XTsKKyAgIC8vdHJpICB1c2VyX2ZsYXNoX2lvMiA9IG1wcmpfaW9bMjhdOworICAgLy90cmkgIHVzZXJfZmxhc2hfaW8zID0gbXByal9pb1syOV07CisKKworICAgLy8gUXVhcmQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoInVzZXJfdWFydC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLCAKKyAgICAgICAgICAgICAgICAgLlRpbWluZ01vZGVsKCJTMjVGTDUxMlNBR01GSTAxMF9GXzMwcEYiKSkgCisJCSB1X3NwaV9mbGFzaF8yNTZtYiAoCisgICAgICAgICAgIC8vIERhdGEgSW5wdXRzL091dHB1dHMKKyAgICAgICAuU0kgICAgICAobXByal9pb1syOV0pLAorICAgICAgIC5TTyAgICAgIChtcHJqX2lvWzMwXSksCisgICAgICAgLy8gQ29udHJvbHMKKyAgICAgICAuU0NLICAgICAodXNlcl9mbGFzaF9jbGspLAorICAgICAgIC5DU05lZyAgICh1c2VyX2ZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKG1wcmpfaW9bMzFdKSwKKyAgICAgICAuSE9MRE5lZyAobXByal9pb1szMl0pLAorICAgICAgIC5SU1ROZWcgIChSU1RCKQorCisgICAgICAgKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBVQVJUIEFnZW50IGludGVncmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSB1YXJ0X3R4ZCx1YXJ0X3J4ZDsKKworYXNzaWduIHVhcnRfdHhkICAgPSBtcHJqX2lvWzJdOworYXNzaWduIG1wcmpfaW9bMV0gID0gdWFydF9yeGQgOworIAordWFydF9hZ2VudCB0Yl91YXJ0KAorCS5tY2xrICAgICAgICAgICAgICAgIChjbG9jayAgICAgICAgICAgICAgKSwKKwkudHhkICAgICAgICAgICAgICAgICAodWFydF9yeGQgICAgICAgICAgICksCisJLnJ4ZCAgICAgICAgICAgICAgICAgKHVhcnRfdHhkICAgICAgICAgICApCisJKTsKKworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworaW5pdGlhbCBiZWdpbgorZW5kCitgZW5kaWYgICAgCisKKworLyoqCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJpbWVtX2FkZHJfb19yOyAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCitsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJkbWVtX2FkZHJfb19yOyAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTJkbWVtX2NtZF9vX3I7CisKK2BkZWZpbmUgUklTQ19DT1JFICB0ZXN0X3RiLnV1dC5tcHJqLnVfY29yZS51X3Jpc2N2X3RvcC5pX2NvcmVfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLmNsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLmltZW0yY29yZV9yZXFfYWNrX2kgJiYgYFJJU0NfQ09SRS5jb3JlMmltZW1fcmVxX28pCisgICAgICAgICAgY29yZTJpbWVtX2FkZHJfb19yIDw9IGBSSVNDX0NPUkUuY29yZTJpbWVtX2FkZHJfbzsKKworICAgIGlmKGBSSVNDX0NPUkUuZG1lbTJjb3JlX3JlcV9hY2tfaSAmJiBgUklTQ19DT1JFLmNvcmUyZG1lbV9yZXFfbykgYmVnaW4KKyAgICAgICAgICBjb3JlMmRtZW1fYWRkcl9vX3IgPD0gYFJJU0NfQ09SRS5jb3JlMmRtZW1fYWRkcl9vOworICAgICAgICAgIGNvcmUyZG1lbV9jbWRfb19yICA8PSBgUklTQ19DT1JFLmNvcmUyZG1lbV9jbWRfbzsKKyAgICBlbmQKKworICAgIGlmKGBSSVNDX0NPUkUuaW1lbTJjb3JlX3Jlc3BfaSAhPTApCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBjb3JlMmltZW1fYWRkcl9vX3IsYFJJU0NfQ09SRS5pbWVtMmNvcmVfcmRhdGFfaSxgUklTQ19DT1JFLmltZW0yY29yZV9yZXNwX2kpOworICAgIGlmKChgUklTQ19DT1JFLmRtZW0yY29yZV9yZXNwX2kgIT0wKSAmJiBjb3JlMmRtZW1fY21kX29fcikKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGNvcmUyZG1lbV9hZGRyX29fcixgUklTQ19DT1JFLmNvcmUyZG1lbV93ZGF0YV9vLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSk7CisgICAgaWYoKGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSAhPTApICYmICFjb3JlMmRtZW1fY21kX29fcikKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBSRUFEIERhdGEgOiAleCBSZXNvbnNlOiAleCIsIGNvcmUyZG1lbV9hZGRyX29fcixgUklTQ19DT1JFLmRtZW0yY29yZV9yZGF0YV9pLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSk7CitlbmQKKyovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyZjJhNGQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2NfYm9vdC9ydW5faXZlcmlsb2cKQEAgLTAsMCArMSwyNiBAQAorIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKyMgLy8gCisjIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAvLworIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAvLworIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKyMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNhZGQgLURXRkRVTVAgdG8gZW5hYmxlIHdhdmVmb3JtIGR1bXAKK2l2ZXJpbG9nIC1EV0ZEVU1QIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJFBES19QQVRIIFwKKy1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9ydGwgXAorLUkgLi4vbW9kZWwgIC1JIC4uL2FnZW50cyAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vLi4vLi4vdmVyaWxvZyBcCistSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyBcCityaXNjX2Jvb3RfdGIudiAtbyByaXNjX2Jvb3QudnZwIAorCit2dnAgcmlzY19ib290LnZ2cAorcm0gcmlzY19ib290LnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMgYi92ZXJpbG9nL2R2L3Jpc2NfYm9vdC91c2VyX3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTgwNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw1OSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAzQykKKworI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMDApCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDA4KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMEMpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDE0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMTgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc4ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDIwKQorCitpbnQgbWFpbigpCit7CisKKyAgICB3aGlsZSgxKSB7CisgICAgICAgLy8gQ2hlY2sgVUFSVCBSWCBmaWZvIGhhcyBkYXRhLCBpZiBhdmFpbGFibGUgbG9vcCBiYWNrIHRoZSBkYXRhCisgICAgICAgaWYocmVnX21wcmpfdWFydF9yZWc4ICE9IDApIHsgCisJICAgcmVnX21wcmpfdWFydF9yZWc1ID0gcmVnX21wcmpfdWFydF9yZWc2OworICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDYxYmEzCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL01ha2VmaWxlCkBAIC0wLDAgKzEsMzc3IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2VmaWxlIGZvciBTQ1IxCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NJTSA/PSBSVEwKK0RVTVAgPz0gT0ZGCisKKyMgUEFSQU1FVEVSUworCisjIENGRyA9IDxNQVgsIEJBU0UsIE1JTiwgQ1VTVE9NPgorIyBCVVMgPSA8QUhCLCBBWEksIFdCPgorCitleHBvcnQgQ0ZHICAgICAgPz0gTUFYCitleHBvcnQgQlVTICAgICAgPz0gV0IKKworaWZlcSAoJChDRkcpLCBNQVgpCisjIFByZWRlZmluZWQgY29uZmlndXJhdGlvbiBZQ1IxX0NGR19SVjMySU1DX01BWAorICAgIG92ZXJyaWRlIEFSQ0ggICAgICAgICA6PSBJTUMKKyAgICBvdmVycmlkZSBWRUNUX0lSUSAgICAgOj0gMQorICAgIG92ZXJyaWRlIElQSUMgICAgICAgICA6PSAxCisgICAgb3ZlcnJpZGUgVENNICAgICAgICAgIDo9IDAKKyAgICBvdmVycmlkZSBTSU1fQ0ZHX0RFRiAgOj0gWUNSMV9DRkdfUlYzMklNQ19NQVgKK2Vsc2UKKyAgICBpZmVxICgkKENGRyksIEJBU0UpCisgICAgIyBQcmVkZWZpbmVkIGNvbmZpZ3VyYXRpb24gWUNSMV9DRkdfUlYzMklDX0JBU0UKKyAgICAgICAgb3ZlcnJpZGUgQVJDSCAgICAgICAgIDo9IElDCisgICAgICAgIG92ZXJyaWRlIFZFQ1RfSVJRICAgICA6PSAxCisgICAgICAgIG92ZXJyaWRlIElQSUMgICAgICAgICA6PSAxCisgICAgICAgIG92ZXJyaWRlIFRDTSAgICAgICAgICA6PSAwCisgICAgICAgIG92ZXJyaWRlIFNJTV9DRkdfREVGICA6PSBZQ1IxX0NGR19SVjMySUNfQkFTRQorICAgIGVsc2UKKyAgICAgICAgaWZlcSAoJChDRkcpLCBNSU4pCisgICAgICAgICMgUHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIFNDUjFfQ0ZHX1JWMzJFQ19NSU4KKyAgICAgICAgICAgIG92ZXJyaWRlIEFSQ0ggICAgICAgICA6PSBFQworICAgICAgICAgICAgb3ZlcnJpZGUgVkVDVF9JUlEgICAgIDo9IDAKKyAgICAgICAgICAgIG92ZXJyaWRlIElQSUMgICAgICAgICA6PSAwCisgICAgICAgICAgICBvdmVycmlkZSBUQ00gICAgICAgICAgOj0gMAorICAgICAgICAgICAgb3ZlcnJpZGUgU0lNX0NGR19ERUYgIDo9IFlDUjFfQ0ZHX1JWMzJFQ19NSU4KKyAgICAgICAgZWxzZQorICAgICAgICAjIENVU1RPTSBjb25maWd1cmF0aW9uLiBQYXJhbWV0ZXJzIGNhbiBiZSBvdmVyd3JpdHRlbgorICAgICAgICAgICAgIyBUaGVzZSBvcHRpb25zIGFyZSBmb3IgY29tcGlsaW5nIHRlc3RzIG9ubHkuIFNldCB0aGUgY29ycmVzcG9uZGluZyBSVEwgcGFyYW1ldGVycyBtYW51YWxseSBpbiB0aGUgZmlsZSB5Y3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoLgorICAgICAgICAgICAgIyBBUkNIID0gPElNQywgSUMsIElNLCBJLCBFTUMsIEVNLCBFQywgRT4KKyAgICAgICAgICAgICMgVkVDVF9JUlEgPSA8MCwgMT4KKyAgICAgICAgICAgICMgSVBJQyA9IDwwLCAxPgorICAgICAgICAgICAgIyBUQ00gPSA8MCwgMT4KKyAgICAgICAgICAgIEFSQ0ggICAgICA/PSBJTUMKKyAgICAgICAgICAgIFZFQ1RfSVJRICA/PSAwCisgICAgICAgICAgICBJUElDICAgICAgPz0gMAorICAgICAgICAgICAgVENNICAgICAgID89IDAKKyAgICAgICAgICAgIFNJTV9DRkdfREVGICA9IFlDUjFfQ0ZHXyQoQ0ZHKQorICAgICAgICBlbmRpZgorICAgIGVuZGlmCitlbmRpZgorCisjIGV4cG9ydCBhbGwgb3ZlcnJpZGVkIHZhcmlhYmxlcworZXhwb3J0IEFSQ0gKK2V4cG9ydCBWRUNUX0lSUQorZXhwb3J0IElQSUMKK2V4cG9ydCBUQ00KK2V4cG9ydCBTSU1fQ0ZHX0RFRgorCitBUkNIX2xvd2VyY2FzZSA9ICQoc2hlbGwgZWNobyAkKEFSQ0gpIHwgdHIgQS1aIGEteikKK0JVU19sb3dlcmNhc2UgID0gJChzaGVsbCBlY2hvICQoQlVTKSAgfCB0ciBBLVogYS16KQorCitpZmVxICgkKEFSQ0hfbG93ZXJjYXNlKSwpCisgICAgQVJDSF90bXAgPSBpbWMKK2Vsc2UKKyAgICBpZm5lcSAoLCQoZmluZHN0cmluZyBlLCQoQVJDSF9sb3dlcmNhc2UpKSkKKyAgICAgICAgQVJDSF90bXAgICArPSBlCisgICAgICAgIEVYVF9DRkxBR1MgKz0gLURfX1JWRV9FWFQKKyAgICBlbHNlCisgICAgICAgIEFSQ0hfdG1wICAgKz0gaQorICAgIGVuZGlmCisgICAgaWZuZXEgKCwkKGZpbmRzdHJpbmcgbSwkKEFSQ0hfbG93ZXJjYXNlKSkpCisgICAgICAgIEFSQ0hfdG1wICAgOj0gJChBUkNIX3RtcCltCisgICAgZW5kaWYKKyAgICBpZm5lcSAoLCQoZmluZHN0cmluZyBjLCQoQVJDSF9sb3dlcmNhc2UpKSkKKyAgICAgICAgQVJDSF90bXAgICA6PSAkKEFSQ0hfdG1wKWMKKyAgICAgICAgRVhUX0NGTEFHUyArPSAtRF9fUlZDX0VYVAorICAgIGVuZGlmCitlbmRpZgorCitvdmVycmlkZSBBUkNIPSQoQVJDSF90bXApCisKKyMgVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGVuYWJsZSB0cmFjZWxvZworVFJBQ0UgPz0gMAorCitpZmVxICgkKFRSQUNFKSwgMSkKKyAgICBleHBvcnQgU0lNX1RSQUNFX0RFRiA9IFlDUjFfVFJBQ0VfTE9HX0VOCitlbHNlCisgICAgZXhwb3J0IFNJTV9UUkFDRV9ERUYgPSBZQ1IxX1RSQUNFX0xPR19ESVMKK2VuZGlmCisKKworIyBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gcGFzcyBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHNpbXVsYXRpb24gYnVpbGQgY29tbWFuZAorU0lNX0JVSUxEX09QVFMgPz0KKworIyBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gc2V0IHRoZSBsaXN0IG9mIHRlc3RzIHRvIHJ1bgorIyBUQVJHRVRTID0gPHJpc2N2X2lzYSwgcmlzY3ZfY29tcGxpYW5jZSwgY29yZW1hcmssIGRocnlzdG9uZTIxLCBoZWxsbywgaXNyX3NhbXBsZT4KK2V4cG9ydCBUQVJHRVRTIDo9CisKKworZXhwb3J0IEFCSSAgID89IGlscDMyCisjIFRlc3RiZW5jaCBtZW1vcnkgZGVsYXkgcGF0dGVybnNcCisgIChGRkZGRkZGRiAtIG5vIGRlbGF5LCAwMDAwMDAwMCAtIHJhbmRvbSBkZWxheSwgMDAwMDAwMDEgLSBtYXggZGVsYXkpCitpbWVtX3BhdHRlcm4gPz0gRkZGRkZGRkYKK2RtZW1fcGF0dGVybiA/PSBGRkZGRkZGRgorCitWQ1NfT1BUUyAgICAgICA/PQorTU9ERUxTSU1fT1BUUyAgPz0KK05DU0lNX09QVFMgICAgID89CitWRVJJTEFUT1JfT1BUUyA/PQorCitjdXJyZW50X2dvYWwgOj0gJChNQUtFQ01ER09BTFM6cnVuXyU9JSkKK2lmZXEgKCQoY3VycmVudF9nb2FsKSwpCisgICAgY3VycmVudF9nb2FsIDo9IGl2ZXJpbG9nCitlbmRpZgorCisKK2V4cG9ydCByb290X2RpciA6PSAkKHNoZWxsIHB3ZCkKK2V4cG9ydCBibGRfZGlyICA6PSAkKHJvb3RfZGlyKS9idWlsZC8kKGN1cnJlbnRfZ29hbClfJChCVVMpXyQoQ0ZHKV8kKEFSQ0gpX0lQSUNfJChJUElDKV9UQ01fJChUQ00pX1ZJUlFfJChWRUNUX0lSUSlfVFJBQ0VfJChUUkFDRSkKKworIyMgQ2FyYXZlbCBQb2ludGVycyByZWxhdGVkIHRvIGJ1aWxkIGRpcmVjdG9yeQorQ0FSQVZFTF9ST09UID89ICQocm9vdF9kaXIpLy4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89ICQocm9vdF9kaXIpLy4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfVEVTVFNfUEFUSCA9ICQocm9vdF9kaXIpCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKHJvb3RfZGlyKS8uLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAkKHJvb3RfZGlyKS8uLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCitzdl9saXN0ICAgICAgICAgICAgPSAuLi8uLi91c2VyX3Jpc2NfcmVncmVzc190Yi52Cit0b3BfbW9kdWxlICAgICAgICAgPSB1c2VyX3Jpc2NfcmVncmVzc190YgorCisjIFRCIFBhdGhzCitleHBvcnQgc2ltX2RpciAgOj0gJChVUFJKX1RFU1RTX1BBVEgpCitleHBvcnQgdHN0X2RpciAgOj0gJChzaW1fZGlyKS90ZXN0cworZXhwb3J0IGluY19kaXIgIDo9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCisKK3Rlc3RfcmVzdWx0cyA6PSAkKGJsZF9kaXIpL3Rlc3RfcmVzdWx0cy50eHQKK3Rlc3RfaW5mbyAgICA6PSAkKGJsZF9kaXIpL3Rlc3RfaW5mbworc2ltX3Jlc3VsdHMgIDo9ICQoYmxkX2Rpcikvc2ltX3Jlc3VsdHMudHh0CisKK3RvZG9fbGlzdCAgICA6PSAkKGJsZF9kaXIpL3RvZG8udHh0CisKKyMgRW52aXJvbm1lbnQKK2V4cG9ydCBDUk9TU19QUkVGSVggID89IHJpc2N2NjQtdW5rbm93bi1lbGYtCitleHBvcnQgUklTQ1ZfR0NDICAgICA/PSAkKENST1NTX1BSRUZJWClnY2MKK2V4cG9ydCBSSVNDVl9PQkpEVU1QID89ICQoQ1JPU1NfUFJFRklYKW9iamR1bXAgLUQKK2V4cG9ydCBSSVNDVl9PQkpDT1BZID89ICQoQ1JPU1NfUFJFRklYKW9iamNvcHkgLU8gdmVyaWxvZworZXhwb3J0IFJJU0NWX1JPTV9PQkpDT1BZID89ICQoQ1JPU1NfUFJFRklYKW9iamNvcHkgLWogLnRleHQuaW5pdCAtaiAudGV4dCAtaiAucm9kYXRhIC1qIC5yb2RhdGEuc3RyMS40IC1PIHZlcmlsb2cKKyNTZXBlcmF0ZSB0aGUgUkFNIGNvbnRlbnQgYW5kIHdyaXRlIG91dCBpbiAzMmJpdCBMaXR0bGUgZW5kaWFuIGZvcm1hdCB0byBsb2FkIGl0IHRvIFRDTSBNZW1vcnkKKyNleHBvcnQgUklTQ1ZfUkFNX09CSkNPUFkgPz0gJChDUk9TU19QUkVGSVgpb2JqY29weSAtUiAudGV4dC5pbml0IC1SIC50ZXh0IC1SIC5yb2RhdGEgLVIgLnJvZGF0YS5zdHIxLjQgLVIgLnJpc2N2LmF0dHJpYnV0ZXMgLVIgLmNvbW1lbnQgLVIgLmRlYnVnX2FiYnJldiAtUiAuZGVidWdfbG9jIC1SIC5kZWJ1Z19zdHIgLU8gdmVyaWxvZyAtLXZlcmlsb2ctZGF0YS13aWR0aD00IC0tcmV2ZXJzZS1ieXRlcz00CitleHBvcnQgUklTQ1ZfUkFNX09CSkNPUFkgPz0gJChDUk9TU19QUkVGSVgpb2JqY29weSAtUiAudGV4dC5pbml0IC1SIC50ZXh0IC1SIC5yb2RhdGEgLVIgLnJvZGF0YS5zdHIxLjQgLU8gdmVyaWxvZworZXhwb3J0IFJJU0NWX1JFQURFTEYgPz0gJChDUk9TU19QUkVGSVgpcmVhZGVsZiAtcworCitpZm5lcSAoLCQoZmluZHN0cmluZyBlLCQoQVJDSF9sb3dlcmNhc2UpKSkKKyMgVGVzdHMgY2FuIGJlIGNvbXBpbGVkIGZvciBSVkUgb25seSBpZiBnY2MgdmVyc2lvbiA4LjAuMCBvciBoaWdoZXIKKyAgICBHQ0NWRVJTSU9OR1Q3IDo9ICQoc2hlbGwgZXhwciBgJChSSVNDVl9HQ0MpIC1kdW1wZnVsbHZlcnNpb24gfCBjdXQgLWYxIC1kJy4nYCBcPiA3KQorICAgIGlmZXEgIiQoR0NDVkVSU0lPTkdUNykiICIxIgorICAgICAgICBBQkkgOj0gaWxwMzJlCisgICAgZW5kaWYKK2VuZGlmCisKKyMtLQoraWZlcSAoLCQoZmluZHN0cmluZyBlLCQoQVJDSF9sb3dlcmNhc2UpKSkKKwkjIFRoZXNlIHRlc3RzIGNhbm5vdCBiZSBjb21waWxlZCBmb3IgUlZFCisJIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgcmlzY3ZfaXNhCisJVEFSR0VUUyArPSByaXNjdl9pc2EKKworCSMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIHJpc2N2X2NvbXBsaWFuY2UKKwlUQVJHRVRTICs9IHJpc2N2X2NvbXBsaWFuY2UKK2VuZGlmCisKKyMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIGlzcl9zYW1wbGUKK1RBUkdFVFMgKz0gaXNyX3NhbXBsZQorCisjIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSBjb3JlbWFyaworVEFSR0VUUyArPSBjb3JlbWFyaworCisjIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSBkaHJ5c3RvbmUKK1RBUkdFVFMgKz0gZGhyeXN0b25lMjEKKworIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgaGVsbG8gdGVzdAorVEFSR0VUUyArPSBoZWxsbworCisKKyMgVGFyZ2V0cworLlBIT05ZOiB0ZXN0cyBydW5faXZlcmlsb2cgcnVuX2l2ZXJpbG9nX3dmIHJ1bl9tb2RlbHNpbSBydW5fbW9kZWxzaW1fd2xmIHJ1bl92Y3MgcnVuX25jc2ltIHJ1bl92ZXJpbGF0b3IgcnVuX3ZlcmlsYXRvcl93ZgorCitkZWZhdWx0OiBjbGVhbl90ZXN0X2xpc3QgcnVuX2l2ZXJpbG9nCisKK2NsZWFuX3Rlc3RfbGlzdDoKKwlybSAtZiAkKHRlc3RfaW5mbykKKworZWNob19vdXQ6IHRlc3RzCisJQGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uICIgOworCUBlY2hvICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSIKKwordGVzdHM6ICQoVEFSR0VUUykKKworJCh0ZXN0X2luZm8pOiBjbGVhbl9oZXggdGVzdHMKKwljZCAkKGJsZF9kaXIpCisKK2lzcl9zYW1wbGU6IHwgJChibGRfZGlyKQorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9pc3Jfc2FtcGxlIEFSQ0g9JChBUkNIKSBJUElDPSQoSVBJQykgVkVDVF9JUlE9JChWRUNUX0lSUSkKKworZGhyeXN0b25lMjE6IHwgJChibGRfZGlyKQorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9iZW5jaG1hcmtzL2RocnlzdG9uZTIxIEVYVF9DRkxBR1M9IiQoRVhUX0NGTEFHUykiIEFSQ0g9JChBUkNIKQorCitjb3JlbWFyazogfCAkKGJsZF9kaXIpCisJQGVjaG8gImNvcmUgbWFya3MiCisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL2JlbmNobWFya3MvY29yZW1hcmsgRVhUX0NGTEFHUz0iJChFWFRfQ0ZMQUdTKSIgQVJDSD0kKEFSQ0gpCisKK3Jpc2N2X2lzYTogfCAkKGJsZF9kaXIpCisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Jpc2N2X2lzYSBBUkNIPSQoQVJDSCkKKworcmlzY3ZfY29tcGxpYW5jZTogfCAkKGJsZF9kaXIpCisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Jpc2N2X2NvbXBsaWFuY2UgQVJDSD0kKEFSQ0gpCisKK2hlbGxvOiB8ICQoYmxkX2RpcikKKwktJChNQUtFKSAtQyAkKHRzdF9kaXIpL2hlbGxvIEVYVF9DRkxBR1M9IiQoRVhUX0NGTEFHUykiIEFSQ0g9JChBUkNIKQorCit0ZXN0OiB8ICQoYmxkX2RpcikKKwktJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Rlc3QgRVhUX0NGTEFHUz0iJChFWFRfQ0ZMQUdTKSIgQVJDSD0kKEFSQ0gpCisKK2NsZWFuX2hleDogfCAkKGJsZF9kaXIpCisJJChSTSkgJChibGRfZGlyKS8qLmhleAorCiskKGJsZF9kaXIpOgorCW1rZGlyIC1wICQoYmxkX2RpcikKKworcnVuX3ZjczogJCh0ZXN0X2luZm8pCisJJChNQUtFKSAtQyAkKHJvb3RfZGlyKS9zaW0gYnVpbGRfdmNzIFNJTV9DRkdfREVGPSQoU0lNX0NGR19ERUYpIFNJTV9UUkFDRV9ERUY9JChTSU1fVFJBQ0VfREVGKSBTSU1fQlVJTERfT1BUUz0kKFNJTV9CVUlMRF9PUFRTKTsKKwlwcmludGYgIiIgPiAkKHRlc3RfcmVzdWx0cyk7CisJY2QgJChibGRfZGlyKTsgXAorCSQoYmxkX2Rpcikvc2ltdiAgLVYgXAorCSt0ZXN0X2luZm89JCh0ZXN0X2luZm8pIFwKKwkrdGVzdF9yZXN1bHRzPSQodGVzdF9yZXN1bHRzKSBcCisJK2ltZW1fcGF0dGVybj0kKGltZW1fcGF0dGVybikgXAorCStkbWVtX3BhdHRlcm49JChkbWVtX3BhdHRlcm4pIFwKKwkkKFZDU19PUFRTKSB8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorcnVuX21vZGVsc2ltOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF9tb2RlbHNpbSBTSU1fQ0ZHX0RFRj0kKFNJTV9DRkdfREVGKSBTSU1fVFJBQ0VfREVGPSQoU0lNX1RSQUNFX0RFRikgU0lNX0JVSUxEX09QVFM9JChTSU1fQlVJTERfT1BUUyk7IFwKKwlwcmludGYgIiIgPiAkKHRlc3RfcmVzdWx0cyk7IFwKKwljZCAkKGJsZF9kaXIpOyBcCisJdnNpbSAtYyAtZG8gInJ1biAtYWxsIiArbm93YXJuMzY5MSBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCisJK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAorCXdvcmsuJCh0b3BfbW9kdWxlKSBcCisJJChNT0RFTFNJTV9PUFRTKSB8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKHZzaW0gLXZlcnNpb24pIFxuIiA7XAorCXByaW50ZiAiICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0ICAgICAgICAgICAgICAgfCBidWlsZCB8IHNpbXVsYXRpb24gXG4iIDsgXAorCXByaW50ZiAiJCQoY2F0ICQodGVzdF9yZXN1bHRzKSkgXG4iCisKK3J1bl9pdmVyaWxvZzogJCh0ZXN0X2luZm8pCisJY2QgJChibGRfZGlyKTsgXAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSAtSSAkKFVQUkpfVEVTVFNfUEFUSCkgXAorCSQoc3ZfbGlzdCkgXAorCS1vICQodG9wX21vZHVsZSkudnZwOyBcCisJcHJpbnRmICIiID4gJCh0ZXN0X3Jlc3VsdHMpOyBcCisgICAgICAgIGl2ZXJpbG9nLXZwaSAuLi8uLi8uLi92cGkvc3lzdGVtL3N5c3RlbS5jOyBcCisJdnZwICAtTS4gLW1zeXN0ZW0gICQodG9wX21vZHVsZSkudnZwIFwKKwkrdGVzdF9pbmZvPSQodGVzdF9pbmZvKSBcCisJK3Rlc3RfcmVzdWx0cz0kKHRlc3RfcmVzdWx0cykgXAorCXwgdGVlICQoc2ltX3Jlc3VsdHMpICA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodnZwIC1WKSBcbiIgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorCitydW5faXZlcmlsb2dfd2Y6ICQodGVzdF9pbmZvKQorCWNkICQoYmxkX2Rpcik7IFwKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgLUkgJChVUFJKX1RFU1RTX1BBVEgpIFwKKwkkKHN2X2xpc3QpIFwKKwktbyAkKHRvcF9tb2R1bGUpLnZ2cDsgXAorCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsgXAorICAgICAgICBpdmVyaWxvZy12cGkgLi4vLi4vLi4vdnBpL3N5c3RlbS9zeXN0ZW0uYzsgXAorCXZ2cCAgLU0uIC1tc3lzdGVtICAkKHRvcF9tb2R1bGUpLnZ2cCBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwl8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKHZ2cCAtVikgXG4iIDtcCisJcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCisJcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKKworcnVuX21vZGVsc2ltX3dsZjogJCh0ZXN0X2luZm8pCisJJChNQUtFKSAtQyAkKHJvb3RfZGlyKS9zaW0gYnVpbGRfbW9kZWxzaW1fd2xmIFNJTV9DRkdfREVGPSQoU0lNX0NGR19ERUYpIFNJTV9UUkFDRV9ERUY9JChTSU1fVFJBQ0VfREVGKSBTSU1fQlVJTERfT1BUUz0kKFNJTV9CVUlMRF9PUFRTKTsgXAorCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsgXAorCWNkICQoYmxkX2Rpcik7IFwKKwl2c2ltIC1jIC1kbyAicnVuIC1hbGwiICtub3dhcm4zNjkxIFwKKwkrdGVzdF9pbmZvPSQodGVzdF9pbmZvKSBcCisJK3Rlc3RfcmVzdWx0cz0kKHRlc3RfcmVzdWx0cykgXAorCStpbWVtX3BhdHRlcm49JChpbWVtX3BhdHRlcm4pIFwKKwkrZG1lbV9wYXR0ZXJuPSQoZG1lbV9wYXR0ZXJuKSBcCisJd29yay4kKHRvcF9tb2R1bGUpIFwKKwkkKE1PREVMU0lNX09QVFMpIHwgdGVlICQoc2ltX3Jlc3VsdHMpICA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodnNpbSAtdmVyc2lvbikgXG4iIDtcCisJcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCisJcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKK3J1bl9uY3NpbTogJCh0ZXN0X2luZm8pCisJJChNQUtFKSAtQyAkKHJvb3RfZGlyKS9zaW0gYnVpbGRfbmNzaW0gU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOworCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKKwljZCAkKGJsZF9kaXIpOyBcCisJaXJ1biBcCisJLVIgXAorCS02NGJpdCBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCisJK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAorCSQoTkNTSU1fT1BUUykgfCB0ZWUgJChzaW1fcmVzdWx0cykgIDtcCisJcHJpbnRmICJTaW11bGF0aW9uIHBlcmZvcm1lZCBvbiAkJChpcnVuIC12ZXJzaW9uKSBcbiIgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorCitydW5fdmVyaWxhdG9yOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF92ZXJpbGF0b3IgU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOworCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKKwljZCAkKGJsZF9kaXIpOyBcCisJZWNobyAkKHRvcF9tb2R1bGUpIHwgdGVlICQoc2ltX3Jlc3VsdHMpOyBcCisJJChibGRfZGlyKS92ZXJpbGF0b3IvViQodG9wX21vZHVsZSkgXAorCSt0ZXN0X2luZm89JCh0ZXN0X2luZm8pIFwKKwkrdGVzdF9yZXN1bHRzPSQodGVzdF9yZXN1bHRzKSBcCisJK2ltZW1fcGF0dGVybj0kKGltZW1fcGF0dGVybikgXAorCStkbWVtX3BhdHRlcm49JChkbWVtX3BhdHRlcm4pIFwKKwkkKFZFUklMQVRPUl9PUFRTKSB8IHRlZSAtYSAkKHNpbV9yZXN1bHRzKSA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodmVyaWxhdG9yIC12ZXJzaW9uKSBcbiIgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorCitydW5fdmVyaWxhdG9yX3dmOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF92ZXJpbGF0b3Jfd2YgU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOworCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKKwljZCAkKGJsZF9kaXIpOyBcCisJZWNobyAkKHRvcF9tb2R1bGUpIHwgdGVlICQoc2ltX3Jlc3VsdHMpOyBcCisJJChibGRfZGlyKS92ZXJpbGF0b3IvViQodG9wX21vZHVsZSkgXAorCSt0ZXN0X2luZm89JCh0ZXN0X2luZm8pIFwKKwkrdGVzdF9yZXN1bHRzPSQodGVzdF9yZXN1bHRzKSBcCisJK2ltZW1fcGF0dGVybj0kKGltZW1fcGF0dGVybikgXAorCStkbWVtX3BhdHRlcm49JChkbWVtX3BhdHRlcm4pIFwKKwkkKFZFUklMQVRPUl9PUFRTKSB8IHRlZSAtYSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKHZlcmlsYXRvciAtdmVyc2lvbikgXG4iIDtcCisJcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCisJcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKK2NsZWFuOiAKKwkkKE1BS0UpIC1DICQodHN0X2RpcikvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMSBjbGVhbgorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9yaXNjdl9pc2EgY2xlYW4KKwkkKE1BS0UpIC1DICQodHN0X2RpcikvcmlzY3ZfY29tcGxpYW5jZSBjbGVhbgorCSQoUk0pIC1SICQocm9vdF9kaXIpL2J1aWxkLyoKKwkkKFJNKSAkKHRlc3RfaW5mbykKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9yaXNjdl9ydW50ZXN0cy5zdiBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9yaXNjdl9ydW50ZXN0cy5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWMxNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Jpc2N2X3J1bnRlc3RzLnN2CkBAIC0wLDAgKzEsMzg0IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX3RvcF90Yl9ydW50ZXN0cy5zdj4KKy8vLyBAYnJpZWYgICAgICBTQ1IxIHRlc3RiZW5jaCBydW4gdGVzdHMKKy8vLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1biB0ZXN0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2luaXRpYWwgYmVnaW4KKyAgICAvLyR2YWx1ZSRwbHVzYXJncygiaW1lbV9wYXR0ZXJuPSVoIiwgaW1lbV9yZXFfYWNrX3N0YWxsKTsKKyAgICAvLyR2YWx1ZSRwbHVzYXJncygiZG1lbV9wYXR0ZXJuPSVoIiwgZG1lbV9yZXFfYWNrX3N0YWxsKTsKKworICAgIC8vJGRpc3BsYXkoImltZW1fcGF0dGVybjoleCIsaW1lbV9yZXFfYWNrX3N0YWxsKTsKKyAgICAvLyRkaXNwbGF5KCJkbWVtX3BhdHRlcm46JXgiLGRtZW1fcmVxX2Fja19zdGFsbCk7CitgaWZkZWYgU0lHTkFUVVJFX09VVAorICAgICR2YWx1ZSRwbHVzYXJncygidGVzdF9uYW1lPSVzIiwgc190ZXN0bmFtZSk7CisgICAgYl9zaW5nbGVfcnVuX2ZsYWcgPSAxOworYGVsc2UgLy8gU0lHTkFUVVJFX09VVAorCisgICAgJHZhbHVlJHBsdXNhcmdzKCJ0ZXN0X2luZm89JXMiLCBzX2luZm8pOworICAgICR2YWx1ZSRwbHVzYXJncygidGVzdF9yZXN1bHRzPSVzIiwgc19yZXN1bHRzKTsKKworICAgIGZfaW5mbyAgICAgID0gJGZvcGVuKHNfaW5mbywgInIiKTsKKyAgICBmX3Jlc3VsdHMgICA9ICRmb3BlbihzX3Jlc3VsdHMsICJhIik7CitgZW5kaWYgLy8gU0lHTkFUVVJFX09VVAorCisKKworZW5kCisvKioqCisvLyBEZWJ1ZyBtZXNzYWdlIC0gZGluZXNoIEEKKyBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJpbWVtX2FkZHJfb19yOyAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCisgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgIGNvcmUyZG1lbV9hZGRyX29fcjsgICAgICAgICAgIC8vIERNRU0gYWRkcmVzcworIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlMmRtZW1fY21kX29fcjsKKyAKKyBgZGVmaW5lIFJJU0NfQ09SRSAgaV90b3AuaV9jb3JlX3RvcAorIAorIGFsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLmNsaykgYmVnaW4KKyAgICAgaWYoYFJJU0NfQ09SRS5pbWVtMmNvcmVfcmVxX2Fja19pICYmIGBSSVNDX0NPUkUuY29yZTJpbWVtX3JlcV9vKQorICAgICAgICAgICBjb3JlMmltZW1fYWRkcl9vX3IgPD0gYFJJU0NfQ09SRS5jb3JlMmltZW1fYWRkcl9vOworIAorICAgICBpZihgUklTQ19DT1JFLmRtZW0yY29yZV9yZXFfYWNrX2kgJiYgYFJJU0NfQ09SRS5jb3JlMmRtZW1fcmVxX28pIGJlZ2luCisgICAgICAgICAgIGNvcmUyZG1lbV9hZGRyX29fciA8PSBgUklTQ19DT1JFLmNvcmUyZG1lbV9hZGRyX287CisgICAgICAgICAgIGNvcmUyZG1lbV9jbWRfb19yICA8PSBgUklTQ19DT1JFLmNvcmUyZG1lbV9jbWRfbzsKKyAgICAgZW5kCisgCisgICAgIGlmKGBSSVNDX0NPUkUuaW1lbTJjb3JlX3Jlc3BfaSAhPTApCisgICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgY29yZTJpbWVtX2FkZHJfb19yLGBSSVNDX0NPUkUuaW1lbTJjb3JlX3JkYXRhX2ksYFJJU0NfQ09SRS5pbWVtMmNvcmVfcmVzcF9pKTsKKyAgICAgaWYoKGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSAhPTApICYmIGNvcmUyZG1lbV9jbWRfb19yKQorICAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGNvcmUyZG1lbV9hZGRyX29fcixgUklTQ19DT1JFLmNvcmUyZG1lbV93ZGF0YV9vLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSk7CisgICAgIGlmKChgUklTQ19DT1JFLmRtZW0yY29yZV9yZXNwX2kgIT0wKSAmJiAhY29yZTJkbWVtX2NtZF9vX3IpCisgICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgY29yZTJkbWVtX2FkZHJfb19yLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3JkYXRhX2ksYFJJU0NfQ09SRS5kbWVtMmNvcmVfcmVzcF9pKTsKKyBlbmQKKyoqLworLyoqKgorICBsb2dpYyBbMzE6MF0gdGVzdF9jb3VudDsKKyBgZGVmaW5lIFJJU0NfQ09SRSAgdV90b3AudV9yaXNjdl90b3AuaV9jb3JlX3RvcAorIGBkZWZpbmUgUklTQ19FWFUgIHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfZXh1CisKKyBpbml0aWFsIGJlZ2luCisJIHRlc3RfY291bnQgPSAwOworIGVuZAorCisgCisgYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUuY2xrKSBiZWdpbgorCSBpZihgUklTQ19FWFUucGNfY3Vycl91cGQpIGJlZ2luCisgICAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gQ250OiAleCBQQzogJXgiLCB0ZXN0X2NvdW50LGBSSVNDX0VYVS5wY19jdXJyX2ZmKTsKKyAgICAgICAgICAgICAgIHRlc3RfY291bnQgPD0gdGVzdF9jb3VudCsxOworCSAgZW5kCisgZW5kCisqKiovCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGJpdCB0ZXN0X3Bhc3M7CisgICAgaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfdGVzdDsKKyAgICBpbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl90ZXN0X3JhbTsKKyAgICBpZiAodGVzdF9ydW5uaW5nKSBiZWdpbgorICAgICAgICB0ZXN0X3Bhc3MgPSAxOworICAgICAgICByc3RfaW5pdCA8PSAxJ2IwOworCWlmKHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfZXh1LnBjX2N1cnJfZmYgPT09IDMyJ2h4eHh4X3h4eHgpIGJlZ2luCisJICAgJGRpc3BsYXkoIkVSUk9SOiBDVVJSRU5UIFBDIENvdW50ZXIgU3RhdGUgaXMgS25vd24iKTsKKwkgICAkZmluaXNoOworCWVuZAorICAgICAgICBpZiAoKHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfZXh1LmV4dTJwaXBlX3BjX2N1cnJfbyA9PSBZQ1IxX1NJTV9FWElUX0FERFIpICYgfnJzdF9pbml0ICYgJnJzdF9jbnQpIGJlZ2luCisKKyAgICAgICAgICAgIGBpZmRlZiBWRVJJTEFUT1IKKyAgICAgICAgICAgICAgICBsb2dpYyBbMjU1OjBdIGZ1bGxfZmlsZW5hbWU7CisgICAgICAgICAgICAgICAgZnVsbF9maWxlbmFtZSA9IHRlc3RfZmlsZTsKKyAgICAgICAgICAgIGBlbHNlIC8vIFZFUklMQVRPUgorICAgICAgICAgICAgICAgIHN0cmluZyBmdWxsX2ZpbGVuYW1lOworICAgICAgICAgICAgICAgIGZ1bGxfZmlsZW5hbWUgPSB0ZXN0X2ZpbGU7CisgICAgICAgICAgICBgZW5kaWYgLy8gVkVSSUxBVE9SCisKKyAgICAgICAgICAgIGlmIChpc19jb21wbGlhbmNlKHRlc3RfZmlsZSkpIGJlZ2luCisgICAgICAgICAgICAgICAgbG9naWMgWzMxOjBdIHRtcHYsIHN0YXJ0LCBzdG9wLCByZWZfZGF0YSwgdGVzdF9kYXRhOworICAgICAgICAgICAgICAgIGludGVnZXIgZmQ7CisgICAgICAgICAgICAgICAgYGlmZGVmIFZFUklMQVRPUgorICAgICAgICAgICAgICAgIGxvZ2ljIFsyMDQ3OjBdIHRtcHN0cjsKKyAgICAgICAgICAgICAgICBgZWxzZSAvLyBWRVJJTEFUT1IKKyAgICAgICAgICAgICAgICBzdHJpbmcgdG1wc3RyOworICAgICAgICAgICAgICAgIGBlbmRpZiAvLyBWRVJJTEFUT1IKKworCSAgICAgICAgLy8gRmx1c2ggdGhlIGNvbnRlbnQgb2YgZGNhY2hlIGZvciBzaWduYXR1cmUgdmFsaWRhdGlvbiBhdCBhcHAKKwkgICAgICAgIC8vIG1lbW9yeQkKKwkgICAgICAgIGZvcmNlIHVfdG9wLnVfcmlzY3ZfdG9wLnVfaW50Zi51X2RjYWNoZS5jZmdfZm9yY2VfZmx1c2ggPSAxJ2IxOworCSAgICAgICAgd2FpdCh1X3RvcC51X3Jpc2N2X3RvcC51X2ludGYudV9kY2FjaGUuZm9yY2VfZmx1c2hfZG9uZSA9PSAxJ2IxKTsKKwkgICAgICAgIHJlbGVhc2UgdV90b3AudV9yaXNjdl90b3AudV9pbnRmLnVfZGNhY2hlLmNmZ19mb3JjZV9mbHVzaDsKKwkgICAgICAgIHJlcGVhdCAoMjAwMCkgQChwb3NlZGdlIGNsb2NrKTsgLy8gd2FpdCBkYXRhIHRvIGZsdXNoIGluIHBpcGUKKwkJJGRpc3BsYXkoIlNUQVRVUzogQ2hlY2tpbmcgQ29tcGxhaW5jZSBUZXN0IFN0YXR1cyAuLi4uICIpOworICAgICAgICAgICAgICAgIHRlc3RfcnVubmluZyA8PSAxJ2IwOworICAgICAgICAgICAgICAgIHRlc3RfcGFzcyA9IDE7CisKKyAgICAgICAgICAgICAgICAkc2Zvcm1hdCh0bXBzdHIsICJyaXNjdjY0LXVua25vd24tZWxmLXJlYWRlbGYgLXMgJXMgfCBncmVwICdiZWdpbl9zaWduYXR1cmVcXHxlbmRfc2lnbmF0dXJlJyB8IGF3ayAne3ByaW50ICQyfScgPiBlbGZpbmZvIiwgZ2V0X2ZpbGVuYW1lKHRlc3RfZmlsZSkpOworICAgICAgICAgICAgICAgIGZkID0gJGZvcGVuKCJzY3JpcHQuc2giLCAidyIpOworICAgICAgICAgICAgICAgIGlmIChmZCA9PSAwKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAkd3JpdGUoIkNhbid0IG9wZW4gc2NyaXB0LnNoXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkVSUklSOkNhbid0IG9wZW4gc2NyaXB0LnNoXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXNzID0gMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAkZndyaXRlKGZkLCAiJXMiLCB0bXBzdHIpOworICAgICAgICAgICAgICAgICRmY2xvc2UoZmQpOworCisgICAgICAgICAgICAgICAgJHN5c3RlbSgic2ggc2NyaXB0LnNoIik7CisKKyAgICAgICAgICAgICAgICBmZCA9ICRmb3BlbigiZWxmaW5mbyIsICJyIik7CisgICAgICAgICAgICAgICAgaWYgKGZkID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICR3cml0ZSgiQ2FuJ3Qgb3BlbiBlbGZpbmZvXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkVSUk9SOiBDYW4ndCBvcGVuIGVsZmluZm9cbiIpOworICAgICAgICAgICAgICAgICAgICB0ZXN0X3Bhc3MgPSAwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGlmICgkZnNjYW5mKGZkLCIlaFxuJWgiLCBzdGFydCwgc3RvcCkgIT0gMikgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgJHdyaXRlKCJXcm9uZyBlbGZpbmZvIGRhdGFcbiIpOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiRVJST1I6V3JvbmcgZWxmaW5mbyBkYXRhOiBzdGFydDogJXggc3RvcDogJXhcbiIsc3RhcnQsc3RvcCk7CisgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFzcyA9IDA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID4gc3RvcCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgdG1wdiA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHN0b3A7CisgICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0bXB2OworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICRmY2xvc2UoZmQpOworCQlzdGFydCA9IHN0YXJ0ICYgMzInaDA3RkZfRkZGRjsKKwkgICAgICAgIHN0b3AgID0gc3RvcCAmIDMyJ2gwN0ZGX0ZGRkY7CisJCSRkaXNwbGF5KCJDb21wbGFpbmNlIFNpZ25hdHVyZSBTdGFydCBBZGRyZXNzOiAleCBFbmQgQWRkcmVzczoleCIsc3RhcnQsc3RvcCk7CisKKwkJLy9pZigoc3RhcnQgJiAzMidoMUZGRikgPiA1MTIpCisJCS8vCSRkaXNwbGF5KCJFUlJPUjogU3RhcnQgYWRkcmVzcyBpcyBtb3JlIHRoYW4gNTEyLCBTdGFydDogJXgiLHN0YXJ0ICYgMzInaDFGRkYpOworCQkvL2lmKChzdG9wICYgMzInaDFGRkYpID4gNTEyKQorCQkvLwkkZGlzcGxheSgiRVJST1I6IFN0b3AgYWRkcmVzcyBpcyBtb3JlIHRoYW4gNTEyLCBTdGFydDogJXgiLHN0b3AgJiAzMidoMUZGRik7CisKKyAgICAgICAgICAgICAgICBgaWZkZWYgU0lHTkFUVVJFX09VVAorCisgICAgICAgICAgICAgICAgICAgICRzZm9ybWF0KHRtcHN0ciwgIiVzLnNpZ25hdHVyZS5vdXRwdXQiLCBzX3Rlc3RuYW1lKTsKK2BpZmRlZiBWRVJJTEFUT1IKKyAgICAgICAgICAgICAgICAgICAgdG1wc3RyID0gcmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzKHRtcHN0cik7CitgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZmQgPSAkZm9wZW4odG1wc3RyLCAidyIpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHN0YXJ0ICE9IHN0b3ApKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXN0X2RhdGEgPSB1X3RvcC51X3NyYW0wXzJrYi5tZW1bKHN0YXJ0ICYgMzInaDFGRkYpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGF0YSA9IHt1X3NyYW0ubWVtb3J5W3N0YXJ0KzNdLCB1X3NyYW0ubWVtb3J5W3N0YXJ0KzJdLCB1X3NyYW0ubWVtb3J5W3N0YXJ0KzFdLCB1X3NyYW0ubWVtb3J5W3N0YXJ0XX07CisgICAgICAgICAgICAgICAgICAgICAgICAkZndyaXRlKGZkLCAiJXgiLCB0ZXN0X2RhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZShmZCwgIiVzIiwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSA0OworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgJGZjbG9zZShmZCk7CisgICAgICAgICAgICAgICAgYGVsc2UgLy9TSUdOQVRVUkVfT1VUCisgICAgICAgICAgICAgICAgICAgICRzZm9ybWF0KHRtcHN0ciwgInJpc2N2X2NvbXBsaWFuY2UvcmVmX2RhdGEvJXMiLCBnZXRfcmVmX2ZpbGVuYW1lKHRlc3RfZmlsZSkpOworYGlmZGVmIFZFUklMQVRPUgorICAgICAgICAgICAgICAgIHRtcHN0ciA9IHJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcyh0bXBzdHIpOworYGVuZGlmCisgICAgICAgICAgICAgICAgICAgIGZkID0gJGZvcGVuKHRtcHN0ciwiciIpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmQgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICR3cml0ZSgiQ2FuJ3Qgb3BlbiByZWZlcmVuY2VfZGF0YSBmaWxlOiAlc1xuIiwgdG1wc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJFUlJPUjogQ2FuJ3Qgb3BlbiByZWZlcmVuY2VfZGF0YSBmaWxlOiAlc1xuIiwgdG1wc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFzcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoISRmZW9mKGZkKSAmJiAoc3RhcnQgIT0gc3RvcCkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkZnNjYW5mKGZkLCAiMHglaCxcbiIsIHJlZl9kYXRhKTsKKwkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJLy8gQXNzdW1lZCBhbGwgc2lnbmF1cmUgYXJlIHdpdGgtaW4gZmlyc3QgNTEyIGxvY2F0aW9uIG9mIG1lbW9yeSwgCisJCQkvLyBvdGhlci13aXNlIG5lZWQgdG8gc3dpdGNoIGJhbmsKKwkJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSAgICAgICAgLy8kd3JpdGVtZW1oKCJzcmFtMF9vdXQuaGV4Iix1X3RvcC51X3RzcmFtMF8ya2IubWVtLDAsNTExKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGVzdF9kYXRhID0gdV90b3AudV9zcmFtMF8ya2IubWVtWygoc3RhcnQgPj4gMikgJiAzMidoMUZGRildOworICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9kYXRhID0ge3Vfc3JhbS5tZW1vcnlbc3RhcnQrM10sIHVfc3JhbS5tZW1vcnlbc3RhcnQrMl0sIHVfc3JhbS5tZW1vcnlbc3RhcnQrMV0sIHVfc3JhbS5tZW1vcnlbc3RhcnRdfTsKKwkJCS8vJGRpc3BsYXkoIkNvbXBhcmUgQWRkcjogJXggcmVmX2RhdGEgOiAleCwgdGVzdF9kYXRhOiAleCIsc3RhcnQscmVmX2RhdGEsdGVzdF9kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFzcyAmPSAocmVmX2RhdGEgPT0gdGVzdF9kYXRhKTsKKwkJCWlmKHJlZl9kYXRhICE9IHRlc3RfZGF0YSkKKwkJCSAgICRkaXNwbGF5KCJFUlJPUjogQ29tcGFyZSBBZGRyOiAleCBNZW0gQWRkcjogJXggcmVmX2RhdGEgOiAleCwgdGVzdF9kYXRhOiAleCIsc3RhcnQsc3RhcnQgJiAzMidoMUZGRixyZWZfZGF0YSx0ZXN0X2RhdGEpOworCQkJZWxzZQorCQkJICAgJGRpc3BsYXkoIlNUQVRVUzogQ29tcGFyZSBBZGRyOiAleCBNZW0gQWRkcjogJXggcmVmX2RhdGEgOiAleCIsc3RhcnQsc3RhcnQgJiAzMidoMUZGRixyZWZfZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSA0OworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgJGZjbG9zZShmZCk7CisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3RvdGFsICs9IDE7CisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3Bhc3NlZCArPSB0ZXN0X3Bhc3M7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0X3Bhc3MpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkd3JpdGUoIlwwMzNbMDszMm1UZXN0IHBhc3NlZFwwMzNbMG1cbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgJHdyaXRlKCJcMDMzWzA7MzFtVGVzdCBmYWlsZWQtMlwwMzNbMG1cbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBgZW5kaWYgIC8vIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIE5vbiBjb21wbGlhbmNlIG1vZGUKKyAgICAgICAgICAgICAgICB0ZXN0X3J1bm5pbmcgPD0gMSdiMDsKKwkJaWYodV90b3AudV9yaXNjdl90b3AuaV9jb3JlX3RvcC5pX3BpcGVfdG9wLmlfcGlwZV9tcHJmLm1wcmZfaW50WzEwXSAhPSAwKQorCQkgICAkZGlzcGxheSgiRVJST1I6IG1wcmZfaW50WzEwXTogJXggbm90IHplcm8iLHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfbXByZi5tcHJmX2ludFsxMF0pOworCisgICAgICAgICAgICAgICAgdGVzdF9wYXNzID0gKHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfbXByZi5tcHJmX2ludFsxMF0gPT0gMCk7CisgICAgICAgICAgICAgICAgdGVzdHNfdG90YWwgICAgICs9IDE7CisgICAgICAgICAgICAgICAgdGVzdHNfcGFzc2VkICAgICs9IHRlc3RfcGFzczsKKyAgICAgICAgICAgICAgICBgaWZuZGVmIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RfcGFzcykgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICR3cml0ZSgiXDAzM1swOzMybVRlc3QgcGFzc2VkXDAzM1swbVxuIik7CisgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkd3JpdGUoIlwwMzNbMDszMW1UZXN0IGZhaWxlZFwwMzNbMG1cbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBgZW5kaWYgLy9TSUdOQVRVUkVfT1VUCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICRmd3JpdGUoZl9yZXN1bHRzLCAiJXNcdFx0JXNcdCVzXG4iLCB0ZXN0X2ZpbGUsICJPSyIgLCAodGVzdF9wYXNzID8gIlBBU1MiIDogIl9fRkFJTCIpKTsKKyAgICAgICAgZW5kCisgICAgZW5kIGVsc2UgYmVnaW4KK2BpZmRlZiBWRVJJTEFUT1IKKyAgICBgaWZkZWYgU0lHTkFUVVJFX09VVAorICAgICAgICBpZiAoKHNfdGVzdG5hbWUubGVuKCkgIT0gMCkgJiYgKGJfc2luZ2xlX3J1bl9mbGFnKSkgYmVnaW4KKyAgICAgICAgICAgICRzZm9ybWF0KHRlc3RfZmlsZSwgIiVzLmJpbiIsIHNfdGVzdG5hbWUpOworICAgIGBlbHNlIC8vU0lHTkFUVVJFX09VVAorICAgICAgICBpZiAoJGZnZXRzKHRlc3RfZmlsZSxmX2luZm8pKSBiZWdpbgorICAgICAgICAgICAgdGVzdF9maWxlID0gdGVzdF9maWxlID4+IDg7IC8vIDwgUmVtb3ZpbmcgdHJhaWxpbmcgTEYgc3ltYm9sICgnXG4nKQorICAgIGBlbmRpZiAvL1NJR05BVFVSRV9PVVQKK2BlbHNlIC8vIFZFUklMQVRPUgorICAgICAgICBpZiAoISRmZW9mKGZfaW5mbykpIGJlZ2luCisgICAgICAgICAgICAkZnNjYW5mKGZfaW5mbywgIiVzXG4iLCB0ZXN0X2ZpbGUpOworYGVuZGlmIC8vIFZFUklMQVRPUgorICAgICAgICAgICAgZl90ZXN0ID0gJGZvcGVuKHRlc3RfZmlsZSwiciIpOworICAgICAgICAgICAgaWYgKGZfdGVzdCAhPSAwKSBiZWdpbgorICAgICAgICAgICAgLy8gTGF1bmNoIG5ldyB0ZXN0CisgICAgICAgICAgICAgICAgYGlmZGVmIFlDUjFfVFJBQ0VfTE9HX0VOCisgICAgICAgICAgICAgICAgICAgIHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3RyYWNlbG9nLnRlc3RfbmFtZSA9IHRlc3RfZmlsZTsKKyAgICAgICAgICAgICAgICBgZW5kaWYgLy8gU0NSMV9UUkFDRV9MT0dfRU4KKyAgICAgICAgICAgICAgICAvL2lfbWVtb3J5X3RiLnRlc3RfZmlsZSA9IHRlc3RfZmlsZTsKKyAgICAgICAgICAgICAgICAvL2lfbWVtb3J5X3RiLnRlc3RfZmlsZV9pbml0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICBgaWZuZGVmIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICAgICAgJHdyaXRlKCJcMDMzWzA7MzRtLS0tVGVzdDogJXNcMDMzWzBtXG4iLCB0ZXN0X2ZpbGUpOworICAgICAgICAgICAgICAgIGBlbmRpZiAvL1NJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICB0ZXN0X3J1bm5pbmcgPD0gMSdiMTsKKyAgICAgICAgICAgICAgICByc3RfaW5pdCA8PSAxJ2IxOworICAgICAgICAgICAgICAgIGBpZmRlZiBTSUdOQVRVUkVfT1VUCisgICAgICAgICAgICAgICAgICAgIGJfc2luZ2xlX3J1bl9mbGFnID0gMDsKKyAgICAgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgJGZ3cml0ZShmX3Jlc3VsdHMsICIlc1x0XHQlc1x0JXNcbiIsIHRlc3RfZmlsZSwgIl9fRkFJTCIsICItLS0tLS0tLSIpOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAvLyBFeGl0CisgICAgICAgICAgICBgaWZuZGVmIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICAkZGlzcGxheSgiXG4jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSgiIyBTdW1tYXJ5OiAlMGQvJTBkIHRlc3RzIHBhc3NlZCIsIHRlc3RzX3Bhc3NlZCwgdGVzdHNfdG90YWwpOworICAgICAgICAgICAgICAgICRkaXNwbGF5KCIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgICAgICAgICAgICAgICRmY2xvc2UoZl9pbmZvKTsKKyAgICAgICAgICAgICAgICAkZmNsb3NlKGZfcmVzdWx0cyk7CisgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgICRmaW5pc2goKTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworCisgICAgICAgIGBpZmRlZiBWRVJJTEFUT1IKKyAgICAgICAgZnVuY3Rpb24gYml0IGlzX2NvbXBsaWFuY2UgKGxvZ2ljIFsyNTU6MF0gdGVzdG5hbWUpOworICAgICAgICAgICAgYml0IHJlczsKKyAgICAgICAgICAgIGxvZ2ljIFs3OTowXSBwYXR0ZXJuOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgcGF0dGVybiA9IDgwJ2g2MzZmNmQ3MDZjNjk2MTZlNjM2NTsgLy8gY29tcGxpYW5jZQorICAgICAgICAgICAgcmVzID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpPD0gMTc2OyBpKyspIGJlZ2luCisgICAgICAgICAgICAgICAgaWYodGVzdG5hbWVbaSs6ODBdID09IHBhdHRlcm4pIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB+cmVzOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBgaWZkZWYgU0lHTkFUVVJFX09VVAorICAgICAgICAgICAgICAgIHJldHVybiB+cmVzOworICAgICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgYGVuZGlmCisgICAgICAgIGVuZAorICAgICAgICBlbmRmdW5jdGlvbiA6IGlzX2NvbXBsaWFuY2UKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGxvZ2ljIFsyNTU6MF0gZ2V0X2ZpbGVuYW1lIChsb2dpYyBbMjU1OjBdIHRlc3RuYW1lKTsKKyAgICAgICAgbG9naWMgWzI1NTowXSByZXM7CisgICAgICAgIGludCBpLCBqOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgdGVzdG5hbWVbNzowXSA9IDgnaDY2OworICAgICAgICAgICAgdGVzdG5hbWVbMTU6OF0gPSA4J2g2QzsKKyAgICAgICAgICAgIHRlc3RuYW1lWzIzOjE2XSA9IDgnaDY1OworICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gMjQ4OyBpICs9IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRlc3RuYW1lW2krOjhdID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpIC09IDg7CisgICAgICAgICAgICBmb3IgKGogPSAyNTU7IGkgPj0gMDtpIC09IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgcmVzW2otOjhdID0gdGVzdG5hbWVbaSs6OF07CisgICAgICAgICAgICAgICAgaiAtPSA4OworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBmb3IgKDsgaiA+PSAwO2ogLT0gOCkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXNbai06OF0gPSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgZW5kCisgICAgICAgIGVuZGZ1bmN0aW9uIDogZ2V0X2ZpbGVuYW1lCisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBsb2dpYyBbMjU1OjBdIGdldF9yZWZfZmlsZW5hbWUgKGxvZ2ljIFsyNTU6MF0gdGVzdG5hbWUpOworICAgICAgICBsb2dpYyBbMjU1OjBdIHJlczsKKyAgICAgICAgaW50IGksIGo7CisgICAgICAgIGxvZ2ljIFs3OTowXSBwYXR0ZXJuOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgcGF0dGVybiA9IDgwJ2g2MzZmNmQ3MDZjNjk2MTZlNjM2NTsgLy8gY29tcGxpYW5jZQorICAgICAgICAKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gMTc2OyBpKyspIGJlZ2luCisgICAgICAgICAgICAgICAgaWYodGVzdG5hbWVbaSs6ODBdID09IHBhdHRlcm4pIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHRlc3RuYW1lWyhpLTgpKzo4OF0gPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgICAgIGZvcihpID0gMzI7IGkgPD0gMjQ4OyBpICs9IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYodGVzdG5hbWVbaSs6OF0gPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGkgLT0gODsKKyAgICAgICAgICAgIGZvcihqID0gMjU1OyBpID4gMjQ7IGkgLT0gOCkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXNbai06OF0gPSB0ZXN0bmFtZVtpKzo4XTsKKyAgICAgICAgICAgICAgICBqIC09IDg7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGZvcig7IGogPj0wO2ogLT0gOCkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXNbai06OF0gPSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgZW5kCisgICAgICAgIGVuZGZ1bmN0aW9uIDogZ2V0X3JlZl9maWxlbmFtZQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gbG9naWMgWzIwNDc6MF0gcmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzIChsb2dpYyBbMjA0NzowXSBzdHIpOworICAgICAgICBpbnQgaTsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gMjA0MDsgaSArPSA4KSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChzdHJbaSs6OF0gIT0gOCdoMjApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBzdHIgPSBzdHIgPj4gaTsKKyAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgICAgIGVuZAorICAgICAgICBlbmRmdW5jdGlvbjogcmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzCisgICAgICAgIAorICAgICAgICBgZWxzZSAvLyBWRVJJTEFUT1IKKyAgICAgICAgZnVuY3Rpb24gYml0IGlzX2NvbXBsaWFuY2UgKHN0cmluZyB0ZXN0bmFtZSk7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICByZXR1cm4gKHRlc3RuYW1lLnN1YnN0cigwLCA5KSA9PSAiY29tcGxpYW5jZSIpOworICAgICAgICBlbmQKKyAgICAgICAgZW5kZnVuY3Rpb24gOiBpc19jb21wbGlhbmNlCisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBzdHJpbmcgZ2V0X2ZpbGVuYW1lIChzdHJpbmcgdGVzdG5hbWUpOworICAgICAgICBpbnQgbGVuZ3RoOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgbGVuZ3RoID0gdGVzdG5hbWUubGVuKCk7CisgICAgICAgICAgICB0ZXN0bmFtZVtsZW5ndGgtMV0gPSAiZiI7CisgICAgICAgICAgICB0ZXN0bmFtZVtsZW5ndGgtMl0gPSAibCI7CisgICAgICAgICAgICB0ZXN0bmFtZVtsZW5ndGgtM10gPSAiZSI7CisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRlc3RuYW1lOworICAgICAgICBlbmQKKyAgICAgICAgZW5kZnVuY3Rpb24gOiBnZXRfZmlsZW5hbWUKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHN0cmluZyBnZXRfcmVmX2ZpbGVuYW1lIChzdHJpbmcgdGVzdG5hbWUpOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgcmV0dXJuIHRlc3RuYW1lLnN1YnN0cigxMSwgdGVzdG5hbWUubGVuKCkgLSA1KTsKKyAgICAgICAgZW5kCisgICAgICAgIGVuZGZ1bmN0aW9uIDogZ2V0X3JlZl9maWxlbmFtZQorICAgICAgICAKKyAgICAgICAgYGVuZGlmIC8vIFZFUklMQVRPUgorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYmQ4ZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDMzIEBACitjZCAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2hlbGxvCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtYyAtSS4vIC1JL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy8uLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vc2NfcHJpbnQuYyAtbyAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2J1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wL3NjX3ByaW50Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24gIGhlbGxvLmMgLW8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9oZWxsby5vCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24gIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3Jpc2NkdWluby92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnRfdGNtLlMgLW8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9jcnRfdGNtLm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLW8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9oZWxsby5lbGYgLVQgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy8uLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmtfdGNtLmxkIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3Jpc2NkdWluby92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvYnVpbGQvaXZlcmlsb2dfV0JfTUFYX2ltY19JUElDXzFfVENNXzFfVklSUV8xX1RSQUNFXzAvc2NfcHJpbnQubyAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2J1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wL2hlbGxvLm8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9jcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCitybSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2J1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wL3NjX3ByaW50Lm8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9jcnRfdGNtLm8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9oZWxsby5vCisKK2NkIGJ1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wCisKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJFBES19ST09UL3NreTEzMEEgXAorLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgXAorLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL3J0bCBcCistSSAuLi8uLi8uLi9tb2RlbCAgICBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nL3J0bCBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nIFwKKy1JIC4uLy4uLy4uL2FnZW50cyAgICBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzIFwKKy1JIC4uLy4uLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMgXAorLUkgLi4vLi4vLi4vLi4vLi4vdmVyaWxvZy9ydGwvaTJjbS9zcmMvaW5jbHVkZXMgXAorLUkgLi4vLi4vLi4vLi4vLi4vdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcyBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9pbmNsdWRlIFwKKy1JIC4uLy4uIFwKKy4uLy4uL3VzZXJfcmlzY19yZWdyZXNzX3RiLnYgXAorLW8gdXNlcl9yaXNjX3JlZ3Jlc3NfdGIudnZwCisKK2l2ZXJpbG9nLXZwaSAuLi8uLi8uLi92cGkvc3lzdGVtL3N5c3RlbS5jCisKK3Z2cCAgLU0uIC1tc3lzdGVtICB1c2VyX3Jpc2NfcmVncmVzc190Yi52dnAgK3Rlc3RfaW5mbz0uL3Rlc3RfaW5mbyArdGVzdF9yZXN1bHRzPS4vdGVzdF9yZXN1bHRzLnR4dCB8IHRlZSBzaW1fcmVzdWx0cy50eHQKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjA2MjNiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvTWFrZWZpbGUKQEAgLTAsMCArMSwyNiBAQAorc3JjX2RpciA6PSAkKGRpciAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKQorZGVwZW5kX2RpciA6PSAkKHNyY19kaXIpLy4uLy4uLy4uL2RlcGVuZGVuY2llcy9jb3JlbWFyaworCitpZmVxICgiJChJVEVSQVRJT05TKSIsIiIpCitJVEVSQVRJT05TPTEKK2VuZGlmCisKK0FERF9DRkxBR1MgICs9IC1ESVRFUkFUSU9OUz0kKElURVJBVElPTlMpCitBRERfVlBBVEggICA6PSAkKGRlcGVuZF9kaXIpCitBRERfaW5jcyAgICA6PSAtSSQoc3JjX2Rpcikvc3JjIC1JJChkZXBlbmRfZGlyKQorCitjX3NyYyA6PSBjb3JlX3BvcnRtZS5jIHNjX3ByaW50LmMgCitjb3JlbWFya19zcmMgOj0gLi9zcmMvY29yZV9saXN0X2pvaW4uYyAuL3NyYy9jb3JlX21hdHJpeC5jIC4vc3JjL2NvcmVfbWFpbi5jIC4vc3JjL2NvcmVfdXRpbC5jIC4vc3JjL2NvcmVfc3RhdGUuYworY19zcmMgKz0gY29yZV9saXN0X2pvaW4uYyBjb3JlX21hdHJpeC5jIGNvcmVfbWFpbi5jIGNvcmVfdXRpbC5jIGNvcmVfc3RhdGUuYworCitpbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCisKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgICQoYmxkX2RpcikvY29yZW1hcmsuZWxmICQoYmxkX2RpcikvY29yZW1hcmsuaGV4ICQoYmxkX2RpcikvY29yZW1hcmsuZHVtcCAKKworbG9nX3JlcXVlc3RlZF90Z3Q6CisJZWNobyBjb3JlbWFyay5oZXg+PiAkKGJsZF9kaXIpL3Rlc3RfaW5mbworCWVjaG8gJChpbmNfZGlyKS9jb21tb24ubWsKKworY2xlYW46CisJJChSTSkgJChjX29ianMpICQoYXNtX29ianMpICQoYmxkX2RpcikvY29yZW1hcmsuaGV4ICQoYmxkX2RpcikvY29yZW1hcmsuZHVtcCAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmMgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9jb3JlX3BvcnRtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODAxZjcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9jb3JlX3BvcnRtZS5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorCUZpbGUgOiBjb3JlX3BvcnRtZS5jCisqLworLyoKKwlBdXRob3IgOiBTaGF5IEdhbC1PbiwgRUVNQkMKKwlMZWdhbCA6IFRPRE8hCisqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiY29yZW1hcmsuaCIKKyNpbmNsdWRlICJjb3JlX3BvcnRtZS5oIgorI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgorI2luY2x1ZGUgInNjX3Rlc3QuaCIKKworI2lmIFZBTElEQVRJT05fUlVOCisJdm9sYXRpbGUgZWVfczMyIHNlZWQxX3ZvbGF0aWxlPTB4MzQxNTsKKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDJfdm9sYXRpbGU9MHgzNDE1OworCXZvbGF0aWxlIGVlX3MzMiBzZWVkM192b2xhdGlsZT0weDY2OworI2VuZGlmCisjaWYgUEVSRk9STUFOQ0VfUlVOCisJdm9sYXRpbGUgZWVfczMyIHNlZWQxX3ZvbGF0aWxlPTB4MDsKKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDJfdm9sYXRpbGU9MHgwOworCXZvbGF0aWxlIGVlX3MzMiBzZWVkM192b2xhdGlsZT0weDY2OworI2VuZGlmCisjaWYgUFJPRklMRV9SVU4KKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDFfdm9sYXRpbGU9MHg4OworCXZvbGF0aWxlIGVlX3MzMiBzZWVkMl92b2xhdGlsZT0weDg7CisJdm9sYXRpbGUgZWVfczMyIHNlZWQzX3ZvbGF0aWxlPTB4ODsKKyNlbmRpZgorCXZvbGF0aWxlIGVlX3MzMiBzZWVkNF92b2xhdGlsZT1JVEVSQVRJT05TOworCXZvbGF0aWxlIGVlX3MzMiBzZWVkNV92b2xhdGlsZT0wOworCisvKiBQb3J0aW5nIDogVGltaW5nIGZ1bmN0aW9ucworCUhvdyB0byBjYXB0dXJlIHRpbWUgYW5kIGNvbnZlcnQgdG8gc2Vjb25kcyBtdXN0IGJlIHBvcnRlZCB0byB3aGF0ZXZlciBpcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLgorCWUuZy4gUmVhZCB2YWx1ZSBmcm9tIG9uIGJvYXJkIFJUQywgcmVhZCB2YWx1ZSBmcm9tIGNwdSBjbG9jayBjeWNsZXMgcGVyZm9ybWFuY2UgY291bnRlciBldGMuCisJU2FtcGxlIGltcGxlbWVudGF0aW9uIGZvciBzdGFuZGFyZCB0aW1lLmggYW5kIHdpbmRvd3MuaCBkZWZpbml0aW9ucyBpbmNsdWRlZC4KKyovCisjaWYgMQorQ09SRVRJTUVUWVBFIGJhcmVib25lc19jbG9jaygpIHsKKwl1bnNpZ25lZCBsb25nIG47CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkicmR0aW1lICUwIgorCQk6ICI9ciIgKG4pKTsKKwlyZXR1cm4gbjsKK30KKyNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJMTAwMDAwMDAKKworLyogRGVmaW5lIDogVElNRVJfUkVTX0RJVklERVIKKwlEaXZpZGVyIHRvIHRyYWRlIG9mZiB0aW1lciByZXNvbHV0aW9uIGFuZCB0b3RhbCB0aW1lIHRoYXQgY2FuIGJlIG1lYXN1cmVkLgorCisJVXNlIGxvd2VyIHZhbHVlcyB0byBpbmNyZWFzZSByZXNvbHV0aW9uLCBidXQgbWFrZSBzdXJlIHRoYXQgb3ZlcmZsb3cgZG9lcyBub3Qgb2NjdXIuCisJSWYgdGhlcmUgYXJlIGlzc3VlcyB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb3ZlcmZsb3dpbmcsIGluY3JlYXNlIHRoaXMgdmFsdWUuCisJKi8KKy8qICNkZWZpbmUgTlNFQ1NfUEVSX1NFQyBDTE9DS1NfUEVSX1NFQyAqLworLyogI2RlZmluZSBDT1JFVElNRVRZUEUgY2xvY2tfdCAqLworI2RlZmluZSBHRVRNWVRJTUUoX3QpICgqX3Q9YmFyZWJvbmVzX2Nsb2NrKCkpCisjZGVmaW5lIE1ZVElNRURJRkYoZmluLGluaSkgKChmaW4pLShpbmkpKQorI2RlZmluZSBUSU1FUl9SRVNfRElWSURFUiAxCisjZGVmaW5lIFNBTVBMRV9USU1FX0lNUExFTUVOVEFUSU9OIDEKKyNkZWZpbmUgRUVfVElDS1NfUEVSX1NFQyAoQ0xPQ0tTX1BFUl9TRUMgLyBUSU1FUl9SRVNfRElWSURFUikKKyNlbHNlCisKKyNlbmRpZgorCisvKiogRGVmaW5lIEhvc3Qgc3BlY2lmaWMgKFBPU0lYKSwgb3IgdGFyZ2V0IHNwZWNpZmljIGdsb2JhbCB0aW1lIHZhcmlhYmxlcy4gKi8KK3N0YXRpYyBDT1JFVElNRVRZUEUgc3RhcnRfdGltZV92YWwsIHN0b3BfdGltZV92YWw7CisKKy8qIEZ1bmN0aW9uIDogc3RhcnRfdGltZQorCVRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgcmlnaHQgYmVmb3JlIHN0YXJ0aW5nIHRoZSB0aW1lZCBwb3J0aW9uIG9mIHRoZSBiZW5jaG1hcmsuCisKKwlJbXBsZW1lbnRhdGlvbiBtYXkgYmUgY2FwdHVyaW5nIGEgc3lzdGVtIHRpbWVyIChhcyBpbXBsZW1lbnRlZCBpbiB0aGUgZXhhbXBsZSBjb2RlKQorCW9yIHplcm9pbmcgc29tZSBzeXN0ZW0gcGFyYW1ldGVycyAtIGUuZy4gc2V0dGluZyB0aGUgY3B1IGNsb2NrcyBjeWNsZXMgdG8gMC4KKyovCit2b2lkIHN0YXJ0X3RpbWUodm9pZCkgeworCUdFVE1ZVElNRSgmc3RhcnRfdGltZV92YWwgKTsKK30KKy8qIEZ1bmN0aW9uIDogc3RvcF90aW1lCisJVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCByaWdodCBhZnRlciBlbmRpbmcgdGhlIHRpbWVkIHBvcnRpb24gb2YgdGhlIGJlbmNobWFyay4KKworCUltcGxlbWVudGF0aW9uIG1heSBiZSBjYXB0dXJpbmcgYSBzeXN0ZW0gdGltZXIgKGFzIGltcGxlbWVudGVkIGluIHRoZSBleGFtcGxlIGNvZGUpCisJb3Igb3RoZXIgc3lzdGVtIHBhcmFtZXRlcnMgLSBlLmcuIHJlYWRpbmcgdGhlIGN1cnJlbnQgdmFsdWUgb2YgY3B1IGN5Y2xlcyBjb3VudGVyLgorKi8KK3ZvaWQgc3RvcF90aW1lKHZvaWQpIHsKKwlHRVRNWVRJTUUoJnN0b3BfdGltZV92YWwgKTsKK30KKy8qIEZ1bmN0aW9uIDogZ2V0X3RpbWUKKwlSZXR1cm4gYW4gYWJzdHJhY3QgInRpY2tzIiBudW1iZXIgdGhhdCBzaWduaWZpZXMgdGltZSBvbiB0aGUgc3lzdGVtLgorCisJQWN0dWFsIHZhbHVlIHJldHVybmVkIG1heSBiZSBjcHUgY3ljbGVzLCBtaWxsaXNlY29uZHMgb3IgYW55IG90aGVyIHZhbHVlLAorCWFzIGxvbmcgYXMgaXQgY2FuIGJlIGNvbnZlcnRlZCB0byBzZWNvbmRzIGJ5IDx0aW1lX2luX3NlY3M+LgorCVRoaXMgbWV0aG9kb2xvZ3kgaXMgdGFrZW4gdG8gYWNjb21vZGF0ZSBhbnkgaGFyZHdhcmUgb3Igc2ltdWxhdGVkIHBsYXRmb3JtLgorCVRoZSBzYW1wbGUgaW1wbGVtZW50YXRpb24gcmV0dXJucyBtaWxsaXNlY3MgYnkgZGVmYXVsdCwKKwlhbmQgdGhlIHJlc29sdXRpb24gaXMgY29udHJvbGxlZCBieSA8VElNRVJfUkVTX0RJVklERVI+CisqLworQ09SRV9USUNLUyBnZXRfdGltZSh2b2lkKSB7CisJQ09SRV9USUNLUyBlbGFwc2VkPShDT1JFX1RJQ0tTKShNWVRJTUVESUZGKHN0b3BfdGltZV92YWwsIHN0YXJ0X3RpbWVfdmFsKSk7CisJcmV0dXJuIGVsYXBzZWQ7Cit9CisvKiBGdW5jdGlvbiA6IHRpbWVfaW5fc2VjcworCUNvbnZlcnQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGdldF90aW1lIHRvIHNlY29uZHMuCisKKwlUaGUgPHNlY3NfcmV0PiB0eXBlIGlzIHVzZWQgdG8gYWNjb21vZGF0ZSBzeXN0ZW1zIHdpdGggbm8gc3VwcG9ydCBmb3IgZmxvYXRpbmcgcG9pbnQuCisJRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRlZCBieSB0aGUgRUVfVElDS1NfUEVSX1NFQyBtYWNybyBhYm92ZS4KKyovCitzZWNzX3JldCB0aW1lX2luX3NlY3MoQ09SRV9USUNLUyB0aWNrcykgeworCXNlY3NfcmV0IHJldHZhbD0oKHNlY3NfcmV0KXRpY2tzKSAvIChzZWNzX3JldClFRV9USUNLU19QRVJfU0VDOworCXJldHVybiByZXR2YWw7Cit9CisKK2VlX3UzMiBkZWZhdWx0X251bV9jb250ZXh0cz0xOworCisvKiBGdW5jdGlvbiA6IHBvcnRhYmxlX2luaXQKKwlUYXJnZXQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gY29kZQorCVRlc3QgZm9yIHNvbWUgY29tbW9uIG1pc3Rha2VzLgorKi8KK3ZvaWQgcG9ydGFibGVfaW5pdChjb3JlX3BvcnRhYmxlICpwLCBpbnQgKmFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBlZV9wcmludGYoIkNvcmVNYXJrIDEuMFxuIik7CisJaWYgKHNpemVvZihlZV9wdHJfaW50KSAhPSBzaXplb2YoZWVfdTggKikpIHsKKwkJZWVfcHJpbnRmKCJFUlJPUiEgUGxlYXNlIGRlZmluZSBlZV9wdHJfaW50IHRvIGEgdHlwZSB0aGF0IGhvbGRzIGEgcG9pbnRlciEgKCV1ICE9ICV1KVxuIiwgc2l6ZW9mKGVlX3B0cl9pbnQpLCBzaXplb2YoZWVfdTggKikpOworCX0KKwlpZiAoc2l6ZW9mKGVlX3UzMikgIT0gNCkgeworCQllZV9wcmludGYoIkVSUk9SISBQbGVhc2UgZGVmaW5lIGVlX3UzMiB0byBhIDMyYiB1bnNpZ25lZCB0eXBlISAoJXUpXG4iLCBzaXplb2YoZWVfdTMyKSk7CisJfQorCXAtPnBvcnRhYmxlX2lkPTE7Cit9CisvKiBGdW5jdGlvbiA6IHBvcnRhYmxlX2ZpbmkKKwlUYXJnZXQgc3BlY2lmaWMgZmluYWwgY29kZQorKi8KK3ZvaWQgcG9ydGFibGVfZmluaShjb3JlX3BvcnRhYmxlICpwKQoreworCXAtPnBvcnRhYmxlX2lkPTA7CisKKyAgICByZXBvcnRfcmVzdWx0cygwLCAwLCAwLCAwLCAwKTsKKworICAgIC8qIHJlc3VsdHNbMF0uaXRlcmF0aW9ucyAqIDEwMDAwMDAwLyh0b3RhbF90aW1lKSAqLworCisgICAgLyogZXh0ZXJuIHZvaWQgdG9ob3N0X2V4aXQobG9uZyBjb2RlKTsgKi8KKworICAgIC8qIHRvaG9zdF9leGl0KDApOyAqLworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvY29yZV9wb3J0bWUuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU3OTMwZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmgKQEAgLTAsMCArMSwyMTAgQEAKKy8qIEZpbGUgOiBjb3JlX3BvcnRtZS5oICovCisKKy8qCisJQXV0aG9yIDogU2hheSBHYWwtT24sIEVFTUJDCisJTGVnYWwgOiBUT0RPIQorKi8KKy8qIFRvcGljIDogRGVzY3JpcHRpb24KKwlUaGlzIGZpbGUgY29udGFpbnMgY29uZmlndXJhdGlvbiBjb25zdGFudHMgcmVxdWlyZWQgdG8gZXhlY3V0ZSBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zCisqLworI2lmbmRlZiBDT1JFX1BPUlRNRV9ICisjZGVmaW5lIENPUkVfUE9SVE1FX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEYXRhIHR5cGVzIGFuZCBzZXR0aW5ncyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbmZpZ3VyYXRpb24gOiBIQVNfRkxPQVQKKwlEZWZpbmUgdG8gMSBpZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgZmxvYXRpbmcgcG9pbnQuCisqLworI2lmbmRlZiBIQVNfRkxPQVQKKyNkZWZpbmUgSEFTX0ZMT0FUIDAKKyNlbmRpZgorLyogQ29uZmlndXJhdGlvbiA6IEhBU19USU1FX0gKKwlEZWZpbmUgdG8gMSBpZiBwbGF0Zm9ybSBoYXMgdGhlIHRpbWUuaCBoZWFkZXIgZmlsZSwKKwlhbmQgaW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIHRoZXJlb2YuCisqLworI2lmbmRlZiBIQVNfVElNRV9ICisjZGVmaW5lIEhBU19USU1FX0ggMAorI2VuZGlmCisvKiBDb25maWd1cmF0aW9uIDogVVNFX0NMT0NLCisJRGVmaW5lIHRvIDEgaWYgcGxhdGZvcm0gaGFzIHRoZSB0aW1lLmggaGVhZGVyIGZpbGUsCisJYW5kIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyB0aGVyZW9mLgorKi8KKyNpZm5kZWYgVVNFX0NMT0NLCisjZGVmaW5lIFVTRV9DTE9DSyAwCisjZW5kaWYKKy8qIENvbmZpZ3VyYXRpb24gOiBIQVNfU1RESU8KKwlEZWZpbmUgdG8gMSBpZiB0aGUgcGxhdGZvcm0gaGFzIHN0ZGlvLmguCisqLworI2lmbmRlZiBIQVNfU1RESU8KKyNkZWZpbmUgSEFTX1NURElPIDEKKyNlbmRpZgorLyogQ29uZmlndXJhdGlvbiA6IEhBU19QUklOVEYKKwlEZWZpbmUgdG8gMSBpZiB0aGUgcGxhdGZvcm0gaGFzIHN0ZGlvLmggYW5kIGltcGxlbWVudHMgdGhlIHByaW50ZiBmdW5jdGlvbi4KKyovCisjaWZuZGVmIEhBU19QUklOVEYKKyNkZWZpbmUgSEFTX1BSSU5URiAwCisjZW5kaWYKKworI2luY2x1ZGUgInNjX3ByaW50LmgiCisjZGVmaW5lIGVlX3ByaW50ZiBzY19wcmludGYKKworLyogc3RhdGljIGlubGluZSBpbnQgZWVfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7fSAqLworCisvKiBDb25maWd1cmF0aW9uIDogQ09SRV9USUNLUworCURlZmluZSB0eXBlIG9mIHJldHVybiBmcm9tIHRoZSB0aW1pbmcgZnVuY3Rpb25zLgorICovCisvKiAjaW5jbHVkZSA8dGltZS5oPiAqLworLyogdHlwZWRlZiBjbG9ja190IENPUkVfVElDS1M7ICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZGVmaW5lIENPUkVUSU1FVFlQRSB1aW50MzJfdAordHlwZWRlZiB1aW50MzJfdCBDT1JFX1RJQ0tTOworCisvKiBEZWZpbml0aW9ucyA6IENPTVBJTEVSX1ZFUlNJT04sIENPTVBJTEVSX0ZMQUdTLCBNRU1fTE9DQVRJT04KKwlJbml0aWFsaXplIHRoZXNlIHN0cmluZ3MgcGVyIHBsYXRmb3JtCisqLworI2lmbmRlZiBDT01QSUxFUl9WRVJTSU9OCisgI2lmZGVmIF9fR05VQ19fCisgI2RlZmluZSBDT01QSUxFUl9WRVJTSU9OICJHQ0MiX19WRVJTSU9OX18KKyAjZWxzZQorICNkZWZpbmUgQ09NUElMRVJfVkVSU0lPTiAiUGxlYXNlIHB1dCBjb21waWxlciB2ZXJzaW9uIGhlcmUgKGUuZy4gZ2NjIDQuMSkiCisgI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgQ09NUElMRVJfRkxBR1MKKyAjZGVmaW5lIENPTVBJTEVSX0ZMQUdTIEZMQUdTX1NUUiAvKiAiUGxlYXNlIHB1dCBjb21waWxlciBmbGFncyBoZXJlIChlLmcuIC1vMykiICovCisjZW5kaWYKKyNpZm5kZWYgTUVNX0xPQ0FUSU9OCisgLyogI2RlZmluZSBNRU1fTE9DQVRJT04gIlNUQUNLIiAqLworICNkZWZpbmUgTUVNX0xPQ0FUSU9OICJTVEFUSUMiCisjZW5kaWYKKworLyogRGF0YSBUeXBlcyA6CisJVG8gYXZvaWQgY29tcGlsZXIgaXNzdWVzLCBkZWZpbmUgdGhlIGRhdGEgdHlwZXMgdGhhdCBuZWVkIG90IGJlIHVzZWQgZm9yIDhiLCAxNmIgYW5kIDMyYiBpbiA8Y29yZV9wb3J0bWUuaD4uCisKKwkqSW1wcnRhbnQqIDoKKwllZV9wdHJfaW50IG5lZWRzIHRvIGJlIHRoZSBkYXRhIHR5cGUgdXNlZCB0byBob2xkIHBvaW50ZXJzLCBvdGhlcndpc2UgY29yZW1hcmsgbWF5IGZhaWwhISEKKyovCit0eXBlZGVmIGludDE2X3QgZWVfczE2OwordHlwZWRlZiB1aW50MTZfdCBlZV91MTY7Cit0eXBlZGVmIGludDMyX3QgZWVfczMyOwordHlwZWRlZiBmbG9hdCBlZV9mMzI7Cit0eXBlZGVmIHVpbnQ4X3QgZWVfdTg7Cit0eXBlZGVmIHVpbnQzMl90IGVlX3UzMjsKK3R5cGVkZWYgdWludHB0cl90IGVlX3B0cl9pbnQ7Cit0eXBlZGVmIHNpemVfdCBlZV9zaXplX3Q7CisvKiBhbGlnbl9tZW0gOgorCVRoaXMgbWFjcm8gaXMgdXNlZCB0byBhbGlnbiBhbiBvZmZzZXQgdG8gcG9pbnQgdG8gYSAzMmIgdmFsdWUuIEl0IGlzIHVzZWQgaW4gdGhlIE1hdHJpeCBhbGdvcml0aG0gdG8gaW5pdGlhbGl6ZSB0aGUgaW5wdXQgbWVtb3J5IGJsb2Nrcy4KKyovCisjZGVmaW5lIGFsaWduX21lbSh4KSAodm9pZCAqKSg0ICsgKCgoZWVfcHRyX2ludCkoeCkgLSAxKSAmIH4zKSkKKworLyogQ29uZmlndXJhdGlvbiA6IFNFRURfTUVUSE9ECisJRGVmaW5lcyBtZXRob2QgdG8gZ2V0IHNlZWQgdmFsdWVzIHRoYXQgY2Fubm90IGJlIGNvbXB1dGVkIGF0IGNvbXBpbGUgdGltZS4KKworCVZhbGlkIHZhbHVlcyA6CisJU0VFRF9BUkcgLSBmcm9tIGNvbW1hbmQgbGluZS4KKwlTRUVEX0ZVTkMgLSBmcm9tIGEgc3lzdGVtIGZ1bmN0aW9uLgorCVNFRURfVk9MQVRJTEUgLSBmcm9tIHZvbGF0aWxlIHZhcmlhYmxlcy4KKyovCisjaWZuZGVmIFNFRURfTUVUSE9ECisjZGVmaW5lIFNFRURfTUVUSE9EIFNFRURfVk9MQVRJTEUKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIDogTUVNX01FVEhPRAorCURlZmluZXMgbWV0aG9kIHRvIGdldCBhIGJsb2NrIG9mIG1lbXJ5LgorCisJVmFsaWQgdmFsdWVzIDoKKwlNRU1fTUFMTE9DIC0gZm9yIHBsYXRmb3JtcyB0aGF0IGltcGxlbWVudCBtYWxsb2MgYW5kIGhhdmUgbWFsbG9jLmguCisJTUVNX1NUQVRJQyAtIHRvIHVzZSBhIHN0YXRpYyBtZW1vcnkgYXJyYXkuCisJTUVNX1NUQUNLIC0gdG8gYWxsb2NhdGUgdGhlIGRhdGEgYmxvY2sgb24gdGhlIHN0YWNrIChOWUkpLgorKi8KKyNpZm5kZWYgTUVNX01FVEhPRAorLyogI2RlZmluZSBNRU1fTUVUSE9EIE1FTV9TVEFDSyAqLworI2RlZmluZSBNRU1fTUVUSE9EIE1FTV9TVEFUSUMKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIDogTVVMVElUSFJFQUQKKwlEZWZpbmUgZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbgorCisJVmFsaWQgdmFsdWVzIDoKKwkxIC0gb25seSBvbmUgY29udGV4dCAoZGVmYXVsdCkuCisJTj4xIC0gd2lsbCBleGVjdXRlIE4gY29waWVzIGluIHBhcmFsbGVsLgorCisJTm90ZSA6CisJSWYgdGhpcyBmbGFnIGlzIGRlZmluZWQgdG8gbW9yZSB0aGVuIDEsIGFuIGltcGxlbWVudGF0aW9uIGZvciBsYXVuY2hpbmcgcGFyYWxsZWwgY29udGV4dHMgbXVzdCBiZSBkZWZpbmVkLgorCisJVHdvIHNhbXBsZSBpbXBsZW1lbnRhdGlvbnMgYXJlIHByb3ZpZGVkLiBVc2UgPFVTRV9QVEhSRUFEPiBvciA8VVNFX0ZPUks+IHRvIGVuYWJsZSB0aGVtLgorCisJSXQgaXMgdmFsaWQgdG8gaGF2ZSBhIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBvZiA8Y29yZV9zdGFydF9wYXJhbGxlbD4gYW5kIDxjb3JlX2VuZF9wYXJhbGxlbD4gaW4gPGNvcmVfcG9ydG1lLmM+LAorCXRvIGZpdCBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLgorKi8KKyNpZm5kZWYgTVVMVElUSFJFQUQKKyNkZWZpbmUgTVVMVElUSFJFQUQgMQorI2RlZmluZSBVU0VfUFRIUkVBRCAwCisjZGVmaW5lIFVTRV9GT1JLIDAKKyNkZWZpbmUgVVNFX1NPQ0tFVCAwCisjZW5kaWYKKworLyogQ29uZmlndXJhdGlvbiA6IE1BSU5fSEFTX05PQVJHQworCU5lZWRlZCBpZiBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IGdldHRpbmcgYXJndW1lbnRzIHRvIG1haW4uCisKKwlWYWxpZCB2YWx1ZXMgOgorCTAgLSBhcmdjL2FyZ3YgdG8gbWFpbiBpcyBzdXBwb3J0ZWQKKwkxIC0gYXJnYy9hcmd2IHRvIG1haW4gaXMgbm90IHN1cHBvcnRlZAorCisJTm90ZSA6CisJVGhpcyBmbGFnIG9ubHkgbWF0dGVycyBpZiBNVUxUSVRIUkVBRCBoYXMgYmVlbiBkZWZpbmVkIHRvIGEgdmFsdWUgZ3JlYXRlciB0aGVuIDEuCisqLworI2lmbmRlZiBNQUlOX0hBU19OT0FSR0MKKyNkZWZpbmUgTUFJTl9IQVNfTk9BUkdDIDEKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIDogTUFJTl9IQVNfTk9SRVRVUk4KKwlOZWVkZWQgaWYgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCByZXR1cm5pbmcgYSB2YWx1ZSBmcm9tIG1haW4uCisKKwlWYWxpZCB2YWx1ZXMgOgorCTAgLSBtYWluIHJldHVybnMgYW4gaW50LCBhbmQgcmV0dXJuIHZhbHVlIHdpbGwgYmUgMC4KKwkxIC0gcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCByZXR1cm5pbmcgYSB2YWx1ZSBmcm9tIG1haW4KKyovCisjaWZuZGVmIE1BSU5fSEFTX05PUkVUVVJOCisjZGVmaW5lIE1BSU5fSEFTX05PUkVUVVJOIDAKKyNlbmRpZgorCisvKiBWYXJpYWJsZSA6IGRlZmF1bHRfbnVtX2NvbnRleHRzCisJTm90IHVzZWQgZm9yIHRoaXMgc2ltcGxlIHBvcnQsIG11c3QgY2ludGFpbiB0aGUgdmFsdWUgMS4KKyovCitleHRlcm4gZWVfdTMyIGRlZmF1bHRfbnVtX2NvbnRleHRzOworCit0eXBlZGVmIHN0cnVjdCBDT1JFX1BPUlRBQkxFX1MgeworCWVlX3U4CXBvcnRhYmxlX2lkOworfSBjb3JlX3BvcnRhYmxlOworCisvKiB0YXJnZXQgc3BlY2lmaWMgaW5pdC9maW5pICovCit2b2lkIHBvcnRhYmxlX2luaXQoY29yZV9wb3J0YWJsZSAqcCwgaW50ICphcmdjLCBjaGFyICphcmd2W10pOwordm9pZCBwb3J0YWJsZV9maW5pKGNvcmVfcG9ydGFibGUgKnApOworCisjaWYgIWRlZmluZWQoUFJPRklMRV9SVU4pICYmICFkZWZpbmVkKFBFUkZPUk1BTkNFX1JVTikgJiYgIWRlZmluZWQoVkFMSURBVElPTl9SVU4pCisjaWYgKFRPVEFMX0RBVEFfU0laRT09MTIwMCkKKyNkZWZpbmUgUFJPRklMRV9SVU4gMQorI2VsaWYgKFRPVEFMX0RBVEFfU0laRT09MjAwMCkKKyNkZWZpbmUgUEVSRk9STUFOQ0VfUlVOIDEKKyNlbHNlCisjZGVmaW5lIFZBTElEQVRJT05fUlVOIDEKKyNlbmRpZgorI2VuZGlmCisKK3R5cGVkZWYgZWVfczE2IE1BVERBVDsKK3R5cGVkZWYgZWVfczMyIE1BVFJFUzsKKworCitlZV91MTYgY3JjdTgoZWVfdTggZGF0YSwgZWVfdTE2IGNyYyApIF9fYXR0cmlidXRlX18gKChob3QpKTsKK2VlX3UxNiBjcmN1MTYoZWVfdTE2IG5ld3ZhbCwgZWVfdTE2IGNyYykgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOworZWVfdTE2IGNyY3UzMihlZV91MzIgbmV3dmFsLCBlZV91MTYgY3JjKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7CitlZV91MTYgY3JjMTYoZWVfczE2IG5ld3ZhbCwgZWVfdTE2IGNyYykgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOworZWVfczE2IG1hdHJpeF9zdW0oZWVfdTMyIE4sIE1BVFJFUyAqQywgTUFUREFUIGNsaXB2YWwpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X211bF9jb25zdChlZV91MzIgTiwgTUFUUkVTICpDLCBNQVREQVQgKkEsIE1BVERBVCB2YWwpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X211bF92ZWN0KGVlX3UzMiBOLCBNQVRSRVMgKkMsIE1BVERBVCAqQSwgTUFUREFUICpCKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7Cit2b2lkIG1hdHJpeF9tdWxfbWF0cml4KGVlX3UzMiBOLCBNQVRSRVMgKkMsIE1BVERBVCAqQSwgTUFUREFUICpCKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7Cit2b2lkIG1hdHJpeF9tdWxfbWF0cml4X2JpdGV4dHJhY3QoZWVfdTMyIE4sIE1BVFJFUyAqQywgTUFUREFUICpBLCBNQVREQVQgKkIpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X2FkZF9jb25zdChlZV91MzIgTiwgTUFUREFUICpBLCBNQVREQVQgdmFsKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7CisKKyNlbmRpZiAvKiBDT1JFX1BPUlRNRV9IICovCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTY0ODkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9NYWtlZmlsZQpAQCAtMCwwICsxLDE2IEBACitzcmNfZGlyIDo9ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisKK0FERF9GTEFHUyAgIDo9IC1mbHRvCitBRERfQ0ZMQUdTICA6PSAtRFNFTEZfVElNRUQ9MSAtRFRJTUU9MQorCitjX3NyYyA6PSBzY19wcmludC5jIGRocnlfMS5jIGRocnlfMi5jCisKK2luY2x1ZGUgJChpbmNfZGlyKS9jb21tb24ubWsKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5lbGYgJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5oZXggJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5kdW1wCisKK2xvZ19yZXF1ZXN0ZWRfdGd0OgorCUBlY2hvIGRocnlzdG9uZTIxLmhleD4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisKK2NsZWFuOgorCSQoUk0pICQoY19vYmpzKSAkKGFzbV9vYmpzKSAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmVsZiAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmhleCAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmR1bXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5LmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMDA1OQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnkuaApAQCAtMCwwICsxLDQ0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgVGhlIEJZVEUgVU5JWCBCZW5jaG1hcmtzIC0gUmVsZWFzZSAzCisgKiAgICAgICAgICBNb2R1bGU6IGRocnkuaCAgIFNJRDogMy40IDUvMTUvOTEgMTk6MzA6MjEKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBjb21tZW50cywgc3VnZ2VzdGlvbnMgc2hvdWxkIGJlIHNlbnQgdG86CisgKgorICoJQmVuIFNtaXRoLCBSaWNrIEdyZWhhbiBvciBUb20gWWFnZXIKKyAqCWJlbkBieXRlcGIuYnl0ZS5jb20gICByaWNrX2dAYnl0ZXBiLmJ5dGUuY29tICAgdHlhZ2VyQGJ5dGVwYi5ieXRlLmNvbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIE1vZGlmaWNhdGlvbiBMb2c6CisgKiAgYWRkYXB0ZWQgZnJvbToKKyAqCisgKgorICogICAgICAgICAgICAgICAgICAgIkRIUllTVE9ORSIgQmVuY2htYXJrIFByb2dyYW0KKyAqICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIFZlcnNpb246ICAgIEMsIFZlcnNpb24gMi4xCisgKgorICogIEZpbGU6ICAgICAgIGRocnkuaCAocGFydCAxIG9mIDMpCisgKgorICogIERhdGU6ICAgICAgIE1heSAyNSwgMTk4OAorICoKKyAqICBBdXRob3I6ICAgICBSZWluaG9sZCBQLiBXZWlja2VyCisgKiAgICAgICAgICAgICAgICAgICAgICBTaWVtZW5zIEFHLCBBVVQgRSA1MQorICogICAgICAgICAgICAgICAgICAgICAgUG9zdGZhY2ggMzIyMAorICogICAgICAgICAgICAgICAgICAgICAgODUyMCBFcmxhbmdlbgorICogICAgICAgICAgICAgICAgICAgICAgR2VybWFueSAoV2VzdCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhvbmU6ICBbKzQ5XS05MTMxLTctMjAzMzAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOC0xNyBDZW50cmFsIEV1cm9wZWFuIFRpbWUpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZW5ldDogLi4hbWN2YXghdW5pZG8hZXN0ZXZheCF3ZWlja2VyCisgKgorICogICAgICAgICAgICAgIE9yaWdpbmFsIFZlcnNpb24gKGluIEFkYSkgcHVibGlzaGVkIGluCisgKiAgICAgICAgICAgICAgIkNvbW11bmljYXRpb25zIG9mIHRoZSBBQ00iIHZvbC4gMjcuLCBuby4gMTAgKE9jdC4gMTk4NCksCisgKiAgICAgICAgICAgICAgcHAuIDEwMTMgLSAxMDMwLCB0b2dldGhlciB3aXRoIHRoZSBzdGF0aXN0aWNzCisgKiAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIGRpc3RyaWJ1dGlvbiBvZiBzdGF0ZW1lbnRzIGV0Yy4gaXMgYmFzZWQuCisgKgorICogICAgICAgICAgICAgIEluIHRoaXMgQyB2ZXJzaW9uLCB0aGUgZm9sbG93aW5nIEMgbGlicmFyeSBmdW5jdGlvbnMgYXJlIHVzZWQ6CisgKiAgICAgICAgICAgICAgLSBzdHJjcHksIHN0cmNtcCAoaW5zaWRlIHRoZSBtZWFzdXJlbWVudCBsb29wKQorICogICAgICAgICAgICAgIC0gcHJpbnRmLCBzY2FuZiAob3V0c2lkZSB0aGUgbWVhc3VyZW1lbnQgbG9vcCkKKyAqICAgICAgICAgICAgICBJbiBhZGRpdGlvbiwgQmVya2VsZXkgVU5JWCBzeXN0ZW0gY2FsbHMgInRpbWVzICgpIiBvciAidGltZSAoKSIKKyAqICAgICAgICAgICAgICBhcmUgdXNlZCBmb3IgZXhlY3V0aW9uIHRpbWUgbWVhc3VyZW1lbnQuIEZvciBtZWFzdXJlbWVudHMKKyAqICAgICAgICAgICAgICBvbiBvdGhlciBzeXN0ZW1zLCB0aGVzZSBjYWxscyBoYXZlIHRvIGJlIGNoYW5nZWQuCisgKgorICogIENvbGxlY3Rpb24gb2YgUmVzdWx0czoKKyAqICAgICAgICAgICAgICBSZWluaG9sZCBXZWlja2VyIChhZGRyZXNzIHNlZSBhYm92ZSkgYW5kCisgKgorICogICAgICAgICAgICAgIFJpY2sgUmljaGFyZHNvbgorICogICAgICAgICAgICAgIFBDIFJlc2VhcmNoLiBJbmMuCisgKiAgICAgICAgICAgICAgOTQgQXBwbGUgT3JjaGFyZCBEcml2ZQorICogICAgICAgICAgICAgIFRpbnRvbiBGYWxscywgTkogMDc3MjQKKyAqICAgICAgICAgICAgICAgICAgICAgIFBob25lOiAgKDIwMSkgODM0LTEzNzggKDktMTcgRVNUKQorICogICAgICAgICAgICAgICAgICAgICAgVXNlbmV0OiAuLi4hc2Vpc21vIXV1bmV0IXBjcmF0IXJpY2sKKyAqCisgKiAgICAgIFBsZWFzZSBzZW5kIHJlc3VsdHMgdG8gUmljayBSaWNoYXJkc29uIGFuZC9vciBSZWluaG9sZCBXZWlja2VyLgorICogICAgICBDb21wbGV0ZSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgZ2l2ZW4gb24gaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHVzZWQuCisgKiAgICAgIEhhcmR3YXJlIGluZm9ybWF0aW9uIGluY2x1ZGVzOiBNYWNoaW5lIHR5cGUsIENQVSwgdHlwZSBhbmQgc2l6ZQorICogICAgICBvZiBjYWNoZXM7IGZvciBtaWNyb3Byb2Nlc3NvcnM6IGNsb2NrIGZyZXF1ZW5jeSwgbWVtb3J5IHNwZWVkCisgKiAgICAgIChudW1iZXIgb2Ygd2FpdCBzdGF0ZXMpLgorICogICAgICBTb2Z0d2FyZSBpbmZvcm1hdGlvbiBpbmNsdWRlczogQ29tcGlsZXIgKGFuZCBydW50aW1lIGxpYnJhcnkpCisgKiAgICAgIG1hbnVmYWN0dXJlciBhbmQgdmVyc2lvbiwgY29tcGlsYXRpb24gc3dpdGNoZXMsIE9TIHZlcnNpb24uCisgKiAgICAgIFRoZSBPcGVyYXRpbmcgU3lzdGVtIHZlcnNpb24gbWF5IGdpdmUgYW4gaW5kaWNhdGlvbiBhYm91dCB0aGUKKyAqICAgICAgY29tcGlsZXI7IERocnlzdG9uZSBpdHNlbGYgcGVyZm9ybXMgbm8gT1MgY2FsbHMgaW4gdGhlIG1lYXN1cmVtZW50IGxvb3AuCisgKgorICogICAgICBUaGUgY29tcGxldGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGUgcHJvZ3JhbSBzaG91bGQgYmUgbWFpbGVkCisgKiAgICAgIHN1Y2ggdGhhdCBhdCBsZWFzdCBzb21lIGNoZWNrcyBmb3IgY29ycmVjdG5lc3MgY2FuIGJlIG1hZGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBIaXN0b3J5OiAgICBUaGlzIHZlcnNpb24gQy8yLjEgaGFzIGJlZW4gbWFkZSBmb3IgdHdvIHJlYXNvbnM6CisgKgorICogICAgICAgICAgICAgIDEpIFRoZXJlIGlzIGFuIG9idmlvdXMgbmVlZCBmb3IgYSBjb21tb24gQyB2ZXJzaW9uIG9mCisgKiAgICAgICAgICAgICAgRGhyeXN0b25lLCBzaW5jZSBDIGlzIGF0IHByZXNlbnQgdGhlIG1vc3QgcG9wdWxhciBzeXN0ZW0KKyAqICAgICAgICAgICAgICBwcm9ncmFtbWluZyBsYW5ndWFnZSBmb3IgdGhlIGNsYXNzIG9mIHByb2Nlc3NvcnMKKyAqICAgICAgICAgICAgICAobWljcm9jb21wdXRlcnMsIG1pbmljb21wdXRlcnMpIHdoZXJlIERocnlzdG9uZSBpcyB1c2VkIG1vc3QuCisgKiAgICAgICAgICAgICAgVGhlcmUgc2hvdWxkIGJlLCBhcyBmYXIgYXMgcG9zc2libGUsIG9ubHkgb25lIEMgdmVyc2lvbiBvZgorICogICAgICAgICAgICAgIERocnlzdG9uZSBzdWNoIHRoYXQgcmVzdWx0cyBjYW4gYmUgY29tcGFyZWQgd2l0aG91dAorICogICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4gSW4gdGhlIHBhc3QsIHRoZSBDIHZlcnNpb25zIGRpc3RyaWJ1dGVkCisgKiAgICAgICAgICAgICAgYnkgUmljayBSaWNoYXJkc29uIChWZXJzaW9uIDEuMSkgYW5kIGJ5IFJlaW5ob2xkIFdlaWNrZXIKKyAqICAgICAgICAgICAgICBoYWQgc21hbGwgKHRob3VnaCBub3Qgc2lnbmlmaWNhbnQpIGRpZmZlcmVuY2VzLgorICoKKyAqICAgICAgICAgICAgICAyKSBBcyBmYXIgYXMgaXQgaXMgcG9zc2libGUgd2l0aG91dCBjaGFuZ2VzIHRvIHRoZSBEaHJ5c3RvbmUKKyAqICAgICAgICAgICAgICBzdGF0aXN0aWNzLCBvcHRpbWl6aW5nIGNvbXBpbGVycyBzaG91bGQgYmUgcHJldmVudGVkIGZyb20KKyAqICAgICAgICAgICAgICByZW1vdmluZyBzaWduaWZpY2FudCBzdGF0ZW1lbnRzLgorICoKKyAqICAgICAgICAgICAgICBUaGlzIEMgdmVyc2lvbiBoYXMgYmVlbiBkZXZlbG9wZWQgaW4gY29vcGVyYXRpb24gd2l0aAorICogICAgICAgICAgICAgIFJpY2sgUmljaGFyZHNvbiAoVGludG9uIEZhbGxzLCBOSiksIGl0IGluY29ycG9yYXRlcyBtYW55CisgKiAgICAgICAgICAgICAgaWRlYXMgZnJvbSB0aGUgIlZlcnNpb24gMS4xIiBkaXN0cmlidXRlZCBwcmV2aW91c2x5IGJ5CisgKiAgICAgICAgICAgICAgaGltIG92ZXIgdGhlIFVOSVggbmV0d29yayBVc2VuZXQuCisgKiAgICAgICAgICAgICAgSSBhbHNvIHRoYW5rIENoYWltIEJlbmVkZWxhYyAoTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciksCisgKiAgICAgICAgICAgICAgRGF2aWQgRGl0emVsIChTVU4pLCBFYXJsIEtpbGxpYW4gYW5kIEpvaG4gTWFzaGV5IChNSVBTKSwKKyAqICAgICAgICAgICAgICBBbGFuIFNtaXRoIGFuZCBSYWZhZWwgU2FhdmVkcmEtQmFycmVyYSAoVUMgYXQgQmVya2VsZXkpCisgKiAgICAgICAgICAgICAgZm9yIHRoZWlyIGhlbHAgd2l0aCBjb21tZW50cyBvbiBlYXJsaWVyIHZlcnNpb25zIG9mIHRoZQorICogICAgICAgICAgICAgIGJlbmNobWFyay4KKyAqCisgKiAgQ2hhbmdlczogICAgSW4gdGhlIGluaXRpYWxpemF0aW9uIHBhcnQsIHRoaXMgdmVyc2lvbiBmb2xsb3dzIG1vc3RseQorICogICAgICAgICAgICAgIFJpY2sgUmljaGFyZHNvbidzIHZlcnNpb24gZGlzdHJpYnV0ZWQgdmlhIFVzZW5ldCwgbm90IHRoZQorICogICAgICAgICAgICAgIHZlcnNpb24gZGlzdHJpYnV0ZWQgZWFybGllciB2aWEgZmxvcHB5IGRpc2sgYnkgUmVpbmhvbGQgV2VpY2tlci4KKyAqICAgICAgICAgICAgICBBcyBhIGNvbmNlc3Npb24gdG8gb2xkZXIgY29tcGlsZXJzLCBuYW1lcyBoYXZlIGJlZW4gbWFkZQorICogICAgICAgICAgICAgIHVuaXF1ZSB3aXRoaW4gdGhlIGZpcnN0IDggY2hhcmFjdGVycy4KKyAqICAgICAgICAgICAgICBJbnNpZGUgdGhlIG1lYXN1cmVtZW50IGxvb3AsIHRoaXMgdmVyc2lvbiBmb2xsb3dzIHRoZQorICogICAgICAgICAgICAgIHZlcnNpb24gcHJldmlvdXNseSBkaXN0cmlidXRlZCBieSBSZWluaG9sZCBXZWlja2VyLgorICoKKyAqICAgICAgICAgICAgICBBdCBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgYmVuY2htYXJrLCBjb2RlIGhhcyBiZWVuIGFkZGVkLAorICogICAgICAgICAgICAgIGJ1dCB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IGxvb3Agb25seSBpbiBicmFuY2hlcyB0aGF0CisgKiAgICAgICAgICAgICAgYXJlIG5vdCBleGVjdXRlZC4gVGhlIGludGVudGlvbiBpcyB0aGF0IG9wdGltaXppbmcgY29tcGlsZXJzCisgKiAgICAgICAgICAgICAgc2hvdWxkIGJlIHByZXZlbnRlZCBmcm9tIG1vdmluZyBjb2RlIG91dCBvZiB0aGUgbWVhc3VyZW1lbnQKKyAqICAgICAgICAgICAgICBsb29wLCBvciBmcm9tIHJlbW92aW5nIGNvZGUgYWx0b2dldGhlci4gU2luY2UgdGhlIHN0YXRlbWVudHMKKyAqICAgICAgICAgICAgICB0aGF0IGFyZSBleGVjdXRlZCB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IGxvb3AgaGF2ZSBOT1QgYmVlbgorICogICAgICAgICAgICAgIGNoYW5nZWQsIHRoZSBudW1iZXJzIGRlZmluaW5nIHRoZSAiRGhyeXN0b25lIGRpc3RyaWJ1dGlvbiIKKyAqICAgICAgICAgICAgICAoZGlzdHJpYnV0aW9uIG9mIHN0YXRlbWVudHMsIG9wZXJhbmQgdHlwZXMgYW5kIGxvY2FsaXR5KQorICogICAgICAgICAgICAgIHN0aWxsIGhvbGQuIEV4Y2VwdCBmb3Igc29waGlzdGljYXRlZCBvcHRpbWl6aW5nIGNvbXBpbGVycywKKyAqICAgICAgICAgICAgICBleGVjdXRpb24gdGltZXMgZm9yIHRoaXMgdmVyc2lvbiBzaG91bGQgYmUgdGhlIHNhbWUgYXMKKyAqICAgICAgICAgICAgICBmb3IgcHJldmlvdXMgdmVyc2lvbnMuCisgKgorICogICAgICAgICAgICAgIFNpbmNlIGl0IGhhcyBwcm92ZW4gZGlmZmljdWx0IHRvIHN1YnRyYWN0IHRoZSB0aW1lIGZvciB0aGUKKyAqICAgICAgICAgICAgICBtZWFzdXJlbWVudCBsb29wIG92ZXJoZWFkIGluIGEgY29ycmVjdCB3YXksIHRoZSBsb29wIGNoZWNrCisgKiAgICAgICAgICAgICAgaGFzIGJlZW4gbWFkZSBhIHBhcnQgb2YgdGhlIGJlbmNobWFyay4gVGhpcyBkb2VzIGhhdmUKKyAqICAgICAgICAgICAgICBhbiBpbXBhY3QgLSB0aG91Z2ggYSB2ZXJ5IG1pbm9yIG9uZSAtIG9uIHRoZSBkaXN0cmlidXRpb24KKyAqICAgICAgICAgICAgICBzdGF0aXN0aWNzIHdoaWNoIGhhdmUgYmVlbiB1cGRhdGVkIGZvciB0aGlzIHZlcnNpb24uCisgKgorICogICAgICAgICAgICAgIEFsbCBjaGFuZ2VzIHdpdGhpbiB0aGUgbWVhc3VyZW1lbnQgbG9vcCBhcmUgZGVzY3JpYmVkCisgKiAgICAgICAgICAgICAgYW5kIGRpc2N1c3NlZCBpbiB0aGUgY29tcGFuaW9uIHBhcGVyICJSYXRpb25hbGUgZm9yCisgKiAgICAgICAgICAgICAgRGhyeXN0b25lIHZlcnNpb24gMiIuCisgKgorICogICAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhlIHNlbGYtaW1wb3NlZCBsaW1pdGF0aW9uIHRoYXQgdGhlIG9yZGVyIGFuZAorICogICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZXhlY3V0ZWQgc3RhdGVtZW50cyBzaG91bGQgbm90IGJlCisgKiAgICAgICAgICAgICAgY2hhbmdlZCwgdGhlcmUgYXJlIHN0aWxsIGNhc2VzIHdoZXJlIG9wdGltaXppbmcgY29tcGlsZXJzCisgKiAgICAgICAgICAgICAgbWF5IG5vdCBnZW5lcmF0ZSBjb2RlIGZvciBzb21lIHN0YXRlbWVudHMuIFRvIGEgY2VydGFpbgorICogICAgICAgICAgICAgIGRlZ3JlZSwgdGhpcyBpcyB1bmF2b2lkYWJsZSBmb3Igc21hbGwgc3ludGhldGljIGJlbmNobWFya3MuCisgKiAgICAgICAgICAgICAgVXNlcnMgb2YgdGhlIGJlbmNobWFyayBhcmUgYWR2aXNlZCB0byBjaGVjayBjb2RlIGxpc3RpbmdzCisgKiAgICAgICAgICAgICAgd2hldGhlciBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgYWxsIHN0YXRlbWVudHMgb2YgRGhyeXN0b25lLgorICoKKyAqICAgICAgICAgICAgICBWZXJzaW9uIDIuMSBpcyBpZGVudGljYWwgdG8gdmVyc2lvbiAyLjAgZGlzdHJpYnV0ZWQgdmlhCisgKiAgICAgICAgICAgICAgdGhlIFVOSVggbmV0d29yayBVc2VuZXQgaW4gTWFyY2ggMTk4OCBleGNlcHQgdGhhdCBpdCBjb3JyZWN0cworICogICAgICAgICAgICAgIHNvbWUgbWlub3IgZGVmaWNpZW5jaWVzIHRoYXQgd2VyZSBmb3VuZCBieSB1c2VycyBvZiB2ZXJzaW9uIDIuMC4KKyAqICAgICAgICAgICAgICBUaGUgb25seSBjaGFuZ2Ugd2l0aGluIHRoZSBtZWFzdXJlbWVudCBsb29wIGlzIHRoYXQgYQorICogICAgICAgICAgICAgIG5vbi1leGVjdXRlZCAiZWxzZSIgcGFydCB3YXMgYWRkZWQgdG8gdGhlICJpZiIgc3RhdGVtZW50IGluCisgKiAgICAgICAgICAgICAgRnVuY18zLCBhbmQgYSBub24tZXhlY3V0ZWQgImVsc2UiIHBhcnQgcmVtb3ZlZCBmcm9tIFByb2NfMy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRGVmaW5lczogICAgIFRoZSBmb2xsb3dpbmcgIkRlZmluZXMiIGFyZSBwb3NzaWJsZToKKyAqICAgICAgICAgICAgICAtRFJFRz1yZWdpc3RlciAgICAgICAgICAoZGVmYXVsdDogTm90IGRlZmluZWQpCisgKiAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBhcHByb3hpbWF0aW9uIHRvIHdoYXQgYW4gYXZlcmFnZSBDIHByb2dyYW1tZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0IGRvLCB0aGUgInJlZ2lzdGVyIiBzdG9yYWdlIGNsYXNzIGlzIGFwcGxpZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIChpZiBlbmFibGVkIGJ5IC1EUkVHPXJlZ2lzdGVyKQorICogICAgICAgICAgICAgICAgICAgICAgLSBmb3IgbG9jYWwgdmFyaWFibGVzLCBpZiB0aGV5IGFyZSB1c2VkIChkeW5hbWljYWxseSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgZml2ZSBvciBtb3JlIHRpbWVzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIGZvciBwYXJhbWV0ZXJzIGlmIHRoZXkgYXJlIHVzZWQgKGR5bmFtaWNhbGx5KQorICogICAgICAgICAgICAgICAgICAgICAgICBzaXggb3IgbW9yZSB0aW1lcworICogICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGFuIG9wdGltYWwgInJlZ2lzdGVyIiBzdHJhdGVneSBpcworICogICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXItZGVwZW5kZW50LCBhbmQgdGhhdCAicmVnaXN0ZXIiIGRlY2xhcmF0aW9ucworICogICAgICAgICAgICAgICAgICAgICAgZG8gbm90IG5lY2Vzc2FyaWx5IGxlYWQgdG8gZmFzdGVyIGV4ZWN1dGlvbi4KKyAqICAgICAgICAgICAgICAtRE5PU1RSVUNUQVNTSUdOICAgICAgICAoZGVmYXVsdDogTm90IGRlZmluZWQpCisgKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmUgaWYgdGhlIEMgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydAorICogICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudCBvZiBzdHJ1Y3R1cmVzLgorICogICAgICAgICAgICAgIC1ETk9FTlVNUyAgICAgICAgICAgICAgIChkZWZhdWx0OiBOb3QgZGVmaW5lZCkKKyAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZSBpZiB0aGUgQyBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdGlvbiB0eXBlcy4KKyAqICAgICAgICAgICAgICAtRFRJTUVTICAgICAgICAgICAgICAgICAoZGVmYXVsdCkKKyAqICAgICAgICAgICAgICAtRFRJTUUKKyAqICAgICAgICAgICAgICAgICAgICAgIFRoZSAidGltZXMiIGZ1bmN0aW9uIG9mIFVOSVggKHJldHVybmluZyBwcm9jZXNzIHRpbWVzKQorICogICAgICAgICAgICAgICAgICAgICAgb3IgdGhlICJ0aW1lIiBmdW5jdGlvbiAocmV0dXJuaW5nIHdhbGxjbG9jayB0aW1lKQorICogICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZCBmb3IgbWVhc3VyZW1lbnQuCisgKiAgICAgICAgICAgICAgICAgICAgICBGb3Igc2luZ2xlIHVzZXIgbWFjaGluZXMsICJ0aW1lICgpIiBpcyBhZGVxdWF0ZS4gRm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBtdWx0aS11c2VyIG1hY2hpbmVzIHdoZXJlIHlvdSBjYW5ub3QgZ2V0IHNpbmdsZS11c2VyCisgKiAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MsIHVzZSB0aGUgInRpbWVzICgpIiBmdW5jdGlvbi4gSWYgeW91IGhhdmUKKyAqICAgICAgICAgICAgICAgICAgICAgIG5laXRoZXIsIHVzZSBhIHN0b3B3YXRjaCBpbiB0aGUgZGVhZCBvZiBuaWdodC4KKyAqICAgICAgICAgICAgICAgICAgICAgICJwcmludGYicyBhcmUgcHJvdmlkZWQgbWFya2luZyB0aGUgcG9pbnRzICJTdGFydCBUaW1lciIKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCAiU3RvcCBUaW1lciIuIERPIE5PVCB1c2UgdGhlIFVOSVggInRpbWUoMSkiCisgKiAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCBhcyB0aGlzIHdpbGwgbWVhc3VyZSB0aGUgdG90YWwgdGltZSB0bworICogICAgICAgICAgICAgICAgICAgICAgcnVuIHRoaXMgcHJvZ3JhbSwgd2hpY2ggd2lsbCAoZXJyb25lb3VzbHkpIGluY2x1ZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSB0aW1lIHRvIGFsbG9jYXRlIHN0b3JhZ2UgKG1hbGxvYykgYW5kIHRvIHBlcmZvcm0KKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbml0aWFsaXphdGlvbi4KKyAqICAgICAgICAgICAgICAtREhaPW5ubgorICogICAgICAgICAgICAgICAgICAgICAgSW4gQmVya2VsZXkgVU5JWCwgdGhlIGZ1bmN0aW9uICJ0aW1lcyIgcmV0dXJucyBwcm9jZXNzCisgKiAgICAgICAgICAgICAgICAgICAgICB0aW1lIGluIDEvSFogc2Vjb25kcywgd2l0aCBIWiA9IDYwIGZvciBtb3N0IHN5c3RlbXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBDSEVDSyBZT1VSIFNZU1RFTSBERVNDUklQVElPTiBCRUZPUkUgWU9VIEpVU1QgQVBQTFkKKyAqICAgICAgICAgICAgICAgICAgICAgIEEgVkFMVUUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBDb21waWxhdGlvbiBtb2RlbCBhbmQgbWVhc3VyZW1lbnQgKElNUE9SVEFOVCk6CisgKgorICogIFRoaXMgQyB2ZXJzaW9uIG9mIERocnlzdG9uZSBjb25zaXN0cyBvZiB0aHJlZSBmaWxlczoKKyAqICAtIGRocnkuaCAodGhpcyBmaWxlLCBjb250YWluaW5nIGdsb2JhbCBkZWZpbml0aW9ucyBhbmQgY29tbWVudHMpCisgKiAgLSBkaHJ5XzEuYyAoY29udGFpbmluZyB0aGUgY29kZSBjb3JyZXNwb25kaW5nIHRvIEFkYSBwYWNrYWdlIFBhY2tfMSkKKyAqICAtIGRocnlfMi5jIChjb250YWluaW5nIHRoZSBjb2RlIGNvcnJlc3BvbmRpbmcgdG8gQWRhIHBhY2thZ2UgUGFja18yKQorICoKKyAqICBUaGUgZm9sbG93aW5nICJncm91bmQgcnVsZXMiIGFwcGx5IGZvciBtZWFzdXJlbWVudHM6CisgKiAgLSBTZXBhcmF0ZSBjb21waWxhdGlvbgorICogIC0gTm8gcHJvY2VkdXJlIG1lcmdpbmcKKyAqICAtIE90aGVyd2lzZSwgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBhcmUgYWxsb3dlZCBidXQgc2hvdWxkIGJlIGluZGljYXRlZAorICogIC0gRGVmYXVsdCByZXN1bHRzIGFyZSB0aG9zZSB3aXRob3V0IHJlZ2lzdGVyIGRlY2xhcmF0aW9ucworICogIFNlZSB0aGUgY29tcGFuaW9uIHBhcGVyICJSYXRpb25hbGUgZm9yIERocnlzdG9uZSBWZXJzaW9uIDIiIGZvciBhIG1vcmUKKyAqICBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIHRoZXNlIGdyb3VuZCBydWxlcy4KKyAqCisgKiAgRm9yIDE2LUJpdCBwcm9jZXNzb3JzIChlLmcuIDgwMTg2LCA4MDI4NiksIHRpbWVzIGZvciBhbGwgY29tcGlsYXRpb24KKyAqICBtb2RlbHMgKCJzbWFsbCIsICJtZWRpdW0iLCAibGFyZ2UiIGV0Yy4pIHNob3VsZCBiZSBnaXZlbiBpZiBwb3NzaWJsZSwKKyAqICB0b2dldGhlciB3aXRoIGEgZGVmaW5pdGlvbiBvZiB0aGVzZSBtb2RlbHMgZm9yIHRoZSBjb21waWxlciBzeXN0ZW0gdXNlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgRGhyeXN0b25lIChDIHZlcnNpb24pIHN0YXRpc3RpY3M6CisgKgorICogIFtDb21tZW50IGZyb20gdGhlIGZpcnN0IGRpc3RyaWJ1dGlvbiwgdXBkYXRlZCBmb3IgdmVyc2lvbiAyLgorICogICBOb3RlIHRoYXQgYmVjYXVzZSBvZiBsYW5ndWFnZSBkaWZmZXJlbmNlcywgdGhlIG51bWJlcnMgYXJlIHNsaWdodGx5CisgKiAgIGRpZmZlcmVudCBmcm9tIHRoZSBBZGEgdmVyc2lvbi5dCisgKgorICogIFRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBjb250YWlucyBzdGF0ZW1lbnRzIG9mIGEgaGlnaCBsZXZlbCBwcm9ncmFtbWluZworICogIGxhbmd1YWdlIChoZXJlOiBDKSBpbiBhIGRpc3RyaWJ1dGlvbiBjb25zaWRlcmVkIHJlcHJlc2VudGF0aXZlOgorICoKKyAqICAgIGFzc2lnbm1lbnRzICAgICAgICAgICAgICAgICAgNTIgKDUxLjAgJSkKKyAqICAgIGNvbnRyb2wgc3RhdGVtZW50cyAgICAgICAgICAgMzMgKDMyLjQgJSkKKyAqICAgIHByb2NlZHVyZSwgZnVuY3Rpb24gY2FsbHMgICAgMTcgKDE2LjcgJSkKKyAqCisgKiAgMTAzIHN0YXRlbWVudHMgYXJlIGR5bmFtaWNhbGx5IGV4ZWN1dGVkLiBUaGUgcHJvZ3JhbSBpcyBiYWxhbmNlZCB3aXRoCisgKiAgcmVzcGVjdCB0byB0aGUgdGhyZWUgYXNwZWN0czoKKyAqCisgKiAgICAtIHN0YXRlbWVudCB0eXBlCisgKiAgICAtIG9wZXJhbmQgdHlwZQorICogICAgLSBvcGVyYW5kIGxvY2FsaXR5CisgKiAgICAgICAgIG9wZXJhbmQgZ2xvYmFsLCBsb2NhbCwgcGFyYW1ldGVyLCBvciBjb25zdGFudC4KKyAqCisgKiAgVGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRocmVlIGFzcGVjdHMgaXMgYmFsYW5jZWQgb25seSBhcHByb3hpbWF0ZWx5LgorICoKKyAqICAxLiBTdGF0ZW1lbnQgVHlwZToKKyAqICAtLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICBudW1iZXIKKyAqCisgKiAgICAgVjEgPSBWMiAgICAgICAgICAgICAgICAgICAgIDkKKyAqICAgICAgIChpbmNsLiBWMSA9IEYoLi4pCisgKiAgICAgViA9IENvbnN0YW50ICAgICAgICAgICAgICAgMTIKKyAqICAgICBBc3NpZ25tZW50LCAgICAgICAgICAgICAgICAgNworICogICAgICAgd2l0aCBhcnJheSBlbGVtZW50CisgKiAgICAgQXNzaWdubWVudCwgICAgICAgICAgICAgICAgIDYKKyAqICAgICAgIHdpdGggcmVjb3JkIGNvbXBvbmVudAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQgICAgICAgMzQKKyAqCisgKiAgICAgWCA9IFkgK3wtfCImJiJ8InwiIFogICAgICAgIDUKKyAqICAgICBYID0gWSArfC18Ij09IiBDb25zdGFudCAgICAgNgorICogICAgIFggPSBYICt8LSAxICAgICAgICAgICAgICAgICAzCisgKiAgICAgWCA9IFkgKnwvIFogICAgICAgICAgICAgICAgIDIKKyAqICAgICBYID0gRXhwcmVzc2lvbiwgICAgICAgICAgICAgMQorICogICAgICAgICAgIHR3byBvcGVyYXRvcnMKKyAqICAgICBYID0gRXhwcmVzc2lvbiwgICAgICAgICAgICAgMQorICogICAgICAgICAgIHRocmVlIG9wZXJhdG9ycworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTggICAgICAgMTgKKyAqCisgKiAgICAgaWYgLi4uLiAgICAgICAgICAgICAgICAgICAgMTQKKyAqICAgICAgIHdpdGggImVsc2UiICAgICAgNworICogICAgICAgd2l0aG91dCAiZWxzZSIgICA3CisgKiAgICAgICAgICAgZXhlY3V0ZWQgICAgICAgIDMKKyAqICAgICAgICAgICBub3QgZXhlY3V0ZWQgICAgNAorICogICAgIGZvciAuLi4gICAgICAgICAgICAgICAgICAgICA3ICB8ICBjb3VudGVkIGV2ZXJ5IHRpbWUKKyAqICAgICB3aGlsZSAuLi4gICAgICAgICAgICAgICAgICAgNCAgfCAgdGhlIGxvb3AgY29uZGl0aW9uCisgKiAgICAgZG8gLi4uIHdoaWxlICAgICAgICAgICAgICAgIDEgIHwgIGlzIGV2YWx1YXRlZAorICogICAgIHN3aXRjaCAuLi4gICAgICAgICAgICAgICAgICAxCisgKiAgICAgYnJlYWsgICAgICAgICAgICAgICAgICAgICAgIDEKKyAqICAgICBkZWNsYXJhdGlvbiB3aXRoICAgICAgICAgICAgMQorICogICAgICAgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0ICAgICAgIDM0CisgKgorICogICAgIFAgKC4uLikgIHByb2NlZHVyZSBjYWxsICAgIDExCisgKiAgICAgICB1c2VyIHByb2NlZHVyZSAgICAgIDEwCisgKiAgICAgICBsaWJyYXJ5IHByb2NlZHVyZSAgICAxCisgKiAgICAgWCA9IEYgKC4uLikKKyAqICAgICAgICAgICAgIGZ1bmN0aW9uICBjYWxsICAgICAgNgorICogICAgICAgdXNlciBmdW5jdGlvbiAgICAgICAgNQorICogICAgICAgbGlicmFyeSBmdW5jdGlvbiAgICAgMQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcgICAgICAgMTcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzCisgKgorICogICAgVGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaW4gcHJvY2VkdXJlIG9yIGZ1bmN0aW9uIGNhbGxzCisgKiAgICBpcyAxLjgyIChub3QgY291bnRpbmcgdGhlIGZ1bmN0aW9uIHZhbHVlcyBhcyBpbXBsaWNpdCBwYXJhbWV0ZXJzKS4KKyAqCisgKgorICogIDIuIE9wZXJhdG9ycworICogIC0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICBhcHByb3hpbWF0ZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlCisgKgorICogICAgQXJpdGhtZXRpYyAgICAgICAgICAgICAzMiAgICAgICAgICA1MC44CisgKgorICogICAgICAgKyAgICAgICAgICAgICAgICAgICAgIDIxICAgICAgICAgIDMzLjMKKyAqICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgNyAgICAgICAgICAxMS4xCisgKiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAgIDQuOAorICogICAgICAgLyAoaW50IGRpdikgICAgICAgICAgICAxICAgICAgICAgICAxLjYKKyAqCisgKiAgICBDb21wYXJpc29uICAgICAgICAgICAgIDI3ICAgICAgICAgICA0Mi44CisgKgorICogICAgICAgPT0gICAgICAgICAgICAgICAgICAgICA5ICAgICAgICAgICAxNC4zCisgKiAgICAgICAvPSAgICAgICAgICAgICAgICAgICAgIDQgICAgICAgICAgICA2LjMKKyAqICAgICAgID4gICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgIDEuNgorICogICAgICAgPCAgICAgICAgICAgICAgICAgICAgICAzICAgICAgICAgICAgNC44CisgKiAgICAgICA+PSAgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAxLjYKKyAqICAgICAgIDw9ICAgICAgICAgICAgICAgICAgICAgOSAgICAgICAgICAgMTQuMworICoKKyAqICAgIExvZ2ljICAgICAgICAgICAgICAgICAgIDQgICAgICAgICAgICA2LjMKKyAqCisgKiAgICAgICAmJiAoQU5ELVRIRU4pICAgICAgICAgIDEgICAgICAgICAgICAxLjYKKyAqICAgICAgIHwgIChPUikgICAgICAgICAgICAgICAgMSAgICAgICAgICAgIDEuNgorICogICAgICAgISAgKE5PVCkgICAgICAgICAgICAgICAyICAgICAgICAgICAgMy4yCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgICAgICAgICAtLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICA2MyAgICAgICAgICAxMDAuMQorICoKKyAqCisgKiAgMy4gT3BlcmFuZCBUeXBlIChjb3VudGVkIG9uY2UgcGVyIG9wZXJhbmQgcmVmZXJlbmNlKToKKyAqICAtLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgYXBwcm94aW1hdGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZQorICoKKyAqICAgICBJbnRlZ2VyICAgICAgICAgICAgICAgMTc1ICAgICAgICA3Mi4zICUKKyAqICAgICBDaGFyYWN0ZXIgICAgICAgICAgICAgIDQ1ICAgICAgICAxOC42ICUKKyAqICAgICBQb2ludGVyICAgICAgICAgICAgICAgIDEyICAgICAgICAgNS4wICUKKyAqICAgICBTdHJpbmczMCAgICAgICAgICAgICAgICA2ICAgICAgICAgMi41ICUKKyAqICAgICBBcnJheSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgMC44ICUKKyAqICAgICBSZWNvcmQgICAgICAgICAgICAgICAgICAyICAgICAgICAgMC44ICUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tICAgICAgIC0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQyICAgICAgIDEwMC4wICUKKyAqCisgKiAgV2hlbiB0aGVyZSBpcyBhbiBhY2Nlc3MgcGF0aCBsZWFkaW5nIHRvIHRoZSBmaW5hbCBvcGVyYW5kIChlLmcuIGEgcmVjb3JkCisgKiAgY29tcG9uZW50KSwgb25seSB0aGUgZmluYWwgZGF0YSB0eXBlIG9uIHRoZSBhY2Nlc3MgcGF0aCBpcyBjb3VudGVkLgorICoKKyAqCisgKiAgNC4gT3BlcmFuZCBMb2NhbGl0eToKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgIGFwcHJveGltYXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UKKyAqCisgKiAgICAgbG9jYWwgdmFyaWFibGUgICAgICAgICAgICAgIDExNCAgICAgICAgNDcuMSAlCisgKiAgICAgZ2xvYmFsIHZhcmlhYmxlICAgICAgICAgICAgICAyMiAgICAgICAgIDkuMSAlCisgKiAgICAgcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICA0NSAgICAgICAgMTguNiAlCisgKiAgICAgICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAyMyAgICAgICAgIDkuNSAlCisgKiAgICAgICAgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAyMiAgICAgICAgIDkuMSAlCisgKiAgICAgZnVuY3Rpb24gcmVzdWx0ICAgICAgICAgICAgICAgNiAgICAgICAgIDIuNSAlCisgKiAgICAgY29uc3RhbnQgICAgICAgICAgICAgICAgICAgICA1NSAgICAgICAgMjIuNyAlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSAgICAgICAtLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0MiAgICAgICAxMDAuMCAlCisgKgorICoKKyAqICBUaGUgcHJvZ3JhbSBkb2VzIG5vdCBjb21wdXRlIGFueXRoaW5nIG1lYW5pbmdmdWwsIGJ1dCBpdCBpcyBzeW50YWN0aWNhbGx5CisgKiAgYW5kIHNlbWFudGljYWxseSBjb3JyZWN0LiBBbGwgdmFyaWFibGVzIGhhdmUgYSB2YWx1ZSBhc3NpZ25lZCB0byB0aGVtCisgKiAgYmVmb3JlIHRoZXkgYXJlIHVzZWQgYXMgYSBzb3VyY2Ugb3BlcmFuZC4KKyAqCisgKiAgVGhlcmUgaGFzIGJlZW4gbm8gZXhwbGljaXQgZWZmb3J0IHRvIGFjY291bnQgZm9yIHRoZSBlZmZlY3RzIG9mIGEKKyAqICBjYWNoZSwgb3IgdG8gYmFsYW5jZSB0aGUgdXNlIG9mIGxvbmcgb3Igc2hvcnQgZGlzcGxhY2VtZW50cyBmb3IgY29kZSBvcgorICogIGRhdGEuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKworLyogQ29tcGlsZXIgYW5kIHN5c3RlbSBkZXBlbmRlbnQgZGVmaW5pdGlvbnM6ICovCisKKyNpZm5kZWYgVElNRQorI2RlZmluZSBUSU1FUworI2VuZGlmCisgICAgICAgICAgICAgICAgLyogVXNlIHRpbWVzKDIpIHRpbWUgZnVuY3Rpb24gdW5sZXNzICAgICovCisgICAgICAgICAgICAgICAgLyogZXhwbGljaXRseSBkZWZpbmVkIG90aGVyd2lzZSAgICAgICAgICovCisKKyNpZmRlZiBUSU1FUworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lcy5oPgorICAgICAgICAgICAgICAgIC8qIGZvciAidGltZXMiICovCisjZW5kaWYKKworI2RlZmluZSBNaWNfc2Vjc19QZXJfU2Vjb25kICAgICAxMDAwMDAwCisgICAgICAgICAgICAgICAgLyogQmVya2VsZXkgVU5JWCBDIHJldHVybnMgcHJvY2VzcyB0aW1lcyBpbiBzZWNvbmRzL0haICovCisKKyNpZmRlZiAgTk9TVFJVQ1RBU1NJR04KKyNkZWZpbmUgc3RydWN0YXNzaWduKGQsIHMpICAgICAgbWVtY3B5KCYoZCksICYocyksIHNpemVvZihkKSkKKyNlbHNlCisjZGVmaW5lIHN0cnVjdGFzc2lnbihkLCBzKSAgICAgIGQgPSBzCisjZW5kaWYKKworI2lmZGVmICBOT0VOVU0KKyNkZWZpbmUgSWRlbnRfMSAwCisjZGVmaW5lIElkZW50XzIgMQorI2RlZmluZSBJZGVudF8zIDIKKyNkZWZpbmUgSWRlbnRfNCAzCisjZGVmaW5lIElkZW50XzUgNAorICB0eXBlZGVmIGludCAgIEVudW1lcmF0aW9uOworI2Vsc2UKKyAgdHlwZWRlZiAgICAgICBlbnVtICAgIHtJZGVudF8xLCBJZGVudF8yLCBJZGVudF8zLCBJZGVudF80LCBJZGVudF81fQorICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uOworI2VuZGlmCisgICAgICAgIC8qIGZvciBib29sZWFuIGFuZCBlbnVtZXJhdGlvbiB0eXBlcyBpbiBBZGEsIFBhc2NhbCAqLworCisvKiBHZW5lcmFsIGRlZmluaXRpb25zOiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgICAgICAvKiBmb3Igc3RyY3B5LCBzdHJjbXAgKi8KKworI2RlZmluZSBOdWxsIDAKKyAgICAgICAgICAgICAgICAvKiBWYWx1ZSBvZiBhIE51bGwgcG9pbnRlciAqLworI2RlZmluZSB0cnVlICAxCisjZGVmaW5lIGZhbHNlIDAKKwordHlwZWRlZiBpbnQgICAgIE9uZV9UaGlydHk7Cit0eXBlZGVmIGludCAgICAgT25lX0ZpZnR5OwordHlwZWRlZiBjaGFyICAgIENhcGl0YWxfTGV0dGVyOwordHlwZWRlZiBpbnQgICAgIEJvb2xlYW47Cit0eXBlZGVmIGNoYXIgICAgU3RyXzMwIFszMV07Cit0eXBlZGVmIGludCAgICAgQXJyXzFfRGltIFs1MF07Cit0eXBlZGVmIGludCAgICAgQXJyXzJfRGltIFs1MF0gWzUwXTsKKwordHlwZWRlZiBzdHJ1Y3QgcmVjb3JkCisgICAgeworICAgIHN0cnVjdCByZWNvcmQgKlB0cl9Db21wOworICAgIEVudW1lcmF0aW9uICAgIERpc2NyOworICAgIHVuaW9uIHsKKyAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgRW51bWVyYXRpb24gRW51bV9Db21wOworICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgSW50X0NvbXA7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBTdHJfQ29tcCBbMzFdOworICAgICAgICAgICAgICAgICAgfSB2YXJfMTsKKyAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgRW51bWVyYXRpb24gRV9Db21wXzI7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBTdHJfMl9Db21wIFszMV07CisgICAgICAgICAgICAgICAgICB9IHZhcl8yOworICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBDaF8xX0NvbXA7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBDaF8yX0NvbXA7CisgICAgICAgICAgICAgICAgICB9IHZhcl8zOworICAgICAgICAgIH0gdmFyaWFudDsKKyAgICAgIH0gUmVjX1R5cGUsICpSZWNfUG9pbnRlcjsKKworI2luY2x1ZGUgInNjX3ByaW50LmgiCisjaW5jbHVkZSAiY3NyLmgiCisKKyMgZGVmaW5lIHByaW50ZiBzY19wcmludGYKKworI2RlZmluZSBIWiAxMDAwMDAwCitzdGF0aWMgbG9uZyB0aW1lKGxvbmcgKngpCit7CisgICAgcmV0dXJuIHJkY3ljbGUoKTsKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMS5jIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvZGhyeV8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyYWNiYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMS5jCkBAIC0wLDAgKzEsNDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBUaGUgQllURSBVTklYIEJlbmNobWFya3MgLSBSZWxlYXNlIDMKKyAqICAgICAgICAgIE1vZHVsZTogZGhyeV8xLmMgICBTSUQ6IDMuNCA1LzE1LzkxIDE5OjMwOjIxCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCdWcgcmVwb3J0cywgcGF0Y2hlcywgY29tbWVudHMsIHN1Z2dlc3Rpb25zIHNob3VsZCBiZSBzZW50IHRvOgorICoKKyAqCUJlbiBTbWl0aCwgUmljayBHcmVoYW4gb3IgVG9tIFlhZ2VyCisgKgliZW5AYnl0ZXBiLmJ5dGUuY29tICAgcmlja19nQGJ5dGVwYi5ieXRlLmNvbSAgIHR5YWdlckBieXRlcGIuYnl0ZS5jb20KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAqKiogV0FSTklORyAqKioqICBXaXRoIEJZVEUncyBtb2RpZmljYXRpb25zIGFwcGxpZWQsIHJlc3VsdHMgb2J0YWluZWQgd2l0aAorICogICAgICoqKioqKiogICAgICAgdGhpcyB2ZXJzaW9uIG9mIHRoZSBEaHJ5c3RvbmUgcHJvZ3JhbSBtYXkgbm90IGJlIGFwcGxpY2FibGUKKyAqICAgICAgICAgICAgICAgICAgIHRvIG90aGVyIHZlcnNpb25zLgorICoKKyAqICBNb2RpZmljYXRpb24gTG9nOgorICogIDEwLzIyLzk3IC0gY29kZSBjbGVhbnVwIHRvIHJlbW92ZSBBTlNJIEMgY29tcGlsZXIgd2FybmluZ3MKKyAqICAgICAgICAgICAgIEFuZHkgS2FobiA8a2FobkB6azMuZGVjLmNvbT4KKyAqCisgKiAgQWRhcHRlZCBmcm9tOgorICoKKyAqICAgICAgICAgICAgICAgICAgICJESFJZU1RPTkUiIEJlbmNobWFyayBQcm9ncmFtCisgKiAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBWZXJzaW9uOiAgICBDLCBWZXJzaW9uIDIuMQorICoKKyAqICBGaWxlOiAgICAgICBkaHJ5XzEuYyAocGFydCAyIG9mIDMpCisgKgorICogIERhdGU6ICAgICAgIE1heSAyNSwgMTk4OAorICoKKyAqICBBdXRob3I6ICAgICBSZWluaG9sZCBQLiBXZWlja2VyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NoYXIgU0NDU2lkW10gPSAiQCgjKSBAKCMpZGhyeV8xLmM6My40IC0tIDUvMTUvOTEgMTk6MzA6MjEiOworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJkaHJ5LmgiCisvLyNpbmNsdWRlICJ0aW1laXQuYyIKKwordW5zaWduZWQgbG9uZyBSdW5fSW5kZXg7CisvKgordm9pZCByZXBvcnQoKQoreworCWZwcmludGYoc3RkZXJyLCJDT1VOVHwlbGR8MXxscHNcbiIsIFJ1bl9JbmRleCk7CisJZXhpdCgwKTsKK30KKyovCisvKiBHbG9iYWwgVmFyaWFibGVzOiAqLworCitSZWNfUG9pbnRlciAgICAgUHRyX0dsb2IsCisgICAgICAgICAgICAgICAgTmV4dF9QdHJfR2xvYjsKK2ludCAgICAgICAgICAgICBJbnRfR2xvYjsKK0Jvb2xlYW4gICAgICAgICBCb29sX0dsb2I7CitjaGFyICAgICAgICAgICAgQ2hfMV9HbG9iLAorICAgICAgICAgICAgICAgIENoXzJfR2xvYjsKK2ludCAgICAgICAgICAgICBBcnJfMV9HbG9iIFs1MF07CitpbnQgICAgICAgICAgICAgQXJyXzJfR2xvYiBbNTBdIFs1MF07CisKK0VudW1lcmF0aW9uICAgICBGdW5jXzEgKCk7CisgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gbmVjZXNzYXJ5IHNpbmNlIEVudW1lcmF0aW9uIG1heSBub3Qgc2ltcGx5IGJlIGludCAqLworCisjaWZuZGVmIFJFRworICAgICAgICBCb29sZWFuIFJlZyA9IGZhbHNlOworI2RlZmluZSBSRUcKKyAgICAgICAgLyogUkVHIGJlY29tZXMgZGVmaW5lZCBhcyBlbXB0eSAqLworICAgICAgICAvKiBpLmUuIG5vIHJlZ2lzdGVyIHZhcmlhYmxlcyAgICovCisjZWxzZQorICAgICAgICBCb29sZWFuIFJlZyA9IHRydWU7CisjZW5kaWYKKworLyogdmFyaWFibGVzIGZvciB0aW1lIG1lYXN1cmVtZW50OiAqLworCisjaWZkZWYgVElNRVMKK3N0cnVjdCB0bXMgICAgICB0aW1lX2luZm87CisvKiBleHRlcm4gIGludCAgICAgdGltZXMgKCk7ICovCisgICAgICAgICAgICAgICAgLyogc2VlIGxpYnJhcnkgZnVuY3Rpb24gInRpbWVzIiAqLworI2RlZmluZSBUb29fU21hbGxfVGltZSAxMjAKKyAgICAgICAgICAgICAgICAvKiBNZWFzdXJlbWVudHMgc2hvdWxkIGxhc3QgYXQgbGVhc3QgYWJvdXQgMiBzZWNvbmRzICovCisjZW5kaWYKKyNpZmRlZiBUSU1FCitleHRlcm4gbG9uZyAgICAgdGltZSgpOworICAgICAgICAgICAgICAgIC8qIHNlZSBsaWJyYXJ5IGZ1bmN0aW9uICJ0aW1lIiAgKi8KKyNkZWZpbmUgVG9vX1NtYWxsX1RpbWUgMgorICAgICAgICAgICAgICAgIC8qIE1lYXN1cmVtZW50cyBzaG91bGQgbGFzdCBhdCBsZWFzdCAyIHNlY29uZHMgKi8KKyNlbmRpZgorCitsb25nICAgICAgICAgICAgQmVnaW5fVGltZSwKKyAgICAgICAgICAgICAgICBFbmRfVGltZSwKKyAgICAgICAgICAgICAgICBVc2VyX1RpbWU7CisjaWYgMAorZmxvYXQgICAgICAgICAgIE1pY3Jvc2Vjb25kcywKKyAgICAgICAgICAgICAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQ7CisjZWxzZQorbG9uZyAgICAgICAgICAgIE1pY3Jvc2Vjb25kcywKKyAgICAgICAgICAgICAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQ7CisjZW5kaWYKKworLyogZW5kIG9mIHZhcmlhYmxlcyBmb3IgdGltZSBtZWFzdXJlbWVudCAqLworCit2b2lkIFByb2NfMSAoUkVHIFJlY19Qb2ludGVyIFB0cl9WYWxfUGFyKTsKK3ZvaWQgUHJvY18yIChPbmVfRmlmdHkgICAqSW50X1Bhcl9SZWYpOwordm9pZCBQcm9jXzMgKFJlY19Qb2ludGVyICpQdHJfUmVmX1Bhcik7Cit2b2lkIFByb2NfNCAodm9pZCk7Cit2b2lkIFByb2NfNSAodm9pZCk7CisKKworZXh0ZXJuIEJvb2xlYW4gRnVuY18yKFN0cl8zMCwgU3RyXzMwKTsKK2V4dGVybiB2b2lkIFByb2NfNihFbnVtZXJhdGlvbiwgRW51bWVyYXRpb24gKik7CitleHRlcm4gdm9pZCBQcm9jXzcoT25lX0ZpZnR5LCBPbmVfRmlmdHksIE9uZV9GaWZ0eSAqKTsKK2V4dGVybiB2b2lkIFByb2NfOChBcnJfMV9EaW0sIEFycl8yX0RpbSwgaW50LCBpbnQpOworCitpbnQgbWFpbiAoYXJnYywgYXJndikKK2ludAlhcmdjOworY2hhcgkqYXJndltdOworICAvKiBtYWluIHByb2dyYW0sIGNvcnJlc3BvbmRzIHRvIHByb2NlZHVyZXMgICAgICAgICovCisgIC8qIE1haW4gYW5kIFByb2NfMCBpbiB0aGUgQWRhIHZlcnNpb24gICAgICAgICAgICAgKi8KK3sKKyNpZmRlZiBTRUxGX1RJTUVECisgICAgICAgIGludCAgICAgICAgICAgICBOdW1iZXJfT2ZfUnVuczsKKyNlbHNlIC8qIFNFTEZfVElNRUQgKi8KKyAgICAgICAgaW50ICAgICAgICAgICAgIGR1cmF0aW9uOworI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KKyAgICAgICAgT25lX0ZpZnR5ICAgICAgIEludF8xX0xvYzsKKyAgUkVHICAgT25lX0ZpZnR5ICAgICAgIEludF8yX0xvYzsKKyAgICAgICAgT25lX0ZpZnR5ICAgICAgIEludF8zX0xvYzsKKyAgUkVHICAgY2hhciAgICAgICAgICAgIENoX0luZGV4OworICAgICAgICBFbnVtZXJhdGlvbiAgICAgRW51bV9Mb2M7CisgICAgICAgIFN0cl8zMCAgICAgICAgICBTdHJfMV9Mb2M7CisgICAgICAgIFN0cl8zMCAgICAgICAgICBTdHJfMl9Mb2M7CisKKyAgLyogSW5pdGlhbGl6YXRpb25zICovCisjaWYgMAorICBOZXh0X1B0cl9HbG9iID0gKFJlY19Qb2ludGVyKSBtYWxsb2MgKHNpemVvZiAoUmVjX1R5cGUpKTsKKyAgUHRyX0dsb2IgPSAoUmVjX1BvaW50ZXIpIG1hbGxvYyAoc2l6ZW9mIChSZWNfVHlwZSkpOworI2Vsc2UKKyAgc3RhdGljIFJlY19UeXBlIGdsb2IxLCBnbG9iMjsKKyAgTmV4dF9QdHJfR2xvYiA9ICZnbG9iMTsKKyAgUHRyX0dsb2IgPSAmZ2xvYjI7CisjZW5kaWYKKworICBQdHJfR2xvYi0+UHRyX0NvbXAgICAgICAgICAgICAgICAgICAgID0gTmV4dF9QdHJfR2xvYjsKKyAgUHRyX0dsb2ItPkRpc2NyICAgICAgICAgICAgICAgICAgICAgICA9IElkZW50XzE7CisgIFB0cl9HbG9iLT52YXJpYW50LnZhcl8xLkVudW1fQ29tcCAgICAgPSBJZGVudF8zOworICBQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCAgICAgID0gNDA7CisgIHN0cmNweSAoUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuU3RyX0NvbXAsCisgICAgICAgICAgIkRIUllTVE9ORSBQUk9HUkFNLCBTT01FIFNUUklORyIpOworICBzdHJjcHkgKFN0cl8xX0xvYywgIkRIUllTVE9ORSBQUk9HUkFNLCAxJ1NUIFNUUklORyIpOworCisgIEFycl8yX0dsb2IgWzhdWzddID0gMTA7CisgICAgICAgIC8qIFdhcyBtaXNzaW5nIGluIHB1Ymxpc2hlZCBwcm9ncmFtLiBXaXRob3V0IHRoaXMgc3RhdGVtZW50LCAgICAqLworICAgICAgICAvKiBBcnJfMl9HbG9iIFs4XVs3XSB3b3VsZCBoYXZlIGFuIHVuZGVmaW5lZCB2YWx1ZS4gICAgICAgICAgICAgKi8KKyAgICAgICAgLyogV2FybmluZzogV2l0aCAxNi1CaXQgcHJvY2Vzc29ycyBhbmQgTnVtYmVyX09mX1J1bnMgPiAzMjAwMCwgICovCisgICAgICAgIC8qIG92ZXJmbG93IG1heSBvY2N1ciBmb3IgdGhpcyBhcnJheSBlbGVtZW50LiAgICAgICAgICAgICAgICAgICAqLworCisjaWZkZWYgU0VMRl9USU1FRAorICBOdW1iZXJfT2ZfUnVucyA9IDUwMDsvLzUwMDAwMDsKKyAgaWYgKGFyZ2MgPj0gMikgeworICAgIE51bWJlcl9PZl9SdW5zID0gYXRvaShhcmd2WzFdKTsKKyAgICB9CisgIHByaW50ZiAoIlxuIik7CisgIHByaW50ZiAoIkRocnlzdG9uZSBCZW5jaG1hcmssIFZlcnNpb24gMi4xIChMYW5ndWFnZTogQylcbiIpOworICBwcmludGYgKCJcbiIpOworICBpZiAoUmVnKQorICB7CisgICAgcHJpbnRmICgiUHJvZ3JhbSBjb21waWxlZCB3aXRoICdyZWdpc3RlcicgYXR0cmlidXRlXG4iKTsKKyAgICBwcmludGYgKCJcbiIpOworICB9CisgIGVsc2UKKyAgeworICAgIHByaW50ZiAoIlByb2dyYW0gY29tcGlsZWQgd2l0aG91dCAncmVnaXN0ZXInIGF0dHJpYnV0ZVxuIik7CisgICAgcHJpbnRmICgiXG4iKTsKKyAgfQorI2lmZGVmIFBSQVRUTEUKKyAgcHJpbnRmICgiUGxlYXNlIGdpdmUgdGhlIG51bWJlciBvZiBydW5zIHRocm91Z2ggdGhlIGJlbmNobWFyazogIik7CisgIHsKKyAgICBpbnQgbjsKKyAgICBzY2FuZiAoIiVkIiwgJm4pOworICAgIE51bWJlcl9PZl9SdW5zID0gbjsKKyAgfQorICBwcmludGYgKCJcbiIpOworI2VuZGlmIC8qIFBSQVRUTEUgKi8KKworICBwcmludGYgKCJFeGVjdXRpb24gc3RhcnRzLCAlZCBydW5zIHRocm91Z2ggRGhyeXN0b25lXG4iLCBOdW1iZXJfT2ZfUnVucyk7CisKKyAgUnVuX0luZGV4ID0gMDsKKyNlbHNlIC8qIFNFTEZfVElNRUQgKi8KKyAgaWYgKGFyZ2MgIT0gMikgeworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGR1cmF0aW9uXG4iLCBhcmd2WzBdKTsKKyAgICBleGl0KDEpOworICAgIH0KKworICBkdXJhdGlvbiA9IGF0b2koYXJndlsxXSk7CisgIFJ1bl9JbmRleCA9IDA7CisgIHdha2VfbWUoZHVyYXRpb24sIHJlcG9ydCk7CisjZW5kaWYgLyogU0VMRl9USU1FRCAqLworCisgIC8qKioqKioqKioqKioqKiovCisgIC8qIFN0YXJ0IHRpbWVyICovCisgIC8qKioqKioqKioqKioqKiovCisKKyNpZmRlZiBTRUxGX1RJTUVECisjaWZkZWYgVElNRVMKKyAgdGltZXMgKCZ0aW1lX2luZm8pOworICBCZWdpbl9UaW1lID0gKGxvbmcpIHRpbWVfaW5mby50bXNfdXRpbWU7CisjZW5kaWYKKyNpZmRlZiBUSU1FCisgIEJlZ2luX1RpbWUgPSB0aW1lICggKGxvbmcgKikgMCk7CisjZW5kaWYKKyNlbmRpZiAvKiBTRUxGX1RJTUVEICovCisKKyNpZmRlZiBTRUxGX1RJTUVECisgIGZvciAoUnVuX0luZGV4ID0gMTsgUnVuX0luZGV4IDw9IE51bWJlcl9PZl9SdW5zIDsgKytSdW5fSW5kZXgpCisjZWxzZSAvKiBTRUxGX1RJTUVEICovCisgIGZvciAoUnVuX0luZGV4ID0gMTsgOyArK1J1bl9JbmRleCkKKyNlbmRpZiAvKiBTRUxGX1RJTUVEICovCisgIHsKKworICAgIFByb2NfNSgpOworICAgIFByb2NfNCgpOworICAgICAgLyogQ2hfMV9HbG9iID09ICdBJywgQ2hfMl9HbG9iID09ICdCJywgQm9vbF9HbG9iID09IHRydWUgKi8KKyAgICBJbnRfMV9Mb2MgPSAyOworICAgIEludF8yX0xvYyA9IDM7CisgICAgc3RyY3B5IChTdHJfMl9Mb2MsICJESFJZU1RPTkUgUFJPR1JBTSwgMidORCBTVFJJTkciKTsKKyAgICBFbnVtX0xvYyA9IElkZW50XzI7CisgICAgQm9vbF9HbG9iID0gISBGdW5jXzIgKFN0cl8xX0xvYywgU3RyXzJfTG9jKTsKKyAgICAgIC8qIEJvb2xfR2xvYiA9PSAxICovCisgICAgd2hpbGUgKEludF8xX0xvYyA8IEludF8yX0xvYykgIC8qIGxvb3AgYm9keSBleGVjdXRlZCBvbmNlICovCisgICAgeworICAgICAgSW50XzNfTG9jID0gNSAqIEludF8xX0xvYyAtIEludF8yX0xvYzsKKyAgICAgICAgLyogSW50XzNfTG9jID09IDcgKi8KKyAgICAgIFByb2NfNyAoSW50XzFfTG9jLCBJbnRfMl9Mb2MsICZJbnRfM19Mb2MpOworICAgICAgICAvKiBJbnRfM19Mb2MgPT0gNyAqLworICAgICAgSW50XzFfTG9jICs9IDE7CisgICAgfSAvKiB3aGlsZSAqLworICAgICAgLyogSW50XzFfTG9jID09IDMsIEludF8yX0xvYyA9PSAzLCBJbnRfM19Mb2MgPT0gNyAqLworICAgIFByb2NfOCAoQXJyXzFfR2xvYiwgQXJyXzJfR2xvYiwgSW50XzFfTG9jLCBJbnRfM19Mb2MpOworICAgICAgLyogSW50X0dsb2IgPT0gNSAqLworICAgIFByb2NfMSAoUHRyX0dsb2IpOworICAgIGZvciAoQ2hfSW5kZXggPSAnQSc7IENoX0luZGV4IDw9IENoXzJfR2xvYjsgKytDaF9JbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9vcCBib2R5IGV4ZWN1dGVkIHR3aWNlICovCisgICAgeworICAgICAgaWYgKEVudW1fTG9jID09IEZ1bmNfMSAoQ2hfSW5kZXgsICdDJykpCisgICAgICAgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgICAgIHsKKyAgICAgICAgUHJvY182IChJZGVudF8xLCAmRW51bV9Mb2MpOworICAgICAgICBzdHJjcHkgKFN0cl8yX0xvYywgIkRIUllTVE9ORSBQUk9HUkFNLCAzJ1JEIFNUUklORyIpOworICAgICAgICBJbnRfMl9Mb2MgPSBSdW5fSW5kZXg7CisgICAgICAgIEludF9HbG9iID0gUnVuX0luZGV4OworICAgICAgICB9CisgICAgfQorICAgICAgLyogSW50XzFfTG9jID09IDMsIEludF8yX0xvYyA9PSAzLCBJbnRfM19Mb2MgPT0gNyAqLworICAgIEludF8yX0xvYyA9IEludF8yX0xvYyAqIEludF8xX0xvYzsKKyAgICBJbnRfMV9Mb2MgPSBJbnRfMl9Mb2MgLyBJbnRfM19Mb2M7CisgICAgSW50XzJfTG9jID0gNyAqIChJbnRfMl9Mb2MgLSBJbnRfM19Mb2MpIC0gSW50XzFfTG9jOworICAgICAgLyogSW50XzFfTG9jID09IDEsIEludF8yX0xvYyA9PSAxMywgSW50XzNfTG9jID09IDcgKi8KKyAgICBQcm9jXzIgKCZJbnRfMV9Mb2MpOworICAgICAgLyogSW50XzFfTG9jID09IDUgKi8KKworICB9IC8qIGxvb3AgImZvciBSdW5fSW5kZXgiICovCisKKyAgLyoqKioqKioqKioqKioqLworICAvKiBTdG9wIHRpbWVyICovCisgIC8qKioqKioqKioqKioqKi8KKyNpZmRlZiBTRUxGX1RJTUVECisjaWZkZWYgVElNRVMKKyAgdGltZXMgKCZ0aW1lX2luZm8pOworICBFbmRfVGltZSA9IChsb25nKSB0aW1lX2luZm8udG1zX3V0aW1lOworI2VuZGlmCisjaWZkZWYgVElNRQorICBFbmRfVGltZSA9IHRpbWUgKCAobG9uZyAqKSAwKTsKKyNlbmRpZgorI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KKworICAvKiBCWVRFIHZlcnNpb24gbmV2ZXIgZXhlY3V0ZXMgdGhpcyBzdHVmZiAqLworI2lmZGVmIFNFTEZfVElNRUQKKyAgcHJpbnRmICgiRXhlY3V0aW9uIGVuZHNcbiIpOworICBwcmludGYgKCJcbiIpOworICBwcmludGYgKCJGaW5hbCB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBiZW5jaG1hcms6XG4iKTsKKyAgcHJpbnRmICgiXG4iKTsKKyAgcHJpbnRmICgiSW50X0dsb2I6ICAgICAgICAgICAgJWRcbiIsIEludF9HbG9iKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDUpOworICBwcmludGYgKCJCb29sX0dsb2I6ICAgICAgICAgICAlZFxuIiwgQm9vbF9HbG9iKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDEpOworICBwcmludGYgKCJDaF8xX0dsb2I6ICAgICAgICAgICAlY1xuIiwgQ2hfMV9HbG9iKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWNcbiIsICdBJyk7CisgIHByaW50ZiAoIkNoXzJfR2xvYjogICAgICAgICAgICVjXG4iLCBDaF8yX0dsb2IpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlY1xuIiwgJ0InKTsKKyAgcHJpbnRmICgiQXJyXzFfR2xvYls4XTogICAgICAgJWRcbiIsIEFycl8xX0dsb2JbOF0pOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgNyk7CisgIHByaW50ZiAoIkFycl8yX0dsb2JbOF1bN106ICAgICVkXG4iLCBBcnJfMl9HbG9iWzhdWzddKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgTnVtYmVyX09mX1J1bnMgKyAxMFxuIik7CisgIHByaW50ZiAoIlB0cl9HbG9iLT5cbiIpOworICBwcmludGYgKCIgIFB0cl9Db21wOiAgICAgICAgICAlZFxuIiwgKGludCkgUHRyX0dsb2ItPlB0cl9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgKGltcGxlbWVudGF0aW9uLWRlcGVuZGVudClcbiIpOworICBwcmludGYgKCIgIERpc2NyOiAgICAgICAgICAgICAlZFxuIiwgUHRyX0dsb2ItPkRpc2NyKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDApOworICBwcmludGYgKCIgIEVudW1fQ29tcDogICAgICAgICAlZFxuIiwgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuRW51bV9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDIpOworICBwcmludGYgKCIgIEludF9Db21wOiAgICAgICAgICAlZFxuIiwgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuSW50X0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMTcpOworICBwcmludGYgKCIgIFN0cl9Db21wOiAgICAgICAgICAlc1xuIiwgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuU3RyX0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICBESFJZU1RPTkUgUFJPR1JBTSwgU09NRSBTVFJJTkdcbiIpOworICBwcmludGYgKCJOZXh0X1B0cl9HbG9iLT5cbiIpOworICBwcmludGYgKCIgIFB0cl9Db21wOiAgICAgICAgICAlZFxuIiwgKGludCkgTmV4dF9QdHJfR2xvYi0+UHRyX0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAoaW1wbGVtZW50YXRpb24tZGVwZW5kZW50KSwgc2FtZSBhcyBhYm92ZVxuIik7CisgIHByaW50ZiAoIiAgRGlzY3I6ICAgICAgICAgICAgICVkXG4iLCBOZXh0X1B0cl9HbG9iLT5EaXNjcik7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAwKTsKKyAgcHJpbnRmICgiICBFbnVtX0NvbXA6ICAgICAgICAgJWRcbiIsIE5leHRfUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuRW51bV9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDEpOworICBwcmludGYgKCIgIEludF9Db21wOiAgICAgICAgICAlZFxuIiwgTmV4dF9QdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxOCk7CisgIHByaW50ZiAoIiAgU3RyX0NvbXA6ICAgICAgICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXh0X1B0cl9HbG9iLT52YXJpYW50LnZhcl8xLlN0cl9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgREhSWVNUT05FIFBST0dSQU0sIFNPTUUgU1RSSU5HXG4iKTsKKyAgcHJpbnRmICgiSW50XzFfTG9jOiAgICAgICAgICAgJWRcbiIsIEludF8xX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCA1KTsKKyAgcHJpbnRmICgiSW50XzJfTG9jOiAgICAgICAgICAgJWRcbiIsIEludF8yX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxMyk7CisgIHByaW50ZiAoIkludF8zX0xvYzogICAgICAgICAgICVkXG4iLCBJbnRfM19Mb2MpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgNyk7CisgIHByaW50ZiAoIkVudW1fTG9jOiAgICAgICAgICAgICVkXG4iLCBFbnVtX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxKTsKKyAgcHJpbnRmICgiU3RyXzFfTG9jOiAgICAgICAgICAgJXNcbiIsIFN0cl8xX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgIERIUllTVE9ORSBQUk9HUkFNLCAxJ1NUIFNUUklOR1xuIik7CisgIHByaW50ZiAoIlN0cl8yX0xvYzogICAgICAgICAgICVzXG4iLCBTdHJfMl9Mb2MpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICBESFJZU1RPTkUgUFJPR1JBTSwgMidORCBTVFJJTkdcbiIpOworICBwcmludGYgKCJcbiIpOworCisgIFVzZXJfVGltZSA9IEVuZF9UaW1lIC0gQmVnaW5fVGltZTsKKworICBpZiAoVXNlcl9UaW1lIDwgVG9vX1NtYWxsX1RpbWUpCisgIHsKKyAgICBwcmludGYgKCJNZWFzdXJlZCB0aW1lIHRvbyBzbWFsbCB0byBvYnRhaW4gbWVhbmluZ2Z1bCByZXN1bHRzXG4iKTsKKyAgICBwcmludGYgKCJQbGVhc2UgaW5jcmVhc2UgbnVtYmVyIG9mIHJ1bnNcbiIpOworICAgIHByaW50ZiAoIlxuIik7CisgIH0KKyAgZWxzZQorICB7CisjaWYgMAorI2lmZGVmIFRJTUUKKyAgICBNaWNyb3NlY29uZHMgPSAoZmxvYXQpIFVzZXJfVGltZSAqIE1pY19zZWNzX1Blcl9TZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8gKGZsb2F0KSBOdW1iZXJfT2ZfUnVuczsKKyAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQgPSAoZmxvYXQpIE51bWJlcl9PZl9SdW5zIC8gKGZsb2F0KSBVc2VyX1RpbWU7CisjZWxzZQorICAgIE1pY3Jvc2Vjb25kcyA9IChmbG9hdCkgVXNlcl9UaW1lICogTWljX3NlY3NfUGVyX1NlY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgLyAoKGZsb2F0KSBIWiAqICgoZmxvYXQpIE51bWJlcl9PZl9SdW5zKSk7CisgICAgRGhyeXN0b25lc19QZXJfU2Vjb25kID0gKChmbG9hdCkgSFogKiAoZmxvYXQpIE51bWJlcl9PZl9SdW5zKQorICAgICAgICAgICAgICAgICAgICAgICAgLyAoZmxvYXQpIFVzZXJfVGltZTsKKyNlbmRpZgorI2Vsc2UKKyAgTWljcm9zZWNvbmRzID0gKChVc2VyX1RpbWUgLyBOdW1iZXJfT2ZfUnVucykgKiBNaWNfc2Vjc19QZXJfU2Vjb25kKSAvIEhaOworICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQgPSAoSFogKiBOdW1iZXJfT2ZfUnVucykgLyBVc2VyX1RpbWU7CisKKyAgc2NfcHJpbnRmKCJOdW1iZXJfT2ZfUnVucz0gJWxkLCBIWj0gJWxkXG4iLCBOdW1iZXJfT2ZfUnVucywgSFopOworICBzY19wcmludGYoIlRpbWU6IGJlZ2luPSAlbGQsIGVuZD0gJWxkLCBkaWZmPSAlbGRcbiIsIEJlZ2luX1RpbWUsIEVuZF9UaW1lLCBVc2VyX1RpbWUpOworICBzY19wcmludGYoIk1pY3Jvc2Vjb25kcyBmb3Igb25lIHJ1biB0aHJvdWdoIERocnlzdG9uZTogJWxkXG4iLCBNaWNyb3NlY29uZHMpOworICBzY19wcmludGYoIkRocnlzdG9uZXMgcGVyIFNlY29uZDogICAgICAgICAgICAgICAgICAgICAgJWxkXG4iLCBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQpOworCisjZW5kaWYKKyAgfQorI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KK30KKworCit2b2lkIFByb2NfMSAoUkVHIFJlY19Qb2ludGVyIFB0cl9WYWxfUGFyKQorICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KK3sKKyAgUkVHIFJlY19Qb2ludGVyIE5leHRfUmVjb3JkID0gUHRyX1ZhbF9QYXItPlB0cl9Db21wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qID09IFB0cl9HbG9iX05leHQgKi8KKyAgLyogTG9jYWwgdmFyaWFibGUsIGluaXRpYWxpemVkIHdpdGggUHRyX1ZhbF9QYXItPlB0cl9Db21wLCAgICAqLworICAvKiBjb3JyZXNwb25kcyB0byAicmVuYW1lIiBpbiBBZGEsICJ3aXRoIiBpbiBQYXNjYWwgICAgICAgICAgICovCisKKyAgc3RydWN0YXNzaWduICgqUHRyX1ZhbF9QYXItPlB0cl9Db21wLCAqUHRyX0dsb2IpOworICBQdHJfVmFsX1Bhci0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCA9IDU7CisgIE5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wCisgICAgICAgID0gUHRyX1ZhbF9QYXItPnZhcmlhbnQudmFyXzEuSW50X0NvbXA7CisgIE5leHRfUmVjb3JkLT5QdHJfQ29tcCA9IFB0cl9WYWxfUGFyLT5QdHJfQ29tcDsKKyAgUHJvY18zICgmTmV4dF9SZWNvcmQtPlB0cl9Db21wKTsKKyAgICAvKiBQdHJfVmFsX1Bhci0+UHRyX0NvbXAtPlB0cl9Db21wCisgICAgICAgICAgICAgICAgICAgICAgICA9PSBQdHJfR2xvYi0+UHRyX0NvbXAgKi8KKyAgaWYgKE5leHRfUmVjb3JkLT5EaXNjciA9PSBJZGVudF8xKQorICAgIC8qIHRoZW4sIGV4ZWN1dGVkICovCisgIHsKKyAgICBOZXh0X1JlY29yZC0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCA9IDY7CisgICAgUHJvY182IChQdHJfVmFsX1Bhci0+dmFyaWFudC52YXJfMS5FbnVtX0NvbXAsCisgICAgICAgICAgICZOZXh0X1JlY29yZC0+dmFyaWFudC52YXJfMS5FbnVtX0NvbXApOworICAgIE5leHRfUmVjb3JkLT5QdHJfQ29tcCA9IFB0cl9HbG9iLT5QdHJfQ29tcDsKKyAgICBQcm9jXzcgKE5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wLCAxMCwKKyAgICAgICAgICAgJk5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wKTsKKyAgfQorICBlbHNlIC8qIG5vdCBleGVjdXRlZCAqLworICAgIHN0cnVjdGFzc2lnbiAoKlB0cl9WYWxfUGFyLCAqUHRyX1ZhbF9QYXItPlB0cl9Db21wKTsKK30gLyogUHJvY18xICovCisKKwordm9pZCBQcm9jXzIgKE9uZV9GaWZ0eSAgICpJbnRfUGFyX1JlZikKKyAgICAvKiBleGVjdXRlZCBvbmNlICovCisgICAgLyogKkludF9QYXJfUmVmID09IDEsIGJlY29tZXMgNCAqLworeworICBPbmVfRmlmdHkgIEludF9Mb2M7CisgIEVudW1lcmF0aW9uICAgRW51bV9Mb2M7CisKKyAgRW51bV9Mb2MgPSAwOworCisgIEludF9Mb2MgPSAqSW50X1Bhcl9SZWYgKyAxMDsKKyAgZG8gLyogZXhlY3V0ZWQgb25jZSAqLworICAgIGlmIChDaF8xX0dsb2IgPT0gJ0EnKQorICAgICAgLyogdGhlbiwgZXhlY3V0ZWQgKi8KKyAgICB7CisgICAgICBJbnRfTG9jIC09IDE7CisgICAgICAqSW50X1Bhcl9SZWYgPSBJbnRfTG9jIC0gSW50X0dsb2I7CisgICAgICBFbnVtX0xvYyA9IElkZW50XzE7CisgICAgfSAvKiBpZiAqLworICB3aGlsZSAoRW51bV9Mb2MgIT0gSWRlbnRfMSk7IC8qIHRydWUgKi8KK30gLyogUHJvY18yICovCisKKwordm9pZCBQcm9jXzMgKFJlY19Qb2ludGVyICpQdHJfUmVmX1BhcikKKyAgICAvKiBleGVjdXRlZCBvbmNlICovCisgICAgLyogUHRyX1JlZl9QYXIgYmVjb21lcyBQdHJfR2xvYiAqLworeworICBpZiAoUHRyX0dsb2IgIT0gTnVsbCkKKyAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgICpQdHJfUmVmX1BhciA9IFB0cl9HbG9iLT5QdHJfQ29tcDsKKyAgUHJvY183ICgxMCwgSW50X0dsb2IsICZQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCk7Cit9IC8qIFByb2NfMyAqLworCisKK3ZvaWQgUHJvY180ICh2b2lkKSAvKiB3aXRob3V0IHBhcmFtZXRlcnMgKi8KKyAgICAvKiBleGVjdXRlZCBvbmNlICovCit7CisgIEJvb2xlYW4gQm9vbF9Mb2M7CisKKyAgQm9vbF9Mb2MgPSBDaF8xX0dsb2IgPT0gJ0EnOworICBCb29sX0dsb2IgPSBCb29sX0xvYyB8IEJvb2xfR2xvYjsKKyAgQ2hfMl9HbG9iID0gJ0InOworfSAvKiBQcm9jXzQgKi8KKwordm9pZCBQcm9jXzUgKHZvaWQpIC8qIHdpdGhvdXQgcGFyYW1ldGVycyAqLworLyoqKioqKiovCisgICAgLyogZXhlY3V0ZWQgb25jZSAqLworeworICBDaF8xX0dsb2IgPSAnQSc7CisgIEJvb2xfR2xvYiA9IGZhbHNlOworfSAvKiBQcm9jXzUgKi8KKworCisgICAgICAgIC8qIFByb2NlZHVyZSBmb3IgdGhlIGFzc2lnbm1lbnQgb2Ygc3RydWN0dXJlcywgICAgICAgICAgKi8KKyAgICAgICAgLyogaWYgdGhlIEMgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSAgICAgICAqLworI2lmZGVmICBOT1NUUlVDVEFTU0lHTgorbWVtY3B5IChkLCBzLCBsKQorcmVnaXN0ZXIgY2hhciAgICpkOworcmVnaXN0ZXIgY2hhciAgICpzOworcmVnaXN0ZXIgaW50ICAgIGw7Cit7CisgICAgICAgIHdoaWxlIChsLS0pICpkKysgPSAqcysrOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5XzIuYyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MDE2MWYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5XzIuYwpAQCAtMCwwICsxLDIwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgVGhlIEJZVEUgVU5JWCBCZW5jaG1hcmtzIC0gUmVsZWFzZSAzCisgKiAgICAgICAgICBNb2R1bGU6IGRocnlfMi5jICAgU0lEOiAzLjQgNS8xNS85MSAxOTozMDoyMgorICogICAgICAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBjb21tZW50cywgc3VnZ2VzdGlvbnMgc2hvdWxkIGJlIHNlbnQgdG86CisgKgorICoJQmVuIFNtaXRoLCBSaWNrIEdyZWhhbiBvciBUb20gWWFnZXIKKyAqCWJlbkBieXRlcGIuYnl0ZS5jb20gICByaWNrX2dAYnl0ZXBiLmJ5dGUuY29tICAgdHlhZ2VyQGJ5dGVwYi5ieXRlLmNvbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIE1vZGlmaWNhdGlvbiBMb2c6CisgKiAgMTAvMjIvOTcgLSBjb2RlIGNsZWFudXAgdG8gcmVtb3ZlIEFOU0kgQyBjb21waWxlciB3YXJuaW5ncworICogICAgICAgICAgICAgQW5keSBLYWhuIDxrYWhuQHprMy5kZWMuY29tPgorICoKKyAqICBBZGFwdGVkIGZyb206CisgKgorICogICAgICAgICAgICAgICAgICAgIkRIUllTVE9ORSIgQmVuY2htYXJrIFByb2dyYW0KKyAqICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogKioqKiBXQVJOSU5HICoqKiogU2VlIHdhcm5pbmcgaW4gbi5kaHJ5XzEuYworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgVmVyc2lvbjogICAgQywgVmVyc2lvbiAyLjEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogIEZpbGU6ICAgICAgIGRocnlfMi5jIChwYXJ0IDMgb2YgMykKKyAqCisgKiAgRGF0ZTogICAgICAgTWF5IDI1LCAxOTg4CisgKgorICogIEF1dGhvcjogICAgIFJlaW5ob2xkIFAuIFdlaWNrZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNDQ1NpZCBpcyBkZWZpbmVkIGluIGRocnlfMS5jICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJkaHJ5LmgiCisKKyNpZm5kZWYgUkVHCisjZGVmaW5lIFJFRworICAgICAgICAvKiBSRUcgYmVjb21lcyBkZWZpbmVkIGFzIGVtcHR5ICovCisgICAgICAgIC8qIGkuZS4gbm8gcmVnaXN0ZXIgdmFyaWFibGVzICAgKi8KKyNlbmRpZgorCitleHRlcm4gIGludCAgICAgSW50X0dsb2I7CitleHRlcm4gIGNoYXIgICAgQ2hfMV9HbG9iOworCit2b2lkIFByb2NfNihFbnVtZXJhdGlvbiwgRW51bWVyYXRpb24gKik7Cit2b2lkIFByb2NfNyhPbmVfRmlmdHksIE9uZV9GaWZ0eSwgT25lX0ZpZnR5ICopOwordm9pZCBQcm9jXzgoQXJyXzFfRGltLCBBcnJfMl9EaW0sIGludCwgaW50KTsKK0VudW1lcmF0aW9uIEZ1bmNfMShDYXBpdGFsX0xldHRlciwgQ2FwaXRhbF9MZXR0ZXIpOworQm9vbGVhbiBGdW5jXzIoU3RyXzMwLCBTdHJfMzApOworQm9vbGVhbiBGdW5jXzMoRW51bWVyYXRpb24pOworCit2b2lkIFByb2NfNiAoRW51bWVyYXRpb24gRW51bV9WYWxfUGFyLCBFbnVtZXJhdGlvbiAqRW51bV9SZWZfUGFyKQorICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KKyAgICAvKiBFbnVtX1ZhbF9QYXIgPT0gSWRlbnRfMywgRW51bV9SZWZfUGFyIGJlY29tZXMgSWRlbnRfMiAqLworeworICAqRW51bV9SZWZfUGFyID0gRW51bV9WYWxfUGFyOworICBpZiAoISBGdW5jXzMgKEVudW1fVmFsX1BhcikpCisgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzQ7CisgIHN3aXRjaCAoRW51bV9WYWxfUGFyKQorICB7CisgICAgY2FzZSBJZGVudF8xOiAKKyAgICAgICpFbnVtX1JlZl9QYXIgPSBJZGVudF8xOworICAgICAgYnJlYWs7CisgICAgY2FzZSBJZGVudF8yOiAKKyAgICAgIGlmIChJbnRfR2xvYiA+IDEwMCkKKyAgICAgICAgLyogdGhlbiAqLworICAgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzE7CisgICAgICBlbHNlICpFbnVtX1JlZl9QYXIgPSBJZGVudF80OworICAgICAgYnJlYWs7CisgICAgY2FzZSBJZGVudF8zOiAvKiBleGVjdXRlZCAqLworICAgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzI7CisgICAgICBicmVhazsKKyAgICBjYXNlIElkZW50XzQ6IGJyZWFrOworICAgIGNhc2UgSWRlbnRfNTogCisgICAgICAqRW51bV9SZWZfUGFyID0gSWRlbnRfMzsKKyAgICAgIGJyZWFrOworICB9IC8qIHN3aXRjaCAqLworfSAvKiBQcm9jXzYgKi8KKwordm9pZCBQcm9jXzcgKEludF8xX1Bhcl9WYWwsIEludF8yX1Bhcl9WYWwsIEludF9QYXJfUmVmKQorT25lX0ZpZnR5ICAgICAgIEludF8xX1Bhcl9WYWw7CitPbmVfRmlmdHkgICAgICAgSW50XzJfUGFyX1ZhbDsKK09uZV9GaWZ0eSAgICAgICpJbnRfUGFyX1JlZjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIHRocmVlIHRpbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKKyAgICAvKiBmaXJzdCBjYWxsOiAgICAgIEludF8xX1Bhcl9WYWwgPT0gMiwgSW50XzJfUGFyX1ZhbCA9PSAzLCAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgNyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBzZWNvbmQgY2FsbDogICAgIEludF8xX1Bhcl9WYWwgPT0gMTAsIEludF8yX1Bhcl9WYWwgPT0gNSwgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgMTcgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiB0aGlyZCBjYWxsOiAgICAgIEludF8xX1Bhcl9WYWwgPT0gNiwgSW50XzJfUGFyX1ZhbCA9PSAxMCwgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgMTggICAgICAgICAgICAgICAgICAgKi8KK3sKKyAgT25lX0ZpZnR5IEludF9Mb2M7CisKKyAgSW50X0xvYyA9IEludF8xX1Bhcl9WYWwgKyAyOworICAqSW50X1Bhcl9SZWYgPSBJbnRfMl9QYXJfVmFsICsgSW50X0xvYzsKK30gLyogUHJvY183ICovCisKKwordm9pZCBQcm9jXzggKEFycl8xX1Bhcl9SZWYsIEFycl8yX1Bhcl9SZWYsIEludF8xX1Bhcl9WYWwsIEludF8yX1Bhcl9WYWwpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIG9uY2UgICAgICAqLworICAgIC8qIEludF9QYXJfVmFsXzEgPT0gMyAqLworICAgIC8qIEludF9QYXJfVmFsXzIgPT0gNyAqLworQXJyXzFfRGltICAgICAgIEFycl8xX1Bhcl9SZWY7CitBcnJfMl9EaW0gICAgICAgQXJyXzJfUGFyX1JlZjsKK2ludCAgICAgICAgICAgICBJbnRfMV9QYXJfVmFsOworaW50ICAgICAgICAgICAgIEludF8yX1Bhcl9WYWw7Cit7CisgIFJFRyBPbmVfRmlmdHkgSW50X0luZGV4OworICBSRUcgT25lX0ZpZnR5IEludF9Mb2M7CisKKyAgSW50X0xvYyA9IEludF8xX1Bhcl9WYWwgKyA1OworICBBcnJfMV9QYXJfUmVmIFtJbnRfTG9jXSA9IEludF8yX1Bhcl9WYWw7CisgIEFycl8xX1Bhcl9SZWYgW0ludF9Mb2MrMV0gPSBBcnJfMV9QYXJfUmVmIFtJbnRfTG9jXTsKKyAgQXJyXzFfUGFyX1JlZiBbSW50X0xvYyszMF0gPSBJbnRfTG9jOworICBmb3IgKEludF9JbmRleCA9IEludF9Mb2M7IEludF9JbmRleCA8PSBJbnRfTG9jKzE7ICsrSW50X0luZGV4KQorICAgIEFycl8yX1Bhcl9SZWYgW0ludF9Mb2NdIFtJbnRfSW5kZXhdID0gSW50X0xvYzsKKyAgQXJyXzJfUGFyX1JlZiBbSW50X0xvY10gW0ludF9Mb2MtMV0gKz0gMTsKKyAgQXJyXzJfUGFyX1JlZiBbSW50X0xvYysyMF0gW0ludF9Mb2NdID0gQXJyXzFfUGFyX1JlZiBbSW50X0xvY107CisgIEludF9HbG9iID0gNTsKK30gLyogUHJvY184ICovCisKKworRW51bWVyYXRpb24gRnVuY18xIChDYXBpdGFsX0xldHRlciBDaF8xX1Bhcl9WYWwsIENhcGl0YWxfTGV0dGVyIENoXzJfUGFyX1ZhbCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIHRocmVlIHRpbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIGZpcnN0IGNhbGw6ICAgICAgQ2hfMV9QYXJfVmFsID09ICdIJywgQ2hfMl9QYXJfVmFsID09ICdSJyAgICAqLworICAgIC8qIHNlY29uZCBjYWxsOiAgICAgQ2hfMV9QYXJfVmFsID09ICdBJywgQ2hfMl9QYXJfVmFsID09ICdDJyAgICAqLworICAgIC8qIHRoaXJkIGNhbGw6ICAgICAgQ2hfMV9QYXJfVmFsID09ICdCJywgQ2hfMl9QYXJfVmFsID09ICdDJyAgICAqLworeworICBDYXBpdGFsX0xldHRlciAgICAgICAgQ2hfMV9Mb2M7CisgIENhcGl0YWxfTGV0dGVyICAgICAgICBDaF8yX0xvYzsKKworICBDaF8xX0xvYyA9IENoXzFfUGFyX1ZhbDsKKyAgQ2hfMl9Mb2MgPSBDaF8xX0xvYzsKKyAgaWYgKENoXzJfTG9jICE9IENoXzJfUGFyX1ZhbCkKKyAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgIHJldHVybiAoSWRlbnRfMSk7CisgIGVsc2UgIC8qIG5vdCBleGVjdXRlZCAqLworICB7CisgICAgQ2hfMV9HbG9iID0gQ2hfMV9Mb2M7CisgICAgcmV0dXJuIChJZGVudF8yKTsKKyAgIH0KK30gLyogRnVuY18xICovCisKKworCitCb29sZWFuIEZ1bmNfMiAoU3RyXzFfUGFyX1JlZiwgU3RyXzJfUGFyX1JlZikKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KKyAgICAvKiBTdHJfMV9QYXJfUmVmID09ICJESFJZU1RPTkUgUFJPR1JBTSwgMSdTVCBTVFJJTkciICovCisgICAgLyogU3RyXzJfUGFyX1JlZiA9PSAiREhSWVNUT05FIFBST0dSQU0sIDInTkQgU1RSSU5HIiAqLworCitTdHJfMzAgIFN0cl8xX1Bhcl9SZWY7CitTdHJfMzAgIFN0cl8yX1Bhcl9SZWY7Cit7CisgIFJFRyBPbmVfVGhpcnR5ICAgICAgICBJbnRfTG9jOworICAgICAgQ2FwaXRhbF9MZXR0ZXIgICAgQ2hfTG9jOworCisgIENoX0xvYyA9ICdBJzsKKyAgSW50X0xvYyA9IDI7CisgIHdoaWxlIChJbnRfTG9jIDw9IDIpIC8qIGxvb3AgYm9keSBleGVjdXRlZCBvbmNlICovCisgICAgaWYgKEZ1bmNfMSAoU3RyXzFfUGFyX1JlZltJbnRfTG9jXSwKKyAgICAgICAgICAgICAgICBTdHJfMl9QYXJfUmVmW0ludF9Mb2MrMV0pID09IElkZW50XzEpCisgICAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgIHsKKyAgICAgIENoX0xvYyA9ICdBJzsKKyAgICAgIEludF9Mb2MgKz0gMTsKKyAgICB9IC8qIGlmLCB3aGlsZSAqLworICBpZiAoQ2hfTG9jID49ICdXJyAmJiBDaF9Mb2MgPCAnWicpCisgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgSW50X0xvYyA9IDc7CisgIGlmIChDaF9Mb2MgPT0gJ1InKQorICAgIC8qIHRoZW4sIG5vdCBleGVjdXRlZCAqLworICAgIHJldHVybiAodHJ1ZSk7CisgIGVsc2UgLyogZXhlY3V0ZWQgKi8KKyAgeworICAgIGlmIChzdHJjbXAgKFN0cl8xX1Bhcl9SZWYsIFN0cl8yX1Bhcl9SZWYpID4gMCkKKyAgICAgIC8qIHRoZW4sIG5vdCBleGVjdXRlZCAqLworICAgIHsKKyAgICAgIEludF9Mb2MgKz0gNzsKKyAgICAgIEludF9HbG9iID0gSW50X0xvYzsKKyAgICAgIHJldHVybiAodHJ1ZSk7CisgICAgfQorICAgIGVsc2UgLyogZXhlY3V0ZWQgKi8KKyAgICAgIHJldHVybiAoZmFsc2UpOworICB9IC8qIGlmIENoX0xvYyAqLworfSAvKiBGdW5jXzIgKi8KKworCitCb29sZWFuIEZ1bmNfMyAoRW51bV9QYXJfVmFsKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBleGVjdXRlZCBvbmNlICAgICAgICAqLworICAgIC8qIEVudW1fUGFyX1ZhbCA9PSBJZGVudF8zICovCitFbnVtZXJhdGlvbiBFbnVtX1Bhcl9WYWw7Cit7CisgIEVudW1lcmF0aW9uIEVudW1fTG9jOworCisgIEVudW1fTG9jID0gRW51bV9QYXJfVmFsOworICBpZiAoRW51bV9Mb2MgPT0gSWRlbnRfMykKKyAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgIHJldHVybiAodHJ1ZSk7CisgIGVsc2UgLyogbm90IGV4ZWN1dGVkICovCisgICAgcmV0dXJuIChmYWxzZSk7Cit9IC8qIEZ1bmNfMyAqLworCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1NWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9oZWxsby9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACitzcmNfZGlyIDo9ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisKK2Nfc3JjIDo9IHNjX3ByaW50LmMgaGVsbG8uYworCitpbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCisKK2RlZmF1bHQ6IGxvZ19yZXF1ZXN0ZWRfdGd0ICQoYmxkX2RpcikvaGVsbG8uZWxmICQoYmxkX2RpcikvaGVsbG8uaGV4ICQoYmxkX2RpcikvaGVsbG8uZHVtcAorCitsb2dfcmVxdWVzdGVkX3RndDoKKwllY2hvIGhlbGxvLmhleD4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisKK2NsZWFuOgorCSQoUk0pICQoY19vYmpzKSAkKGFzbV9vYmpzKSAkKGJsZF9kaXIpL2hlbGxvLmVsZiAkKGJsZF9kaXIpL2hlbGxvLmhleCAkKGJsZF9kaXIpL2hlbGxvLmR1bXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vaGVsbG8uYyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9oZWxsby9oZWxsby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNWM2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vaGVsbG8uYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlICJzY19wcmludC5oIgorCitpbnQgbWFpbigpCit7CisgICAgc2NfcHJpbnRmKCJIZWxsbyBmcm9tIFlDUjEhXG4iKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM5NWU3NAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjYgQEAKK3NyY19kaXIgOj0gJChkaXIgJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkKKworTERGTEFHUyA6PSAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9JChBQkkpCitBRERfQVNNX01BQ1JPIDo9IC1EQVNNCisKK2lmZXEgKCQoSVBJQykgLDEpCisgICAgQUREX0FTTV9NQUNSTyArPSAtRElQSUNfRU5BQkxFRAorZW5kaWYKKworaWZlcSAoJChWRUNUX0lSUSkgLDEpCisgICAgQUREX0FTTV9NQUNSTyArPSAtRFZFQ1RfSVJRX0VOQUJMRUQKK2VuZGlmCithc21fc3JjIDo9IGlzcl9zYW1wbGUuUworCisjIG92ZXJyaWRlIGxkIHNjcmlwdAorbGRfc2NyaXB0IDo9ICQoaW5jX2RpcikvbGluay5sZAorCitpbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCisKK2RlZmF1bHQ6IGxvZ19yZXF1ZXN0ZWRfdGd0ICQoYmxkX2RpcikvaXNyX3NhbXBsZS5lbGYgJChibGRfZGlyKS9pc3Jfc2FtcGxlLmhleCAkKGJsZF9kaXIpL2lzcl9zYW1wbGUuZHVtcAorCitsb2dfcmVxdWVzdGVkX3RndDoKKwllY2hvIGlzcl9zYW1wbGUuaGV4ID4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisKK2NsZWFuOgorCSQoUk0pJChhc21fb2JqcykgJChibGRfZGlyKS9pc3Jfc2FtcGxlLmVsZiAkKGJsZF9kaXIpL2lzcl9zYW1wbGUuaGV4ICQoYmxkX2RpcikvaXNyX3NhbXBsZS5kdW1wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvaXNyX3NhbXBsZS5TIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvaXNyX3NhbXBsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjNkNjMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS9pc3Jfc2FtcGxlLlMKQEAgLTAsMCArMSwyOTEgQEAKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKyNpbmNsdWRlICJzY190ZXN0LmgiCisKKy5hbHRtYWNybworLy8gZ2xvYmFsIGludGVycnVwdCBiaXQKKyNkZWZpbmUgTVNJRSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IElSUV9NX1NPRlQpICAgICAgIC8vbWFjaGluZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lIE1USUUgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBJUlFfTV9USU1FUikgICAgICAvL21hY2hpbmUgdGltZXIgaW50ZXJydXB0IGVuYWJsZQorI2RlZmluZSBNRUlFICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgSVJRX01fRVhUKSAgICAgICAgLy9tYWNoaW5lIGV4dGVybmFsIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgTUNBVVNFX0VYVF9JUlEgICAgICAgICAgICAgICgxIDw8IDMxIHwgSVJRX01fRVhUKQorI2RlZmluZSBNQ0FVU0VfU09GVF9JUlEgICAgICAgICAgICAgKDEgPDwgMzEgfCBJUlFfTV9TT0ZUKQorI2RlZmluZSBNQ0FVU0VfVE1SX0lSUSAgICAgICAgICAgICAgKDEgPDwgMzEgfCBJUlFfTV9USU1FUikKKworLy8gSVBJQworI2RlZmluZSBJUlFfTElORVNfQUREUiAgICAgICAgICAgICAgMHgxMDAyMDAxOCAgICAgIC8vIHNpbXVsYXRpb24KKyNkZWZpbmUgVFJJR19FWFRfSVJRX0FERFIgICAgICAgICAgIDB4MTAwMjAwMTggICAgICAvLyBleHRlcm5hbCBpcnEgaXMgdHJpZ2dlcmVkIHdoZW4gdGIgbWVtb3J5IGlzIHNldCB0byBub24temVybyAvLyBCaXQgWzE1OjBdCisjZGVmaW5lIFRSSUdfU1dfSVJRX0FERFIgICAgICAgICAgICAweDEwMDIwMDE4ICAgICAgLy8gc29mdHdhcmUgaXJxIGlzIHRyaWdnZXJlZCB3aGVuIHRiIG1lbW9yeSBpcyBzZXQgdG8gbm9uLXplcm8gLy8gQml0IFsxNl0KKworI2RlZmluZSBJUElDX0VPSSAgICAgICAgICAgICAgICAgICAgMHhCRjQgICAgICAgICAgIC8vIGVuZCBvZiBpbnRlcnJ1cHQKKyNkZWZpbmUgSVBJQ19TT0kgICAgICAgICAgICAgICAgICAgIDB4QkY1ICAgICAgICAgICAvLyBzdGFydCBvZiBpbnRlcnJ1cHQKKyNkZWZpbmUgSVBJQ19JRFggICAgICAgICAgICAgICAgICAgIDB4QkY2ICAgICAgICAgICAvLyBpbmRleCByZWdpc3RlcgorI2RlZmluZSBJUElDX0lDU1IgICAgICAgICAgICAgICAgICAgMHhCRjcgICAgICAgICAgIC8vIGludGVycnVwdCBjb250cm9sIHN0YXR1cyByZWdpc3RlcgorCisvLyBJUElDIEludGVycnVwdCBDb25zdHJvbCBTdGF0dXMgUmVnaXN0ZXIKKyNkZWZpbmUgSVBJQ19JQ1NSX0lQICAgICAgICAgICAgICAgICgxIDw8IDApICAgICAgICAvLyBpbnRlcnJ1cHQgcGVuZGluZworI2RlZmluZSBJUElDX0lDU1JfSUUgICAgICAgICAgICAgICAgKDEgPDwgMSkgICAgICAgIC8vIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgSVBJQ19JQ1NSX0lNICAgICAgICAgICAgICAgICgxIDw8IDIpICAgICAgICAvLyBpbnRlcnJ1cHQgbW9kZSAoMC8xOiBsZXZlbC9lZGdlKQorI2RlZmluZSBJUElDX0lDU1JfSU5WICAgICAgICAgICAgICAgKDEgPDwgMykgICAgICAgIC8vIGxpbmUgaW52ZXJzaW9uCisjZGVmaW5lIElQSUNfSUNTUl9JUyAgICAgICAgICAgICAgICAoMSA8PCA0KSAgICAgICAgLy8gaW4gc2VydmljZQorCisvLyAgSW50ZXJydXB0IGxpbmVzIGluIHVzZSAKKyNkZWZpbmUgSVBJQ19JUlFfTElORTkgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRVhUX0lSUV9MSU5FX0NPTU1PTiAgICAgICAgIDAKKworI2luY2x1ZGUgInRpbWVyLmgiCisjaW5jbHVkZSAicmVsb2MuaCIKKworLm1hY3JvIGptcF9zY19leGl0CisgICAgbGEgIHQwLCBzY19leGl0CisgICAganIgIHQwCisuZW5kbQorCisgICAgLnNlY3Rpb24gLnRleHQuaW5pdAorICAgIC5vcHRpb24gbm9ydmMKKyAgICAuZ2xvYmwgX3N0YXJ0CisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRyYXAgaGFuZGxlcnMKKy8vIDB4WFhYWFhYMDAKKyAgICAub3B0aW9uIG5vcnZjCisub3JnICg2NCozKQorCisvLzB4WFhYWFhYQzAKKyAgICAuYmFsaWduIDY0CittYWNoaW5lX3RyYXBfZW50cnk6Cit2ZWNfdXNyX3NvZnQ6CisjaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorICAgIHRyYXBfZW50cnk6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3NvZnQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19yZXNlcnZlZDE6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19tYWNoaW5lX3NvZnQ6CisgICAgICAgIGogICAgdmVjX21hY2hpbmVfc29mdF9oYW5kbGVyCisgICAgdmVjX3Vzcl90bXI6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3RtcjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfdG1yOgorICAgICAgICBqICAgIHZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyCisgICAgdmVjX3Vzcl9leHQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX2V4dDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMzoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfZXh0OgorICAgICAgICBqICAgIHZlY19tYWNoaW5lX2V4dF9oYW5kbGVyCisgICAgdmVjX3Jlc2VydmVkNDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisjZWxzZQorICAgIHRyYXBfZW50cnk6CisgICAgICAgIGogICAgZGlyZWN0X2lycV9oYW5kbGVyCisgICAgdmVjX3N1cGVydmlzb3Jfc29mdDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMToKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfc29mdDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Vzcl90bXI6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3RtcjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfdG1yOgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfdXNyX2V4dDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3N1cGVydmlzb3JfZXh0OgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfcmVzZXJ2ZWQzOgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfbWFjaGluZV9leHQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19yZXNlcnZlZDQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgICAgIGogICAgX3RyYXBfZmFpbAorCisjZW5kaWYgLy8gaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorCisKKyAgICAuYmFsaWduIDY0Citfc3RhcnQ6CisgICAgbGEgICAgICAgICAgICAgICAgICB0MCwgbWFjaGluZV90cmFwX2VudHJ5CisgICAgY3NydyAgICAgICAgICAgICAgICBtdHZlYywgdDAKKworICAgIGxhICAgICAgICAgICAgICAgICAgdDAsICB0ZXN0X3N0YXJ0CisgICAganIgICAgICAgICAgICAgICAgICAodDApCisKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC5vcHRpb24gbm9ydmMKKyAgICAuYmFsaWduIDY0Cit0ZXN0X3N0YXJ0OgorICAgIAorICAgIGxhICAgICAgICAgICAgICAgICAgdDAsIHRyYXBfZW50cnkKKyAgICBjc3J3ICAgICAgICAgICAgICAgIG10dmVjLCB0MCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IG10dmVjIHRvIHRyYXBfZW50cnkKKyAgICAjaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorICAgICAgICBjc3JzaSAgICAgICAgICAgICAgIG10dmVjLCAxICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmVjdG9yZWQgbW9kZQorICAgICNlbHNlCisgICAgICAgIGNzcnNpICAgICAgICAgICAgICAgbXR2ZWMsIDAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBkaXJlY3QgbW9kZQorICAgICNlbmRpZgorCisgICAgLy8vIGNvbmZpZ3VyaW5nIHRpbWVyIGludGVycnVwdCAvLy8gCisgICAgX3Jlc2V0X210aW1lY21wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgdGltZXIKKyAgICBfcnVuX3RpbWVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydW4gdGltZXIKKyAgICBjc3JzICAgICAgICAgICAgICAgIG1zdGF0dXMsIE1TVEFUVVNfTUlFICAgICAgICAgICAvLyBlbmFibGUgZ2xvYmFsIGludGVycnVwdAorICAgIGxpICAgICAgICAgICAgICAgICAgYTAsIE1USUUgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGNzcnMgICAgICAgICAgICAgICAgbWllLCBhMCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSB0aW1lciBpbnRlcnJ1cHQKKyAgICBsaSAgICAgICAgICAgICAgICAgIHQyLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCB0aW1lciBjb3VudGVyID0gMCAodXBkYXRlZCBpbiBpc3IpCisgICAgX3JlYWRfbXRpbWUgICAgICAgICBzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCB0aW1lciB2YWx1ZQorICAgIGFkZGkgICAgICAgICAgICAgICAgczEsIHMxLCAyNTYKKyAgICBfd3JpdGVfbXRpbWVjbXBfMzIgIHMxIAorICAgIHdmaSAgCisKKworICAgLy8vIGNvbmZpZ3VyaW5nIGV4dGVybmFsIGludGVycnVwdCAvLy8gCisgICAgY3NydyAgICAgICAgICAgICAgICBtaWUsIHplcm8gICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cworICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIElSUV9MSU5FU19BRERSCisgICAgc2ggICAgICAgICAgICAgICAgICB6ZXJvLCAodDApICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGFsbCBleHRlcmluYWwgaW50ZXJydXB0IGxpbmVzIGxvdworICAgICNpZmRlZiBJUElDX0VOQUJMRUQKKyAgICAgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgSVBJQ19JUlFfTElORTkKKyAgICAgICAgY3NydyAgICAgICAgICAgICAgICBJUElDX0lEWCwgdDAgICAgICAgICAgICAgICAvLyBzZXQgSVBJQyB0byBleHBlY3QgaW50ZXJ1cHQgb24gbGluZSA5Li4uCisgICAgICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIChJUElDX0lDU1JfSUUgfCBJUElDX0lDU1JfSU0pCisgICAgICAgIGNzcncgICAgICAgICAgICAgICAgSVBJQ19JQ1NSLCB0MCAgICAgICAgICAgICAgLy8gIC4uLi5lbmFibGUgaW50ZXJydXB0LHNldCBlZGdlIGludGVycnVwdCBtb2RlCisgICAgI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgTUVJRQorICAgIGNzcnMgICAgICAgICAgICAgICAgbWllLCB0MCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHQgCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgVFJJR19FWFRfSVJRX0FERFIKKyAgICAjaWZkZWYgSVBJQ19FTkFCTEVEICAgICAgICAgIAorICAgICAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAoMSA8PCBJUElDX0lSUV9MSU5FOSkKKyAgICAjZWxzZQorICAgICAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAoMSA8PCBFWFRfSVJRX0xJTkVfQ09NTU9OKQorICAgICNlbmRpZgorICAgIHNoICAgICAgICAgICAgICAgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgICAgICAgIC8vc2VuZCBjb21tYW5kIHRvIGdlbmVyYXRlIGV4dGVybmFsIGludGVycnVwdCBvbiBsaW5lIDkgdG8gdGVzdGJlbmNoCisgICAgbm9wCisgICAgbm9wCisgICAgbm9wCisgICAgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0IGZvciBleHRlcm5hbCBpbnRlcnJ1cHQKKworCisgICAgLy8vIGNvbmZpZ3VyaW5nIHNvZnR3YXJlIGludGVycnVwdCAvLy8gCisgICAgY3NydyAgICAgICAgICAgICAgICBtaWUsIHplcm8gICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cworICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIFRSSUdfU1dfSVJRX0FERFIKKyAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAweDAwMDEwMDAwICAgICAgICAgICAgICAgICAvLyBTb2Z0IGlyZXEgYml0IFsxNl0gCisgICAgc3cgICAgICAgICAgICAgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAgICAgICAgLy9zZW5kIGNvbW1hbmQgdG8gZ2VuZXJhdGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIE1TSUUKKyAgICBjc3JzICAgICAgICAgICAgICAgIG1pZSwgdDAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmFibGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIG5vcAorICAgIG5vcAorICAgIG5vcAorICAgIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2FpdCBmb3Igc29mdHdhcmUgaW50ZXJydXB0CisKKyAgICBsaSAgICAgICAgICAgICAgICAgIHMxLCAzCisgICAgbGkgICAgICAgICAgICAgICAgICBhMCwgMAorICAgIGJlcSAgICAgICAgICAgICAgICAgdDIsIHMxLCAxZgorICAgIGxpICAgICAgICAgICAgICAgICAgYTAsIC0xCisxOgorICAgIGptcF9zY19leGl0CisKKworI2lmbmRlZiBWRUNUX0lSUV9FTkFCTEVECisKK2RpcmVjdF9pcnFfaGFuZGxlcjoKKyAgICBjc3JyICAgICAgICAgICAgYTEsIG1jYXVzZQorICAgIGxpICAgICAgICAgICAgICBhNSwgTUNBVVNFX1RNUl9JUlEgICAgICAvLzB4ODAwMDAwMDcgLS0gbWNhdXNlID0gdG1yLmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfU09GVF9JUlEgICAgIC8vMHg4MDAwMDAwMyAtLSBtY2F1c2UgPSBzb2Z0LmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX3NvZnRfaGFuZGxlcgorICAgIGxpICAgICAgICAgICAgICBhNSwgTUNBVVNFX0VYVF9JUlEgICAgICAvLzB4ODAwMDAwMEIgLS0gbWNhdXNlID0gZXh0LmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX2V4dF9oYW5kbGVyCisgICAgbXJldAorI2VuZGlmCisKK3ZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyOgorICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfVE1SX0lSUSAgICAgIC8vMHg4MDAwMDAwNyAtLSBtY2F1c2UgPSB0bXIuaXJxCisgICAgbGkgICAgICAgICAgICAgIGEwLCAtMQorICAgIGJuZSAgICAgICAgICAgICBhMSwgYTUsIGNoZWNrX2ZhaWwKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01USVAKKyAgICBhbmQgICAgICAgICAgICAgdDAsIHQxLCB0MAorICAgIGJlcXogICAgICAgICAgICB0MCwgY2hlY2tfZmFpbAorI2lmZGVmIElQSUNfRU5BQkxFRAorICAgIGNzcncgICAgICAgICAgICBJUElDX1NPSSwgemVybworICAgIGNzcncgICAgICAgICAgICBJUElDX0VPSSwgemVybworI2VuZGlmCisgICAgX3Jlc2V0X210aW1lY21wCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBhbmRpICAgICAgICAgICAgdDEsIHQxLCBNSVBfTVRJUAorICAgIGJuZSAgICAgICAgICAgICB0MSwgemVybywgY2hlY2tfZmFpbAorICAgIGFkZGkgICAgICAgICAgICB0MiwgdDIsIDEgICAgICAgICAgICAgICAvLyB0bXIgaXJxIGNvdW50ZXIgdXBkYXRlCisgICAgbXJldAorCit2ZWNfbWFjaGluZV9leHRfaGFuZGxlcjoKKworICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfRVhUX0lSUSAgICAgIC8vMHg4MDAwMDAwQiAtLSBtY2F1c2UgPSBleHQuaXJxCisgICAgbGkgICAgICAgICAgICAgIGEwLCAtMQorICAgIGJuZSAgICAgICAgICAgICBhMSwgYTUsIGNoZWNrX2ZhaWwKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01FSVAKKyAgICBhbmQgICAgICAgICAgICAgdDAsIHQxLCB0MAorICAgIGJlcXogICAgICAgICAgICB0MCwgY2hlY2tfZmFpbAorI2lmZGVmIElQSUNfRU5BQkxFRAorICAgIGNzcncgICAgICAgICAgICBJUElDX1NPSSwgemVybworICAgIGNzcncgICAgICAgICAgICBJUElDX0VPSSwgemVybworI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgTUVJRQorICAgIGNzcmMgICAgICAgICAgICAgICAgbWllLCB0MCAgICAgICAgICAgICAvLyBkaXNhYmxlIHNvZnR3YXJlIGludGVycnVwdCAKKworICAgIGxpICAgICAgICAgICAgICB0MCwgVFJJR19FWFRfSVJRX0FERFIKKyAgICBsaSAgICAgICAgICAgICAgdDEsIEVYVF9JUlFfTElORV9DT01NT04gICAgICAgICAKKyAgICBzaCAgICAgICAgICAgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgLy8gc2VuZCBjb21tYW5kIHRvIGRpc2FibGUgZXh0ZXJuYWwgaW50ZXJydXB0IAorICAgICAKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01FSVAKKyAgICBibmUgICAgICAgICAgICAgdDEsIHplcm8sIGNoZWNrX2ZhaWwKKyAgICBhZGRpICAgICAgICAgICAgdDIsIHQyLCAxICAgICAgICAgICAgICAgLy8gZXh0IGlycSBjb3VudGVyIHVwZGF0ZQorICAgIG1yZXQKKwordmVjX21hY2hpbmVfc29mdF9oYW5kbGVyOgorICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfU09GVF9JUlEgICAgIC8vMHg4MDAwMDAwMyAtLSBtY2F1c2UgPSBzb2Z0LmlycQorICAgIGxpICAgICAgICAgICAgICBhMCwgLTEKKyAgICBibmUgICAgICAgICAgICAgYTEsIGE1LCBjaGVja19mYWlsCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBsaSAgICAgICAgICAgICAgdDAsIE1JUF9NU0lQCisgICAgYW5kICAgICAgICAgICAgIHQwLCB0MSwgdDAKKyAgICBiZXF6ICAgICAgICAgICAgdDAsIGNoZWNrX2ZhaWwKKyAgICAjaWZkZWYgSVBJQ19FTkFCTEVECisgICAgICAgY3NydyAgICAgICAgIElQSUNfU09JLCB6ZXJvCisgICAgICAgY3NydyAgICAgICAgIElQSUNfRU9JLCB6ZXJvCisgICAgI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgIHQwLCBNU0lFCisgICAgY3NyYyAgICAgICAgICAgIG1pZSwgdDAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIGxpICAgICAgICAgICAgICB0MCwgVFJJR19TV19JUlFfQUREUgorICAgIGxpICAgICAgICAgICAgICB0MSwgMHgwMDAwMDAwMAorICAgIHN3ICAgICAgICAgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAvLyBzZW5kIGNvbW1hbmQgdG8gc3RvcCBnZW5lcmF0aW5nICBzb2Z0d2FyZSBpbnRlcnJ1cHQgCisgICAgbGkgICAgICAgICAgICAgIHQwLCBNSVBfTVNJUAorICAgIGNzcmMgICAgICAgICAgICBtaXAsIHQwCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBsaSAgICAgICAgICAgICAgdDAsIE1JUF9NU0lQCisgICAgYW5kICAgICAgICAgICAgIHQxLCB0MSwgdDAKKyAgICBibmUgICAgICAgICAgICAgdDEsIHplcm8sIGNoZWNrX2ZhaWwKKyAgICBhZGRpICAgICAgICAgICAgdDIsIHQyLCAxICAgICAgICAgICAgICAgLy8gZXh0IGlycSBjb3VudGVyIHVwZGF0ZQorICAgIG1yZXQKKworY2hlY2tfZmFpbDoKKyAgICBsYSAgICAgICAgICAgICAgdDAsIHNjX2V4aXQKKyAgICBqciAgICAgICAgICAgICAgdDAKKworX3RyYXBfZmFpbDoKKyAgICBsaSAgICAgICAgICAgICAgYTAsIC0xCisgICAgaiAgICAgICAgICAgICAgIGNoZWNrX2ZhaWwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL3RpbWVyLmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyN2I4NDkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS90aW1lci5oCkBAIC0wLDAgKzEsOTcgQEAKKyNpZm5kZWYgX19USU1FUl9fSAorI2RlZmluZSBfX1RJTUVSX19ICisKKworCisjZGVmaW5lIE1FTV9NVElNRV9NQVNLICAweEYwMDAwMDAwCisjZGVmaW5lIE1FTV9NVElNRV9DVFJMICAweDBDNDkwMDAwCisjZGVmaW5lIE1FTV9NVElNRV9ESVYgICAweDBDNDkwMDA0CisjZGVmaW5lIE1FTV9NVElNRSAgICAgICAweDBDNDkwMDA4CisjZGVmaW5lIE1FTV9NVElNRUggICAgICAweDBDNDkwMDBDCisjZGVmaW5lIE1FTV9NVElNRUNNUCAgICAweDBDNDkwMDEwCisjZGVmaW5lIE1FTV9NVElNRUNNUEggICAweDBDNDkwMDE0CisKKyNkZWZpbmUgVE1QICAgdDAKKyNkZWZpbmUgVE1QMiAgdDEKKyNkZWZpbmUgVE1QMyAgdDIKKworLy8gUmVzZXQKKy5tYWNybyBfcmVzZXRfbXRpbWUKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRQorICAgIHN3ICAgICAgICAgIHplcm8sIDAoVE1QKQorICAgIHN3ICAgICAgICAgIHplcm8sIDQoVE1QKQorLmVuZG0KKworLm1hY3JvIF9yZXNldF9tdGltZWNtcAorICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FQ01QCisgICAgbm90ICAgICAgICAgVE1QMiwgemVybworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIHN3ICAgICAgICAgIFRNUDIsIDQoVE1QKQorLmVuZG0KKworLy8gV3JpdGUKKy5tYWNybyBfd3JpdGVfbXRpbWVfY3RybCByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRV9DVFJMCisgICAgc3cgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisubWFjcm8gX3dyaXRlX210aW1lX2RpdiByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRV9ESVYKKyAgICBzdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfd3JpdGVfbXRpbWVjbXBfMzIgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVDTVAKKyAgICBsaSAgICAgICAgICBUTVAyLCAtMQorICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIHN3ICAgICAgICAgIHplcm8sIDQoVE1QKQorICAgIHN3ICAgICAgICAgIFxyZWcsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF93cml0ZV9tdGltZSByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRQorICAgIHN3ICAgICAgICAgIFxyZWcsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF9yZWFkX210aW1lIHJlZworICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FCisgICAgbHcgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisvLyBSZWFkCisubWFjcm8gX3JlYWRfbXRpbWVjbXAgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVDTVAKKyAgICBsdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfcmVhZF9tdGltZV9jdHJsIHJlZworICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FX0NUUkwKKyAgICBsdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfcmVhZF9tdGltZV9kaXYgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVfRElWCisgICAgbHcgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisvLyBNaXNjCisubWFjcm8gX3J1bl90aW1lcgorICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FX0NUUkwKKyAgICBsdyAgICAgICAgICBUTVAyLCAwKFRNUCkKKyAgICBsaSAgICAgICAgICBUTVAzLCAoMSA8PCBZQ1IxX01USU1FX0NUUkxfRU4pCisgICAgb3IgICAgICAgICAgVE1QMiwgVE1QMiwgVE1QMworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF9zdG9wX3RpbWVyCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVfQ1RSTAorICAgIGx3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIGxpICAgICAgICAgIFRNUDMsICgxIDw8IFlDUjFfTVRJTUVfQ1RSTF9FTikKKyAgICBub3QgICAgICAgICBUTVAzLCBUTVAzCisgICAgYW5kICAgICAgICAgVE1QMiwgVE1QMiwgVE1QMworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorLmVuZG0KKworCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fVElNRVJfX0gKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmM2Q1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjAwIEBACisjIyBAZmlsZQorIyMgIFlDUiogdGVzdHMKKyMjCisjIworCitBUkNIID89aW0KK292ZXJyaWRlIEFSQ0g6PXJ2MzIkKEFSQ0gpCisKK3NyY19kaXIgICAgICAgOj0gJChDVVJESVIpCitSSVNDVl9DT01QTElBTkNFX1RFU1RTIDo9ICQoc3JjX2RpcikvLi4vLi4vZGVwZW5kZW5jaWVzL3Jpc2N2LWNvbXBsaWFuY2UvCisKKyNJIElNIElNQyBJQworI0VNIEVNQyBFQworCitpZmVxIChydjMyZSwkKGZpbmRzdHJpbmcgcnYzMmUsJChBUkNIKSkpCisgICAgJChpbmZvID4+PiBSVjMyRSAtIG5vIGNvbXBsaWFuY2UgdGVzdHMpCitlbHNlICMjIGlmZGVmIFlDUl9CQVNFX1JWRV9FWFQKKyAgI2lmZXEgKHJ2MzJpLCQoZmluZHN0cmluZyBydjMyaSwkKEFSQ0gpKSkKKyAgaWZlcSAoJChBUkNIKSwkKGZpbHRlciAkKEFSQ0gpLHJ2MzJpIHJ2MzJpbSBydjMyaW1jIHJ2MzJpYykpCisgICAgJChpbmZvID4+PiBJMzIgVEVTVFMpCisgICAgaW5jbHVkZWRfaSArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMmkvc3JjLyopKQorCWluY2x1ZGVkX2kgKz0gJChmaWx0ZXIgJS5TLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICQod2lsZGNhcmQgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKS9yaXNjdi10ZXN0LXN1aXRlL3J2MzJaaWNzci9zcmMvKikpCisJaW5jbHVkZWRfaSArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMlppZmVuY2VpL3NyYy8qKSkKKyAgICBjb21wbGlhbmNlX3NldCArPSAkKGluY2x1ZGVkX2kpCisgIGVuZGlmCisKKyAgIyQoaWYgb3IgaWZlcShydjMyaW0sJChmaW5kc3RyaW5nIHJ2MzJpbSwkKEFSQ0gpKSksIChydjMyaW1jLCQoZmluZHN0cmluZyBydjMyaW1jLCQoQVJDSCkpKSkKKyAgaWZlcSAoJChBUkNIKSwkKGZpbHRlciAkKEFSQ0gpLCBydjMyaW0gcnYzMmltYykpCisgICAgJChpbmZvID4+PiBJTTMyIFRFU1RTKQorICAgIGluY2x1ZGVkX2ltICs9ICQoZmlsdGVyICUuUyxcCisgICAgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykvcmlzY3YtdGVzdC1zdWl0ZS9ydjMyaW0vc3JjLyopKQorICAgIGNvbXBsaWFuY2Vfc2V0ICs9ICQoaW5jbHVkZWRfaW0pCisgIGVuZGlmICMjCisKKyAgaWZlcSAocnYzMmltYywkKGZpbmRzdHJpbmcgcnYzMmltYywkKEFSQ0gpKSkKKyAgICAkKGluZm8gPj4+IElNQzMyIFRFU1RTKQorICAgIGluY2x1ZGVkX2ltYyArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMmltYy9zcmMvKikpCisgICAgY29tcGxpYW5jZV9zZXQgKz0gJChpbmNsdWRlZF9pbWMpCisgIGVuZGlmICMjIGlmZXEgKHJ2MzJpbWMsJChmaW5kc3RyaW5nIHJ2MzJpbWMsJChBUkNIKSkpCisgIGlmZXEgKHJ2MzJpYywkKGZpbmRzdHJpbmcgcnYzMmljLCQoQVJDSCkpKQorICBlbmRpZgorZW5kaWYgIyMKKworCiskKGluZm8gPj4+JChBUkNIKSBzZXQgaW5jbHVkZWQpCisKK2lmZXEgKCQoY29tcGxpYW5jZV9zZXQpLCkKKyQoaW5mbyA+Pj4gTm8gY29tcGxpYW5jZSB0ZXN0cyBpbmNsdWRlZCkKK2VuZGlmCisKKyQoaW5mbyA+Pj4+PiBjb21wbGlhbmNlIHNldDogJChjb21wbGlhbmNlX3NldCkpCisKK2RzdF9kaXIgICAgICAgOj0gJChibGRfZGlyKQordGVzdF9uYW1lICAgICA6PSByaXNjdl9jb21wbGlhbmNlCitibGRfZGlyICAgICAgIDo9ICQoYWRkcHJlZml4ICQoZHN0X2RpcikvLCAkKHRlc3RfbmFtZSkpCitvYmpfZGlyICAgICAgIDo9ICQoYmxkX2RpcikvcmlzY3ZfY29tcGxpYW5jZV9vYmpzCisKKyNjdXRfbGlzdCAgICAgICs9IHNjYWxsIGNzciBzaGFtdCBzaW1wbGUKK2N1dF9saXN0ICs9IEktTUlTQUxJR05fSk1QLTAxIEktTUlTQUxJR05fTERTVC0wMSBJLUVCUkVBSy0wMSBJLUVDQUxMLTAxCityZWZlcmVuY2Vfc3JjICs9ICQod2lsZGNhcmQgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKS9yaXNjdi10ZXN0LXN1aXRlL3J2MzJpKi8qLyoucmVmZXJlbmNlX291dHB1dCkKK3JlZmVyZW5jZV9zcmMgKz0gJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMlppKi8qLyoucmVmZXJlbmNlX291dHB1dCkKK3Rlc3RuYW1lcyAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGNvbXBsaWFuY2Vfc2V0KSkpCitmaWx0ZXJlZCAgICAgIDo9ICQoZmlsdGVyLW91dCAkKGN1dF9saXN0KSwkKHRlc3RuYW1lcykpCitvYmpzICAgICAgICAgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQoZmlsdGVyZWQ6JT0lLm8pKQordGVzdF9lbGYgICAgICA6PSAkKGFkZHByZWZpeCAkKGRzdF9kaXIpL2NvbXBsaWFuY2VfLCQoZmlsdGVyZWQ6JT0lLmVsZikpCit0ZXN0X2hleCAgICAgIDo9ICQoYWRkcHJlZml4ICQoZHN0X2RpcikvY29tcGxpYW5jZV8sJChmaWx0ZXJlZDolPSUuaGV4KSkKK3Rlc3RfZHVtcCAgICAgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS9jb21wbGlhbmNlXywkKGZpbHRlcmVkOiU9JS5kdW1wKSkKKworY29tcGxpYW5jZV9tYWNyb3NfZmlsZSA6PSAkKHJvb3RfZGlyKS90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2NvbXBsaWFuY2VfaW8uaAorY29tcGxpYW5jZV9vdXRwdXQgPz0gdHJ1ZQorCit0ZXN0bmFtZXNfaSAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGluY2x1ZGVkX2kpKSkKK3Rlc3RuYW1lc19pbSAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGluY2x1ZGVkX2ltKSkpCit0ZXN0bmFtZXNfaW1jICAgICA6PSAkKGJhc2VuYW1lICQobm90ZGlyICQoaW5jbHVkZWRfaW1jKSkpCitmaWx0ZXJlZF9pICAgICAgOj0gJChmaWx0ZXItb3V0ICQoY3V0X2xpc3QpLCQodGVzdG5hbWVzX2kpKQorZmlsdGVyZWRfaW0gICAgICA6PSAkKGZpbHRlci1vdXQgJChjdXRfbGlzdCksJCh0ZXN0bmFtZXNfaW0pKQorZmlsdGVyZWRfaW1jICAgICAgOj0gJChmaWx0ZXItb3V0ICQoY3V0X2xpc3QpLCQodGVzdG5hbWVzX2ltYykpCisKKyMgQVJDSF9GTEFHUyA6PSAtV2EsLW1hcmNoPXJ2MzJpbSAtbWFyY2g9cnYzMmltCisjIEFSQ0hfRkxBR1NfQyA6PSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMKK0NGTEFHUyA6PSAtSSQoaW5jX2RpcikgLUkkKHNyY19kaXIpIC1EQVNNIC1tYWJpPWlscDMyIC1EX19yaXNjdl94bGVuPTMyIC13CitMREZMQUdTIDo9IC1zdGF0aWMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtVCQoaW5jX2RpcikvbGluay5sZCAtbWFyY2g9JChBUkNIKSAtbWFiaT1pbHAzMgorR0NDVkVSU0lPTkdUNyA6PSAkKHNoZWxsIGV4cHIgYCQoUklTQ1ZfR0NDKSAtZHVtcGZ1bGx2ZXJzaW9uIHwgY3V0IC1mMSAtZCcuJ2AgXD4gNykKK2lmZXEgIiQoR0NDVkVSU0lPTkdUNykiICIxIgorCUxERkxBR1MgKz0gLW1uby1yZWxheAorZW5kaWYKK1ZQQVRIICs9ICQoc3JjX2RpcikgJChibGRfZGlyKSAkKG9ial9kaXIpICQoYXNtX3BhdGgpICQocmVmX3BhdGgpICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykKKworaWZlcSAoJChjb21wbGlhbmNlX291dHB1dCksIHRydWUpCitDRkxBR1MgKz0gLURfQ09NUExJQU5DRV9PVVRQVVQKK2VuZGlmCisKK2RlZmF1bHQ6IGNsZWFuIGxvZ19yZXF1ZXN0ZWRfdGd0IGNoZWNrX3ZlcnNpb24gY3BfYXNtIHJlZl9kYXRhICQodGVzdF9lbGYpICQodGVzdF9oZXgpICQodGVzdF9kdW1wKQorCitkZWZpbmUgY29tcGlsZV90ZW1wbGF0ZQorJChvYmpfZGlyKS8kKDEpLm86ICQob2JqX2RpcikgY3BfYXNtCisJJChSSVNDVl9HQ0MpIC1jICQkKGJsZF9kaXIpL2NvbXBsaWFuY2VfYXNtLyQoMSkuUyAkJChDRkxBR1MpIC1XYSwkKDIpICQoMikgLW8gJCRACitlbmRlZgorCitkZWZpbmUgcHJlcHJvY2Vzc2luZworZm9yIHRlc3RfYXNtIGluICQoMSk7IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCittYXJjaF90bXA9JCR0ZXN0X2FzbSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK21hcmNoX3RtcD0kJHttYXJjaF90bXAlL3NyYyp9IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbWFyY2hfdG1wPSQkKGJhc2VuYW1lICQkbWFyY2hfdG1wKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitmaWxlX25hbWU9IiQkKGJhc2VuYW1lICQke3Rlc3RfYXNtfSkiIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyQoUklTQ1ZfR0NDKSAkKENGTEFHUykgLVdhLCQoMikgJCgyKSAtRSAkJHRlc3RfYXNtICAgICAgICAgICAgICAgICAgICAgICAgXAorLW8gJChibGRfZGlyKS9jb21wbGlhbmNlX2FzbS8kJGZpbGVfbmFtZSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkb25lCitlbmRlZgorCiskKGZvcmVhY2ggU1JDLCQoZmlsdGVyZWRfaSksJChldmFsICQoY2FsbCBjb21waWxlX3RlbXBsYXRlLCQoU1JDKSwtbWFyY2g9cnYzMmkpKSkKKyQoZm9yZWFjaCBTUkMsJChmaWx0ZXJlZF9pbSksJChldmFsICQoY2FsbCBjb21waWxlX3RlbXBsYXRlLCQoU1JDKSwtbWFyY2g9cnYzMmltKSkpCiskKGZvcmVhY2ggU1JDLCQoZmlsdGVyZWRfaW1jKSwkKGV2YWwgJChjYWxsIGNvbXBpbGVfdGVtcGxhdGUsJChTUkMpLC1tYXJjaD1ydjMyaW1jKSkpCisKKworbG9nX3JlcXVlc3RlZF90Z3Q6ICQoYmxkX2RpcikKKwkkKGZvcmVhY2ggdGVzdF9uYW1lLCAkKGZpbHRlcmVkKSwgJChldmFsICQoc2hlbGwgZWNobyBjb21wbGlhbmNlXyQodGVzdF9uYW1lKS5oZXggPj4gJChibGRfZGlyKS8uLi90ZXN0X2luZm8pKSkKKworJChibGRfZGlyKSA6CisJbWtkaXIgLXAgJChibGRfZGlyKQorCiskKG9ial9kaXIpIDogfCByZWZfZGF0YQorCW1rZGlyIC1wICQob2JqX2RpcikKKworJChkc3RfZGlyKS9jb21wbGlhbmNlXyUuZWxmOiAkKG9ial9kaXIpLyUubyB8ICQoZGVwX2ZpbGVzKQorCSQoUklTQ1ZfR0NDKSAkXiAkKExERkxBR1MpIC1vICRAIC1nCisKKyQoZHN0X2RpcikvY29tcGxpYW5jZV8lLmhleDogJChkc3RfZGlyKS9jb21wbGlhbmNlXyUuZWxmCisJJChSSVNDVl9ST01fT0JKQ09QWSkgJF4gJEAKKwkkKFJJU0NWX1JBTV9PQkpDT1BZKSAkXiAkQC5yYW0KKwkjYXNzaWduIDB4MDgwMF8weHh4ICB0byAweDAwMDBfMHh4eCB0byBtYXAgdG8gVENNIE1lbW9yeQorCXNlZCAtaSAncy9AMDgwMDAvQDAwMDAwL2cnICRALnJhbQorCiskKGJsZF9kaXIpL2NvbXBsaWFuY2VfJS5kdW1wOiAkKGRzdF9kaXIpL2NvbXBsaWFuY2VfJS5lbGYKKwkkKFJJU0NWX09CSkRVTVApIC1EIC13IC14IC1TICReID4gJEAKKworcmVmX2RhdGE6CisJbWtkaXIgLXAgJChibGRfZGlyKS9yZWZfZGF0YQorCWZvciBmaWxlcyBpbiAkKHJlZmVyZW5jZV9zcmMpIDsgZG8gXAorCXNlZF9pbnB1dD0kJGZpbGVzIDsgXAorCXNlZF9vdXRwdXQ9JCQoYmFzZW5hbWUgJCR7ZmlsZXMlLip9KSA7IFwKKwlzZWQgInMvXHIkJC8vOyBcCisJcy9cKC4uLi4uLi4uXCkvXDEsL2c7IFwKKwlzLy4kJC8vOyBzL1woLipcKSxcKC4qXCksXCguKlwpLFwoLipcKS9cNCxcMyxcMixcMS87IFwKKwlzL1woLi4uLi4uLi4uXCkvXDEweC9nOyBzL14vMHgvOyBzLyQkLywvOyAkJCBzLy4kJC8vIiAkJHNlZF9pbnB1dCA+ICQoYmxkX2RpcikvcmVmX2RhdGEvJCRzZWRfb3V0cHV0OyBcCisJZG9uZQorCitjcF9hc206CisJbWtkaXIgLXAgJChibGRfZGlyKS9jb21wbGlhbmNlX2FzbQorCSQoY2FsbCBwcmVwcm9jZXNzaW5nLCQoaW5jbHVkZWRfaSksLW1hcmNoPXJ2MzJpKQorCSQoY2FsbCBwcmVwcm9jZXNzaW5nLCQoaW5jbHVkZWRfaW0pLC1tYXJjaD1ydjMyaW0pCisJJChjYWxsIHByZXByb2Nlc3NpbmcsJChpbmNsdWRlZF9pbWMpLC1tYXJjaD1ydjMyaW1jKQorCisKK3Jpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyICAgIDo9ICQoaWYgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKSwgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKSwgLi91bmRlZmluZWQpCityaXNjdl90ZXN0c19jb21taXQgOj0gZDUxMjU5YjJhOTQ5YmUzYWYwMmU3NzZjMzllMTM1NDAyNjc1YWM5YgorIyMgY29tbWl0IGhhc2ggcmVhZGVkIGZyb20gbG9jYWwgY29weSBvZiBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtY29tcGxpYW5jZQordG1wX2NvbW1pdCA9ICQoc2hlbGwgY2QgJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpcikgMj4vZGV2L251bGwgJiYgZ2l0IGxvZyAtMSB8IGdyZXAgImNvbW1pdCIgfCBjdXQgLWYyIC1kICcgJykKK2lzX2NvbW1pdF9nb29kID0gJChpZiAkKHN1YnN0ICQocmlzY3ZfdGVzdHNfY29tbWl0KSwsJCh0bXBfY29tbWl0KSksZmFsc2UsdHJ1ZSkKKworIyBDb2xvcgorUkVEPVwwMzNbMDszMW0KK05DPVwwMzNbMG0KKworY2hlY2tfdmVyc2lvbiA6ICQocmlzY3ZfY29tcGxpYW5jZV90ZXN0c19kaXIpCisJQGlmIFsgISAtZCAkKHJpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyKSBdOyB0aGVuIFwKKwkJZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iICYmXAorCQllY2hvICIgICBFcnJvciEgRW52aXJvbm1lbnQgdmFyaWFibGUgUklTQ1ZfQ09NUExJQU5DRV9URVNUUz0nJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpciknICIgJiZcCisJCWVjaG8gIiAgICAgIGRpcmVjdG9yeSBub3QgZXhpc3QhIiAmJiBcCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiIDsgXAorCWZpCitpZm5lcSAoJChpc19jb21taXRfZ29vZCksdHJ1ZSkKKwlAZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJQGVjaG8gIiAgIFdhcm5pbmchIEV4ZWN1dGlvbiBvZiB0ZXN0IGNvZGUgaXMgbm90IGd1YXJhbnRlZWQgIgorCUBlY2hvICIgICB3aGlsZSB1c2luZyB0aGUgY3VycmVudCBjb21taXQgb2YgcmVwb3NpdG9yeSBsb2NhdGVkIGF0IDogJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpcikgLiIKKwlAZWNobyAiICAgIgorCUBlY2hvICIgICByaXNjdl9jb21wbGlhbmNlIHJlcG9zaXRvcnkgbXVzdCBwb2ludCB0byBjb21taXQgJChyaXNjdl90ZXN0c19jb21taXQpISIKKwlAZWNobyAtZSAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0kKE5DKSIKK2VuZGlmCisKKyQocmlzY3ZfY29tcGxpYW5jZV90ZXN0c19kaXIpIDouCitpZm5kZWYgUklTQ1ZfQ09NUExJQU5DRV9URVNUUworCUBlY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKwlAZWNobyAiICAgIEVycm9yISBFbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9DT01QTElBTkNFX1RFU1RTIG5vdCBzZXQhIgorCUBlY2hvICIgICAgWW91IG11c3Qgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9DT01QTElBTkNFX1RFU1RTIgorCUBlY2hvICIgICAgVGhlIHZhcmlhYmxlIHNob3VsZCBwb2ludCB0byB0aGUgbG9jYWwgY29weSBvZiB0aGUiCisJQGVjaG8gIiAgICAgIHJlcG9zaXRvcnkgaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWNvbXBsaWFuY2UiCisJQGVjaG8gIiAgICAgIHdpdGggdGhlIGNvbW1pdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCkiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCisJZXhpdCAxCitlbmRpZgorCitjbGVhbjoKKwkkKFJNKSAtUiAkKHRlc3RfZWxmKSAkKHRlc3RfaGV4KSAkKGJsZF9kaXIpCisKKy5QSE9OWTogY2hlY2tfdmVyc2lvbiBjbGVhbiByZWZfZGF0YSBjcF9hc20gZGVmYXVsdApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvYXdfdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2F3X3Rlc3RfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwNTJhMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2F3X3Rlc3RfbWFjcm9zLmgKQEAgLTAsMCArMSw2ODMgQEAKKy8qCisgIENPUFkgT0YgL3Jpc2N2LWNvbXBsaWFuY2UvcmlzY3YtdGVzdC1lbnYvYXdfdGVzdF9tYWNyb3MuaAorICAqLworCisvLyBTZWUgTElDRU5TRSBmb3IgbGljZW5zZSBkZXRhaWxzLgorCisjaWZuZGVmIF9fVEVTVF9NQUNST1NfU0NBTEFSX0gKKyNkZWZpbmUgX19URVNUX01BQ1JPU19TQ0FMQVJfSAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgbWFjcm9zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBNQVNLX1hMRU4oeCkgKCh4KSAmICgoMSA8PCAoX19yaXNjdl94bGVuIC0gMSkgPDwgMSkgLSAxKSkKKworI2RlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJsdHogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMTogc3JsaSBhMCwgYTAsIDMxOyBsYSB0MCwgYmVnaW5fc2lnbmF0dXJlOyBzdyBhMCwgMCh0MCkKKworI2RlZmluZSBURVNUTlVNIGdwCisKKyNkZWZpbmUgU1dTSUcoIHRlc3RudW0sIHRlc3RyZWcgKSBcCisgICAgbGEgIHgyOCwgdGVzdF9yZXM7IFwKKyAgICBzdyB0ZXN0cmVnLCAodGVzdG51bTw8MikoeDI4KTsgXAorCisjCisjIEFkZHJlc3MgPSBiYXNlKyh0ZXN0bnVtPDwyKQorIyBzdyB0ZXN0cmVnLCAodGVzdG51bTw8MikoYmFzZXJlZykKKyMKKyNkZWZpbmUgVEVTVF9DQVNFKCB0ZXN0bnVtLCB0ZXN0cmVnLCBjb3JyZWN0dmFsLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGNvZGU7IFwKKyAgICBsaSAgeDI5LCBNQVNLX1hMRU4oY29ycmVjdHZhbCk7IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgICAgICBTV1NJRyh0ZXN0bnVtLHRlc3RyZWcpOyBcCisgICAgYm5lIHRlc3RyZWcsIHgyOSwgZmFpbDsKKworIyBXZSB1c2UgYSBtYWNybyBoYWNrIHRvIHNpbXBpZnkgY29kZSBnZW5lcmF0aW9uIGZvciB2YXJpb3VzIG51bWJlcnMKKyMgb2YgYnViYmxlIGN5Y2xlcy4KKworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzAKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMAorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzIgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU18xCisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMyAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzIKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU180ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzUgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU180CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNiAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzUKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU183ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNgorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzggIG5vcDsgVEVTVF9JTlNFUlRfTk9QU183CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfOSAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzgKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xMCBub3A7IFRFU1RfSU5TRVJUX05PUFNfOQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUkgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBpbnN0cnVjdGlvbnMgd2l0aCBpbW1lZGlhdGUgb3BlcmFuZAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisjZGVmaW5lIFRFU1RfSU1NX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MSwgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDYsIHJlc3VsdCwgXAorICAgICAgbGkgIHg0LCAwOyBcCisxOiAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICAgIGFkZGkgIHg2LCB4MzAsIDA7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICAgIGluc3QgeDMwLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST1NSQzEoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgaW5zdCB4MSwgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIHRlc3RudW0sIGluc3QsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgwLCAwLCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MCwgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3RlciBvcGVyYW5kcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9SX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MzAsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzMCwgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzMCwgeDE7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgYWRkaSAgeDYsIHgzMCwgMDsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3Rlci1yZWdpc3RlciBvcGVyYW5kcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9SUl9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMwLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCB4MjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgxLCB4MSwgeDI7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMyX0VRX0RFU1QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MiwgeDEsIHgyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMTJfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgeDEsIHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCB4MjsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgICBhZGRpICB4NiwgeDMwLCAwOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzMCwgeDEsIHgyOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIxX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzMCwgeDEsIHgyOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9TUkMxKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKKyAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCB4MiwgeDAsIHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST1NSQzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IHgyLCB4MSwgeDA7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPU1JDMTIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGluc3QgeDEsIHgwLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDAsIDAsIFwKKyAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgeDAsIHgxLCB4MjsgXAorICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgbWVtb3J5IGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9MRF9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MzAsIHJlc3VsdCwgXAorICAgICAgbGEgIHgxLCBiYXNlOyBcCisgICAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1NUX09QKCB0ZXN0bnVtLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMwLCByZXN1bHQsIFwKKyAgICAgIGxhICB4MSwgYmFzZTsgXAorICAgICAgbGkgIHgyLCByZXN1bHQ7IFwKKyAgICAgIHN0b3JlX2luc3QgeDIsIG9mZnNldCh4MSk7IFwKKyAgICAgIGxvYWRfaW5zdCB4MzAsIG9mZnNldCh4MSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9MRF9ERVNUX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDEsIGJhc2U7IFwKKyAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgIGFkZGkgIHg2LCB4MzAsIDA7IFwKKyAgICBsaSAgeDI5LCByZXN1bHQ7IFwKKyAgICBibmUgeDYsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiOyBcCisKKyNkZWZpbmUgVEVTVF9MRF9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDEsIGJhc2U7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHJlc3VsdDsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGEgIHgyLCBiYXNlOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzMCwgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzIxX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDIsIGJhc2U7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgIGxpICB4MSwgcmVzdWx0OyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzMCwgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0JSMl9PUF9UQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIGluc3QgeDEsIHgyLCAyZjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMTogIGJuZSB4MCwgVEVTVE5VTSwgM2Y7IFwKKzI6ICBpbnN0IHgxLCB4MiwgMWI7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjJfT1BfTk9UVEFLRU4oIHRlc3RudW0sIGluc3QsIHZhbDEsIHZhbDIgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDEsIHZhbDE7IFwKKyAgICBsaSAgeDIsIHZhbDI7IFwKKyAgICBpbnN0IHgxLCB4MiwgMWY7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIDJmOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgaW5zdCB4MSwgeDIsIDFiOyBcCiszOgorCisjZGVmaW5lIFRFU1RfQlIyX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHZhbDEsIHZhbDIgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgaW5zdCB4MSwgeDIsIGZhaWw7IFwKKyAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKyNkZWZpbmUgVEVTVF9CUjJfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICAgIGxpICB4NCwgMDsgXAorMTogIGxpICB4MiwgdmFsMjsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBpbnN0IHgxLCB4MiwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QganVtcCBpbnN0cnVjdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfSlJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDYsIDJmOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4NjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMjogIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0pBTFJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDYsIDJmOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4MTksIHg2LCAwOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUYgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgcU5hTmYgMGY6N2ZjMDAwMDAKKyNkZWZpbmUgc05hTmYgMGY6N2Y4MDAwMDEKKyNkZWZpbmUgcU5hTiAwZDo3ZmY4MDAwMDAwMDAwMDAwCisjZGVmaW5lIHNOYU4gMGQ6N2ZmMDAwMDAwMDAwMDAwMQorCisjZGVmaW5lIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgY29kZS4uLiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGZsdyBmMCwgMChhMCk7IFwKKyAgZmx3IGYxLCA0KGEwKTsgXAorICBmbHcgZjIsIDgoYTApOyBcCisgIGx3ICBhMywgMTIoYTApOyBcCisgIGNvZGU7IFwKKyAgZnNmbGFncyBhMSwgeDA7IFwKKyAgbGkgYTIsIGZsYWdzOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhMiwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDI7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZmxvYXQgdmFsMTsgXAorICAuZmxvYXQgdmFsMjsgXAorICAuZmxvYXQgdmFsMzsgXAorICAucmVzdWx0OyBcCisgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgZmxkIGYwLCAwKGEwKTsgXAorICBmbGQgZjEsIDgoYTApOyBcCisgIGZsZCBmMiwgMTYoYTApOyBcCisgIGxkICBhMywgMjQoYTApOyBcCisgIGNvZGU7IFwKKyAgZnNmbGFncyBhMSwgeDA7IFwKKyAgbGkgYTIsIGZsYWdzOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhMiwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHZhbDE7IFwKKyAgLmRvdWJsZSB2YWwyOyBcCisgIC5kb3VibGUgdmFsMzsgXAorICAucmVzdWx0OyBcCisgIC5wb3BzZWN0aW9uCisKKy8vIFRPRE86IGFzc2lnbiBhIHNlcGFyYXRlIG1lbSBsb2NhdGlvbiBmb3IgdGhlIGNvbXBhcmlzb24gYWRkcmVzcz8KKyNkZWZpbmUgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIFNXU0lHICh0ZXN0bnVtLCBURVNUTlVNKTtcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbHcgIGEzLCAyNChhMCk7IFwKKyAgbHcgIHQxLCAyOChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgdDEsIHQyLCBmYWlsOyBcCisgIGJuZSBhMSwgYTIsIGZhaWw7IFwKKyAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgIC5hbGlnbiAzOyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmRvdWJsZSB2YWwxOyBcCisgIC5kb3VibGUgdmFsMjsgXAorICAuZG91YmxlIHZhbDM7IFwKKyAgLnJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QzMiggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QoIHRlc3RudW0sIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCAwLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBmY3Z0LnMuZCBmMywgZjA7IGZjdnQuZC5zIGYzLCBmMzsgZm12LnguZCBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GQ1ZUX0RfUyggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIDAsIGZsb2F0IHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5kLnMgZjMsIGYwOyBmY3Z0LnMuZCBmMywgZjM7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGZsb2F0IHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisvLyBeOiBzdG9yZSBjb21wdXRhdGlvbiByZXN1bHQgaW4gYWRkcmVzcyBmcm9tIGEwLCBsb2FkIGhpZ2gtd29yZCBpbnRvIHQyCisKKyNkZWZpbmUgVEVTVF9GUF9PUDFfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX1NfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9EMzJfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorLy8gXjogc3RvcmUgY29tcHV0YXRpb24gcmVzdWx0IGluIGFkZHJlc3MgZnJvbSBhMCwgbG9hZCBoaWdoLXdvcmQgaW50byB0MgorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0RfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMl9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmc2QgZjMsIDAoYTApOyBsdyB0MiwgNChhMCk7IGx3IGEwLCAwKGEwKSkKKy8vIF46IHN0b3JlIGNvbXB1dGF0aW9uIHJlc3VsdCBpbiBhZGRyZXNzIGZyb20gYTAsIGxvYWQgaGlnaC13b3JkIGludG8gdDIKKworI2RlZmluZSBURVNUX0ZQX09QMl9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QM19TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZm12LngucyBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDNfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGRvdWJsZSByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisvLyBeOiBzdG9yZSBjb21wdXRhdGlvbiByZXN1bHQgaW4gYWRkcmVzcyBmcm9tIGEwLCBsb2FkIGhpZ2gtd29yZCBpbnRvIHQyCisKKyNkZWZpbmUgVEVTVF9GUF9PUDNfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjEsIGYyOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBybSkKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EMzIoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxOyBsaSB0MiwgMCkKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgcm0pCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjEpCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgdmFsMiwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBmMTsgbGkgdDIsIDApCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX1ModGVzdG51bSwgY29ycmVjdCwgaW5wdXQpIFwKKyAgVEVTVF9DQVNFKHRlc3RudW0sIGEwLCBjb3JyZWN0LCBsaSBhMCwgaW5wdXQ7IGZtdi5zLnggZmEwLCBhMDsgXAorICAgICAgICAgICAgICAgICAgICBmY2xhc3MucyBhMCwgZmEwKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX0QzMih0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIFwKKyAgICAgICAgICAgIGxhIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgICAgICAgICAgICBmbGQgZmEwLCAwKGEwKTsgXAorICAgICAgICAgICAgZmNsYXNzLmQgYTAsIGZhMCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiAzOyBcCisgICAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAgIC5kd29yZCBpbnB1dDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GQ0xBU1NfRCh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LmQueCBmYTAsIGEwOyBcCisgICAgICAgICAgICAgICAgICAgIGZjbGFzcy5kIGEwLCBmYTApCisKKyNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfUyggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsaSAgYTAsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTA7IFwKKyAgZnNmbGFncyB4MDsgXAorICBmbXYueC5zIGEwLCBmMDsgXAorICBibmUgYTAsIGEzLCBmYWlsOyBcCisgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAuYWxpZ24gMjsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5mbG9hdCByZXN1bHQ7IFwKKyAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0lOVF9GUF9PUF9EMzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGx3ICBhMywgMChhMCk7IFwKKyAgbHcgIGE0LCA0KGEwKTsgXAorICBsaSAgYTEsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTE7IFwKKyAgXAorICBmc2QgZjAsIDAoYTApOyBcCisgIGx3IGExLCA0KGEwKTsgXAorICBsdyBhMCwgMChhMCk7IFwKKyAgXAorICBmc2ZsYWdzIHgwOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhNCwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfSU5UX0ZQX09QX0QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGxkICBhMywgMChhMCk7IFwKKyAgbGkgIGEwLCB2YWwxOyBcCisgIGluc3QgZjAsIGEwOyBcCisgIGZzZmxhZ3MgeDA7IFwKKyAgZm12LnguZCBhMCwgZjA7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisvLyBXZSBuZWVkIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBoZXJlIHRvIGFsbG93IDY0LWJpdCBjb21wYXJpc29uIGluIDMyLWJpdCBhcmNoCisvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIG5hbWUgYW5kIGNsZWFuIHVwIHdoZW4gaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNhZ2U/CisjZGVmaW5lIFRFU1RfQ0FTRV9EMzIoIHRlc3RudW0sIHRlc3RyZWcxLCB0ZXN0cmVnMiwgY29ycmVjdHZhbCwgY29kZS4uLiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBjb2RlOyBcCisgICAgbGEgIHgzMSwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7IFwKKyAgICBsdyAgeDI5LCAwKHgzMSk7IFwKKyAgICBsdyAgeDMxLCA0KHgzMSk7IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIFNXU0lHICh0ZXN0bnVtLCBURVNUTlVNKTtcCisgICAgYm5lIHRlc3RyZWcxLCB4MjksIGZhaWw7XAorICAgIGJuZSB0ZXN0cmVnMiwgeDMxLCBmYWlsO1wKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMzsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKy8vIF4geDMwIGlzIHVzZWQgaW4gc29tZSBvdGhlciBtYWNyb3MsIHRvIGF2b2lkIGlzc3VlcyB3ZSB1c2UgeDMxIGZvciB1cHBlciB3b3JkCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXNzIGFuZCBmYWlsIGNvZGUgKGFzc3VtZXMgdGVzdCBudW0gaXMgaW4gVEVTVE5VTSkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfUEFTU0ZBSUwgXAorICAgICAgICBibmUgeDAsIFRFU1ROVU0sIHBhc3M7IFwKK2ZhaWw6IFwKKyAgICAgICAgUlZURVNUX0ZBSUw7IFwKK3Bhc3M6IFwKKyAgICAgICAgUlZURVNUX1BBU1MgXAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGRhdGEgc2VjdGlvbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9EQVRBCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2NhNTQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX2lvLmgKQEAgLTAsMCArMSw3MCBAQAorLy8gUklTQy1WIENvbXBsaWFuY2UgSU8gVGVzdCBIZWFkZXIgRmlsZQorCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMTggSW1wZXJhcyBTb2Z0d2FyZSBMdGQuLCB3d3cuaW1wZXJhcy5jb20KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfQ09NUExJQU5DRV9JT19ICisjZGVmaW5lIF9DT01QTElBTkNFX0lPX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUlYgSU8gTWFjcm9zIChOb24gZnVuY3Rpb25hbCkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpZmRlZiBfQ09NUExJQU5DRV9PVVRQVVQKKworI2RlZmluZSBSVlRFU1RfSU9fUFVTSChfU1ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbGEgX1NQLCBiZWdpbl9yZWdzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDMsIDAoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDQsIDQoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDUsIDgoX1NQKTsKKworI2RlZmluZSBSVlRFU1RfSU9fUE9QKF9TUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbGEgX1NQLCBiZWdpbl9yZWdzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDMsIDAoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDQsIDQoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDUsIDgoX1NQKTsJCisKKyNkZWZpbmUgUlZURVNUX0lPX1dSSVRFX1NUUihfU1AsIF9TVFIpCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zZWN0aW9uIC5kYXRhLnN0cmluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMjAwMDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zdHJpbmcgX1NUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zZWN0aW9uIC50ZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJWVEVTVF9JT19QVVNIKF9TUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxpIHgzLCAweEYwMDAwMDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxhIHg0LCAyMDAwMWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMjogIGxiIHg1LCAwKHg0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNiIHg1LCAwKHgzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGJlcSB4NSwgemVybywgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFkZCB4NCwgeDQsIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGogMmI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMTogIFJWVEVTVF9JT19QT1AoX1NQKQorCisjZWxzZSAvLyAjaWZkZWYgX0NPTVBMSUFOQ0VfT1VUUFVUCisKKyNkZWZpbmUgUlZURVNUX0lPX1dSSVRFX1NUUihfU1AsIF9TVFIpCisKKyNlbmRpZiAvLyAjZW5kICNpZmRlZiBfQ09NUExJQU5DRV9PVVRQVVQKKworI2RlZmluZSBSVlRFU1RfSU9fSU5JVAorI2RlZmluZSBSVlRFU1RfSU9fQ0hFQ0soKQorI2RlZmluZSBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUShfU1AsIF9SLCBfSSkKKyNkZWZpbmUgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKF9GLCBfUiwgX0kpCisjZGVmaW5lIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShfRCwgX1IsIF9JKQorI2RlZmluZSBSVlRFU1RfSU9fQVNTRVJUX0VRKF9SLCBfSSkgCisKKyNlbmRpZiAvLyBfQ09NUExJQU5DRV9JT19ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX3Rlc3QuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2NvbXBsaWFuY2VfdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjN2U3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX3Rlc3QuaApAQCAtMCwwICsxLDMxIEBACisvLyBSSVNDLVYgQ29tcGxpYW5jZSBUZXN0IEhlYWRlciBGaWxlCisvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIENvZGFzaXAgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gU2VlIExJQ0VOU0UgZm9yIGxpY2Vuc2UgZGV0YWlscy4KKy8vCisvLyBEZXNjcmlwdGlvbjogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBSVjMySSB0ZXN0cworCisjaWZuZGVmIF9DT01QTElBTkNFX1RFU1RfSAorI2RlZmluZSBfQ09NUExJQU5DRV9URVNUX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUlYgQ29tcGxpYW5jZSBNYWNyb3MKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBSVl9DT01QTElBTkNFX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9SVjMyTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfUlYzMk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9DT0RFX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfQ09ERV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9DT0RFX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfQ09ERV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9EQVRBX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfREFUQV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9EQVRBX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfREFUQV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3QuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGM2MTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdC5oCkBAIC0wLDAgKzEsNyBAQAorCisjaWZuZGVmIF9SSVNDVl9URVNUX0gKKyNkZWZpbmUgX1JJU0NWX1RFU1RfSAorCisjaW5jbHVkZSAidGVzdF9tYWNyb3MuaCIKKworI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3RfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxN2JkNAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3RfbWFjcm9zLmgKQEAgLTAsMCArMSw0NjMgQEAKKy8vIFJJU0MtViBDb21wbGlhbmNlIElPIFRlc3QgSGVhZGVyIEZpbGUKKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDE4IEltcGVyYXMgU29mdHdhcmUgTHRkLiwgd3d3LmltcGVyYXMuY29tCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwKKyAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKworLy8KKy8vIEluIGdlbmVyYWwgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIHJlc2VydmVkCisvLyByYSwgYTAsIHQwLCB0MQorLy8gQWRkaXRpb25hbGx5IG9uIGFuIGFzc2VydGlvbiB2aW9sYXRpb24sIHQxLCB0MiBhcmUgb3ZlcndyaXR0ZW4KKy8vIHgxLCB4MTAsIHg1LCB4NiwgeDcgcmVzcGVjdGl2ZWx5CisvLyBGbG9hdGluZyByZWdpc3RlcnMgcmVzZXJ2ZWQKKy8vIGY1CisvLworCisjZGVmaW5lIE1BU0tfWExFTih4KSAoKHgpICYgKCgxIDw8IChfX3Jpc2N2X3hsZW4gLSAxKSA8PCAxKSAtIDEpKQorCisjZGVmaW5lIFNFWFRfSU1NKHgpICgoeCkgfCAoLSgoKHgpID4+IDExKSAmIDEpIDw8IDExKSkKKworLy8gQmFzZSBmdW5jdGlvbiBmb3IgaW50ZWdlciBvcGVyYXRpb25zCisjZGVmaW5lIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGNvZGU7IFwKKyAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCkgXAorCisvLyBCYXNlIGZ1bmN0aW9ucyBmb3Igc2luZ2xlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zCisjZGVmaW5lIFRFU1RfQ0FTRV9GUCh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZmx3IHJlZzEsIDAoYTApOyBcCisgICAgZmx3IHJlZzIsIDQoYTApOyBcCisgICAgbHcgdDEsIDgoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIHQxLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDM7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDE7IFwKKyAgICAgIC5mbG9hdCB2YWwyOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiAxOyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDQoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZmx3IHJlZzEsIDAoYTApOyBcCisgICAgZmx3IHJlZzIsIDQoYTApOyBcCisgICAgZmx3IHJlZzMsIDgoYTApOyBcCisgICAgbHcgdDEsIDEyKGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiA0OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5mbG9hdCB2YWwxOyBcCisgICAgICAuZmxvYXQgdmFsMjsgXAorICAgICAgLmZsb2F0IHZhbDM7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMTsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGxpIHJlZywgdmFsOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgbHcgYTEsIDAoYTApOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIGExLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDE7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKy8vIEJhc2UgZnVuY3Rpb25zIGZvciBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgLSBydjMyZAorI2RlZmluZSBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnMSwgMChhMCk7IFwKKyAgICBmbGQgcmVnMiwgOChhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnNkIGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBsdyB0MSwgMTYoYTApOyBcCisgICAgbHcgdDIsIDIwKGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMzsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDE7IFwKKyAgICAgIC5kb3VibGUgdmFsMjsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGx3IHQyLCA0KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMTsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uOyBcCisgICAgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmlsbCAxLCA4LCAtMTsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDgoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDsgXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQRF80UkVHKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnMSwgMChhMCk7IFwKKyAgICBmbGQgcmVnMiwgOChhMCk7IFwKKyAgICBmbGQgcmVnMywgMTYoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzZCBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgbHcgdDEsIDI0KGEwKTsgXAorICAgIGx3IHQyLCAyOChhMCk7IFwKKyAgICBsYSBhMCwgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZnNkIGRlc3RyZWcsIDAoYTApOyBcCisgICAgbHcgYTEsIDAoYTApOyBcCisgICAgbHcgYTIsIDQoYTApOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9ERlBSX0VRKGRlc3RyZWcsIHQyLCB0MSwgYTIsIGExLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDQ7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmRvdWJsZSB2YWwxOyBcCisgICAgICAuZG91YmxlIHZhbDI7IFwKKyAgICAgIC5kb3VibGUgdmFsMzsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisvL1Rlc3RzIGZvciBhIGluc3RydWN0aW9ucyB3aXRoIHJlZ2lzdGVyLXJlZ2lzdGVyIG9wZXJhbmQKKyNkZWZpbmUgVEVTVF9SUl9PUChpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpICByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICByZWcyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgZGVzdHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyKCBpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIGRlc3RyZWc7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPMSggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgcmVnOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVSTzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk8xMiggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBpbnN0IGRlc3RyZWcsIHgwLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCBpbnN0LCByZWcxLCByZWcyLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIHgwLCAwLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgcmVnMSwgcmVnMjsgXAorICAgICkKKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1pbW1lZGlhdGUgb3BlcmFuZAorI2RlZmluZSBURVNUX0lNTV9PUCggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9TUkMoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST1NSQyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIGluc3QsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgeDAsIDAsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgeDAsIHJlZywgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9PTkVSRUcoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBpbnN0IGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0FVSVBDKGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAxOiBcCisgICAgICBpbnN0IGRlc3RyZWcsIGltbTsgXAorICAgICAgbGEgc3dyZWcsIDFiOyBcCisgICAgICBzdWIgZGVzdHJlZywgZGVzdHJlZywgc3dyZWc7IFwKKyAgICAgICkKKworLy9UZXN0cyBmb3IgYSBjb21wcmVzc2VkIGluc3RydWN0aW9uCisjZGVmaW5lIFRFU1RfQ1JfT1AoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1AoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGltbTsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1BfTk9SRUcoaW5zdCwgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcseDAsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgaW1tOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIHNpbmdsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUF9PUCh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF80UkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBfSSh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0kyKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIGRvdWJsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUERfT1AodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQRF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEXzRSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUERfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREkxNlNQKGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgICAgVEVTVF9DQVNFKHRlc3RyZWcseDIsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGMuYWRkaTE2c3AgeDIsIGltbTsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREk0U1BOKGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgICAgVEVTVF9DQVNFKHRlc3RyZWcsZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBjLmFkZGk0c3BuIGRlc3RyZWcsIHgyLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0NKTChpbnN0LCByZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgeDEwLCB2YWw7IFwKKyAgICAgIGxhIHJlZywgMWY7IFwKKyAgICAgIGluc3QgcmVnOyBcCisgICAgICBsaSB4MTAsIDB4MTIzYWI7IFwKKzE6IFwKKyAgICAgIHN3IHgxMCwgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCB4MTAsIHZhbCk7IFwKKworI2RlZmluZSBBQlMoeCkgKCh4ID4+IDExKSBeIHgpIC0gKHggPj4gMTEpCisKKyNkZWZpbmUgVEVTVF9DSihpbnN0LCByZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGluc3QgMWY7IFwKKyAgICAgIGxpIHJlZywgMHgxMjNhYjsgXAorMTogXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfQ0woaW5zdCwgcmVnLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIGxhIHJlZywgdGVzdF9kYXRhOyBcCisgICAgICBpbnN0IHJlZywgaW1tKHJlZyk7IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorCisvLyBsdyByZWcsIGltbSh4MikKKy8vIGMubHdzcCByZWcsIGltbSh4MikKKyNkZWZpbmUgVEVTVF9DTFdTUChyZWcsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGEgeDIsIHRlc3RfZGF0YTsgXAorICAgICAgYy5sd3NwIHJlZywgaW1tKHgyKTsgXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisKKyNkZWZpbmUgVEVTVF9DU1codGVzdF9kYXRhLCBpbnN0LCByZWcxLCByZWcyLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnMSwgdmFsOyBcCisgICAgICBsYSByZWcyLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGluc3QgcmVnMSwgaW1tKHJlZzIpOyBcCisgICAgICBsdyByZWcxLCBpbW0ocmVnMik7IFwKKyAgICAgIHN3IHJlZzEsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnMSwgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfQ1NXU1AodGVzdF9kYXRhLCByZWcsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsYSB4MiwgdGVzdF9kYXRhOyBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5zd3NwIHJlZywgaW1tKHgyKTsgXAorICAgICAgbHcgcmVnLCBpbW0oeDIpOyBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DQkVRWihyZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGMuc3ViIHJlZywgcmVnOyBcCisgICAgICBjLmJlcXogcmVnLCAzZjsgXAorICAgICAgbGkgcmVnLCAweDEyM2FiOyBcCiszOiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCAweDApOyBcCisKKyNkZWZpbmUgVEVTVF9DQk5FWihyZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGMuYm5leiByZWcsIDRmOyBcCisgICAgICBsaSByZWcsIDB4MDsgXAorNDogXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfRk1WWFModGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfRk1WWFModGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGZtdi54LnMgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBmbXYucy54IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgU1dTSUcoYSxiKQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS90ZXN0X21hY3Jvcy5oIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvdGVzdF9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmM2MTBlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvdGVzdF9tYWNyb3MuaApAQCAtMCwwICsxLDU5MyBAQAorCisvLyBSSVNDLVYgQ29tcGxpYW5jZSBUZXN0IEhlYWRlciBGaWxlCisvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIENvZGFzaXAgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gU2VlIExJQ0VOU0UgZm9yIGxpY2Vuc2UgZGV0YWlscy4KKy8vCisvLyBEZXNjcmlwdGlvbjogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBSVjMySSB0ZXN0cworCisjaWZuZGVmIF9URVNUX01BQ1JPU19ICisjZGVmaW5lIF9URVNUX01BQ1JPU19ICisKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKworLy8gUklTQy1WIENvbXBsaWFuY2UgSU8gVGVzdCBIZWFkZXIgRmlsZQorCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMTggSW1wZXJhcyBTb2Z0d2FyZSBMdGQuLCB3d3cuaW1wZXJhcy5jb20KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworCisvLworLy8gSW4gZ2VuZXJhbCB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgcmVzZXJ2ZWQKKy8vIHJhLCBhMCwgdDAsIHQxCisvLyBBZGRpdGlvbmFsbHkgb24gYW4gYXNzZXJ0aW9uIHZpb2xhdGlvbiwgdDEsIHQyIGFyZSBvdmVyd3JpdHRlbgorLy8geDEsIHgxMCwgeDUsIHg2LCB4NyByZXNwZWN0aXZlbHkKKy8vIEZsb2F0aW5nIHJlZ2lzdGVycyByZXNlcnZlZAorLy8gZjUKKy8vCisKKyNkZWZpbmUgTUFTS19YTEVOKHgpICgoeCkgJiAoKDEgPDwgKF9fcmlzY3ZfeGxlbiAtIDEpIDw8IDEpIC0gMSkpCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisvLyBCYXNlIGZ1bmN0aW9uIGZvciBpbnRlZ2VyIG9wZXJhdGlvbnMKKyNkZWZpbmUgVEVTVF9DQVNFKGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKworLy8gQmFzZSBmdW5jdGlvbnMgZm9yIHNpbmdsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucworI2RlZmluZSBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcxLCAwKGEwKTsgXAorICAgIGZsdyByZWcyLCA0KGEwKTsgXAorICAgIGx3IHQxLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsMTsgXAorICAgICAgLmZsb2F0IHZhbDI7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgbHcgdDEsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIHQxLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmJhbGlnbiAyOyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDQoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDQ7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDsgXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcxLCAwKGEwKTsgXAorICAgIGZsdyByZWcyLCA0KGEwKTsgXAorICAgIGZsdyByZWczLCA4KGEwKTsgXAorICAgIGx3IHQxLCAxMihhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX1NGUFJfRVEoZGVzdHJlZywgdDEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDE2OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5mbG9hdCB2YWwxOyBcCisgICAgICAuZmxvYXQgdmFsMjsgXAorICAgICAgLmZsb2F0IHZhbDM7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDI7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLikgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBsaSByZWcsIHZhbDsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IGExLCAwKGEwKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCBhMSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworLy8gQmFzZSBmdW5jdGlvbnMgZm9yIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyAtIHJ2MzJkCisjZGVmaW5lIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcxLCAwKGEwKTsgXAorICAgIGZsZCByZWcyLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAxNihhMCk7IFwKKyAgICBsdyB0MiwgMjAoYTApOyBcCisgICAgbGEgYTAsIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZzZCBkZXN0cmVnLCAwKGEwKTsgXAorICAgIGx3IGExLCAwKGEwKTsgXAorICAgIGx3IGEyLCA0KGEwKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShkZXN0cmVnLCB0MiwgdDEsIGEyLCBhMSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDE7IFwKKyAgICAgIC5kb3VibGUgdmFsMjsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGx3IHQyLCA0KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDI7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSTIodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnLCAwKGEwKTsgXAorICAgIGx3IHQxLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCBkZXN0cmVnLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmJhbGlnbiA0OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5kb3VibGUgdmFsOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBEXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcxLCAwKGEwKTsgXAorICAgIGZsZCByZWcyLCA4KGEwKTsgXAorICAgIGZsZCByZWczLCAxNihhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnNkIGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBsdyB0MSwgMjQoYTApOyBcCisgICAgbHcgdDIsIDI4KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDE2OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5kb3VibGUgdmFsMTsgXAorICAgICAgLmRvdWJsZSB2YWwyOyBcCisgICAgICAuZG91YmxlIHZhbDM7IFwKKyAgICAgIC5kd29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb247IFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5maWxsIDEsIDgsIC0xOyBcCisgICAgLnBvcHNlY3Rpb24KKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1yZWdpc3RlciBvcGVyYW5kCisjZGVmaW5lIFRFU1RfUlJfT1AoaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgIHJlZzEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMSggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCByZWcsIGRlc3RyZWc7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMxMiggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgZGVzdHJlZywgZGVzdHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk8xKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgcmVnOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVSTzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgeDA7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPMTIoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIHgwOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST0RFU1QoIGluc3QsIHJlZzEsIHJlZzIsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UoIHgwLCAwLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgcmVnMSwgcmVnMjsgXAorICAgICkKKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1pbW1lZGlhdGUgb3BlcmFuZAorI2RlZmluZSBURVNUX0lNTV9PUCggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCBkZXN0cmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1pFUk9TUkMoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIGluc3QsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCB4MCwgMCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCB4MCwgcmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX09ORVJFRyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFICggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgaW5zdCBkZXN0cmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICApCisKKyNkZWZpbmUgVEVTVF9BVUlQQyhpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAxOiBcCisgICAgICBpbnN0IGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgIGxhIHN3cmVnLCAxYjsgXAorICAgICAgc3ViIGRlc3RyZWcsIGRlc3RyZWcsIHN3cmVnOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGEgY29tcHJlc3NlZCBpbnN0cnVjdGlvbgorI2RlZmluZSBURVNUX0NSX09QKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1AoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCBpbW07IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0NJX09QX05PUkVHKGluc3QsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoeDAsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgaW1tOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIHNpbmdsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUF9PUCh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF80UkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBfSSh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0kyKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIGRvdWJsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUERfT1AodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQRF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEXzRSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUERfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREkxNlNQKGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFKHgyLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBjLmFkZGkxNnNwIHgyLCBpbW07IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0NBRERJNFNQTihkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRShkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGMuYWRkaTRzcG4gZGVzdHJlZywgeDIsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0pMKGluc3QsIHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSB4MTAsIHZhbDsgXAorICAgICAgbGEgcmVnLCAxZjsgXAorICAgICAgaW5zdCByZWc7IFwKKyAgICAgIGxpIHgxMCwgMHgxMjNhYjsgXAorMTogXAorICAgICAgc3cgeDEwLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHgxMCwgdmFsKTsgXAorCisjZGVmaW5lIEFCUyh4KSAoKHggPj4gMTEpIF4geCkgLSAoeCA+PiAxMSkKKworI2RlZmluZSBURVNUX0NKKGluc3QsIHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgaW5zdCAxZjsgXAorICAgICAgbGkgcmVnLCAweDEyM2FiOyBcCisxOiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DTChpbnN0LCByZWcsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGEgcmVnLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGluc3QgcmVnLCBpbW0ocmVnKTsgXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisKKy8vIGx3IHJlZywgaW1tKHgyKQorLy8gYy5sd3NwIHJlZywgaW1tKHgyKQorI2RlZmluZSBURVNUX0NMV1NQKHJlZywgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsYSB4MiwgdGVzdF9kYXRhOyBcCisgICAgICBjLmx3c3AgcmVnLCBpbW0oeDIpOyBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKworI2RlZmluZSBURVNUX0NTVyh0ZXN0X2RhdGEsIGluc3QsIHJlZzEsIHJlZzIsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcxLCB2YWw7IFwKKyAgICAgIGxhIHJlZzIsIHRlc3RfZGF0YTsgXAorICAgICAgaW5zdCByZWcxLCBpbW0ocmVnMik7IFwKKyAgICAgIGx3IHJlZzEsIGltbShyZWcyKTsgXAorICAgICAgc3cgcmVnMSwgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcxLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DU1dTUCh0ZXN0X2RhdGEsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIGxhIHgyLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGxpIHJlZywgdmFsOyBcCisgICAgICBjLnN3c3AgcmVnLCBpbW0oeDIpOyBcCisgICAgICBsdyByZWcsIGltbSh4Mik7IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIHZhbCk7IFwKKworI2RlZmluZSBURVNUX0NCRVFaKHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5zdWIgcmVnLCByZWc7IFwKKyAgICAgIGMuYmVxeiByZWcsIDNmOyBcCisgICAgICBsaSByZWcsIDB4MTIzYWI7IFwKKzM6IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIDB4MCk7IFwKKworI2RlZmluZSBURVNUX0NCTkVaKHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5ibmV6IHJlZywgNGY7IFwKKyAgICAgIGxpIHJlZywgMHgwOyBcCis0OiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgZm12LngucyBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGZtdi5zLnggZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBTV1NJRyhhLGIpCisKKworI2lmIF9fcmlzY3ZfeGxlbiA9PSA2NAorI2RlZmluZSBTQVRQX01PREUgU0FUUDY0X01PREUKKyNlbHNlCisjZGVmaW5lIFNBVFBfTU9ERSBTQVRQMzJfTU9ERQorI2VuZGlmCisKKyNkZWZpbmUgU0FUUDMyX01PREUgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNBVFAzMl9BU0lEICAgICAgICAgMHg3RkMwMDAwMAorI2RlZmluZSBTQVRQMzJfUFBOICAgICAgICAgIDB4MDAzRkZGRkYKKyNkZWZpbmUgU0FUUDY0X01PREUgMHhGMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFNBVFA2NF9BU0lEIDB4MEZGRkYwMDAwMDAwMDAwMAorI2RlZmluZSBTQVRQNjRfUFBOICAweDAwMDAwRkZGRkZGRkZGRkYKKworI2RlZmluZSBTQVRQX01PREVfT0ZGICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0FUUF9NT0RFX1NWMzIgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNBVFBfTU9ERV9TVjM5ICAgICAgICAgICAgICAgOAorI2RlZmluZSBTQVRQX01PREVfU1Y0OCAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgU0FUUF9NT0RFX1NWNTcgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNBVFBfTU9ERV9TVjY0ICAgICAgICAgICAgICAxMQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmc2QgZjMsIDAoYTApOyBsdyB0MiwgNChhMCk7IGx3IGEwLCAwKGEwKSkKKworI2RlZmluZSBURVNUX0NBU0VfRDMyKCB0ZXN0bnVtLCB0ZXN0cmVnMSwgdGVzdHJlZzIsIGNvcnJlY3R2YWwsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgY29kZTsgXAorICAgIGxhICB4MzEsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgOyBcCisgICAgbHcgIHgyOSwgMCh4MzEpOyBcCisgICAgbHcgIHgzMSwgNCh4MzEpOyBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBibmUgdGVzdHJlZzEsIHgyOSwgZmFpbDtcCisgICAgYm5lIHRlc3RyZWcyLCB4MzEsIGZhaWw7XAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbHcgIGEzLCAyNChhMCk7IFwKKyAgbHcgIHQxLCAyOChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgdDEsIHQyLCBmYWlsOyBcCisgIGJuZSBhMSwgYTIsIGZhaWw7IFwKKyAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgIC5iYWxpZ24gODsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5kb3VibGUgdmFsMTsgXAorICAuZG91YmxlIHZhbDI7IFwKKyAgLmRvdWJsZSB2YWwzOyBcCisgIC5yZXN1bHQ7IFwKKyAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0ZQX09QMV9EMzIoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRDMyX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX0QzMih0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIFwKKyAgICAgICAgICAgIGxhIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgICAgICAgICAgICBmbGQgZmEwLCAwKGEwKTsgXAorICAgICAgICAgICAgZmNsYXNzLmQgYTAsIGZhMCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgaW5wdXQ7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRlBfQ01QX09QX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjE7IGxpIHQyLCAwKQorCisjZGVmaW5lIFRFU1RfSU5UX0ZQX09QX0QzMiggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsdyAgYTQsIDQoYTApOyBcCisgIGxpICBhMSwgdmFsMTsgXAorICBpbnN0IGYwLCBhMTsgXAorICBcCisgIGZzZCBmMCwgMChhMCk7IFwKKyAgbHcgYTEsIDQoYTApOyBcCisgIGx3IGEwLCAwKGEwKTsgXAorICBcCisgIGZzZmxhZ3MgeDA7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgYTEsIGE0LCBmYWlsOyBcCisgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAuYmFsaWduIDg7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QzMiggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRlBfT1AzX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwLCBmMSwgZjI7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0QzMl9EV09SRF9SRVNVTFQoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRDMyX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBmYTNmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9NYWtlZmlsZQpAQCAtMCwwICsxLDk2IEBACisKK2luY2x1ZGUgcnYzMl90ZXN0cy5pbmMKKworQVJDSF90bXAgOj0gaW1mCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIGMsJChBUkNIX2xvd2VyY2FzZSkpKQorCUFSQ0hfdG1wIDo9ICQoQVJDSF90bXApYworZW5kaWYKKworb3ZlcnJpZGUgQVJDSCA6PSAkKEFSQ0hfdG1wKQorCitzcmNfZGlyIDo9ICQoQ1VSRElSKQorb2JqX2RpciAgIDo9ICQoYmxkX2RpcikvcmlzY3Zfb2JqcwordGVzdF9saXN0IDo9ICQocGF0c3Vic3QgJS5TLCAlLCAkKG5vdGRpciAkKHJ2MzJfaXNhX3Rlc3RzKSkpCitvYmpzICAgICAgOj0gJChhZGRwcmVmaXggJChvYmpfZGlyKS8sJCh0ZXN0X2xpc3Q6JT0lLm8pKQordGVzdF9lbGYgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5lbGYpKQordGVzdF9oZXggIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5oZXgpKQordGVzdF9kdW1wIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5kdW1wKSkKKworQ0ZMQUdTIDo9IC1JJChpbmNfZGlyKSAtSSQoc3JjX2RpcikgLURBU00gLVdhLC1tYXJjaD1ydjMyJChBUkNIKSAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9aWxwMzJmIC1EX19yaXNjdl94bGVuPTMyCitMREZMQUdTIDo9IC1zdGF0aWMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtVCQoaW5jX2RpcikvbGluay5sZCAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9aWxwMzJmCitSSVNDVl9URVNUUyA6PSAkKHNyY19kaXIpLy4uLy4uL2RlcGVuZGVuY2llcy9yaXNjdi10ZXN0cy8KKworVlBBVEggKz0gJChzcmNfZGlyKSAkKGJsZF9kaXIpICQob2JqX2RpcikgJChSSVNDVl9URVNUUykKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgY2hlY2tfcmlzY3ZfdGVzdHMgJCh0ZXN0X2VsZikgJCh0ZXN0X2hleCkgJCh0ZXN0X2R1bXApCisKK2RlZmluZSBjb21waWxlX3RlbXBsYXRlCiskKG9ial9kaXIpLyQkKGJhc2VuYW1lICQobm90ZGlyICQoU1JDKSkpLm86ICQkKFNSQykgfCAkKG9ial9kaXIpCisJJChSSVNDVl9HQ0MpIC1jICQkPCAkKENGTEFHUykgLW8gJCRACisgZW5kZWYKKworJChmb3JlYWNoIFNSQywkKHJ2MzJfaXNhX3Rlc3RzKSwgJChldmFsICQoY29tcGlsZV90ZW1wbGF0ZSkpKQorCitsb2dfcmVxdWVzdGVkX3RndDoKKwkkKGZvcmVhY2ggdGVzdF9uYW1lLCAkKHRlc3RfbGlzdCksICQoZXZhbCAkKHNoZWxsIGVjaG8gJCh0ZXN0X25hbWUpLmhleCA+PiAkKGJsZF9kaXIpL3Rlc3RfaW5mbykpKQorCiskKG9ial9kaXIpIDoKKwlta2RpciAtcCAkKG9ial9kaXIpCisKKyQoYmxkX2RpcikvJS5lbGY6ICQob2JqX2RpcikvJS5vIHwgJChvYmpfZGlyKQorCSQoUklTQ1ZfR0NDKSAkXiAkKExERkxBR1MpIC1vICRACisKKyQoYmxkX2RpcikvJS5oZXg6ICQoYmxkX2RpcikvJS5lbGYKKwkkKFJJU0NWX1JPTV9PQkpDT1BZKSAkXiAkQAorCSQoUklTQ1ZfUkFNX09CSkNPUFkpICReICRALnJhbQorCSNhc3NpZ24gMHgwODAwXzB4eHggIHRvIDB4MDAwMF8weHh4IHRvIG1hcCB0byBUQ00gTWVtb3J5CisJc2VkIC1pICdzL0AwODAwMC9AMDAwMDAvZycgJEAucmFtCisKKyQoYmxkX2RpcikvJS5kdW1wOiAkKGJsZF9kaXIpLyUuZWxmCisJJChSSVNDVl9PQkpEVU1QKSAkXiA+ICRACisKK2NsZWFuOgorCSQoUk0pICQodGVzdF9lbGYpICQodGVzdF9oZXgpICQodGVzdF9kdW1wKSAkKG9ianMpCisJJChSTSkgLVIgJChvYmpfZGlyKQorCisKKy5QSE9OWTogY2hlY2tfcmlzY3ZfdGVzdHMKKworcmlzY3ZfdGVzdHNfZGlyICAgIDo9ICQoaWYgJChSSVNDVl9URVNUUyksICQoUklTQ1ZfVEVTVFMpLCAuL3VuZGVmaW5lZCkKK3Jpc2N2X3Rlc3RzX2NvbW1pdCA6PSA1ZjhhNDkxOGM2NDgyZTY1YzY3YTJiN2RlY2Q1YzJhZjNlM2ZlMGU1CisjIyBjb21taXQgaGFzaCByZWFkZWQgZnJvbSBsb2NhbCBjb3B5IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNjdi10ZXN0cwordG1wX2NvbW1pdCA9ICQoc2hlbGwgY2QgJChyaXNjdl90ZXN0c19kaXIpIDI+L2Rldi9udWxsICYmIGdpdCBsb2cgLTEgfCBncmVwICJjb21taXQiIHwgY3V0IC1mMiAtZCAnICcpCitpc19jb21taXRfZ29vZCA9ICQoaWYgJChzdWJzdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCksLCQodG1wX2NvbW1pdCkpLGZhbHNlLHRydWUpCisKKyMgQ29sb3IKK1JFRD1cMDMzWzA7MzFtCitOQz1cMDMzWzBtCisKK2NoZWNrX3Jpc2N2X3Rlc3RzIDogJChyaXNjdl90ZXN0c19kaXIpCisJQGlmIFsgISAtZCAkKHJpc2N2X3Rlc3RzX2RpcikgXTsgdGhlbiBcCisJCWVjaG8gLWUgIiQoUkVEKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiAmJlwKKwkJZWNobyAiICAgRXJyb3IhIEVudmlyb25tZW50IHZhcmlhYmxlIFJJU0NWX1RFU1RTPSckKHJpc2N2X3Rlc3RzX2RpciknICIgJiZcCisJCWVjaG8gIiAgICAgIGRpcmVjdG9yeSBub3QgZXhpc3QhIiAmJiBcCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiIDsgXAorCWZpCitpZm5lcSAoJChpc19jb21taXRfZ29vZCksdHJ1ZSkKKwlAZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJQGVjaG8gIiAgIFdhcm5pbmchIEV4ZWN1dGlvbiBvZiB0ZXN0IGNvZGUgaXMgbm90IGd1YXJhbnRlZWQgIgorCUBlY2hvICIgICB3aGlsZSB1c2luZyB0aGUgY3VycmVudCBjb21taXQgb2YgcmVwb3NpdG9yeWxvY2F0ZWQgYXQgOiAkKHJpc2N2X3Rlc3RzX2RpcikgLiIKKwlAZWNobyAiICAgIgorCUBlY2hvICIgICBSaXNjdi10ZXN0cyByZXBvc2l0b3J5IG11c3QgcG9pbnQgdG8gY29tbWl0ICQocmlzY3ZfdGVzdHNfY29tbWl0KSEiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCitlbmRpZgorCiskKHJpc2N2X3Rlc3RzX2RpcikgOi4KK2lmbmRlZiBSSVNDVl9URVNUUworCUBlY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKwlAZWNobyAiICAgIEVycm9yISBFbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9URVNUUyBub3Qgc2V0ISIKKwlAZWNobyAiICAgIFlvdSBtdXN0IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUklTQ1ZfVEVTVFMiCisJQGVjaG8gIiAgICBUaGUgdmFyaWFibGUgc2hvdWxkIHBvaW50IHRvIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSIKKwlAZWNobyAiICAgICAgcmVwb3NpdG9yeSBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtdGVzdHMiCisJQGVjaG8gIiAgICAgIHdpdGggdGhlIGNvbW1pdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCkiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCisJZXhpdCAxCitlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9yaXNjdl90ZXN0LmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL3Jpc2N2X3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjljZTBkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9yaXNjdl90ZXN0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fUklTQ1ZfX1RFU1RfX0gKKyNkZWZpbmUgX19SSVNDVl9fVEVTVF9fSAorCisjaW5jbHVkZSAicmlzY3ZfbWFjcm9zLmgiIAorCisjZW5kaWYgLy8gI2lmbmRlZiBfX1JJU0NWX19URVNUX19ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL3J2MzJfdGVzdHMuaW5jIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9ydjMyX3Rlc3RzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmU1MDEyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9ydjMyX3Rlc3RzLmluYwpAQCAtMCwwICsxLDY2IEBACisKK0FSQ0hfbG93ZXJjYXNlID0gJChzaGVsbCBlY2hvICQoQVJDSCkgfCB0ciBBLVogYS16KQorCisKK3J2MzJfaXNhX3Rlc3RzICs9IGlzYS9ydjMydWkvYWRkLlMgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYWRkaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2FuZC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9hbmRpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYXVpcGMuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2JlcS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9iZ2UuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYmdldS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2JsdC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9ibHR1LlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYm5lLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL2Nzci5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9mZW5jZV9pLlMgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvaWxsZWdhbC5TICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2phbC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9qYWxyLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvbGIuUyAgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2xidS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9saC5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvbGh1LlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2x1aS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9sdy5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvbWFfYWRkci5TICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL21hX2ZldGNoLlMgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJtaS9tY3NyLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvb3IuUyAgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL29yaS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zYi5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvc2JyZWFrLlMgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL3NjYWxsLlMgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zaC5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvc2hhbXQuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NpbXBsZS5TICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zbGwuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc2xsaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NsdC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zbHRpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc2x0aXUuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NsdHUuUyAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zcmEuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc3JhaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NybC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zcmxpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc3ViLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3N3LlMgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS94b3IuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkveG9yaS5TCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIG0sJChBUkNIX2xvd2VyY2FzZSkpKQorcnYzMl9pc2FfdGVzdHMgKz0gaXNhL3J2MzJ1bS9kaXYuUyAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9kaXZ1LlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydW0vbXVsLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVtL211bGguUyAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9tdWxoc3UuUyAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydW0vbXVsaHUuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVtL3JlbS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9yZW11LlMKK2VuZGlmICMjIGlmZXEgKG0sJChmaW5kc3RyaW5nIG0sJChBUkNIX2xvd2VyY2FzZSkpKQorCitpZm5lcSAoLCQoZmluZHN0cmluZyBjLCQoQVJDSF9sb3dlcmNhc2UpKSkKK3J2MzJfaXNhX3Rlc3RzICs9IGlzYS9ydjMydWMvcnZjLlMKK2VuZGlmICMjIGlmZXEgKG0sJChmaW5kc3RyaW5nIGMsJChBUkNIX2xvd2VyY2FzZSkpKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9pc2EvdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9pc2EvdGVzdF9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM5MThkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS90ZXN0X21hY3Jvcy5oCkBAIC0wLDAgKzEsNSBAQAorI2lmbmRlZiBfX1RFU1RfX01BQ1JPU19fSAorI2RlZmluZSBfX1RFU1RfX01BQ1JPU19fSAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3VzZXJfcmlzY19yZWdyZXNzX3RiLnYgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdXNlcl9yaXNjX3JlZ3Jlc3NfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTllZTBhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3VzZXJfcmlzY19yZWdyZXNzX3RiLnYKQEAgLTAsMCArMSw1MzcgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTdGFuZGFsb25lIFVzZXIgdmFsaWRhdGlvbiBUZXN0IGJlbmNoICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCisvLy8vICAgRGlnaXRhbCBjb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMS4gVXNlciBSaXNjIGNvcmUgaXMgYm9vdGVkIHVzaW5nICBjb21waWxlZCBjb2RlIG9mICAgICAgICAvLy8vCisvLy8vICAgICAgdXNlcl9yaXNjX2Jvb3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMi4gVXNlciBSaXNjIGNvcmUgdXNlcyBTZXJpYWwgRmxhc2ggYW5kIFNEUkFNIHRvIGJvb3QgICAgICAvLy8vCisvLy8vICAgMy4gQWZ0ZXIgc3VjY2Vzc2Z1bCBib290LCBSaXNjIGNvcmUgd2lsbCAgd3JpdGUgc2lnbmF0dXJlICAvLy8vCisvLy8vICAgICAgaW4gdG8gIHVzZXIgcmVnaXN0ZXIgZnJvbSAweDMwMDBfMDAxOCB0byAweDMwMDBfMDAyQyAgICAvLy8vCisvLy8vICAgNC4gVGhyb3VnaCB0aGUgRXh0ZXJuYWwgV2lzaGJvbmUgSW50ZXJmYWNlIHdlIHJlYWQgYmFjayAgICAvLy8vCisvLy8vICAgICAgIGFuZCB2YWxpZGF0ZSB0aGUgdXNlciByZWdpc3RlciB0byBkZWNsYXJlZCBwYXNzIGZhaWwgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJzMjVmbDI1NnMuc3YiCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgIm10NDhsYzhtOGEyLnYiCitgaW5jbHVkZSAic3BpcmFtLnYiCisKK2xvY2FscGFyYW0gWzMxOjBdICAgICAgWUNSMV9TSU1fRVhJVF9BRERSICAgICAgPSAzMidoMDAwMF8wMEY4OworbG9jYWxwYXJhbSBbMzE6MF0gICAgICBZQ1IxX1NJTV9QUklOVF9BRERSICAgICA9IDMyJ2hGMDAwXzAwMDA7Citsb2NhbHBhcmFtIFszMTowXSAgICAgIFlDUjFfU0lNX0VYVF9JUlFfQUREUiAgID0gMzInaEYwMDBfMDEwMDsKK2xvY2FscGFyYW0gWzMxOjBdICAgICAgWUNSMV9TSU1fU09GVF9JUlFfQUREUiAgPSAzMidoRjAwMF8wMjAwOworCisgYGRlZmluZSBRU1BJTV9HTEJMX0NUUkwgICAgICAgICAgMzInaDEwMDAwMDAwCisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1JEX0NUUkwgICAgMzInaDEwMDAwMDA0CisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1dSX0NUUkwgICAgMzInaDEwMDAwMDA4CisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1JEX0NUUkwgICAgMzInaDEwMDAwMDBDCisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1dSX0NUUkwgICAgMzInaDEwMDAwMDEwCisKKyBgZGVmaW5lIFFTUElNX0RNRU1fQ1NfQU1BUCAgICAgICAgMzInaDEwMDAwMDE0CisgYGRlZmluZSBRU1BJTV9ETUVNX0NBX0FNQVNLICAgICAgIDMyJ2gxMDAwMDAxOAorCisgYGRlZmluZSBRU1BJTV9JTUVNX0NUUkwxICAgICAgICAgIDMyJ2gxMDAwMDAxQworIGBkZWZpbmUgUVNQSU1fSU1FTV9DVFJMMiAgICAgICAgICAzMidoMTAwMDAwMjAKKyBgZGVmaW5lIFFTUElNX0lNRU1fQUREUiAgICAgICAgICAgMzInaDEwMDAwMDI0CisgYGRlZmluZSBRU1BJTV9JTUVNX1dEQVRBICAgICAgICAgIDMyJ2gxMDAwMDAyOAorIGBkZWZpbmUgUVNQSU1fSU1FTV9SREFUQSAgICAgICAgICAzMidoMTAwMDAwMkMKKyBgZGVmaW5lIFFTUElNX1NQSV9TVEFUVVMgICAgICAgICAgMzInaDEwMDAwMDMwCisKK21vZHVsZSB1c2VyX3Jpc2NfcmVncmVzc190YjsKKwlyZWcgY2xvY2s7CisJcmVnIHdiX3JzdF9pOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIHJlZyBbMzowXSAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAgICAgd2lyZSBbMzE6MF0gd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCXdpcmUgICAgICAgIGNsazsKKworCS8vIFVzZXIgSS9PCisJd2lyZSBbMzc6MF0gaW9fb2ViOworCXdpcmUgWzM3OjBdIGlvX291dDsKKwl3aXJlIFszNzowXSBpb19pbjsKKworCXdpcmUgZ3BpbzsKKwl3aXJlIFszNzowXSBtcHJqX2lvOworCXdpcmUgWzc6MF0gbXByal9pb18wOworCXJlZyAgICAgICAgIHRlc3RfZmFpbDsKKwlyZWcgWzMxOjBdIHJlYWRfZGF0YTsKKworCisJaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgIGZfcmVzdWx0czsKKyAgICAgICAgaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgIGZfaW5mbzsKKyAgICAgICAgCisgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzX3Jlc3VsdHM7CisgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzX2luZm87CisgICAgICAgIGBpZmRlZiBTSUdOQVRVUkVfT1VUCisgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzX3Rlc3RuYW1lOworICAgICAgICBiaXQgICAgICAgICAgICAgICAgICAgICAgICAgYl9zaW5nbGVfcnVuX2ZsYWc7CisgICAgICAgIGBlbmRpZiAgLy8gIFNJR05BVFVSRV9PVVQKKworCisJYGlmZGVmIFZFUklMQVRPUgorICAgICAgICAgbG9naWMgWzI1NTowXSAgICAgICAgICB0ZXN0X2ZpbGU7CisJIGxvZ2ljIFsyNTU6MF0gICAgICAgICAgdGVzdF9yYW1fZmlsZTsKKyAgICAgICAgIGBlbHNlIC8vIFZFUklMQVRPUgorICAgICAgICAgc3RyaW5nICAgICAgICAgICAgICAgICB0ZXN0X2ZpbGU7CisJIHN0cmluZyAgICAgICAgICAgICAgICAgdGVzdF9yYW1fZmlsZTsKKworICAgICAgICAgYGVuZGlmIC8vIFZFUklMQVRPUgorCisKKyAgICAgICAgZXZlbnQJICAgICAgICAgICAgICAgcmVpbml0X2V2ZW50OworCWJpdCAgICAgICAgICAgICAgICAgICAgdGVzdF9ydW5uaW5nOworICAgICAgICBpbnQgdW5zaWduZWQgICAgICAgICAgIHRlc3RzX3Bhc3NlZDsKKyAgICAgICAgaW50IHVuc2lnbmVkICAgICAgICAgICB0ZXN0c190b3RhbDsKKworCWxvZ2ljICBbNzowXSAgICAgICAgICAgdGVtX21lbVswOjQwOTVdOworCWxvZ2ljICBbMzE6MF0gICAgICAgICAgbWVtX2RhdGE7CisKKworcGFyYW1ldGVyIFBfRlNNX0MgICAgICA9IDQnYjAwMDA7IC8vIENvbW1hbmQgUGhhc2UgT25seQorcGFyYW1ldGVyIFBfRlNNX0NXICAgICA9IDQnYjAwMDE7IC8vIENvbW1hbmQgKyBXcml0ZSBEQVRBIFBoYXNlIE9ubHkKK3BhcmFtZXRlciBQX0ZTTV9DQSAgICAgPSA0J2IwMDEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgUGhhc2UgT25seQorCitwYXJhbWV0ZXIgUF9GU01fQ0FSICAgID0gNCdiMDAxMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IFJlYWQgRGF0YQorcGFyYW1ldGVyIFBfRlNNX0NBRFIgICA9IDQnYjAxMDA7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPiBEdW1teSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1SICAgPSA0J2IwMTAxOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1EUiAgPSA0J2IwMTEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBEdW1teSAtPiBSZWFkIERhdGEKKworcGFyYW1ldGVyIFBfRlNNX0NBVyAgICA9IDQnYjAxMTE7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPldyaXRlIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQURXICAgPSA0J2IxMDAwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gRFVNTVkgKyBXcml0ZSBEYXRhCitwYXJhbWV0ZXIgUF9GU01fQ0FNVyAgID0gNCdiMTAwMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IE1PREUgKyBXcml0ZSBEYXRhCisKK3BhcmFtZXRlciBQX0ZTTV9DRFIgICAgPSA0J2IxMDEwOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFJFQUQKK3BhcmFtZXRlciBQX0ZTTV9DRFcgICAgPSA0J2IxMDExOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFdSSVRFCitwYXJhbWV0ZXIgUF9GU01fQ1IgICAgID0gNCdiMTEwMDsgIC8vIENPTU1BTkQgLT4gUkVBRAorCitwYXJhbWV0ZXIgUF9NT0RFX1NXSVRDSF9JRExFICAgICA9IDInYjAwOworcGFyYW1ldGVyIFBfTU9ERV9TV0lUQ0hfQVRfQUREUiAgPSAyJ2IwMTsKK3BhcmFtZXRlciBQX01PREVfU1dJVENIX0FUX0RBVEEgID0gMidiMTA7CisKK3BhcmFtZXRlciBQX1NJTkdMRSA9IDInYjAwOworcGFyYW1ldGVyIFBfRE9VQkxFID0gMidiMDE7CitwYXJhbWV0ZXIgUF9RVUFEICAgPSAyJ2IxMDsKK3BhcmFtZXRlciBQX1FERFIgICA9IDInYjExOworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBTaW5jZSB0aGlzIGlzIHJlZ3Jlc3Npb24sIHJlc2V0IHdpbGwgYmUgYXBwbGllZCBtdWx0aXBsZSB0aW1lCisJLy8gUmVzZXQgbG9naWMKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJYml0IFsxOjBdICAgICByc3RfY250OworICAgICAgICBiaXQgICAgICAgICAgIHJzdF9pbml0OworCXdpcmUgICAgICAgICAgcnN0X247CisKKworICAgICAgICBhc3NpZ24gcnN0X24gPSAmcnN0X2NudDsKKwlhc3NpZ24gd2JfcnN0X2kgICAgPSAgIXJzdF9uOworICAgICAgICAKKyAgICAgICAgYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisJaWYgKHJzdF9pbml0KSAgIGJlZ2luCisJICAgICByc3RfY250IDw9ICcwOworCSAgICAgLT4gcmVpbml0X2V2ZW50OworCWVuZAorICAgICAgICAgICAgZWxzZSBpZiAofiZyc3RfY250KSByc3RfY250IDw9IHJzdF9jbnQgKyAxJ2IxOworICAgICAgICBlbmQKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJYXNzaWduIGNsayA9IGNsb2NrOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDEsIHVzZXJfcmlzY19yZWdyZXNzX3RiKTsKKwkgICAJJGR1bXB2YXJzKDEsIHVzZXJfcmlzY19yZWdyZXNzX3RiLnVfdG9wKTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfcmlzY19yZWdyZXNzX3RiLnVfdG9wLnVfcmlzY3ZfdG9wKTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfcmlzY19yZWdyZXNzX3RiLnVfdG9wLnVfcXNwaV9tYXN0ZXIpOworCSAgIAkkZHVtcHZhcnMoMCwgdXNlcl9yaXNjX3JlZ3Jlc3NfdGIudV90b3AudV9pbnRlcmNvbik7CisJICAgCSRkdW1wdmFycygwLCB1c2VyX3Jpc2NfcmVncmVzc190Yi51X3RvcC51X21iaXN0KTsKKwkgICBlbmQKKyAgICAgICBgZW5kaWYKKworICAgICAgICBpbnRlZ2VyIGk7CisKKyAgICAgICAgYWx3YXlzIEByZWluaXRfZXZlbnQKKwliZWdpbgorCQkvLyBJbml0aWFsaXplIHRoZSBTUEkgbWVtb3J5IHdpdGggaGV4IGNvbnRlbnQKKwkJLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCQl3YWl0IChyc3RfbiA9PSAxKTsKKworCisJCS8vIEluaXRpYWxpemUgdGhlIFNQSSBtZW1vcnkgd2l0aCBoZXggY29udGVudAorICAgICAgICAgICAgICAgICR3cml0ZSgiXDAzM1swOzM0bS0tLUluaXRpYWxpemluZyB0aGUgU1BJIE1lbW9yeSB3aXRoIEhleGZpbGU6ICVzXDAzM1swbVxuIiwgdGVzdF9maWxlKTsKKyAgICAgICAgICAgICAgICAkcmVhZG1lbWgodGVzdF9maWxlLHVfc3BpX2ZsYXNoXzI1Nm1iLk1lbSk7CisKKwkJLy8gc29tZSBvZiB0aGUgUklTQ1YgdGVzdCBuZWVkIFNSQU0gYXJlYSBmb3Igc3BlY2lmaWMKKwkJLy8gaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGxpa2UgZmVuY2UKKwkJJHNmb3JtYXQodGVzdF9yYW1fZmlsZSwgIiVzLnJhbSIsdGVzdF9maWxlKTsKKyAgICAgICAgICAgICAgICAkcmVhZG1lbWgodGVzdF9yYW1fZmlsZSx1X3NyYW0ubWVtb3J5KTsKKworCQkvKioqCisJCS8vIFNwbGl0IHRoZSBUZW1wIG1lbW9yeSBjb250ZW50IHRvIHR3byBzcmFtIGZpbGUKKyAgICAgICAgICAgICAgICAkcmVhZG1lbWgodGVzdF9yYW1fZmlsZSx0ZW1fbWVtKTsKKwkJLy8gTG9hZCB0aGUgU1JBTTAvU1JBTTEgd2l0aCAyS0IgZGF0YQorICAgICAgICAgICAgICAgICR3cml0ZSgiXDAzM1swOzM0bS0tLUluaXRpYWxpemluZyB0aGUgdV9zcmFtMF8ya2IgTWVtb3J5IHdpdGggSGV4ZmlsZTogJXNcMDMzWzBtXG4iLHRlc3RfcmFtX2ZpbGUpOworCQkvLyBJbml0aWFsaXppbmcgdGhlIFNSQU0KKwkJZm9yKGkgPSAwIDsgaSA8IDIwNDg7IGkgPSBpICs0KSBiZWdpbgorCQkgICAgbWVtX2RhdGEgPSB7dGVtX21lbVtpKzNdLHRlbV9tZW1baSsyXSx0ZW1fbWVtW2krMV0sdGVtX21lbVtpKzBdfTsKKwkJICAgIC8vJGRpc3BsYXkoIkZpbGxpbmcgTWVtIExvY2F0aW9uIDogJXggd2l0aCBkYXRhIDogJXgiLGksIG1lbV9kYXRhKTsKKwkJICAgIHVfdG9wLnVfc3JhbTBfMmtiLm1lbVtpLzRdID0gbWVtX2RhdGE7CisJCWVuZAorCQlmb3IoaSA9IDIwNDggOyBpIDwgNDA5NjsgaSA9IGkgKzQpIGJlZ2luCisJCSAgbWVtX2RhdGEgPSB7dGVtX21lbVtpKzNdLHRlbV9tZW1baSsyXSx0ZW1fbWVtW2krMV0sdGVtX21lbVtpKzBdfTsKKwkJICAvLyRkaXNwbGF5KCJGaWxsaW5nIE1lbSBMb2NhdGlvbiA6ICV4IHdpdGggZGF0YSA6ICV4IixpLCBtZW1fZGF0YSk7CisJCSAgdV90b3AudV9zcmFtMV8ya2IubWVtWygyMDQ4LWkpLzRdID0gbWVtX2RhdGE7CisJCWVuZAorCQkqKiovCisKKwkJLy9mb3IoaSA9MzInaDAwOyBpIDwgMzInaDEwMDsgaSA9IGkrMSkKKyAgICAgICAgICAgICAgICAvLyAgICAkZGlzcGxheSgiTG9jYXRpb246ICV4LCBEYXRhOiAleCIsIGksIHVfdG9wLnVfdHNyYW0wXzJrYi5tZW1baV0pOworCisKKwkJIzIwMDsgCisJICAgICAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiTW9uaXRvcjogQ29yZSByZXNldCByZW1vdmFsIik7CisKKwkJLy8gUmVtb3ZlIFdiIFJlc2V0CisJCXdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCSAgICAgICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworCQkjMTsKKwkJLy8tLS0tLS0tLS0tLS0gZnVzZV9taGFydGlkPSAweDAwCisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzAwMl8wMDA0LCdoMCk7CisKKworCSAgICAgICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworCQkjMTsKKwkJLy8gUmVtb3ZlIFdCIGFuZCBTUEkgUmVzZXQsIEtlZXAgU0RBUk0gYW5kIENPUkUgdW5kZXIgUmVzZXQKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2g1KTsKKworCQkvLyBDUyMyIFN3aXRjaCB0byBRU1BJIE1vZGUKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMDAsUF9GU01fQyw4J2gwMCw4J2gzOH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDApOworCisJCS8vIEVuYWJsZSB0aGUgRENBQ0hFIFJlbWFwIHRvIFNSQU0gcmVnaW9uCisJCS8vd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDBDLHs0J2IwMDAwLDQnYjExMTEsIDI0J2gwfSk7CisJCS8vCisJCS8vIFJlbW92ZSBhbGwgdGhlIHJlc2V0CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoOEYpOworCisJZW5kCisKK3dpcmUgVVNFUl9WREQxVjggPSAxJ2IxOword2lyZSBWU1MgPSAxJ2IwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1biB0ZXN0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJyaXNjdl9ydW50ZXN0cy5zdiIKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvcmUgaW5zdGFuY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworCitsb2dpYyBbMzE6MF0gcmlzY3ZfZG1lbV9yZXFfY250OyAvLyBjbnQgZG1lbSByZXEKK2luaXRpYWwgCitiZWdpbgorICAgcmlzY3ZfZG1lbV9yZXFfY250ID0gMDsKK2VuZAorCithbHdheXMgQChwb3NlZGdlIHVfdG9wLndiZF9yaXNjdl9kbWVtX3N0Yl9pKQorYmVnaW4KKyAgICByaXNjdl9kbWVtX3JlcV9jbnQgPSByaXNjdl9kbWVtX3JlcV9jbnQrMTsKKyAgICBpZigocmlzY3ZfZG1lbV9yZXFfY250ICUyMDApID09IDApCisJJGRpc3BsYXkoIlNUQVRVUzogVG90YWwgRG1lbSBSZXEgQ250OiAlZCAiLHJpc2N2X2RtZW1fcmVxX2NudCk7CitlbmQKKworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKyAgICBlbmQKK2BlbmRpZiAgICAKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbnRlZ3JhdGUgdGhlIFNlcmlhbCBmbGFzaCB3aXRoIHF1cmQgc3VwcG9ydCB0bworLy8gIHVzZXIgY29yZSB1c2luZyB0aGUgZ3BpbyBwYWRzCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aXJlIGZsYXNoX2NsayA9IGlvX291dFsyNF07CisgICB3aXJlIGZsYXNoX2NzYiA9IGlvX291dFsyOF07CisgICAvLyBDcmVhdGluZyBQYWQgRGVsYXkKKyAgIHdpcmUgIzEgaW9fb2ViXzI5ID0gaW9fb2ViWzI5XTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMwID0gaW9fb2ViWzMwXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMxID0gaW9fb2ViWzMxXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMyID0gaW9fb2ViWzMyXTsKKyAgIHRyaSAgIzEgZmxhc2hfaW8wID0gKGlvX29lYl8yOT09IDEnYjApID8gaW9fb3V0WzI5XSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMSA9IChpb19vZWJfMzA9PSAxJ2IwKSA/IGlvX291dFszMF0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzIgPSAoaW9fb2ViXzMxPT0gMSdiMCkgPyBpb19vdXRbMzFdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8zID0gKGlvX29lYl8zMj09IDEnYjApID8gaW9fb3V0WzMyXSA6IDEnYno7CisKKyAgIGFzc2lnbiBpb19pblsyOV0gPSBmbGFzaF9pbzA7CisgICBhc3NpZ24gaW9faW5bMzBdID0gZmxhc2hfaW8xOworICAgYXNzaWduIGlvX2luWzMxXSA9IGZsYXNoX2lvMjsKKyAgIGFzc2lnbiBpb19pblszMl0gPSBmbGFzaF9pbzM7CisKKworICAgLy8gUXVhcmQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoImFkZC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLAorICAgICAgICAgICAgICAgICAuVGltaW5nTW9kZWwoIlMyNUZMNTEyU0FHTUZJMDEwX0ZfMzBwRiIpKSAKKwkJIHVfc3BpX2ZsYXNoXzI1Nm1iICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKworICAgd2lyZSBzcGlyYW1fY3NiID0gaW9fb3V0WzI2XTsKKworICAgc3BpcmFtICMoLm1lbV9maWxlX25hbWUoIm5vbmUiKSkKKwl1X3NyYW0gKAorICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgICAgICAuaW8wICAgICAoZmxhc2hfaW8wKSwKKyAgICAgICAgICAgLmlvMSAgICAgKGZsYXNoX2lvMSksCisgICAgICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgICAgIC5jbGsgICAgKGZsYXNoX2NsayksCisgICAgICAgICAgIC5jc2IgICAgKHNwaXJhbV9jc2IpLAorICAgICAgICAgICAuaW8yICAgIChmbGFzaF9pbzIpLAorICAgICAgICAgICAuaW8zICAgIChmbGFzaF9pbzMpCisgICAgKTsKKworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAkZGlzcGxheSgiREVCVUcgV0IgVVNFUiBBQ0NFU1MgUkVBRCBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK2BpZmRlZiBHTAorCit3aXJlICAgICAgICB3YmRfc3BpX3N0Yl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NwaV9hY2tfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zcGlfd2VfaSAgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfYWRyX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWRyX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zcGlfc2VsX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9zdGJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9hY2tfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV93ZV9pICA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2Fkcl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2FkZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zZHJhbV9zZWxfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3VhcnRfc3RiX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2NzOword2lyZSAgICAgICAgd2JkX3VhcnRfYWNrX28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193cjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2Fkcl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hZGRyOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3JkYXRhOword2lyZSAgICAgICAgd2JkX3VhcnRfc2VsX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2JlOworCitgZW5kaWYKKworLyoqCitgaWZkZWYgR0wKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgSU1FTSBhbWQgRE1FTSBNb25pdG9yaW5nIFRBU0sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBSSVNDX0NPUkUgIHVzZXJfdWFydF90Yi51X3RvcC51X2NvcmUudV9yaXNjdl90b3AKKworYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUud2JfY2xrKSBiZWdpbgorICAgIGlmKGBSSVNDX0NPUkUud2JkX2ltZW1fYWNrX2kpCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXgiLCBgUklTQ19DT1JFLndiZF9pbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2ltZW1fZGF0X2kpOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFdyaXRlIERhdGE6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9vKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmICFgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggUkVBRCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X2kpOworZW5kCisKK2BlbmRpZgorKiovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdWFydF9tYXN0ZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM2Zjk2MwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdWFydF9tYXN0ZXIvTWFrZWZpbGUKQEAgLTAsMCArMSwxMjAgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgUERLIAorUERLX1BBVEggPSAkKFBES19ST09UKS9za3kxMzBBCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKyMjIFVzZXIgUHJvamVjdCBQb2ludGVycworVVBSSl9WRVJJTE9HX1BBVEggPz0gLi4vLi4vLi4vdmVyaWxvZworVVBSSl9SVExfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bAorVVBSSl9HTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZ2wKK1VQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKK1VQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQ19QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNX0RFRklORVMgPSAtREZVTkNUSU9OQUwgLURTSU0KK1NJTT89UlRMCitEVU1QPz1PRkYKKworLlNVRkZJWEVTOgorCitQQVRURVJOID0gdWFydF9tYXN0ZXIKKworYWxsOiAgJHtQQVRURVJOOj0udmNkfQorCitoZXg6ICAke1BBVFRFUk46PS5oZXh9CisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudiAlLmhleAoraWZlcSAoJChTSU0pLFJUTCkKKyAgIGlmZXEgKCQoRFVNUCksT0ZGKQorCWl2ZXJpbG9nIC1nMjAwNS1zdiAkKFNJTV9ERUZJTkVTKSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgICBlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgJChTSU1fREVGSU5FUykgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgJChTSU1fREVGSU5FUykgLURHTCAtSSAkKFBES19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgLUkgJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpIC1JJChVUFJKX0dMX1BBVEgpICAtSSQoVVBSSl9SVExfUEFUSCkgIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMgY2hlY2stZW52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtSSAkKENBUkFWRUxfUEFUSCkgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLVdsLC1Cc3RhdGljLC1ULCQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMsLS1zdHJpcC1kZWJ1ZyAtZmZyZWVzdGFuZGluZyAtbm9zdGRsaWIgLW8gJEAgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMgJDwKKworJS5oZXg6ICUuZWxmCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyAkPCAkQCAKKwkjIHRvIGZpeCBmbGFzaCBiYXNlIGFkZHJlc3MKKwlzZWQgLWkgJ3MvQDEwMDAwMDAwL0AwMDAwMDAwMC9nJyAkQAorCislLmJpbjogJS5lbGYKKwkke0dDQzY0X1BSRUZJWH0tb2JqY29weSAtTyBiaW5hcnkgJDwgL2Rldi9zdGRvdXQgfCB0YWlsIC1jICsxMDQ4NTc3ID4gJEAKKworY2hlY2stZW52OgoraWZuZGVmIFBES19ST09UCisJJChlcnJvciBQREtfUk9PVCBpcyB1bmRlZmluZWQsIHBsZWFzZSBleHBvcnQgaXQgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCitpZmVxICgsJCh3aWxkY2FyZCAkKFBES19ST09UKS9za3kxMzBBKSkKKwkkKGVycm9yICQoUERLX1JPT1QpL3NreTEzMEEgbm90IGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBwZGsgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCisjaWZlcSAoLCQod2lsZGNhcmQgJChHQ0M2NF9QUkVGSVgpLWdjYyApKQorIwkkKGVycm9yICQoR0NDNjRfUFJFRklYKS1nY2MgaXMgbm90IGZvdW5kLCBwbGVhc2UgZXhwb3J0IEdDQ19QQVRIIGFuZCBHQ0NfUFJFRklYIGJlZm9yZSBydW5uaW5nIG1ha2UpCisjZW5kaWYKKyMgY2hlY2sgZm9yIGVmYWJsZXNzIHN0eWxlIGluc3RhbGxhdGlvbgoraWZlcSAoLCQod2lsZGNhcmQgJChQREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi8qL3Zlcmlsb2cpKQorU0lNX0RFRklORVMgOj0gJHtTSU1fREVGSU5FU30gLURFRl9TVFlMRQorZW5kaWYKKworIyAtLS0tIENsZWFuIC0tLS0KKworY2xlYW46CisJcm0gLWYgKi5lbGYgKi5oZXggKi5iaW4gKi52dnAgKi52Y2QgKi5sb2cKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3J1bl92ZXJpbG9nIGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9ydW5fdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmZlZDNjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9ydW5fdmVyaWxvZwpAQCAtMCwwICsxLDIwIEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvcGRrL3NreTEzMEEgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NhcmF2ZWwvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvcnRsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cgLUkgLi4vIC1JLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkuLi8uLi8uLi92ZXJpbG9nL2dsICAtSSAuLi8uLi8uLi92ZXJpbG9nIHdiX3BvcnRfdGIudiAtbyB3Yl9wb3J0LnZ2cAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvcGRrL3NreTEzMEEgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NhcmF2ZWwvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvcnRsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cgLUkgLi4vIC1JLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkuLi8uLi8uLi92ZXJpbG9nL2dsICAtSSAuLi8uLi8uLi92ZXJpbG9nIHdiX3BvcnRfdGIudiAtbyB3Yl9wb3J0LnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlci5jIGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTkxMmEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3VhcnRfbWFzdGVyLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqLworCisvLyBUaGlzIGluY2x1ZGUgaXMgcmVsYXRpdmUgdG8gJENBUkFWRUxfUEFUSCAoc2VlIE1ha2VmaWxlKQorI2luY2x1ZGUgInZlcmlsb2cvZHYvY2FyYXZlbC9kZWZzLmgiCisjaW5jbHVkZSAidmVyaWxvZy9kdi9jYXJhdmVsL3N0dWIuYyIKKworLy8gVXNlciBQcm9qZWN0IFNsYXZlcyAoMHgzMDAwXzAwMDApCisKKworI2RlZmluZSBHUElPX01PREVfVVNFUl9TVERfQklESVJFQ1RJT05BTF9QVUxMVVAgICAweDFDMDAKKworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKworLyoKKyAgICAgICAgIFJpc2NWIEhlbGxvIFdvcmxkIHRlc3QuCisJICAgICAgICAtIFdha2UgdXAgdGhlIFJpc2MgVgorCQktIEJvb3QgZnJvbSBTUEkgRmxhc2gKKwkJLSBSaXNjdiBXcml0ZSBIZWxsbyBXb3JsZCB0byBTRFJBTSwKKwkJLSBFeHRlcm5hbCBXaXNoYm9uZSByZWFkIGJhY2sgdmFsaWRhdGlvbiB0aGUgZGF0YQorKi8KK2ludCBpID0gMDsgCitpbnQgY2xrID0gMDsKK2ludCB1YXJ0X2NmZyA9IDA7Cit2b2lkIG1haW4oKQoreworCisJaW50IGJGYWlsID0gMDsKKwkvKiAKKwlJTyBDb250cm9sIFJlZ2lzdGVycworCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAzLWJpdHMgfCAxLWJpdCB8IDEtYml0IHwgMS1iaXQgIHwgMS1iaXQgIHwgMS1iaXQgfCAxLWJpdCAgIHwgMS1iaXQgICB8IDEtYml0IHwgMS1iaXQgfCAxLWJpdCAgIHwKKwlPdXRwdXQ6IDAwMDBfMDExMF8wMDAwXzExMTAgICgweDE4MDgpID0gR1BJT19NT0RFX1VTRVJfU1REX09VVFBVVAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMSAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkKKwkgCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MDQwMikgPSBHUElPX01PREVfVVNFUl9TVERfSU5QVVRfTk9QVUxMCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDAwMSAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgfCAwICAgICAgfCAwICAgICB8IDAgICAgICAgfCAwICAgICAgIHwgMCAgICAgfCAxICAgICB8IDAgICAgICAgfAorCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MTgwMCkgPSBHUElPX01PREVfVVNFUl9TVERfQklESVJFQ1RJT05BTAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMCAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkqLworCisJLyogU2V0IHVwIHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIGJlIGNvbm5lY3RlZCBpbnRlcm5hbGx5IHNvCSovCisJLyogdGhhdCBleHRlcm5hbCBwaW4gY2hhbmdlcyBkb24ndCBhZmZlY3QgaXQuCQkJKi8KKworCXJlZ19zcGltYXN0ZXJfY29uZmlnID0gMHhhMDAyOwkvLyBFbmFibGUsIHByZXNjYWxlciA9IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ubmVjdCB0byBob3VzZWtlZXBpbmcgU1BJCisKKwkvLyBDb25uZWN0IHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIHRoZSBTUEkgbWFzdGVyCisJLy8gc28gdGhhdCB0aGUgQ1NCIGxpbmUgaXMgbm90IGxlZnQgZmxvYXRpbmcuICBUaGlzIGFsbG93cworCS8vIGFsbCBvZiB0aGUgR1BJTyBwaW5zIHRvIGJlIHVzZWQgZm9yIHVzZXIgZnVuY3Rpb25zLgorICAgICAgICByZWdfbXByal9pb18zMSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjkgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yOCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjYgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yNSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjMgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yMiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjAgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xOSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMTcgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xNiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisKKworICAgIHJlZ19sYTBfb2VuYiA9IHJlZ19sYTBfaWVuYSA9ICAweDAwMDAwMDA7CisgICAgIC8qIEFwcGx5IGNvbmZpZ3VyYXRpb24gKi8KKyAgICByZWdfbXByal94ZmVyID0gMTsKKyAgICB3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKyAgICByZWdfbXByal9kYXRhbCA9IDB4QUI2MDAwMDA7CisKKyAgICByZWdfbGEwX29lbmIgPSByZWdfbGEwX2llbmEgPSAgMHgwMDAwMDAwOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFN0YXJ0IG9mIFVzZXIgRnVuY3Rpb25hbGl0eSBhbmQgdGFrZSBvdmVyIHRoZSBHUElPIFBpbnMKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBVc2VyIGJsb2NrIGRlY2lkZSBvbiB0aGUgR1BJTyBmdW5jdGlvbgorICAgIHJlZ19tcHJqX2lvXzM3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzExID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzkgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzggID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzcgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzYgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzUgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzQgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzAgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworCisgICAgIC8qIEFwcGx5IGNvbmZpZ3VyYXRpb24gKi8KKyAgICByZWdfbXByal94ZmVyID0gMTsKKyAgICB3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAwOworICAgIC8vcmVnX2xhMF9kYXRhID0gMHgwMDA7CisgICAgLy9yZWdfbGEwX2RhdGEgfD0gMHgxOyAvLyBiaXRbMF0gLSBSZW1vdmUgU29mdHdhcmUgUmVzZXQKKyAgICAvL3JlZ19sYTBfZGF0YSB8PSAweDE7IC8vIGJpdFsxXSAtIEVuYWJsZSBUcmFuc21pdCBQYXRoCisgICAgLy9yZWdfbGEwX2RhdGEgfD0gMHgyOyAvLyBiaXRbMl0gLSBFbmFibGUgUmVjZWl2ZSBQYXRoCisgICAgLy9yZWdfbGEwX2RhdGEgfD0gMHg0OyAvLyBiaXRbM10gLSBTZXQgMiBTdG9wIEJpdAorICAgIC8vcmVnX2xhMF9kYXRhIHw9IDB4MDsgLy8gYml0WzE1OjRdIC0gMTZ4IEJhdWQgQ2xvY2sKKyAgICAvL3JlZ19sYTBfZGF0YSB8PSAweDA7IC8vIGJpdFsxNzoxNl0gLSBQcmlvcml0eSBtb2RlID0gMAorICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAxOworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDBGOworCisKKworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlcl90Yi52IGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlcl90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhN2Y2NmUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3VhcnRfbWFzdGVyX3RiLnYKQEAgLTAsMCArMSwyNzkgQEAKKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCitgZGVmYXVsdF9uZXR0eXBlIG5vbmUKKworYHRpbWVzY2FsZSAxIG5zIC8gMSBwcworCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgImNhcmF2ZWxfbmV0bGlzdHMudiIKK2BpbmNsdWRlICJzcGlmbGFzaC52IgorYGluY2x1ZGUgInVhcnRfYWdlbnQudiIKKworbW9kdWxlIHVhcnRfbWFzdGVyX3RiOworCXJlZyBjbG9jazsKKwlyZWcgUlNUQjsKKwlyZWcgQ1NCOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKwl3aXJlIGdwaW87CisJd2lyZSBbMzc6MF0gbXByal9pbzsKKwl3aXJlIFs3OjBdIG1wcmpfaW9fMDsKKwl3aXJlIFsxNTowXSBjaGVja2JpdHM7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVWFydCBDb25maWd1cmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMTowXSAgICAgIHVhcnRfZGF0YV9iaXQgICAgICAgIDsKK3JlZwkgICAgICAgdWFydF9zdG9wX2JpdHMgICAgICAgOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworcmVnCSAgICAgICB1YXJ0X3N0aWNrX3Bhcml0eSAgICA7IC8vIDE6IGZvcmNlIGV2ZW4gcGFyaXR5CityZWcJICAgICAgIHVhcnRfcGFyaXR5X2VuICAgICAgIDsgLy8gcGFyaXR5IGVuYWJsZQorcmVnCSAgICAgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSA7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisKK3JlZyBbNzowXSAgICAgIHVhcnRfZGF0YSAgICAgICAgICAgIDsKK3JlZyBbMTU6MF0gICAgIHVhcnRfZGl2aXNvciAgICAgICAgIDsJLy8gZGl2aWRlZCBieSBuICogMTYKK3JlZyBbMTU6MF0gICAgIHVhcnRfdGltZW91dCAgICAgICAgIDsvLyB3YWl0IHRpbWUgbGltaXQKKworcmVnIFsxNTowXSAgICAgdWFydF9yeF9udSAgICAgICAgICAgOworcmVnIFsxNTowXSAgICAgdWFydF90eF9udSAgICAgICAgICAgOworcmVnIFs3OjBdICAgICAgdWFydF93cml0ZV9kYXRhIFswOjM5XTsKK3JlZyAJICAgICAgIHVhcnRfZmlmb19lbmFibGUgICAgIDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKworcmVnIFszMTowXSAgICAgcmVhZF9kYXRhICAgICA7CityZWcgICAgICAgICAgICBmbGFnOworcmVnICAgICAgICAgICAgdGVzdF9mYWlsICAgICA7CisKKworCWFzc2lnbiBjaGVja2JpdHMgPSBtcHJqX2lvWzMxOjE2XTsKKworCWFzc2lnbiBtcHJqX2lvWzNdID0gKENTQiA9PSAxJ2IxKSA/IDEnYjEgOiAxJ2J6OworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwlpbml0aWFsIGJlZ2luCisJCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkJJGR1bXB2YXJzKDEsIHVhcnRfbWFzdGVyX3RiKTsKKwkJJGR1bXB2YXJzKDEsIHVhcnRfbWFzdGVyX3RiLnV1dCk7CisJCSRkdW1wdmFycygxLCB1YXJ0X21hc3Rlcl90Yi51dXQubXByaik7CisJCSRkdW1wdmFycygxLCB1YXJ0X21hc3Rlcl90Yi51dXQubXByai51X3diX2hvc3QpOworCQkkZHVtcHZhcnMoMSwgdWFydF9tYXN0ZXJfdGIudXV0Lm1wcmoudV93Yl9ob3N0LnVfdWFydDJ3Yik7CisJCSRkdW1wdmFycygxLCB1YXJ0X21hc3Rlcl90Yi50Yl9tYXN0ZXJfdWFydCk7CisJCS8vJGR1bXB2YXJzKDIsIHVhcnRfbWFzdGVyX3RiLnV1dC5tcHJqLnVfcGlubXV4KTsKKwllbmQKKyAgICAgICBgZW5kaWYKKworCWluaXRpYWwgYmVnaW4KKworCQkvLyBSZXBlYXQgY3ljbGVzIG9mIDEwMDAgY2xvY2sgZWRnZXMgYXMgbmVlZGVkIHRvIGNvbXBsZXRlIHRlc3RiZW5jaAorCQlyZXBlYXQgKDQwMCkgYmVnaW4KKwkJCXJlcGVhdCAoMTAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKwkJZW5kCisJCSRkaXNwbGF5KCIlY1sxOzMxbSIsMjcpOworCQkkZGlzcGxheSAoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJYGlmZGVmIEdMCisJCSAgICRkaXNwbGF5ICgiTW9uaXRvcjogVGltZW91dCwgVGVzdCBVQVJUIE1hc3RlciAoR0wpIEZhaWxlZCIpOworCQlgZWxzZQorCQkgICAkZGlzcGxheSAoIk1vbml0b3I6IFRpbWVvdXQsIFRlc3QgVUFSVCBNYXN0ZXIgKFJUTCkgRmFpbGVkIik7CisJCWBlbmRpZgorCQkkZGlzcGxheSAoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiVjWzBtIiwyNyk7CisJCSRmaW5pc2g7CisJZW5kCisKKwlpbml0aWFsIGJlZ2luCisgICAgICAgICAgICB1YXJ0X2RhdGFfYml0ICAgICAgICAgICA9IDInYjExOworICAgICAgICAgICAgdWFydF9zdG9wX2JpdHMgICAgICAgICAgPSAxOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworICAgICAgICAgICAgdWFydF9zdGlja19wYXJpdHkgICAgICAgPSAwOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorICAgICAgICAgICAgdWFydF9wYXJpdHlfZW4gICAgICAgICAgPSAwOyAvLyBwYXJpdHkgZW5hYmxlCisgICAgICAgICAgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSAgICA9IDE7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisgICAgICAgICAgICB1YXJ0X2Rpdmlzb3IgICAgICAgICAgICA9IDE1Oy8vIGRpdmlkZWQgYnkgbiAqIDE2CisgICAgICAgICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICAgICA9IDYwMDsvLyB3YWl0IHRpbWUgbGltaXQKKyAgICAgICAgICAgIHVhcnRfZmlmb19lbmFibGUgICAgICAgID0gMDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKyAgICAgICAgICAgIHRiX21hc3Rlcl91YXJ0LmRlYnVnX21vZGUgPSAwOyAvLyBkaXNhYmxlIGRlYnVnIGRpc3BsYXkKKyAgICAgICAgICAgIHRiX21hc3Rlcl91YXJ0LnVhcnRfaW5pdDsKKyAgICAgICAgICAgIHRiX21hc3Rlcl91YXJ0LmNvbnRyb2xfc2V0dXAgKHVhcnRfZGF0YV9iaXQsIHVhcnRfc3RvcF9iaXRzLCB1YXJ0X3Bhcml0eV9lbiwgdWFydF9ldmVuX29kZF9wYXJpdHksIAorICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICB1YXJ0X3N0aWNrX3Bhcml0eSwgdWFydF90aW1lb3V0LCB1YXJ0X2Rpdmlzb3IpOworCSAgIHdhaXQoY2hlY2tiaXRzID09IDE2J2ggQUI2MCk7CisJCSRkaXNwbGF5KCJNb25pdG9yOiBVQVJUIE1hc3RlciBUZXN0IFN0YXJ0ZWQiKTsKKworICAgICAgICAgICByZXBlYXQgKDQwMDApIEAocG9zZWRnZSBjbG9jayk7CisgICAgICAgICAgIC8vJHdyaXRlICgiXG4oJXQpUmVzcG9uc2U6XG4iLCR0aW1lKTsKKyAgICAgICAgICAgZmxhZyA9IDA7CisgICAgICAgICAgIHdoaWxlKGZsYWcgPT0gMCkKKyAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICB0Yl9tYXN0ZXJfdWFydC5yZWFkX2NoYXIocmVhZF9kYXRhLGZsYWcpOworICAgICAgICAgICAgICAgICR3cml0ZSAoIiVjIixyZWFkX2RhdGEpOworICAgICAgICAgICBlbmQKKworCisKKyAgICAgICAgICAgLy8gUmVtb3ZlIFdiIFJlc2V0CisgICAgICAgICAgIHVhcnRtX3JlZ193cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCisgICAgICAgICAgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgIzE7CisKKyAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFdyaXRpbmcgIGV4cGVjdGVkIHZhbHVlIik7CisgICAgICAgICAgIAorICAgICAgICAgICB0ZXN0X2ZhaWwgPSAwOworICAgICAgICAgICB1YXJ0bV9yZWdfd3JpdGUoMzInaDMwMDIwMDU4LDMyJ2gxMTIyMzM0NCk7CisgICAgICAgICAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3dyaXRlKDMyJ2gzMDAyMDA2MCwzMidoMzM0NDU1NjYpOworICAgICAgICAgICB1YXJ0bV9yZWdfd3JpdGUoMzInaDMwMDIwMDY0LDMyJ2g0NDU1NjY3Nyk7CisgICAgICAgICAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3dyaXRlKDMyJ2gzMDAyMDA2QywzMidoNjY3Nzg4OTkpOworCisgICAgICAgICAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA1OCwzMidoMTEyMjMzNDQpOworICAgICAgICAgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDYwLDMyJ2gzMzQ0NTU2Nik7CisgICAgICAgICAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2NCwzMidoNDQ1NTY2NzcpOworICAgICAgICAgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDZDLDMyJ2g2Njc3ODg5OSk7CisKKyAgICAgICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICBpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgTWFzdGVyIChHTCkgUGFzc2VkIik7CisgICAgICAgICAgICAgIGBlbHNlCisgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVhcnQgTWFzdGVyIChSVEwpIFBhc3NlZCIpOworICAgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgIGBpZmRlZiBHTAorICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBNYXN0ZXIgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICAgICAgIGBlbHNlCisgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVYXJ0IE1hc3RlciAoUlRMKSBGYWlsZWQiKTsKKyAgICAgICAgICAgICAgIGBlbmRpZgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgIzEwMAorCisJICAgICRmaW5pc2g7CisJZW5kCisKKwlpbml0aWFsIGJlZ2luCisJCVJTVEIgPD0gMSdiMDsKKwkJQ1NCICA8PSAxJ2IxOwkJLy8gRm9yY2UgQ1NCIGhpZ2gKKwkJIzIwMDA7CisJCVJTVEIgPD0gMSdiMTsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJCSMxNzAwMDA7CisJCUNTQiA9IDEnYjA7CQkvLyBDU0IgY2FuIGJlIHJlbGVhc2VkCisJZW5kCisKKwlpbml0aWFsIGJlZ2luCQkvLyBQb3dlci11cCBzZXF1ZW5jZQorCQlwb3dlcjEgPD0gMSdiMDsKKwkJcG93ZXIyIDw9IDEnYjA7CisJCXBvd2VyMyA8PSAxJ2IwOworCQlwb3dlcjQgPD0gMSdiMDsKKwkJIzEwMDsKKwkJcG93ZXIxIDw9IDEnYjE7CisJCSMxMDA7CisJCXBvd2VyMiA8PSAxJ2IxOworCQkjMTAwOworCQlwb3dlcjMgPD0gMSdiMTsKKwkJIzEwMDsKKwkJcG93ZXI0IDw9IDEnYjE7CisJZW5kCisKKwkvL2Fsd2F5cyBAKG1wcmpfaW8pIGJlZ2luCisJLy8JIzEgJGRpc3BsYXkoIk1QUkotSU8gc3RhdGUgPSAlYiAiLCBtcHJqX2lvWzc6MF0pOworCS8vZW5kCisKKwl3aXJlIGZsYXNoX2NzYjsKKwl3aXJlIGZsYXNoX2NsazsKKwl3aXJlIGZsYXNoX2lvMDsKKwl3aXJlIGZsYXNoX2lvMTsKKworCXdpcmUgVkREM1YzID0gcG93ZXIxOworCXdpcmUgVkREMVY4ID0gcG93ZXIyOworCXdpcmUgVVNFUl9WREQzVjMgPSBwb3dlcjM7CisJd2lyZSBVU0VSX1ZERDFWOCA9IHBvd2VyNDsKKwl3aXJlIFZTUyA9IDEnYjA7CisKKwljYXJhdmVsIHV1dCAoCisJCS52ZGRpbwkgIChWREQzVjMpLAorCQkudnNzaW8JICAoVlNTKSwKKwkJLnZkZGEJICAoVkREM1YzKSwKKwkJLnZzc2EJICAoVlNTKSwKKwkJLnZjY2QJICAoVkREMVY4KSwKKwkJLnZzc2QJICAoVlNTKSwKKwkJLnZkZGExICAgIChVU0VSX1ZERDNWMyksCisJCS52ZGRhMiAgICAoVVNFUl9WREQzVjMpLAorCQkudnNzYTEJICAoVlNTKSwKKwkJLnZzc2EyCSAgKFZTUyksCisJCS52Y2NkMQkgIChVU0VSX1ZERDFWOCksCisJCS52Y2NkMgkgIChVU0VSX1ZERDFWOCksCisJCS52c3NkMQkgIChWU1MpLAorCQkudnNzZDIJICAoVlNTKSwKKwkJLmNsb2NrCSAgKGNsb2NrKSwKKwkJLmdwaW8gICAgIChncGlvKSwKKyAgICAgICAgLm1wcmpfaW8gIChtcHJqX2lvKSwKKwkJLmZsYXNoX2NzYihmbGFzaF9jc2IpLAorCQkuZmxhc2hfY2xrKGZsYXNoX2NsayksCisJCS5mbGFzaF9pbzAoZmxhc2hfaW8wKSwKKwkJLmZsYXNoX2lvMShmbGFzaF9pbzEpLAorCQkucmVzZXRiCSAgKFJTVEIpCisJKTsKKworCXNwaWZsYXNoICMoCisJCS5GSUxFTkFNRSgidWFydF9tYXN0ZXIuaGV4IikKKwkpIHNwaWZsYXNoICgKKwkJLmNzYihmbGFzaF9jc2IpLAorCQkuY2xrKGZsYXNoX2NsayksCisJCS5pbzAoZmxhc2hfaW8wKSwKKwkJLmlvMShmbGFzaF9pbzEpLAorCQkuaW8yKCksCQkJLy8gbm90IHVzZWQKKwkJLmlvMygpCQkJLy8gbm90IHVzZWQKKwkpOworCisKKworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKyAgICBlbmQKK2BlbmRpZiAgICAKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFVBUlQgQWdlbnQgaW50ZWdyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIHVhcnRfdHhkLHVhcnRfcnhkOworCithc3NpZ24gdWFydF90eGQgICA9IG1wcmpfaW9bMzVdOworYXNzaWduIG1wcmpfaW9bMzRdICA9IHVhcnRfcnhkIDsKKyAKK3VhcnRfYWdlbnQgdGJfbWFzdGVyX3VhcnQoCisJLm1jbGsgICAgICAgICAgICAgICAgKGNsb2NrICAgICAgICAgICAgICApLAorCS50eGQgICAgICAgICAgICAgICAgICh1YXJ0X3J4ZCAgICAgICAgICAgKSwKKwkucnhkICAgICAgICAgICAgICAgICAodWFydF90eGQgICAgICAgICAgICkKKwkpOworCisKK2BpbmNsdWRlICJ1YXJ0X21hc3Rlcl90YXNrcy5zdiIKKworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTU1OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL01ha2VmaWxlCkBAIC0wLDAgKzEsMTA1IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitQREtfUEFUSD89L2VmL3RlY2gvU1cvc2t5MTMwQQorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB1c2VyX2Jhc2ljCisKK2FsbDogICR7UEFUVEVSTjo9LnZjZH0KKworaGV4OiAgJHtQQVRURVJOOj0uaGV4fQorCit2dnA6ICAke1BBVFRFUk46PS52dnB9CisKKyUudnZwOiAlX3RiLnYKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfYmFzaWMvdXNlcl9iYXNpY190Yi52IGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQ5ODIxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudgpAQCAtMCwwICsxLDUxNyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBVc2VyIFJpc2MgY29yZSBpcyBib290ZWQgdXNpbmcgIGNvbXBpbGVkIGNvZGUgb2YgICAgICAgIC8vLy8KKy8vLy8gICAgICB1c2VyX3Jpc2NfYm9vdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBVc2VyIFJpc2MgY29yZSB1c2VzIFNlcmlhbCBGbGFzaCBhbmQgU0RSQU0gdG8gYm9vdCAgICAgIC8vLy8KKy8vLy8gICAzLiBBZnRlciBzdWNjZXNzZnVsIGJvb3QsIFJpc2MgY29yZSB3aWxsIGNoZWNrIHRoZSBVQVJUICAgIC8vLy8KKy8vLy8gICAgICBSWCBEYXRhLCBJZiBpdCdzIGF2YWlsYWJsZSB0aGVuIGl0IGxvb3AgYmFjayB0aGUgc2FtZSAgIC8vLy8KKy8vLy8gICAgICBkYXRhIGluIHVhcnQgdHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICA0LiBUZXN0IGJlbmNoIHNlbmQgcmFuZG9tIDQwIGNoYXJhY3RlciB0b3dhcmRzIFVzZXIgdWFydCAgIC8vLy8KKy8vLy8gICAgICBhbmQgZXhwZWN0IHNhbWUgZGF0YSB0byByZXR1cm4gYmFjayAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucy8xMCBwcworCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorCisKK21vZHVsZSB1c2VyX2Jhc2ljX3RiOworcGFyYW1ldGVyIENMSzFfUEVSSU9EID0gMTA7CitwYXJhbWV0ZXIgQ0xLMl9QRVJJT0QgPSAyOworCityZWcgICAgICAgICAgICBjbG9jayAgICAgICAgIDsKK3JlZyAgICAgICAgICAgIGNsb2NrMiAgICAgICAgOworcmVnICAgICAgICAgICAgd2JfcnN0X2kgICAgICA7CityZWcgICAgICAgICAgICBwb3dlcjEsIHBvd2VyMjsKK3JlZyAgICAgICAgICAgIHBvd2VyMywgcG93ZXI0OworCityZWcgICAgICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK3JlZyAgICAgICAgICAgIHdiZF9leHRfc3RiX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorcmVnIFszMTowXSAgICAgd2JkX2V4dF9hZHJfaTsgIC8vIGFkZHJlc3MKK3JlZyAgICAgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCityZWcgWzMxOjBdICAgICB3YmRfZXh0X2RhdF9pOyAgLy8gZGF0YSBvdXRwdXQKK3JlZyBbMzowXSAgICAgIHdiZF9leHRfc2VsX2k7ICAvLyBieXRlIGVuYWJsZQorCit3aXJlIFszMTowXSAgICB3YmRfZXh0X2RhdF9vOyAgLy8gZGF0YSBpbnB1dAord2lyZSAgICAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50Cit3aXJlICAgICAgICAgICB3YmRfZXh0X2Vycl9vOyAgLy8gZXJyb3IKKworLy8gVXNlciBJL08KK3dpcmUgWzM3OjBdICAgIGlvX29lYiAgICAgICAgOword2lyZSBbMzc6MF0gICAgaW9fb3V0ICAgICAgICA7Cit3aXJlIFszNzowXSAgICBpb19pbiAgICAgICAgIDsKKword2lyZSBbMzc6MF0gICAgbXByal9pbyAgICAgICA7Cit3aXJlIFs3OjBdICAgICBtcHJqX2lvXzAgICAgIDsKK3JlZyAgICAgICAgICAgIHRlc3RfZmFpbCAgICAgOworcmVnIFszMTowXSAgICAgcmVhZF9kYXRhICAgICA7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFVhcnQgQ29uZmlndXJhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgWzE6MF0gICAgICB1YXJ0X2RhdGFfYml0ICAgICAgICA7CityZWcJICAgICAgIHVhcnRfc3RvcF9iaXRzICAgICAgIDsgLy8gMDogMSBzdG9wIGJpdDsgMTogMiBzdG9wIGJpdDsKK3JlZwkgICAgICAgdWFydF9zdGlja19wYXJpdHkgICAgOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorcmVnCSAgICAgICB1YXJ0X3Bhcml0eV9lbiAgICAgICA7IC8vIHBhcml0eSBlbmFibGUKK3JlZwkgICAgICAgdWFydF9ldmVuX29kZF9wYXJpdHkgOyAvLyAwOiBvZGQgcGFyaXR5OyAxOiBldmVuIHBhcml0eQorCityZWcgWzc6MF0gICAgICB1YXJ0X2RhdGEgICAgICAgICAgICA7CityZWcgWzE1OjBdICAgICB1YXJ0X2Rpdmlzb3IgICAgICAgICA7CS8vIGRpdmlkZWQgYnkgbiAqIDE2CityZWcgWzE1OjBdICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICA7Ly8gd2FpdCB0aW1lIGxpbWl0CisKK3JlZyBbMTU6MF0gICAgIHVhcnRfcnhfbnUgICAgICAgICAgIDsKK3JlZyBbMTU6MF0gICAgIHVhcnRfdHhfbnUgICAgICAgICAgIDsKK3JlZyBbNzowXSAgICAgIHVhcnRfd3JpdGVfZGF0YSBbMDozOV07CityZWcgCSAgICAgICB1YXJ0X2ZpZm9fZW5hYmxlICAgICA7CS8vIGZpZm8gbW9kZSBkaXNhYmxlCisKK3dpcmUgICAgICAgICAgIGNsb2NrX21vbjsKK2ludGVnZXIgICAgICAgIHRlc3Rfc3RlcDsKKworaW50ZWdlciBpLGo7CisKKwkvLyBFeHRlcm5hbCBjbG9jayBpcyB1c2VkIGJ5IGRlZmF1bHQuICBNYWtlIHRoaXMgYXJ0aWZpY2lhbGx5IGZhc3QgZm9yIHRoZQorCS8vIHNpbXVsYXRpb24uICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgc2xvdyBjbG9jayBhbmQgdGhlIGRpZ2l0YWwgUExMCisJLy8gd291bGQgYmUgdGhlIGZhc3QgY2xvY2suCisKKwlhbHdheXMgIyhDTEsxX1BFUklPRC8yKSBjbG9jayAgPD0gKGNsb2NrID09PSAxJ2IwKTsKKwlhbHdheXMgIyhDTEsyX1BFUklPRC8yKSBjbG9jazIgPD0gKGNsb2NrMiA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCXRlc3Rfc3RlcCA9IDA7CisJCWNsb2NrID0gMDsKKwkJY2xvY2syID0gMDsKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorCWVuZAorCisJYGlmZGVmIFdGRFVNUAorCSAgIGluaXRpYWwgYmVnaW4KKwkgICAJJGR1bXBmaWxlKCJzaW14LnZjZCIpOworCSAgIAkkZHVtcHZhcnMoNCwgdXNlcl9iYXNpY190Yik7CisJICAgZW5kCisgICAgICAgYGVuZGlmCisKKwlpbml0aWFsIGJlZ2luCisJCXdiX3JzdF9pIDw9IDEnYjE7CisJCSMxMDA7CisJCXdiX3JzdF9pIDw9IDEnYjA7CSAgICAJLy8gUmVsZWFzZSByZXNldAorCWVuZAoraW5pdGlhbAorYmVnaW4KKworICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgQmFzaWMgVGVzdCBTdGFydGVkIik7CisgICAKKyAgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKKworICAgdGVzdF9mYWlsPTA7CisgICBmb3JrCisgICAgICBiZWdpbgorCSAgLy8gRGVmYXVsdCBWYWx1ZSBDaGVjaworICAgICAgICAgIC8vIGNmZ19nbGJfY3RybCAgICAgICAgID0gcmVnXzBbNjowXTsKKyAgICAgICAgICAvLyB1YXJ0X2kyY191c2Jfc2VsICAgICA9IHJlZ18wWzg6N107CisgICAgICAgICAgLy8gY2ZnX3diX2Nsa19jdHJsICAgICAgPSByZWdfMFsxMTo5XTsKKyAgICAgICAgICAvLyBjZmdfcnRjX2Nsa19jdHJsICAgICA9IHJlZ18wWzE5OjEyXTsKKyAgICAgICAgICAvLyBjZmdfY3B1X2Nsa19jdHJsICAgICA9IHJlZ18wWzIzOjIwXTsKKyAgICAgICAgICAvLyBjZmdfc2RyYW1fY2xrX2N0cmwgICA9IHJlZ18wWzI3OjI0XTsKKyAgICAgICAgICAvLyBjZmdfdXNiX2Nsa19jdHJsICAgICA9IHJlZ18wWzMxOjI4XTsKKwkgICRkaXNwbGF5KCJTdGVwLTEsIENQVTogQ0xPQ0sxLCBSVEM6IENMT0NLMi8yLCBVU0I6IENMT0NLMiwgV0JTOkNMT0NLMSIpOworCSAgdGVzdF9zdGVwID0gMTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaDAsNCdoMCw0J2gwLDgnaDAsMydiMDAwLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKENMSzFfUEVSSU9ELENMSzJfUEVSSU9EKjIsQ0xLMl9QRVJJT0QsQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC0yLCBDUFU6IENMT0NLMiwgUlRDOiBDTE9DSzIvKDIrMSksIFVTQjogQ0xPQ0syLzIsIFdCUzpDTE9DSzEvMiIpOworCSAgdGVzdF9zdGVwID0gMjsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaDgsNCdoMCw0J2g4LDgnaDEsMydiMTAwLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKENMSzJfUEVSSU9ELCgzKSpDTEsyX1BFUklPRCwyKkNMSzJfUEVSSU9ELDIqQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC0zLCBDUFU6IENMT0NLMS8yLCBSVEM6IENMT0NLMi8oMisyKSwgVVNCOiBDTE9DSzIvKDIrMSksIFdCUzpDTE9DSzEvKDIrMSkiKTsKKwkgIHRlc3Rfc3RlcCA9IDM7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2g5LDQnaDAsNCdoNCw4J2gyLDMnYjEwMSwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcigyKkNMSzFfUEVSSU9ELCg0KSpDTEsyX1BFUklPRCwzKkNMSzJfUEVSSU9ELDMqQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC00LCBDUFU6IENMT0NLMS8zLCBSVEM6IENMT0NLMi8oMiszKSwgVVNCOiBDTE9DSzIvKDIrMiksIFdCUzpDTE9DSzEvKDIrMikiKTsKKwkgIHRlc3Rfc3RlcCA9IDQ7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hBLDQnaDAsNCdoNSw4J2gzLDMnYjExMCwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcigzKkNMSzFfUEVSSU9ELDUqQ0xLMl9QRVJJT0QsNCpDTEsyX1BFUklPRCw0KkNMSzFfUEVSSU9EKTsKKworCSAgJGRpc3BsYXkoIlN0ZXAtNSwgQ1BVOiBDTE9DSzEvNCwgUlRDOiBDTE9DSzIvKDIrNCksIFVTQjogQ0xPQ0syLygyKzMpLCBXQlM6Q0xPQ0sxLygyKzMpIik7CisJICB0ZXN0X3N0ZXAgPSA1OworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoQiw0J2gwLDQnaDYsOCdoNCwzJ2IxMTEsMidiMDAsNydoMDB9KTsKKwkgIGNsb2NrX21vbml0b3IoNCpDTEsxX1BFUklPRCw2KkNMSzJfUEVSSU9ELDUqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTYsIENQVTogQ0xPQ0sxLygyKzMpLCBSVEM6IENMT0NLMi8oMis1KSwgVVNCOiBDTE9DSzIvKDIrNCksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDY7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hDLDQnaDAsNCdoNyw4J2g1LDMnYjExMSwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcig1KkNMSzFfUEVSSU9ELDcqQ0xLMl9QRVJJT0QsNipDTEsyX1BFUklPRCw1KkNMSzFfUEVSSU9EKTsKKworCSAgJGRpc3BsYXkoIlN0ZXAtNywgQ1BVOiBDTE9DSzEvKDIrMyksIFJUQzogQ0xPQ0syLygyKzYpLCBVU0I6IENMT0NLMi8oMis1KSwgV0JTOkNMT0NLMS8oMiszKSIpOworCSAgdGVzdF9zdGVwID0gNzsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEQsNCdoMCw0J2g3LDgnaDYsMydiMTExLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMV9QRVJJT0QsOCpDTEsyX1BFUklPRCw3KkNMSzJfUEVSSU9ELDUqQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC04LCBDUFU6IENMT0NLMS8oMiszKSwgUlRDOiBDTE9DSzIvKDIrNyksIFVTQjogQ0xPQ0syLygyKzYpLCBXQlM6Q0xPQ0sxLygyKzMpIik7CisJICB0ZXN0X3N0ZXAgPSA4OworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRSw0J2gwLDQnaDcsOCdoNywzJ2IxMTEsMidiMDAsNydoMDB9KTsKKwkgIGNsb2NrX21vbml0b3IoNSpDTEsxX1BFUklPRCw5KkNMSzJfUEVSSU9ELDgqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTksIENQVTogQ0xPQ0sxLygyKzMpLCBSVEM6IENMT0NLMi8oMis4KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hGLDQnaDAsNCdoNyw4J2g4LDMnYjExMSwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcig1KkNMSzFfUEVSSU9ELDEwKkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTEwLCBDUFU6IENMT0NLMS8oMiszKSwgUlRDOiBDTE9DSzIvKDIrMTI4KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDEwOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRiw0J2gwLDQnaDcsOCdoODAsMydiMTExLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMV9QRVJJT0QsMTMwKkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTEwLCBDUFU6IENMT0NLMS8oMiszKSwgUlRDOiBDTE9DSzIvKDIrMjU1KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDEwOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRiw0J2gwLDQnaDcsOCdoRkYsMydiMTExLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMV9QRVJJT0QsMjU3KkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKyAgICAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBDaGVja2luZyB0aGUgY2hpcCBzaWduYXR1cmUgOiIpOworICAgICAgICAgLy8gUmVtb3ZlIFdiL1Bpbk11eCBSZXNldAorICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoMSk7CisKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LHJlYWRfZGF0YSwzMidoODI3M184MzQzKTsKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDVDLHJlYWRfZGF0YSwzMidoMTQwMl8yMDIyKTsKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDYwLHJlYWRfZGF0YSwzMidoMDAwM180MDAwKTsKKworICAgICAgZW5kCisgICAKKyAgICAgIGJlZ2luCisgICAgICByZXBlYXQgKDIwMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgCQkvLyAkZGlzcGxheSgiKzEwMDAgY3ljbGVzIik7CisgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgICAgZW5kCisgICAgICBqb2luX2FueQorICAgICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisKKyAgIAorICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoR0wpIFBhc3NlZCIpOworICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBQYXNzZWQiKTsKKyAgICAgICAgIGBlbmRpZgorICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZWxzZQorICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZW5kaWYKKyAgICAgICBlbmQKKyAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICMxMDAKKyAgICAgICRmaW5pc2g7CitlbmQKKworCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgIChjbG9jazIpLCAgLy8gUmVhbC10aW1lIGNsb2NrCisgICAgLndiX3JzdF9pICAgICAgICAod2JfcnN0X2kpLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKworICAgIC53YnNfY3ljX2kgICAod2JkX2V4dF9jeWNfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfc3RiX2kgICAod2JkX2V4dF9zdGJfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfYWRyX2kgICAod2JkX2V4dF9hZHJfaSksICAvLyBhZGRyZXNzCisgICAgLndic193ZV9pICAgICh3YmRfZXh0X3dlX2kpLCAgLy8gd3JpdGUKKyAgICAud2JzX2RhdF9pICAgKHdiZF9leHRfZGF0X2kpLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAud2JzX3NlbF9pICAgKHdiZF9leHRfc2VsX2kpLCAgLy8gYnl0ZSBlbmFibGUKKworICAgIC53YnNfZGF0X28gICAod2JkX2V4dF9kYXRfbyksICAvLyBkYXRhIGlucHV0CisgICAgLndic19hY2tfbyAgICh3YmRfZXh0X2Fja19vKSwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAKKyAgICAvLyBMb2dpYyBBbmFseXplciBTaWduYWxzCisgICAgLmxhX2RhdGFfaW4gICAgICAoJzEpICwKKyAgICAubGFfZGF0YV9vdXQgICAgICgpLAorICAgIC5sYV9vZW5iICAgICAgICAgKCcwKSwKKyAKKworICAgIC8vIElPcworICAgIC5pb19pbiAgICAgICAgICAoaW9faW4pICAsCisgICAgLmlvX291dCAgICAgICAgIChpb19vdXQpICwKKyAgICAuaW9fb2ViICAgICAgICAgKGlvX29lYikgLAorCisgICAgLnVzZXJfaXJxICAgICAgICgpIAorCispOworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKworCisgICAgZW5kCitgZW5kaWYgICAgCisKKwordGFzayBjbG9ja19tb25pdG9yOworaW5wdXQgWzE1OjBdIGV4cF9jcHVfcGVyaW9kOworaW5wdXQgWzE1OjBdIGV4cF9ydGNfcGVyaW9kOworaW5wdXQgWzE1OjBdIGV4cF91c2JfcGVyaW9kOworaW5wdXQgWzE1OjBdIGV4cF93YnNfcGVyaW9kOworYmVnaW4KKyAgIGZvcmNlIGNsb2NrX21vbiA9IHVfdG9wLnVfd2JfaG9zdC5jcHVfY2xrOworICAgY2hlY2tfY2xvY2tfcGVyaW9kKCJDUFUgQ0xvY2siLGV4cF9jcHVfcGVyaW9kKTsKKyAgIHJlbGVhc2UgY2xvY2tfbW9uOworCisgICBmb3JjZSBjbG9ja19tb24gPSB1X3RvcC51X3diX2hvc3QucnRjX2NsazsKKyAgIGNoZWNrX2Nsb2NrX3BlcmlvZCgiUlRDIENsb2NrIixleHBfcnRjX3BlcmlvZCk7CisgICByZWxlYXNlIGNsb2NrX21vbjsKKworICAgZm9yY2UgY2xvY2tfbW9uID0gdV90b3AudV93Yl9ob3N0LnVzYl9jbGs7CisgICBjaGVja19jbG9ja19wZXJpb2QoIlVTQiBDbG9jayIsZXhwX3VzYl9wZXJpb2QpOworICAgcmVsZWFzZSBjbG9ja19tb247CisKKyAgIGZvcmNlIGNsb2NrX21vbiA9IHVfdG9wLnVfd2JfaG9zdC53YnNfY2xrX291dDsKKyAgIGNoZWNrX2Nsb2NrX3BlcmlvZCgiV0JTIENsb2NrIixleHBfd2JzX3BlcmlvZCk7CisgICByZWxlYXNlIGNsb2NrX21vbjsKK2VuZAorZW5kdGFzaworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENoZWNrIHRoZSBjbG9jayBwZXJpb2QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayBjaGVja19jbG9ja19wZXJpb2Q7CitpbnB1dCBbMTI3OjBdIGNsa19uYW1lOworaW5wdXQgWzE1OjBdIGNsa19wZXJpb2Q7IC8vIGluIE5TCit0aW1lIHByZXZfdCwgbmV4dF90LCBwZXJpb2RkOworYmVnaW4KKwkkdGltZWZvcm1hdCgtMTIsMywibnMiLDEwKTsKKyAgIHJlcGVhdCgxKSBAKHBvc2VkZ2UgY2xvY2tfbW9uKTsKKyAgIHJlcGVhdCgxKSBAKHBvc2VkZ2UgY2xvY2tfbW9uKTsKKyAgIHByZXZfdCAgPSAkcmVhbHRpbWU7CisgICByZXBlYXQoMTAwKSBAKHBvc2VkZ2UgY2xvY2tfbW9uKTsKKyAgIG5leHRfdCAgPSAkcmVhbHRpbWU7CisgICBwZXJpb2RkID0gKG5leHRfdC1wcmV2X3QpLzEwMDsKKyAgIC8vcGVyaW9kZCA9IChwZXJpb2RkKS8xZTk7CisgICBpZihjbGtfcGVyaW9kICE9IHBlcmlvZGQpIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIlNUQVRVUzogRkFJTCA9PiAlcyBFeHAgUGVyaW9kOiAlZCBSeGQ6ICVkIixjbGtfbmFtZSxjbGtfcGVyaW9kLHBlcmlvZGQpOworICAgICAgIHRlc3RfZmFpbCA9IDE7CisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJTVEFUVVM6IFBBU1MgPT4gJXMgIFBlcmlvZDogJWQgIixjbGtfbmFtZSxjbGtfcGVyaW9kKTsKKyAgIGVuZAorZW5kCitlbmR0YXNrCisKKworCisKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBXUklURSBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworaW5wdXQgWzMxOjBdIGNtcF9kYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIGlmKGRhdGEgIT09IGNtcF9kYXRhKSBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1IgOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRXhkOiAweCV4IFJ4ZDogMHgleCAiLGFkZHJlc3MsY21wX2RhdGEsZGF0YSk7CisgICAgIHRlc3RfZmFpbCA9IDE7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgZW5kCisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCitgaWZkZWYgR0wKKword2lyZSAgICAgICAgd2JkX3NwaV9zdGJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zcGlfYWNrX28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWNrX287Cit3aXJlICAgICAgICB3YmRfc3BpX3dlX2kgICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2Fkcl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fkcl9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc3BpX3NlbF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfc2RyYW1fc3RiX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc2RyYW1fYWNrX28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWNrX287Cit3aXJlICAgICAgICB3YmRfc2RyYW1fd2VfaSAgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9hZHJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hZGRyX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc2RyYW1fc2VsX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF91YXJ0X3N0Yl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hY2s7Cit3aXJlICAgICAgICB3YmRfdWFydF93ZV9pICAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd3I7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9hZHJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193ZGF0YTsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19yZGF0YTsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3NlbF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL01ha2VmaWxlIGIvdmVyaWxvZy9kdi91c2VyX2kyY20vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4OGVkOAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL01ha2VmaWxlCkBAIC0wLDAgKzEsMTExIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitQREtfUEFUSD89L2VmL3RlY2gvU1cvc2t5MTMwQQorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB1c2VyX2kyY20KKworYWxsOiAgJHtQQVRURVJOOj0udmNkfQorCitoZXg6ICAke1BBVFRFUk46PS5oZXh9CisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudgorCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgdXNlcl91YXJ0LmMgLW8gdXNlcl91YXJ0Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvY3J0X3RjbS5TIC1vIGNydF90Y20ubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLW8gdXNlcl91YXJ0LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rX3RjbS5sZCB1c2VyX3VhcnQubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKwkke0dDQzY0X1BSRUZJWH0tb2JqZHVtcCAtRCB1c2VyX3VhcnQuZWxmID4gdXNlcl91YXJ0LmR1bXAKKwlybSBjcnRfdGNtLm8gdXNlcl91YXJ0Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfaTJjbS9ydW5faXZlcmlsb2cgYi92ZXJpbG9nL2R2L3VzZXJfaTJjbS9ydW5faXZlcmlsb2cKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2FlMWZmZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDM3IEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbiAgdXNlcl91YXJ0LmMgLW8gdXNlcl91YXJ0Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3VhcnQuZWxmIC1UIC4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmtfdGNtLmxkIHVzZXJfdWFydC5vIGNydF90Y20ubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpjb3B5IC1PIHZlcmlsb2cgdXNlcl91YXJ0LmVsZiB1c2VyX3VhcnQuaGV4CisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqZHVtcCAtRCB1c2VyX3VhcnQuZWxmID4gdXNlcl91YXJ0LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfdWFydC5vCisKKyNpdmVyaWxvZyB3aXRoIHdhdmVmb3JtIGR1bXAKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJFBES19QQVRIIC1JICAuLi8uLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsICAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9pMmNtL3NyYy9pbmNsdWRlcyAtSSAkQ0FSQVZFTF9ST09UL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi9tb2RlbCAtSSAuLi9hZ2VudHMgdXNlcl9pMmNtX3RiLnYgLW8gdXNlcl9pMmNtX3RiLnZ2cAorCisKKwordnZwIHVzZXJfaTJjbV90Yi52dnAgfCB0ZWUgdGVzdC5sb2cKKworXHJtIC1yZiB1c2VyX2kyY21fdGIudnZwCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfaTJjbS91c2VyX2kyY21fdGIudiBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3VzZXJfaTJjbV90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjc3NGQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfaTJjbS91c2VyX2kyY21fdGIudgpAQCAtMCwwICsxLDU1MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBpMmMgTWFzdGVyIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInMyNWZsMjU2cy5zdiIKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAibXQ0OGxjOG04YTIudiIKK2BpbmNsdWRlICJpMmNfc2xhdmVfbW9kZWwudiIKKworCitgZGVmaW5lIEFERFJfU1BBQ0VfVUFSVCAgMzInaDMwMDFfMDAwMAorYGRlZmluZSBBRERSX1NQQUNFX0kyQ00gIDMyJ2gzMDAxXzAwNDAKK2BkZWZpbmUgQUREUl9TUEFDRV9QSU5NVVggIDMyJ2gzMDAyXzAwMDAKKworCittb2R1bGUgdGJfdG9wOworCityZWcgICAgICAgICAgICBjbG9jayAgICAgICAgIDsKK3JlZyAgICAgICAgICAgIHdiX3JzdF9pICAgICAgOworcmVnICAgICAgICAgICAgcG93ZXIxLCBwb3dlcjI7CityZWcgICAgICAgICAgICBwb3dlcjMsIHBvd2VyNDsKKworcmVnICAgICAgICAgICAgd2JkX2V4dF9jeWNfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CityZWcgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK3JlZyBbMzE6MF0gICAgIHdiZF9leHRfYWRyX2k7ICAvLyBhZGRyZXNzCityZWcgICAgICAgICAgICB3YmRfZXh0X3dlX2k7ICAvLyB3cml0ZQorcmVnIFszMTowXSAgICAgd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CityZWcgWzM6MF0gICAgICB3YmRfZXh0X3NlbF9pOyAgLy8gYnl0ZSBlbmFibGUKKword2lyZSBbMzE6MF0gICAgd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKK3dpcmUgICAgICAgICAgIHdiZF9leHRfYWNrX287ICAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgd2JkX2V4dF9lcnJfbzsgIC8vIGVycm9yCisKKy8vIFVzZXIgSS9PCit3aXJlIFszNzowXSAgICBpb19vZWIgICAgICAgIDsKK3dpcmUgWzM3OjBdICAgIGlvX291dCAgICAgICAgOword2lyZSBbMzc6MF0gICAgaW9faW4gICAgICAgICA7CisKK3dpcmUgWzM3OjBdICAgIG1wcmpfaW8gICAgICAgOword2lyZSBbNzowXSAgICAgbXByal9pb18wICAgICA7CityZWcgICAgICAgICAgICB0ZXN0X2ZhaWwgICAgIDsKK3JlZyBbMzE6MF0gICAgIHJlYWRfZGF0YSAgICAgOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBVYXJ0IENvbmZpZ3VyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbnRlZ2VyIGksajsKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgidGJfdG9wLnZjZCIpOworCSAgIAkkZHVtcHZhcnMoMCwgdGJfdG9wKTsKKwkgICBlbmQKKyAgICAgICBgZW5kaWYKKworCWluaXRpYWwgYmVnaW4KKwkJd2JfcnN0X2kgPD0gMSdiMTsKKwkJIzEwMDsKKwkJd2JfcnN0X2kgPD0gMSdiMDsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJZW5kCitpbml0aWFsCitiZWdpbgorICAgdGVzdF9mYWlsID0gMDsKKworICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgJGRpc3BsYXkoIiAgIFRlc3RpbmcgSTJDTSBSZWFkL1dyaXRlIEFjY2VzcyAgICAgICAgICAgIik7CisgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgIAorCisgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgIzE7CisgICAvLyBFbmFibGUgSTJNIEJsb2NrICYgV0IgUmVzZXQgYW5kIEVuYWJsZSBJMkNNIE11eCBTZWxlY3QKKyAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaEExKTsKKworICAgLy8gRW5hYmxlIEkyQyBNdWx0aSBGdW5jdGlvbmFsIFBvcnRzCisgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfUElOTVVYKydoMDAzOCwnaDIwMCk7CisKKyAgIHJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOyAgCisKKyAgICBAKHBvc2VkZ2UgIGNsb2NrKTsKKyAgICAkZGlzcGxheSgiLS0tLS0tLS0tLSBJbml0aWFsaXplIEkyQyBNYXN0ZXIgLS0tLS0tLS0tLSIpOyAKKworICAgIC8vV3JpcmUgUHJlc2NhbGUgcmVnaXN0ZXJzCisgICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2gwPDwyKSw4J2hDNyk7ICAKKyAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDE8PDIpLDgnaDAwKTsgIAorICAgIC8vIENvcmUgRW5hYmxlCisgICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2gyPDwyKSw4J2g4MCk7ICAKKyAgICAKKyAgICAvLyBXcml0aW5nIERhdGEKKworICAgICRkaXNwbGF5KCItLS0tLS0tLS0tIFdyaXRpbmcgRGF0YSAtLS0tLS0tLS0tIik7IAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2gzPDwyKSw4J2gyMCk7IC8vIFNsYXZlIEFkZHIgKyBXUiAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDkwKTsgIAorICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorICAgICAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoNjYpOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDEwKTsgIAorCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisgICAKKyAgIC8qIEJ5dGUxOiAxMiAqLyAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoMTIpOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDEwKTsgLy8gTm8gU3RvcCArIFdyaXRlICAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorICAgCisgICAvKiBCeXRlMTogMzQgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDM0KTsgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2gxMCk7IC8vIE5vIFN0b3AgKyBXcml0ZSAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorCisgICAvKiBCeXRlMTogNTYgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDU2KTsgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2gxMCk7IC8vIE5vIFN0b3AgKyBXcml0ZSAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorCisgICAvKiBCeXRlMTogNzggKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDc4KTsgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2g1MCk7IC8vIFN0b3AgKyBXcml0ZSAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorCisgICAgLy9SZWFkaW5nIERhdGEKKyAgICAKKyAgICAvL1dyaXJlIEFkZHJlc3MKKyAgICAkZGlzcGxheSgiLS0tLS0tLS0tLSBXcml0aW5nIERhdGEgLS0tLS0tLS0tLSIpOyAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoMjApOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDkwKTsgIAorICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorICAgICAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoNjYpOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDUwKTsgIAorCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisKKyAgICAvL0dlbmVyYXRlIFJlYWQKKyAgICAkZGlzcGxheSgiLS0tLS0tLS0tLSBXcml0aW5nIERhdGEgLS0tLS0tLS0tLSIpOyAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoMjEpOyAvLyBTbGF2ZSBBZGRyICsgUkQgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2g5MCk7ICAKKyAgICByZWFkX2RhdGFbMV0gPSAxJ2IxOworICAgIHdoaWxlKHJlYWRfZGF0YVsxXT09MSkKKyAgICAgIHdiX3VzZXJfY29yZV9yZWFkKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLHJlYWRfZGF0YSk7ICAKKworICAgIC8qIEJZVEUtMSA6IDB4MTIgICovIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2gyMCk7ICAvLyBSRCArIEFDSworCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisKKyAgICAvL0NvbXBhcmUgcmVjZWl2ZWQgZGF0YQorICAgIHdiX3VzZXJfY29yZV9yZWFkX2NtcChgQUREUl9TUEFDRV9JMkNNKyg4J2gzPDwyKSw4J2gxMik7ICAKKyAgICAgCisgICAgLyogQllURS0yIDogMHgzNCAgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDIwKTsgIC8vIFJEICsgQUNLCisKKyAgICByZWFkX2RhdGFbMV0gPSAxJ2IxOworICAgIHdoaWxlKHJlYWRfZGF0YVsxXT09MSkKKyAgICAgIHdiX3VzZXJfY29yZV9yZWFkKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLHJlYWRfZGF0YSk7ICAKKworICAgIC8vQ29tcGFyZSByZWNlaXZlZCBkYXRhCisgICAgd2JfdXNlcl9jb3JlX3JlYWRfY21wKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDM0KTsgIAorCisgICAgLyogQllURS0zIDogMHg1NiAgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQgPDwyKSw4J2gyMCk7ICAvLyBSRCArIEFDSworCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisKKyAgICAvL0NvbXBhcmUgcmVjZWl2ZWQgZGF0YQorICAgIHdiX3VzZXJfY29yZV9yZWFkX2NtcChgQUREUl9TUEFDRV9JMkNNKyg4J2gzPDwyKSw4J2g1Nik7ICAKKworICAgIC8qIEJZVEUtNCA6IDB4NzggICovIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2g2OCk7ICAvLyBTVE9QICsgUkQgKyBOQUNLIAorCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0IDw8MikscmVhZF9kYXRhKTsgIAorCisgICAgLy9Db21wYXJlIHJlY2VpdmVkIGRhdGEKKyAgICB3Yl91c2VyX2NvcmVfcmVhZF9jbXAoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMyA8PDIpLDgnaDc4KTsgIAorCisgICAgcmVwZWF0KDEwMClAKHBvc2VkZ2UgY2xvY2spOworCisKKworICAgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgIGlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgSTJNIFRlc3QgKEdMKSBQYXNzZWQiKTsKKyAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgSTJNIFRlc3QgKFJUTCkgUGFzc2VkIik7CisgICAgICAgIGBlbmRpZgorICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBJMk0gVGVzdCAoR0wpIEZhaWxlZCIpOworICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIEkyTSBUZXN0IChSVEwpIEZhaWxlZCIpOworICAgICAgICAgYGVuZGlmCisgICAgICBlbmQKKyAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAjMTAwCisgICAgICRmaW5pc2g7CitlbmQKKworCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworYGlmbmRlZiBHTCAvLyBEcml2ZSBQb3dlciBmb3IgSG9sZCBGaXggQnVmCisgICAgLy8gQWxsIHN0YW5kYXJkIGNlbGwgbmVlZCBwb3dlciBob29rLXVwIGZvciBmdW5jdGlvbmFsaXR5IHdvcmsKKyAgICBpbml0aWFsIGJlZ2luCisKKyAgICBlbmQKK2BlbmRpZiAgICAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSW50ZWdyYXRlIHRoZSBTZXJpYWwgZmxhc2ggd2l0aCBxdXJkIHN1cHBvcnQgdG8KKy8vICB1c2VyIGNvcmUgdXNpbmcgdGhlIGdwaW8gcGFkcworLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2lyZSBmbGFzaF9jbGsgPSBpb19vdXRbMjRdOworICAgd2lyZSBmbGFzaF9jc2IgPSBpb19vdXRbMjhdOworICAgLy8gQ3JlYXRpbmcgUGFkIERlbGF5CisgICB3aXJlICMxIGlvX29lYl8yOSA9IGlvX29lYlsyOV07CisgICB3aXJlICMxIGlvX29lYl8zMCA9IGlvX29lYlszMF07CisgICB3aXJlICMxIGlvX29lYl8zMSA9IGlvX29lYlszMV07CisgICB3aXJlICMxIGlvX29lYl8zMiA9IGlvX29lYlszMl07CisgICB0cmkgICMxIGZsYXNoX2lvMCA9IChpb19vZWJfMjk9PSAxJ2IwKSA/IGlvX291dFsyOV0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzEgPSAoaW9fb2ViXzMwPT0gMSdiMCkgPyBpb19vdXRbMzBdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8yID0gKGlvX29lYl8zMT09IDEnYjApID8gaW9fb3V0WzMxXSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMyA9IChpb19vZWJfMzI9PSAxJ2IwKSA/IGlvX291dFszMl0gOiAxJ2J6OworCisgICBhc3NpZ24gaW9faW5bMjldID0gZmxhc2hfaW8wOworICAgYXNzaWduIGlvX2luWzMwXSA9IGZsYXNoX2lvMTsKKyAgIGFzc2lnbiBpb19pblszMV0gPSBmbGFzaF9pbzI7CisgICBhc3NpZ24gaW9faW5bMzJdID0gZmxhc2hfaW8zOworCisKKyAgIC8vIFF1YXJkIGZsYXNoCisgICAgIHMyNWZsMjU2cyAjKC5tZW1fZmlsZV9uYW1lKCJ1c2VyX3VhcnQuaGV4IiksCisJICAgICAgICAgLm90cF9maWxlX25hbWUoIm5vbmUiKSwgCisgICAgICAgICAgICAgICAgIC5UaW1pbmdNb2RlbCgiUzI1Rkw1MTJTQUdNRkkwMTBfRl8zMHBGIikpIAorCQkgdV9zcGlfZmxhc2hfMjU2bWIKKyAgICAgICAoCisgICAgICAgICAgIC8vIERhdGEgSW5wdXRzL091dHB1dHMKKyAgICAgICAuU0kgICAgICAoZmxhc2hfaW8wKSwKKyAgICAgICAuU08gICAgICAoZmxhc2hfaW8xKSwKKyAgICAgICAvLyBDb250cm9scworICAgICAgIC5TQ0sgICAgIChmbGFzaF9jbGspLAorICAgICAgIC5DU05lZyAgIChmbGFzaF9jc2IpLAorICAgICAgIC5XUE5lZyAgIChmbGFzaF9pbzIpLAorICAgICAgIC5IT0xETmVnIChmbGFzaF9pbzMpLAorICAgICAgIC5SU1ROZWcgICghd2JfcnN0X2kpCisKKyAgICAgICApOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEkyQworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RyaSBzY2wsc2RhOworCithc3NpZ24gc2RhICA9ICAoaW9fb2ViWzIyXSA9PSAxJ2IwKSA/IGlvX291dFsyMl0gOiAxJ2J6OworYXNzaWduIHNjbCAgID0gKGlvX29lYlsyM10gPT0gMSdiMCkgPyBpb19vdXRbMjNdOiAxJ2J6OworYXNzaWduIGlvX2luWzIyXSAgPSAgc2RhOworYXNzaWduIGlvX2luWzIzXSAgPSAgc2NsOworCitwdWxsdXAgcDEoc2NsKTsgLy8gcHVsbHVwIHNjbCBsaW5lCitwdWxsdXAgcDIoc2RhKTsgLy8gcHVsbHVwIHNkYSBsaW5lCisKKyAKK2kyY19zbGF2ZV9tb2RlbCB1X2kyY19zbGF2ZSAoCisJLnNjbCAgIChzY2wpLCAKKwkuc2RhICAgKHNkYSkKKyAgICAgICApOworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAvLyRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBSRUFEIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWRfY21wOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gY21wX2RhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgaWYoZGF0YSA9PT0gY21wX2RhdGEpIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IERFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJFUlJPUjogREVCVUcgV0IgVVNFUiBBQ0NFU1MgUkVBRCBBZGRyZXNzIDogJXgsIEV4cCBEYXRhIDogJXggUnhkIERhdGE6ICIsYWRkcmVzcyxjbXBfZGF0YSxkYXRhKTsKKyAgICAgdGVzdF9mYWlsPSAxOworICAgICAjMTAwCisgICAgICRmaW5pc2g7CisgIGVuZAorICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKworYGlmZGVmIEdMCisKK3dpcmUgICAgICAgIHdiZF9zcGlfc3RiX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc3BpX2Fja19vICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fja19vOword2lyZSAgICAgICAgd2JkX3NwaV93ZV9pICAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9hZHJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9vICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9vOword2lyZSBbMzowXSAgd2JkX3NwaV9zZWxfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3NkcmFtX3N0Yl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NkcmFtX2Fja19vID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2Fja19vOword2lyZSAgICAgICAgd2JkX3NkcmFtX3dlX2kgID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fYWRyX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWRkcl9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2RhdF9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2RhdF9vID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2RhdF9vOword2lyZSBbMzowXSAgd2JkX3NkcmFtX3NlbF9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfdWFydF9zdGJfaSAgPSB1X3RvcC51X3VhcnRfaTJjLnVfdWFydF9jb3JlLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmMudV91YXJ0X2NvcmUucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmMudV91YXJ0X2NvcmUucmVnX3dyOword2lyZSBbNzowXSAgd2JkX3VhcnRfYWRyX2kgID0gdV90b3AudV91YXJ0X2kyYy51X3VhcnRfY29yZS5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmMudV91YXJ0X2NvcmUucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyYy51X3VhcnRfY29yZS5yZWdfcmRhdGE7Cit3aXJlICAgICAgICB3YmRfdWFydF9zZWxfaSAgPSB1X3RvcC51X3VhcnRfaTJjLnVfdWFydF9jb3JlLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3VzZXJfdWFydC5jIGIvdmVyaWxvZy9kdi91c2VyX2kyY20vdXNlcl91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2ZjIzYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3VzZXJfdWFydC5jCkBAIC0wLDAgKzEsNDIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNkZWZpbmUgU0NfU0lNX09VVFBPUlQgKDB4ZjAwMDAwMDApCisjZGVmaW5lIHVpbnQzMl90ICBsb25nCisKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDAwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWczICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDBDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMTApCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxNCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDE4KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzcgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnOCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAyMCkKKworaW50IG1haW4oKQoreworCisgICAgd2hpbGUoMSkgeworICAgICAgIC8vIENoZWNrIFVBUlQgUlggZmlmbyBoYXMgZGF0YSwgaWYgYXZhaWxhYmxlIGxvb3AgYmFjayB0aGUgZGF0YQorICAgICAgIGlmKHJlZ19tcHJqX3VhcnRfcmVnOCAhPSAwKSB7IAorCSAgIHJlZ19tcHJqX3VhcnRfcmVnNSA9IHJlZ19tcHJqX3VhcnRfcmVnNjsKKyAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1ZDZiYQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9tYmlzdF90ZXN0MS9NYWtlZmlsZQpAQCAtMCwwICsxLDEwOSBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCisjIyBDYXJhdmVsIFBvaW50ZXJzCitDQVJBVkVMX1JPT1QgPz0gLi4vLi4vLi4vY2FyYXZlbAorQ0FSQVZFTF9QQVRIID89ICQoQ0FSQVZFTF9ST09UKQorQ0FSQVZFTF9GSVJNV0FSRV9QQVRIID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cvZHYvY2FyYXZlbAorQ0FSQVZFTF9WRVJJTE9HX1BBVEggID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cKK0NBUkFWRUxfUlRMX1BBVEggPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9ydGwKK0NBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvZHYvY2FyYXZlbAorCisKKyMjIFVzZXIgUHJvamVjdCBQb2ludGVycworVVBSSl9WRVJJTE9HX1BBVEggPz0gLi4vLi4vLi4vdmVyaWxvZworVVBSSl9SVExfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bAorVVBSSl9HTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZ2wKK1VQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKK1VQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKworIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCitHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKKworIyMgUklTQ1YgR0NDIAorR0NDX1BBVEg/PS9lZi9hcHBzL2JpbgorR0NDX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorUERLX1BBVEg/PS9lZi90ZWNoL1NXL3NreTEzMEEKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTT89UlRMCitEVU1QPz1PRkYKKworLlNVRkZJWEVTOgorCitQQVRURVJOID0gdXNlcl9tYmlzdF90ZXN0MQorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudiAKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPCAgfCB0ZWUgc2ltX3Jlc3VsdC5sb2cKKworY2hlY2stZW52OgoraWZuZGVmIFBES19ST09UCisJJChlcnJvciBQREtfUk9PVCBpcyB1bmRlZmluZWQsIHBsZWFzZSBleHBvcnQgaXQgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCitpZmVxICgsJCh3aWxkY2FyZCAkKFBES19ST09UKS9za3kxMzBBKSkKKwkkKGVycm9yICQoUERLX1JPT1QpL3NreTEzMEEgbm90IGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBwZGsgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCisjaWZlcSAoLCQod2lsZGNhcmQgJChHQ0M2NF9QUkVGSVgpLWdjYyApKQorIwkkKGVycm9yICQoR0NDNjRfUFJFRklYKS1nY2MgaXMgbm90IGZvdW5kLCBwbGVhc2UgZXhwb3J0IEdDQ19QQVRIIGFuZCBHQ0NfUFJFRklYIGJlZm9yZSBydW5uaW5nIG1ha2UpCisjZW5kaWYKKyMgY2hlY2sgZm9yIGVmYWJsZXNzIHN0eWxlIGluc3RhbGxhdGlvbgoraWZlcSAoLCQod2lsZGNhcmQgJChQREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi8qL3Zlcmlsb2cpKQorU0lNX0RFRklORVMgOj0gJHtTSU1fREVGSU5FU30gLURFRl9TVFlMRQorZW5kaWYKKworIyAtLS0tIENsZWFuIC0tLS0KKworY2xlYW46CisJcm0gLWYgKi52dnAgKi52Y2QgKi5sb2cKKworLlBIT05ZOiBjbGVhbiBhbGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9tYmlzdF90ZXN0MS9ydW5faXZlcmlsb2cgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2NmI4NjMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsMzEgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpdmVyaWxvZyB3aXRob3V0IER1bXAKKyMKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9lZmFibGVzcy9NUFctMy9wZGsvc2t5MTMwQSBcCistSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vY2FyYXZlbC92ZXJpbG9nL2R2L2NhcmF2ZWwgXAorLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL2NhcmF2ZWwvdmVyaWxvZy9ydGwgXAorLUkgLi4vICAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L2luY2x1ZGUgXAordXNlcl9tYmlzdF90ZXN0MV90Yi52IC1vIHVzZXJfbWJpc3RfdGVzdDEudnZwCisKKwordnZwIHVzZXJfbWJpc3RfdGVzdDEudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl9tYmlzdF90ZXN0MS52dnAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9tYmlzdF90ZXN0MS91c2VyX21iaXN0X3Rlc3QxX3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvdXNlcl9tYmlzdF90ZXN0MV90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzBlMTgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvdXNlcl9tYmlzdF90ZXN0MV90Yi52CkBAIC0wLDAgKzEsMTEzOSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUgTUJJU1QgbG9naWMgdGhyb3VnaCBFeHRlcm5hbCBXQiBpL0YuICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInVwcmpfbmV0bGlzdHMudiIKKworYGRlZmluZSBXQl9NQVAgICAgICAgICAgIGAzMDA4MF8wMDAwCitgZGVmaW5lIEdMQkxfRlVOQ19NQVAgICAgJ2gzMDAyXzAwMDAKK2BkZWZpbmUgTUJJU1QxX0ZVTkNfTUFQICAnaDMwMDNfMDAwMCAgLy8gMHgzMDAzXzAwMDAgdG8gMHgzMDAzXzA3RkYKK2BkZWZpbmUgTUJJU1QyX0ZVTkNfTUFQICAnaDMwMDNfMDgwMCAgLy8gMHgzMDAzXzA4MDAgdG8gMHgzMDAzXzBGRkYKK2BkZWZpbmUgTUJJU1QzX0ZVTkNfTUFQICAnaDMwMDNfMTAwMCAgLy8gMHgzMDAzXzEwMDAgdG8gMHgzMDAzXzE3RkYKK2BkZWZpbmUgTUJJU1Q0X0ZVTkNfTUFQICAnaDMwMDNfMTgwMCAgLy8gMHgzMDAzXzE4MDAgdG8gMHgzMDAzXzFGRkYKKworYGRlZmluZSBHTEJMX0JJU1RfQ1RSTDEgICdoMzAwMl8wMDcwICAgIAorYGRlZmluZSBHTEJMX0JJU1RfU1RBVDEgICdoMzAwMl8wMDc0CitgZGVmaW5lIEdMQkxfQklTVF9TV0RBVEEgJ2gzMDAyXzAwNzgKK2BkZWZpbmUgR0xCTF9CSVNUX1NSREFUQSAnaDMwMDJfMDA3QworYGRlZmluZSBHTEJMX0JJU1RfU1BEQVRBICdoMzAwMl8wMDc4ICAjCisKK2BkZWZpbmUgV0JfR0xCTF9DVFJMICAgICAnaDMwODBfMDAwMAorCitgZGVmaW5lIE5PX1NSQU0gICAgICAgICAgNCAvLyA4CisKKworCittb2R1bGUgdXNlcl9tYmlzdF90ZXN0MV90YjsKKwlyZWcgY2xvY2s7CisJcmVnIHdiX3JzdF9pOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIHJlZyBbMzowXSAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAgICAgd2lyZSBbMzE6MF0gd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCisJLy8gVXNlciBJL08KKwl3aXJlIFszNzowXSBpb19vZWI7CisJd2lyZSBbMzc6MF0gaW9fb3V0OworCXdpcmUgWzM3OjBdIGlvX2luOworCisJd2lyZSBncGlvOworCXdpcmUgWzM3OjBdIG1wcmpfaW87CisJd2lyZSBbNzowXSBtcHJqX2lvXzA7CisJcmVnICAgICAgICB0ZXN0X2ZhaWw7CisJcmVnIFszMTowXSByZWFkX2RhdGE7CisgICAgICAgIHJlZyBbMzE6MF0gd3JpdGVtZW0gWzA6NTExXTsKKyAgICAgICAgcmVnIFs4OjBdICBmYXVsdGFkZHIgWzA6N107CisgICAgICAgIGludGVnZXIgaTsKKyAgICAgICAgZXZlbnQgICAgICBlcnJvcl9pbnNlcnQ7CisKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDIsIHVzZXJfbWJpc3RfdGVzdDFfdGIpOworCSAgIAkkZHVtcHZhcnMoMCwgdXNlcl9tYmlzdF90ZXN0MV90Yi51X3RvcC51X21iaXN0KTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfbWJpc3RfdGVzdDFfdGIudV90b3AudV9pbnRlcmNvbik7CisJCSRkdW1wb2ZmOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQl3Yl9yc3RfaSA8PSAxJ2IxOworCQkjMTAwOworCQl3Yl9yc3RfaSA8PSAxJ2IwOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKworCQkjMjAwOyAvLyBXYWl0IGZvciByZXNldCByZW1vdmFsCisJICAgICAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFRlc3QgU3RhcnRlZCIpOworCisJCXRlc3RfZmFpbCA9IDA7CisJCS8vIFJlbW92ZSBXYiBSZXNldAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFdCX0dMQkxfQ1RSTCwnaDEpOworCisJCSRkdW1wb2ZmOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aG91dCBBZGRyZXNzIEZhaWx1cmUiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMAorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMAorCQlpbnNlcnRfZmF1bHQoMCwwLDAsMCwwLDMyJ2gwMTAxMDEwMSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMTogQklTVCBUZXN0IHdpdGhvdXQgYW55IE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMTogQklTVCBUZXN0IHdpdGhvdXQgYW55IE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJICAgIAkKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBTaW5nbGUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMCIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gxCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoMSwwLDAsMCwwLDMyJ2gwMTAxMDExNSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMi4xOiBCSVNUIFRlc3Qgd2l0aCBTaW5nbGUgQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMTogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAvMSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMQorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDEsMSwwLDAsMCwzMidoMDEwMTE1MTUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMjogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMjogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBTaW5nbGUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMC8xLzIiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDEKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgxLDEsMSwwLDAsMzInaDAxMTUxNTE1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0yLjM6IEJJU1QgVGVzdCB3aXRoIFNpbmdsZSBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMC8xLzIgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMzogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFNpbmdsZSBBZGRyZXNzIEZhaWx1cmUgdG8gQWxsIE1lbW9yeSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkgICAvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkgICAvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkgICAvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkgICAvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkgICAvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkgICAvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMQorCQkgICAvL2lmKHJlYWRfZGF0YVs2OjBdICAhPSA3J2IwMDAxMTAxKSB0ZXN0X2ZhaWwgPSAxOyAvLyBCaXN0IGNvcnJlY3QgPSAxIGFuZCBCaXN0IEVyciBDbnQgLSAweDEKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgxLDEsMSwxLDEsMzInaDE1MTUxNTE1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0yLjQ6IEJJU1QgVGVzdCB3aXRoIE9uZSBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuNDogQklTVCBUZXN0IHdpdGggT25lIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUd28gQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMCIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gyCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoMiwwLDAsMCwwLDMyJ2gwMTAxMDEyNSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMy4xOiBCSVNUIFRlc3Qgd2l0aCBUd28gQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMTogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAvMSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMgorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDIsMiwwLDAsMCwzMidoMDEwMTI1MjUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMjogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMjogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUd28gQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMC8xLzIiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDIKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgyLDIsMiwwLDAsMzInaDAxMjUyNTI1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0zLjM6IEJJU1QgVGVzdCB3aXRoIFR3byBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMC8xLzIgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMzogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFR3byBBZGRyZXNzIEZhaWx1cmUgdG8gQWxsIE1lbW9yeSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMgorCQkgICAvL2lmKHJlYWRfZGF0YVs2OjBdICAhPSA3J2IwMDAxMTAxKSB0ZXN0X2ZhaWwgPSAxOyAvLyBCaXN0IGNvcnJlY3QgPSAxIGFuZCBCaXN0IEVyciBDbnQgLSAweDEKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgyLDIsMiwyLDEsMzInaDI1MjUyNTI1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0zLjQ6IEJJU1QgVGVzdCB3aXRoIFR3byBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuNDogQklTVCBUZXN0IHdpdGggVHdvIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUaHJlZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTS0wIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDMKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgzLDAsMCwwLDAsMzInaDAxMDEwMTM1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjE6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjE6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggVGhyZWUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMC8xIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gzCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoMywzLDAsMCwwLDMyJ2gwMTAxMzUzNSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4yOiBCSVNUIFRlc3Qgd2l0aCBUaHJlZSBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMC8xIEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjI6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUaHJlZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTS0wLzEvMiIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMworCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDMsMywzLDAsMCwzMidoMDEzNTM1MzUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTQuMzogQklTVCBUZXN0IHdpdGggVGhyZWUgQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAvMS8yIEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjM6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSB0byBBbGwgTWVtb3J5Iik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSAgIC8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCSAgIC8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCSAgIC8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCSAgIC8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCSAgIC8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCSAgIC8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gzCisJCSAgIC8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAwMDExMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4MQorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDMsMywzLDMsMSwzMidoMzUzNTM1MzUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTQuNDogQklTVCBUZXN0IHdpdGggVGhyZWUgTWVtb3J5IEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjQ6IEJJU1QgVGVzdCB3aXRoIFRocmVlIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoNAorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDQsMCwwLDAsMCwzMidoMDEwMTAxNDUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTQuMTogQklTVCBUZXN0IHdpdGggRm91ciBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMCBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4xOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggRm91ciBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTS0wLzEiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDQKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCg0LDQsMCwwLDAsMzInaDAxMDE0NTQ1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjI6IEJJU1QgVGVzdCB3aXRoIEZvdXIgQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAvMSBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4yOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAvMS8yIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gzCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoNCw0LDQsMCwwLDMyJ2gwMTQ1NDU0NSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4zOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4zOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIEZvdXIgQWRkcmVzcyBGYWlsdXJlIHRvIEFsbCBNZW1vcnkiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJICAgLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJICAgLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJICAgLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJICAgLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJICAgLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJICAgLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDMKKwkJICAgLy9pZihyZWFkX2RhdGFbNjowXSAgIT0gNydiMDAwMTEwMSkgdGVzdF9mYWlsID0gMTsgLy8gQmlzdCBjb3JyZWN0ID0gMSBhbmQgQmlzdCBFcnIgQ250IC0gMHgxCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoNCw0LDQsNCwxLDMyJ2g0NTQ1NDU0NSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC40OiBCSVNUIFRlc3Qgd2l0aCBGb3VyIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC40OiBCSVNUIFRlc3Qgd2l0aCBGb3VyIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRm91cnMgQWRkcmVzcyhDb250aW5vdXMgU3RhcnRpbmcgQWRkcnNlc3MpIEZhaWx1cmUiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDQKKwkJLy9pZihyZWFkX2RhdGFbNjowXSAgIT0gNydiMDEwMDEwMSkgdGVzdF9mYWlsID0gMTsgLy8gQmlzdCBjb3JyZWN0ID0gMSBhbmQgQmlzdCBFcnIgQ250IC0gMHg0CisJCWZhdWx0YWRkclswXSA9IDknaDA7CisJCWZhdWx0YWRkclsxXSA9IDknaDE7CisJCWZhdWx0YWRkclsyXSA9IDknaDI7CisJCWZhdWx0YWRkclszXSA9IDknaDM7CisJCWluc2VydF9mYXVsdCg0LDQsNCw0LDAsMzInaDQ1NDU0NTQ1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC01LjE6IEJJU1QgVGVzdCB3aXRoIEZvdXIgTWVtb3J5IEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC01LjE6IEJJU1QgVGVzdCB3aXRoIEZvdXIgTWVtb3J5IEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRm91cnMgQWRkcmVzcyhMYXN0IEFkZHJzZXNzKSBGYWlsdXJlIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2g0CisJCS8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAxMDAxMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4NAorCQlmYXVsdGFkZHJbMF0gPSA5J2hGMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoRjE7CisJCWZhdWx0YWRkclsyXSA9IDknaEYyOworCQlmYXVsdGFkZHJbM10gPSA5J2hGMzsKKwkJaW5zZXJ0X2ZhdWx0KDQsNCw0LDQsMCwzMidoNDU0NTQ1NDUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTUuMjogQklTVCBUZXN0IHdpdGggRm91ciBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTUuMjogQklTVCBUZXN0IHdpdGggRm91ciBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCSAgICAJCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIEZpdmUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0wIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAxCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2g0CisJCS8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAxMDAxMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4NAorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJZmF1bHRhZGRyWzRdID0gOSdoNTA7CisJCWluc2VydF9mYXVsdCg1LDAsMCwwLDEsMzInaDAxMDEwMTQ3KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjE6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMCB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjE6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMCB0ZXN0IEZhaWxlZCIpOworCQkgZW5kCisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRml2ZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTTAvMSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMQorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoNAorCQkvL2lmKHJlYWRfZGF0YVs2OjBdICAhPSA3J2IwMTAwMTAxKSB0ZXN0X2ZhaWwgPSAxOyAvLyBCaXN0IGNvcnJlY3QgPSAxIGFuZCBCaXN0IEVyciBDbnQgLSAweDQKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWZhdWx0YWRkcls0XSA9IDknaDUwOworCQlpbnNlcnRfZmF1bHQoNSw1LDAsMCwxLDMyJ2gwMTAxNDc0Nyk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNi4yOiBCSVNUIFRlc3Qgd2l0aCBGaXZlIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gZm9yIE1FTTAvMSB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjI6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMC8xIHRlc3QgRmFpbGVkIik7CisJCSBlbmQKKworICAgICAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRml2ZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTTAvMS8yIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAxCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2g0CisJCS8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAxMDAxMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4NAorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJZmF1bHRhZGRyWzRdID0gOSdoNTA7CisJCWluc2VydF9mYXVsdCg1LDUsNSwwLDEsMzInaDAxNDc0NzQ3KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjM6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMC8xLzIgdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNi4zOiBCSVNUIFRlc3Qgd2l0aCBGaXZlIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gZm9yIE1FTTAvMS8yIHRlc3QgRmFpbGVkIik7CisJCSBlbmQKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRml2ZSBBZGRyZXNzIEZhaWx1cmUgZm9yIEFsbCBNZW1vcnkiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDEKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDQKKwkJLy9pZihyZWFkX2RhdGFbNjowXSAgIT0gNydiMDEwMDEwMSkgdGVzdF9mYWlsID0gMTsgLy8gQmlzdCBjb3JyZWN0ID0gMSBhbmQgQmlzdCBFcnIgQ250IC0gMHg0CisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlmYXVsdGFkZHJbNF0gPSA5J2g1MDsKKwkJaW5zZXJ0X2ZhdWx0KDUsNSw1LDUsMSwzMidoNDc0NzQ3NDcpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTYuNDogQklTVCBUZXN0IHdpdGggRml2ZSBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTYuNDogQklTVCBUZXN0IHdpdGggRml2ZSBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCSBlbmQKKwkJJGR1bXBvbjsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIEZ1bmN0aW9uYWwgQWNjZXNzLCBjb250aW51YXRpb24gb2YgcHJldmlvdXMgTUJJU1QgU2lnbmF0dXJlIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCWZvcmsKKwkJYmVnaW4KKwkJICAgIC8vIFJlbW92ZSB0aGUgQmlzdCBFbmFibGUgYW5kIEJpc3QgUnVuCisgICAgICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgR0xCTF9CSVNUX0NUUkwxLCdoMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIFdCIGFuZCBCSVNUIFJFU0VUCisgICAgICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgV0JfR0xCTF9DVFJMLCdoMDgxKTsKKyAgCisJICAgICAgICAgICAgLy8gRmlsbCBSYW5kb20gRGF0YQkKKwkJICAgIGZvciAoaT0wOyBpPCA5J2gxRkM7IGk9aSsxKSBiZWdpbgorICAgCSAgICAgICAgICAgICAgICB3cml0ZW1lbVtpXSA9ICRyYW5kb207CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUMV9GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUMl9GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUM19GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUNF9GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisJCSAgICAgICAgLy9pZihpIDwgOSdoMEZDKSBiZWdpbiAvLyBTUkFNNS1TUkFNOCBhcmUgMUtCCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHdiX3VzZXJfY29yZV93cml0ZShgTUJJU1Q1X0ZVTkNfTUFQKyhpKjQpLHdyaXRlbWVtW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBNQklTVDZfRlVOQ19NQVArKGkqNCksd3JpdGVtZW1baV0pOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUN19GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHdiX3VzZXJfY29yZV93cml0ZShgTUJJU1Q4X0ZVTkNfTUFQKyhpKjQpLHdyaXRlbWVtW2ldKTsKKwkgICAgICAgICAgICAgICAgLy9lbmQKKwkJICAgIGVuZAorCQkgICAgLy8gUmVhZCBiYWNrIGRhdGEKKwkJICAgIGZvciAoaT0wOyBpPCA5J2gxRkM7IGk9aSsxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMV9GVU5DX01BUCsoaSo0KSxyZWFkX2RhdGEsd3JpdGVtZW1baV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDJfRlVOQ19NQVArKGkqNCkscmVhZF9kYXRhLHdyaXRlbWVtW2ldLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QzX0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCsoaSo0KSxyZWFkX2RhdGEsd3JpdGVtZW1baV0sMzInaEZGRkZGRkZGKTsKKwkJICAgICAgICAvL2lmKGkgPCA5J2gwRkMpIGJlZ2luIC8vIFNSQU01IC0gU1JBTTggYXJlIDFLQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q1X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q2X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q3X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q4X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworCSAgICAgICAgICAgICAgICAvL2VuZAorCQkgICAgZW5kCisKKwkJICAgIC8vIENyb3NzLWNoZWNrIFJlZHVjZW5jeSBhZGRyZXNzIGhvbGQgdGhlIGZhaWx1cmUgYWRkcmVzcyBkYXRhCisJCSAgICAvLyBJcyBsYXN0IEVycm9yIGluc2VydGVkIGFkZHJlc3MgYXJlIDB4MTAsMHgyMCwweDMwLDB4NDAKKwkJICAgIC8vIFNvIEFkZHJlc3MgMHgxRkMgPSBEYXRhWzB4MTBdLCAweDFGRCA9IERhdGFbMHgyMF0KKwkJICAgIC8vICAgIEFkZHJlc3MgMHgxRkUgPSBEYXRhWzB4MzBdLCAweDFGRiA9IERhdGFbMHg0MF0KKwkJICAgIC8vIENoZWNrIDJrYiBTUkFNMQorICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGQyAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDEwXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGRCAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDIwXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGRSAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDMwXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGRiAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDQwXSwzMidoRkZGRkZGRkYpOworCisJCSAgICAvLyBDaGVjayAya2IgU1JBTTIKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxMV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyMV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzMV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0MV0sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAya2IgU1JBTTMKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxMl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyMl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzMl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0Ml0sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAya2IgU1JBTTQKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxM10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyM10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzM10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0M10sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAxa2IgU1JBTTUKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q1X0ZVTkNfTUFQICsgKDgnaEZDICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMTRdLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNV9GVU5DX01BUCArICg4J2hGRCAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDI0XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDVfRlVOQ19NQVAgKyAoOCdoRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzNF0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q1X0ZVTkNfTUFQICsgKDgnaEZGICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoNDRdLDMyJ2hGRkZGRkZGRik7CisKKwkJICAgIC8vLy8gQ2hlY2sgMWtiIFNSQU02CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNl9GVU5DX01BUCArICg4J2hGQyAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDE1XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDZfRlVOQ19NQVAgKyAoOCdoRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyNV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q2X0ZVTkNfTUFQICsgKDgnaEZFICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMzVdLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNl9GVU5DX01BUCArICg4J2hGRiAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDQ1XSwzMidoRkZGRkZGRkYpOworCisJCSAgICAvLy8vIENoZWNrIDFrYiBTUkFNNworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDdfRlVOQ19NQVAgKyAoOCdoRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxNl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q3X0ZVTkNfTUFQICsgKDgnaEZEICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMjZdLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUN19GVU5DX01BUCArICg4J2hGRSAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDM2XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDdfRlVOQ19NQVAgKyAoOCdoRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0Nl0sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAxa2IgU1JBTTgKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q4X0ZVTkNfTUFQICsgKDgnaEZDICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMTddLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUOF9GVU5DX01BUCArICg4J2hGRCAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDI3XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDhfRlVOQ19NQVAgKyAoOCdoRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzN10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q4X0ZVTkNfTUFQICsgKDgnaEZGICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoNDddLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAvLyBMb29wIGZvciBCSVNUIFRpbWVPdXQKKyAgICAgICAgICAgICAgICAgICByZXBlYXQgKDIwMDAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgICAgICAJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKyAgICAgICAgICAgICAgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGpvaW5fYW55CisgICAgICAgICAgICAgICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTc6IEJJU1QgVGVzdCB3aXRoIEZ1bmN0aW9uYWwgYWNjZXNzIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTc6IEJJU1QgVGVzdCB3aXRoIEZ1bmN0aW9uYWwgYWNjZXNzIHRlc3QgZmFpbGVkIik7CisJCSBlbmQKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAgICAgJGZpbmlzaDsKKwllbmQKKword2lyZSBVU0VSX1ZERDFWOCA9IDEnYjE7Cit3aXJlIFZTUyA9IDEnYjA7CisKKwordXNlcl9wcm9qZWN0X3dyYXBwZXIgdV90b3AoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEoVVNFUl9WREQxVjgpLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMShWU1MpLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgLndiX2Nsa19pICAgICAgICAoY2xvY2spLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgLnVzZXJfY2xvY2syICAgICAoMSdiMSksICAvLyBSZWFsLXRpbWUgY2xvY2sKKyAgICAud2JfcnN0X2kgICAgICAgICh3Yl9yc3RfaSksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgLndic19jeWNfaSAgICh3YmRfZXh0X2N5Y19pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19zdGJfaSAgICh3YmRfZXh0X3N0Yl9pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19hZHJfaSAgICh3YmRfZXh0X2Fkcl9pKSwgIC8vIGFkZHJlc3MKKyAgICAud2JzX3dlX2kgICAgKHdiZF9leHRfd2VfaSksICAvLyB3cml0ZQorICAgIC53YnNfZGF0X2kgICAod2JkX2V4dF9kYXRfaSksICAvLyBkYXRhIG91dHB1dAorICAgIC53YnNfc2VsX2kgICAod2JkX2V4dF9zZWxfaSksICAvLyBieXRlIGVuYWJsZQorCisgICAgLndic19kYXRfbyAgICh3YmRfZXh0X2RhdF9vKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JzX2Fja19vICAgKHdiZF9leHRfYWNrX28pLCAgLy8gYWNrbm93bGVnZW1lbnQKKworIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICAubGFfZGF0YV9pbiAgICAgICgnMSkgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorCisKKyAgICBlbmQKK2BlbmRpZiAgICAKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluc2VydCB1c2VyIGRlZmluZWQgbnVtYmVyIG9mIGZhdWx0IAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGFzayBpbnNlcnRfZmF1bHQ7CitpbnB1dCBbMzowXSAgbnVtMF9mYXVsdDsKK2lucHV0IFszOjBdICBudW0xX2ZhdWx0OworaW5wdXQgWzM6MF0gIG51bTJfZmF1bHQ7CitpbnB1dCBbMzowXSAgbnVtM19mYXVsdDsKK2lucHV0ICAgICAgICBmYXVsdF90eXBlOyAvLyAwIC0+IHN0cnVjayBhdCAwIGFuZCAxIC0+IHN0cnVjayBhdCAxCitpbnB1dCBbMzE6MF0gIG1iaXN0X3NpZ25hdHVyZTsKK3JlZyBbMzE6MF0gZGF0YWluOworcmVnIFs4OjBdICBmYWlsX2FkZHIxOworcmVnIFs4OjBdICBmYWlsX2FkZHIyOworcmVnIFs4OjBdICBmYWlsX2FkZHIzOworcmVnIFs4OjBdICBmYWlsX2FkZHI0OworcmVnIFszOjBdICBudW1fZmF1bHRbMDozXTsKK2ludGVnZXIgajsKK2JlZ2luCisgICBudW1fZmF1bHRbMF0gPSBudW0wX2ZhdWx0OworICAgbnVtX2ZhdWx0WzFdID0gbnVtMV9mYXVsdDsKKyAgIG51bV9mYXVsdFsyXSA9IG51bTJfZmF1bHQ7CisgICBudW1fZmF1bHRbM10gPSBudW0zX2ZhdWx0OworICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworICAgZm9yaworICAgYmVnaW4KKyAgICAgICAvLyBSZW1vdmUgdGhlIEJpc3QgRW5hYmxlIGFuZCBCaXN0IFJ1bgorICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgR0xCTF9CSVNUX0NUUkwxLCdoMDAwKTsKKyAgICAgICAvLyBSZW1vdmUgV0IgYW5kIEJJU1QgUkVTRVQKKyAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYFdCX0dMQkxfQ1RSTCwnaDAwMSk7CisgICAgICAgLy8gU2V0IHRoZSBCaXN0IEVuYWJsZSBhbmQgQmlzdCBSdW4KKyAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEdMQkxfQklTVF9DVFJMMSwnaDAwMDAwMDAzKTsKKyAgICAgICAvLyBSZW1vdmUgV0IgYW5kIEJJU1QgUkVTRVQKKyAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYFdCX0dMQkxfQ1RSTCwnaDA4MSk7CisgICAgICAvLyBDaGVjayBmb3IgTUJJU1QgRG9uZQorICAgICAgcmVhZF9kYXRhID0gJ2gwOworICAgICAgd2hpbGUgKHJlYWRfZGF0YVswXSAhPSAxJ2IxKSBiZWdpbgorICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEdMQkxfQklTVF9TVEFUMSxyZWFkX2RhdGEpOworICAgICAgZW5kCisgICAgICAvLyB3YWl0IGZvciBzb21lIHRpbWUgZm9yIGFsbCB0aGUgQklTVCB0byBjb21wbGV0ZQorICAgICAgcmVwZWF0ICgxMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgICAgLy8gVG9nZ2xlIHRoZSBCaXN0IExvYWQgZm9yIHVwZGF0ZSB0aGUgc2hpZnQgZGF0YQorICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBHTEJMX0JJU1RfQ1RSTDEsJ2gwMDAwMDAwNCk7CisgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEdMQkxfQklTVF9DVFJMMSwnaDAwMDAwMDAwKTsKKyAgICAgIC8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisgICAgICAvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIAorICAgICAgLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAKKyAgICAgIC8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgCisgICAgICAvLyBbM10gICAtIFJlc2VydmVkCisgICAgICAvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IAorICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TVEFUMSxyZWFkX2RhdGEsbWJpc3Rfc2lnbmF0dXJlWzMxOjBdLDMyJ2hGRkZGRkZGRik7CisgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1RBVDIscmVhZF9kYXRhLG1iaXN0X3NpZ25hdHVyZVs2MzozMl0sMzInaEZGRkZGRkZGKTsKKyAgIGVuZAorICAgLy8gSW5zZXJ0ICBFcnJvciBJbnNlcnRpb24KKyAgIGJlZ2luCisgICAgICB3aGlsZSgxKSBiZWdpbgorICAgICAgICAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAgICAgICAgIzE7CisKKyAgICAgICAgIGlmKHVfdG9wLnVfc3JhbTBfMmtiLndlYjAgPT0gMSdiMCAmJiAKKwkgICAoKG51bV9mYXVsdFswXSA+IDAgJiYgdV90b3AudV9zcmFtMF8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKSB8fAorCSAgICAobnVtX2ZhdWx0WzBdID4gMSAmJiB1X3RvcC51X3NyYW0wXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMV0pIHx8CisJICAgIChudW1fZmF1bHRbMF0gPiAyICYmIHVfdG9wLnVfc3JhbTBfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSkgfHwKKwkgICAgKG51bV9mYXVsdFswXSA+IDMgJiYgdV90b3AudV9zcmFtMF8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKSB8fAorCSAgICAobnVtX2ZhdWx0WzBdID4gNCAmJiB1X3RvcC51X3NyYW0wXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNF0pIHx8CisJICAgIChudW1fZmF1bHRbMF0gPiA1ICYmIHVfdG9wLnVfc3JhbTBfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSkgfHwKKwkgICAgKG51bV9mYXVsdFswXSA+IDYgJiYgdV90b3AudV9zcmFtMF8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKSB8fAorCSAgICAobnVtX2ZhdWx0WzBdID4gNyAmJiB1X3RvcC51X3NyYW0wXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbN10pKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0wXzJrYi5kaW4wID0gdV90b3AubWVtMF9kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0wXzJrYi5kaW4wID0gdV90b3AubWVtMF9kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTBfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgaWYodV90b3AudV9zcmFtMV8ya2Iud2ViMCA9PSAxJ2IwICYmIAorCSAgICgobnVtX2ZhdWx0WzFdID4gMCAmJiB1X3RvcC51X3NyYW0xXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMF0rMSkgfHwKKwkgICAgKG51bV9mYXVsdFsxXSA+IDEgJiYgdV90b3AudV9zcmFtMV8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzEpIHx8CisJICAgIChudW1fZmF1bHRbMV0gPiAyICYmIHVfdG9wLnVfc3JhbTFfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSsxKSB8fAorCSAgICAobnVtX2ZhdWx0WzFdID4gMyAmJiB1X3RvcC51X3NyYW0xXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbM10rMSkgfHwKKwkgICAgKG51bV9mYXVsdFsxXSA+IDQgJiYgdV90b3AudV9zcmFtMV8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzEpIHx8CisJICAgIChudW1fZmF1bHRbMV0gPiA1ICYmIHVfdG9wLnVfc3JhbTFfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSsxKSB8fAorCSAgICAobnVtX2ZhdWx0WzFdID4gNiAmJiB1X3RvcC51X3NyYW0xXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNl0rMSkgfHwKKwkgICAgKG51bV9mYXVsdFsxXSA+IDcgJiYgdV90b3AudV9zcmFtMV8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzEpKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0xXzJrYi5kaW4wID0gdV90b3AubWVtMV9kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0xXzJrYi5kaW4wID0gdV90b3AubWVtMV9kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTFfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgaWYodV90b3AudV9zcmFtMl8ya2Iud2ViMCA9PSAxJ2IwICYmIAorCSAgICgobnVtX2ZhdWx0WzJdID4gMCAmJiB1X3RvcC51X3NyYW0yXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMF0rMikgfHwKKwkgICAgKG51bV9mYXVsdFsyXSA+IDEgJiYgdV90b3AudV9zcmFtMl8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzIpIHx8CisJICAgIChudW1fZmF1bHRbMl0gPiAyICYmIHVfdG9wLnVfc3JhbTJfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSsyKSB8fAorCSAgICAobnVtX2ZhdWx0WzJdID4gMyAmJiB1X3RvcC51X3NyYW0yXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbM10rMikgfHwKKwkgICAgKG51bV9mYXVsdFsyXSA+IDQgJiYgdV90b3AudV9zcmFtMl8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzIpIHx8CisJICAgIChudW1fZmF1bHRbMl0gPiA1ICYmIHVfdG9wLnVfc3JhbTJfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSsyKSB8fAorCSAgICAobnVtX2ZhdWx0WzJdID4gNiAmJiB1X3RvcC51X3NyYW0yXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNl0rMikgfHwKKwkgICAgKG51bV9mYXVsdFsyXSA+IDcgJiYgdV90b3AudV9zcmFtMl8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzIpKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0yXzJrYi5kaW4wID0gdV90b3AubWVtMl9kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0yXzJrYi5kaW4wID0gdV90b3AubWVtMl9kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTJfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgaWYodV90b3AudV9zcmFtM18ya2Iud2ViMCA9PSAxJ2IwICYmIAorCSAgICgobnVtX2ZhdWx0WzNdID4gMCAmJiB1X3RvcC51X3NyYW0zXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMF0rMykgfHwKKwkgICAgKG51bV9mYXVsdFszXSA+IDEgJiYgdV90b3AudV9zcmFtM18ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzMpIHx8CisJICAgIChudW1fZmF1bHRbM10gPiAyICYmIHVfdG9wLnVfc3JhbTNfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSszKSB8fAorCSAgICAobnVtX2ZhdWx0WzNdID4gMyAmJiB1X3RvcC51X3NyYW0zXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbM10rMykgfHwKKwkgICAgKG51bV9mYXVsdFszXSA+IDQgJiYgdV90b3AudV9zcmFtM18ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzMpIHx8CisJICAgIChudW1fZmF1bHRbM10gPiA1ICYmIHVfdG9wLnVfc3JhbTNfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSszKSB8fAorCSAgICAobnVtX2ZhdWx0WzNdID4gNiAmJiB1X3RvcC51X3NyYW0zXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNl0rMykgfHwKKwkgICAgKG51bV9mYXVsdFszXSA+IDcgJiYgdV90b3AudV9zcmFtM18ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzMpKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0zXzJrYi5kaW4wID0gdV90b3AubWVtM19kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0zXzJrYi5kaW4wID0gdV90b3AubWVtM19kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTNfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW01XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzQpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW01XzFrYi5kaW4wID0gdV90b3AubWVtNV9kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtNV8xa2IuZGluMCA9IHVfdG9wLm1lbTVfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW01XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW02XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzUpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW02XzFrYi5kaW4wID0gdV90b3AubWVtNl9kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtNl8xa2IuZGluMCA9IHVfdG9wLm1lbTZfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW02XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW03XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzYpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW03XzFrYi5kaW4wID0gdV90b3AubWVtN19kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtN18xa2IuZGluMCA9IHVfdG9wLm1lbTdfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW03XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW04XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzcpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW04XzFrYi5kaW4wID0gdV90b3AubWVtOF9kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtOF8xa2IuZGluMCA9IHVfdG9wLm1lbThfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW04XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgZW5kCisgICBlbmQKKyAgIGJlZ2luCisgICAgICAvLyBMb29wIGZvciBCSVNUIFRpbWVPdXQKKyAgICAgIHJlcGVhdCAoMjAwMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgCQkvLyAkZGlzcGxheSgiKzEwMDAgY3ljbGVzIik7CisgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgZW5kCisgICBqb2luX2FueQorICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisKKyAgIC8vIFJlYWQgQmFjayB0aGUgRmFpbHVyZSBBZGRyZXNzIGFuZCBjcm9zcy1jaGVjayBhbGwgdGhlIDggTUJJU1QKKyAgIC8vIFJlYWQgU2lnbmF0dXJlIGlzIGNvbW1pbmcgaXMgcmV2ZXJzZSBvcmRlciwgTUJJU1Q0ID0+IE1CSVNUMyA9PiBNQklTVDIKKyAgIGZvcihqPWBOT19TUkFNOyBqID4gMDsgaj1qLTEpIGJlZ2luCisgICAgICBmYWlsX2FkZHIxID0gZmF1bHRhZGRyWzBdK2otMTsKKyAgICAgIGZhaWxfYWRkcjIgPSBmYXVsdGFkZHJbMV0rai0xOworICAgICAgZmFpbF9hZGRyMyA9IGZhdWx0YWRkclsyXStqLTE7CisgICAgICBmYWlsX2FkZHI0ID0gZmF1bHRhZGRyWzNdK2otMTsKKworICAgICAgaWYobnVtX2ZhdWx0W2otMV0gPT0gMSkgYmVnaW4KKyAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgR0xCTF9CSVNUX1NSREFUQSxyZWFkX2RhdGEsezMyJ2gwfSwzMidoRkZGRl9GRkZGKTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgR0xCTF9CSVNUX1NSREFUQSxyZWFkX2RhdGEsezcnaDAsZmFpbF9hZGRyMSwxNidoMH0sMzInaEZGRkZfRkZGRik7CisgICAgICBlbmQgZWxzZSBpZihudW1fZmF1bHRbai0xXSA9PSAyKSBiZWdpbgorICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7MzInaDB9LDMyJ2hGRkZGX0ZGRkYpOworICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7NydoMCxmYWlsX2FkZHIxLDcnaDAsZmFpbF9hZGRyMn0sMzInaEZGRkZfRkZGRik7CisgICAgIGVuZCBlbHNlIGlmKG51bV9mYXVsdFtqLTFdID09IDMpIGJlZ2luCisgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TUkRBVEEscmVhZF9kYXRhLHs3J2gwLGZhaWxfYWRkcjMsMTYnaDB9LDMyJ2hGRkZGX0ZGRkYpOworICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7NydoMCxmYWlsX2FkZHIxLDcnaDAsZmFpbF9hZGRyMn0sMzInaEZGRkZfRkZGRik7CisgICAgICBlbmQgZWxzZSBpZihudW1fZmF1bHRbai0xXSA+PSA0KSBiZWdpbgorICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7NydoMCxmYWlsX2FkZHIzLDcnaDAsZmFpbF9hZGRyNH0sMzInaEZGRkZfRkZGRik7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TUkRBVEEscmVhZF9kYXRhLHs3J2gwLGZhaWxfYWRkcjEsNydoMCxmYWlsX2FkZHIyfSwzMidoRkZGRl9GRkZGKTsKKyAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TUkRBVEEscmVhZF9kYXRhLDMyJ2gwLDMyJ2hGRkZGX0ZGRkYpOworICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSwzMidoMCwzMidoRkZGRl9GRkZGKTsKKyAgICAgIGVuZAorICAgZW5kCitlbmQKK2VuZHRhc2sKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgIzE7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIC8vJGRpc3BsYXkoIlNUQVRVUzogV0IgVVNFUiBBQ0NFU1MgUkVBRCAgQWRkcmVzcyA6IDB4JXgsIERhdGEgOiAweCV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2s7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK2lucHV0IFszMTowXSBjbXBfZGF0YTsKK2lucHV0IFszMTowXSBjbXBfbWFzazsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICAjMTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgaWYoKGRhdGEgJiBjbXBfbWFzaykgIT09IChjbXBfZGF0YSAmIGNtcF9tYXNrKSApIGJlZ2luCisgICAgICRkaXNwbGF5KCJFUlJPUiA6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBFeGQ6IDB4JXggUnhkOiAweCV4ICIsYWRkcmVzcywoY21wX2RhdGEgJiBjbXBfbWFzayksKGRhdGEgJiBjbXBfbWFzaykpOworICAgICB0ZXN0X2ZhaWwgPSAxOworICBlbmQgZWxzZSBiZWdpbgorICAgICAkZGlzcGxheSgiU1RBVFVTOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRGF0YSA6IDB4JXgiLGFkZHJlc3MsKGRhdGEgJiBjbXBfbWFzaykpOworICBlbmQKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKKworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNTdjMTAKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L01ha2VmaWxlCkBAIC0wLDAgKzEsMTExIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitQREtfUEFUSD89L2VmL3RlY2gvU1cvc2t5MTMwQQorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB1c2VyX3Jpc2NfYm9vdAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTAgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvY3J0LlMgLW8gY3J0Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1vIHVzZXJfcmlzY19ib290LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rLmxkIHVzZXJfcmlzY19ib290Lm8gY3J0Lm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3Jpc2NfYm9vdC5lbGYgdXNlcl9yaXNjX2Jvb3QuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl9yaXNjX2Jvb3QuZWxmID4gdXNlcl9yaXNjX2Jvb3QuZHVtcAorCXJtIGNydC5vIHVzZXJfcmlzY19ib290Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3J1bl9pdmVyaWxvZyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwODNkNmQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDQyIEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3Jpc2NfYm9vdC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl9yaXNjX2Jvb3QubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfcmlzY19ib290LmVsZiA+IHVzZXJfcmlzY19ib290LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3Jpc2NfYm9vdF90Yi52IC1vIHVzZXJfcmlzY19ib290X3RiLnZ2cAorCisKKyNpdmVyaWxvZyAtZzIwMDUtc3YgLUkgJFBES19QQVRIIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAgLi4vLi4vLi4vY2FyYXZlbC92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3Jpc2NfYm9vdF90Yi52IC1vIHVzZXJfcmlzY19ib290X3RiLnZ2cAorCisjIEdMUworI2l2ZXJpbG9nIC1nMjAwNS1zdiAtREdMIC1JICRQREtfUEFUSCAtSSAgLi4vLi4vLi4vY2FyYXZlbC92ZXJpbG9nL3J0bCAgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQSAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3VhcnRfdGIudiAtbyB1c2VyX3Jpc2NfYm9vdF90Yi52dnAKKwordnZwIHVzZXJfcmlzY19ib290X3RiLnZ2cCB8IHRlZSB0ZXN0LmxvZworCitccm0gLXJmIHVzZXJfcmlzY19ib290X3RiLnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2NfYm9vdC91c2VyX3Jpc2NfYm9vdC5jIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2NfYm9vdC91c2VyX3Jpc2NfYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTQyNGIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290LmMKQEAgLTAsMCArMSw3MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNDApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDQ0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxOCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA0OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTkgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNEMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDUwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA1NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNTgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIzICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDVDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNjQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDY4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2QykKKworaW50IG1haW4oKQoreworCisgICAgLy92b2xhdGlsZSBsb25nICpvdXRfcHRyID0gKHZvbGF0aWxlIGxvbmcqKVNDX1NJTV9PVVRQT1JUOworICAgIC8vKm91dF9wdHIgPSAweEFBQkJDQ0REOworICAgIC8vKm91dF9wdHIgPSAweEJCQ0NEREVFOworICAgIC8vKm91dF9wdHIgPSAweENDRERFRUZGOworICAgIC8vKm91dF9wdHIgPSAweERERUVGRjAwOworCisgICAgLy8gV3JpdGUgc29mdHdhcmUgV3JpdGUgJiBSZWFkIFJlZ2lzdGVyCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjIgID0gMHgxMTIyMzM0NDsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjMgID0gMHgyMjMzNDQ1NTsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjQgID0gMHgzMzQ0NTU2NjsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjUgID0gMHg0NDU1NjY3NzsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjYgPSAweDU1NjY3Nzg4OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNyA9IDB4NjY3Nzg4OTk7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTIgPSAweDc3ODg5OUFBOyAKKyAgICAvL3JlZ19tcHJqX2dsb2JsX3JlZzEzID0gMHg4ODk5QUFCQjsgCisgICAgLy9yZWdfbXByal9nbG9ibF9yZWcxNCA9IDB4OTlBQUJCQ0M7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTUgPSAweEFBQkJDQ0REOyAKKworICAgIHdoaWxlKDEpIHt9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290X3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290X3RiLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZmMjQwOAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvdXNlcl9yaXNjX2Jvb3RfdGIudgpAQCAtMCwwICsxLDM5OCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBVc2VyIFJpc2MgY29yZSBpcyBib290ZWQgdXNpbmcgIGNvbXBpbGVkIGNvZGUgb2YgICAgICAgIC8vLy8KKy8vLy8gICAgICB1c2VyX3Jpc2NfYm9vdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBVc2VyIFJpc2MgY29yZSB1c2VzIFNlcmlhbCBGbGFzaCBhbmQgU0RSQU0gdG8gYm9vdCAgICAgIC8vLy8KKy8vLy8gICAzLiBBZnRlciBzdWNjZXNzZnVsIGJvb3QsIFJpc2MgY29yZSB3aWxsICB3cml0ZSBzaWduYXR1cmUgIC8vLy8KKy8vLy8gICAgICBpbiB0byAgdXNlciByZWdpc3RlciBmcm9tIDB4MTAwM18wMDU4IHRvIDB4MTAwM18wMDZDICAgIC8vLy8KKy8vLy8gICA0LiBUaHJvdWdoIHRoZSBFeHRlcm5hbCBXaXNoYm9uZSBJbnRlcmZhY2Ugd2UgcmVhZCBiYWNrICAgIC8vLy8KKy8vLy8gICAgICAgZnJvbSAweDMwMDNfMDA1OCB0byAweDMwMDNfMDA2QyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgYW5kIHZhbGlkYXRlIHRoZSB1c2VyIHJlZ2lzdGVyIHRvIGRlY2xhcmVkIHBhc3MgZmFpbCAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInMyNWZsMjU2cy5zdiIKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAibXQ0OGxjOG04YTIudiIKKworbW9kdWxlIHVzZXJfcmlzY19ib290X3RiOworCXJlZyBjbG9jazsKKwlyZWcgd2JfcnN0X2k7CisJcmVnIHBvd2VyMSwgcG93ZXIyOworCXJlZyBwb3dlcjMsIHBvd2VyNDsKKworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfY3ljX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICByZWcgICAgICAgIHdiZF9leHRfc3RiX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICByZWcgWzMxOjBdIHdiZF9leHRfYWRyX2k7ICAvLyBhZGRyZXNzCisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF93ZV9pOyAgLy8gd3JpdGUKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2RhdF9pOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgcmVnIFszOjBdICB3YmRfZXh0X3NlbF9pOyAgLy8gYnl0ZSBlbmFibGUKKworICAgICAgICB3aXJlIFszMTowXSB3YmRfZXh0X2RhdF9vOyAgLy8gZGF0YSBpbnB1dAorICAgICAgICB3aXJlICAgICAgICB3YmRfZXh0X2Fja19vOyAgLy8gYWNrbm93bGVnZW1lbnQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9lcnJfbzsgIC8vIGVycm9yCisKKwkvLyBVc2VyIEkvTworCXdpcmUgWzM3OjBdIGlvX29lYjsKKwl3aXJlIFszNzowXSBpb19vdXQ7CisJd2lyZSBbMzc6MF0gaW9faW47CisKKwl3aXJlIGdwaW87CisJd2lyZSBbMzc6MF0gbXByal9pbzsKKwl3aXJlIFs3OjBdIG1wcmpfaW9fMDsKKwlyZWcgICAgICAgICB0ZXN0X2ZhaWw7CisJcmVnIFszMTowXSByZWFkX2RhdGE7CisKKworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorCWVuZAorCisJYGlmZGVmIFdGRFVNUAorCSAgIGluaXRpYWwgYmVnaW4KKwkgICAJJGR1bXBmaWxlKCJyaXNjX2Jvb3QudmNkIik7CisJICAgCSRkdW1wdmFycygyLCB1c2VyX3Jpc2NfYm9vdF90Yik7CisJICAgZW5kCisgICAgICAgYGVuZGlmCisKKwlpbml0aWFsIGJlZ2luCisKKwkJIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCSAgICAgICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgVGVzdCBTdGFydGVkIik7CisKKwkJLy8gUmVtb3ZlIFdiIFJlc2V0CisJCXdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCisJICAgICAgICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CisJCSMxOworCQkvLyBSZW1vdmUgYWxsIHRoZSByZXNldAorICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaEYpOworCisKKwkJLy8gUmVwZWF0IGN5Y2xlcyBvZiAxMDAwIGNsb2NrIGVkZ2VzIGFzIG5lZWRlZCB0byBjb21wbGV0ZSB0ZXN0YmVuY2gKKwkJcmVwZWF0ICgzMCkgYmVnaW4KKwkJCXJlcGVhdCAoMTAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKwkJZW5kCisKKworCQkkZGlzcGxheSgiTW9uaXRvcjogUmVhZGluZyBCYWNrIHRoZSBleHBlY3RlZCB2YWx1ZSIpOworCQkvLyBVc2VyIFJJU0MgY29yZSBleHBlY3QgdG8gd3JpdGUgdGhlc2UgdmFsdWUgaW4gZ2xvYmFsCisJCS8vIHJlZ2lzdGVyLCByZWFkIGJhY2sgYW5kIGRlY2lkZSBvbiBwYXNzIGZhaWwKKwkJLy8gMHgzMDAwMDAxOCAgPSAweDExMjIzMzQ0OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDFDICA9IDB4MjIzMzQ0NTU7IAorICAgICAgICAgICAgICAgIC8vIDB4MzAwMDAwMjAgID0gMHgzMzQ0NTU2NjsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyNCAgPSAweDQ0NTU2Njc3OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDI4ID0gMHg1NTY2Nzc4ODsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyQyA9IDB4NjY3Nzg4OTk7IAorCisgICAgICAgICAgICAgICAgdGVzdF9mYWlsID0gMDsKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDU4LHJlYWRfZGF0YSk7CisJCWlmKHJlYWRfZGF0YSAhPSAzMidoMTEyMjMzNDQpIHRlc3RfZmFpbCA9IDE7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDVDLHJlYWRfZGF0YSk7CisJCWlmKHJlYWRfZGF0YSAhPSAzMidoMjIzMzQ0NTUpIHRlc3RfZmFpbCA9IDE7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDYwLHJlYWRfZGF0YSk7CisJICAgICAgICBpZihyZWFkX2RhdGEgIT0gMzInaDMzNDQ1NTY2KSB0ZXN0X2ZhaWwgPSAxOworCisJCXdiX3VzZXJfY29yZV9yZWFkKDMyJ2gzMDAyMDA2NCxyZWFkX2RhdGEpOworICAgICAgICAgICAgICAgIGlmKHJlYWRfZGF0YSE9IDMyJ2g0NDU1NjY3NykgdGVzdF9mYWlsID0gMTsKKworCQl3Yl91c2VyX2NvcmVfcmVhZCgzMidoMzAwMjAwNjgscmVhZF9kYXRhKTsKKyAgICAgICAgICAgICAgICBpZihyZWFkX2RhdGEhPSAzMidoNTU2Njc3ODgpIHRlc3RfZmFpbCA9IDE7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDZDLHJlYWRfZGF0YSkgOworCSAgICAgICAgaWYocmVhZF9kYXRhICE9IDMyJ2g2Njc3ODg5OSkgdGVzdF9mYWlsID0gMTsKKworCSAgIAorCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkJICAgYGlmZGVmIEdMCisJICAgIAkgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgKEdMKSBQYXNzZWQiKTsKKwkJICAgYGVsc2UKKwkJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChSVEwpIFBhc3NlZCIpOworCQkgICBgZW5kaWYKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJCSAgICBgaWZkZWYgR0wKKwkgICAgCSAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgKEdMKSBGYWlsZWQiKTsKKwkJICAgIGBlbHNlCisJCSAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgKFJUTCkgRmFpbGVkIik7CisJCSAgICBgZW5kaWYKKwkJIGVuZAorCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAkZmluaXNoOworCWVuZAorCisJaW5pdGlhbCBiZWdpbgorCQl3Yl9yc3RfaSA8PSAxJ2IxOworCQkjMTAwOworCQl3Yl9yc3RfaSA8PSAxJ2IwOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKwllbmQKK3dpcmUgVVNFUl9WREQxVjggPSAxJ2IxOword2lyZSBWU1MgPSAxJ2IwOworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworYGlmbmRlZiBHTCAvLyBEcml2ZSBQb3dlciBmb3IgSG9sZCBGaXggQnVmCisgICAgLy8gQWxsIHN0YW5kYXJkIGNlbGwgbmVlZCBwb3dlciBob29rLXVwIGZvciBmdW5jdGlvbmFsaXR5IHdvcmsKKyAgICBpbml0aWFsIGJlZ2luCisKKyAgICBlbmQKK2BlbmRpZiAgICAKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbnRlZ3JhdGUgdGhlIFNlcmlhbCBmbGFzaCB3aXRoIHF1cmQgc3VwcG9ydCB0bworLy8gIHVzZXIgY29yZSB1c2luZyB0aGUgZ3BpbyBwYWRzCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aXJlIGZsYXNoX2NsayA9IGlvX291dFsyNF07CisgICB3aXJlIGZsYXNoX2NzYiA9IGlvX291dFsyOF07CisgICAvLyBDcmVhdGluZyBQYWQgRGVsYXkKKyAgIHdpcmUgIzEgaW9fb2ViXzI5ID0gaW9fb2ViWzI5XTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMwID0gaW9fb2ViWzMwXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMxID0gaW9fb2ViWzMxXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMyID0gaW9fb2ViWzMyXTsKKyAgIHRyaSAgIzEgZmxhc2hfaW8wID0gKGlvX29lYl8yOT09IDEnYjApID8gaW9fb3V0WzI5XSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMSA9IChpb19vZWJfMzA9PSAxJ2IwKSA/IGlvX291dFszMF0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzIgPSAoaW9fb2ViXzMxPT0gMSdiMCkgPyBpb19vdXRbMzFdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8zID0gKGlvX29lYl8zMj09IDEnYjApID8gaW9fb3V0WzMyXSA6IDEnYno7CisKKyAgIGFzc2lnbiBpb19pblsyOV0gPSBmbGFzaF9pbzA7CisgICBhc3NpZ24gaW9faW5bMzBdID0gZmxhc2hfaW8xOworICAgYXNzaWduIGlvX2luWzMxXSA9IGZsYXNoX2lvMjsKKyAgIGFzc2lnbiBpb19pblszMl0gPSBmbGFzaF9pbzM7CisKKyAgIC8vIFF1YXJkIGZsYXNoCisgICAgIHMyNWZsMjU2cyAjKC5tZW1fZmlsZV9uYW1lKCJ1c2VyX3Jpc2NfYm9vdC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLAorICAgICAgICAgICAgICAgICAuVGltaW5nTW9kZWwoIlMyNUZMNTEyU0FHTUZJMDEwX0ZfMzBwRiIpKSAKKwkJIHVfc3BpX2ZsYXNoXzI1Nm1iICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAkZGlzcGxheSgiREVCVUcgV0IgVVNFUiBBQ0NFU1MgUkVBRCBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK2BpZmRlZiBHTAorCit3aXJlICAgICAgICB3YmRfc3BpX3N0Yl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NwaV9hY2tfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zcGlfd2VfaSAgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfYWRyX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWRyX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zcGlfc2VsX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9zdGJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9hY2tfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV93ZV9pICA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2Fkcl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2FkZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zZHJhbV9zZWxfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3VhcnRfc3RiX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2NzOword2lyZSAgICAgICAgd2JkX3VhcnRfYWNrX28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193cjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2Fkcl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hZGRyOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3JkYXRhOword2lyZSAgICAgICAgd2JkX3VhcnRfc2VsX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2JlOworCitgZW5kaWYKKworLyoqCitgaWZkZWYgR0wKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgSU1FTSBhbWQgRE1FTSBNb25pdG9yaW5nIFRBU0sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBSSVNDX0NPUkUgIHVzZXJfdWFydF90Yi51X3RvcC51X2NvcmUudV9yaXNjdl90b3AKKworYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUud2JfY2xrKSBiZWdpbgorICAgIGlmKGBSSVNDX0NPUkUud2JkX2ltZW1fYWNrX2kpCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXgiLCBgUklTQ19DT1JFLndiZF9pbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2ltZW1fZGF0X2kpOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFdyaXRlIERhdGE6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9vKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmICFgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggUkVBRCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X2kpOworZW5kCisKK2BlbmRpZgorKiovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2NfYm9vdC91c2VyX3VhcnQuYyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1MTJiYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw2MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFNDX1NJTV9PVVRQT1JUICgweGYwMDAwMDAwKQorI2RlZmluZSB1aW50MzJfdCAgbG9uZworCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzAgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDAwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMiAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzMgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDBDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc0ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzYgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDE4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc3ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnOCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMjApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzkgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDI0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAyOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMkMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDMwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAzNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMzgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDNDKQorCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDA0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDEwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDFDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMjApCisKK2ludCBtYWluKCkKK3sKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAvLyBDaGVjayBVQVJUIFJYIGZpZm8gaGFzIGRhdGEsIGlmIGF2YWlsYWJsZSBsb29wIGJhY2sgdGhlIGRhdGEKKyAgICAgICBpZihyZWdfbXByal91YXJ0X3JlZzggIT0gMCkgeyAKKwkgICByZWdfbXByal91YXJ0X3JlZzUgPSByZWdfbXByal91YXJ0X3JlZzY7CisgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L01ha2VmaWxlIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjY1YmUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxMTEgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQzMyX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorUERLX1BBVEg/PS9lZi90ZWNoL1NXL3NreTEzMEEKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTT89UlRMCitEVU1QPz1PRkYKKworLlNVRkZJWEVTOgorCitQQVRURVJOID0gdXNlcl9yaXNjX3NvZnRfYm9vdAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTAgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvY3J0LlMgLW8gY3J0Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1vIHVzZXJfcmlzY19ib290LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rLmxkIHVzZXJfcmlzY19ib290Lm8gY3J0Lm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3Jpc2NfYm9vdC5lbGYgdXNlcl9yaXNjX2Jvb3QuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl9yaXNjX2Jvb3QuZWxmID4gdXNlcl9yaXNjX2Jvb3QuZHVtcAorCXJtIGNydC5vIHVzZXJfcmlzY19ib290Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjQxNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDQ5IEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3Jpc2NfYm9vdC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl9yaXNjX2Jvb3QubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfcmlzY19ib290LmVsZiA+IHVzZXJfcmlzY19ib290LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAorCitpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggXAorLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL2NhcmF2ZWwvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3Jpc2NkdWluby9jYXJhdmVsL3Zlcmlsb2cvcnRsIFwKKy1JIC4uL21vZGVsICAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgXAorLUkgLi4vYWdlbnRzICAgIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvbWJpc3QvaW5jbHVkZSBcCit1c2VyX3Jpc2Nfc29mdF9ib290X3RiLnYgLW8gdXNlcl9yaXNjX3NvZnRfYm9vdC52dnAgCisKKworI2l2ZXJpbG9nIC1nMjAwNS1zdiAtSSAkUERLX1BBVEggLURGVU5DVElPTkFMIC1EU0lNIC1JICAuLi8uLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8uLi8uLi92ZXJpbG9nIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfcmlzY19ib290X3RiLnYgLW8gdXNlcl9yaXNjX2Jvb3RfdGIudnZwCisKKyMgR0xTCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1ER0wgLUkgJFBES19QQVRIIC1JICAuLi8uLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsICAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL3Bkay9za3kxMzBBIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfdWFydF90Yi52IC1vIHVzZXJfcmlzY19ib290X3RiLnZ2cAorCit2dnAgdXNlcl9yaXNjX3NvZnRfYm9vdC52dnAgfCB0ZWUgdGVzdC5sb2cKKworXHJtIC1yZiB1c2VyX3Jpc2Nfc29mdF9ib290LnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19ib290LmMgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvdXNlcl9yaXNjX2Jvb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U0MjRiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19ib290LmMKQEAgLTAsMCArMSw3MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNDApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDQ0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxOCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA0OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTkgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNEMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDUwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA1NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNTgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIzICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDVDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNjQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDY4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2QykKKworaW50IG1haW4oKQoreworCisgICAgLy92b2xhdGlsZSBsb25nICpvdXRfcHRyID0gKHZvbGF0aWxlIGxvbmcqKVNDX1NJTV9PVVRQT1JUOworICAgIC8vKm91dF9wdHIgPSAweEFBQkJDQ0REOworICAgIC8vKm91dF9wdHIgPSAweEJCQ0NEREVFOworICAgIC8vKm91dF9wdHIgPSAweENDRERFRUZGOworICAgIC8vKm91dF9wdHIgPSAweERERUVGRjAwOworCisgICAgLy8gV3JpdGUgc29mdHdhcmUgV3JpdGUgJiBSZWFkIFJlZ2lzdGVyCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjIgID0gMHgxMTIyMzM0NDsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjMgID0gMHgyMjMzNDQ1NTsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjQgID0gMHgzMzQ0NTU2NjsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjUgID0gMHg0NDU1NjY3NzsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjYgPSAweDU1NjY3Nzg4OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNyA9IDB4NjY3Nzg4OTk7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTIgPSAweDc3ODg5OUFBOyAKKyAgICAvL3JlZ19tcHJqX2dsb2JsX3JlZzEzID0gMHg4ODk5QUFCQjsgCisgICAgLy9yZWdfbXByal9nbG9ibF9yZWcxNCA9IDB4OTlBQUJCQ0M7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTUgPSAweEFBQkJDQ0REOyAKKworICAgIHdoaWxlKDEpIHt9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvdXNlcl9yaXNjX3NvZnRfYm9vdF90Yi52IGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19zb2Z0X2Jvb3RfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmEyOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19zb2Z0X2Jvb3RfdGIudgpAQCAtMCwwICsxLDQwNyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBVc2VyIFJpc2MgY29yZSBpcyBib290ZWQgdXNpbmcgIGNvbXBpbGVkIGNvZGUgb2YgICAgICAgIC8vLy8KKy8vLy8gICAgICB1c2VyX3Jpc2NfYm9vdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBVc2VyIFJpc2MgY29yZSB1c2VzIFNlcmlhbCBGbGFzaCBhbmQgU0RSQU0gdG8gYm9vdCAgICAgIC8vLy8KKy8vLy8gICAzLiBBZnRlciBzdWNjZXNzZnVsIGJvb3QsIFJpc2MgY29yZSB3aWxsICB3cml0ZSBzaWduYXR1cmUgIC8vLy8KKy8vLy8gICAgICBpbiB0byAgdXNlciByZWdpc3RlciBmcm9tIDB4MTAwM18wMDU4IHRvIDB4MTAwM18wMDZDICAgIC8vLy8KKy8vLy8gICA0LiBUaHJvdWdoIHRoZSBFeHRlcm5hbCBXaXNoYm9uZSBJbnRlcmZhY2Ugd2UgcmVhZCBiYWNrICAgIC8vLy8KKy8vLy8gICAgICAgZnJvbSAweDMwMDNfMDA1OCB0byAweDMwMDNfMDA2QyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgYW5kIHZhbGlkYXRlIHRoZSB1c2VyIHJlZ2lzdGVyIHRvIGRlY2xhcmVkIHBhc3MgZmFpbCAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInVwcmpfbmV0bGlzdHMudiIKKworbW9kdWxlIHVzZXJfcmlzY19zb2Z0X2Jvb3RfdGI7CisJcmVnIGNsb2NrOworCXJlZyB3Yl9yc3RfaTsKKwlyZWcgcG93ZXIxLCBwb3dlcjI7CisJcmVnIHBvd2VyMywgcG93ZXI0OworCisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF9jeWNfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF9zdGJfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9hZHJfaTsgIC8vIGFkZHJlc3MKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3dlX2k7ICAvLyB3cml0ZQorICAgICAgICByZWcgWzMxOjBdIHdiZF9leHRfZGF0X2k7ICAvLyBkYXRhIG91dHB1dAorICAgICAgICByZWcgWzM6MF0gIHdiZF9leHRfc2VsX2k7ICAvLyBieXRlIGVuYWJsZQorCisgICAgICAgIHdpcmUgWzMxOjBdIHdiZF9leHRfZGF0X287ICAvLyBkYXRhIGlucHV0CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfYWNrX287ICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICB3aXJlICAgICAgICB3YmRfZXh0X2Vycl9vOyAgLy8gZXJyb3IKKworCS8vIFVzZXIgSS9PCisJd2lyZSBbMzc6MF0gaW9fb2ViOworCXdpcmUgWzM3OjBdIGlvX291dDsKKwl3aXJlIFszNzowXSBpb19pbjsKKworCXdpcmUgZ3BpbzsKKwl3aXJlIFszNzowXSBtcHJqX2lvOworCXdpcmUgWzc6MF0gbXByal9pb18wOworCXJlZyAgICAgICAgIHRlc3RfZmFpbDsKKwlyZWcgWzMxOjBdIHJlYWRfZGF0YTsKKwlsb2dpYyAgWzc6MF0gICAgICAgICAgIHRlbV9tZW1bMDo0MDk1XTsKKwlsb2dpYyAgWzMxOjBdICAgICAgICAgIHRlbV9tZW1fMzJiWzA6NTExXTsKKworCWBpZmRlZiBWRVJJTEFUT1IKKwkgbG9naWMgWzI1NTowXSAgICAgICAgICB0ZXN0X3JhbV9maWxlOworICAgICAgICAgYGVsc2UgLy8gVkVSSUxBVE9SCisJIAorCSAgICBzdHJpbmcgICAgICAgICAgICAgICAgIHRlc3RfcmFtX2ZpbGU7CisKKyAgICAgICAgIGBlbmRpZiAvLyBWRVJJTEFUT1IKKworICAgICAgICAgaW50ZWdlciBpOworCisKKwkvLyBFeHRlcm5hbCBjbG9jayBpcyB1c2VkIGJ5IGRlZmF1bHQuICBNYWtlIHRoaXMgYXJ0aWZpY2lhbGx5IGZhc3QgZm9yIHRoZQorCS8vIHNpbXVsYXRpb24uICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgc2xvdyBjbG9jayBhbmQgdGhlIGRpZ2l0YWwgUExMCisJLy8gd291bGQgYmUgdGhlIGZhc3QgY2xvY2suCisKKwlhbHdheXMgIzEyLjUgY2xvY2sgPD0gKGNsb2NrID09PSAxJ2IwKTsKKworCWluaXRpYWwgYmVnaW4KKwkJY2xvY2sgPSAwOworICAgICAgICAgICAgICAgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgICAgICAgICAgICAgICAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICAgICAgICAgICAgICAgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisJZW5kCisKKwlgaWZkZWYgV0ZEVU1QCisJICAgaW5pdGlhbCBiZWdpbgorCSAgIAkkZHVtcGZpbGUoInNpbXgudmNkIik7CisJICAgCSRkdW1wdmFycyg0LCB1c2VyX3Jpc2Nfc29mdF9ib290X3RiLnVfdG9wKTsKKwkgICAJLy8kZHVtcHZhcnMoMywgdXNlcl9yaXNjX3NvZnRfYm9vdF90Yi51X3RvcC51X3Jpc2N2X3RvcCk7CisJICAgZW5kCisgICAgICAgYGVuZGlmCisKKwlpbml0aWFsIGJlZ2luCisKKwkJIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCSAgICAgICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgVGVzdCBTdGFydGVkIik7CisKKwkJLy8gUmVtb3ZlIFdiIFJlc2V0CisJCXdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCisJCSRyZWFkbWVtaCgidXNlcl9yaXNjX2Jvb3QuaGV4Iix0ZW1fbWVtKTsKKwkJLy8gY29udmVydCA4IGJpdCAzMiBtZW0gZm9ybWF0CisJCWZvcihpID0wOyBpIDwgNTExOyBpID0gaSsxKQorCQkgICB0ZW1fbWVtXzMyYltpXSA9IHt0ZW1fbWVtWyhpKjQpKzNdLHRlbV9tZW1bKGkqNCkrMl0sdGVtX21lbVsoaSo0KSsxXSx0ZW1fbWVtWyhpKjQpXX07CisKKwkgICAgICAgICR3cml0ZW1lbWgoInNyYW1fYmFuazAuaGV4Iix0ZW1fbWVtXzMyYiwwLDUxMSk7CisJICAgICAgICAkcmVhZG1lbWgoInNyYW1fYmFuazAuaGV4Iix1X3RvcC51X3NyYW0wXzJrYi5tZW0sMCw1MTEpOworCisJCWZvcihpID01MTI7IGkgPCAxMDIzOyBpID0gaSsxKQorCQkgICB0ZW1fbWVtXzMyYltpLTUxMl0gPSB7dGVtX21lbVsoaSo0KSszXSx0ZW1fbWVtWyhpKjQpKzJdLHRlbV9tZW1bKGkqNCkrMV0sdGVtX21lbVsoaSo0KV19OworCisJICAgICAgICAkd3JpdGVtZW1oKCJzcmFtX2JhbmsxLmhleCIsdGVtX21lbV8zMmIsMCw1MTEpOworCSAgICAgICAgJHJlYWRtZW1oKCJzcmFtX2JhbmsxLmhleCIsdV90b3AudV9zcmFtMV8ya2IubWVtLDAsNTExKTsKKworCQkvLyBFbmFibGUgdGhlIFNSQU0gUmVtYXAgdG8gYm9vdCByZWdpb24KKwkJd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDBDLHs0J2IxMTExLDI4J2gwfSk7CisJICAgICAgICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CisJCSMxOworCQkvLyBSZW1vdmUgdGhlIHJlc2V0LCBtYmlzdCwgd2lzaGJvbmUsIHJpc2N2CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoOEYpOworCisKKwkJLy8gUmVwZWF0IGN5Y2xlcyBvZiAxMDAwIGNsb2NrIGVkZ2VzIGFzIG5lZWRlZCB0byBjb21wbGV0ZSB0ZXN0YmVuY2gKKwkJcmVwZWF0ICgyNCkgYmVnaW4KKwkJCXJlcGVhdCAoNTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkJLy8kZGlzcGxheSgiKzUwMCBjeWNsZXMiKTsKKwkJZW5kCisKKworCQkkZGlzcGxheSgiTW9uaXRvcjogUmVhZGluZyBCYWNrIHRoZSBleHBlY3RlZCB2YWx1ZSIpOworCQkvLyBVc2VyIFJJU0MgY29yZSBleHBlY3QgdG8gd3JpdGUgdGhlc2UgdmFsdWUgaW4gZ2xvYmFsCisJCS8vIHJlZ2lzdGVyLCByZWFkIGJhY2sgYW5kIGRlY2lkZSBvbiBwYXNzIGZhaWwKKwkJLy8gMHgzMDAwMDAxOCAgPSAweDExMjIzMzQ0OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDFDICA9IDB4MjIzMzQ0NTU7IAorICAgICAgICAgICAgICAgIC8vIDB4MzAwMDAwMjAgID0gMHgzMzQ0NTU2NjsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyNCAgPSAweDQ0NTU2Njc3OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDI4ID0gMHg1NTY2Nzc4ODsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyQyA9IDB4NjY3Nzg4OTk7IAorCisgICAgICAgICAgICAgICAgdGVzdF9mYWlsID0gMDsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LHJlYWRfZGF0YSwzMidoMTEyMjMzNDQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMscmVhZF9kYXRhLDMyJ2gyMjMzNDQ1NSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2MCxyZWFkX2RhdGEsMzInaDMzNDQ1NTY2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDY0LHJlYWRfZGF0YSwzMidoNDQ1NTY2NzcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNjgscmVhZF9kYXRhLDMyJ2g1NTY2Nzc4OCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2QyxyZWFkX2RhdGEsMzInaDY2Nzc4ODk5KSA7CisKKwkgICAKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJCSAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChHTCkgUGFzc2VkIik7CisJCSAgIGBlbHNlCisJCSAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFJpc2MgQm9vdCAoUlRMKSBQYXNzZWQiKTsKKwkJICAgYGVuZGlmCisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCQkgICAgYGlmZGVmIEdMCisJICAgIAkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChHTCkgRmFpbGVkIik7CisJCSAgICBgZWxzZQorCQkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChSVEwpIEZhaWxlZCIpOworCQkgICAgYGVuZGlmCisJCSBlbmQKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgJGZpbmlzaDsKKwllbmQKKworCWluaXRpYWwgYmVnaW4KKwkJd2JfcnN0X2kgPD0gMSdiMTsKKwkJIzEwMDsKKwkJd2JfcnN0X2kgPD0gMSdiMDsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJZW5kCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKwordXNlcl9wcm9qZWN0X3dyYXBwZXIgdV90b3AoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEoVVNFUl9WREQxVjgpLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMShWU1MpLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgLndiX2Nsa19pICAgICAgICAoY2xvY2spLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgLnVzZXJfY2xvY2syICAgICAoMSdiMSksICAvLyBSZWFsLXRpbWUgY2xvY2sKKyAgICAud2JfcnN0X2kgICAgICAgICh3Yl9yc3RfaSksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgLndic19jeWNfaSAgICh3YmRfZXh0X2N5Y19pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19zdGJfaSAgICh3YmRfZXh0X3N0Yl9pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19hZHJfaSAgICh3YmRfZXh0X2Fkcl9pKSwgIC8vIGFkZHJlc3MKKyAgICAud2JzX3dlX2kgICAgKHdiZF9leHRfd2VfaSksICAvLyB3cml0ZQorICAgIC53YnNfZGF0X2kgICAod2JkX2V4dF9kYXRfaSksICAvLyBkYXRhIG91dHB1dAorICAgIC53YnNfc2VsX2kgICAod2JkX2V4dF9zZWxfaSksICAvLyBieXRlIGVuYWJsZQorCisgICAgLndic19kYXRfbyAgICh3YmRfZXh0X2RhdF9vKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JzX2Fja19vICAgKHdiZF9leHRfYWNrX28pLCAgLy8gYWNrbm93bGVnZW1lbnQKKworIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICAubGFfZGF0YV9pbiAgICAgICgnMSkgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorCisgICAgZW5kCitgZW5kaWYgICAgCisKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBXUklURSBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworaW5wdXQgWzMxOjBdIGNtcF9kYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIGlmKGRhdGEgIT09IGNtcF9kYXRhKSBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1IgOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRXhkOiAweCV4IFJ4ZDogMHgleCAiLGFkZHJlc3MsY21wX2RhdGEsZGF0YSk7CisgICAgIHRlc3RfZmFpbCA9IDE7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgZW5kCisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCitgaWZkZWYgR0wKKword2lyZSAgICAgICAgd2JkX3NwaV9zdGJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zcGlfYWNrX28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWNrX287Cit3aXJlICAgICAgICB3YmRfc3BpX3dlX2kgICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2Fkcl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fkcl9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc3BpX3NlbF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfc2RyYW1fc3RiX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc2RyYW1fYWNrX28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWNrX287Cit3aXJlICAgICAgICB3YmRfc2RyYW1fd2VfaSAgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9hZHJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hZGRyX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc2RyYW1fc2VsX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF91YXJ0X3N0Yl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hY2s7Cit3aXJlICAgICAgICB3YmRfdWFydF93ZV9pICAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd3I7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9hZHJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193ZGF0YTsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19yZGF0YTsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3NlbF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9zcGkvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTM0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL01ha2VmaWxlCkBAIC0wLDAgKzEsOTkgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQ19QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKK1BES19QQVRIPz0vZWYvdGVjaC9TVy9za3kxMzBBCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHVzZXJfc3BpCisKK2FsbDogICR7UEFUVEVSTjo9LnZjZH0KKworCit2dnA6ICAke1BBVFRFUk46PS52dnB9CisKKyUudnZwOiAlX3RiLnYKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKworIyAtLS0tIENsZWFuIC0tLS0KKworY2xlYW46CisJcm0gLWYgKi52dnAgKi52Y2QgKi5sb2cgKi5mc3QKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfc3BpL2ZsYXNoMC5oZXggYi92ZXJpbG9nL2R2L3VzZXJfc3BpL2ZsYXNoMC5oZXgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjRhMmU0NwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9zcGkvZmxhc2gwLmhleApAQCAtMCwwICsxLDc5IEBACitAMDAwMDAwMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAxMyAwMCAwMCAwMCA2RiAwMCAwMCAwMCBGRiBGRiBGRiBGRg0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzZGIDAwIDYwIDE4IDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwDQorMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDANCisxMyAwMCAwMCAwMCAxMyAwMCAwMCAwMCAxMyAwMCAwMCAwMCAxMyAwMCAwMCAwMA0KKzEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwDQorOTMgMDAgMDAgMDAgMTMgMDEgMDAgMDAgOTMgMDEgMDAgMDAgMTMgMDIgMDAgMDANCis5MyAwMiAwMCAwMCAxMyAwMyAwMCAwMCA5MyAwMyAwMCAwMCAxMyAwNCAwMCAwMA0KKzkzIDA0IDAwIDAwIDEzIDA1IDAwIDAwIDkzIDA1IDAwIDAwIDEzIDA2IDAwIDAwDQorOTMgMDYgMDAgMDAgMTMgMDcgMDAgMDAgOTMgMDcgMDAgMDAgMTMgMDggMDAgMDANCis5MyAwOCAwMCAwMCAxMyAwOSAwMCAwMCA5MyAwOSAwMCAwMCAxMyAwQSAwMCAwMA0KKzkzIDBBIDAwIDAwIDEzIDBCIDAwIDAwIDkzIDBCIDAwIDAwIDEzIDBDIDAwIDAwDQorOTMgMEMgMDAgMDAgMTMgMEQgMDAgMDAgOTMgMEQgMDAgMDAgMTMgMEUgMDAgMDANCis5MyAwRSAwMCAwMCAxMyAwRiAwMCAwMCA5MyAwRiAwMCAwMCA5NyAwMSA0OCAwMA0KKzkzIDgxIDQxIDYyIDEzIDA1IDAwIDQwIDk3IDA1IDQ4IDAwIDkzIDg1IDg1IEQ3DQorMTcgMDYgNDggMDAgMTMgMDYgMDYgRTMgNjMgMEQgQjUgMDAgMjkgQTAgMTQgNDENCis5NCBDMSAxMSAwNSA5MSAwNSBFMyA5QyBDNSBGRSAxNyAwNiA0OCAwMCAxMyAwNg0KKzY2IEUxIDk3IDA1IDQ4IDAwIDkzIDg1IEU1IEUwIDIxIEEwIDIzIDIwIDA2IDAwDQorMTEgMDYgRTMgOUQgQzUgRkUgMTMgODEgMDEgNzYgMTcgMDUgNDggMDAgMTMgMDUNCis2NSBERiAxNyAwNiA0OCAwMCAxMyAwNiBFNiBERSBCMyAwNSBBNiA0MCAxMyA4Nw0KKzAxIDY2IDMzIDAyIEI3IDQwIDkyIDg1IDE3IDA2IDQ4IDAwIDEzIDA2IDg2IEREDQorMjkgQTAgMTQgNDEgOTQgQzEgMTEgMDUgOTEgMDUgRTMgMUMgQzUgRkUgMjEgQTANCisyMyBBMCAwNSAwMCA5MSAwNSBFMyA5RCBFNSBGRSBCNyAwMiA0OSAwMCAwNSA0Mw0KKzIzIEEwIDYyIDAwIEI3IDAyIDQ5IDAwIDkxIDAyIDEzIDAzIDMwIDA2IDIzIEEwDQorNjIgMDAgQjcgMDIgNDkgMDAgQzEgMDIgN0QgNTMgMjMgQTAgNjIgMDAgMjMgQTINCis2MiAwMCAwMSA0NSA4MSA0NSA5NyAwMiA0OCAwMCBFNyA4MCBBMiBDQyA5NyAwMg0KKzQ4IDAwIDkzIDgyIDIyIEQyIDZEIDcxIDA2IEMyIDBBIEM0IDBFIEM2IDEyIEM4DQorMTYgQ0EgMUEgQ0MgMUUgQ0UgMjIgRDAgMjYgRDIgMkEgRDQgMkUgRDYgMzIgRDgNCiszNiBEQSAzQSBEQyAzRSBERSBDMiBDMCBDNiBDMiBDQSBDNCBDRSBDNiBEMiBDOA0KK0Q2IENBIERBIENDIERFIENFIEUyIEQwIEU2IEQyIEVBIEQ0IEVFIEQ2IEYyIEQ4DQorRjYgREEgRkEgREMgRkUgREUgNzMgMjUgMjAgMzQgRjMgMjUgMTAgMzQgMEEgODYNCitFRiAwMCA4MCAwNCA5MiA0MCAyMiA0MSBCMiA0MSA0MiA0MiBEMiA0MiA2MiA0Mw0KK0YyIDQzIDAyIDU0IDkyIDU0IDIyIDU1IEIyIDU1IDQyIDU2IEQyIDU2IDYyIDU3DQorRjIgNTcgMDYgNDggOTYgNDggMjYgNDkgQjYgNDkgNDYgNEEgRDYgNEEgNjYgNEINCitGNiA0QiAwNiA1QyA5NiA1QyAyNiA1RCBCNiA1RCA0NiA1RSBENiA1RSA2NiA1Rg0KK0Y2IDVGIDUxIDYxIDczIDAwIDIwIDMwIDZGIEYwIERGIEQxIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KK0AwMDAwMDQwMA0KKzM3IDM3IDIyIDExIEI3IDA3IDAzIDMwIDkzIDAyIDQ3IDM0IDM3IDQzIDMzIDIyDQorMjMgQUMgNTcgMDQgOTMgMDMgNTMgNDUgMzcgNTUgNDQgMzMgMjMgQUUgNzcgMDQNCis5MyAwNSA2NSA1NiAzNyA2NiA1NSA0NCBBQyBEMyA5MyAwNiA3NiA2NyAzNyA3OA0KKzY2IDU1IEY0IEQzIDkzIDA4IDg4IDc4IDM3IDlFIDc3IDY2IDIzIEE0IDE3IDA3DQorOTMgMEUgOUUgODkgMjMgQTYgRDcgMDcgMDEgQTAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzk3IDAyIEI4IEZGIDkzIDgyIDQyIDA5IDgyIDgyIDEzIDAwIDAwIDAwIDEzIDAwDQorMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMDEgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorQDAwMDAwNEEwDQorMTMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9zcGkvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi91c2VyX3NwaS9ydW5faXZlcmlsb2cKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmVkYWJjMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9zcGkvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsNDQgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3Jpc2NfYm9vdC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl9yaXNjX2Jvb3QubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfcmlzY19ib290LmVsZiA+IHVzZXJfcmlzY19ib290LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KKworCisjaXZlcmlsb2cgd2l0aG91dCBEdW1wCitpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICRQREtfUEFUSCBcCistSSAuLi8uLi9jYXJhdmVsL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsIFwKKy1JIC4uL21vZGVsICAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgXAorLUkgLi4vYWdlbnRzICAgIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgXAordXNlcl9zcGlfdGIudiAtbyB1c2VyX3NwaS52dnAgCisKKworCit2dnAgdXNlcl9zcGlfdGIudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl9zcGlfdGIudnZwCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfc3BpL3VzZXJfcmlzY19ib290LmMgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL3VzZXJfcmlzY19ib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxMWI3YgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9zcGkvdXNlcl9yaXNjX2Jvb3QuYwpAQCAtMCwwICsxLDY5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZGVmaW5lIFNDX1NJTV9PVVRQT1JUICgweGYwMDAwMDAwKQorI2RlZmluZSB1aW50MzJfdCAgbG9uZworCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzAgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDAwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMiAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzMgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDBDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc0ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzYgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDE4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc3ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnOCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMjApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzkgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDI0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAyOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMkMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDMwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAzNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMzgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDNDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA0MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTcgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE4ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDQ4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxOSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA0QykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDU0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA1OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDYwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA2NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDZDKQorCitpbnQgbWFpbigpCit7CisKKyAgICAvL3ZvbGF0aWxlIGxvbmcgKm91dF9wdHIgPSAodm9sYXRpbGUgbG9uZyopU0NfU0lNX09VVFBPUlQ7CisgICAgLy8qb3V0X3B0ciA9IDB4QUFCQkNDREQ7CisgICAgLy8qb3V0X3B0ciA9IDB4QkJDQ0RERUU7CisgICAgLy8qb3V0X3B0ciA9IDB4Q0NEREVFRkY7CisgICAgLy8qb3V0X3B0ciA9IDB4RERFRUZGMDA7CisKKyAgICAvLyBXcml0ZSBzb2Z0d2FyZSBXcml0ZSAmIFJlYWQgUmVnaXN0ZXIKKyAgICByZWdfbXByal9nbG9ibF9yZWcyMiAgPSAweDExMjIzMzQ0OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyMyAgPSAweDIyMzM0NDU1OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNCAgPSAweDMzNDQ1NTY2OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNSAgPSAweDQ0NTU2Njc3OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNiA9IDB4NTU2Njc3ODg7IAorICAgIHJlZ19tcHJqX2dsb2JsX3JlZzI3ID0gMHg2Njc3ODg5OTsgCisKKyAgICB3aGlsZSgxKSB7fQorICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3NwaS91c2VyX3NwaV90Yi52IGIvdmVyaWxvZy9kdi91c2VyX3NwaS91c2VyX3NwaV90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmJmYTgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL3VzZXJfc3BpX3RiLnYKQEAgLTAsMCArMSwxNDE2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgU3RhbmRhbG9uZSBVc2VyIHZhbGlkYXRpb24gVGVzdCBiZW5jaCAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgIFRoaXMgaXMgYSBzdGFuZGFsb25lIHRlc3QgYmVuY2ggdG8gdmFsaWRhdGUgdGhlICAgICAgICAgICAgLy8vLworLy8vLyAgIERpZ2l0YWwgY29yZSBmbGFzaCBhY2Nlc3MgdGhyb3VnaCBFeHRlcm5hbCBXQiBpL0YuICAgICAgICAgLy8vLworLy8vLyAgIDEuICBDaGVjayBTUEkgUmVhZCBJZGVudGlmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgIDIuICBDaGVjayB0aGUgRGlyZWN0IE1lbW9yeSBSZWFkIChRdWFsL1NpbmdsZS9RdWFkKSAgICAgICAgLy8vLyAgICAgICAgCisvLy8vICAgMy4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gM0RXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNC4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gMkRXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNS4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gMURXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNi4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gN0RXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNy4gIDFEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgOC4gIDJEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgOS4gIDNEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTAuIDREVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTEuIDVEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTIuIDhEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTMuIFNlY3RvciBFcmFzZSBjb21tYW5kICsgUGFnZSBXcml0ZSAmIFJlYWQgQmFjayAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDAxIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJzMjVmbDI1NnMuc3YiCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgIm10NDhsYzhtOGEyLnYiCitgaW5jbHVkZSAic3BpcmFtLnYiCisKKyAvLyBSRUdJU1RFUiBNQVAKKyBgZGVmaW5lIFFTUElNX0dMQkxfQ1RSTCAgICAgICAgICAgMzInaDEwMDAwMDAwCisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1JEX0NUUkwgICAgMzInaDEwMDAwMDA0CisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1dSX0NUUkwgICAgMzInaDEwMDAwMDA4CisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1JEX0NUUkwgICAgMzInaDEwMDAwMDBDCisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1dSX0NUUkwgICAgMzInaDEwMDAwMDEwCisKKyBgZGVmaW5lIFFTUElNX0RNRU1fQ1NfQU1BUCAgICAgICAgMzInaDEwMDAwMDE0CisgYGRlZmluZSBRU1BJTV9ETUVNX0NBX0FNQVNLICAgICAgIDMyJ2gxMDAwMDAxOAorCisgYGRlZmluZSBRU1BJTV9JTUVNX0NUUkwxICAgICAgICAgIDMyJ2gxMDAwMDAxQworIGBkZWZpbmUgUVNQSU1fSU1FTV9DVFJMMiAgICAgICAgICAzMidoMTAwMDAwMjAKKyBgZGVmaW5lIFFTUElNX0lNRU1fQUREUiAgICAgICAgICAgMzInaDEwMDAwMDI0CisgYGRlZmluZSBRU1BJTV9JTUVNX1dEQVRBICAgICAgICAgIDMyJ2gxMDAwMDAyOAorIGBkZWZpbmUgUVNQSU1fSU1FTV9SREFUQSAgICAgICAgICAzMidoMTAwMDAwMkMKKyBgZGVmaW5lIFFTUElNX1NQSV9TVEFUVVMgICAgICAgICAgMzInaDEwMDAwMDMwCisKK21vZHVsZSB1c2VyX3NwaV90YjsKKwlyZWcgY2xvY2s7CisJcmVnIHdiX3JzdF9pOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIHJlZyBbMzowXSAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAgICAgd2lyZSBbMzE6MF0gd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCisJLy8gVXNlciBJL08KKwl3aXJlIFszNzowXSBpb19vZWI7CisJd2lyZSBbMzc6MF0gaW9fb3V0OworCXdpcmUgWzM3OjBdIGlvX2luOworCisJd2lyZSBncGlvOworCXdpcmUgWzM3OjBdIG1wcmpfaW87CisJd2lyZSBbNzowXSBtcHJqX2lvXzA7CisJcmVnICAgICAgICB0ZXN0X2ZhaWw7CisJcmVnIFszMTowXSByZWFkX2RhdGE7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBTUEkgRlNNIFN0YXRlIENvbnRyb2wKKyoKKyogICBPUEVSQVRJT04gICBDT01NQU5EICAgICAgICAgICAgICAgICAgIFNFUVVFTkNFIAorKgorKiAgICBFUkFTRSAgICAgICBQNEUoMHgyMCkgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBQOEUoMHg0MCkgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBTRSgweEQ4KSAgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBCRSgweDYwKSAgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBCRSgweEM3KSAgICAgICAgICAgIC0+ICBDT01NQU5EIAorKiAgICBQUk9HUkFNICAgICBQUCgweDAyKSAgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUyArIFdyaXRlIERBVEEKKyogICAgUFJPR1JBTSAgICAgUVBQKDB4MzIpICAgICAgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBXcml0ZSBEQVRBCisqICAgIFJFQUQgICAgICAgIFJFQUQoMHgzKSAgICAgICAgICAgLT4gIENPTU1BTkQgKyBBRERSRVNTICsgUkVBRCBEQVRBCisqICAgIFJFQUQgICAgICAgIEZBU1RfUkVBRCgweEIpICAgICAgLT4gIENPTU1BTkQgKyBBRERSRVNTICsgRFVNTVkgKyBSRUFEIERBVEEKKyogICAgUkVBRCAgICAgICAgRE9SICgweDNCKSAgICAgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBEVU1NWSArIFJFQUQgREFUQQorKiAgICBSRUFEICAgICAgICBRT1IgKDB4NkIpICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUyArIERVTU1ZICsgUkVBRCBEQVRBCisqICAgIFJFQUQgICAgICAgIERJT1IgKDB4QkIpICAgICAgICAgLT4gIENPTU1BTkQgKyBBRERSRVNTICsgTU9ERSAgKyBSRUFEIERBVEEKKyogICAgUkVBRCAgICAgICAgUUlPUiAoMHhFQikgICAgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBNT0RFICArIERVTU1ZICsgUkVBRCBEQVRBCisqICAgIFJFQUQgICAgICAgIFJESUQgKDB4OUYpICAgICAgICAgLT4gIENPTU1BTkQgKyBSRUFEIERBVEEKKyogICAgUkVBRCAgICAgICAgUkVBRF9JRCAoMHg5MCkgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBSRUFEIERBVEEKKyogICAgV1JJVEUgICAgICAgV1JFTigweDYpICAgICAgICAgICAtPiAgQ09NTUFORAorKiAgICBXUklURSAgICAgICBXUkRJICAgICAgICAgICAgICAgIC0+ICBDT01NQU5ECisqICAgIFNUQVRVUyAgICAgIFJEU1IoMHgwNSkgICAgICAgICAgLT4gIENPTU1BTkQgKyBSRUFEIERBVEEKKyogICAgU1RBVFVTICAgICAgUkNSKDB4MzUpICAgICAgICAgICAtPiAgQ09NTUFORCArIFJFQUQgREFUQQorKiAgICBDT05GSUcgICAgICBXUlIoMHgwMSkgICAgICAgICAgIC0+ICBDT01NQU5EICsgV1JJVEUgREFUQQorKiAgICBDT05GSUcgICAgICBDTFNSKDB4MzApICAgICAgICAgIC0+ICBDT01NQU5ECisqICAgIFBvd2VyIFNhdmluZyBEUCgweEI5KSAgICAgICAgICAgLT4gIENPTU1BTkQKKyogICAgUG93ZXIgU2F2aW5nIFJFUygweEFCKSAgICAgICAgICAtPiAgQ09NTUFORCArIFJFQUQgREFUQQorKiAgICBPVFAgICAgICAgICAgT1RQUCgweDQyKSAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUisgV1JJVEUgREFUQQorKiAgICBPVFAgICAgICAgICAgT1RQUigweDRCKSAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUiArIERVTU1ZICsgUkVBRCBEQVRBCisqICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFyYW1ldGVyIFBfRlNNX0MgICAgICA9IDQnYjAwMDA7IC8vIENvbW1hbmQgUGhhc2UgT25seQorcGFyYW1ldGVyIFBfRlNNX0NXICAgICA9IDQnYjAwMDE7IC8vIENvbW1hbmQgKyBXcml0ZSBEQVRBIFBoYXNlIE9ubHkKK3BhcmFtZXRlciBQX0ZTTV9DQSAgICAgPSA0J2IwMDEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgUGhhc2UgT25seQorCitwYXJhbWV0ZXIgUF9GU01fQ0FSICAgID0gNCdiMDAxMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IFJlYWQgRGF0YQorcGFyYW1ldGVyIFBfRlNNX0NBRFIgICA9IDQnYjAxMDA7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPiBEdW1teSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1SICAgPSA0J2IwMTAxOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1EUiAgPSA0J2IwMTEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBEdW1teSAtPiBSZWFkIERhdGEKKworcGFyYW1ldGVyIFBfRlNNX0NBVyAgICA9IDQnYjAxMTE7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPldyaXRlIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQURXICAgPSA0J2IxMDAwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gRFVNTVkgKyBXcml0ZSBEYXRhCitwYXJhbWV0ZXIgUF9GU01fQ0FNVyAgID0gNCdiMTAwMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IE1PREUgKyBXcml0ZSBEYXRhCisKK3BhcmFtZXRlciBQX0ZTTV9DRFIgICAgPSA0J2IxMDEwOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFJFQUQKK3BhcmFtZXRlciBQX0ZTTV9DRFcgICAgPSA0J2IxMDExOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFdSSVRFCitwYXJhbWV0ZXIgUF9GU01fQ1IgICAgID0gNCdiMTEwMDsgIC8vIENPTU1BTkQgLT4gUkVBRAorCitwYXJhbWV0ZXIgUF9NT0RFX1NXSVRDSF9JRExFICAgICA9IDInYjAwOworcGFyYW1ldGVyIFBfTU9ERV9TV0lUQ0hfQVRfQUREUiAgPSAyJ2IwMTsKK3BhcmFtZXRlciBQX01PREVfU1dJVENIX0FUX0RBVEEgID0gMidiMTA7CisKK3BhcmFtZXRlciBQX1NJTkdMRSA9IDInYjAwOworcGFyYW1ldGVyIFBfRE9VQkxFID0gMidiMDE7CitwYXJhbWV0ZXIgUF9RVUFEICAgPSAyJ2IxMDsKK3BhcmFtZXRlciBQX1FERFIgICA9IDInYjExOworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorCWVuZAorCisJYGlmZGVmIFdGRFVNUAorCSAgIGluaXRpYWwgYmVnaW4KKwkgICAJJGR1bXBmaWxlKCJzaW14LnZjZCIpOworCSAgIAkkZHVtcHZhcnMoNSwgdXNlcl9zcGlfdGIpOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQkkZHVtcG9uOworCisJCSMyMDA7IC8vIFdhaXQgZm9yIHJlc2V0IHJlbW92YWwKKwkgICAgICAgIHJlcGVhdCAoMTApIEAocG9zZWRnZSBjbG9jayk7CisJCSRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IFRlc3QgU3RhcnRlZCIpOworCisJCS8vIFJlbW92ZSBXYiBSZXNldAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxKTsKKworCSAgICAgICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworCQkjMTsKKwkJLy8gUmVtb3ZlIFdCIGFuZCBTUEkgUmVzZXQsIEtlZXAgU0RBUk0gYW5kIENPUkUgdW5kZXIgUmVzZXQKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2g1KTsKKworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAKKworCisJCXRlc3RfZmFpbCA9IDA7CisJICAgICAgICByZXBlYXQgKDIwMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJLy8gQ1MjMiBTU1BJIEluZGlyZWN0IFJBTSBSRUFEIEFDQ0VTUy0KKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDQsMidiMDAsMidiMTAsUF9GU01fQ0FEUiw4J2gwMCw4J2gwM30pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMDIwMTAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMDA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwNzA2MDUwNCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMGIwYTA5MDgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMEMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDBmMGUwZDBjKTsKKworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDExMTExMTExKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gyMjIyMjIyMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMzMzMzMzMzMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMEMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQ0NDQ0NDQ0KTsKKworCQkvLyBDUyMyIFNTUEkgSW5kaWVjdCBXcml0ZSBEQVRBCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAxMDB9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gxMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQVcsOCdoMDAsOCdoMDJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMDAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDExMjIzMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoNDQ1NTY2NzcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDg4OTlBQUJCKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2hDQ0RERUVGRik7CisJCQorCQkvLyBDUyMyIFNTUEkgSW5kaXJlY3QgUkVBRCBEQVRBCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAxMDB9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gxMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQURSLDgnaDAwLDgnaDAzfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAxMTIyMzMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQ0NTU2Njc3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g4ODk5QUFCQik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoQ0NEREVFRkYpOworCisKKwkJLy8gQ1MjMiBTd2l0Y2ggdG8gUVNQSSBNb2RlCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAxMDB9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gwLDInYjAwLDInYjAwLFBfRlNNX0MsOCdoMDAsOCdoMzh9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKworCisJCS8vIENTIzIgUVVBRCBJbmRpcmVjdCBXcml0ZSBEQVRBCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfUVVBRCxQX1FVQUQsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDEwLDInYjAwLDInYjEwLFBfRlNNX0NBVyw4J2gwMCw4J2gwMn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMDApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAxMjM0NTU3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2g4OUFCQ0RFRik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMTIzNDU2NzgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDlBQkNERUYwKTsKKworCisJCS8vIENTIzIgUVVBRCBJbmRpcmVjdCBSRUFEIERBVEEKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9RVUFELFBfUVVBRCw0J2IwMTAwfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMTAsMidiMDAsMidiMTAsUF9GU01fQ0FEUiw4J2gwMCw4J2gwM30pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAxMjM0NTU3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g4OUFCQ0RFRik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMTIzNDU2NzgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDlBQkNERUYwKTsKKworCQkvLyBDUyMyIFN3aXRjaCBGcm9tIFFTUEkgdG8gU1NQSSBNb2RlCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfUVVBRCxQX1FVQUQsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMDAsUF9GU01fQyw4J2gwMCw4J2hGRn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDApOworCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIENTIzEgSW5kaXJlY3QgTWVtb3J5IEFjY2VzcyBUZXN0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBSZWFkIElkZW50aWZpY2F0aW9uIChSRElEOjB4OUYpICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCwyJ2IwMCxQX1NJTkdMRSxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoNCwyJ2IwMCwyJ2IwMCxQX0ZTTV9DUiw4J2gwMCw4J2g5Rn0pOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMTkwMjAxKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiVGVzdGluZyBEaXJlY3QgU1BJIE1lbW9yeSBSZWFkICAgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIiBTUEkgTW9kZTogUUREUiAoRHVhbCA0IGJpdCkgICAgICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCJQcmVmZXRjaCA6IDFEVywgT1BDT0RFOlJFQUQoMHhFRCkgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiU0VROiBDb21tYW5kIC0+IEFkZHJlc3MgLT4gUmVhZCBEYXRhICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkvLyBRRERSIENvbmZpZworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDEwMCwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RRERSLFBfU0lOR0xFLDgnaDAwLDgnaEVEfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKwkJJGR1bXBvZmY7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCAgICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIgU1BJIE1vZGU6IE5vcm1hbC9TaW5nbGUgQml0ICAgICAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiUHJlZmV0Y2ggOiAxRFcsIE9QQ09ERTpSRUFEKDB4MykgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlNFUTogQ29tbWFuZCAtPiBBZGRyZXNzIC0+IFJlYWQgRGF0YSAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9ETUVNX0cwX1JEX0NUUkwse1BfRlNNX0NBUiw0J2IwMDAwLDInYjEwLFBfTU9ERV9TV0lUQ0hfSURMRSxQX1NJTkdMRSxQX1NJTkdMRSw4J2gwMCw4J2gwM30pOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDAwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAwMAorCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDAscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwNCxyZWFkX2RhdGEsMzInaDAwMDAwMTEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA4LHJlYWRfZGF0YSwzMidoMDAwMDAxOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMEMscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxMCxyZWFkX2RhdGEsMzInaDAwMDAwMjkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE0LHJlYWRfZGF0YSwzMidoMDAwMDAzMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTgscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxQyxyZWFkX2RhdGEsMzInaDAwMDAwNDEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzAwLHJlYWRfZGF0YSwzMidoMDAwNUEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDQscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwOCxyZWFkX2RhdGEsMzInaDAyQjdGRUU1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzBDLHJlYWRfZGF0YSwzMidoNDMwNTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTAscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxNCxyZWFkX2RhdGEsMzInaDAwNDkwMkI3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE4LHJlYWRfZGF0YSwzMidoMDMxMzAyOTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMUMscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCAgICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIgU1BJIE1vZGU6IE5vcm1hbC9TaW5nbGUgQml0ICAgICAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiUHJlZmV0Y2ggOiAxRFcsIE9QQ09ERTpGQVNUUkVBRCgweEIpICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlNFUTogQ29tbWFuZCAtPiBBZGRyZXNzIC0+IER1bW15IC0+IFJlYWQgRGF0YSIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQURSLDQnYjAwMDAsMidiMTAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDgnaDAwLDgnaDBCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgICAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIFNQSSBNb2RlOiBEdWFsIE1vZGUgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlByZWZldGNoIDogMURXLCBPUENPREU6RE9SKDB4M0IpICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlNFUTogQ29tbWFuZCAtPiBBZGRyZXNzIC0+IER1bW15IC0+IFJlYWQgRGF0YSIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQURSLDQnYjAwMDAsMidiMTAsUF9NT0RFX1NXSVRDSF9BVF9EQVRBLFBfRE9VQkxFLFBfU0lOR0xFLDgnaDAwLDgnaDNCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgd2l0aCBQcmVmZXRjaCIpOworCQkkZGlzcGxheSgiIFNQSSBNb2RlOiBRdWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlByZWZldGNoIDogOERXLCBPUENPREU6VVJBRCBSRUFEKDB4RUIpICAgICAgIik7CisJCSRkaXNwbGF5KCJTRVE6IENvbW1hbmQgLT4gQWRkcmVzcyAtPiBEdW1teSAtPiBSZWFkIERhdGEiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDAwMSwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDgnaDAwLDgnaEVCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgd2l0aCBQcmVmZXRjaDozRFciKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDAwMSwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDgnaDAwLDgnaEVCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgd2l0aCBQcmVmZXRjaDoyRFciKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDAwMSwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDgnaDAwLDgnaEVCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCB3aXRoIFByZWZldGNoOjFEVyIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQU1EUiw0J2IwMDAxLDInYjEwLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsOCdoMDAsOCdoRUJ9KTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gwMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMDAKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjAwLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDQscmVhZF9kYXRhLDMyJ2gwMDAwMDExMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwOCxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjBDLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTAscmVhZF9kYXRhLDMyJ2gwMDAwMDI5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxNCxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE4LHJlYWRfZGF0YSwzMidoMDAwMDAzOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMUMscmVhZF9kYXRhLDMyJ2gwMDAwMDQxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwMCxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA0LHJlYWRfZGF0YSwzMidoOURFMzA1OTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDgscmVhZF9kYXRhLDMyJ2gwMkI3RkVFNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwQyxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzEwLHJlYWRfZGF0YSwzMidoMDA2MkEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTQscmVhZF9kYXRhLDMyJ2gwMDQ5MDJCNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxOCxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzFDLHJlYWRfZGF0YSwzMidoYTAyMzA2MzApOworCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCB3aXRoIFByZWZldGNoOjdEVyIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQU1EUiw0J2IwMDAxLDInYjEwLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsOCdoMDAsOCdoRUJ9KTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gwMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMDAKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjAwLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDQscmVhZF9kYXRhLDMyJ2gwMDAwMDExMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwOCxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjBDLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTAscmVhZF9kYXRhLDMyJ2gwMDAwMDI5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxNCxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE4LHJlYWRfZGF0YSwzMidoMDAwMDAzOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMUMscmVhZF9kYXRhLDMyJ2gwMDAwMDQxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwMCxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA0LHJlYWRfZGF0YSwzMidoOURFMzA1OTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDgscmVhZF9kYXRhLDMyJ2gwMkI3RkVFNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwQyxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzEwLHJlYWRfZGF0YSwzMidoMDA2MkEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTQscmVhZF9kYXRhLDMyJ2gwMDQ5MDJCNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxOCxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzFDLHJlYWRfZGF0YSwzMidoYTAyMzA2MzApOworCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgVGVzdGluZyBTaW5nbGUgV29yZCBJbmRpcmVjdCBTUEkgTWVtb3J5IFJlYWQiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAxLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDQsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjBDKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMTQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjE4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxQyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMEMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzEwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMxNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzFDKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisJCXJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFRlc3RpbmcgVHdvIFdvcmQgSW5kaXJlY3QgU1BJIE1lbW9yeSBSZWFkIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMSxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2g4LDInYjAwLDInYjEwLFBfRlNNX0NBTURSLDgnaDAwLDgnaEVCfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjA4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMTApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMjkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAzOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwNDEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoOURFMzA1OTEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAyQjdGRUU1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA2MkEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwNDkwMkI3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzE4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoYTAyMzA2MzApOworCQlyZXBlYXQgKDEwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBUZXN0aW5nIFRocmVlIFdvcmQgSW5kaXJlY3QgU1BJIE1lbW9yeSBSZWFkIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMSxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2hDLDInYjAwLDInYjEwLFBfRlNNX0NBTURSLDgnaDAwLDgnaEVCfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwQyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMjkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwNUEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMkI3RkVFNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMwQyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoNDMwNTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDQ5MDJCNyk7CisJCXJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFRlc3RpbmcgRm91ciBXb3JkIEluZGlyZWN0IFNQSSBNZW1vcnkgUmVhZCIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDEsUF9NT0RFX1NXSVRDSF9BVF9BRERSLFBfUVVBRCxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMTAsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzEwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisJCXJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFRlc3RpbmcgRml2ZSBXb3JkIEluZGlyZWN0IFNQSSBNZW1vcnkgUmVhZCIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDEsUF9NT0RFX1NXSVRDSF9BVF9BRERSLFBfUVVBRCxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMTQsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgVGVzdGluZyBFaWdodCBXb3JkIEluZGlyZWN0IFNQSSBNZW1vcnkgUmVhZCIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDEsUF9NT0RFX1NXSVRDSF9BVF9BRERSLFBfUVVBRCxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMjAsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBTZWN0b3IgRXJhc2UgQ29tbWFuZCAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCS8vIFdFTiBDT01NQU5ECisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gwLDInYjAwLDInYjAwLFBfRlNNX0MsOCdoMDAsOCdoMDZ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKyAgICAgICAgICAgICAgICAvLyBTZWN0b3IgRXJhc2UKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMTAsUF9GU01fQ0EsOCdoMDAsOCdoRDh9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMDAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKworCQkvLyBSRFNSCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2g0LDInYjAwLDInYjAwLFBfRlNNX0NSLDgnaDAwLDgnaDA1fSk7CisJCXJlYWRfZGF0YSA9IDMyJ2hGRkZGX0ZGRkY7CisJCXdoaWxlIChyZWFkX2RhdGFbMTowXSA9PSAyJ2IxMSkgYmVnaW4KKwkJICAgIHdiX3VzZXJfY29yZV9yZWFkKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSk7CisJCSAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQllbmQKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFBhZ2UgV3JpdGUgQ29tbWFuZCBBZGRyZXNzOiAweDAwICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIFdFTiBDT01NQU5ECisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gwLDInYjAwLDInYjAwLFBfRlNNX0MsOCdoMDAsOCdoMDZ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKwkJIC8vIFBhZ2UgUHJvZ3JhbWluZworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAwLFBfTU9ERV9TV0lUQ0hfSURMRSxQX1NJTkdMRSxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoRjAsMidiMDAsMidiMTAsUF9GU01fQ0FXLDgnaDAwLDgnaDAyfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDAxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAwMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDA0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAwNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDA3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAwOCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDEwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAxMSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMTIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAxNCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMTUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDE2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAxNyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMTgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDE5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMjEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDIyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMjQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDI1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyNik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMjcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDI4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyOSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDMxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAzMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDM0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAzNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDM3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAzOCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA0MSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNDIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA0NCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNDUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQ2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA0Nyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNDgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1MCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNTEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDUyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNTQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDU1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1Nik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNTcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDU4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1OSk7CisKKwkJLy8gUkRTUgorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAwLFBfTU9ERV9TV0lUQ0hfSURMRSxQX1NJTkdMRSxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoNCwyJ2IwMCwyJ2IwMCxQX0ZTTV9DUiw4J2gwMCw4J2gwNX0pOworCQlyZWFkX2RhdGEgPSAzMidoRkZGRl9GRkZGOworCQl3aGlsZSAocmVhZF9kYXRhWzE6MF0gPT0gMidiMTEpIGJlZ2luCisJCSAgICB3Yl91c2VyX2NvcmVfcmVhZChgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEpOworCQkgICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJIGVuZAorCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgUGFnZSBSZWFkIHRocm91Z2ggRGlyZWN0IEFjY2VzcyAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAwMCxyZWFkX2RhdGEsMzInaDAwMDEwMDAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDA0LHJlYWRfZGF0YSwzMidoMDAwMTAwMDEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMDgscmVhZF9kYXRhLDMyJ2gwMDAxMDAwMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAwQyxyZWFkX2RhdGEsMzInaDAwMDEwMDAzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDEwLHJlYWRfZGF0YSwzMidoMDAwMTAwMDQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMTQscmVhZF9kYXRhLDMyJ2gwMDAxMDAwNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAxOCxyZWFkX2RhdGEsMzInaDAwMDEwMDA2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDFDLHJlYWRfZGF0YSwzMidoMDAwMTAwMDcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMjAscmVhZF9kYXRhLDMyJ2gwMDAxMDAwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAyNCxyZWFkX2RhdGEsMzInaDAwMDEwMDA5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDI4LHJlYWRfZGF0YSwzMidoMDAwMTAwMTApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMkMscmVhZF9kYXRhLDMyJ2gwMDAxMDAxMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAzMCxyZWFkX2RhdGEsMzInaDAwMDEwMDEyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDM0LHJlYWRfZGF0YSwzMidoMDAwMTAwMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMzgscmVhZF9kYXRhLDMyJ2gwMDAxMDAxNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAzQyxyZWFkX2RhdGEsMzInaDAwMDEwMDE1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDQwLHJlYWRfZGF0YSwzMidoMDAwMTAwMTYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNDQscmVhZF9kYXRhLDMyJ2gwMDAxMDAxNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA0OCxyZWFkX2RhdGEsMzInaDAwMDEwMDE4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDRDLHJlYWRfZGF0YSwzMidoMDAwMTAwMTkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNTAscmVhZF9kYXRhLDMyJ2gwMDAxMDAyMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA1NCxyZWFkX2RhdGEsMzInaDAwMDEwMDIxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDU4LHJlYWRfZGF0YSwzMidoMDAwMTAwMjIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNUMscmVhZF9kYXRhLDMyJ2gwMDAxMDAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA2MCxyZWFkX2RhdGEsMzInaDAwMDEwMDI0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDY0LHJlYWRfZGF0YSwzMidoMDAwMTAwMjUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNjgscmVhZF9kYXRhLDMyJ2gwMDAxMDAyNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA2QyxyZWFkX2RhdGEsMzInaDAwMDEwMDI3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDcwLHJlYWRfZGF0YSwzMidoMDAwMTAwMjgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNzQscmVhZF9kYXRhLDMyJ2gwMDAxMDAyOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA3OCxyZWFkX2RhdGEsMzInaDAwMDEwMDMwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDdDLHJlYWRfZGF0YSwzMidoMDAwMTAwMzEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwODAscmVhZF9kYXRhLDMyJ2gwMDAxMDAzMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA4NCxyZWFkX2RhdGEsMzInaDAwMDEwMDMzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDg4LHJlYWRfZGF0YSwzMidoMDAwMTAwMzQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwOEMscmVhZF9kYXRhLDMyJ2gwMDAxMDAzNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA5MCxyZWFkX2RhdGEsMzInaDAwMDEwMDM2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDk0LHJlYWRfZGF0YSwzMidoMDAwMTAwMzcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwOTgscmVhZF9kYXRhLDMyJ2gwMDAxMDAzOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA5QyxyZWFkX2RhdGEsMzInaDAwMDEwMDM5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEEwLHJlYWRfZGF0YSwzMidoMDAwMTAwNDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQTQscmVhZF9kYXRhLDMyJ2gwMDAxMDA0MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBBOCxyZWFkX2RhdGEsMzInaDAwMDEwMDQyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEFDLHJlYWRfZGF0YSwzMidoMDAwMTAwNDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQjAscmVhZF9kYXRhLDMyJ2gwMDAxMDA0NCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBCNCxyZWFkX2RhdGEsMzInaDAwMDEwMDQ1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEI4LHJlYWRfZGF0YSwzMidoMDAwMTAwNDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQkMscmVhZF9kYXRhLDMyJ2gwMDAxMDA0Nyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBDMCxyZWFkX2RhdGEsMzInaDAwMDEwMDQ4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEM0LHJlYWRfZGF0YSwzMidoMDAwMTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQzgscmVhZF9kYXRhLDMyJ2gwMDAxMDA1MCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBDQyxyZWFkX2RhdGEsMzInaDAwMDEwMDUxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEQwLHJlYWRfZGF0YSwzMidoMDAwMTAwNTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwRDQscmVhZF9kYXRhLDMyJ2gwMDAxMDA1Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBEOCxyZWFkX2RhdGEsMzInaDAwMDEwMDU0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMERDLHJlYWRfZGF0YSwzMidoMDAwMTAwNTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwRTAscmVhZF9kYXRhLDMyJ2gwMDAxMDA1Nik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBFNCxyZWFkX2RhdGEsMzInaDAwMDEwMDU3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEU4LHJlYWRfZGF0YSwzMidoMDAwMTAwNTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwRUMscmVhZF9kYXRhLDMyJ2gwMDAxMDA1OSk7CisKKwkJcmVwZWF0ICgxMDApIEAocG9zZWRnZSBjbG9jayk7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgUGFnZSBSZWFkIHRocm91Z2ggSW5kaXJlY3QgQWNjZXNzICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAxLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaEYwLDInYjAwLDInYjEwLFBfRlNNX0NBTURSLDgnaDAwLDgnaEVCfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwMCk7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMDEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDAyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMDQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDA1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMDcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDA4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDExKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAxMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDE0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAxNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDE3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAxOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDIwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAyMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMjIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAyNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMjUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDI2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAyNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMjgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDI5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMzEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDMyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMzQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDM1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMzcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDM4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDQxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA0Mik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDQ0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA0NSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDQ3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA0OCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDUwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA1MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDUzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA1NCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDU2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA1Nyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDU5KTsKKworCQlyZXBlYXQgKDEwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBQYWdlIFdyaXRlIENvbW1hbmQgQWRkcmVzczogMHgyMDAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJLy8gV0VOIENPTU1BTkQKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMDAsUF9GU01fQyw4J2gwMCw4J2gwNn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDApOworCQkgLy8gUGFnZSBQcm9ncmFtaW5nCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2hGMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQVcsOCdoMDAsOCdoMDJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMDEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDAyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMDQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDA1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwNik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMDcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDA4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwOSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDExKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAxMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDE0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAxNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDE3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAxOCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDIwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAyMSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMjIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAyNCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMjUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDI2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAyNyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMjgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDI5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMzEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDMyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMzQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDM1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzNik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMzcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDM4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzOSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDQxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA0Mik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDQ0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA0NSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDQ3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA0OCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDUwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA1MSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNTIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDUzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA1NCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNTUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDU2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA1Nyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNTgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDU5KTsKKworCQkvLyBSRFNSCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2g0LDInYjAwLDInYjAwLFBfRlNNX0NSLDgnaDAwLDgnaDA1fSk7CisJCXJlYWRfZGF0YSA9IDMyJ2hGRkZGX0ZGRkY7CisJCXdoaWxlIChyZWFkX2RhdGFbMTowXSA9PSAyJ2IxMSkgYmVnaW4KKwkJICAgIHdiX3VzZXJfY29yZV9yZWFkKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSk7CisJCSAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkgZW5kCisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBQYWdlIFJlYWQgdGhyb3VnaCBEaXJlY3QgQWNjZXNzICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gwMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMDAKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjAwLHJlYWRfZGF0YSwzMidoMDAwMjAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDQscmVhZF9kYXRhLDMyJ2gwMDAyMDAwMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwOCxyZWFkX2RhdGEsMzInaDAwMDIwMDAyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjBDLHJlYWRfZGF0YSwzMidoMDAwMjAwMDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTAscmVhZF9kYXRhLDMyJ2gwMDAyMDAwNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxNCxyZWFkX2RhdGEsMzInaDAwMDIwMDA1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE4LHJlYWRfZGF0YSwzMidoMDAwMjAwMDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMUMscmVhZF9kYXRhLDMyJ2gwMDAyMDAwNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIyMCxyZWFkX2RhdGEsMzInaDAwMDIwMDA4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjI0LHJlYWRfZGF0YSwzMidoMDAwMjAwMDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMjgscmVhZF9kYXRhLDMyJ2gwMDAyMDAxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIyQyxyZWFkX2RhdGEsMzInaDAwMDIwMDExKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjMwLHJlYWRfZGF0YSwzMidoMDAwMjAwMTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMzQscmVhZF9kYXRhLDMyJ2gwMDAyMDAxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIzOCxyZWFkX2RhdGEsMzInaDAwMDIwMDE0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjNDLHJlYWRfZGF0YSwzMidoMDAwMjAwMTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNDAscmVhZF9kYXRhLDMyJ2gwMDAyMDAxNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI0NCxyZWFkX2RhdGEsMzInaDAwMDIwMDE3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjQ4LHJlYWRfZGF0YSwzMidoMDAwMjAwMTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNEMscmVhZF9kYXRhLDMyJ2gwMDAyMDAxOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI1MCxyZWFkX2RhdGEsMzInaDAwMDIwMDIwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjU0LHJlYWRfZGF0YSwzMidoMDAwMjAwMjEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNTgscmVhZF9kYXRhLDMyJ2gwMDAyMDAyMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI1QyxyZWFkX2RhdGEsMzInaDAwMDIwMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjYwLHJlYWRfZGF0YSwzMidoMDAwMjAwMjQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNjQscmVhZF9kYXRhLDMyJ2gwMDAyMDAyNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI2OCxyZWFkX2RhdGEsMzInaDAwMDIwMDI2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjZDLHJlYWRfZGF0YSwzMidoMDAwMjAwMjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNzAscmVhZF9kYXRhLDMyJ2gwMDAyMDAyOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI3NCxyZWFkX2RhdGEsMzInaDAwMDIwMDI5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjc4LHJlYWRfZGF0YSwzMidoMDAwMjAwMzApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyN0MscmVhZF9kYXRhLDMyJ2gwMDAyMDAzMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI4MCxyZWFkX2RhdGEsMzInaDAwMDIwMDMyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjg0LHJlYWRfZGF0YSwzMidoMDAwMjAwMzMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyODgscmVhZF9kYXRhLDMyJ2gwMDAyMDAzNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI4QyxyZWFkX2RhdGEsMzInaDAwMDIwMDM1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjkwLHJlYWRfZGF0YSwzMidoMDAwMjAwMzYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyOTQscmVhZF9kYXRhLDMyJ2gwMDAyMDAzNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI5OCxyZWFkX2RhdGEsMzInaDAwMDIwMDM4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjlDLHJlYWRfZGF0YSwzMidoMDAwMjAwMzkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQTAscmVhZF9kYXRhLDMyJ2gwMDAyMDA0MCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJBNCxyZWFkX2RhdGEsMzInaDAwMDIwMDQxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkE4LHJlYWRfZGF0YSwzMidoMDAwMjAwNDIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQUMscmVhZF9kYXRhLDMyJ2gwMDAyMDA0Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJCMCxyZWFkX2RhdGEsMzInaDAwMDIwMDQ0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkI0LHJlYWRfZGF0YSwzMidoMDAwMjAwNDUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQjgscmVhZF9kYXRhLDMyJ2gwMDAyMDA0Nik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJCQyxyZWFkX2RhdGEsMzInaDAwMDIwMDQ3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkMwLHJlYWRfZGF0YSwzMidoMDAwMjAwNDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQzQscmVhZF9kYXRhLDMyJ2gwMDAyMDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJDOCxyZWFkX2RhdGEsMzInaDAwMDIwMDUwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkNDLHJlYWRfZGF0YSwzMidoMDAwMjAwNTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyRDAscmVhZF9kYXRhLDMyJ2gwMDAyMDA1Mik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJENCxyZWFkX2RhdGEsMzInaDAwMDIwMDUzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkQ4LHJlYWRfZGF0YSwzMidoMDAwMjAwNTQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyREMscmVhZF9kYXRhLDMyJ2gwMDAyMDA1NSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJFMCxyZWFkX2RhdGEsMzInaDAwMDIwMDU2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkU0LHJlYWRfZGF0YSwzMidoMDAwMjAwNTcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyRTgscmVhZF9kYXRhLDMyJ2gwMDAyMDA1OCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJFQyxyZWFkX2RhdGEsMzInaDAwMDIwMDU5KTsKKworCQlyZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFBhZ2UgUmVhZCB0aHJvdWdoIEluZGlyZWN0IEFjY2VzcyAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMSxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2hGMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQU1EUiw4J2gwMCw4J2hFQn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMDApOworCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDAxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAwMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAwNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDA3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDEwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAxMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAxNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDE2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAxNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDE5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMjEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDIyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMjQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDI1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDI4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDMxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAzMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDM0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAzNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDM3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAzOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA0MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNDIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA0NCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNDUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQ2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA0Nyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1MCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDUyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNTQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDU1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1Nik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNTcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDU4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1OSk7CisKKwkJcmVwZWF0ICgxMDApIEAocG9zZWRnZSBjbG9jayk7CisJCQkvLyAkZGlzcGxheSgiKzEwMDAgY3ljbGVzIik7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJCSAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTUEkgTWFzdGVyIE1vZGUgKEdMKSBQYXNzZWQiKTsKKwkJICAgYGVsc2UKKwkJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTUEkgTWFzdGVyIE1vZGUgKFJUTCkgUGFzc2VkIik7CisJCSAgIGBlbmRpZgorCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkJICAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU1BJIE1hc3RlciBNb2RlIChHTCkgRmFpbGVkIik7CisJCSAgICBgZWxzZQorCQkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTUEkgTWFzdGVyIE1vZGUgKFJUTCkgRmFpbGVkIik7CisJCSAgICBgZW5kaWYKKwkJIGVuZAorCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAgICAgJGZpbmlzaDsKKwllbmQKKworCWluaXRpYWwgYmVnaW4KKwkJd2JfcnN0X2kgPD0gMSdiMTsKKwkJIzEwMDsKKwkJd2JfcnN0X2kgPD0gMSdiMDsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJZW5kCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKwordXNlcl9wcm9qZWN0X3dyYXBwZXIgdV90b3AoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEoVVNFUl9WREQxVjgpLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMShWU1MpLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgLndiX2Nsa19pICAgICAgICAoY2xvY2spLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgLnVzZXJfY2xvY2syICAgICAoMSdiMSksICAvLyBSZWFsLXRpbWUgY2xvY2sKKyAgICAud2JfcnN0X2kgICAgICAgICh3Yl9yc3RfaSksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgLndic19jeWNfaSAgICh3YmRfZXh0X2N5Y19pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19zdGJfaSAgICh3YmRfZXh0X3N0Yl9pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19hZHJfaSAgICh3YmRfZXh0X2Fkcl9pKSwgIC8vIGFkZHJlc3MKKyAgICAud2JzX3dlX2kgICAgKHdiZF9leHRfd2VfaSksICAvLyB3cml0ZQorICAgIC53YnNfZGF0X2kgICAod2JkX2V4dF9kYXRfaSksICAvLyBkYXRhIG91dHB1dAorICAgIC53YnNfc2VsX2kgICAod2JkX2V4dF9zZWxfaSksICAvLyBieXRlIGVuYWJsZQorCisgICAgLndic19kYXRfbyAgICh3YmRfZXh0X2RhdF9vKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JzX2Fja19vICAgKHdiZF9leHRfYWNrX28pLCAgLy8gYWNrbm93bGVnZW1lbnQKKworIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICAubGFfZGF0YV9pbiAgICAgICgnMSkgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorCisgICAgZW5kCitgZW5kaWYgICAgCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSW50ZWdyYXRlIHRoZSBTZXJpYWwgZmxhc2ggd2l0aCBxdXJkIHN1cHBvcnQgdG8KKy8vICB1c2VyIGNvcmUgdXNpbmcgdGhlIGdwaW8gcGFkcworLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2lyZSBmbGFzaF9jbGsgPSBpb19vdXRbMjRdOworICAgd2lyZSBmbGFzaF9jc2IgPSBpb19vdXRbMjhdOworICAgLy8gQ3JlYXRpbmcgUGFkIERlbGF5CisgICB3aXJlICMxIGlvX29lYl8yOSA9IGlvX29lYlsyOV07CisgICB3aXJlICMxIGlvX29lYl8zMCA9IGlvX29lYlszMF07CisgICB3aXJlICMxIGlvX29lYl8zMSA9IGlvX29lYlszMV07CisgICB3aXJlICMxIGlvX29lYl8zMiA9IGlvX29lYlszMl07CisgICB0cmkgICMxIGZsYXNoX2lvMCA9IChpb19vZWJfMjk9PSAxJ2IwKSA/IGlvX291dFsyOV0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzEgPSAoaW9fb2ViXzMwPT0gMSdiMCkgPyBpb19vdXRbMzBdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8yID0gKGlvX29lYl8zMT09IDEnYjApID8gaW9fb3V0WzMxXSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMyA9IChpb19vZWJfMzI9PSAxJ2IwKSA/IGlvX291dFszMl0gOiAxJ2J6OworCisgICBhc3NpZ24gaW9faW5bMjldID0gZmxhc2hfaW8wOworICAgYXNzaWduIGlvX2luWzMwXSA9IGZsYXNoX2lvMTsKKyAgIGFzc2lnbiBpb19pblszMV0gPSBmbGFzaF9pbzI7CisgICBhc3NpZ24gaW9faW5bMzJdID0gZmxhc2hfaW8zOworCisKKyAgIC8vIFF1YWQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoImZsYXNoMC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLAorICAgICAgICAgICAgICAgICAuVGltaW5nTW9kZWwoIlMyNUZMNTEyU0FHTUZJMDEwX0ZfMzBwRiIpKSAKKwkJIHVfc3BpX2ZsYXNoXzI1Nm1iICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKyAgIHdpcmUgc3BpcmFtX2NzYiA9IGlvX291dFsyNl07CisKKyAgIHNwaXJhbSAjKC5tZW1fZmlsZV9uYW1lKCJmbGFzaDEuaGV4IikpCisJdV9zZnJhbSAoCisgICAgICAgICAvLyBEYXRhIElucHV0cy9PdXRwdXRzCisgICAgICAgICAgIC5pbzAgICAgIChmbGFzaF9pbzApLAorICAgICAgICAgICAuaW8xICAgICAoZmxhc2hfaW8xKSwKKyAgICAgICAgICAgLy8gQ29udHJvbHMKKyAgICAgICAgICAgLmNsayAgICAoZmxhc2hfY2xrKSwKKyAgICAgICAgICAgLmNzYiAgICAoc3BpcmFtX2NzYiksCisgICAgICAgICAgIC5pbzIgICAgKGZsYXNoX2lvMiksCisgICAgICAgICAgIC5pbzMgICAgKGZsYXNoX2lvMykKKyAgICApOworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIlNUQVRVUzogV0IgVVNFUiBBQ0NFU1MgV1JJVEUgQWRkcmVzcyA6IDB4JXgsIERhdGEgOiAweCV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAkZGlzcGxheSgiU1RBVFVTOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRGF0YSA6IDB4JXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworaW5wdXQgWzMxOjBdIGNtcF9kYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIGlmKGRhdGEgIT09IGNtcF9kYXRhKSBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1IgOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRXhkOiAweCV4IFJ4ZDogMHgleCAiLGFkZHJlc3MsY21wX2RhdGEsZGF0YSk7CisgICAgIHVzZXJfc3BpX3RiLnRlc3RfZmFpbCA9IDE7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgZW5kCisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCisKK2BpZmRlZiBHTAorCit3aXJlICAgICAgICB3YmRfc3BpX3N0Yl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NwaV9hY2tfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zcGlfd2VfaSAgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfYWRyX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWRyX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zcGlfc2VsX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9zdGJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9hY2tfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV93ZV9pICA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2Fkcl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2FkZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zZHJhbV9zZWxfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3VhcnRfc3RiX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2NzOword2lyZSAgICAgICAgd2JkX3VhcnRfYWNrX28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193cjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2Fkcl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hZGRyOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3JkYXRhOword2lyZSAgICAgICAgd2JkX3VhcnRfc2VsX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2JlOworCitgZW5kaWYKKworLyoqCitgaWZkZWYgR0wKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgSU1FTSBhbWQgRE1FTSBNb25pdG9yaW5nIFRBU0sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBSSVNDX0NPUkUgIHVzZXJfdWFydF90Yi51X3RvcC51X2NvcmUudV9yaXNjdl90b3AKKworYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUud2JfY2xrKSBiZWdpbgorICAgIGlmKGBSSVNDX0NPUkUud2JkX2ltZW1fYWNrX2kpCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXgiLCBgUklTQ19DT1JFLndiZF9pbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2ltZW1fZGF0X2kpOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFdyaXRlIERhdGE6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9vKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmICFgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggUkVBRCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X2kpOworZW5kCisKK2BlbmRpZgorKiovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvLnVzZXJfdWFydC5jLnVufiBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0Ly51c2VyX3VhcnQuYy51bn4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgzNTMxMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0Ly51c2VyX3VhcnQuYy51bn4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfdWFydC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODdmMzVkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvTWFrZWZpbGUKQEAgLTAsMCArMSwxMTEgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQ19QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKK1BES19QQVRIPz0vZWYvdGVjaC9TVy9za3kxMzBBCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHVzZXJfdWFydAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpIHVzZXJfdWFydC5jIC1vIHVzZXJfdWFydC5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JJChZSUZJVkVfRklSTVdBUkVfUEFUSCkgICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2NydC5TIC1vIGNydC5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtbyB1c2VyX3VhcnQuZWxmIC1UICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2xpbmsubGQgdXNlcl91YXJ0Lm8gY3J0Lm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKwkke0dDQzY0X1BSRUZJWH0tb2JqZHVtcCAtRCB1c2VyX3VhcnQuZWxmID4gdXNlcl91YXJ0LmR1bXAKKwlybSBjcnQubyB1c2VyX3VhcnQubworaWZlcSAoJChTSU0pLFJUTCkKKyAgIGlmZXEgKCQoRFVNUCksT0ZGKQorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICAgZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1ER0wgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgLUkgJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoVVBSSl9HTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCSQ8IC1vICRAIAorZW5kaWYKKworJS52Y2Q6ICUudnZwCisJdnZwICQ8CisKKyUuZWxmOiAlLmMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcyAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucworCSR7R0NDNjRfUFJFRklYfS1nY2MgLUkgJChDQVJBVkVMX1BBVEgpIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1XbCwtQnN0YXRpYywtVCwkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzLC0tc3RyaXAtZGVidWcgLWZmcmVlc3RhbmRpbmcgLW5vc3RkbGliIC1vICRAICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zICQ8CisKKyUuaGV4OiAKKwllY2hvIEAiVGhpcyBpcyB1c2VyIGJvb3QgdGVzdCwgbm90aW5nIHRvIGNvbXBpbGUgdGhlIG1hbmdtZW50IGNvcmUgY29kZSIKKworJS5iaW46ICUuZWxmCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gYmluYXJ5ICQ8IC9kZXYvc3Rkb3V0IHwgdGFpbCAtYyArMTA0ODU3NyA+ICRACisKKyMgLS0tLSBDbGVhbiAtLS0tCisKK2NsZWFuOgorCXJtIC1mICouZWxmICouaGV4ICouYmluICoudnZwICoudmNkICoubG9nICouZHVtcAorCisuUEhPTlk6IGNsZWFuIGhleCBhbGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0L3J1bl9pdmVyaWxvZyBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0L3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNDYxZmQxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsNDIgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vICAuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnRfdGNtLlMgLW8gY3J0X3RjbS5vCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1vIHVzZXJfdWFydC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl91YXJ0Lm8gY3J0X3RjbS5vIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIC1sYyAtbGdjYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMgorCityaXNjdjY0LXVua25vd24tZWxmLW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfdWFydC5lbGYgPiB1c2VyX3VhcnQuZHVtcAorCitybSBjcnRfdGNtLm8gdXNlcl91YXJ0Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfdWFydF90Yi52IC1vIHVzZXJfdWFydF90Yi52dnAKKworCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1JICRQREtfUEFUSCAtREZVTkNUSU9OQUwgLURTSU0gLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyAtSSAkQ0FSQVZFTF9ST09UL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi9tb2RlbCAtSSAuLi9hZ2VudHMgdXNlcl91YXJ0X3RiLnYgLW8gdXNlcl91YXJ0X3RiLnZ2cAorCisjIEdMUyAKKyNpdmVyaWxvZyAtZzIwMDUtc3YgLUQgR0wgLUQgRlVOQ1RJT05BTCAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL2dsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQSAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3VhcnRfdGIudiAtbyB1c2VyX3VhcnRfdGIudnZwCisjCisKK3Z2cCB1c2VyX3VhcnRfdGIudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl91YXJ0X3RiLnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0LmMgYi92ZXJpbG9nL2R2L3VzZXJfdWFydC91c2VyX3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWUwMjA0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw0MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDA0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDEwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDFDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMjApCisKK2ludCBtYWluKCkKK3sKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAvLyBDaGVjayBVQVJUIFJYIGZpZm8gaGFzIGRhdGEsIGlmIGF2YWlsYWJsZSBsb29wIGJhY2sgdGhlIGRhdGEKKyAgICAgICBpZihyZWdfbXByal91YXJ0X3JlZzggIT0gMCkgeyAKKwkgICByZWdfbXByal91YXJ0X3JlZzUgPSByZWdfbXByal91YXJ0X3JlZzY7CisgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0X3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfdWFydC91c2VyX3VhcnRfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzdmMjU1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0X3RiLnYKQEAgLTAsMCArMSw0NTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTdGFuZGFsb25lIFVzZXIgdmFsaWRhdGlvbiBUZXN0IGJlbmNoICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCisvLy8vICAgRGlnaXRhbCBjb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMS4gVXNlciBSaXNjIGNvcmUgaXMgYm9vdGVkIHVzaW5nICBjb21waWxlZCBjb2RlIG9mICAgICAgICAvLy8vCisvLy8vICAgICAgdXNlcl9yaXNjX2Jvb3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMi4gVXNlciBSaXNjIGNvcmUgdXNlcyBTZXJpYWwgRmxhc2ggYW5kIFNEUkFNIHRvIGJvb3QgICAgICAvLy8vCisvLy8vICAgMy4gQWZ0ZXIgc3VjY2Vzc2Z1bCBib290LCBSaXNjIGNvcmUgd2lsbCBjaGVjayB0aGUgVUFSVCAgICAvLy8vCisvLy8vICAgICAgUlggRGF0YSwgSWYgaXQncyBhdmFpbGFibGUgdGhlbiBpdCBsb29wIGJhY2sgdGhlIHNhbWUgICAvLy8vCisvLy8vICAgICAgZGF0YSBpbiB1YXJ0IHR4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNC4gVGVzdCBiZW5jaCBzZW5kIHJhbmRvbSA0MCBjaGFyYWN0ZXIgdG93YXJkcyBVc2VyIHVhcnQgICAvLy8vCisvLy8vICAgICAgYW5kIGV4cGVjdCBzYW1lIGRhdGEgdG8gcmV0dXJuIGJhY2sgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJzMjVmbDI1NnMuc3YiCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgIm10NDhsYzhtOGEyLnYiCitgaW5jbHVkZSAidWFydF9hZ2VudC52IgorCisKK2BkZWZpbmUgQUREUl9TUEFDRV9VQVJUICAgIDMyJ2gzMDAxXzAwMDAKK2BkZWZpbmUgQUREUl9TUEFDRV9QSU5NVVggIDMyJ2gzMDAyXzAwMDAKKworCittb2R1bGUgdXNlcl91YXJ0X3RiOworCityZWcgICAgICAgICAgICBjbG9jayAgICAgICAgIDsKK3JlZyAgICAgICAgICAgIHdiX3JzdF9pICAgICAgOworcmVnICAgICAgICAgICAgcG93ZXIxLCBwb3dlcjI7CityZWcgICAgICAgICAgICBwb3dlcjMsIHBvd2VyNDsKKworcmVnICAgICAgICAgICAgd2JkX2V4dF9jeWNfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CityZWcgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK3JlZyBbMzE6MF0gICAgIHdiZF9leHRfYWRyX2k7ICAvLyBhZGRyZXNzCityZWcgICAgICAgICAgICB3YmRfZXh0X3dlX2k7ICAvLyB3cml0ZQorcmVnIFszMTowXSAgICAgd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CityZWcgWzM6MF0gICAgICB3YmRfZXh0X3NlbF9pOyAgLy8gYnl0ZSBlbmFibGUKKword2lyZSBbMzE6MF0gICAgd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKK3dpcmUgICAgICAgICAgIHdiZF9leHRfYWNrX287ICAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgd2JkX2V4dF9lcnJfbzsgIC8vIGVycm9yCisKKy8vIFVzZXIgSS9PCit3aXJlIFszNzowXSAgICBpb19vZWIgICAgICAgIDsKK3dpcmUgWzM3OjBdICAgIGlvX291dCAgICAgICAgOword2lyZSBbMzc6MF0gICAgaW9faW4gICAgICAgICA7CisKK3dpcmUgWzM3OjBdICAgIG1wcmpfaW8gICAgICAgOword2lyZSBbNzowXSAgICAgbXByal9pb18wICAgICA7CityZWcgICAgICAgICAgICB0ZXN0X2ZhaWwgICAgIDsKK3JlZyBbMzE6MF0gICAgIHJlYWRfZGF0YSAgICAgOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBVYXJ0IENvbmZpZ3VyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIFsxOjBdICAgICAgdWFydF9kYXRhX2JpdCAgICAgICAgOworcmVnCSAgICAgICB1YXJ0X3N0b3BfYml0cyAgICAgICA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CityZWcJICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5ICAgIDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKK3JlZwkgICAgICAgdWFydF9wYXJpdHlfZW4gICAgICAgOyAvLyBwYXJpdHkgZW5hYmxlCityZWcJICAgICAgIHVhcnRfZXZlbl9vZGRfcGFyaXR5IDsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKKworcmVnIFs3OjBdICAgICAgdWFydF9kYXRhICAgICAgICAgICAgOworcmVnIFsxNTowXSAgICAgdWFydF9kaXZpc29yICAgICAgICAgOwkvLyBkaXZpZGVkIGJ5IG4gKiAxNgorcmVnIFsxNTowXSAgICAgdWFydF90aW1lb3V0ICAgICAgICAgOy8vIHdhaXQgdGltZSBsaW1pdAorCityZWcgWzE1OjBdICAgICB1YXJ0X3J4X251ICAgICAgICAgICA7CityZWcgWzE1OjBdICAgICB1YXJ0X3R4X251ICAgICAgICAgICA7CityZWcgWzc6MF0gICAgICB1YXJ0X3dyaXRlX2RhdGEgWzA6MzldOworcmVnIAkgICAgICAgdWFydF9maWZvX2VuYWJsZSAgICAgOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorCitpbnRlZ2VyIGksajsKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDEsIHVzZXJfdWFydF90Yik7CisJICAgCSRkdW1wdmFycygwLCB1c2VyX3VhcnRfdGIudV90b3ApOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQl3Yl9yc3RfaSA8PSAxJ2IxOworCQkjMTAwOworCQl3Yl9yc3RfaSA8PSAxJ2IwOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKwllbmQKK2luaXRpYWwKK2JlZ2luCisgICB1YXJ0X2RhdGFfYml0ICAgICAgICAgICA9IDInYjExOworICAgdWFydF9zdG9wX2JpdHMgICAgICAgICAgPSAwOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworICAgdWFydF9zdGlja19wYXJpdHkgICAgICAgPSAwOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorICAgdWFydF9wYXJpdHlfZW4gICAgICAgICAgPSAwOyAvLyBwYXJpdHkgZW5hYmxlCisgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSAgICA9IDE7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisgICB1YXJ0X2Rpdmlzb3IgICAgICAgICAgICA9IDE1Oy8vIGRpdmlkZWQgYnkgbiAqIDE2CisgICB1YXJ0X3RpbWVvdXQgICAgICAgICAgICA9IDUwMDsvLyB3YWl0IHRpbWUgbGltaXQKKyAgIHVhcnRfZmlmb19lbmFibGUgICAgICAgID0gMDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKworICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBUZXN0IFN0YXJ0ZWQiKTsKKyAgIAorICAgLy8gUmVtb3ZlIFdiIFJlc2V0CisgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxKTsKKworICAgLy8gRW5hYmxlIFVBUlQgTXVsdGkgRnVuY3Rpb25hbCBQb3J0cworICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX1BJTk1VWCsnaDAwMzgsJ2gxMDApOworICAgCisgICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CisgICAjMTsKKyAgIC8vIFJlbW92ZSBhbGwgdGhlIHJlc2V0CisgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxRik7CisKKyAgIHJlcGVhdCAoMjAwMDApIEAocG9zZWRnZSBjbG9jayk7ICAvLyB3YWl0IGZvciBQcm9jZXNzb3IgR2V0IFJlYWR5CisgICB0Yl91YXJ0LnVhcnRfaW5pdDsKKyAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9VQVJUKzgnaDAsezMnaDAsMidiMDAsMSdiMSwxJ2IxLDEnYjF9KTsgIAorICAgCisgICB0Yl91YXJ0LmNvbnRyb2xfc2V0dXAgKHVhcnRfZGF0YV9iaXQsIHVhcnRfc3RvcF9iaXRzLCB1YXJ0X3Bhcml0eV9lbiwgdWFydF9ldmVuX29kZF9wYXJpdHksIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgdWFydF9zdGlja19wYXJpdHksIHVhcnRfdGltZW91dCwgdWFydF9kaXZpc29yKTsKKyAgIAorICAgZm9yIChpPTA7IGk8NDA7IGk9aSsxKQorICAgCXVhcnRfd3JpdGVfZGF0YVtpXSA9ICRyYW5kb207CisgICAKKyAgIAorICAgCisgICBmb3JrCisgICAgICBiZWdpbgorICAgICAgICAgZm9yIChpPTA7IGk8NDA7IGk9aSsxKQorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgJGRpc3BsYXkgKCJcbi4uLiBVQVJUIEFnZW50IFdyaXRpbmcgY2hhciAleCAuLi4iLCB1YXJ0X3dyaXRlX2RhdGFbaV0pOworICAgICAgICAgICAgdXNlcl91YXJ0X3RiLnRiX3VhcnQud3JpdGVfY2hhciAodWFydF93cml0ZV9kYXRhW2ldKTsKKyAgICAgICAgIGVuZAorICAgICAgZW5kCisgICAKKyAgICAgIGJlZ2luCisgICAgICAgICBmb3IgKGo9MDsgajw0MDsgaj1qKzEpCisgICAgICAgICBiZWdpbgorICAgICAgICAgICB1c2VyX3VhcnRfdGIudGJfdWFydC5yZWFkX2NoYXJfY2hrKHVhcnRfd3JpdGVfZGF0YVtqXSk7CisgICAgICAgICBlbmQKKyAgICAgIGVuZAorICAgICAgam9pbgorICAgCisgICAgICAjMTAwCisgICAgICB0Yl91YXJ0LnJlcG9ydF9zdGF0dXModWFydF9yeF9udSwgdWFydF90eF9udSk7CisgICAKKyAgICAgIHRlc3RfZmFpbCA9IDA7CisKKyAgICAgIC8vIENoZWNrIAorICAgICAgLy8gaWYgYWxsIHRoZSA0MCBieXRlIHRyYW5zbWl0dGVkCisgICAgICAvLyBpZiBhbGwgdGhlIDQwIGJ5dGUgcmVjZWl2ZWQKKyAgICAgIC8vIGlmIG5vIGVycm9yIAorICAgICAgaWYodWFydF90eF9udSAhPSA0MCkgdGVzdF9mYWlsID0gMTsKKyAgICAgIGlmKHVhcnRfcnhfbnUgIT0gNDApIHRlc3RfZmFpbCA9IDE7CisgICAgICBpZih0Yl91YXJ0LmVycl9jbnQgIT0gMCkgdGVzdF9mYWlsID0gMTsKKworICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoR0wpIFBhc3NlZCIpOworICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBQYXNzZWQiKTsKKyAgICAgICAgIGBlbmRpZgorICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZWxzZQorICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZW5kaWYKKyAgICAgICBlbmQKKyAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICMxMDAKKyAgICAgICRmaW5pc2g7CitlbmQKKworCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworYGlmbmRlZiBHTCAvLyBEcml2ZSBQb3dlciBmb3IgSG9sZCBGaXggQnVmCisgICAgLy8gQWxsIHN0YW5kYXJkIGNlbGwgbmVlZCBwb3dlciBob29rLXVwIGZvciBmdW5jdGlvbmFsaXR5IHdvcmsKKyAgICBpbml0aWFsIGJlZ2luCisgICAgZW5kCitgZW5kaWYgICAgCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbnRlZ3JhdGUgdGhlIFNlcmlhbCBmbGFzaCB3aXRoIHF1cmQgc3VwcG9ydCB0bworLy8gIHVzZXIgY29yZSB1c2luZyB0aGUgZ3BpbyBwYWRzCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aXJlIGZsYXNoX2NsayA9IGlvX291dFsyNF07CisgICB3aXJlIGZsYXNoX2NzYiA9IGlvX291dFsyOF07CisgICAvLyBDcmVhdGluZyBQYWQgRGVsYXkKKyAgIHdpcmUgIzEgaW9fb2ViXzI5ID0gaW9fb2ViWzI5XTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMwID0gaW9fb2ViWzMwXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMxID0gaW9fb2ViWzMxXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMyID0gaW9fb2ViWzMyXTsKKyAgIHRyaSAgIzEgZmxhc2hfaW8wID0gKGlvX29lYl8yOT09IDEnYjApID8gaW9fb3V0WzI5XSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMSA9IChpb19vZWJfMzA9PSAxJ2IwKSA/IGlvX291dFszMF0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzIgPSAoaW9fb2ViXzMxPT0gMSdiMCkgPyBpb19vdXRbMzFdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8zID0gKGlvX29lYl8zMj09IDEnYjApID8gaW9fb3V0WzMyXSA6IDEnYno7CisKKyAgIGFzc2lnbiBpb19pblsyOV0gPSBmbGFzaF9pbzA7CisgICBhc3NpZ24gaW9faW5bMzBdID0gZmxhc2hfaW8xOworICAgYXNzaWduIGlvX2luWzMxXSA9IGZsYXNoX2lvMjsKKyAgIGFzc2lnbiBpb19pblszMl0gPSBmbGFzaF9pbzM7CisKKworICAgLy8gUXVhcmQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoInVzZXJfdWFydC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLCAKKyAgICAgICAgICAgICAgICAgLlRpbWluZ01vZGVsKCJTMjVGTDUxMlNBR01GSTAxMF9GXzMwcEYiKSkgCisJCSB1X3NwaV9mbGFzaF8yNTZtYgorICAgICAgICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBVQVJUIEFnZW50IGludGVncmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSB1YXJ0X3R4ZCx1YXJ0X3J4ZDsKKworYXNzaWduIHVhcnRfdHhkICAgPSBpb19vdXRbMl07Cithc3NpZ24gaW9faW5bMV0gID0gdWFydF9yeGQgOworIAordWFydF9hZ2VudCB0Yl91YXJ0KAorCS5tY2xrICAgICAgICAgICAgICAgIChjbG9jayAgICAgICAgICAgICAgKSwKKwkudHhkICAgICAgICAgICAgICAgICAodWFydF9yeGQgICAgICAgICAgICksCisJLnJ4ZCAgICAgICAgICAgICAgICAgKHVhcnRfdHhkICAgICAgICAgICApCisJKTsKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBXUklURSBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCitgaWZkZWYgR0wKKword2lyZSAgICAgICAgd2JkX3NwaV9zdGJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zcGlfYWNrX28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWNrX287Cit3aXJlICAgICAgICB3YmRfc3BpX3dlX2kgICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2Fkcl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fkcl9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc3BpX3NlbF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfc2RyYW1fc3RiX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc2RyYW1fYWNrX28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWNrX287Cit3aXJlICAgICAgICB3YmRfc2RyYW1fd2VfaSAgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9hZHJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hZGRyX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc2RyYW1fc2VsX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF91YXJ0X3N0Yl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hY2s7Cit3aXJlICAgICAgICB3YmRfdWFydF93ZV9pICAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd3I7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9hZHJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193ZGF0YTsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19yZGF0YTsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3NlbF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTJjYWVmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL01ha2VmaWxlCkBAIC0wLDAgKzEsOTIgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHVzZXJfdWFydF9tYXN0ZXIKKworYWxsOiAgJHtQQVRURVJOOj0udmNkfQorCisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudgoraWZlcSAoJChTSU0pLFJUTCkKKyAgIGlmZXEgKCQoRFVNUCksT0ZGKQorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICAgZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1ER0wgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgLUkgJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoVVBSSl9HTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCSQ8IC1vICRAIAorZW5kaWYKKworJS52Y2Q6ICUudnZwCisJdnZwICQ8CisKKworCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLnZ2cCAqLnZjZCAqLmxvZyAKKworLlBIT05ZOiBjbGVhbiBhbGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9ydW5faXZlcmlsb2cgYi92ZXJpbG9nL2R2L3VzZXJfdWFydF9tYXN0ZXIvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0NjFmZDEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdWFydF9tYXN0ZXIvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsNDIgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vICAuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnRfdGNtLlMgLW8gY3J0X3RjbS5vCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1vIHVzZXJfdWFydC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl91YXJ0Lm8gY3J0X3RjbS5vIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIC1sYyAtbGdjYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMgorCityaXNjdjY0LXVua25vd24tZWxmLW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfdWFydC5lbGYgPiB1c2VyX3VhcnQuZHVtcAorCitybSBjcnRfdGNtLm8gdXNlcl91YXJ0Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfdWFydF90Yi52IC1vIHVzZXJfdWFydF90Yi52dnAKKworCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1JICRQREtfUEFUSCAtREZVTkNUSU9OQUwgLURTSU0gLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyAtSSAkQ0FSQVZFTF9ST09UL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi9tb2RlbCAtSSAuLi9hZ2VudHMgdXNlcl91YXJ0X3RiLnYgLW8gdXNlcl91YXJ0X3RiLnZ2cAorCisjIEdMUyAKKyNpdmVyaWxvZyAtZzIwMDUtc3YgLUQgR0wgLUQgRlVOQ1RJT05BTCAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL2dsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQSAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3VhcnRfdGIudiAtbyB1c2VyX3VhcnRfdGIudnZwCisjCisKK3Z2cCB1c2VyX3VhcnRfdGIudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl91YXJ0X3RiLnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL3VzZXJfdWFydC5jIGIvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL3VzZXJfdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTAyMDQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdWFydF9tYXN0ZXIvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw0MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDA0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDEwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDFDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMjApCisKK2ludCBtYWluKCkKK3sKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAvLyBDaGVjayBVQVJUIFJYIGZpZm8gaGFzIGRhdGEsIGlmIGF2YWlsYWJsZSBsb29wIGJhY2sgdGhlIGRhdGEKKyAgICAgICBpZihyZWdfbXByal91YXJ0X3JlZzggIT0gMCkgeyAKKwkgICByZWdfbXByal91YXJ0X3JlZzUgPSByZWdfbXByal91YXJ0X3JlZzY7CisgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL3VzZXJfdWFydF9tYXN0ZXJfdGIudiBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci91c2VyX3VhcnRfbWFzdGVyX3RiLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxZmY1OQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci91c2VyX3VhcnRfbWFzdGVyX3RiLnYKQEAgLTAsMCArMSwzMDMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTdGFuZGFsb25lIFVzZXIgdmFsaWRhdGlvbiBUZXN0IGJlbmNoICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCisvLy8vICAgRGlnaXRhbCBjb3JlIHVzaW5nIHVhcnQgbWFzdGVyIGkvZi4gICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAidWFydF9hZ2VudC52IgorCisKK2BkZWZpbmUgQUREUl9TUEFDRV9VQVJUICAgIDMyJ2gzMDAxXzAwMDAKK2BkZWZpbmUgQUREUl9TUEFDRV9QSU5NVVggIDMyJ2gzMDAyXzAwMDAKKworCittb2R1bGUgdXNlcl91YXJ0X21hc3Rlcl90YjsKKworcmVnICAgICAgICAgICAgY2xvY2sgICAgICAgICA7CityZWcgICAgICAgICAgICB3Yl9yc3RfaSAgICAgIDsKK3JlZyAgICAgICAgICAgIHBvd2VyMSwgcG93ZXIyOworcmVnICAgICAgICAgICAgcG93ZXIzLCBwb3dlcjQ7CisKK3JlZyAgICAgICAgICAgIHdiZF9leHRfY3ljX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorcmVnICAgICAgICAgICAgd2JkX2V4dF9zdGJfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CityZWcgWzMxOjBdICAgICB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworcmVnICAgICAgICAgICAgd2JkX2V4dF93ZV9pOyAgLy8gd3JpdGUKK3JlZyBbMzE6MF0gICAgIHdiZF9leHRfZGF0X2k7ICAvLyBkYXRhIG91dHB1dAorcmVnIFszOjBdICAgICAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKK3dpcmUgWzMxOjBdICAgIHdiZF9leHRfZGF0X287ICAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICB3YmRfZXh0X2Fja19vOyAgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCisvLyBVc2VyIEkvTword2lyZSBbMzc6MF0gICAgaW9fb2ViICAgICAgICA7Cit3aXJlIFszNzowXSAgICBpb19vdXQgICAgICAgIDsKK3dpcmUgWzM3OjBdICAgIGlvX2luICAgICAgICAgOworCit3aXJlIFszNzowXSAgICBtcHJqX2lvICAgICAgIDsKK3dpcmUgWzc6MF0gICAgIG1wcmpfaW9fMCAgICAgOworcmVnICAgICAgICAgICAgdGVzdF9mYWlsICAgICA7CityZWcgWzMxOjBdICAgICByZWFkX2RhdGEgICAgIDsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVWFydCBDb25maWd1cmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMTowXSAgICAgIHVhcnRfZGF0YV9iaXQgICAgICAgIDsKK3JlZwkgICAgICAgdWFydF9zdG9wX2JpdHMgICAgICAgOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworcmVnCSAgICAgICB1YXJ0X3N0aWNrX3Bhcml0eSAgICA7IC8vIDE6IGZvcmNlIGV2ZW4gcGFyaXR5CityZWcJICAgICAgIHVhcnRfcGFyaXR5X2VuICAgICAgIDsgLy8gcGFyaXR5IGVuYWJsZQorcmVnCSAgICAgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSA7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisKK3JlZyBbNzowXSAgICAgIHVhcnRfZGF0YSAgICAgICAgICAgIDsKK3JlZyBbMTU6MF0gICAgIHVhcnRfZGl2aXNvciAgICAgICAgIDsJLy8gZGl2aWRlZCBieSBuICogMTYKK3JlZyBbMTU6MF0gICAgIHVhcnRfdGltZW91dCAgICAgICAgIDsvLyB3YWl0IHRpbWUgbGltaXQKKworcmVnIFsxNTowXSAgICAgdWFydF9yeF9udSAgICAgICAgICAgOworcmVnIFsxNTowXSAgICAgdWFydF90eF9udSAgICAgICAgICAgOworcmVnIFs3OjBdICAgICAgdWFydF93cml0ZV9kYXRhIFswOjM5XTsKK3JlZyAJICAgICAgIHVhcnRfZmlmb19lbmFibGUgICAgIDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKworcmVnICBbMTI3OjBdICAgbGFfZGF0YV9pbjsKK3JlZyAgICAgICBmbGFnOworCisKK2ludGVnZXIgaSxqOworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKwkJbGFfZGF0YV9pbiA9IDE7CisJZW5kCisKKwlgaWZkZWYgV0ZEVU1QCisJICAgaW5pdGlhbCBiZWdpbgorCSAgIAkkZHVtcGZpbGUoInJpc2NfYm9vdC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfdWFydF9tYXN0ZXJfdGIpOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKK2luaXRpYWwKK2JlZ2luCisgICB3Yl9yc3RfaSA8PSAxJ2IxOworICAgdWFydF9kYXRhX2JpdCAgICAgICAgICAgPSAyJ2IxMTsKKyAgIHVhcnRfc3RvcF9iaXRzICAgICAgICAgID0gMTsgLy8gMDogMSBzdG9wIGJpdDsgMTogMiBzdG9wIGJpdDsKKyAgIHVhcnRfc3RpY2tfcGFyaXR5ICAgICAgID0gMDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKKyAgIHVhcnRfcGFyaXR5X2VuICAgICAgICAgID0gMDsgLy8gcGFyaXR5IGVuYWJsZQorICAgdWFydF9ldmVuX29kZF9wYXJpdHkgICAgPSAxOyAvLyAwOiBvZGQgcGFyaXR5OyAxOiBldmVuIHBhcml0eQorICAgdWFydF9kaXZpc29yICAgICAgICAgICAgPSAxNTsvLyBkaXZpZGVkIGJ5IG4gKiAxNgorICAgdWFydF90aW1lb3V0ICAgICAgICAgICAgPSA2MDA7Ly8gd2FpdCB0aW1lIGxpbWl0CisgICB1YXJ0X2ZpZm9fZW5hYmxlICAgICAgICA9IDA7CS8vIGZpZm8gbW9kZSBkaXNhYmxlCisKKyAgIC8vIFVQREFURSB0aGUgUlRMIFVBUlQgTUFTVEVSCisgICBsYV9kYXRhX2luWzFdID0gMTsgLy8gIEVuYWJsZSBUcmFuc21pdCBQYXRoCisgICBsYV9kYXRhX2luWzJdID0gMTsgLy8gIEVuYWJsZSBSZWNlaXZlZCBQYXRoCisgICBsYV9kYXRhX2luWzNdID0gMTsgLy8gIEVuYWJsZSBSZWNlaXZlZCBQYXRoCisgICBsYV9kYXRhX2luWzE1OjRdID0gKCh1YXJ0X2Rpdmlzb3IrMSkvMTYpLTE7IC8vICBEaXZpc29yIHZhbHVlCisgICBsYV9kYXRhX2luWzE3OjE2XSA9IDInYjAwOyAvLyAgcHJpb3JpdHkgbW9kZSwgMCAtPiBub3AsIDEgLT4gRXZlbiwgMiAtPiBPZGQKKworICAgIzEwMDsKKyAgIHdiX3JzdF9pIDw9IDEnYjA7CSAgICAJLy8gUmVsZWFzZSByZXNldAorCisgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVhcnQgbWFzdGVyIFRlc3QgU3RhcnRlZCIpOworCisgICB0Yl9tYXN0ZXJfdWFydC5kZWJ1Z19tb2RlID0gMDsgLy8gZGlzYWJsZSBkZWJ1ZyBkaXNwbGF5CisgICB0Yl9tYXN0ZXJfdWFydC51YXJ0X2luaXQ7CisgICB0Yl9tYXN0ZXJfdWFydC5jb250cm9sX3NldHVwICh1YXJ0X2RhdGFfYml0LCB1YXJ0X3N0b3BfYml0cywgdWFydF9wYXJpdHlfZW4sIHVhcnRfZXZlbl9vZGRfcGFyaXR5LCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5LCB1YXJ0X3RpbWVvdXQsIHVhcnRfZGl2aXNvcik7CisKKyAgIC8vJHdyaXRlICgiXG4oJXQpUmVzcG9uc2U6XG4iLCR0aW1lKTsKKyAgIGZsYWcgPSAwOworICAgd2hpbGUoZmxhZyA9PSAwKQorICAgYmVnaW4KKyAgICAgICAgdGJfbWFzdGVyX3VhcnQucmVhZF9jaGFyKHJlYWRfZGF0YSxmbGFnKTsKKyAgICAgICAgJHdyaXRlICgiJWMiLHJlYWRfZGF0YSk7CisgICBlbmQKKworCisKKyAgIC8vIFJlbW92ZSBXYiBSZXNldAorICAgdWFydG1fcmVnX3dyaXRlKCdoMzA4MF8wMDAwLCdoMSk7CisKKyAgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKKyAgICMxOworCisgICAkZGlzcGxheSgiTW9uaXRvcjogV3JpdGluZyAgZXhwZWN0ZWQgdmFsdWUiKTsKKyAgIAorICAgdGVzdF9mYWlsID0gMDsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNTgsMzInaDExMjIzMzQ0KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjAsMzInaDMzNDQ1NTY2KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjQsMzInaDQ0NTU2Njc3KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNkMsMzInaDY2Nzc4ODk5KTsKKworICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LDMyJ2gxMTIyMzM0NCk7CisgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2MCwzMidoMzM0NDU1NjYpOworICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDY0LDMyJ2g0NDU1NjY3Nyk7CisgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2QywzMidoNjY3Nzg4OTkpOworICAgCisgICAKKyAgIAorICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgTWFzdGVyIChHTCkgUGFzc2VkIik7CisgICAgICBgZWxzZQorICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBNYXN0ZXIgKFJUTCkgUGFzc2VkIik7CisgICAgICBgZW5kaWYKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBNYXN0ZXIgKEdMKSBGYWlsZWQiKTsKKyAgICAgICBgZWxzZQorICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVhcnQgTWFzdGVyIChSVEwpIEZhaWxlZCIpOworICAgICAgIGBlbmRpZgorICAgIGVuZAorICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgIzEwMAorICAgJGZpbmlzaDsKK2VuZAorCisKK3dpcmUgVVNFUl9WREQxVjggPSAxJ2IxOword2lyZSBWU1MgPSAxJ2IwOworCisKK3VzZXJfcHJvamVjdF93cmFwcGVyIHVfdG9wKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgLnZjY2QxKFVTRVJfVkREMVY4KSwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAudnNzZDEoVlNTKSwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorICAgIC53Yl9jbGtfaSAgICAgICAgKGNsb2NrKSwgIC8vIFN5c3RlbSBjbG9jaworICAgIC51c2VyX2Nsb2NrMiAgICAgKDEnYjEpLCAgLy8gUmVhbC10aW1lIGNsb2NrCisgICAgLndiX3JzdF9pICAgICAgICAod2JfcnN0X2kpLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKworICAgIC53YnNfY3ljX2kgICAod2JkX2V4dF9jeWNfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfc3RiX2kgICAod2JkX2V4dF9zdGJfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfYWRyX2kgICAod2JkX2V4dF9hZHJfaSksICAvLyBhZGRyZXNzCisgICAgLndic193ZV9pICAgICh3YmRfZXh0X3dlX2kpLCAgLy8gd3JpdGUKKyAgICAud2JzX2RhdF9pICAgKHdiZF9leHRfZGF0X2kpLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAud2JzX3NlbF9pICAgKHdiZF9leHRfc2VsX2kpLCAgLy8gYnl0ZSBlbmFibGUKKworICAgIC53YnNfZGF0X28gICAod2JkX2V4dF9kYXRfbyksICAvLyBkYXRhIGlucHV0CisgICAgLndic19hY2tfbyAgICh3YmRfZXh0X2Fja19vKSwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAKKyAgICAvLyBMb2dpYyBBbmFseXplciBTaWduYWxzCisgICAgLmxhX2RhdGFfaW4gICAgICAobGFfZGF0YV9pbikgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorICAgIGVuZAorYGVuZGlmICAgIAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgVUFSVCBBZ2VudCBpbnRlZ3JhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgdWFydF90eGQsdWFydF9yeGQ7CisKK2Fzc2lnbiB1YXJ0X3R4ZCAgID0gaW9fb3V0WzM1XTsKK2Fzc2lnbiBpb19pblszNF0gID0gdWFydF9yeGQgOworIAordWFydF9hZ2VudCB0Yl9tYXN0ZXJfdWFydCgKKwkubWNsayAgICAgICAgICAgICAgICAoY2xvY2sgICAgICAgICAgICAgICksCisJLnR4ZCAgICAgICAgICAgICAgICAgKHVhcnRfcnhkICAgICAgICAgICApLAorCS5yeGQgICAgICAgICAgICAgICAgICh1YXJ0X3R4ZCAgICAgICAgICAgKQorCSk7CisKKworCitgaW5jbHVkZSAidWFydF9tYXN0ZXJfdGFza3Muc3YiCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi92cGkvc3lzdGVtL3N5c3RlbS5jIGIvdmVyaWxvZy9kdi92cGkvc3lzdGVtL3N5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDFhMDkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3ZwaS9zeXN0ZW0vc3lzdGVtLmMKQEAgLTAsMCArMSw1MiBAQAorIyBpbmNsdWRlICA8dnBpX3VzZXIuaD4KKworc3RhdGljIGludCBzeXN0ZW1fY29tcGlsZXRmKGNoYXIqdXNlcl9kYXRhKQoreworICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3lzdGVtX2NhbGx0ZihjaGFyKm5hbWUpCit7CisgICAgICB2cGlIYW5kbGUgY2FsbGggPSB2cGlfaGFuZGxlKHZwaVN5c1RmQ2FsbCwgMCk7CisgICAgICB2cGlIYW5kbGUgYXJndiAgPSB2cGlfaXRlcmF0ZSh2cGlBcmd1bWVudCwgY2FsbGgpOworICAgICAgdnBpSGFuZGxlIGFyZ19oYW5kbGU7CisgICAgICBzX3ZwaV92YWx1ZSB2YWx1ZV9zOworCisKKyAgICAgIAkvKiBDaGVjayB0aGF0IHRoZXJlIGFyZSBhcmd1bWVudHMuICovCisgICAgICBpZiAoYXJndiA9PSAwKSB7CisJICAgIHZwaV9wcmludGYoIkVSUk9SOiAlczolZDogIiwgdnBpX2dldF9zdHIodnBpRmlsZSwgY2FsbGgpLAorCSAgICAgICAgICAgICAgIChpbnQpdnBpX2dldCh2cGlMaW5lTm8sIGNhbGxoKSk7CisJICAgIHZwaV9wcmludGYoIiVzIHJlcXVpcmVzIHR3byBhcmd1bWVudHMuXG4iLCBuYW1lKTsKKwkgICAgdnBpcF9zZXRfcmV0dXJuX3ZhbHVlKDEpOworCSAgICB2cGlfY29udHJvbCh2cGlGaW5pc2gsIDEpOworCSAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBzdHJpbmcuICovCisgICAgICBhcmdfaGFuZGxlID0gdnBpX3NjYW4oYXJndik7CisgICAgICB2cGlfZnJlZV9vYmplY3QoYXJndik7IC8qIG5vdCBjYWxsaW5nIHNjYW4gdW50aWwgcmV0dXJucyBudWxsICovCisgICAgICB2YWx1ZV9zLmZvcm1hdCA9IHZwaVN0cmluZ1ZhbDsgLyogcmVhZCBhcyBhIHN0cmluZyAqLworICAgICAgdnBpX2dldF92YWx1ZShhcmdfaGFuZGxlLCAgJnZhbHVlX3MpOworICAgICAgdnBpX3ByaW50ZigiU3lzdGVtIENtZDogJXNcbiIsdmFsdWVfcy52YWx1ZS5zdHIpOworICAgICAgc3lzdGVtKHZhbHVlX3MudmFsdWUuc3RyKTsKKyAgICAgIHJldHVybiAwOworfQorCit2b2lkIHN5c3RlbV9yZWdpc3RlcigpCit7CisgICAgICBzX3ZwaV9zeXN0Zl9kYXRhIHRmX2RhdGE7CisKKyAgICAgIHRmX2RhdGEudHlwZSAgICAgID0gdnBpU3lzVGFzazsKKyAgICAgIHRmX2RhdGEudGZuYW1lICAgID0gIiRzeXN0ZW0iOworICAgICAgdGZfZGF0YS5jYWxsdGYgICAgPSBzeXN0ZW1fY2FsbHRmOworICAgICAgdGZfZGF0YS5jb21waWxldGYgPSBzeXN0ZW1fY29tcGlsZXRmOworICAgICAgdGZfZGF0YS5zaXpldGYgICAgPSAwOworICAgICAgdGZfZGF0YS51c2VyX2RhdGEgPSAiJHN5c3RlbSI7CisgICAgICB2cGlfcmVnaXN0ZXJfc3lzdGYoJnRmX2RhdGEpOworfQorCit2b2lkICgqdmxvZ19zdGFydHVwX3JvdXRpbmVzW10pKCkgPSB7CisgICAgc3lzdGVtX3JlZ2lzdGVyLAorICAgIDAKK307CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3diX3BvcnQvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3diX3BvcnQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5YmU2YQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvd2JfcG9ydC9NYWtlZmlsZQpAQCAtMCwwICsxLDExNiBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCisjIyBQREsgCitQREtfUEFUSCA9ICQoUERLX1JPT1QpL3NreTEzMEEKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi8KK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorIyMgUklTQ1YgR0NDIAorR0NDX1BBVEg/PS9lZi9hcHBzL2JpbgorR0NDX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU1fREVGSU5FUyA9IC1ERlVOQ1RJT05BTCAtRFNJTQorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB3Yl9wb3J0CisKK2FsbDogICR7UEFUVEVSTjo9LnZjZH0KKworaGV4OiAgJHtQQVRURVJOOj0uaGV4fQorCit2dnA6ICAke1BBVFRFUk46PS52dnB9CisKKyUudnZwOiAlX3RiLnYgJS5oZXgKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgJChTSU1fREVGSU5FUykgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgICBlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgJChTSU1fREVGSU5FUykgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAkKFNJTV9ERUZJTkVTKSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSQoVVBSSl9HTF9QQVRIKSAgLUkkKFVQUkpfUlRMX1BBVEgpICAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJJDwgLW8gJEAgCitlbmRpZgorCislLnZjZDogJS52dnAKKwl2dnAgJDwKKworJS5lbGY6ICUuYyAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zIGNoZWNrLWVudgorCSR7R0NDNjRfUFJFRklYfS1nY2MgLUkgJChDQVJBVkVMX1BBVEgpIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1XbCwtQnN0YXRpYywtVCwkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzLC0tc3RyaXAtZGVidWcgLWZmcmVlc3RhbmRpbmcgLW5vc3RkbGliIC1vICRAICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zICQ8CisKKyUuaGV4OiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIHZlcmlsb2cgJDwgJEAgCisJIyB0byBmaXggZmxhc2ggYmFzZSBhZGRyZXNzCisJc2VkIC1pICdzL0AxMDAwMDAwMC9AMDAwMDAwMDAvZycgJEAKKworJS5iaW46ICUuZWxmCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gYmluYXJ5ICQ8IC9kZXYvc3Rkb3V0IHwgdGFpbCAtYyArMTA0ODU3NyA+ICRACisKK2NoZWNrLWVudjoKK2lmbmRlZiBQREtfUk9PVAorCSQoZXJyb3IgUERLX1JPT1QgaXMgdW5kZWZpbmVkLCBwbGVhc2UgZXhwb3J0IGl0IGJlZm9yZSBydW5uaW5nIG1ha2UpCitlbmRpZgoraWZlcSAoLCQod2lsZGNhcmQgJChQREtfUk9PVCkvc2t5MTMwQSkpCisJJChlcnJvciAkKFBES19ST09UKS9za3kxMzBBIG5vdCBmb3VuZCwgcGxlYXNlIGluc3RhbGwgcGRrIGJlZm9yZSBydW5uaW5nIG1ha2UpCitlbmRpZgorI2lmZXEgKCwkKHdpbGRjYXJkICQoR0NDNjRfUFJFRklYKS1nY2MgKSkKKyMJJChlcnJvciAkKEdDQzY0X1BSRUZJWCktZ2NjIGlzIG5vdCBmb3VuZCwgcGxlYXNlIGV4cG9ydCBHQ0NfUEFUSCBhbmQgR0NDX1BSRUZJWCBiZWZvcmUgcnVubmluZyBtYWtlKQorI2VuZGlmCisjIGNoZWNrIGZvciBlZmFibGVzcyBzdHlsZSBpbnN0YWxsYXRpb24KK2lmZXEgKCwkKHdpbGRjYXJkICQoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvKi92ZXJpbG9nKSkKK1NJTV9ERUZJTkVTIDo9ICR7U0lNX0RFRklORVN9IC1ERUZfU1RZTEUKK2VuZGlmCisKKyMgLS0tLSBDbGVhbiAtLS0tCisKK2NsZWFuOgorCXJtIC1mICouZWxmICouaGV4ICouYmluICoudnZwICoudmNkICoubG9nCisKKy5QSE9OWTogY2xlYW4gaGV4IGFsbApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi93Yl9wb3J0L3J1bl92ZXJpbG9nIGIvdmVyaWxvZy9kdi93Yl9wb3J0L3J1bl92ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmVkM2MKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3diX3BvcnQvcnVuX3Zlcmlsb2cKQEAgLTAsMCArMSwyMCBAQAorIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKyMgLy8gCisjIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAvLworIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAvLworIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKyMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2l2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLURHTCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL3Bkay9za3kxMzBBIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nL3J0bCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nIC1JIC4uLyAtSS4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JLi4vLi4vLi4vdmVyaWxvZy9nbCAgLUkgLi4vLi4vLi4vdmVyaWxvZyB3Yl9wb3J0X3RiLnYgLW8gd2JfcG9ydC52dnAKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLURHTCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL3Bkay9za3kxMzBBIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nL3J0bCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nIC1JIC4uLyAtSS4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JLi4vLi4vLi4vdmVyaWxvZy9nbCAgLUkgLi4vLi4vLi4vdmVyaWxvZyB3Yl9wb3J0X3RiLnYgLW8gd2JfcG9ydC52dnAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvd2JfcG9ydC93Yl9wb3J0LmMgYi92ZXJpbG9nL2R2L3diX3BvcnQvd2JfcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NDljNjcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3diX3BvcnQvd2JfcG9ydC5jCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKi8KKworLy8gVGhpcyBpbmNsdWRlIGlzIHJlbGF0aXZlIHRvICRDQVJBVkVMX1BBVEggKHNlZSBNYWtlZmlsZSkKKyNpbmNsdWRlICJ2ZXJpbG9nL2R2L2NhcmF2ZWwvZGVmcy5oIgorI2luY2x1ZGUgInZlcmlsb2cvZHYvY2FyYXZlbC9zdHViLmMiCisKKy8vIFVzZXIgUHJvamVjdCBTbGF2ZXMgKDB4MzAwMF8wMDAwKQorI2RlZmluZSByZWdfbXByal9zbGF2ZSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwMCkKKworI2RlZmluZSByZWdfbXByal93Ymhvc3RfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDgwMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMDApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDA0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAwOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMEMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzQgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDEwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc1ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAxNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNiAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMTgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzcgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDFDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc4ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAyMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnOSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMjQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDI4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAyQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMzApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEzICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDM0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAzOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwM0MpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDQwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA0NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNDgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE5ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDRDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA1MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNTQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDU4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA1QykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNjApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDY0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA2OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjcgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNkMpCisKKworLyoKKwlXaXNoYm9uZSBUZXN0OgorCQktIENvbmZpZ3VyZXMgTVBSSiBsb3dlciA4LUlPIHBpbnMgYXMgb3V0cHV0cworCQktIENoZWNrcyBjb3VudGVyIHZhbHVlIHRocm91Z2ggdGhlIHdpc2hib25lIHBvcnQKKyovCitpbnQgaSA9IDA7IAoraW50IGNsayA9IDA7CisKK3ZvaWQgbWFpbigpCit7CisKKwlpbnQgYkZhaWwgPSAwOworCS8qIAorCUlPIENvbnRyb2wgUmVnaXN0ZXJzCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDMtYml0cyB8IDEtYml0IHwgMS1iaXQgfCAxLWJpdCAgfCAxLWJpdCAgfCAxLWJpdCB8IDEtYml0ICAgfCAxLWJpdCAgIHwgMS1iaXQgfCAxLWJpdCB8IDEtYml0ICAgfAorCU91dHB1dDogMDAwMF8wMTEwXzAwMDBfMTExMCAgKDB4MTgwOCkgPSBHUElPX01PREVfVVNFUl9TVERfT1VUUFVUCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDExMCAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgfCAwICAgICAgfCAwICAgICB8IDAgICAgICAgfCAxICAgICAgIHwgMCAgICAgfCAwICAgICB8IDAgICAgICAgfAorCQorCSAKKwlJbnB1dDogMDAwMF8wMDAxXzAwMDBfMTExMSAoMHgwNDAyKSA9IEdQSU9fTU9ERV9VU0VSX1NURF9JTlBVVF9OT1BVTEwKKwl8IERNICAgICB8IFZUUklQIHwgU0xPVyAgfCBBTl9QT0wgfCBBTl9TRUwgfCBBTl9FTiB8IE1PRF9TRUwgfCBJTlBfRElTIHwgSE9MREggfCBPRUJfTiB8IE1HTVRfRU4gfAorCXwgMDAxICAgIHwgMCAgICAgfCAwICAgICB8IDAgICAgICB8IDAgICAgICB8IDAgICAgIHwgMCAgICAgICB8IDAgICAgICAgfCAwICAgICB8IDEgICAgIHwgMCAgICAgICB8CisJKi8KKworCS8qIFNldCB1cCB0aGUgaG91c2VrZWVwaW5nIFNQSSB0byBiZSBjb25uZWN0ZWQgaW50ZXJuYWxseSBzbwkqLworCS8qIHRoYXQgZXh0ZXJuYWwgcGluIGNoYW5nZXMgZG9uJ3QgYWZmZWN0IGl0LgkJCSovCisKKwlyZWdfc3BpbWFzdGVyX2NvbmZpZyA9IDB4YTAwMjsJLy8gRW5hYmxlLCBwcmVzY2FsZXIgPSAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbm5lY3QgdG8gaG91c2VrZWVwaW5nIFNQSQorCisJLy8gQ29ubmVjdCB0aGUgaG91c2VrZWVwaW5nIFNQSSB0byB0aGUgU1BJIG1hc3RlcgorCS8vIHNvIHRoYXQgdGhlIENTQiBsaW5lIGlzIG5vdCBsZWZ0IGZsb2F0aW5nLiAgVGhpcyBhbGxvd3MKKwkvLyBhbGwgb2YgdGhlIEdQSU8gcGlucyB0byBiZSB1c2VkIGZvciB1c2VyIGZ1bmN0aW9ucy4KKworICAgIHJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18zMCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjkgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzI4ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18yNyA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjYgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzI1ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18yNCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjMgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzIyID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18yMSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjAgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzE5ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18xOCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMTcgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzE2ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKworICAgICAvKiBBcHBseSBjb25maWd1cmF0aW9uICovCisgICAgcmVnX21wcmpfeGZlciA9IDE7CisgICAgd2hpbGUgKHJlZ19tcHJqX3hmZXIgPT0gMSk7CisKKyAgICByZWdfbGEyX29lbmIgPSByZWdfbGEyX2llbmEgPSAweEZGRkZGRkZGOyAgICAvLyBbOTU6NjRdCisgICAgcmVnX2xhMF9kYXRhID0gMHgwMDA7CisgICAgcmVnX2xhMF9kYXRhID0gMHgwMDE7IC8vIFJlbW92ZSBTb2Z0IFJlc2V0CisKKyAgICAvLyBGbGFnIHN0YXJ0IG9mIHRoZSB0ZXN0CisJcmVnX21wcmpfZGF0YWwgPSAweEFCNjAwMDAwOworCisgICAgLy8gUmVtb3ZlIFdpc2hib25lIFJlc2V0CisgICAgcmVnX21wcmpfd2Job3N0X3JlZzAgPSAweDE7CisKKyAgICBpZiAocmVnX21wcmpfZ2xvYmxfcmVnMCAhPSAweDg5NDkwMjAxKSBiRmFpbCA9IDE7CisgICAgaWYgKHJlZ19tcHJqX2dsb2JsX3JlZzEgIT0gMHhBNTVBQTU1QSkgYkZhaWwgPSAxOworCisgICAgLy8gV3JpdGUgc29mdHdhcmUgV3JpdGUgJiBSZWFkIFJlZ2lzdGVyCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjIgID0gMHgxMTIyMzM0NDsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjMgID0gMHgyMjMzNDQ1NTsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjQgID0gMHgzMzQ0NTU2NjsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjUgID0gMHg0NDU1NjY3NzsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjYgID0gMHg1NTY2Nzc4ODsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjcgID0gMHg2Njc3ODg5OTsgCisKKworICAgIGlmIChyZWdfbXByal9nbG9ibF9yZWcyMiAgIT0gMHgxMTIyMzM0NCkgYkZhaWwgPSAxOworICAgIGlmIChiRmFpbCA9PSAxKSByZWdfbXByal9kYXRhbCA9IDB4QUI2MTAwMDA7CisgICAgaWYgKHJlZ19tcHJqX2dsb2JsX3JlZzIzICAhPSAweDIyMzM0NDU1KSBiRmFpbCA9IDE7CisgICAgaWYgKGJGYWlsID09IDEpIHJlZ19tcHJqX2RhdGFsID0gMHhBQjYyMDAwMDsKKyAgICBpZiAocmVnX21wcmpfZ2xvYmxfcmVnMjQgICE9IDB4MzM0NDU1NjYpIGJGYWlsID0gMTsKKyAgICBpZiAoYkZhaWwgPT0gMSkgcmVnX21wcmpfZGF0YWwgPSAweEFCNjMwMDAwOworICAgIGlmIChyZWdfbXByal9nbG9ibF9yZWcyNSAgIT0gMHg0NDU1NjY3NykgYkZhaWwgPSAxOworICAgIGlmIChiRmFpbCA9PSAxKSByZWdfbXByal9kYXRhbCA9IDB4QUI2NDAwMDA7CisgICAgaWYgKHJlZ19tcHJqX2dsb2JsX3JlZzI2ICE9IDB4NTU2Njc3ODgpIGJGYWlsID0gMTsKKyAgICBpZiAoYkZhaWwgPT0gMSkgcmVnX21wcmpfZGF0YWwgPSAweEFCNjUwMDAwOworICAgIGlmIChyZWdfbXByal9nbG9ibF9yZWcyNyAhPSAweDY2Nzc4ODk5KSBiRmFpbCA9IDE7CisgICAgaWYgKGJGYWlsID09IDEpIHJlZ19tcHJqX2RhdGFsID0gMHhBQjY2MDAwMDsKKworICAgIGlmKGJGYWlsID09IDApIHsKKyAgICAgICAgcmVnX21wcmpfZGF0YWwgPSAweEFCNkEwMDAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlZ19tcHJqX2RhdGFsID0gMHhBQjYwMDAwMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3diX3BvcnQvd2JfcG9ydF90Yi52IGIvdmVyaWxvZy9kdi93Yl9wb3J0L3diX3BvcnRfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGU4YmVlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi93Yl9wb3J0L3diX3BvcnRfdGIudgpAQCAtMCwwICsxLDE3NSBAQAorLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKK2BkZWZhdWx0X25ldHR5cGUgbm9uZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIHBzCisKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAiY2FyYXZlbF9uZXRsaXN0cy52IgorYGluY2x1ZGUgInNwaWZsYXNoLnYiCisKK21vZHVsZSB3Yl9wb3J0X3RiOworCXJlZyBjbG9jazsKKwlyZWcgUlNUQjsKKwlyZWcgQ1NCOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKwl3aXJlIGdwaW87CisJd2lyZSBbMzc6MF0gbXByal9pbzsKKwl3aXJlIFs3OjBdIG1wcmpfaW9fMDsKKwl3aXJlIFsxNTowXSBjaGVja2JpdHM7CisKKwlhc3NpZ24gY2hlY2tiaXRzID0gbXByal9pb1szMToxNl07CisKKwlhc3NpZ24gbXByal9pb1szXSA9IChDU0IgPT0gMSdiMSkgPyAxJ2IxIDogMSdiejsKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisJZW5kCisKKwlgaWZkZWYgV0ZEVU1QCisJaW5pdGlhbCBiZWdpbgorCQkkZHVtcGZpbGUoIndiX3BvcnQudmNkIik7CisJCSRkdW1wdmFycygxLCB3Yl9wb3J0X3RiKTsKKwkJJGR1bXB2YXJzKDIsIHdiX3BvcnRfdGIudXV0KTsKKwkJLy8kZHVtcHZhcnMoMSwgd2JfcG9ydF90Yi51dXQubXByaik7CisJCSRkdW1wdmFycygxLCB3Yl9wb3J0X3RiLnV1dC5tcHJqLnVfd2JfaG9zdCk7CisJCSRkdW1wdmFycygyLCB3Yl9wb3J0X3RiLnV1dC5tcHJqLnVfcGlubXV4KTsKKwllbmQKKyAgICAgICBgZW5kaWYKKworCWluaXRpYWwgYmVnaW4KKworCQkvLyBSZXBlYXQgY3ljbGVzIG9mIDEwMDAgY2xvY2sgZWRnZXMgYXMgbmVlZGVkIHRvIGNvbXBsZXRlIHRlc3RiZW5jaAorCQlyZXBlYXQgKDMwKSBiZWdpbgorCQkJcmVwZWF0ICgxMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkJLy8gJGRpc3BsYXkoIisxMDAwIGN5Y2xlcyIpOworCQllbmQKKwkJJGRpc3BsYXkoIiVjWzE7MzFtIiwyNyk7CisJCSRkaXNwbGF5ICgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQlgaWZkZWYgR0wKKwkJCSRkaXNwbGF5ICgiTW9uaXRvcjogVGltZW91dCwgVGVzdCBNZWdhLVByb2plY3QgV0IgUG9ydCAoR0wpIEZhaWxlZCIpOworCQlgZWxzZQorCQkJJGRpc3BsYXkgKCJNb25pdG9yOiBUaW1lb3V0LCBUZXN0IE1lZ2EtUHJvamVjdCBXQiBQb3J0IChSVEwpIEZhaWxlZCIpOworCQlgZW5kaWYKKwkJJGRpc3BsYXkgKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIlY1swbSIsMjcpOworCQkkZmluaXNoOworCWVuZAorCisJaW5pdGlhbCBiZWdpbgorCSAgIHdhaXQoY2hlY2tiaXRzID09IDE2J2ggQUI2MCk7CisJCSRkaXNwbGF5KCJNb25pdG9yOiBNUFJKLUxvZ2ljIFdCIFN0YXJ0ZWQiKTsKKwkJd2FpdChjaGVja2JpdHMgPT0gMTYnaCBBQjZBKTsKKwkJJGRpc3BsYXkgKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCWBpZmRlZiBHTAorCSAgICAJJGRpc3BsYXkoIk1vbml0b3I6IE1lZ2EtUHJvamVjdCBXQiAoR0wpIFBhc3NlZCIpOworCQlgZWxzZQorCQkgICAgJGRpc3BsYXkoIk1vbml0b3I6IE1lZ2EtUHJvamVjdCBXQiAoUlRMKSBQYXNzZWQiKTsKKwkJYGVuZGlmCisJCSRkaXNwbGF5ICgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAkZmluaXNoOworCWVuZAorCisJaW5pdGlhbCBiZWdpbgorCQlSU1RCIDw9IDEnYjA7CisJCUNTQiAgPD0gMSdiMTsJCS8vIEZvcmNlIENTQiBoaWdoCisJCSMyMDAwOworCQlSU1RCIDw9IDEnYjE7CSAgICAJLy8gUmVsZWFzZSByZXNldAorCQkjMTcwMDAwOworCQlDU0IgPSAxJ2IwOwkJLy8gQ1NCIGNhbiBiZSByZWxlYXNlZAorCWVuZAorCisJaW5pdGlhbCBiZWdpbgkJLy8gUG93ZXItdXAgc2VxdWVuY2UKKwkJcG93ZXIxIDw9IDEnYjA7CisJCXBvd2VyMiA8PSAxJ2IwOworCQlwb3dlcjMgPD0gMSdiMDsKKwkJcG93ZXI0IDw9IDEnYjA7CisJCSMxMDA7CisJCXBvd2VyMSA8PSAxJ2IxOworCQkjMTAwOworCQlwb3dlcjIgPD0gMSdiMTsKKwkJIzEwMDsKKwkJcG93ZXIzIDw9IDEnYjE7CisJCSMxMDA7CisJCXBvd2VyNCA8PSAxJ2IxOworCWVuZAorCisJLy9hbHdheXMgQChtcHJqX2lvKSBiZWdpbgorCS8vCSMxICRkaXNwbGF5KCJNUFJKLUlPIHN0YXRlID0gJWIgIiwgbXByal9pb1s3OjBdKTsKKwkvL2VuZAorCisJd2lyZSBmbGFzaF9jc2I7CisJd2lyZSBmbGFzaF9jbGs7CisJd2lyZSBmbGFzaF9pbzA7CisJd2lyZSBmbGFzaF9pbzE7CisKKwl3aXJlIFZERDNWMyA9IHBvd2VyMTsKKwl3aXJlIFZERDFWOCA9IHBvd2VyMjsKKwl3aXJlIFVTRVJfVkREM1YzID0gcG93ZXIzOworCXdpcmUgVVNFUl9WREQxVjggPSBwb3dlcjQ7CisJd2lyZSBWU1MgPSAxJ2IwOworCisJY2FyYXZlbCB1dXQgKAorCQkudmRkaW8JICAoVkREM1YzKSwKKwkJLnZzc2lvCSAgKFZTUyksCisJCS52ZGRhCSAgKFZERDNWMyksCisJCS52c3NhCSAgKFZTUyksCisJCS52Y2NkCSAgKFZERDFWOCksCisJCS52c3NkCSAgKFZTUyksCisJCS52ZGRhMSAgICAoVVNFUl9WREQzVjMpLAorCQkudmRkYTIgICAgKFVTRVJfVkREM1YzKSwKKwkJLnZzc2ExCSAgKFZTUyksCisJCS52c3NhMgkgIChWU1MpLAorCQkudmNjZDEJICAoVVNFUl9WREQxVjgpLAorCQkudmNjZDIJICAoVVNFUl9WREQxVjgpLAorCQkudnNzZDEJICAoVlNTKSwKKwkJLnZzc2QyCSAgKFZTUyksCisJCS5jbG9jawkgIChjbG9jayksCisJCS5ncGlvICAgICAoZ3BpbyksCisgICAgICAgIC5tcHJqX2lvICAobXByal9pbyksCisJCS5mbGFzaF9jc2IoZmxhc2hfY3NiKSwKKwkJLmZsYXNoX2NsayhmbGFzaF9jbGspLAorCQkuZmxhc2hfaW8wKGZsYXNoX2lvMCksCisJCS5mbGFzaF9pbzEoZmxhc2hfaW8xKSwKKwkJLnJlc2V0YgkgIChSU1RCKQorCSk7CisKKwlzcGlmbGFzaCAjKAorCQkuRklMRU5BTUUoIndiX3BvcnQuaGV4IikKKwkpIHNwaWZsYXNoICgKKwkJLmNzYihmbGFzaF9jc2IpLAorCQkuY2xrKGZsYXNoX2NsayksCisJCS5pbzAoZmxhc2hfaW8wKSwKKwkJLmlvMShmbGFzaF9pbzEpLAorCQkuaW8yKCksCQkJLy8gbm90IHVzZWQKKwkJLmlvMygpCQkJLy8gbm90IHVzZWQKKwkpOworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKyAgICBlbmQKK2BlbmRpZiAgICAKK2VuZG1vZHVsZQorYGRlZmF1bHRfbmV0dHlwZSB3aXJlCg==