ZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvYmluL3dvbGZzc2wtY29uZmlnIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9iaW4vd29sZnNzbC1jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGIwNDZiZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvYmluL3dvbGZzc2wtY29uZmlnCkBAIC0wLDAgKzEsMTE3IEBACisjISAvYmluL3NoCisgCitwYWNrYWdlPSJ3b2xmc3NsIgordmVyc2lvbj0iNC44LjEiCitsaWJzPSItbHdvbGZzc2wgLWxwdGhyZWFkIgorIAorcHJlZml4PSIvaG9tZS96aG91Z3VvcG8vY29kZTIvdjN0L2FwL3Byb2plY3QvengyOTc1MjB2My9wcmpfbWRsL2J1aWxkLy4uLy4uLy4uLy4uL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwiCitleGVjX3ByZWZpeD0iJHtwcmVmaXh9IgorYmluZGlyPSIke2V4ZWNfcHJlZml4fS9iaW4iCitzYmluZGlyPSIke2V4ZWNfcHJlZml4fS9zYmluIgorbGliZXhlY2Rpcj0iJHtleGVjX3ByZWZpeH0vbGliZXhlYyIKK2RhdGFkaXI9IiR7ZGF0YXJvb3RkaXJ9Igorc3lzY29uZmRpcj0iJHtwcmVmaXh9L2V0YyIKK3NoYXJlZHN0YXRlZGlyPSIke3ByZWZpeH0vY29tIgorbG9jYWxzdGF0ZWRpcj0iJHtwcmVmaXh9L3ZhciIKK2xpYmRpcj0iJHtleGVjX3ByZWZpeH0vbGliIgoraW5mb2Rpcj0iJHtkYXRhcm9vdGRpcn0vaW5mbyIKK21hbmRpcj0iJHtkYXRhcm9vdGRpcn0vbWFuIgoraW5jbHVkZWRpcj0iJHtwcmVmaXh9L2luY2x1ZGUiCit0YXJnZXQ9ImFybS11bmtub3duLWxpbnV4LWdudSIKK2hvc3Q9ImFybS11bmtub3duLWxpbnV4LWdudSIKK2J1aWxkPSJ4ODZfNjQtdW5rbm93bi1saW51eC1nbnUiCisgCitpZiB0ZXN0ICIkIyIgLWVxIDA7IHRoZW4KKyAgIGNhdCA8PEVPRgorVXNhZ2U6ICRwYWNrYWdlLWNvbmZpZyBPUFRJT05TCitPcHRpb25zOgorICAtLXByZWZpeD1ESVIpIDogXCRwcmVmaXgKKyAgLS1wYWNrYWdlKSA6IFwkcGFja2FnZQorICAtLXZlcnNpb24pIDogXCR2ZXJzaW9uCisgIC0tY2ZsYWdzKSA6IC1JXCRpbmNsdWRlZGlyCisgIC0tbGlicykgOiAtTFwkbGliZGlyIC1sXCRwYWNrYWdlCisgIC0taGVscCkgcHJpbnQgYWxsIHRoZSBvcHRpb25zIChub3QganVzdCB0aGVzZSkKK0VPRgorZmkKKyAKK289IiIKK2g9IiIKK2ZvciBpIGluICIkQCI7IGRvCisgIGNhc2UgJGkgaW4KKyAgLS1wcmVmaXg9KikgcHJlZml4PWBlY2hvICRpIHwgc2VkIC1lICJzLy0tcHJlZml4PS8vImAgOzsKKyAgLS1wcmVmaXgpICAgIG89IiRvICRwcmVmaXgiIDs7CisgIC0tcGFja2FnZSkgICBvPSIkbyAkcGFja2FnZSIgOzsKKyAgLS12ZXJzaW9uKSAgIG89IiRvICR2ZXJzaW9uIiA7OworICAtLWNmbGFncykgaWYgdGVzdCAiXyRpbmNsdWRlZGlyIiAhPSAiXy91c3IvaW5jbHVkZSIKKyAgICAgICAgICB0aGVuIG89IiRvIC1JJGluY2x1ZGVkaXIiIDsgZmkKKyAgOzsKKyAgLS1saWJzKSAgICAgIG89IiRvIC1MJGxpYmRpciAkbGlicyIgOzsKKyAgLS1leGVjX3ByZWZpeHwtLWVwcmVmaXgpIG89IiRvICRleGVjX3ByZWZpeCIgOzsKKyAgLS1iaW5kaXIpICAgICAgICAgICAgICAgIG89IiRvICRiaW5kaXIiIDs7CisgIC0tc2JpbmRpcikgICAgICAgICAgICAgICBvPSIkbyAkc2JpbmRpciIgOzsKKyAgLS1saWJleGVjZGlyKSAgICAgICAgICAgIG89IiRvICRsaWJleGVjZGlyIiA7OworICAtLWRhdGFkaXIpICAgICAgICAgICAgICAgbz0iJG8gJGRhdGFkaXIiIDs7CisgIC0tZGF0YWluYykgICAgICAgICAgICAgICBvPSIkbyAtSSRkYXRhZGlyIiA7OworICAtLWRhdGFsaWIpICAgICAgICAgICAgICAgbz0iJG8gLUwkZGF0YWRpciIgOzsKKyAgLS1zeXNjb25mZGlyKSAgICAgICAgICAgIG89IiRvICRzeXNjb25mZGlyIiA7OworICAtLXNoYXJlZHN0YXRlZGlyKSAgICAgICAgbz0iJG8gJHNoYXJlZHN0YXRlZGlyIiA7OworICAtLWxvY2Fsc3RhdGVkaXIpICAgICAgICAgbz0iJG8gJGxvY2Fsc3RhdGVkaXIiIDs7CisgIC0tbGliZGlyKSAgICAgICAgICAgICAgICBvPSIkbyAkbGliZGlyIiA7OworICAtLWxpYmFkZCkgICAgICAgICAgICAgICAgbz0iJG8gLUwkbGliZGlyIiA7OworICAtLWluZm9kaXIpICAgICAgICAgICAgICAgbz0iJG8gJGluZm9kaXIiIDs7CisgIC0tbWFuZGlyKSAgICAgICAgICAgICAgICBvPSIkbyAkbWFuZGlyIiA7OworICAtLXRhcmdldCkgICAgICAgICAgICAgICAgbz0iJG8gJHRhcmdldCIgOzsKKyAgLS1ob3N0KSAgICAgICAgICAgICAgICAgIG89IiRvICRob3N0IiA7OworICAtLWJ1aWxkKSAgICAgICAgICAgICAgICAgbz0iJG8gJGJ1aWxkIiA7OworICAtLWRhdGEpICAgICAgICAgICAgICAgICAgbz0iJG8gLUkkZGF0YWRpci8kcGFja2FnZSIgOzsKKyAgLS1wa2dkYXRhZGlyKSAgICAgICAgICAgIG89IiRvICRkYXRhZGlyLyRwYWNrYWdlIiA7OworICAtLXBrZ2RhdGFpbmMpICAgICAgICAgICAgbz0iJG8gLUkkZGF0YWRpci8kcGFja2FnZSIgOzsKKyAgLS1wa2dkYXRhbGliKSAgICAgICAgICAgIG89IiRvIC1MJGRhdGFkaXIvJHBhY2thZ2UiIDs7CisgIC0tcGtnbGliZGlyKSAgICAgICAgICAgICBvPSIkbyAkbGliZGlyLyRwYWNrYWdlIiA7OworICAtLXBrZ2xpYmluYykgICAgICAgICAgICAgbz0iJG8gLUkkbGliaW5jLyRwYWNrYWdlIiA7OworICAtLXBrZ2xpYmFkZCkgICAgICAgICAgICAgbz0iJG8gLUwkbGliYWRkLyRwYWNrYWdlIiA7OworICAtLXBrZ2luY2x1ZGVkaXIpICAgICAgICAgbz0iJG8gJGluY2x1ZGVkaXIvJHBhY2thZ2UiIDs7CisgIC0taGVscCkgaD0iMSIgOzsKKyAgLT8vLyp8LT8vKi8vKnwtPy4vKi8vKnwvLyp8LyovLyp8Li8qLy8qKSAKKyAgICAgICB2PWBlY2hvICRpIHwgc2VkIC1lIHM6Ly86XCQ6Z2AKKyAgICAgICB2PWBldmFsICJlY2hvICR2ImAgCisgICAgICAgbz0iJG8gJHYiIDs7IAorICBlc2FjCitkb25lCisgCitvPWBldmFsICJlY2hvICRvImAKK289YGV2YWwgImVjaG8gJG8iYAorZXZhbCAiZWNobyAkbyIKKyAKK2lmIHRlc3QgISAteiAiJGgiIDsgdGhlbiAKK2NhdCA8PEVPRgorICAtLXByZWZpeD14eHgpICAgICAgKHdoYXQgaXMgdGhhdCBmb3IgYW55d2F5PykKKyAgLS1wcmVmaXgpICAgICAgICAgXCRwcmVmaXggICAgICAgICRwcmVmaXgKKyAgLS1wYWNrYWdlKSAgICAgICAgXCRwYWNrYWdlICAgICAgICRwYWNrYWdlCisgIC0tdmVyc2lvbikgICAgICAgIFwkdmVyc2lvbiAgICAgICAkdmVyc2lvbgorICAtLWNmbGFncykgICAgICAgICAtSVwkaW5jbHVkZWRpciAgICB1bmxlc3MgaXQgaXMgL3Vzci9pbmNsdWRlCisgIC0tbGlicykgICAgICAgICAgIC1MXCRsaWJkaXIgLWxcJFBBQ0tBR0UgXCRMSUJTCisgIC0tZXhlY19wcmVmaXgpIG9yLi4uIAorICAtLWVwcmVmaXgpICAgICAgICBcJGV4ZWNfcHJlZml4ICAgJGV4ZWNfcHJlZml4CisgIC0tYmluZGlyKSAgICAgICAgIFwkYmluZGlyICAgICAgICAkYmluZGlyCisgIC0tc2JpbmRpcikgICAgICAgIFwkc2JpbmRpciAgICAgICAkc2JpbmRpcgorICAtLWxpYmV4ZWNkaXIpICAgICBcJGxpYmV4ZWNkaXIgICAgJGxpYmV4ZWNkaXIKKyAgLS1kYXRhZGlyKSAgICAgICAgXCRkYXRhZGlyICAgICAgICRkYXRhZGlyCisgIC0tc3lzY29uZmRpcikgICAgIFwkc3lzY29uZmRpciAgICAkc3lzY29uZmRpcgorICAtLXNoYXJlZHN0YXRlZGlyKSBcJHNoYXJlZHN0YXRlZGlyJHNoYXJlZHN0YXRlZGlyCisgIC0tbG9jYWxzdGF0ZWRpcikgIFwkbG9jYWxzdGF0ZWRpciAkbG9jYWxzdGF0ZWRpcgorICAtLWxpYmRpcikgICAgICAgICBcJGxpYmRpciAgICAgICAgJGxpYmRpcgorICAtLWluZm9kaXIpICAgICAgICBcJGluZm9kaXIgICAgICAgJGluZm9kaXIKKyAgLS1tYW5kaXIpICAgICAgICAgXCRtYW5kaXIgICAgICAgICRtYW5kaXIKKyAgLS10YXJnZXQpICAgICAgICAgXCR0YXJnZXQgICAgICAgICR0YXJnZXQKKyAgLS1ob3N0KSAgICAgICAgICAgXCRob3N0ICAgICAgICAgICRob3N0CisgIC0tYnVpbGQpICAgICAgICAgIFwkYnVpbGQgICAgICAgICAkYnVpbGQKKyAgLS1kYXRhKSAgICAgICAgICAgLUlcJGRhdGFkaXIvXCRwYWNrYWdlCisgIC0tcGtnZGF0YWRpcikgICAgIFwkZGF0YWRpci9cJHBhY2thZ2UKKyAgLS1wa2dsaWJkaXIpICAgICAgXCRsaWJkaXIvXCRwYWNrYWdlCisgIC0tcGtnaW5jbHVkZWRpcikgIFwkaW5jbHVkZWRpci9cJHBhY2thZ2UKKyAgLS1oZWxwKSAgICAgICAgICAgZ2VuZXJhdGVkIGJ5IGF4X2NyZWF0ZV9nZW5lcmljX2NvbmZpZy5tNAorICAtSS8vdmFybmFtZSBhbmQgb3RoZXIgaW5jLXRhcmdldHMgbGlrZSAtLXBrZ2RhdGFpbmMgc3VwcG9ydGVkCisgIC1MLy92YXJuYW1lIGFuZCBvdGhlciBsaWItdGFyZ2V0cywgZS5nLiAtLXBrZ2RhdGFsaWIgb3IgLS1saWJhZGQKK0VPRgorZmkKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY2FsbGJhY2tzLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2NhbGxiYWNrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMWMxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2NhbGxiYWNrcy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGNhbGxiYWNrcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaW5jbHVkZSA8d29sZnNzbC9jYWxsYmFja3MuaD4KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY2VydHNfdGVzdC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jZXJ0c190ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0NjVhYwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY2VydHNfdGVzdC5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qIGNlcnRzX3Rlc3QuaCAqLworCisjaW5jbHVkZSA8d29sZnNzbC9jZXJ0c190ZXN0Lmg+CisKKyNpZm5kZWYgQ1lBU1NMX0NFUlRTX1RFU1RfSAorICAgICNkZWZpbmUgQ1lBU1NMX0NFUlRTX1RFU1RfSCBXT0xGU1NMX0NFUlRTX1RFU1RfSAorI2Vsc2UKKyAgICAjdW5kZWYgQ1lBU1NMX0NFUlRTX1RFU1RfSAorICAgICNkZWZpbmUgQ1lBU1NMX0NFUlRTX1RFU1RfSCBXT0xGU1NMX0NFUlRTX1RFU1RfSAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2NybC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jcmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODgzODc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jcmwuaApAQCAtMCwwICsxLDIzIEBACisvKiBjcmwuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworI2luY2x1ZGUgPHdvbGZzc2wvY3JsLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9hZXMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2Flcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzNjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9hZXMuaApAQCAtMCwwICsxLDYxIEBACisvKiBhZXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisjaWZuZGVmIE5PX0FFUworCisjaWZuZGVmIENUQU9fQ1JZUFRfQUVTX0gKKyNkZWZpbmUgQ1RBT19DUllQVF9BRVNfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYWVzLmg+CisjZGVmaW5lIEFlc1NldEtleSAgICAgICAgICAgIHdjX0Flc1NldEtleQorI2RlZmluZSBBZXNTZXRJViAgICAgICAgICAgICB3Y19BZXNTZXRJVgorI2RlZmluZSBBZXNDYmNFbmNyeXB0ICAgICAgICB3Y19BZXNDYmNFbmNyeXB0CisjZGVmaW5lIEFlc0NiY0RlY3J5cHQgICAgICAgIHdjX0Flc0NiY0RlY3J5cHQKKyNkZWZpbmUgQWVzQ2JjRGVjcnlwdFdpdGhLZXkgd2NfQWVzQ2JjRGVjcnlwdFdpdGhLZXkKKworLyogQUVTLUNUUiAqLworI2lmZGVmIFdPTEZTU0xfQUVTX0NPVU5URVIKKyAgICAjZGVmaW5lIEFlc0N0ckVuY3J5cHQgd2NfQWVzQ3RyRW5jcnlwdAorI2VuZGlmCisvKiBBRVMtRElSRUNUICovCisjaWYgZGVmaW5lZChXT0xGU1NMX0FFU19ESVJFQ1QpCisgICAgI2RlZmluZSBBZXNFbmNyeXB0RGlyZWN0IHdjX0Flc0VuY3J5cHREaXJlY3QKKyAgICAjZGVmaW5lIEFlc0RlY3J5cHREaXJlY3Qgd2NfQWVzRGVjcnlwdERpcmVjdAorICAgICNkZWZpbmUgQWVzU2V0S2V5RGlyZWN0ICB3Y19BZXNTZXRLZXlEaXJlY3QKKyNlbmRpZgorI2lmZGVmIEhBVkVfQUVTR0NNCisgICAgI2RlZmluZSBBZXNHY21TZXRLZXkgIHdjX0Flc0djbVNldEtleQorICAgICNkZWZpbmUgQWVzR2NtRW5jcnlwdCB3Y19BZXNHY21FbmNyeXB0CisgICAgI2RlZmluZSBBZXNHY21EZWNyeXB0IHdjX0Flc0djbURlY3J5cHQKKyAgICAjZGVmaW5lIEdtYWNTZXRLZXkgICAgd2NfR21hY1NldEtleQorICAgICNkZWZpbmUgR21hY1VwZGF0ZSAgICB3Y19HbWFjVXBkYXRlCisjZW5kaWYgLyogSEFWRV9BRVNHQ00gKi8KKyNpZmRlZiBIQVZFX0FFU0NDTQorICAgICNkZWZpbmUgQWVzQ2NtU2V0S2V5ICB3Y19BZXNDY21TZXRLZXkKKyAgICAjZGVmaW5lIEFlc0NjbUVuY3J5cHQgd2NfQWVzQ2NtRW5jcnlwdAorICAgICNkZWZpbmUgQWVzQ2NtRGVjcnlwdCB3Y19BZXNDY21EZWNyeXB0CisjZW5kaWYgLyogSEFWRV9BRVNDQ00gKi8KKworI2VuZGlmIC8qIENUQU9fQ1JZUFRfQUVTX0ggKi8KKyNlbmRpZiAvKiBOT19BRVMgKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvYXJjNC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvYXJjNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzQ0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9hcmM0LmgKQEAgLTAsMCArMSwzNiBAQAorLyogYXJjNC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaWZuZGVmIENUQU9fQ1JZUFRfQVJDNF9ICisjZGVmaW5lIENUQU9fQ1JZUFRfQVJDNF9ICisKKy8qIGZvciBhcmM0IHJldmVyc2UgY29tcGF0aWJpbGl0eSAqLworI2lmbmRlZiBOT19SQzQKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hcmM0Lmg+CisgICAgI2RlZmluZSBBcmM0UHJvY2VzcyB3Y19BcmM0UHJvY2VzcworICAgICNkZWZpbmUgQXJjNFNldEtleSB3Y19BcmM0U2V0S2V5CisgICAgI2RlZmluZSBBcmM0QXN5bmNJbml0IHdjX0FyYzRBc3luY0luaXQKKyAgICAjZGVmaW5lIEFyYzRBc3luY0ZyZWUgd2NfQXJjNEFzeW5jRnJlZQorI2VuZGlmCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX0FSQzRfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9hc24uaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2Fzbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTA5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9hc24uaApAQCAtMCwwICsxLDQ4IEBACisvKiBhc24uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworI2lmbmRlZiBOT19BU04KKworI2lmbmRlZiBDVEFPX0NSWVBUX0FTTl9ICisjZGVmaW5lIENUQU9fQ1JZUFRfQVNOX0gKKworLyogcHVsbCBpbiBjb21wYXRpYmlsaXR5IGZvciBlYWNoIGluY2x1ZGUgKi8KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L2RoLmg+CisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9kc2EuaD4KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3NoYS5oPgorI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvbWQ1Lmg+CisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9hc25fcHVibGljLmg+ICAgLyogcHVibGljIGludGVyZmFjZSAqLworI2lmZGVmIEhBVkVfRUNDCisgICAgI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvZWNjLmg+CisjZW5kaWYKKworCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXNuLmg+CisKKyNpZm5kZWYgTk9fRklMRVNZU1RFTQorICAgICNkZWZpbmUgQ3lhU1NMX1BlbUNlcnRUb0RlciB3Y19QZW1DZXJ0VG9EZXIKKyNlbmRpZgorCisjZW5kaWYgLyogQ1RBT19DUllQVF9BU05fSCAqLworCisjZW5kaWYgLyogIU5PX0FTTiAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9hc25fcHVibGljLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9hc25fcHVibGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkYzZkYQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2Fzbl9wdWJsaWMuaApAQCAtMCwwICsxLDc5IEBACisvKiBhc25fcHVibGljLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBDVEFPX0NSWVBUX0FTTl9QVUJMSUNfSAorI2RlZmluZSBDVEFPX0NSWVBUX0FTTl9QVUJMSUNfSAorCisvKiBwdWxsIGluIGNvbXBhdGliaWxpdHkgZm9yIGVhY2ggb2YgdGhlIGluY2x1ZGVzICovCisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC90eXBlcy5oPgorI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvdHlwZXMuaD4KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L2VjYy5oPgorI2lmZGVmIFdPTEZTU0xfQ0VSVF9HRU4KKyAgICAjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9yc2EuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXNuX3B1YmxpYy5oPgorI2lmZGVmIFdPTEZTU0xfQ0VSVF9HRU4KKyAgICAjZGVmaW5lIEluaXRDZXJ0IHdjX0luaXRDZXJ0CisgICAgI2RlZmluZSBNYWtlQ2VydCB3Y19NYWtlQ2VydAorCisgICAgI2lmZGVmIFdPTEZTU0xfQ0VSVF9SRVEKKyAgICAjZGVmaW5lIE1ha2VDZXJ0UmVxIHdjX01ha2VDZXJ0UmVxCisjZW5kaWYKKworICAgICNkZWZpbmUgU2lnbkNlcnQgICAgIHdjX1NpZ25DZXJ0CisgICAgI2RlZmluZSBNYWtlU2VsZkNlcnQgd2NfTWFrZVNlbGZDZXJ0CisgICAgI2RlZmluZSBTZXRJc3N1ZXIgICAgd2NfU2V0SXNzdWVyCisgICAgI2RlZmluZSBTZXRTdWJqZWN0ICAgd2NfU2V0U3ViamVjdAorCisgICAgI2lmZGVmIFdPTEZTU0xfQUxUX05BTUVTCisgICAgI2RlZmluZSBTZXRBbHROYW1lcyB3Y19TZXRBbHROYW1lcworI2VuZGlmCisKKyAgICAjZGVmaW5lIFNldElzc3VlckJ1ZmZlciAgIHdjX1NldElzc3VlckJ1ZmZlcgorICAgICNkZWZpbmUgU2V0U3ViamVjdEJ1ZmZlciAgd2NfU2V0U3ViamVjdEJ1ZmZlcgorICAgICNkZWZpbmUgU2V0QWx0TmFtZXNCdWZmZXIgd2NfU2V0QWx0TmFtZXNCdWZmZXIKKyAgICAjZGVmaW5lIFNldERhdGVzQnVmZmVyICAgIHdjX1NldERhdGVzQnVmZmVyCisKKyAgICAjaWZkZWYgSEFWRV9OVFJVCisgICAgICAgICNkZWZpbmUgTWFrZU50cnVDZXJ0IHdjX01ha2VOdHJ1Q2VydAorICAgICNlbmRpZgorCisjZW5kaWYgLyogV09MRlNTTF9DRVJUX0dFTiAqLworCisgICAgI2lmIGRlZmluZWQoV09MRlNTTF9LRVlfR0VOKSB8fCBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9HRU4pCisgICAgI2RlZmluZSBEZXJUb1BlbSB3Y19EZXJUb1BlbQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0VDQworICAgIC8qIHByaXZhdGUga2V5IGhlbHBlcnMgKi8KKyAgICAjZGVmaW5lIEVjY1ByaXZhdGVLZXlEZWNvZGUgd2NfRWNjUHJpdmF0ZUtleURlY29kZQorICAgICNkZWZpbmUgRWNjS2V5VG9EZXIgICAgICAgICB3Y19FY2NLZXlUb0RlcgorI2VuZGlmCisKKyAgICAvKiBERVIgZW5jb2RlIHNpZ25hdHVyZSAqLworICAgICNkZWZpbmUgRW5jb2RlU2lnbmF0dXJlIHdjX0VuY29kZVNpZ25hdHVyZQorICAgICNkZWZpbmUgR2V0Q1RDX0hhc2hPSUQgIHdjX0dldENUQ19IYXNoT0lECisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX0FTTl9QVUJMSUNfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9ibGFrZTItaW1wbC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvYmxha2UyLWltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM0YTgxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvYmxha2UyLWltcGwuaApAQCAtMCwwICsxLDQzIEBACisvKgorICAgQkxBS0UyIHJlZmVyZW5jZSBzb3VyY2UgY29kZSBwYWNrYWdlIC0gcmVmZXJlbmNlIEMgaW1wbGVtZW50YXRpb25zCisKKyAgIFdyaXR0ZW4gaW4gMjAxMiBieSBTYW11ZWwgTmV2ZXMgPHNuZXZlc0BkZWkudWMucHQ+CisKKyAgIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbCBjb3B5cmlnaHQKKyAgIGFuZCByZWxhdGVkIGFuZCBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyBzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbgorICAgd29ybGR3aWRlLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBDQzAgUHVibGljIERvbWFpbiBEZWRpY2F0aW9uIGFsb25nIHdpdGgKKyAgIHRoaXMgc29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvPi4KKyovCisvKiBibGFrZTItaW1wbC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKyNpZm5kZWYgQ1RBT0NSWVBUX0JMQUtFMl9JTVBMX0gKKyNkZWZpbmUgQ1RBT0NSWVBUX0JMQUtFMl9JTVBMX0gKKworI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvdHlwZXMuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9ibGFrZTItaW1wbC5oPgorCisjZW5kaWYgIC8qIENUQU9DUllQVF9CTEFLRTJfSU1QTF9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2JsYWtlMi1pbnQuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2JsYWtlMi1pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjJkZTJmCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvYmxha2UyLWludC5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgICBCTEFLRTIgcmVmZXJlbmNlIHNvdXJjZSBjb2RlIHBhY2thZ2UgLSByZWZlcmVuY2UgQyBpbXBsZW1lbnRhdGlvbnMKKworICAgV3JpdHRlbiBpbiAyMDEyIGJ5IFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4KKworICAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBhdXRob3IocykgaGF2ZSBkZWRpY2F0ZWQgYWxsIGNvcHlyaWdodAorICAgYW5kIHJlbGF0ZWQgYW5kIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGlzIHNvZnR3YXJlIHRvIHRoZSBwdWJsaWMgZG9tYWluCisgICB3b3JsZHdpZGUuIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgd2l0aG91dCBhbnkgd2FycmFudHkuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcgd2l0aAorICAgdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8+LgorKi8KKy8qIGJsYWtlMi1pbnQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisKKyNpZm5kZWYgQ1RBT0NSWVBUX0JMQUtFMl9JTlRfSAorI2RlZmluZSBDVEFPQ1JZUFRfQkxBS0UyX0lOVF9ICisKKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3R5cGVzLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYmxha2UyLWludC5oPgorCisjZW5kaWYgIC8qIENUQU9DUllQVF9CTEFLRTJfSU5UX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvYmxha2UyLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9ibGFrZTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzdhNTE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvYmxha2UyLmgKQEAgLTAsMCArMSw0NSBAQAorLyogYmxha2UyLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmZGVmIEhBVkVfQkxBS0UyCisKKyNpZm5kZWYgQ1RBT0NSWVBUX0JMQUtFMl9ICisjZGVmaW5lIENUQU9DUllQVF9CTEFLRTJfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYmxha2UyLmg+CisKKy8qIGZvciBibGFrZTIgcmV2ZXJzZSBjb21wYXRpYmlsaXR5ICovCisjaWZuZGVmIEhBVkVfRklQUworICAgICNkZWZpbmUgSW5pdEJsYWtlMmIgICB3Y19Jbml0Qmxha2UyYgorICAgICNkZWZpbmUgQmxha2UyYlVwZGF0ZSB3Y19CbGFrZTJiVXBkYXRlCisgICAgI2RlZmluZSBCbGFrZTJiRmluYWwgIHdjX0JsYWtlMmJGaW5hbAorI2Vsc2UKKyAgICAvKiBuYW1lIGZvciB3aGVuIGZpcHMgaG1hYyBjYWxscyBibGFrZSAqLworICAgICNkZWZpbmUgd2NfSW5pdEJsYWtlMmIgICBJbml0Qmxha2UyYgorICAgICNkZWZpbmUgd2NfQmxha2UyYlVwZGF0ZSBCbGFrZTJiVXBkYXRlCisgICAgI2RlZmluZSB3Y19CbGFrZTJiRmluYWwgIEJsYWtlMmJGaW5hbAorI2VuZGlmIC8qIEhBVkVfRklQUyAqLworCisjZW5kaWYgIC8qIENUQU9DUllQVF9CTEFLRTJfSCAqLworI2VuZGlmICAvKiBIQVZFX0JMQUtFMiAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9jYW1lbGxpYS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvY2FtZWxsaWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGI0YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvY2FtZWxsaWEuaApAQCAtMCwwICsxLDM5IEBACisvKiBjYW1lbGxpYS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaWZuZGVmIENUQU9fQ1JZUFRfQ0FNRUxMSUFfSAorI2RlZmluZSBDVEFPX0NSWVBUX0NBTUVMTElBX0gKKworCisvKiBmb3IgY2FtZWxsaWEgcmV2ZXJzZSBjb21wYXRpYmlsaXR5ICovCisjaWZkZWYgSEFWRV9DQU1FTExJQQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9jYW1lbGxpYS5oPgorCSNkZWZpbmUgQ2FtZWxsaWFTZXRLZXkgICAgICAgIHdjX0NhbWVsbGlhU2V0S2V5CisJI2RlZmluZSBDYW1lbGxpYVNldElWICAgICAgICAgd2NfQ2FtZWxsaWFTZXRJVgorCSNkZWZpbmUgQ2FtZWxsaWFFbmNyeXB0RGlyZWN0IHdjX0NhbWVsbGlhRW5jcnlwdERpcmVjdAorCSNkZWZpbmUgQ2FtZWxsaWFEZWNyeXB0RGlyZWN0IHdjX0NhbWVsbGlhRGVjcnlwdERpcmVjdAorCSNkZWZpbmUgQ2FtZWxsaWFDYmNFbmNyeXB0ICAgIHdjX0NhbWVsbGlhQ2JjRW5jcnlwdAorCSNkZWZpbmUgQ2FtZWxsaWFDYmNEZWNyeXB0ICAgIHdjX0NhbWVsbGlhQ2JjRGVjcnlwdAorI2VuZGlmCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX0NBTUVMTElBX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvY2hhY2hhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9jaGFjaGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQ1MmJhCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvY2hhY2hhLmgKQEAgLTAsMCArMSwzNiBAQAorLyogY2hhY2hhLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKyNpZm5kZWYgQ1RBT19DUllQVF9DSEFDSEFfSAorI2RlZmluZSBDVEFPX0NSWVBUX0NIQUNIQV9ICisKKworLyogZm9yIGNoYWNoYSByZXZlcnNlIGNvbXBhdGliaWxpdHkgKi8KKyNpZmRlZiBIQVZFX0NIQUNIQQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9jaGFjaGEuaD4KKyAgICAjZGVmaW5lIENoYWNoYV9Qcm9jZXNzIHdjX0NoYWNoYV9Qcm9jZXNzCisgICAgI2RlZmluZSBDaGFjaGFfU2V0S2V5ICB3Y19DaGFjaGFfU2V0S2V5CisgICAgI2RlZmluZSBDaGFjaGFfU2V0SVYgICB3Y19DaGFjaGFfU2V0SVYKKyNlbmRpZgorCisjZW5kaWYgLyogQ1RBT19DUllQVF9DSEFDSEFfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9jb2RpbmcuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2NvZGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDMzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9jb2RpbmcuaApAQCAtMCwwICsxLDMwIEBACisvKiBjb2RpbmcuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisjaWZuZGVmIENUQU9fQ1JZUFRfQ09ESU5HX0gKKyNkZWZpbmUgQ1RBT19DUllQVF9DT0RJTkdfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvY29kaW5nLmg+CisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX0NPRElOR19IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2NvbXByZXNzLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZjhjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9jb21wcmVzcy5oCkBAIC0wLDAgKzEsMzggQEAKKy8qIGNvbXByZXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmZGVmIEhBVkVfTElCWgorCisjaWZuZGVmIENUQU9fQ1JZUFRfQ09NUFJFU1NfSAorI2RlZmluZSBDVEFPX0NSWVBUX0NPTVBSRVNTX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2NvbXByZXNzLmg+CisKKy8qIHJldmVyc2UgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBDb21wcmVzcyAgIHdjX0NvbXByZXNzCisjZGVmaW5lIERlQ29tcHJlc3Mgd2NfRGVDb21wcmVzcworCisjZW5kaWYgLyogQ1RBT19DUllQVF9DT01QUkVTU19IICovCisKKyNlbmRpZiAvKiBIQVZFX0xJQlogKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvZGVzMy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvZGVzMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZmQ1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9kZXMzLmgKQEAgLTAsMCArMSw0OSBAQAorLyogZGVzMy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKyNpZm5kZWYgTk9fREVTMworCisjaWZuZGVmIENUQU9fQ1JZUFRfREVTM19ICisjZGVmaW5lIENUQU9fQ1JZUFRfREVTM19ICisKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2RlczMuaD4KKyNkZWZpbmUgRGVzX1NldEtleSAgICAgd2NfRGVzX1NldEtleQorI2RlZmluZSBEZXNfU2V0SVYgICAgICB3Y19EZXNfU2V0SVYKKyNkZWZpbmUgRGVzX0NiY0VuY3J5cHQgd2NfRGVzX0NiY0VuY3J5cHQKKyNkZWZpbmUgRGVzX0NiY0RlY3J5cHQgd2NfRGVzX0NiY0RlY3J5cHQKKyNkZWZpbmUgRGVzX0VjYkVuY3J5cHQgd2NfRGVzX0VjYkVuY3J5cHQKKyNkZWZpbmUgRGVzX0NiY0RlY3J5cHRXaXRoS2V5ICB3Y19EZXNfQ2JjRGVjcnlwdFdpdGhLZXkKKyNkZWZpbmUgRGVzM19TZXRLZXkgICAgICAgICAgICB3Y19EZXMzX1NldEtleQorI2RlZmluZSBEZXMzX1NldElWICAgICAgICAgICAgIHdjX0RlczNfU2V0SVYKKyNkZWZpbmUgRGVzM19DYmNFbmNyeXB0ICAgICAgICB3Y19EZXMzX0NiY0VuY3J5cHQKKyNkZWZpbmUgRGVzM19DYmNEZWNyeXB0ICAgICAgICB3Y19EZXMzX0NiY0RlY3J5cHQKKyNkZWZpbmUgRGVzM19DYmNEZWNyeXB0V2l0aEtleSB3Y19EZXMzX0NiY0RlY3J5cHRXaXRoS2V5CisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICNkZWZpbmUgRGVzM0FzeW5jSW5pdCB3Y19EZXMzQXN5bmNJbml0CisgICAgI2RlZmluZSBEZXMzQXN5bmNGcmVlIHdjX0RlczNBc3luY0ZyZWUKKyNlbmRpZgorCisjZW5kaWYgLyogTk9fREVTMyAqLworI2VuZGlmIC8qIENUQU9fQ1JZUFRfREVTM19IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2RoLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9kaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZjU4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9kaC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qIGRoLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBOT19ESAorCisjaWZuZGVmIENUQU9fQ1JZUFRfREhfSAorI2RlZmluZSBDVEFPX0NSWVBUX0RIX0gKKworLyogZm9yIGRoIHJldmVyc2UgY29tcGF0aWJpbGl0eSAqLworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2RoLmg+CisjZGVmaW5lIEluaXREaEtleSAgICAgICAgIHdjX0luaXREaEtleQorI2RlZmluZSBGcmVlRGhLZXkgICAgICAgICB3Y19GcmVlRGhLZXkKKyNkZWZpbmUgRGhHZW5lcmF0ZUtleVBhaXIgd2NfRGhHZW5lcmF0ZUtleVBhaXIKKyNkZWZpbmUgRGhBZ3JlZSAgICAgICAgICAgd2NfRGhBZ3JlZQorI2RlZmluZSBEaEtleURlY29kZSAgICAgICB3Y19EaEtleURlY29kZQorI2RlZmluZSBEaFNldEtleSAgICAgICAgICB3Y19EaFNldEtleQorI2RlZmluZSBEaFBhcmFtc0xvYWQgICAgICB3Y19EaFBhcmFtc0xvYWQKKworI2VuZGlmIC8qIENUQU9fQ1JZUFRfREhfSCAqLworCisjZW5kaWYgLyogTk9fREggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvZHNhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9kc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGM4MTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvZHNhLmgKQEAgLTAsMCArMSwzMyBAQAorLyogZHNhLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBOT19EU0EKKworI2lmbmRlZiBDVEFPX0NSWVBUX0RTQV9ICisjZGVmaW5lIENUQU9fQ1JZUFRfRFNBX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2RzYS5oPgorCisjZW5kaWYgLyogQ1RBT19DUllQVF9EU0FfSCAqLworI2VuZGlmIC8qIE5PX0RTQSAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9lY2MuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2VjYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMWUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9lY2MuaApAQCAtMCwwICsxLDY5IEBACisvKiBlY2MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworI2lmZGVmIEhBVkVfRUNDCisKKyNpZm5kZWYgQ1RBT19DUllQVF9FQ0NfSAorI2RlZmluZSBDVEFPX0NSWVBUX0VDQ19ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9lY2MuaD4KKworLyogaW5jbHVkZXMgZm9yIGNvbXBhdGliaWxpdHkgKi8KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3R5cGVzLmg+CisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9pbnRlZ2VyLmg+CisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9yYW5kb20uaD4KKworLyogZm9yIGVjYyByZXZlcnNlIGNvbXBhdGliaWxpdHkgKi8KKyNpZmRlZiBIQVZFX0VDQworCSNkZWZpbmUgZWNjX21ha2Vfa2V5ICAgICAgd2NfZWNjX21ha2Vfa2V5CisJI2RlZmluZSBlY2Nfc2hhcmVkX3NlY3JldCB3Y19lY2Nfc2hhcmVkX3NlY3JldAorCSNkZWZpbmUgZWNjX3NpZ25faGFzaCAgICAgd2NfZWNjX3NpZ25faGFzaAorCSNkZWZpbmUgZWNjX3ZlcmlmeV9oYXNoICAgd2NfZWNjX3ZlcmlmeV9oYXNoCisJI2RlZmluZSBlY2NfaW5pdCAgICAgICAgICB3Y19lY2NfaW5pdAorCSNkZWZpbmUgZWNjX2ZyZWUgICAgICAgICAgd2NfZWNjX2ZyZWUKKwkjZGVmaW5lIGVjY19mcF9mcmVlICAgICAgIHdjX2VjY19mcF9mcmVlCisJI2RlZmluZSBlY2NfZXhwb3J0X3g5NjMgICB3Y19lY2NfZXhwb3J0X3g5NjMKKwkjZGVmaW5lIGVjY19zaXplICAgICAgICAgIHdjX2VjY19zaXplCisJI2RlZmluZSBlY2Nfc2lnX3NpemUgICAgICB3Y19lY2Nfc2lnX3NpemUKKwkjZGVmaW5lIGVjY19leHBvcnRfeDk2M19leCAgICAgIHdjX2VjY19leHBvcnRfeDk2M19leAorCSNkZWZpbmUgZWNjX2ltcG9ydF94OTYzICAgICAgICAgd2NfZWNjX2ltcG9ydF94OTYzCisJI2RlZmluZSBlY2NfaW1wb3J0X3ByaXZhdGVfa2V5ICB3Y19lY2NfaW1wb3J0X3ByaXZhdGVfa2V5CisJI2RlZmluZSBlY2NfcnNfdG9fc2lnICAgICAgICAgICB3Y19lY2NfcnNfdG9fc2lnCisJI2RlZmluZSBlY2NfaW1wb3J0X3JhdyAgICAgICAgICB3Y19lY2NfaW1wb3J0X3JhdworCSNkZWZpbmUgZWNjX2V4cG9ydF9wcml2YXRlX29ubHkgd2NfZWNjX2V4cG9ydF9wcml2YXRlX29ubHkKKworI2lmZGVmIEhBVkVfRUNDX0VOQ1JZUFQKKwkvKiBlY2MgZW5jcnlwdCAqLworCSNkZWZpbmUgZWNjX2N0eF9uZXcgICAgICAgICAgIHdjX2VjY19jdHhfbmV3CisJI2RlZmluZSBlY2NfY3R4X2ZyZWUgICAgICAgICAgd2NfZWNjX2N0eF9mcmVlCisJI2RlZmluZSBlY2NfY3R4X3Jlc2V0ICAgICAgICAgd2NfZWNjX2N0eF9yZXNldAorCSNkZWZpbmUgZWNjX2N0eF9nZXRfb3duX3NhbHQgIHdjX2VjY19jdHhfZ2V0X293bl9zYWx0CisJI2RlZmluZSBlY2NfY3R4X3NldF9wZWVyX3NhbHQgd2NfZWNjX2N0eF9zZXRfcGVlcl9zYWx0CisJI2RlZmluZSBlY2NfY3R4X3NldF9pbmZvICAgICAgd2NfZWNjX2N0eF9zZXRfaW5mbworCSNkZWZpbmUgZWNjX2VuY3J5cHQgICAgICAgICAgIHdjX2VjY19lbmNyeXB0CisJI2RlZmluZSBlY2NfZGVjcnlwdCAgICAgICAgICAgd2NfZWNjX2RlY3J5cHQKKyNlbmRpZiAvKiBIQVZFX0VDQ19FTkNSWVBUICovCisjZW5kaWYKKworI2VuZGlmIC8qIENUQU9fQ1JZUFRfRUNDX0ggKi8KKyNlbmRpZiAvKiBIQVZFX0VDQyAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9lcnJvci1jcnlwdC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvZXJyb3ItY3J5cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjFkZTAyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvZXJyb3ItY3J5cHQuaApAQCAtMCwwICsxLDMzIEBACisvKiBlcnJvci1jcnlwdC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKyNpZm5kZWYgQ1RBT19DUllQVF9FUlJPUl9ICisjZGVmaW5lIENUQU9fQ1JZUFRfRVJST1JfSAorCisvKiBmb3IgbmFtZSBjaGFuZ2UgYW5kIGZpcHMgY29tcGF0aWJpbGl0eSBAd2NfZmlwcyAqLworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2Vycm9yLWNyeXB0Lmg+CisjZGVmaW5lIENUYW9DcnlwdEVycm9yU3RyaW5nICAgIHdjX0Vycm9yU3RyaW5nCisjZGVmaW5lIENUYW9DcnlwdEdldEVycm9yU3RyaW5nIHdjX0dldEVycm9yU3RyaW5nCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX0VSUk9SX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvZmlwc190ZXN0LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9maXBzX3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjFkYTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvZmlwc190ZXN0LmgKQEAgLTAsMCArMSw1OSBAQAorLyogZmlwc190ZXN0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBDVEFPX0NSWVBUX0ZJUFNfVEVTVF9ICisjZGVmaW5lIENUQU9fQ1JZUFRfRklQU19URVNUX0gKKworI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvdHlwZXMuaD4KKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBLbm93biBBbnN3ZXIgVGVzdCBzdHJpbmcgaW5wdXRzIGFyZSBoZXgsIGludGVybmFsICovCitDWUFTU0xfTE9DQUwgaW50IERvS25vd25BbnN3ZXJUZXN0cyhjaGFyKiwgaW50KTsKKworCisvKiBGSVBTIGZhaWx1cmUgY2FsbGJhY2sgKi8KK3R5cGVkZWYgdm9pZCgqd29sZkNyeXB0X2ZpcHNfY2IpKGludCBvaywgaW50IGVyciwgY29uc3QgY2hhciogaGFzaCk7CisKKy8qIFB1YmxpYyBzZXQgZnVuY3Rpb24gKi8KK0NZQVNTTF9BUEkgaW50IHdvbGZDcnlwdF9TZXRDYl9maXBzKHdvbGZDcnlwdF9maXBzX2NiIGNiZik7CisKKy8qIFB1YmxpYyBnZXQgc3RhdHVzIGZ1bmN0aW9ucyAqLworQ1lBU1NMX0FQSSBpbnQgd29sZkNyeXB0X0dldFN0YXR1c19maXBzKHZvaWQpOworQ1lBU1NMX0FQSSBjb25zdCBjaGFyKiB3b2xmQ3J5cHRfR2V0Q29yZUhhc2hfZmlwcyh2b2lkKTsKKworI2lmZGVmIEhBVkVfRk9SQ0VfRklQU19GQUlMVVJFCisgICAgLyogUHVibGljIGZ1bmN0aW9uIHRvIGZvcmNlIGZhaWx1cmUgbW9kZSBmb3Igb3BlcmF0aW9uYWwgdGVzdGluZyAqLworICAgIENZQVNTTF9BUEkgaW50IHdvbGZDcnlwdF9TZXRTdGF0dXNfZmlwcyhpbnQpOworI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIENUQU9fQ1JZUFRfRklQU19URVNUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvaGMxMjguaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2hjMTI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4Mzg5MwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2hjMTI4LmgKQEAgLTAsMCArMSw0MCBAQAorLyogaGMxMjguaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisjaWZuZGVmIE5PX0hDMTI4CisKKyNpZm5kZWYgQ1RBT19DUllQVF9IQzEyOF9ICisjZGVmaW5lIENUQU9fQ1JZUFRfSEMxMjhfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaGMxMjguaD4KKworLyogZm9yIGhjMTI4IHJldmVyc2UgY29tcGF0aWJpbGl0eSAqLworI2lmZGVmIEhBVkVfSEMxMjgKKyAgICAjZGVmaW5lIEhjMTI4X1Byb2Nlc3Mgd2NfSGMxMjhfUHJvY2VzcworICAgICNkZWZpbmUgSGMxMjhfU2V0S2V5ICB3Y19IYzEyOF9TZXRLZXkKKyNlbmRpZgorCisjZW5kaWYgLyogQ1RBT19DUllQVF9IQzEyOF9IICovCisKKyNlbmRpZiAvKiBIQVZFX0hDMTI4ICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2htYWMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2htYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGZiNmZiCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvaG1hYy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qIGhtYWMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisjaWZuZGVmIE5PX0hNQUMKKworI2lmbmRlZiBDVEFPX0NSWVBUX0hNQUNfSAorI2RlZmluZSBDVEFPX0NSWVBUX0hNQUNfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaG1hYy5oPgorI2RlZmluZSBIbWFjU2V0S2V5IHdjX0htYWNTZXRLZXkKKyNkZWZpbmUgSG1hY1VwZGF0ZSB3Y19IbWFjVXBkYXRlCisjZGVmaW5lIEhtYWNGaW5hbCAgd2NfSG1hY0ZpbmFsCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICNkZWZpbmUgSG1hY0FzeW5jSW5pdCB3Y19IbWFjQXN5bmNJbml0CisgICAgI2RlZmluZSBIbWFjQXN5bmNGcmVlIHdjX0htYWNBc3luY0ZyZWUKKyNlbmRpZgorI2RlZmluZSBDeWFTU0xfR2V0SG1hY01heFNpemUgd29sZlNTTF9HZXRIbWFjTWF4U2l6ZQorI2lmZGVmIEhBVkVfSEtERgorICAgICNkZWZpbmUgSEtERiB3Y19IS0RGCisjZW5kaWYgLyogSEFWRV9IS0RGICovCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX0hNQUNfSCAqLworCisjZW5kaWYgLyogTk9fSE1BQyAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9pbnRlZ2VyLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9pbnRlZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlNTlhMwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2ludGVnZXIuaApAQCAtMCwwICsxLDM1IEBACisvKiBpbnRlZ2VyLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKy8qCisgKiBCYXNlZCBvbiBwdWJsaWMgZG9tYWluIExpYlRvbU1hdGggMC4zOCBieSBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAaWFodS5jYSwKKyAqIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKworI2lmbmRlZiBDVEFPX0NSWVBUX0lOVEVHRVJfSAorI2RlZmluZSBDVEFPX0NSWVBUX0lOVEVHRVJfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaW50ZWdlci5oPgorCisjZW5kaWYgIC8qIENUQU9fQ1JZUFRfSU5URUdFUl9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2xvZ2dpbmcuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L2xvZ2dpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2RjNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbG9nZ2luZy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIGxvZ2dpbmcuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworLyogc3VibWl0dGVkIGJ5IGVvZiAqLworCisKKyNpZm5kZWYgQ1lBU1NMX0xPR0dJTkdfSAorI2RlZmluZSBDWUFTU0xfTE9HR0lOR19ICisKKy8qIGZvciBmaXBzIGNvbXBhdGliaWxpdHkgQHdjX2ZpcHMgKi8KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9sb2dnaW5nLmg+CisjZGVmaW5lIENZQVNTTF9MRUFWRSBXT0xGU1NMX0xFQVZFCisjZGVmaW5lIENZQVNTTF9FUlJPUiBXT0xGU1NMX0VSUk9SCisjZGVmaW5lIENZQVNTTF9FTlRFUiBXT0xGU1NMX0VOVEVSCisjZGVmaW5lIENZQVNTTF9NU0cgICBXT0xGU1NMX01TRworLyogY2hlY2sgb2xkIG1hY3JvcyBwb3NzaWJseSBkZWNsYXJlZCAqLworI2lmIGRlZmluZWQoREVCVUdfQ1lBU1NMKSAmJiAhZGVmaW5lZChERUJVR19XT0xGU1NMKQorICAgICNkZWZpbmUgREVCVUdfV09MRlNTTAorI2VuZGlmCisKKyNlbmRpZiAvKiBDWUFTU0xfTE9HR0lOR19IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L21kMi5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbWQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxY2M2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L21kMi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIG1kMi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKy8qIGNoZWNrIGZvciBvbGQgbWFjcm8gKi8KKyNpZiAhZGVmaW5lZChDWUFTU0xfTUQyKSAmJiBkZWZpbmVkKFdPTEZTU0xfTUQyKQorICAgICNkZWZpbmUgQ1lBU1NMX01EMgorI2VuZGlmCisKKyNpZmRlZiBDWUFTU0xfTUQyCisKKyNpZm5kZWYgQ1RBT19DUllQVF9NRDJfSAorI2RlZmluZSBDVEFPX0NSWVBUX01EMl9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9tZDIuaD4KKworI2RlZmluZSBJbml0TWQyICAgd2NfSW5pdE1kMgorI2RlZmluZSBNZDJVcGRhdGUgd2NfTWQyVXBkYXRlCisjZGVmaW5lIE1kMkZpbmFsICB3Y19NZDJGaW5hbAorI2RlZmluZSBNZDJIYXNoICAgd2NfTWQySGFzaAorCisjZW5kaWYgLyogQ1RBT19DUllQVF9NRDJfSCAqLworI2VuZGlmIC8qIENZQVNTTF9NRDIgKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbWQ0LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9tZDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjNhNjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbWQ0LmgKQEAgLTAsMCArMSwzOCBAQAorLyogbWQ0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBOT19NRDQKKworI2lmbmRlZiBDVEFPX0NSWVBUX01ENF9ICisjZGVmaW5lIENUQU9fQ1JZUFRfTUQ0X0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L21kNC5oPgorCisjZGVmaW5lIEluaXRNZDQgICB3Y19Jbml0TWQ0CisjZGVmaW5lIE1kNFVwZGF0ZSB3Y19NZDRVcGRhdGUKKyNkZWZpbmUgTWQ0RmluYWwgIHdjX01kNEZpbmFsCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX01ENF9IICovCisKKyNlbmRpZiAvKiBOT19NRDQgKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbWQ1LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9tZDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Q5OWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbWQ1LmgKQEAgLTAsMCArMSw0NSBAQAorLyogbWQ1LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKyNpZm5kZWYgTk9fTUQ1CisKKyNpZm5kZWYgQ1RBT19DUllQVF9NRDVfSAorI2RlZmluZSBDVEFPX0NSWVBUX01ENV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9tZDUuaD4KKworI2lmbmRlZiBIQVZFX0ZJUFMKKyAgICAjZGVmaW5lIEluaXRNZDUgICB3Y19Jbml0TWQ1CisgICAgI2RlZmluZSBNZDVVcGRhdGUgd2NfTWQ1VXBkYXRlCisgICAgI2RlZmluZSBNZDVGaW5hbCAgd2NfTWQ1RmluYWwKKyAgICAjZGVmaW5lIE1kNUhhc2ggICB3Y19NZDVIYXNoCisjZWxzZQorICAgIC8qIHJlZGZpbmVkIG5hbWUgc28gdGhhdCBobWFjIGlzIGNhbGxpbmcgc2FtZSBmdW5jdGlvbiBuYW1lcyB3aXRoIGZpcHMgKi8KKyAgICAjZGVmaW5lIHdjX0luaXRNZDUgICBJbml0TWQ1CisgICAgI2RlZmluZSB3Y19NZDVVcGRhdGUgTWQ1VXBkYXRlCisgICAgI2RlZmluZSB3Y19NZDVGaW5hbCAgTWQ1RmluYWwKKyAgICAjZGVmaW5lIHdjX01kNUhhc2ggICBNZDVIYXNoCisjZW5kaWYKKworI2VuZGlmIC8qIENUQU9fQ1JZUFRfTUQ1X0ggKi8KKyNlbmRpZiAvKiBOT19NRDUgKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbWVtb3J5LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDg0YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbWVtb3J5LmgKQEAgLTAsMCArMSw0MiBAQAorLyogbWVtb3J5LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKy8qIHN1Ym1pdHRlZCBieSBlb2YgKi8KKworCisjaWZuZGVmIENZQVNTTF9NRU1PUllfSAorI2RlZmluZSBDWUFTU0xfTUVNT1JZX0gKKworCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvbWVtb3J5Lmg+CisjZGVmaW5lIEN5YVNTTF9NYWxsb2NfY2IgICAgIHdvbGZTU0xfTWFsbG9jX2NiCisjZGVmaW5lIEN5YVNTTF9GcmVlX2NiICAgICAgIHdvbGZTU0xfRnJlZV9jYgorI2RlZmluZSBDeWFTU0xfUmVhbGxvY19jYiAgICB3b2xmU1NMX1JlYWxsb2NfY2IKKyNkZWZpbmUgQ3lhU1NMX1NldEFsbG9jYXRvcnMgd29sZlNTTF9TZXRBbGxvY2F0b3JzCisKKy8qIFB1YmxpYyBpbiBjYXNlIHVzZXIgYXBwIHdhbnRzIHRvIHVzZSBYTUFMTE9DL1hGUkVFICovCisjZGVmaW5lIEN5YVNTTF9NYWxsb2MgIHdvbGZTU0xfTWFsbG9jCisjZGVmaW5lIEN5YVNTTF9GcmVlICAgIHdvbGZTU0xfRnJlZQorI2RlZmluZSBDeWFTU0xfUmVhbGxvYyB3b2xmU1NMX1JlYWxsb2MKKworI2VuZGlmIC8qIENZQVNTTF9NRU1PUllfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9taXNjLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9taXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxMWZjOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L21pc2MuaApAQCAtMCwwICsxLDMwIEBACisvKiBtaXNjLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBDVEFPX0NSWVBUX01JU0NfSAorI2RlZmluZSBDVEFPX0NSWVBUX01JU0NfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvbWlzYy5oPgorCisjZW5kaWYgLyogQ1RBT19DUllQVF9NSVNDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbXBpX2NsYXNzLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9tcGlfY2xhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzRiNzE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbXBpX2NsYXNzLmgKQEAgLTAsMCArMSwyNCBAQAorLyogbXBpX2NsYXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9tcGlfY2xhc3MuaD4KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvbXBpX3N1cGVyY2xhc3MuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L21waV9zdXBlcmNsYXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1ZDgwZQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L21waV9zdXBlcmNsYXNzLmgKQEAgLTAsMCArMSwyNyBAQAorLyogbXBpX3N1cGVyY2xhc3MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisvKiBzdXBlciBjbGFzcyBmaWxlIGZvciBQSyBhbGdvcyAqLworCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvbXBpX3N1cGVyY2xhc3MuaD4KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvcGtjczcuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3BrY3M3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2MDU2NwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3BrY3M3LmgKQEAgLTAsMCArMSw1MyBAQAorLyogcGtjczcuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisjaWZkZWYgSEFWRV9QS0NTNworCisjaWZuZGVmIENUQU9fQ1JZUFRfUEtDUzdfSAorI2RlZmluZSBDVEFPX0NSWVBUX1BLQ1M3X0gKKworLyogcHVsbCBpbiBjb21wYXRpYmlsaXR5IGZvciBvbGQgaW5jbHVkZXMgKi8KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3R5cGVzLmg+CisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9hc24uaD4KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L2Fzbl9wdWJsaWMuaD4KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3JhbmRvbS5oPgorI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvZGVzMy5oPgorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcGtjczcuaD4KKworLyogZm9yIHBrY3M3IHJldmVyc2UgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBTZXRDb250ZW50VHlwZSAgICAgIHdjX1NldENvbnRlbnRUeXBlCisjZGVmaW5lIEdldENvbnRlbnRUeXBlICAgICAgd2NfR2V0Q29udGVudFR5cGUKKyNkZWZpbmUgQ3JlYXRlUmVjaXBpZW50SW5mbyB3Y19DcmVhdGVSZWNpcGllbnRJbmZvCisjZGVmaW5lIFBLQ1M3X0luaXRXaXRoQ2VydCAgd2NfUEtDUzdfSW5pdFdpdGhDZXJ0CisjZGVmaW5lIFBLQ1M3X0ZyZWUgICAgICAgICAgd2NfUEtDUzdfRnJlZQorI2RlZmluZSBQS0NTN19FbmNvZGVEYXRhICAgIHdjX1BLQ1M3X0VuY29kZURhdGEKKyNkZWZpbmUgUEtDUzdfRW5jb2RlU2lnbmVkRGF0YSAgICB3Y19QS0NTN19FbmNvZGVTaWduZWREYXRhCisjZGVmaW5lIFBLQ1M3X1ZlcmlmeVNpZ25lZERhdGEgICAgd2NfUEtDUzdfVmVyaWZ5U2lnbmVkRGF0YQorI2RlZmluZSBQS0NTN19FbmNvZGVFbnZlbG9wZWREYXRhIHdjX1BLQ1M3X0VuY29kZUVudmVsb3BlZERhdGEKKyNkZWZpbmUgUEtDUzdfRGVjb2RlRW52ZWxvcGVkRGF0YSB3Y19QS0NTN19EZWNvZGVFbnZlbG9wZWREYXRhCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX1BLQ1M3X0ggKi8KKworI2VuZGlmIC8qIEhBVkVfUEtDUzcgKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvcG9seTEzMDUuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3BvbHkxMzA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0YmU2YwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3BvbHkxMzA1LmgKQEAgLTAsMCArMSwzOSBAQAorLyogcG9seTEzMDUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisjaWZkZWYgSEFWRV9QT0xZMTMwNQorCisjaWZuZGVmIENUQU9fQ1JZUFRfUE9MWTEzMDVfSAorI2RlZmluZSBDVEFPX0NSWVBUX1BPTFkxMzA1X0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvbHkxMzA1Lmg+CisKKy8qIGZvciBwb2x5MTMwNSByZXZlcnNlIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgUG9seTEzMDVTZXRLZXkgd2NfUG9seTEzMDVTZXRLZXkKKyNkZWZpbmUgUG9seTEzMDVVcGRhdGUgd2NfUG9seTEzMDVVcGRhdGUKKyNkZWZpbmUgUG9seTEzMDVGaW5hbCAgd2NfUG9seTEzMDVGaW5hbAorCisjZW5kaWYgLyogQ1RBT19DUllQVF9QT0xZMTMwNV9IICovCisKKyNlbmRpZiAvKiBIQVZFX1BPTFkxMzA1ICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3B3ZGJhc2VkLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9wd2RiYXNlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZGY0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9wd2RiYXNlZC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIHB3ZGJhc2VkLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBOT19QV0RCQVNFRAorCisjaWZuZGVmIENUQU9fQ1JZUFRfUFdEQkFTRURfSAorI2RlZmluZSBDVEFPX0NSWVBUX1BXREJBU0VEX0gKKworLyogZm9yIHB3ZGJhc2VkIHJldmVyc2UgY29tcGF0aWJpbGl0eSAqLworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3B3ZGJhc2VkLmg+CisjZGVmaW5lIFBCS0RGMSAgICAgICB3Y19QQktERjEKKyNkZWZpbmUgUEJLREYyICAgICAgIHdjX1BCS0RGMgorI2RlZmluZSBQS0NTMTJfUEJLREYgd2NfUEtDUzEyX1BCS0RGCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX1BXREJBU0VEX0ggKi8KKyNlbmRpZiAvKiBOT19QV0RCQVNFRCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9yYWJiaXQuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3JhYmJpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NWU0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9yYWJiaXQuaApAQCAtMCwwICsxLDQwIEBACisvKiByYWJiaXQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisjaWZuZGVmIE5PX1JBQkJJVAorCisjaWZuZGVmIENUQU9fQ1JZUFRfUkFCQklUX0gKKyNkZWZpbmUgQ1RBT19DUllQVF9SQUJCSVRfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcmFiYml0Lmg+CisKKy8qIGZvciByYWJiaXQgcmV2ZXJzZSBjb21wYXRpYmlsaXR5ICovCisjaWZuZGVmIE5PX1JBQkJJVAorICAgICNkZWZpbmUgUmFiYml0UHJvY2VzcyB3Y19SYWJiaXRQcm9jZXNzCisgICAgI2RlZmluZSBSYWJiaXRTZXRLZXkgIHdjX1JhYmJpdFNldEtleQorI2VuZGlmCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX1JBQkJJVF9IICovCisKKyNlbmRpZiAvKiBOT19SQUJCSVQgKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvcmFuZG9tLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9yYW5kb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGNhNTMyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvcmFuZG9tLmgKQEAgLTAsMCArMSwzOSBAQAorLyogcmFuZG9tLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBDVEFPX0NSWVBUX1JBTkRPTV9ICisjZGVmaW5lIENUQU9fQ1JZUFRfUkFORE9NX0gKKworICAgIC8qIGZvciByYW5kb20uaCBjb21wYXRpYmlsaXR5ICovCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3JhbmRvbS5oPgorICAgICNkZWZpbmUgSW5pdFJuZyAgICAgICAgICAgd2NfSW5pdFJuZworICAgICNkZWZpbmUgUk5HX0dlbmVyYXRlQmxvY2sgd2NfUk5HX0dlbmVyYXRlQmxvY2sKKyAgICAjZGVmaW5lIFJOR19HZW5lcmF0ZUJ5dGUgIHdjX1JOR19HZW5lcmF0ZUJ5dGUKKyAgICAjZGVmaW5lIEZyZWVSbmcgICAgICAgIHdjX0ZyZWVSbmcKKworCSNpZiBkZWZpbmVkKEhBVkVfSEFTSERSQkcpIHx8IGRlZmluZWQoTk9fUkM0KQorCSAgICAjZGVmaW5lIFJOR19IZWFsdGhUZXN0IHdjX1JOR19IZWFsdGhUZXN0CisJI2VuZGlmIC8qIEhBVkVfSEFTSERSQkcgfHwgTk9fUkM0ICovCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX1JBTkRPTV9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3JpcGVtZC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvcmlwZW1kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljMmZlZQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3JpcGVtZC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qIHJpcGVtZC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKworI2lmbmRlZiBDVEFPX0NSWVBUX1JJUEVNRF9ICisjZGVmaW5lIENUQU9fQ1JZUFRfUklQRU1FX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3JpcGVtZC5oPgorCisvKiBmb3IgcmlwZW1kIHJldmVyc2UgY29tcGF0aWJpbGl0eSAqLworI2lmZGVmIFdPTEZTU0xfUklQRU1ECisgICAgI2RlZmluZSBJbml0UmlwZU1kICAgd2NfSW5pdFJpcGVNZAorICAgICNkZWZpbmUgUmlwZU1kVXBkYXRlIHdjX1JpcGVNZFVwZGF0ZQorICAgICNkZWZpbmUgUmlwZU1kRmluYWwgIHdjX1JpcGVNZEZpbmFsCisjZW5kaWYKKworI2VuZGlmIC8qIENUQU9fQ1JZUFRfUklQRU1EX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvcnNhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9yc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YThiNjQzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvcnNhLmgKQEAgLTAsMCArMSw1OCBAQAorLyogcnNhLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKyNpZm5kZWYgTk9fUlNBCisKKyNpZm5kZWYgQ1RBT19DUllQVF9SU0FfSAorI2RlZmluZSBDVEFPX0NSWVBUX1JTQV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9yc2EuaD4KKy8qIGluY2x1ZGVzIGZvciB0aGVpciBjb21wYXRpYmlsaXR5ICovCisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9pbnRlZ2VyLmg+CisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9yYW5kb20uaD4KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3NldHRpbmdzLmg+CisKKyNkZWZpbmUgSW5pdFJzYUtleSAgICAgICB3Y19Jbml0UnNhS2V5CisjZGVmaW5lIEZyZWVSc2FLZXkgICAgICAgd2NfRnJlZVJzYUtleQorI2RlZmluZSBSc2FQdWJsaWNFbmNyeXB0IHdjX1JzYVB1YmxpY0VuY3J5cHQKKyNkZWZpbmUgUnNhUHJpdmF0ZURlY3J5cHRJbmxpbmUgd2NfUnNhUHJpdmF0ZURlY3J5cHRJbmxpbmUKKyNkZWZpbmUgUnNhUHJpdmF0ZURlY3J5cHQgICAgICAgd2NfUnNhUHJpdmF0ZURlY3J5cHQKKyNkZWZpbmUgUnNhU1NMX1NpZ24gICAgICAgICAgICAgd2NfUnNhU1NMX1NpZ24KKyNkZWZpbmUgUnNhU1NMX1ZlcmlmeUlubGluZSAgICAgd2NfUnNhU1NMX1ZlcmlmeUlubGluZQorI2RlZmluZSBSc2FTU0xfVmVyaWZ5ICAgICAgICAgICB3Y19Sc2FTU0xfVmVyaWZ5CisjZGVmaW5lIFJzYUVuY3J5cHRTaXplICAgICAgICAgIHdjX1JzYUVuY3J5cHRTaXplCisjZGVmaW5lIFJzYUZsYXR0ZW5QdWJsaWNLZXkgICAgIHdjX1JzYUZsYXR0ZW5QdWJsaWNLZXkKKworI2lmZGVmIFdPTEZTU0xfS0VZX0dFTgorICAgICNkZWZpbmUgTWFrZVJzYUtleSAgd2NfTWFrZVJzYUtleQorICAgICNkZWZpbmUgUnNhS2V5VG9EZXIgd2NfUnNhS2V5VG9EZXIKKyAgICAjZGVmaW5lIENoZWNrUHJvYmFibGVQcmltZSB3Y19DaGVja1Byb2JhYmxlUHJpbWUKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICNkZWZpbmUgUnNhQXN5bmNJbml0IHdjX1JzYUFzeW5jSW5pdAorICAgICNkZWZpbmUgUnNhQXN5bmNGcmVlIHdjX1JzYUFzeW5jRnJlZQorI2VuZGlmCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX1JTQV9IICovCisKKyNlbmRpZiAvKiBOT19SU0EgKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3NldHRpbmdzLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9zZXR0aW5ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYWMyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9zZXR0aW5ncy5oCkBAIC0wLDAgKzEsNzI1IEBACisvKiBzZXR0aW5ncy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisvKiBQbGFjZSBPUyBzcGVjaWZpYyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGRlZmluZXMsIGluY2x1ZGVzIGhlcmUsIHdpbGwgYmUKKyAgIGluY2x1ZGVkIGludG8gZXZlcnkgZmlsZSBiZWNhdXNlIHR5cGVzLmggaW5jbHVkZXMgaXQgKi8KKworCisjaWZuZGVmIENUQU9fQ1JZUFRfU0VUVElOR1NfSAorI2RlZmluZSBDVEFPX0NSWVBUX1NFVFRJTkdTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBJUEhPTkUgKi8KKy8qICNkZWZpbmUgSVBIT05FICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgVGhyZWFkWCAqLworLyogI2RlZmluZSBUSFJFQURYICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgTWljcml1bSB1Y09TICovCisvKiAjZGVmaW5lIE1JQ1JJVU0gKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBNYmVkICovCisvKiAjZGVmaW5lIE1CRUQgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBNaWNyb2NoaXAgUElDMzIgZXRoZXJuZXQgc3RhcnRlciBraXQgKi8KKy8qICNkZWZpbmUgTUlDUk9DSElQX1BJQzMyICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgTWljcm9jaGlwIFRDUC9JUCBzdGFjaywgdmVyc2lvbiA1ICovCisvKiAjZGVmaW5lIE1JQ1JPQ0hJUF9UQ1BJUF9WNSAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIE1pY3JvY2hpcCBUQ1AvSVAgc3RhY2ssIHZlcnNpb24gNiBvciBsYXRlciAqLworLyogI2RlZmluZSBNSUNST0NISVBfVENQSVAgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBQSUMzMk1aIENyeXB0byBFbmdpbmUgKi8KKy8qICNkZWZpbmUgQ1lBU1NMX01JQ1JPQ0hJUF9QSUMzMk1aICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgRnJlZVJUT1MgKi8KKy8qICNkZWZpbmUgRlJFRVJUT1MgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBGcmVlUlRPUyBXaW5kb3dzIFNpbXVsYXRvciAqLworLyogI2RlZmluZSBGUkVFUlRPU19XSU5TSU0gKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBSVElQICovCisvKiAjZGVmaW5lIEVCU05FVCAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIGx3aXAgKi8KKy8qICNkZWZpbmUgQ1lBU1NMX0xXSVAgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBDeWFTU0wgZm9yIGEgZ2FtZSBjb25zb2xlICovCisvKiAjZGVmaW5lIENZQVNTTF9HQU1FX0JVSUxEICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgQ3lhU1NMIGZvciBMU1IgKi8KKy8qICNkZWZpbmUgQ1lBU1NMX0xTUiAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIEN5YVNTTCBmb3IgRnJlZXNjYWxlIE1RWC9SVENTL01GUyAqLworLyogI2RlZmluZSBGUkVFU0NBTEVfTVFYICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgU1RNMzJGMiAqLworLyogI2RlZmluZSBDWUFTU0xfU1RNMzJGMiAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIFFMIFNFUCBzZXR0aW5ncyAqLworLyogI2RlZmluZSBDWUFTU0xfUUwgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBmb3IgRVJPQUQgKi8KKy8qICNkZWZpbmUgQ1lBU1NMX0VST0FEICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgZm9yIElBUiBFV0FSTSAqLworLyogI2RlZmluZSBDWUFTU0xfSUFSX0FSTSAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIFRJLVJUT1Mgc2V0dGluZ3MgKi8KKy8qICNkZWZpbmUgQ1lBU1NMX1RJUlRPUyAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIHdpdGggUGljb1RDUCAqLworLyogI2RlZmluZSBDWUFTU0xfUElDT1RDUCAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciBQaWNvVENQIGRlbW8gYnVuZGxlICovCisvKiAjZGVmaW5lIENZQVNTTF9QSUNPVENQX0RFTU8gKi8KKworI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvdmlzaWJpbGl0eS5oPgorCisjaWZkZWYgSVBIT05FCisgICAgI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKKyNlbmRpZgorCisKKyNpZmRlZiBDWUFTU0xfVVNFUl9TRVRUSU5HUworICAgICNpbmNsdWRlIDx1c2VyX3NldHRpbmdzLmg+CisjZW5kaWYKKworLyogZm9yIHJldmVyc2UgY29tcGF0aWJpbGl0eSBhZnRlciBuYW1lIGNoYW5nZSAqLworI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvc2V0dGluZ3NfY29tcC5oPgorCisjaWZkZWYgVEhSRUFEWAorICAgICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUWAorICAgICNpbmNsdWRlICJueF9hcGkuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0xXSVBfTkFUSVZFKSAvKiB1c2luZyBMd0lQIG5hdGl2ZSBUQ1Agc29ja2V0ICovCisgICAgI2RlZmluZSBDWUFTU0xfTFdJUAorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBTSU5HTEVfVEhSRUFERUQKKyAgICAjZGVmaW5lIENZQVNTTF9VU0VSX0lPCisgICAgI2RlZmluZSBOT19GSUxFU1lTVEVNCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ1lBU1NMX0lBUl9BUk0pCisgICAgI2RlZmluZSBOT19NQUlOX0RSSVZFUgorICAgICNkZWZpbmUgU0lOR0xFX1RIUkVBREVECisgICAgI2RlZmluZSBVU0VfQ0VSVF9CVUZGRVJTXzEwMjQKKyAgICAjZGVmaW5lIEJFTkNIX0VNQkVEREVECisgICAgI2RlZmluZSBOT19GSUxFU1lTVEVNCisgICAgI2RlZmluZSBOT19XUklURVYKKyAgICAjZGVmaW5lIENZQVNTTF9VU0VSX0lPCisgICAgI2RlZmluZSAgQkVOQ0hfRU1CRURERUQKKyNlbmRpZgorCisjaWZkZWYgTUlDUk9DSElQX1BJQzMyCisgICAgLyogI2RlZmluZSBDWUFTU0xfTUlDUk9DSElQX1BJQzMyTVogKi8KKyAgICAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorICAgICNkZWZpbmUgU0lOR0xFX1RIUkVBREVECisgICAgI2RlZmluZSBDWUFTU0xfVVNFUl9JTworICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBOT19ERVZfUkFORE9NCisgICAgI2RlZmluZSBOT19GSUxFU1lTVEVNCisgICAgI2RlZmluZSBVU0VfRkFTVF9NQVRICisgICAgI2RlZmluZSBURk1fVElNSU5HX1JFU0lTVEFOVAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENZQVNTTF9NSUNST0NISVBfUElDMzJNWikgfHwgZGVmaW5lZChXT0xGU1NMX01JQ1JPQ0hJUF9QSUMzMk1aKQorICAgICNpZm5kZWYgTk9fUElDMzJNWl9DUllQVAorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfUElDMzJNWl9DUllQVAorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fUElDMzJNWl9STkcKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1BJQzMyTVpfUk5HCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19QSUMzMk1aX0hBU0gKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1BJQzMyTVpfSEFTSAorICAgICNlbmRpZgorCisgICAgI2RlZmluZSBDWUFTU0xfQUVTX0NPVU5URVIKKyAgICAjZGVmaW5lIEhBVkVfQUVTR0NNCisgICAgI2RlZmluZSBOT19CSUdfSU5UCisjZW5kaWYKKworI2lmZGVmIE1JQ1JPQ0hJUF9UQ1BJUF9WNQorICAgIC8qIGluY2x1ZGUgdGltZXIgZnVuY3Rpb25zICovCisgICAgI2luY2x1ZGUgIlRDUElQIFN0YWNrL1RDUElQLmgiCisjZW5kaWYKKworI2lmZGVmIE1JQ1JPQ0hJUF9UQ1BJUAorICAgIC8qIGluY2x1ZGUgdGltZXIsIE5UUCBmdW5jdGlvbnMgKi8KKyAgICAjaWZkZWYgTUlDUk9DSElQX01QTEFCX0hBUk1PTlkKKyAgICAgICAgI2luY2x1ZGUgInRjcGlwL3RjcGlwLmgiCisgICAgI2Vsc2UKKyAgICAgICAgI2luY2x1ZGUgInN5c3RlbS9zeXN0ZW1fc2VydmljZXMuaCIKKyAgICAgICAgI2luY2x1ZGUgInRjcGlwL3NudHAuaCIKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgTUJFRAorICAgICNkZWZpbmUgQ1lBU1NMX1VTRVJfSU8KKyAgICAjZGVmaW5lIE5PX0ZJTEVTWVNURU0KKyAgICAjZGVmaW5lIE5PX0NFUlRTCisgICAgI2RlZmluZSBVU0VfQ0VSVF9CVUZGRVJTXzEwMjQKKyAgICAjZGVmaW5lIE5PX1dSSVRFVgorICAgICNkZWZpbmUgTk9fREVWX1JBTkRPTQorICAgICNkZWZpbmUgTk9fU0hBNTEyCisgICAgI2RlZmluZSBOT19ESAorICAgICNkZWZpbmUgTk9fRFNBCisgICAgI2RlZmluZSBOT19IQzEyOAorICAgICNkZWZpbmUgSEFWRV9FQ0MKKyAgICAjZGVmaW5lIE5PX1NFU1NJT05fQ0FDSEUKKyAgICAjZGVmaW5lIENZQVNTTF9DTVNJU19SVE9TCisjZW5kaWYKKworCisjaWZkZWYgQ1lBU1NMX0VST0FECisgICAgI2RlZmluZSBGUkVFU0NBTEVfTVFYCisgICAgI2RlZmluZSBGUkVFU0NBTEVfTU1DQVUKKyAgICAjZGVmaW5lIFNJTkdMRV9USFJFQURFRAorICAgICNkZWZpbmUgTk9fU1RESU9fRklMRVNZU1RFTQorICAgICNkZWZpbmUgQ1lBU1NMX0xFQU5QU0sKKyAgICAjZGVmaW5lIEhBVkVfTlVMTF9DSVBIRVIKKyAgICAjZGVmaW5lIE5PX09MRF9UTFMKKyAgICAjZGVmaW5lIE5PX0FTTgorICAgICNkZWZpbmUgTk9fQklHX0lOVAorICAgICNkZWZpbmUgTk9fUlNBCisgICAgI2RlZmluZSBOT19EU0EKKyAgICAjZGVmaW5lIE5PX0RICisgICAgI2RlZmluZSBOT19DRVJUUworICAgICNkZWZpbmUgTk9fUFdEQkFTRUQKKyAgICAjZGVmaW5lIE5PX0RFUzMKKyAgICAjZGVmaW5lIE5PX01ENAorICAgICNkZWZpbmUgTk9fUkM0CisgICAgI2RlZmluZSBOT19NRDUKKyAgICAjZGVmaW5lIE5PX1NFU1NJT05fQ0FDSEUKKyAgICAjZGVmaW5lIE5PX01BSU5fRFJJVkVSCisjZW5kaWYKKworI2lmZGVmIENZQVNTTF9QSUNPVENQCisgICAgI2RlZmluZSBlcnJubyBwaWNvX2VycgorICAgICNpbmNsdWRlICJwaWNvX2RlZmluZXMuaCIKKyAgICAjaW5jbHVkZSAicGljb19zdGFjay5oIgorICAgICNpbmNsdWRlICJwaWNvX2NvbnN0YW50cy5oIgorICAgICNkZWZpbmUgQ1VTVE9NX1JBTkRfR0VORVJBVEUgcGljb19yYW5kCisjZW5kaWYKKworI2lmZGVmIENZQVNTTF9QSUNPVENQX0RFTU8KKyAgICAjZGVmaW5lIENZQVNTTF9TVE0zMgorICAgICNkZWZpbmUgVVNFX0ZBU1RfTUFUSAorICAgICNkZWZpbmUgVEZNX1RJTUlOR19SRVNJU1RBTlQKKyAgICAjZGVmaW5lIFhNQUxMT0MocywgaCwgdHlwZSkgIFBJQ09fWkFMTE9DKChzKSkKKyAgICAjZGVmaW5lIFhGUkVFKHAsIGgsIHR5cGUpICAgIFBJQ09fRlJFRSgocCkpCisgICAgI2RlZmluZSBTSU5HTEVfVEhSRUFERUQKKyAgICAjZGVmaW5lIE5PX1dSSVRFVgorICAgICNkZWZpbmUgQ1lBU1NMX1VTRVJfSU8KKyAgICAjZGVmaW5lIE5PX0RFVl9SQU5ET00KKyAgICAjZGVmaW5lIE5PX0ZJTEVTWVNURU0KKyNlbmRpZgorCisjaWZkZWYgRlJFRVJUT1NfV0lOU0lNCisgICAgI2RlZmluZSBGUkVFUlRPUworICAgICNkZWZpbmUgVVNFX1dJTkRPV1NfQVBJCisjZW5kaWYKKworCisvKiBNaWNyaXVtIHdpbGwgdXNlIFZpc3VhbCBTdHVkaW8gZm9yIGNvbXBpbGF0aW9uIGJ1dCBub3QgdGhlIFdpbjMyIEFQSSAqLworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChNSUNSSVVNKSAmJiAhZGVmaW5lZChGUkVFUlRPUykgXAorICAgICAgICAmJiAhZGVmaW5lZChFQlNORVQpICYmICFkZWZpbmVkKENZQVNTTF9FUk9BRCkgJiYgIWRlZmluZWQoSU5USU1FX1JUT1MpCisgICAgI2RlZmluZSBVU0VfV0lORE9XU19BUEkKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKENZQVNTTF9MRUFOUFNLKSAmJiAhZGVmaW5lZChYTUFMTE9DX1VTRVIpCisgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0eXBlKSAgbWFsbG9jKChzKSkKKyAgICAjZGVmaW5lIFhGUkVFKHAsIGgsIHR5cGUpICAgIGZyZWUoKHApKQorICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgcmVhbGxvYygocCksIChuKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYTUFMTE9DX1VTRVIpICYmIGRlZmluZWQoU1NOX0JVSUxESU5HX0xJQllBU1NMKQorICAgICN1bmRlZiAgWE1BTExPQworICAgICNkZWZpbmUgWE1BTExPQyAgICAgeWFYTUFMTE9DCisgICAgI3VuZGVmICBYRlJFRQorICAgICNkZWZpbmUgWEZSRUUgICAgICAgeWFYRlJFRQorICAgICN1bmRlZiAgWFJFQUxMT0MKKyAgICAjZGVmaW5lIFhSRUFMTE9DICAgIHlhWFJFQUxMT0MKKyNlbmRpZgorCisKKyNpZmRlZiBGUkVFUlRPUworICAgICNpZm5kZWYgTk9fV1JJVEVWCisgICAgICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19TSEE1MTIKKyAgICAgICAgI2RlZmluZSBOT19TSEE1MTIKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0RICisgICAgICAgICNkZWZpbmUgTk9fREgKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0RTQQorICAgICAgICAjZGVmaW5lIE5PX0RTQQorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fSEMxMjgKKyAgICAgICAgI2RlZmluZSBOT19IQzEyOAorICAgICNlbmRpZgorCisgICAgI2lmbmRlZiBTSU5HTEVfVEhSRUFERUQKKyAgICAgICAgI2luY2x1ZGUgIkZyZWVSVE9TLmgiCisgICAgICAgICNpbmNsdWRlICJzZW1waHIuaCIKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ1lBU1NMX1RJUlRPUworICAgICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4CisgICAgI2RlZmluZSBOT19XUklURVYKKyAgICAjZGVmaW5lIE5PX0NZQVNTTF9ESVIKKyAgICAjZGVmaW5lIFVTRV9GQVNUX01BVEgKKyAgICAjZGVmaW5lIFRGTV9USU1JTkdfUkVTSVNUQU5UCisgICAgI2RlZmluZSBOT19ERVZfUkFORE9NCisgICAgI2RlZmluZSBOT19GSUxFU1lTVEVNCisgICAgI2RlZmluZSBVU0VfQ0VSVF9CVUZGRVJTXzIwNDgKKyAgICAjZGVmaW5lIE5PX0VSUk9SX1NUUklOR1MKKyAgICAjZGVmaW5lIFVTRVJfVElNRQorCisgICAgI2lmZGVmIF9fSUFSX1NZU1RFTVNfSUNDX18KKyAgICAgICAgI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDg5CisgICAgI2VsaWYgIWRlZmluZWQoX19HTlVDX18pCisgICAgICAgIC8qIFN1cHByZXNzIHRoZSBzc2xwcm8gd2FybmluZyAqLworICAgICAgICAjcHJhZ21hIGRpYWdfc3VwcHJlc3M9MTEKKyAgICAjZW5kaWYKKworICAgICNpbmNsdWRlIDx0aS9uZGsvbmV0dG9vbHMvbXl0aW1lL215dGltZS5oPgorI2VuZGlmCisKKyNpZmRlZiBFQlNORVQKKyAgICAjaW5jbHVkZSAicnRpcC5oIgorCisgICAgLyogI2RlZmluZSBERUJVR19DWUFTU0wgKi8KKyAgICAjZGVmaW5lIE5PX0NZQVNTTF9ESVIgIC8qIHRiZCAqLworCisgICAgI2lmIChQT0xMT1MpCisgICAgICAgICNkZWZpbmUgU0lOR0xFX1RIUkVBREVECisgICAgI2VuZGlmCisKKyAgICAjaWYgKFJUUExBVEZPUk0pCisgICAgICAgICNpZiAoIVJUUF9MSVRUTEVfRU5ESUFOKQorICAgICAgICAgICAgI2RlZmluZSBCSUdfRU5ESUFOX09SREVSCisgICAgICAgICNlbmRpZgorICAgICNlbHNlCisgICAgICAgICNpZiAoIUtTX0xJVFRMRV9FTkRJQU4pCisgICAgICAgICAgICAjZGVmaW5lIEJJR19FTkRJQU5fT1JERVIKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisKKyAgICAjaWYgKFdJTk1TUDMpCisgICAgICAgICN1bmRlZiBTSVpFT0ZfTE9ORworICAgICAgICAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorICAgICNlbHNlCisgICAgICAgICNpZiAhZGVmaW5lZChTSVpFT0ZfTE9ORykgJiYgIWRlZmluZWQoU0laRU9GX0xPTkdfTE9ORykKKyAgICAgICAgICAgICNlcnJvciBzZXR0aW5ncy5oIC0gcGxlYXNlIGltcGxlbWVudCBTSVpFT0ZfTE9ORyBhbmQgU0laRU9GX0xPTkdfTE9ORworICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKworICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0eXBlKSAoKHZvaWQgKilydHBfbWFsbG9jKChzKSwgU1NMX1BST19NQUxMT0MpKQorICAgICNkZWZpbmUgWEZSRUUocCwgaCwgdHlwZSkgKHJ0cF9mcmVlKHApKQorICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgcmVhbGxvYygocCksIChuKSkKKworI2VuZGlmIC8qIEVCU05FVCAqLworCisjaWZkZWYgQ1lBU1NMX0dBTUVfQlVJTEQKKyAgICAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorICAgICNpZiBkZWZpbmVkKF9fUFBVKSB8fCBkZWZpbmVkKF9fWEVOT04pCisgICAgICAgICNkZWZpbmUgQklHX0VORElBTl9PUkRFUgorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDWUFTU0xfTFNSCisgICAgI2RlZmluZSBIQVZFX1dFQlNFUlZFUgorICAgICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4CisgICAgI2RlZmluZSBDWUFTU0xfTE9XX01FTU9SWQorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBOT19TSEE1MTIKKyAgICAjZGVmaW5lIE5PX0RICisgICAgI2RlZmluZSBOT19EU0EKKyAgICAjZGVmaW5lIE5PX0hDMTI4CisgICAgI2RlZmluZSBOT19ERVZfUkFORE9NCisgICAgI2RlZmluZSBOT19DWUFTU0xfRElSCisgICAgI2RlZmluZSBOT19SQUJCSVQKKyAgICAjaWZuZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAgICAgI2RlZmluZSBMU1JfRlMKKyAgICAgICAgI2luY2x1ZGUgImluYy9od190eXBlcy5oIgorICAgICAgICAjaW5jbHVkZSAiZnMuaCIKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIENZQVNTTF9MV0lQCisgICAgI2luY2x1ZGUgPGVycm5vLmg+ICAvKiBmb3IgdGNwIGVycm5vICovCisgICAgI2RlZmluZSBDWUFTU0xfU0FGRVJUT1MKKyAgICAjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorICAgICAgICAvKiBlbnVtIHVzZXMgZW51bSAqLworICAgICAgICAjcHJhZ21hIGRpYWdfc3VwcHJlc3M9UGEwODkKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ1lBU1NMX1NBRkVSVE9TCisgICAgI2lmbmRlZiBTSU5HTEVfVEhSRUFERUQKKyAgICAgICAgI2luY2x1ZGUgIlNhZmVSVE9TL3NlbXBoci5oIgorICAgICNlbmRpZgorCisgICAgI2luY2x1ZGUgIlNhZmVSVE9TL2hlYXAuaCIKKyAgICAjZGVmaW5lIFhNQUxMT0MocywgaCwgdHlwZSkgIHB2UG9ydE1hbGxvYygocykpCisgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0eXBlKSAgICB2UG9ydEZyZWUoKHApKQorICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgcHZQb3J0UmVhbGxvYygocCksIChuKSkKKyNlbmRpZgorCisjaWZkZWYgQ1lBU1NMX0xPV19NRU1PUlkKKyAgICAjdW5kZWYgIFJTQV9MT1dfTUVNCisgICAgI2RlZmluZSBSU0FfTE9XX01FTQorICAgICN1bmRlZiAgQ1lBU1NMX1NNQUxMX1NUQUNLCisgICAgI2RlZmluZSBDWUFTU0xfU01BTExfU1RBQ0sKKyAgICAjdW5kZWYgIFRGTV9USU1JTkdfUkVTSVNUQU5UCisgICAgI2RlZmluZSBURk1fVElNSU5HX1JFU0lTVEFOVAorI2VuZGlmCisKKyNpZmRlZiBGUkVFU0NBTEVfTVFYCisgICAgI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKKyAgICAjZGVmaW5lIE5PX1dSSVRFVgorICAgICNkZWZpbmUgTk9fREVWX1JBTkRPTQorICAgICNkZWZpbmUgTk9fUkFCQklUCisgICAgI2RlZmluZSBOT19DWUFTU0xfRElSCisgICAgI2RlZmluZSBVU0VfRkFTVF9NQVRICisgICAgI2RlZmluZSBURk1fVElNSU5HX1JFU0lTVEFOVAorICAgICNkZWZpbmUgRlJFRVNDQUxFX0s3MF9STkdBCisgICAgLyogI2RlZmluZSBGUkVFU0NBTEVfSzUzX1JOR0IgKi8KKyAgICAjaW5jbHVkZSAibXF4LmgiCisgICAgI2lmbmRlZiBOT19GSUxFU1lTVEVNCisgICAgICAgICNpbmNsdWRlICJtZnMuaCIKKyAgICAgICAgI2luY2x1ZGUgImZpby5oIgorICAgICNlbmRpZgorICAgICNpZm5kZWYgU0lOR0xFX1RIUkVBREVECisgICAgICAgICNpbmNsdWRlICJtdXRleC5oIgorICAgICNlbmRpZgorCisgICAgI2RlZmluZSBYTUFMTE9DKHMsIGgsIHQpICAgICh2b2lkICopX21lbV9hbGxvY19zeXN0ZW0oKHMpKQorICAgICNkZWZpbmUgWEZSRUUocCwgaCwgdCkgICAgICB7dm9pZCogeHAgPSAocCk7IGlmICgoeHApKSBfbWVtX2ZyZWUoKHhwKSk7fQorICAgIC8qIE5vdGU6IE1RWCBoYXMgbm8gcmVhbGxvYywgdXNpbmcgZmFzdG1hdGggYWJvdmUgKi8KKyNlbmRpZgorCisjaWZkZWYgQ1lBU1NMX1NUTTMyRjIKKyAgICAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorICAgICNkZWZpbmUgTk9fREVWX1JBTkRPTQorICAgICNkZWZpbmUgTk9fQ1lBU1NMX0RJUgorICAgICNkZWZpbmUgTk9fUkFCQklUCisgICAgI2RlZmluZSBTVE0zMkYyX1JORworICAgICNkZWZpbmUgU1RNMzJGMl9DUllQVE8KKyAgICAjZGVmaW5lIEtFSUxfSU5UUklOU0lDUworI2VuZGlmCisKKyNpZmRlZiBNSUNSSVVNCisKKyAgICAjaW5jbHVkZSAic3RkbGliLmgiCisgICAgI2luY2x1ZGUgIm5ldF9jZmcuaCIKKyAgICAjaW5jbHVkZSAic3NsX2NmZy5oIgorICAgICNpbmNsdWRlICJuZXRfc2VjdXJlX29zLmgiCisKKyAgICAjZGVmaW5lIENZQVNTTF9UWVBFUworCisgICAgdHlwZWRlZiBDUFVfSU5UMDhVIGJ5dGU7CisgICAgdHlwZWRlZiBDUFVfSU5UMTZVIHdvcmQxNjsKKyAgICB0eXBlZGVmIENQVV9JTlQzMlUgd29yZDMyOworCisgICAgI2lmIChORVRfU0VDVVJFX01HUl9DRkdfV09SRF9TSVpFID09IENQVV9XT1JEX1NJWkVfMzIpCisgICAgICAgICNkZWZpbmUgU0laRU9GX0xPTkcgICAgICAgIDQKKyAgICAgICAgI3VuZGVmICBTSVpFT0ZfTE9OR19MT05HCisgICAgI2Vsc2UKKyAgICAgICAgI3VuZGVmICBTSVpFT0ZfTE9ORworICAgICAgICAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgICA4CisgICAgI2VuZGlmCisKKyAgICAjZGVmaW5lIFNUUklOR19VU0VSCisKKyAgICAjZGVmaW5lIFhTVFJMRU4ocHN0cikgKChDUFVfU0laRV9UKVN0cl9MZW4oKENQVV9DSEFSICopKHBzdHIpKSkKKyAgICAjZGVmaW5lIFhTVFJOQ1BZKHBzdHJfZGVzdCwgcHN0cl9zcmMsIGxlbl9tYXgpIFwKKyAgICAgICAgICAgICAgICAgICAgKChDUFVfQ0hBUiAqKVN0cl9Db3B5X04oKENQVV9DSEFSICopKHBzdHJfZGVzdCksIFwKKyAgICAgICAgICAgICAgICAgICAgIChDUFVfQ0hBUiAqKShwc3RyX3NyYyksIChDUFVfU0laRV9UKShsZW5fbWF4KSkpCisgICAgI2RlZmluZSBYU1RSTkNNUChwc3RyXzEsIHBzdHJfMiwgbGVuX21heCkgXAorICAgICAgICAgICAgICAgICAgICAoKENQVV9JTlQxNlMpU3RyX0NtcF9OKChDUFVfQ0hBUiAqKShwc3RyXzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAoQ1BVX0NIQVIgKikocHN0cl8yKSwgKENQVV9TSVpFX1QpKGxlbl9tYXgpKSkKKyAgICAjZGVmaW5lIFhTVFJTVFIocHN0ciwgcHN0cl9zcmNoKSBcCisgICAgICAgICAgICAgICAgICAgICgoQ1BVX0NIQVIgKilTdHJfU3RyKChDUFVfQ0hBUiAqKShwc3RyKSwgXAorICAgICAgICAgICAgICAgICAgICAgKENQVV9DSEFSICopKHBzdHJfc3JjaCkpKQorICAgICNkZWZpbmUgWE1FTVNFVChwbWVtLCBkYXRhX3ZhbCwgc2l6ZSkgXAorICAgICAgICAgICAgICAgICAgICAoKHZvaWQpTWVtX1NldCgodm9pZCAqKShwbWVtKSwgKENQVV9JTlQwOFUpIChkYXRhX3ZhbCksIFwKKyAgICAgICAgICAgICAgICAgICAgKENQVV9TSVpFX1QpKHNpemUpKSkKKyAgICAjZGVmaW5lIFhNRU1DUFkocGRlc3QsIHBzcmMsIHNpemUpICgodm9pZClNZW1fQ29weSgodm9pZCAqKShwZGVzdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICh2b2lkICopKHBzcmMpLCAoQ1BVX1NJWkVfVCkoc2l6ZSkpKQorICAgICNkZWZpbmUgWE1FTUNNUChwbWVtXzEsIHBtZW1fMiwgc2l6ZSkgXAorICAgICAgICAgICAgICAgICAgICgoKENQVV9CT09MRUFOKU1lbV9DbXAoKHZvaWQgKikocG1lbV8xKSwgKHZvaWQgKikocG1lbV8yKSwgXAorICAgICAgICAgICAgICAgICAgICAgKENQVV9TSVpFX1QpKHNpemUpKSkgPyBERUZfTk8gOiBERUZfWUVTKQorICAgICNkZWZpbmUgWE1FTU1PVkUgWE1FTUNQWQorCisjaWYgKE5FVF9TRUNVUkVfTUdSX0NGR19FTiA9PSBERUZfRU5BQkxFRCkKKyAgICAjZGVmaW5lIE1JQ1JJVU1fTUFMTE9DCisgICAgI2RlZmluZSBYTUFMTE9DKHMsIGgsIHR5cGUpICgodm9pZCAqKU5ldFNlY3VyZV9CbGtHZXQoKENQVV9JTlQwOFUpKHR5cGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ1BVX1NJWkVfVCkocyksICh2b2lkICopMCkpCisgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0eXBlKSAgIChOZXRTZWN1cmVfQmxrRnJlZSgoQ1BVX0lOVDA4VSkodHlwZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKHZvaWQgKikwKSkKKyAgICAjZGVmaW5lIFhSRUFMTE9DKHAsIG4sIGgsIHQpIHJlYWxsb2MoKHApLCAobikpCisjZW5kaWYKKworICAgICNpZiAoTkVUX1NFQ1VSRV9NR1JfQ0ZHX0ZTX0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAjdW5kZWYgIE5PX0ZJTEVTWVNURU0KKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIE5PX0ZJTEVTWVNURU0KKyAgICAjZW5kaWYKKworICAgICNpZiAoU1NMX0NGR19UUkFDRV9MRVZFTCA9PSBDWUFTU0xfVFJBQ0VfTEVWRUxfREJHKQorICAgICAgICAjZGVmaW5lIERFQlVHX0NZQVNTTAorICAgICNlbHNlCisgICAgICAgICN1bmRlZiAgREVCVUdfQ1lBU1NMCisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfT1BFTlNTTF9FTiA9PSBERUZfRU5BQkxFRCkKKyAgICAgICAgI2RlZmluZSBPUEVOU1NMX0VYVFJBCisgICAgI2Vsc2UKKyAgICAgICAgI3VuZGVmICBPUEVOU1NMX0VYVFJBCisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfTVVMVElfVEhSRUFEX0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAjdW5kZWYgIFNJTkdMRV9USFJFQURFRAorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgU0lOR0xFX1RIUkVBREVECisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfREhfRU4gPT0gREVGX0VOQUJMRUQpCisgICAgICAgICN1bmRlZiAgTk9fREgKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIE5PX0RICisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfRFNBX0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAjdW5kZWYgIE5PX0RTQQorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgTk9fRFNBCisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfUFNLX0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAjdW5kZWYgIE5PX1BTSworICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgTk9fUFNLCisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfM0RFU19FTiA9PSBERUZfRU5BQkxFRCkKKyAgICAgICAgI3VuZGVmICBOT19ERVMzCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBOT19ERVMzCisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfQUVTX0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAjdW5kZWYgIE5PX0FFUworICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgTk9fQUVTCisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfUkM0X0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAjdW5kZWYgIE5PX1JDNAorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgTk9fUkM0CisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfUkFCQklUX0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAjdW5kZWYgIE5PX1JBQkJJVAorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgTk9fUkFCQklUCisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfSEMxMjhfRU4gPT0gREVGX0VOQUJMRUQpCisgICAgICAgICN1bmRlZiAgTk9fSEMxMjgKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIE5PX0hDMTI4CisgICAgI2VuZGlmCisKKyAgICAjaWYgKENQVV9DRkdfRU5ESUFOX1RZUEUgPT0gQ1BVX0VORElBTl9UWVBFX0JJRykKKyAgICAgICAgI2RlZmluZSBCSUdfRU5ESUFOX09SREVSCisgICAgI2Vsc2UKKyAgICAgICAgI3VuZGVmICBCSUdfRU5ESUFOX09SREVSCisgICAgICAgICNkZWZpbmUgTElUVExFX0VORElBTl9PUkRFUgorICAgICNlbmRpZgorCisgICAgI2lmIChTU0xfQ0ZHX01ENF9FTiA9PSBERUZfRU5BQkxFRCkKKyAgICAgICAgI3VuZGVmICBOT19NRDQKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIE5PX01ENAorICAgICNlbmRpZgorCisgICAgI2lmIChTU0xfQ0ZHX1dSSVRFVl9FTiA9PSBERUZfRU5BQkxFRCkKKyAgICAgICAgI3VuZGVmICBOT19XUklURVYKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIE5PX1dSSVRFVgorICAgICNlbmRpZgorCisgICAgI2lmIChTU0xfQ0ZHX1VTRVJfUk5HX1NFRURfRU4gPT0gREVGX0VOQUJMRUQpCisgICAgICAgICNkZWZpbmUgTk9fREVWX1JBTkRPTQorICAgICNlbHNlCisgICAgICAgICN1bmRlZiAgTk9fREVWX1JBTkRPTQorICAgICNlbmRpZgorCisgICAgI2lmIChTU0xfQ0ZHX1VTRVJfSU9fRU4gPT0gREVGX0VOQUJMRUQpCisgICAgICAgICNkZWZpbmUgQ1lBU1NMX1VTRVJfSU8KKyAgICAjZWxzZQorICAgICAgICAjdW5kZWYgIENZQVNTTF9VU0VSX0lPCisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfRFlOQU1JQ19CVUZGRVJTX0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAjdW5kZWYgIExBUkdFX1NUQVRJQ19CVUZGRVJTCisgICAgICAgICN1bmRlZiAgU1RBVElDX0NIVU5LU19PTkxZCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBMQVJHRV9TVEFUSUNfQlVGRkVSUworICAgICAgICAjZGVmaW5lIFNUQVRJQ19DSFVOS1NfT05MWQorICAgICNlbmRpZgorCisgICAgI2lmIChTU0xfQ0ZHX0RFUl9MT0FEX0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAjZGVmaW5lICBDWUFTU0xfREVSX0xPQUQKKyAgICAjZWxzZQorICAgICAgICAjdW5kZWYgICBDWUFTU0xfREVSX0xPQUQKKyAgICAjZW5kaWYKKworICAgICNpZiAoU1NMX0NGR19EVExTX0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAjZGVmaW5lICBDWUFTU0xfRFRMUworICAgICNlbHNlCisgICAgICAgICN1bmRlZiAgIENZQVNTTF9EVExTCisgICAgI2VuZGlmCisKKyAgICAjaWYgKFNTTF9DRkdfQ0FMTEJBQ0tTX0VOID09IERFRl9FTkFCTEVEKQorICAgICAgICAgI2RlZmluZSBDWUFTU0xfQ0FMTEJBQ0tTCisgICAgI2Vsc2UKKyAgICAgICAgICN1bmRlZiAgQ1lBU1NMX0NBTExCQUNLUworICAgICNlbmRpZgorCisgICAgI2lmIChTU0xfQ0ZHX0ZBU1RfTUFUSF9FTiA9PSBERUZfRU5BQkxFRCkKKyAgICAgICAgICNkZWZpbmUgVVNFX0ZBU1RfTUFUSAorICAgICNlbHNlCisgICAgICAgICAjdW5kZWYgIFVTRV9GQVNUX01BVEgKKyAgICAjZW5kaWYKKworICAgICNpZiAoU1NMX0NGR19URk1fVElNSU5HX1JFU0lTVEFOVF9FTiA9PSBERUZfRU5BQkxFRCkKKyAgICAgICAgICNkZWZpbmUgVEZNX1RJTUlOR19SRVNJU1RBTlQKKyAgICAjZWxzZQorICAgICAgICAgI3VuZGVmICBURk1fVElNSU5HX1JFU0lTVEFOVAorICAgICNlbmRpZgorCisjZW5kaWYgLyogTUlDUklVTSAqLworCisKKyNpZmRlZiBDWUFTU0xfUUwKKyAgICAjaWZuZGVmIENZQVNTTF9TRVAKKyAgICAgICAgI2RlZmluZSBDWUFTU0xfU0VQCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBPUEVOU1NMX0VYVFJBCisgICAgICAgICNkZWZpbmUgT1BFTlNTTF9FWFRSQQorICAgICNlbmRpZgorICAgICNpZm5kZWYgU0VTU0lPTl9DRVJUUworICAgICAgICAjZGVmaW5lIFNFU1NJT05fQ0VSVFMKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEhBVkVfQUVTQ0NNCisgICAgICAgICNkZWZpbmUgSEFWRV9BRVNDQ00KKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEFUT01JQ19VU0VSCisgICAgICAgICNkZWZpbmUgQVRPTUlDX1VTRVIKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIENZQVNTTF9ERVJfTE9BRAorICAgICAgICAjZGVmaW5lIENZQVNTTF9ERVJfTE9BRAorICAgICNlbmRpZgorICAgICNpZm5kZWYgS0VFUF9QRUVSX0NFUlQKKyAgICAgICAgI2RlZmluZSBLRUVQX1BFRVJfQ0VSVAorICAgICNlbmRpZgorICAgICNpZm5kZWYgSEFWRV9FQ0MKKyAgICAgICAgI2RlZmluZSBIQVZFX0VDQworICAgICNlbmRpZgorICAgICNpZm5kZWYgU0VTU0lPTl9JTkRFWAorICAgICAgICAjZGVmaW5lIFNFU1NJT05fSU5ERVgKKyAgICAjZW5kaWYKKyNlbmRpZiAvKiBDWUFTU0xfUUwgKi8KKworCisjaWYgIWRlZmluZWQoWE1BTExPQ19VU0VSKSAmJiAhZGVmaW5lZChNSUNSSVVNX01BTExPQykgJiYgXAorICAgICFkZWZpbmVkKENZQVNTTF9MRUFOUFNLKSAmJiAhZGVmaW5lZChOT19DWUFTU0xfTUVNT1JZKQorICAgICNkZWZpbmUgVVNFX0NZQVNTTF9NRU1PUlkKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpICYmICFkZWZpbmVkKE5PX0NFUlRTKQorICAgICN1bmRlZiAgS0VFUF9QRUVSX0NFUlQKKyAgICAjZGVmaW5lIEtFRVBfUEVFUl9DRVJUCisjZW5kaWYKKworCisvKiBzdHJlYW0gY2lwaGVycyBleGNlcHQgYXJjNCBuZWVkIDMyYml0IGFsaWdubWVudCwgaW50ZWwgb2sgd2l0aG91dCAqLworI2lmbmRlZiBYU1RSRUFNX0FMSUdOTUVOVAorICAgICNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX19pMzg2X18pCisgICAgICAgICNkZWZpbmUgTk9fWFNUUkVBTV9BTElHTk1FTlQKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIFhTVFJFQU1fQUxJR05NRU5UCisgICAgI2VuZGlmCisjZW5kaWYKKworCisvKiBGcmVlU2NhbGUgTU1DQVUgaGFyZHdhcmUgY3J5cHRvIGhhcyA0IGJ5dGUgYWxpZ25tZW50ICovCisjaWZkZWYgRlJFRVNDQUxFX01NQ0FVCisgICAgI2RlZmluZSBDWUFTU0xfTU1DQVVfQUxJR05NRU5UIDQKKyNlbmRpZgorCisvKiBpZiB1c2luZyBoYXJkd2FyZSBjcnlwdG8gYW5kIGhhdmUgYWxpZ25tZW50IHJlcXVpcmVtZW50cywgc3BlY2lmeSB0aGUKKyAgIHJlcXVpcmVtZW50IGhlcmUuICBUaGUgcmVjb3JkIGhlYWRlciBvZiBTU0wvVExTIHdpbGwgcHJ2ZW50IGVhc3kgYWxpZ25tZW50LgorICAgVGhpcyBoaW50IHRyaWVzIHRvIGhlbHAgYXMgbXVjaCBhcyBwb3NzaWJsZS4gICovCisjaWZuZGVmIENZQVNTTF9HRU5FUkFMX0FMSUdOTUVOVAorICAgICNpZmRlZiBDWUFTU0xfQUVTTkkKKyAgICAgICAgI2RlZmluZSBDWUFTU0xfR0VORVJBTF9BTElHTk1FTlQgMTYKKyAgICAjZWxpZiBkZWZpbmVkKFhTVFJFQU1fQUxJR05NRU5UKQorICAgICAgICAjZGVmaW5lIENZQVNTTF9HRU5FUkFMX0FMSUdOTUVOVCAgNAorICAgICNlbGlmIGRlZmluZWQoRlJFRVNDQUxFX01NQ0FVKQorICAgICAgICAjZGVmaW5lIENZQVNTTF9HRU5FUkFMX0FMSUdOTUVOVCAgQ1lBU1NMX01NQ0FVX0FMSUdOTUVOVAorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgQ1lBU1NMX0dFTkVSQUxfQUxJR05NRU5UICAwCisgICAgI2VuZGlmCisjZW5kaWYKKworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorICAgICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjIyNTkpIC8qIGV4cGxpY2l0IGNhc3RzIHRvIHNtYWxsZXIgc2l6ZXMsIGRpc2FibGUgKi8KKyNlbmRpZgorCisKKy8qIFBsYWNlIGFueSBvdGhlciBmbGFncyBvciBkZWZpbmVzIGhlcmUgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIENUQU9fQ1JZUFRfU0VUVElOR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvc2V0dGluZ3NfY29tcC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvc2V0dGluZ3NfY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NjVlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9zZXR0aW5nc19jb21wLmgKQEAgLTAsMCArMSw3MiBAQAorLyogc2V0dGluZ3NfY29tcC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaWZuZGVmIENUQU9fQ1JZUFRfU0VUVElOR1NfQ19ICisjZGVmaW5lIENUQU9fQ1JZUFRfU0VUVElOR1NfQ19ICisKKworLyogc2luY2UgZmlwcyBvdmVycmlkZXMgcnNhLmggbWFwIGNvbXBhdGliaWxpdHkgaGVyZSAqLworI2lmICFkZWZpbmVkKE5PX1JTQSkKKwkjaWZkZWYgV09MRlNTTF9LRVlfR0VOCisJICAgICNkZWZpbmUgUnNhS2V5VG9EZXIgd2NfUnNhS2V5VG9EZXIKKwkjZW5kaWYKKworCSNkZWZpbmUgUnNhUHJpdmF0ZUtleURlY29kZSAgIHdjX1JzYVByaXZhdGVLZXlEZWNvZGUKKwkjZGVmaW5lIFJzYVB1YmxpY0tleURlY29kZSAgICB3Y19Sc2FQdWJsaWNLZXlEZWNvZGUKKwkjZGVmaW5lIFJzYVB1YmxpY0tleURlY29kZVJhdyB3Y19Sc2FQdWJsaWNLZXlEZWNvZGVSYXcKKyNlbmRpZiAvKiBoYXZlIHJzYSBhbmQgSEFWRV9GSVBTICovCisKKy8qIE1hY3JvIHJlZGVmaW5pdGlvbnMgZm9yIGNvbXBhdGliaWxpdHkgKi8KKyNpZmRlZiBIQVZFX05UUlUKKyAgICAjZGVmaW5lIE1ha2VOdHJ1Q2VydCB3Y19NYWtlTnRydUNlcnQKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9TSEE1MTIpICYmICFkZWZpbmVkKENZQVNTTF9TSEE1MTIpCisgICAgI2RlZmluZSBDWUFTU0xfU0hBNTEyCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfU0hBMzg0KSAmJiAhZGVmaW5lZChDWUFTU0xfU0hBMzg0KQorICAgICNkZWZpbmUgQ1lBU1NMX1NIQTM4NAorI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0xFQU5QU0spICYmICFkZWZpbmVkKENZQVNTTF9MRUFOUFNLKQorICAgICNkZWZpbmUgQ1lBU1NMX0xFQU5QU0sKKyNlbmRpZgorI2lmIGRlZmluZWQoTk9fV09MRlNTTF9NRU1PUlkpICYmICFkZWZpbmVkKE5PX0NZQVNTTF9NRU1PUlkpCisgICAgI2RlZmluZSBOT19DWUFTU0xfTUVNT1JZCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfS0VZX0dFTikgJiYgIWRlZmluZWQoQ1lBU1NMX0tFWV9HRU4pCisgICAgI2RlZmluZSBDWUFTU0xfS0VZX0dFTgorI2VuZGlmCisKKy8qIEFFUyAqLworI2lmIGRlZmluZWQoV09MRlNTTF9BRVNfRElSRUNUKSAmJiAhZGVmaW5lZChDWUFTU0xfQUVTX0RJUkVDVCkKKyAgICAjZGVmaW5lIENZQVNTTF9BRVNfRElSRUNUCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQUVTX0NPVU5URVIpICYmICFkZWZpbmVkKENZQVNTTF9BRVNfQ09VTlRFUikKKyAgICAjZGVmaW5lIENZQVNTTF9BRVNfQ09VTlRFUgorI2VuZGlmCisKKy8qIERFUyAqLworI2lmIGRlZmluZWQoV09MRlNTTF9ERVNfRUNCKSAmJiAhZGVmaW5lZChDWUFTU0xfREVTX0VDQikKKyAgICAjZGVmaW5lIENZQVNTTF9ERVNfRUNCCisjZW5kaWYKKworI2VuZGlmIC8qIENUQU9fQ1JZUFRfU0VUVElOR1NfQ19IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3NoYS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvc2hhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiOTM0MgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3NoYS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIHNoYS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKyNpZm5kZWYgTk9fU0hBCisKKyNpZm5kZWYgQ1RBT19DUllQVF9TSEFfSAorI2RlZmluZSBDVEFPX0NSWVBUX1NIQV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zaGEuaD4KKyNkZWZpbmUgSW5pdFNoYSAgIHdjX0luaXRTaGEKKyNkZWZpbmUgU2hhVXBkYXRlIHdjX1NoYVVwZGF0ZQorI2RlZmluZSBTaGFGaW5hbCAgd2NfU2hhRmluYWwKKyNkZWZpbmUgU2hhSGFzaCAgIHdjX1NoYUhhc2gKKworI2VuZGlmIC8qIENUQU9fQ1JZUFRfU0hBX0ggKi8KKyNlbmRpZiAvKiBOT19TSEEgKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvc2hhMjU2LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC9zaGEyNTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmZiN2MwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvc2hhMjU2LmgKQEAgLTAsMCArMSw0NiBAQAorLyogc2hhMjU2LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworCisKKyNpZm5kZWYgTk9fU0hBMjU2CisKKyNpZm5kZWYgQ1RBT19DUllQVF9TSEEyNTZfSAorI2RlZmluZSBDVEFPX0NSWVBUX1NIQTI1Nl9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zaGEyNTYuaD4KKyNkZWZpbmUgSW5pdFNoYTI1NiAgIHdjX0luaXRTaGEyNTYKKyNkZWZpbmUgU2hhMjU2VXBkYXRlIHdjX1NoYTI1NlVwZGF0ZQorI2RlZmluZSBTaGEyNTZGaW5hbCAgd2NfU2hhMjU2RmluYWwKKyNkZWZpbmUgU2hhMjU2SGFzaCAgIHdjX1NoYTI1Nkhhc2gKKworI2lmZGVmIFdPTEZTU0xfU0hBMjI0CisgICAgI2RlZmluZSBJbml0U2hhMjI0ICAgd2NfSW5pdFNoYTIyNAorICAgICNkZWZpbmUgU2hhMjI0VXBkYXRlIHdjX1NoYTIyNFVwZGF0ZQorICAgICNkZWZpbmUgU2hhMjI0RmluYWwgIHdjX1NoYTIyNEZpbmFsCisgICAgI2RlZmluZSBTaGEyMjRIYXNoICAgd2NfU2hhMjI0SGFzaAorI2VuZGlmCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX1NIQTI1Nl9IICovCisjZW5kaWYgLyogTk9fU0hBMjU2ICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3NoYTUxMi5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvc2hhNTEyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2NzlhNQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3NoYTUxMi5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIHNoYTUxMi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKyNpZm5kZWYgQ1RBT19DUllQVF9TSEE1MTJfSAorI2RlZmluZSBDVEFPX0NSWVBUX1NIQTUxMl9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zaGE1MTIuaD4KKyNkZWZpbmUgSW5pdFNoYTUxMiAgIHdjX0luaXRTaGE1MTIKKyNkZWZpbmUgU2hhNTEyVXBkYXRlIHdjX1NoYTUxMlVwZGF0ZQorI2RlZmluZSBTaGE1MTJGaW5hbCAgd2NfU2hhNTEyRmluYWwKKyNkZWZpbmUgU2hhNTEySGFzaCAgIHdjX1NoYTUxMkhhc2gKKworI2lmIGRlZmluZWQoV09MRlNTTF9TSEEzODQpIHx8IGRlZmluZWQoSEFWRV9BRVNHQ00pCisgICAgI2RlZmluZSBJbml0U2hhMzg0ICAgd2NfSW5pdFNoYTM4NAorICAgICNkZWZpbmUgU2hhMzg0VXBkYXRlIHdjX1NoYTM4NFVwZGF0ZQorICAgICNkZWZpbmUgU2hhMzg0RmluYWwgIHdjX1NoYTM4NEZpbmFsCisgICAgI2RlZmluZSBTaGEzODRIYXNoICAgd2NfU2hhMzg0SGFzaAorI2VuZGlmIC8qIFdPTEZTU0xfU0hBMzg0ICovCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX1NIQTUxMl9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3RmbS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvdGZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzNzkzNAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3RmbS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qIHRmbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKy8qCisgKiBCYXNlZCBvbiBwdWJsaWMgZG9tYWluIFRvbXNGYXN0TWF0aCAwLjEwIGJ5IFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BpYWh1LmNhLAorICogaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworCisvKioKKyAqICBFZGl0ZWQgYnkgTW9pc8OpcyBHdWltYXLDo2VzIChtb2lzZXMuZ3VpbWFyYWVzQHBob2VidXMuY29tLmJyKQorICogIHRvIGZpdCBDeWFTU0wncyBuZWVkcy4KKyAqLworCisKKyNpZm5kZWYgQ1RBT19DUllQVF9URk1fSAorI2RlZmluZSBDVEFPX0NSWVBUX1RGTV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90Zm0uaD4KKworI2VuZGlmICAvKiBDVEFPX0NSWVBUX1RGTV9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3R5cGVzLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NjUwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC90eXBlcy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qIHR5cGVzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBDVEFPX0NSWVBUX1RZUEVTX0gKKyNkZWZpbmUgQ1RBT19DUllQVF9UWVBFU19ICisKKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3djX3BvcnQuaD4KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3NldHRpbmdzLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworLyogY29tcGF0aWJpbGl0eSBtYWNyb3MgKi8KKyNkZWZpbmUgQ1lBU1NMX1dPUkRfU0laRSAgICBXT0xGU1NMX1dPUkRfU0laRQorI2RlZmluZSBDWUFTU0xfQklUX1NJWkUgICAgIFdPTEZTU0xfQklUX1NJWkUKKyNkZWZpbmUgQ1lBU1NMX01BWF8xNkJJVCAgICBXT0xGU1NMX01BWF8xNkJJVAorI2RlZmluZSBDWUFTU0xfTUFYX0VSUk9SX1NaIFdPTEZTU0xfTUFYX0VSUk9SX1NaCisjZGVmaW5lIGN5YXNzbF93b3JkICAgICAgICAgd29sZnNzbF93b3JkCisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX1RZUEVTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvdmlzaWJpbGl0eS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvdmlzaWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTJjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2N0YW9jcnlwdC92aXNpYmlsaXR5LmgKQEAgLTAsMCArMSw3MyBAQAorLyogdmlzaWJpbGl0eS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisvKiBWaXNpYmlsaXR5IGNvbnRyb2wgbWFjcm9zICovCisKKyNpZm5kZWYgQ1RBT19DUllQVF9WSVNJQklMSVRZX0gKKyNkZWZpbmUgQ1RBT19DUllQVF9WSVNJQklMSVRZX0gKKworLyogZmlwcyBjb21wYXRpYmlsaXR5IEB3Y19maXBzICovCisjaWZuZGVmIEhBVkVfRklQUworICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC92aXNpYmlsaXR5Lmg+CisgICAgI2RlZmluZSBDWUFTU0xfQVBJICAgV09MRlNTTF9BUEkKKwkjZGVmaW5lIENZQVNTTF9MT0NBTCBXT0xGU1NMX0xPQ0FMCisjZWxzZQorLyogQ1lBU1NMX0FQSSBpcyB1c2VkIGZvciB0aGUgcHVibGljIEFQSSBzeW1ib2xzLgorICAgICAgICBJdCBlaXRoZXIgaW1wb3J0cyBvciBleHBvcnRzIChvciBkb2VzIG5vdGhpbmcgZm9yIHN0YXRpYyBidWlsZHMpCisKKyAgIENZQVNTTF9MT0NBTCBpcyB1c2VkIGZvciBub24tQVBJIHN5bWJvbHMgKHByaXZhdGUpLgorKi8KKworI2lmIGRlZmluZWQoQlVJTERJTkdfV09MRlNTTCkKKyAgICAjaWYgZGVmaW5lZChIQVZFX1ZJU0lCSUxJVFkpICYmIEhBVkVfVklTSUJJTElUWQorICAgICAgICAjZGVmaW5lIENZQVNTTF9BUEkgICBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKKyAgICAgICAgI2RlZmluZSBDWUFTU0xfTE9DQUwgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyAgICAjZWxpZiBkZWZpbmVkKF9fU1VOUFJPX0MpICYmIChfX1NVTlBST19DID49IDB4NTUwKQorICAgICAgICAjZGVmaW5lIENZQVNTTF9BUEkgICBfX2dsb2JhbAorICAgICAgICAjZGVmaW5lIENZQVNTTF9MT0NBTCBfX2hpZGRlbgorICAgICNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAgICNpZmRlZiBDWUFTU0xfRExMCisgICAgICAgICAgICAjZGVmaW5lIENZQVNTTF9BUEkgZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2RlZmluZSBDWUFTU0xfQVBJCisgICAgICAgICNlbmRpZgorICAgICAgICAjZGVmaW5lIENZQVNTTF9MT0NBTAorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgQ1lBU1NMX0FQSQorICAgICAgICAjZGVmaW5lIENZQVNTTF9MT0NBTAorICAgICNlbmRpZiAvKiBIQVZFX1ZJU0lCSUxJVFkgKi8KKyNlbHNlIC8qIEJVSUxESU5HX1dPTEZTU0wgKi8KKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAgICAgI2lmZGVmIENZQVNTTF9ETEwKKyAgICAgICAgICAgICNkZWZpbmUgQ1lBU1NMX0FQSSBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAjZGVmaW5lIENZQVNTTF9BUEkKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNkZWZpbmUgQ1lBU1NMX0xPQ0FMCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBDWUFTU0xfQVBJCisgICAgICAgICNkZWZpbmUgQ1lBU1NMX0xPQ0FMCisgICAgI2VuZGlmCisjZW5kaWYgLyogQlVJTERJTkdfV09MRlNTTCAqLworI2VuZGlmIC8qIEhBVkVfRklQUyAqLworI2VuZGlmIC8qIENUQU9fQ1JZUFRfVklTSUJJTElUWV9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3djX3BvcnQuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvY3Rhb2NyeXB0L3djX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzMwODAzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9jdGFvY3J5cHQvd2NfcG9ydC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qIHBvcnQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisjaWZuZGVmIENUQU9fQ1JZUFRfUE9SVF9ICisjZGVmaW5lIENUQU9fQ1JZUFRfUE9SVF9ICisKKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3Zpc2liaWxpdHkuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC93Y19wb3J0Lmg+CisjZGVmaW5lIEN5YVNTTF9NdXRleCB3b2xmU1NMX011dGV4CisKKyNlbmRpZiAvKiBDVEFPX0NSWVBUX1BPUlRfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL2Vycm9yLXNzbC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9lcnJvci1zc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2ZkNWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9lcnJvci1zc2wuaApAQCAtMCwwICsxLDIzIEBACisvKiBlcnJvci1zc2wuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworI2luY2x1ZGUgPHdvbGZzc2wvZXJyb3Itc3NsLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29jc3AuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb2NzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMTFlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29jc3AuaApAQCAtMCwwICsxLDIzIEBACisvKiBvY3NwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKyNpbmNsdWRlIDx3b2xmc3NsL29jc3AuaD4KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9hc24xLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvYXNuMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YmUyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvYXNuMS5oCkBAIC0wLDAgKzEsMyBAQAorLyogYXNuMS5oIGZvciBvcGVuc3NsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvYXNuMS5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2Jpby5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2Jpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNTI5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvYmlvLmgKQEAgLTAsMCArMSw0IEBACisvKiBiaW8uaCBmb3Igb3BlbnNzbCAqLworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2Jpby5oPgorCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvYm4uaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9ibi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNGY0ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvYm4uaApAQCAtMCwwICsxLDMgQEAKKy8qIGJuLmggZm9yIG9wZW5zc2wgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9ibi5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2NvbmYuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9jb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwNWVhOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9jb25mLmgKQEAgLTAsMCArMSwzIEBACisvKiBjb25mLmggZm9yIG9wZW5zc2wgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9jb25mLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvY3J5cHRvLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvY3J5cHRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlMTEwOAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9jcnlwdG8uaApAQCAtMCwwICsxLDQgQEAKKy8qIGNyeXB0by5oIGZvciBvcGVuU1NMICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvY3J5cHRvLmg+CisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9kZXMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWEwNmI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2Rlcy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qIGRlcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKy8qICBkZXMuaCBkZWZpbmVzIG1pbmkgZGVzIG9wZW5zc2wgY29tcGF0aWJpbGl0eSBsYXllcgorICoKKyAqLworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2Rlcy5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2RoLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmQ4ZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2RoLmgKQEAgLTAsMCArMSw0IEBACisvKiBkaC5oIGZvciBvcGVuU1NMICovCisKKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9kaC5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2RzYS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2RzYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZGRmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZHNhLmgKQEAgLTAsMCArMSwxMiBAQAorLyogZHNhLmggZm9yIG9wZW5TU0wgKi8KKworI2lmbmRlZiBDWUFTU0xfT1BFTlNTTF9EU0EKKyNkZWZpbmUgQ1lBU1NMX09QRU5TU0xfRFNBCisKKyNkZWZpbmUgQ3lhU1NMX0RTQV9Mb2FkRGVyICB3b2xmU1NMX0RTQV9Mb2FkRGVyCisjZGVmaW5lIEN5YVNTTF9EU0FfZG9fc2lnbiAgd29sZlNTTF9EU0FfZG9fc2lnbgorCisjaW5jbHVkZSA8Y3lhc3NsL29wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2RzYS5oPgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9lYy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlOGFhOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9lYy5oCkBAIC0wLDAgKzEsMyBAQAorLyogZWMuaCBmb3Igb3BlbnNzbCAqLworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2VjLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZWMyNTUxOS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2VjMjU1MTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWU4OTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2VjMjU1MTkuaApAQCAtMCwwICsxLDMgQEAKKy8qIGVjMjU1MTkuaCAgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9lYzI1NTE5Lmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZWM0NDguaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9lYzQ0OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZmU0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZWM0NDguaApAQCAtMCwwICsxLDMgQEAKKy8qIGVjNDQ4LmggICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZWM0NDguaD4KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9lY2RoLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZWNkaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NzRiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZWNkaC5oCkBAIC0wLDAgKzEsMyBAQAorLyogZWNkaC5oIGZvciBvcGVuc3NsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZWNkaC5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2VjZHNhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZWNkc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTFjMDJiCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2VjZHNhLmgKQEAgLTAsMCArMSwzIEBACisvKiBlY2RzYS5oIGZvciBvcGVuc3NsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZWNkc2EuaD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZWQyNTUxOS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2VkMjU1MTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDBjYmNhCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2VkMjU1MTkuaApAQCAtMCwwICsxLDMgQEAKKy8qIGVkMjU1MTkuaCAgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9lZDI1NTE5Lmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZWQ0NDguaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9lZDQ0OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYjljNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZWQ0NDguaApAQCAtMCwwICsxLDMgQEAKKy8qIGVkNDQ4LmggICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZWQ0NDguaD4KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9lbmdpbmUuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9lbmdpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2NlNGJkCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2VuZ2luZS5oCkBAIC0wLDAgKzEsNSBAQAorLyogZW5naW5lLmggZm9yIGxpYmN1cmwgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9lbmdpbmUuaD4KKworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZXJyLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZXJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYxMTExNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9lcnIuaApAQCAtMCwwICsxLDMgQEAKKy8qIGVyci5oIGZvciBvcGVuc3NsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZXJyLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZXZwLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvZXZwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4MWMxMAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9ldnAuaApAQCAtMCwwICsxLDQxIEBACisvKiBldnAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisvKiAgZXZwLmggZGVmaW5lcyBtaW5pIGV2cCBvcGVuc3NsIGNvbXBhdGliaWxpdHkgbGF5ZXIKKyAqCisgKi8KKworI2lmbmRlZiBDWUFTU0xfT1BFTlNTTF9FVlAKKyNkZWZpbmUgQ1lBU1NMX09QRU5TU0xfRVZQCisKKyNkZWZpbmUgQ3lhU1NMX1N0b3JlRXh0ZXJuYWxJViAgICAgICB3b2xmU1NMX1N0b3JlRXh0ZXJuYWxJVgorI2RlZmluZSBDeWFTU0xfU2V0SW50ZXJuYWxJViAgICAgICAgIHdvbGZTU0xfU2V0SW50ZXJuYWxJVgorI2RlZmluZSBDWUFTU0xfRVZQX01EICAgICAgICAgICAgICAgIFdPTEZTU0xfRVZQX01ECisjZGVmaW5lIEN5YVNTTF9FVlBfWF9TVEFURSAgICAgICAgICAgd29sZlNTTF9FVlBfWF9TVEFURQorI2RlZmluZSBDeWFTU0xfRVZQX1hfU1RBVEVfTEVOICAgICAgIHdvbGZTU0xfRVZQX1hfU1RBVEVfTEVOCisjZGVmaW5lIEN5YVNTTF8zZGVzX2l2ICAgICAgICAgICAgICAgd29sZlNTTF8zZGVzX2l2CisjZGVmaW5lIEN5YVNTTF9hZXNfY3RyX2l2ICAgICAgICAgICAgd29sZlNTTF9hZXNfY3RyX2l2CisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZXZwLmg+CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2htYWMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9obWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZWY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9obWFjLmgKQEAgLTAsMCArMSwyOCBAQAorLyogaG1hYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKy8qICBobWFjLmggZGVmaW5lcyBtaW5pIGhhbWMgb3BlbnNzbCBjb21wYXRpYmlsaXR5IGxheWVyCisgKgorICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvaG1hYy5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2xoYXNoLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvbGhhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjg1ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL2xoYXNoLmgKQEAgLTAsMCArMSwzIEBACisvKiBsaGFzaC5oIGZvciBvcGVuU1NMICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvbGhhc2guaD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvbWQ0LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvbWQ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwZDQzNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9tZDQuaApAQCAtMCwwICsxLDMgQEAKKy8qIG1kNC5oIGZvciBsaWJjdXJsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvbWQ0Lmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvbWQ1LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvbWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNkZDRlNAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9tZDUuaApAQCAtMCwwICsxLDUgQEAKKy8qIG1kNS5oIGZvciBvcGVuc3NsICovCisKKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9tZDUuaD4KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL29jc3AuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9vY3NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwZjQ2OAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9vY3NwLmgKQEAgLTAsMCArMSwzIEBACisvKiBvY3NwLmggZm9yIGxpYmN1cmwgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9vY3NwLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvb3BlbnNzbGNvbmYuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9vcGVuc3NsY29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMjFjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvb3BlbnNzbGNvbmYuaApAQCAtMCwwICsxLDMgQEAKKy8qIG9wZW5zc2xjb25mLmggZm9yIG9wZW5TU0wgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9vcGVuc3NsY29uZi5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL29wZW5zc2x2LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvb3BlbnNzbHYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE5ZjgyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL29wZW5zc2x2LmgKQEAgLTAsMCArMSwzIEBACisvKiBvcGVuc3Nsdi5oIGNvbXBhdGliaWxpdHkgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9vcGVuc3Nsdi5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL29zc2xfdHlwLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvb3NzbF90eXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTZlNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL29zc2xfdHlwLmgKQEAgLTAsMCArMSwzIEBACisvKiBvc3NsX3R5cC5oIGZvciBvcGVuc3NsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvb3NzbF90eXAuaD4KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9wZW0uaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9wZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDdiOTEyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL3BlbS5oCkBAIC0wLDAgKzEsMyBAQAorLyogcGVtLmggZm9yIG9wZW5zc2wgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9wZW0uaD4KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9wa2NzMTIuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9wa2NzMTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmIwODlmCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL3BrY3MxMi5oCkBAIC0wLDAgKzEsMyBAQAorLyogcGtjczEyLmggZm9yIG9wZW5zc2wgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9wa2NzMTIuaD4KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9yYW5kLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvcmFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZDc3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvcmFuZC5oCkBAIC0wLDAgKzEsMyBAQAorLyogcmFuZC5oIGZvciBvcGVuU1NMICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc3NsLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvcmlwZW1kLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvcmlwZW1kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1ZGU3OAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9yaXBlbWQuaApAQCAtMCwwICsxLDMgQEAKKy8qIHJpcGVtZC5oIGZvciBvcGVuc3NsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvcmlwZW1kLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvcnNhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvcnNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmMjRiOAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9yc2EuaApAQCAtMCwwICsxLDEyIEBACisvKiByc2EuaCBmb3Igb3BlblNTTCAqLworCisjaWZuZGVmIENZQVNTTF9PUEVOU1NMX1JTQQorI2RlZmluZSBDWUFTU0xfT1BFTlNTTF9SU0EKKworI2RlZmluZSBDeWFTU0xfUlNBX0dlbkFkZCAgIHdvbGZTU0xfUlNBX0dlbkFkZAorI2RlZmluZSBDeWFTU0xfUlNBX0xvYWREZXIgIHdvbGZTU0xfUlNBX0xvYWREZXIKKworI2luY2x1ZGUgPGN5YXNzbC9vcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9yc2EuaD4KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvc2hhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvc2hhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkM2NhMQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9zaGEuaApAQCAtMCwwICsxLDMgQEAKKy8qIHNoYS5oIGZvciBvcGVuc3NsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc2hhLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvc3NsLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvc3NsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyZjNlMwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9zc2wuaApAQCAtMCwwICsxLDM0IEBACisvKiBzc2wuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisvKiAgc3NsLmggZGVmaW5lcyBvcGVuc3NsIGNvbXBhdGliaWxpdHkgbGF5ZXIKKyAqCisgKi8KKyNpZm5kZWYgQ1lBU1NMX09QRU5TU0xfSF8KKyNkZWZpbmUgQ1lBU1NMX09QRU5TU0xfSF8KKworI2luY2x1ZGUgPGN5YXNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc3NsLmg+CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvc3NsMjMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC9zc2wyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MTUyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvc3NsMjMuaApAQCAtMCwwICsxLDMgQEAKKy8qIHNzbDIzLmggZm9yIG9wZW5zc2wgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9zc2wyMy5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL3N0YWNrLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wvc3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzE1MDJmCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL3N0YWNrLmgKQEAgLTAsMCArMSwzIEBACisvKiBzdGFjay5oIGZvciBvcGVuc3NsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc3RhY2suaD4KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC91aS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL3VpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmNDA0MgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvb3BlbnNzbC91aS5oCkBAIC0wLDAgKzEsMyBAQAorLyogdWkuaCBmb3Igb3BlbnNzbCAqLworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3VpLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wveDUwOS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL3g1MDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDEzMDAyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL3g1MDkuaApAQCAtMCwwICsxLDMgQEAKKy8qIHg1MDkuaCBmb3Igb3BlbnNzbCAqLworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3NzbC5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL3g1MDl2My5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcGVuc3NsL3g1MDl2My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNTI0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wZW5zc2wveDUwOXYzLmgKQEAgLTAsMCArMSwzIEBACisvKiB4NTA5djMuaCBmb3Igb3BlbnNzbCAqLworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3g1MDl2My5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcHRpb25zLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL29wdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWNhYTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9vcHRpb25zLmgKQEAgLTAsMCArMSwzNzggQEAKKy8qIGN5YXNzbCBvcHRpb25zLmgKKyAqIGdlbmVyYXRlZCBmcm9tIHdvbGZzc2wvb3B0aW9ucy5oCisgKi8KKy8qIHdvbGZzc2wgb3B0aW9ucy5oCisqIGdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZSBvcHRpb25zCisqCisqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIHdvbGZTU0wgSW5jLgorKgorKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLiAoZm9ybWVybHkga25vd24gYXMgQ3lhU1NMKQorKgorKi8KKworI2lmbmRlZiBDWUFTU0xfT1BUSU9OU19ICisjZGVmaW5lIENZQVNTTF9PUFRJT05TX0gKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyN1bmRlZiAgV09MRlNTTF9UTFMxMworI2RlZmluZSBXT0xGU1NMX1RMUzEzCisKKyN1bmRlZiAgSEFWRV9UTFNfRVhURU5TSU9OUworI2RlZmluZSBIQVZFX1RMU19FWFRFTlNJT05TCisKKyN1bmRlZiAgSEFWRV9TVVBQT1JURURfQ1VSVkVTCisjZGVmaW5lIEhBVkVfU1VQUE9SVEVEX0NVUlZFUworCisjdW5kZWYgIEhBVkVfRkZESEVfMjA0OAorI2RlZmluZSBIQVZFX0ZGREhFXzIwNDgKKworI3VuZGVmICBIQVZFX0VYVF9DQUNIRQorI2RlZmluZSBIQVZFX0VYVF9DQUNIRQorCisjdW5kZWYgIFdPTEZTU0xfVkVSSUZZX0NCX0FMTF9DRVJUUworI2RlZmluZSBXT0xGU1NMX1ZFUklGWV9DQl9BTExfQ0VSVFMKKworI3VuZGVmICBXT0xGU1NMX0VYVFJBX0FMRVJUUworI2RlZmluZSBXT0xGU1NMX0VYVFJBX0FMRVJUUworCisjdW5kZWYgIE9QRU5TU0xfRVhUUkEKKyNkZWZpbmUgT1BFTlNTTF9FWFRSQQorCisjdW5kZWYgIFdPTEZTU0xfQUxXQVlTX1ZFUklGWV9DQgorI2RlZmluZSBXT0xGU1NMX0FMV0FZU19WRVJJRllfQ0IKKworI3VuZGVmICBPUEVOU1NMX0FMTAorI2RlZmluZSBPUEVOU1NMX0FMTAorCisjdW5kZWYgIFdPTEZTU0xfRUlUSEVSX1NJREUKKyNkZWZpbmUgV09MRlNTTF9FSVRIRVJfU0lERQorCisjdW5kZWYgIFdDX1JTQV9OT19QQURESU5HCisjZGVmaW5lIFdDX1JTQV9OT19QQURESU5HCisKKyN1bmRlZiAgV0NfUlNBX1BTUworI2RlZmluZSBXQ19SU0FfUFNTCisKKyN1bmRlZiAgV09MRlNTTF9QU1NfTE9OR19TQUxUCisjZGVmaW5lIFdPTEZTU0xfUFNTX0xPTkdfU0FMVAorCisjaWZuZGVmIFdPTEZTU0xfT1BUSU9OU19JR05PUkVfU1lTCisjdW5kZWYgIF9QT1NJWF9USFJFQURTCisjZGVmaW5lIF9QT1NJWF9USFJFQURTCisjZW5kaWYKKworI3VuZGVmICBIQVZFX1RIUkVBRF9MUworI2RlZmluZSBIQVZFX1RIUkVBRF9MUworCisjdW5kZWYgIFRGTV9USU1JTkdfUkVTSVNUQU5UCisjZGVmaW5lIFRGTV9USU1JTkdfUkVTSVNUQU5UCisKKyN1bmRlZiAgRUNDX1RJTUlOR19SRVNJU1RBTlQKKyNkZWZpbmUgRUNDX1RJTUlOR19SRVNJU1RBTlQKKworI3VuZGVmICBXQ19SU0FfQkxJTkRJTkcKKyNkZWZpbmUgV0NfUlNBX0JMSU5ESU5HCisKKyN1bmRlZiAgVEVTVF9JUFY2CisjZGVmaW5lIFRFU1RfSVBWNgorCisjdW5kZWYgIFdPTEZTU0xfSVBWNgorI2RlZmluZSBXT0xGU1NMX0lQVjYKKworI3VuZGVmICBXT0xGU1NMX1dQQVMKKyNkZWZpbmUgV09MRlNTTF9XUEFTCisKKyN1bmRlZiAgSEFWRV9TRUNSRVRfQ0FMTEJBQ0sKKyNkZWZpbmUgSEFWRV9TRUNSRVRfQ0FMTEJBQ0sKKworI3VuZGVmICBXT0xGU1NMX1BVQkxJQ19FQ0NfQUREX0RCTAorI2RlZmluZSBXT0xGU1NMX1BVQkxJQ19FQ0NfQUREX0RCTAorCisjdW5kZWYgIFdPTEZTU0xfQUxXQVlTX1ZFUklGWV9DQgorI2RlZmluZSBXT0xGU1NMX0FMV0FZU19WRVJJRllfQ0IKKworI3VuZGVmICBXT0xGU1NMX0FMV0FZU19LRUVQX1NOSQorI2RlZmluZSBXT0xGU1NMX0FMV0FZU19LRUVQX1NOSQorCisjdW5kZWYgIEhBVkVfRVhfREFUQQorI2RlZmluZSBIQVZFX0VYX0RBVEEKKworI3VuZGVmICBIQVZFX0VYVF9DQUNIRQorI2RlZmluZSBIQVZFX0VYVF9DQUNIRQorCisjdW5kZWYgIFdPTEZTU0xfRUlUSEVSX1NJREUKKyNkZWZpbmUgV09MRlNTTF9FSVRIRVJfU0lERQorCisjdW5kZWYgIE9QRU5TU0xfRVhUUkFfWDUwOV9TTUFMTAorI2RlZmluZSBPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwKKworI3VuZGVmICBXT0xGU1NMX1BVQkxJQ19NUAorI2RlZmluZSBXT0xGU1NMX1BVQkxJQ19NUAorCisjdW5kZWYgIFdPTEZTU0xfREVSX0xPQUQKKyNkZWZpbmUgV09MRlNTTF9ERVJfTE9BRAorCisjdW5kZWYgIEFUT01JQ19VU0VSCisjZGVmaW5lIEFUT01JQ19VU0VSCisKKyN1bmRlZiAgV09MRlNTTF9LRVlfR0VOCisjZGVmaW5lIFdPTEZTU0xfS0VZX0dFTgorCisjdW5kZWYgIFdPTEZTU0xfREVTX0VDQgorI2RlZmluZSBXT0xGU1NMX0RFU19FQ0IKKworI3VuZGVmICBGT1JUUkVTUworI2RlZmluZSBGT1JUUkVTUworCisjdW5kZWYgIFdPTEZTU0xfQUxXQVlTX1ZFUklGWV9DQgorI2RlZmluZSBXT0xGU1NMX0FMV0FZU19WRVJJRllfQ0IKKworI3VuZGVmICBXT0xGU1NMX0FFU19DT1VOVEVSCisjZGVmaW5lIFdPTEZTU0xfQUVTX0NPVU5URVIKKworI3VuZGVmICBXT0xGU1NMX0FFU19ESVJFQ1QKKyNkZWZpbmUgV09MRlNTTF9BRVNfRElSRUNUCisKKyN1bmRlZiAgV09MRlNTTF9ERVJfTE9BRAorI2RlZmluZSBXT0xGU1NMX0RFUl9MT0FECisKKyN1bmRlZiAgV09MRlNTTF9LRVlfR0VOCisjZGVmaW5lIFdPTEZTU0xfS0VZX0dFTgorCisjdW5kZWYgIEhBVkVfQUVTQ0NNCisjZGVmaW5lIEhBVkVfQUVTQ0NNCisKKyN1bmRlZiAgV09MRlNTTF9VU0VfQUxJR04KKyNkZWZpbmUgV09MRlNTTF9VU0VfQUxJR04KKworI3VuZGVmICBXT0xGU1NMX1NIQTUxMgorI2RlZmluZSBXT0xGU1NMX1NIQTUxMgorCisjdW5kZWYgIFdPTEZTU0xfU0hBMzg0CisjZGVmaW5lIFdPTEZTU0xfU0hBMzg0CisKKyN1bmRlZiAgU0VTU0lPTl9DRVJUUworI2RlZmluZSBTRVNTSU9OX0NFUlRTCisKKyN1bmRlZiAgV09MRlNTTF9DRVJUX0dFTgorI2RlZmluZSBXT0xGU1NMX0NFUlRfR0VOCisKKyN1bmRlZiAgSEFWRV9IS0RGCisjZGVmaW5lIEhBVkVfSEtERgorCisjdW5kZWYgIEhBVkVfRUNDCisjZGVmaW5lIEhBVkVfRUNDCisKKyN1bmRlZiAgVEZNX0VDQzI1NgorI2RlZmluZSBURk1fRUNDMjU2CisKKyN1bmRlZiAgRUNDX1NIQU1JUgorI2RlZmluZSBFQ0NfU0hBTUlSCisKKyN1bmRlZiAgSEFWRV9DT01QX0tFWQorI2RlZmluZSBIQVZFX0NPTVBfS0VZCisKKyN1bmRlZiAgV09MRlNTTF9BTExPV19UTFNWMTAKKyNkZWZpbmUgV09MRlNTTF9BTExPV19UTFNWMTAKKworI3VuZGVmICBXQ19SU0FfUFNTCisjZGVmaW5lIFdDX1JTQV9QU1MKKworI3VuZGVmICBIQVZFX0FOT04KKyNkZWZpbmUgSEFWRV9BTk9OCisKKyN1bmRlZiAgV09MRlNTTF9DTUFDCisjZGVmaW5lIFdPTEZTU0xfQ01BQworCisjdW5kZWYgIFdPTEZTU0xfQUVTX0RJUkVDVAorI2RlZmluZSBXT0xGU1NMX0FFU19ESVJFQ1QKKworI3VuZGVmICBOT19IQzEyOAorI2RlZmluZSBOT19IQzEyOAorCisjdW5kZWYgIE5PX1JBQkJJVAorI2RlZmluZSBOT19SQUJCSVQKKworI3VuZGVmICBIQVZFX1BPTFkxMzA1CisjZGVmaW5lIEhBVkVfUE9MWTEzMDUKKworI3VuZGVmICBIQVZFX09ORV9USU1FX0FVVEgKKyNkZWZpbmUgSEFWRV9PTkVfVElNRV9BVVRICisKKyN1bmRlZiAgSEFWRV9DSEFDSEEKKyNkZWZpbmUgSEFWRV9DSEFDSEEKKworI3VuZGVmICBIQVZFX0hBU0hEUkJHCisjZGVmaW5lIEhBVkVfSEFTSERSQkcKKworI3VuZGVmICBIQVZFX09DU1AKKyNkZWZpbmUgSEFWRV9PQ1NQCisKKyN1bmRlZiAgSEFWRV9PUEVOU1NMX0NNRAorI2RlZmluZSBIQVZFX09QRU5TU0xfQ01ECisKKyN1bmRlZiAgSEFWRV9UTFNfRVhURU5TSU9OUworI2RlZmluZSBIQVZFX1RMU19FWFRFTlNJT05TCisKKyN1bmRlZiAgSEFWRV9DRVJUSUZJQ0FURV9TVEFUVVNfUkVRVUVTVAorI2RlZmluZSBIQVZFX0NFUlRJRklDQVRFX1NUQVRVU19SRVFVRVNUCisKKyN1bmRlZiAgSEFWRV9UTFNfRVhURU5TSU9OUworI2RlZmluZSBIQVZFX1RMU19FWFRFTlNJT05TCisKKyN1bmRlZiAgSEFWRV9DRVJUSUZJQ0FURV9TVEFUVVNfUkVRVUVTVF9WMgorI2RlZmluZSBIQVZFX0NFUlRJRklDQVRFX1NUQVRVU19SRVFVRVNUX1YyCisKKyN1bmRlZiAgSEFWRV9DUkwKKyNkZWZpbmUgSEFWRV9DUkwKKworI3VuZGVmICBIQVZFX1RMU19FWFRFTlNJT05TCisjZGVmaW5lIEhBVkVfVExTX0VYVEVOU0lPTlMKKworI3VuZGVmICBIQVZFX1NOSQorI2RlZmluZSBIQVZFX1NOSQorCisjdW5kZWYgIEhBVkVfVExTX0VYVEVOU0lPTlMKKyNkZWZpbmUgSEFWRV9UTFNfRVhURU5TSU9OUworCisjdW5kZWYgIEhBVkVfU1VQUE9SVEVEX0NVUlZFUworI2RlZmluZSBIQVZFX1NVUFBPUlRFRF9DVVJWRVMKKworI3VuZGVmICBIQVZFX1RMU19FWFRFTlNJT05TCisjZGVmaW5lIEhBVkVfVExTX0VYVEVOU0lPTlMKKworI3VuZGVmICBIQVZFX1NFU1NJT05fVElDS0VUCisjZGVmaW5lIEhBVkVfU0VTU0lPTl9USUNLRVQKKworI3VuZGVmICBIQVZFX0VYVEVOREVEX01BU1RFUgorI2RlZmluZSBIQVZFX0VYVEVOREVEX01BU1RFUgorCisjdW5kZWYgIEhBVkVfVExTX0VYVEVOU0lPTlMKKyNkZWZpbmUgSEFWRV9UTFNfRVhURU5TSU9OUworCisjdW5kZWYgIEhBVkVfU05JCisjZGVmaW5lIEhBVkVfU05JCisKKyN1bmRlZiAgSEFWRV9NQVhfRlJBR01FTlQKKyNkZWZpbmUgSEFWRV9NQVhfRlJBR01FTlQKKworI3VuZGVmICBIQVZFX1RSVU5DQVRFRF9ITUFDCisjZGVmaW5lIEhBVkVfVFJVTkNBVEVEX0hNQUMKKworI3VuZGVmICBIQVZFX0FMUE4KKyNkZWZpbmUgSEFWRV9BTFBOCisKKyN1bmRlZiAgSEFWRV9UUlVTVEVEX0NBCisjZGVmaW5lIEhBVkVfVFJVU1RFRF9DQQorCisjdW5kZWYgIEhBVkVfU1VQUE9SVEVEX0NVUlZFUworI2RlZmluZSBIQVZFX1NVUFBPUlRFRF9DVVJWRVMKKworI3VuZGVmICBIQVZFX0xJR0hUWQorI2RlZmluZSBIQVZFX0xJR0hUWQorCisjdW5kZWYgIEhBVkVfV09MRlNTTF9TU0xfSAorI2RlZmluZSBIQVZFX1dPTEZTU0xfU1NMX0ggMQorCisjdW5kZWYgIEhBVkVfRVhfREFUQQorI2RlZmluZSBIQVZFX0VYX0RBVEEKKworI3VuZGVmICBPUEVOU1NMX0FMTAorI2RlZmluZSBPUEVOU1NMX0FMTAorCisjdW5kZWYgIE9QRU5TU0xfTk9fU1NMMgorI2RlZmluZSBPUEVOU1NMX05PX1NTTDIKKworI3VuZGVmICBPUEVOU1NMX05PX0NPTVAKKyNkZWZpbmUgT1BFTlNTTF9OT19DT01QCisKKyN1bmRlZiAgT1BFTlNTTF9OT19TU0wzCisjZGVmaW5lIE9QRU5TU0xfTk9fU1NMMworCisjdW5kZWYgIFNJTkdMRV9USFJFQURFRAorI2RlZmluZSBTSU5HTEVfVEhSRUFERUQKKworI3VuZGVmICBXT0xGU1NMX0FMV0FZU19WRVJJRllfQ0IKKyNkZWZpbmUgV09MRlNTTF9BTFdBWVNfVkVSSUZZX0NCCisKKyN1bmRlZiAgV09MRlNTTF9BTFdBWVNfS0VFUF9TTkkKKyNkZWZpbmUgV09MRlNTTF9BTFdBWVNfS0VFUF9TTkkKKworI3VuZGVmICBLRUVQX09VUl9DRVJUCisjZGVmaW5lIEtFRVBfT1VSX0NFUlQKKworI3VuZGVmICBLRUVQX1BFRVJfQ0VSVAorI2RlZmluZSBLRUVQX1BFRVJfQ0VSVAorCisjdW5kZWYgIEhBVkVfRVhUX0NBQ0hFCisjZGVmaW5lIEhBVkVfRVhUX0NBQ0hFCisKKyN1bmRlZiAgSEFWRV9FWF9EQVRBCisjZGVmaW5lIEhBVkVfRVhfREFUQQorCisjdW5kZWYgIFdPTEZTU0xfQ0VSVF9HRU4KKyNkZWZpbmUgV09MRlNTTF9DRVJUX0dFTgorCisjdW5kZWYgIEhBVkVfRU5DUllQVF9USEVOX01BQworI2RlZmluZSBIQVZFX0VOQ1JZUFRfVEhFTl9NQUMKKworI3VuZGVmICBXT0xGU1NMX0NFUlRfRVhUCisjZGVmaW5lIFdPTEZTU0xfQ0VSVF9FWFQKKworI3VuZGVmICBIQVZFX1NUVU5ORUwKKyNkZWZpbmUgSEFWRV9TVFVOTkVMCisKKyN1bmRlZiAgV09MRlNTTF9BTFdBWVNfVkVSSUZZX0NCCisjZGVmaW5lIFdPTEZTU0xfQUxXQVlTX1ZFUklGWV9DQgorCisjdW5kZWYgIFdPTEZTU0xfQUxXQVlTX0tFRVBfU05JCisjZGVmaW5lIFdPTEZTU0xfQUxXQVlTX0tFRVBfU05JCisKKyN1bmRlZiAgSEFWRV9FWF9EQVRBCisjZGVmaW5lIEhBVkVfRVhfREFUQQorCisjdW5kZWYgIFdPTEZTU0xfREVTX0VDQgorI2RlZmluZSBXT0xGU1NMX0RFU19FQ0IKKworI3VuZGVmICBXT0xGU1NMX1NJR05FUl9ERVJfQ0VSVAorI2RlZmluZSBXT0xGU1NMX1NJR05FUl9ERVJfQ0VSVAorCisjdW5kZWYgIFdPTEZTU0xfRU5DUllQVEVEX0tFWVMKKyNkZWZpbmUgV09MRlNTTF9FTkNSWVBURURfS0VZUworCisjdW5kZWYgIFVTRV9GQVNUX01BVEgKKyNkZWZpbmUgVVNFX0ZBU1RfTUFUSAorCisjdW5kZWYgIFdDX05PX0FTWU5DX1RIUkVBRElORworI2RlZmluZSBXQ19OT19BU1lOQ19USFJFQURJTkcKKworI3VuZGVmICBIQVZFX0FFU19LRVlXUkFQCisjZGVmaW5lIEhBVkVfQUVTX0tFWVdSQVAKKworI3VuZGVmICBXT0xGU1NMX0FFU19ESVJFQ1QKKyNkZWZpbmUgV09MRlNTTF9BRVNfRElSRUNUCisKKyN1bmRlZiAgSEFWRV9ESF9ERUZBVUxUX1BBUkFNUworI2RlZmluZSBIQVZFX0RIX0RFRkFVTFRfUEFSQU1TCisKKyN1bmRlZiAgR0NNX1RBQkxFXzRCSVQKKyNkZWZpbmUgR0NNX1RBQkxFXzRCSVQKKworI3VuZGVmICBIQVZFX0FFU0dDTQorI2RlZmluZSBIQVZFX0FFU0dDTQorCisjdW5kZWYgIEhBVkVfV0NfSU5UUk9TUEVDVElPTgorI2RlZmluZSBIQVZFX1dDX0lOVFJPU1BFQ1RJT04KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisKKyNlbmRpZiAvKiBDWUFTU0xfT1BUSU9OU19IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvc25pZmZlci5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9zbmlmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyZWVlYwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS9jeWFzc2wvc25pZmZlci5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qIHNuaWZmZXIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworI2luY2x1ZGUgPHdvbGZzc2wvc25pZmZlci5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9zbmlmZmVyX2Vycm9yLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL3NuaWZmZXJfZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjA5ZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9zbmlmZmVyX2Vycm9yLmgKQEAgLTAsMCArMSwyMyBAQAorLyogc25pZmZlcl9lcnJvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaW5jbHVkZSA8d29sZnNzbC9zbmlmZmVyX2Vycm9yLmg+CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL3NzbC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9zc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTk5ZGUxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC9zc2wuaApAQCAtMCwwICsxLDcyMSBAQAorLyogc3NsLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKy8qCisgKiBzc2wuaCBtYWtlcyB3b2xmc3NsIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggY3lhc3NsCisgKi8KKworI2lmbmRlZiBXT0xGU1NMX0NZQVNTTF9IXworI2RlZmluZSBXT0xGU1NMX0NZQVNTTF9IXworLyoKKyAqIE5hbWUgY2hhbmdlCisgKiBpbmNsdWRlIHRoZSBuZXcgc3NsLmgKKyAqLworI2luY2x1ZGUgPHdvbGZzc2wvc3NsLmg+CisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC90eXBlcy5oPgorI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvc2V0dGluZ3MuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorICAgIC8qIHdpbmNyeXB0LmggY2xhc2hlcyAqLworICAgICN1bmRlZiBYNTA5X05BTUUKKyNlbmRpZgorCisjaWZkZWYgQ1lBU1NMX1RJUlRPUworICAgICN1bmRlZiBDWUFTU0xfVElSVE9TCisgICAgI2RlZmluZSBDWUFTU0xfVElSVE9TIFdPTEZTU0xfVElSVE9TCisjZW5kaWYKKworI2RlZmluZSBDWUFTU0wgICAgICAgICAgV09MRlNTTAorI2RlZmluZSBERUJVR19DWUFTU0wgICAgREVCVUdfV09MRlNTTAorI2RlZmluZSBDWUFTU0xfQ1RYICAgICAgV09MRlNTTF9DVFgKKyNkZWZpbmUgQ1lBU1NMX01FVEhPRCAgIFdPTEZTU0xfTUVUSE9ECisjZGVmaW5lIENZQVNTTF9TRVNTSU9OICBXT0xGU1NMX1NFU1NJT04KKworI2RlZmluZSBDWUFTU0xfWDUwOSAgICAgICBXT0xGU1NMX1g1MDkKKyNkZWZpbmUgQ1lBU1NMX1g1MDlfTkFNRSAgV09MRlNTTF9YNTA5X05BTUUKKyNkZWZpbmUgQ1lBU1NMX1g1MDlfQ0hBSU4gV09MRlNTTF9YNTA5X0NIQUlOCisjaWZkZWYgV09MRlNTTF9TTklGRkVSCisgICAgI2RlZmluZSBDWUFTU0xfU05JRkZFUiAgICBXT0xGU1NMX1NOSUZGRVIKKyNlbmRpZgorCisvKiByZWRlY2xhcmUgZ3VhcmQgKi8KKyNkZWZpbmUgQ1lBU1NMX1RZUEVTX0RFRklORUQgV09MRlNTTF9UWVBFU19ERUZJTkVECisKKy8qIGxlZ2FjeSBkZWZpbmVzICovCisjZGVmaW5lIHlhc3NsSVAgICAgICAgICAgd29sZlNTTElQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiovCisjZGVmaW5lIHlhc3NsUG9ydCAgICAgICAgd29sZlNTTFBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiovCisKKy8qIGN5YXNzbC9zc2wuaCAoc3RydWN0cykgKi8KKyNkZWZpbmUgQ1lBU1NMX1JTQSAgICAgICAgICAgICAgICBXT0xGU1NMX1JTQQorI2RlZmluZSBDWUFTU0xfRFNBICAgICAgICAgICAgICAgIFdPTEZTU0xfRFNBCisjZGVmaW5lIENZQVNTTF9CSU8gICAgICAgICAgICAgICAgV09MRlNTTF9CSU8KKyNkZWZpbmUgQ1lBU1NMX0NJUEhFUiAgICAgICAgICAgICBXT0xGU1NMX0NJUEhFUgorI2RlZmluZSBDWUFTU0xfTUQ0X0NUWCAgICAgICAgICAgIFdPTEZTU0xfTUQ0X0NUWAorI2RlZmluZSBDWUFTU0xfTUZMXzJfOSAgICAgICAgICAgIFdPTEZTU0xfTUZMXzJfOSAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqLworI2RlZmluZSBDWUFTU0xfTUZMXzJfMTMgICAgICAgICAgIFdPTEZTU0xfTUZMXzJfMTMgICAgICAgICAgICAgICAgICAgICAgICAgLyoqLworI2RlZmluZSBDWUFTU0xfRVZQX1BLRVkgICAgICAgICAgIFdPTEZTU0xfRVZQX1BLRVkKKyNkZWZpbmUgQ1lBU1NMX1g1MDlfQ1JMICAgICAgICAgICBXT0xGU1NMX1g1MDlfQ1JMCisjZGVmaW5lIENZQVNTTF9BU04xX1RJTUUgICAgICAgICAgV09MRlNTTF9BU04xX1RJTUUKKyNkZWZpbmUgQ1lBU1NMX0JJT19NRVRIT0QgICAgICAgICBXT0xGU1NMX0JJT19NRVRIT0QKKyNkZWZpbmUgQ1lBU1NMX1g1MDlfU1RPUkUgICAgICAgICBXT0xGU1NMX1g1MDlfU1RPUkUKKyNkZWZpbmUgQ1lBU1NMX1g1MDlfT0JKRUNUICAgICAgICBXT0xGU1NMX1g1MDlfT0JKRUNUCisjZGVmaW5lIENZQVNTTF9YNTA5X0xPT0tVUCAgICAgICAgV09MRlNTTF9YNTA5X0xPT0tVUAorI2RlZmluZSBDWUFTU0xfQVNOMV9PQkpFQ1QgICAgICAgIFdPTEZTU0xfQVNOMV9PQkpFQ1QKKyNkZWZpbmUgQ1lBU1NMX0FTTjFfU1RSSU5HICAgICAgICBXT0xGU1NMX0FTTjFfU1RSSU5HCisjZGVmaW5lIENZQVNTTF9DT01QX01FVEhPRCAgICAgICAgV09MRlNTTF9DT01QX01FVEhPRAorI2RlZmluZSBDWUFTU0xfQ1JMX0NIRUNLQUxMICAgICAgIFdPTEZTU0xfQ1JMX0NIRUNLQUxMCisjZGVmaW5lIENZQVNTTF9BU04xX0lOVEVHRVIgICAgICAgV09MRlNTTF9BU04xX0lOVEVHRVIKKyNkZWZpbmUgQ1lBU1NMX1g1MDlfUkVWT0tFRCAgICAgICBXT0xGU1NMX1g1MDlfUkVWT0tFRAorI2RlZmluZSBDWUFTU0xfZHlubG9ja192YWx1ZSAgICAgIFdPTEZTU0xfZHlubG9ja192YWx1ZQorI2RlZmluZSBDWUFTU0xfWDUwOV9FWFRFTlNJT04gICAgIFdPTEZTU0xfWDUwOV9FWFRFTlNJT04KKyNkZWZpbmUgQ1lBU1NMX1g1MDlfU1RPUkVfQ1RYICAgICBXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYCisjZGVmaW5lIENZQVNTTF9YNTA5X0xPT0tVUF9NRVRIT0QgV09MRlNTTF9YNTA5X0xPT0tVUF9NRVRIT0QKKworI2RlZmluZSBDeWFTU0xfTG9hZENSTCAgICAgICAgICAgIHdvbGZTU0xfTG9hZENSTAorI2RlZmluZSBDeWFTU0xfRW5hYmxlQ1JMICAgICAgICAgIHdvbGZTU0xfRW5hYmxlQ1JMCisjZGVmaW5lIEN5YVNTTF9TZXRDUkxfQ2IgICAgICAgICAgd29sZlNTTF9TZXRDUkxfQ2IKKworLyogY3lhc3NsL3Rlc3QuaCAqLworI2lmZGVmIEN5YVNTTF9URVNUX0gKKyAgICAjZGVmaW5lIENZQVNTTF9USFJFQUQgICAgICAgICBXT0xGU1NMX1RIUkVBRAorI2VuZGlmCisKKy8qIHNyYy9zc2wuYyAqLworI2RlZmluZSBDWUFTU0xfQ1JMICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0NSTAorI2RlZmluZSBDWUFTU0xfU1NMVjMgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1NTTFYzCisjZGVmaW5lIENZQVNTTF9UTFNWMSAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfVExTVjEKKyNkZWZpbmUgQ1lBU1NMX1RMU1YxXzEgICAgICAgICAgICAgICAgICAgV09MRlNTTF9UTFNWMV8xCisjZGVmaW5lIENZQVNTTF9UTFNWMV8yICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfVExTVjFfMgorI2RlZmluZSBDWUFTU0xfVVNFUl9DQSAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1VTRVJfQ0EKKyNkZWZpbmUgQ1lBU1NMX0NMSUVOVF9FTkQgICAgICAgICAgICAgICAgV09MRlNTTF9DTElFTlRfRU5ECisjZGVmaW5lIENZQVNTTF9DRVJUX01BTkFHRVIgICAgICAgICAgICAgIFdPTEZTU0xfQ0VSVF9NQU5BR0VSCisjZGVmaW5lIE1BWF9DWUFTU0xfRklMRV9TSVpFICAgICAgICAgICAgIE1BWF9XT0xGU1NMX0ZJTEVfU0laRQorCisjZGVmaW5lIEN5YVNTTF9nZXRfY2lwaGVyICAgICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X2NpcGhlcgorI2RlZmluZSBDeWFTU0xfZ2V0X2NpcGhlcnMgICAgICAgICAgICAgICB3b2xmU1NMX2dldF9jaXBoZXJzCisjZGVmaW5lIEN5YVNTTF9LZXlQZW1Ub0RlciAgICAgICAgICAgICAgIHdvbGZTU0xfS2V5UGVtVG9EZXIKKyNkZWZpbmUgQ3lhU1NMX2dldF92ZXJzaW9uICAgICAgICAgICAgICAgd29sZlNTTF9nZXRfdmVyc2lvbgorI2RlZmluZSBDeWFTU0xfU2V0U2VydmVySUQgICAgICAgICAgICAgICB3b2xmU1NMX1NldFNlcnZlcklECisjZGVmaW5lIEN5YVNTTF91c2Vfb2xkX3BvbHkgICAgICAgICAgICAgIHdvbGZTU0xfdXNlX29sZF9wb2x5CisjZGVmaW5lIEN5YVNTTF9TZXRDZXJ0Q2JDdHggICAgICAgICAgICAgIHdvbGZTU0xfU2V0Q2VydENiQ3R4CisjZGVmaW5lIEN5YVNTTF9DZXJ0UGVtVG9EZXIgICAgICAgICAgICAgIHdvbGZTU0xfQ2VydFBlbVRvRGVyCisjZGVmaW5lIEN5YVNTTF9nZXRfc2h1dGRvd24gICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X3NodXRkb3duCisjZGVmaW5lIEN5YVNTTF9TZXRNaW5WZXJzaW9uICAgICAgICAgICAgIHdvbGZTU0xfU2V0TWluVmVyc2lvbgorI2RlZmluZSBDeWFTU0xfQ1RYX1VubG9hZENBcyAgICAgICAgICAgICB3b2xmU1NMX0NUWF9VbmxvYWRDQXMKKyNkZWZpbmUgQ3lhU1NMX3Nlc3Npb25fcmV1c2VkICAgICAgICAgICAgd29sZlNTTF9zZXNzaW9uX3JldXNlZAorI2RlZmluZSBDeWFTU0xfVW5sb2FkQ2VydHNLZXlzICAgICAgICAgICB3b2xmU1NMX1VubG9hZENlcnRzS2V5cworI2RlZmluZSBDeWFTU0xfQ0lQSEVSX2dldF9uYW1lICAgICAgICAgICB3b2xmU1NMX0NJUEhFUl9nZXRfbmFtZQorI2RlZmluZSBDeWFTU0xfaXNfaW5pdF9maW5pc2hlZCAgICAgICAgICB3b2xmU1NMX2lzX2luaXRfZmluaXNoZWQKKyNkZWZpbmUgQ3lhU1NMX2dldF9hbGVydF9oaXN0b3J5ICAgICAgICAgd29sZlNTTF9nZXRfYWxlcnRfaGlzdG9yeQorI2RlZmluZSBDeWFTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyICAgICAgICB3b2xmU1NMX2dldF9jdXJyZW50X2NpcGhlcgorI2RlZmluZSBDeWFTU0xfQ2VydE1hbmFnZXJVbmxvYWRDQXMgICAgICB3b2xmU1NMX0NlcnRNYW5hZ2VyVW5sb2FkQ0FzCisjZGVmaW5lIEN5YVNTTF9DZXJ0TWFuYWdlckVuYWJsZU9DU1AgICAgIHdvbGZTU0xfQ2VydE1hbmFnZXJFbmFibGVPQ1NQCisjZGVmaW5lIEN5YVNTTF9DVFhfY2hlY2tfcHJpdmF0ZV9rZXkgICAgIHdvbGZTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5CisjZGVmaW5lIEN5YVNTTF9DZXJ0TWFuYWdlckRpc2FibGVPQ1NQICAgIHdvbGZTU0xfQ2VydE1hbmFnZXJEaXNhYmxlT0NTUAorI2RlZmluZSBDeWFTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyX3N1aXRlICB3b2xmU1NMX2dldF9jdXJyZW50X2NpcGhlcl9zdWl0ZQorI2RlZmluZSBDeWFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyB3b2xmU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMKKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Igd29sZlNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiCisKKyNkZWZpbmUgQ3lhU1NMX3NhdmVfc2Vzc2lvbl9jYWNoZSAgICAgICAgd29sZlNTTF9zYXZlX3Nlc3Npb25fY2FjaGUKKyNkZWZpbmUgQ3lhU1NMX3Jlc3RvcmVfc2Vzc2lvbl9jYWNoZSAgICAgd29sZlNTTF9yZXN0b3JlX3Nlc3Npb25fY2FjaGUKKyNkZWZpbmUgQ3lhU1NMX21lbXNhdmVfc2Vzc2lvbl9jYWNoZSAgICAgd29sZlNTTF9tZW1zYXZlX3Nlc3Npb25fY2FjaGUKKyNkZWZpbmUgQ3lhU1NMX21lbXJlc3RvcmVfc2Vzc2lvbl9jYWNoZSAgd29sZlNTTF9tZW1yZXN0b3JlX3Nlc3Npb25fY2FjaGUKKyNkZWZpbmUgQ3lhU1NMX2dldF9zZXNzaW9uX2NhY2hlX21lbXNpemUgd29sZlNTTF9nZXRfc2Vzc2lvbl9jYWNoZV9tZW1zaXplCisKKy8qIGNlcnRpZmljYXRlIGNhY2hlIHBlcnNpc3RlbmNlLCB1c2VzIGN0eCBzaW5jZSBjZXJ0cyBhcmUgcGVyIGN0eCAqLworI2RlZmluZSBDeWFTU0xfQ1RYX3NhdmVfY2VydF9jYWNoZSAgICAgICAgd29sZlNTTF9DVFhfc2F2ZV9jZXJ0X2NhY2hlCisjZGVmaW5lIEN5YVNTTF9DVFhfcmVzdG9yZV9jZXJ0X2NhY2hlICAgICB3b2xmU1NMX0NUWF9yZXN0b3JlX2NlcnRfY2FjaGUKKyNkZWZpbmUgQ3lhU1NMX0NUWF9tZW1zYXZlX2NlcnRfY2FjaGUgICAgIHdvbGZTU0xfQ1RYX21lbXNhdmVfY2VydF9jYWNoZQorI2RlZmluZSBDeWFTU0xfQ1RYX21lbXJlc3RvcmVfY2VydF9jYWNoZSAgd29sZlNTTF9DVFhfbWVtcmVzdG9yZV9jZXJ0X2NhY2hlCisjZGVmaW5lIEN5YVNTTF9DVFhfZ2V0X2NlcnRfY2FjaGVfbWVtc2l6ZSB3b2xmU1NMX0NUWF9nZXRfY2VydF9jYWNoZV9tZW1zaXplCisKKy8qIHdvbGZTU0wgZXh0ZW5zaW9ucyAqLworLyogZ2V0IHdvbGZTU0wgcGVlciBYNTA5X0NIQUlOICovCisjZGVmaW5lIEN5YVNTTF9nZXRfY2hhaW5fY291bnQgd29sZlNTTF9nZXRfY2hhaW5fY291bnQKKy8qIGluZGV4IGNlcnQgbGVuZ3RoICovCisjZGVmaW5lIEN5YVNTTF9nZXRfY2hhaW5fbGVuZ3RoIHdvbGZTU0xfZ2V0X2NoYWluX2xlbmd0aAorLyogaW5kZXggY2VydCBpbiBYNTA5ICovCisjZGVmaW5lIEN5YVNTTF9nZXRfY2hhaW5fWDUwOSB3b2xmU1NMX2dldF9jaGFpbl9YNTA5CisvKiBmcmVlIFg1MDkgKi8KKyNkZWZpbmUgQ3lhU1NMX0ZyZWVYNTA5IHdvbGZTU0xfRnJlZVg1MDkKKy8qIGdldCBpbmRleCBjZXJ0IGluIFBFTSAqLworI2RlZmluZSBDeWFTU0xfWDUwOV9nZXRfc3ViamVjdENOIHdvbGZTU0xfWDUwOV9nZXRfc3ViamVjdENOCisjZGVmaW5lIEN5YVNTTF9YNTA5X2dldF9kZXIgICAgICAgd29sZlNTTF9YNTA5X2dldF9kZXIKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfbm90QmVmb3JlICAgICB3b2xmU1NMX1g1MDlfbm90QmVmb3JlCisjZGVmaW5lIEN5YVNTTF9YNTA5X25vdEFmdGVyICAgICAgd29sZlNTTF9YNTA5X25vdEFmdGVyCisjZGVmaW5lIEN5YVNTTF9YNTA5X2dldF9ub3RCZWZvcmUgd29sZlNTTF9YNTA5X2dldF9ub3RCZWZvcmUKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZ2V0X25vdEFmdGVyICB3b2xmU1NMX1g1MDlfZ2V0X25vdEFmdGVyCisjZGVmaW5lIEN5YVNTTF9YNTA5X3ZlcnNpb24gICAgICAgd29sZlNTTF9YNTA5X3ZlcnNpb24KKworI2RlZmluZSBDeWFTU0xfY21wX3BlZXJfY2VydF90b19maWxlIHdvbGZTU0xfY21wX3BlZXJfY2VydF90b19maWxlCisKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZ2V0X25leHRfYWx0bmFtZSB3b2xmU1NMX1g1MDlfZ2V0X25leHRfYWx0bmFtZQorCisjZGVmaW5lIEN5YVNTTF9YNTA5X2QyaSB3b2xmU1NMX1g1MDlfZDJpCisjaWZuZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAjaWZuZGVmIE5PX1NURElPX0ZJTEVTWVNURU0KKyAgICAgICAgI2RlZmluZSBDeWFTU0xfWDUwOV9kMmlfZnAgd29sZlNTTF9YNTA5X2QyaV9mcAorICAgICNlbmRpZgorI2RlZmluZSBDeWFTU0xfWDUwOV9sb2FkX2NlcnRpZmljYXRlX2ZpbGUgd29sZlNTTF9YNTA5X2xvYWRfY2VydGlmaWNhdGVfZmlsZQorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1NFUAorI2RlZmluZSBDeWFTU0xfWDUwOV9nZXRfZGV2aWNlX3R5cGUgICAgICB3b2xmU1NMX1g1MDlfZ2V0X2RldmljZV90eXBlCisjZGVmaW5lIEN5YVNTTF9YNTA5X2dldF9od190eXBlICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfaHdfdHlwZQorI2RlZmluZSBDeWFTU0xfWDUwOV9nZXRfaHdfc2VyaWFsX251bWJlciB3b2xmU1NMX1g1MDlfZ2V0X2h3X3NlcmlhbF9udW1iZXIKKyNlbmRpZgorCisjZGVmaW5lIEN5YVNTTF9DVFhfU2V0R2VuQ29va2llIHdvbGZTU0xfQ1RYX1NldEdlbkNvb2tpZQorI2RlZmluZSBDeWFTU0xfU2V0Q29va2llQ3R4ICAgICB3b2xmU1NMX1NldENvb2tpZUN0eAorI2RlZmluZSBDeWFTU0xfR2V0Q29va2llQ3R4ICAgICB3b2xmU1NMX0dldENvb2tpZUN0eAorI2RlZmluZSBDeWFTU0xfRVJSX2dldF9lcnJvcl9saW5lX2RhdGEgd29sZlNTTF9FUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YQorI2RlZmluZSBDeWFTU0xfRVJSX2dldF9lcnJvciAgICAgICAgICAgd29sZlNTTF9FUlJfZ2V0X2Vycm9yCisjZGVmaW5lIEN5YVNTTF9FUlJfY2xlYXJfZXJyb3IgICAgICAgICB3b2xmU1NMX0VSUl9jbGVhcl9lcnJvcgorI2RlZmluZSBDeWFTU0xfUkFORF9zdGF0dXMgICAgICAgICAgICAgd29sZlNTTF9SQU5EX3N0YXR1cworI2RlZmluZSBDeWFTU0xfUkFORF9ieXRlcyAgICAgICAgICAgICAgd29sZlNTTF9SQU5EX2J5dGVzCisjZGVmaW5lIEN5YVNTTF9DVFhfc2V0X29wdGlvbnMgICAgICAgICB3b2xmU1NMX0NUWF9zZXRfb3B0aW9ucworI2RlZmluZSBDeWFTU0xfRVJSX2ZyZWVfc3RyaW5ncyAgICAgICAgd29sZlNTTF9FUlJfZnJlZV9zdHJpbmdzCisjZGVmaW5lIEN5YVNTTF9FUlJfcmVtb3ZlX3N0YXRlICAgICAgICB3b2xmU1NMX0VSUl9yZW1vdmVfc3RhdGUKKyNkZWZpbmUgQ3lhU1NMX0VWUF9jbGVhbnVwICAgICAgICAgICAgIHdvbGZTU0xfRVZQX2NsZWFudXAKKyNkZWZpbmUgQ3lhU1NMX2NsZWFudXBfYWxsX2V4X2RhdGEgICAgIHdvbGZTU0xfY2xlYW51cF9hbGxfZXhfZGF0YQorI2RlZmluZSBDeWFTU0xfQ1RYX3NldF9tb2RlICAgICAgICAgICAgd29sZlNTTF9DVFhfc2V0X21vZGUKKyNkZWZpbmUgQ3lhU1NMX0NUWF9nZXRfbW9kZSAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2dldF9tb2RlCisjZGVmaW5lIEN5YVNTTF9DVFhfc2V0X2RlZmF1bHRfcmVhZF9haGVhZCAgIHdvbGZTU0xfQ1RYX3NldF9kZWZhdWx0X3JlYWRfYWhlYWQKKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXNzX3NldF9jYWNoZV9zaXplICAgICAgd29sZlNTTF9DVFhfc2Vzc19zZXRfY2FjaGVfc2l6ZQorI2RlZmluZSBDeWFTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyB3b2xmU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMKKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0ICAgd29sZlNTTF9DVFhfc2V0X3Nlc3Npb25faWRfY29udGV4dAorI2RlZmluZSBDeWFTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUgICAgICAgICB3b2xmU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlCisjZGVmaW5lIEN5YVNTTF9CSU9fcHJpbnRmICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3ByaW50ZgorI2RlZmluZSBDeWFTU0xfQVNOMV9VVENUSU1FX3ByaW50ICAgICAgICAgICB3b2xmU1NMX0FTTjFfVVRDVElNRV9wcmludAorI2RlZmluZSBDeWFTU0xfc2tfbnVtICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3NrX251bQorI2RlZmluZSBDeWFTU0xfc2tfdmFsdWUgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3NrX3ZhbHVlCisKKy8qIHN0dW5uZWwgNC4yOCBuZWVkcyAqLworI2RlZmluZSBDeWFTU0xfQ1RYX2dldF9leF9kYXRhICAgICAgICB3b2xmU1NMX0NUWF9nZXRfZXhfZGF0YQorI2RlZmluZSBDeWFTU0xfQ1RYX3NldF9leF9kYXRhICAgICAgICB3b2xmU1NMX0NUWF9zZXRfZXhfZGF0YQorI2RlZmluZSBDeWFTU0xfQ1RYX3Nlc3Nfc2V0X2dldF9jYiAgICB3b2xmU1NMX0NUWF9zZXNzX3NldF9nZXRfY2IKKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXNzX3NldF9uZXdfY2IgICAgd29sZlNTTF9DVFhfc2Vzc19zZXRfbmV3X2NiCisjZGVmaW5lIEN5YVNTTF9DVFhfc2Vzc19zZXRfcmVtb3ZlX2NiIHdvbGZTU0xfQ1RYX3Nlc3Nfc2V0X3JlbW92ZV9jYgorCisjZGVmaW5lIEN5YVNTTF9pMmRfU1NMX1NFU1NJT04gd29sZlNTTF9pMmRfU1NMX1NFU1NJT04KKyNkZWZpbmUgQ3lhU1NMX2QyaV9TU0xfU0VTU0lPTiB3b2xmU1NMX2QyaV9TU0xfU0VTU0lPTgorCisjZGVmaW5lIEN5YVNTTF9TRVNTSU9OX2dldF90aW1lb3V0ICB3b2xmU1NMX1NFU1NJT05fZ2V0X3RpbWVvdXQKKyNkZWZpbmUgQ3lhU1NMX1NFU1NJT05fZ2V0X3RpbWUgICAgIHdvbGZTU0xfU0VTU0lPTl9nZXRfdGltZQorI2RlZmluZSBDeWFTU0xfQ1RYX2dldF9leF9uZXdfaW5kZXggd29sZlNTTF9DVFhfZ2V0X2V4X25ld19pbmRleAorCisKKy8qIHdvbGZpby5jICovCisjZGVmaW5lIENZQVNTTF9DQklPX0VSUl9JU1IgICAgICAgIFdPTEZTU0xfQ0JJT19FUlJfSVNSCisjZGVmaW5lIENZQVNTTF9DQklPX0VSUl9USU1FT1VUICAgIFdPTEZTU0xfQ0JJT19FUlJfVElNRU9VVAorI2RlZmluZSBDWUFTU0xfQ0JJT19FUlJfR0VORVJBTCAgICBXT0xGU1NMX0NCSU9fRVJSX0dFTkVSQUwKKyNkZWZpbmUgQ1lBU1NMX0NCSU9fRVJSX0NPTk5fUlNUICAgV09MRlNTTF9DQklPX0VSUl9DT05OX1JTVAorI2RlZmluZSBDWUFTU0xfQ0JJT19FUlJfV0FOVF9SRUFEICBXT0xGU1NMX0NCSU9fRVJSX1dBTlRfUkVBRAorI2RlZmluZSBDWUFTU0xfQ0JJT19FUlJfV0FOVF9XUklURSBXT0xGU1NMX0NCSU9fRVJSX1dBTlRfV1JJVEUKKyNkZWZpbmUgQ1lBU1NMX0NCSU9fRVJSX0NPTk5fQ0xPU0UgV09MRlNTTF9DQklPX0VSUl9DT05OX0NMT1NFCisKKyNkZWZpbmUgQ3lhU1NMX0dldElPUmVhZEN0eCAgICAgICAgd29sZlNTTF9HZXRJT1JlYWRDdHgKKyNkZWZpbmUgQ3lhU1NMX0dldElPV3JpdGVDdHggICAgICAgd29sZlNTTF9HZXRJT1dyaXRlQ3R4CisKKy8qIHNyYy90bHMuYyAqLworI2RlZmluZSBDWUFTU0xfU0VSVkVSX0VORCAgICAgICAgICBXT0xGU1NMX1NFUlZFUl9FTkQKKyNkZWZpbmUgQ1lBU1NMX1RMU19ITUFDX0lOTkVSX1NaICAgV09MRlNTTF9UTFNfSE1BQ19JTk5FUl9TWgorCisjZGVmaW5lIEN5YVNTTF9EZXJpdmVUbHNLZXlzICAgICAgIHdvbGZTU0xfRGVyaXZlVGxzS2V5cworI2RlZmluZSBDeWFTU0xfbWFrZV9lYXBfa2V5cyAgICAgICB3b2xmU1NMX21ha2VfZWFwX2tleXMKKyNkZWZpbmUgQ3lhU1NMX01ha2VUbHNNYXN0ZXJTZWNyZXQgd29sZlNTTF9NYWtlVGxzTWFzdGVyU2VjcmV0CisKKy8qIHNyYy9pbnRlcm5hbC5jICovCisjZGVmaW5lIENZQVNTTF9DSEFJTl9DQSAgICAgICAgICAgICAgICBXT0xGU1NMX0NIQUlOX0NBCisjZGVmaW5lIENZQVNTTF9BTEVSVF9ISVNUT1JZICAgICAgICAgICBXT0xGU1NMX0FMRVJUX0hJU1RPUlkKKyNkZWZpbmUgQ1lBU1NMX1NFU1NJT05fVElNRU9VVCAgICAgICAgIFdPTEZTU0xfU0VTU0lPTl9USU1FT1VUCisjZGVmaW5lIENZQVNTTF9DQklPX0VSUl9DT05OX1JTVCAgICAgICBXT0xGU1NMX0NCSU9fRVJSX0NPTk5fUlNUCisKKyNkZWZpbmUgY3lhc3NsX3JjNCAgICAgICAgICAgICAgICAgICAgIHdvbGZzc2xfcmM0CisjZGVmaW5lIGN5YXNzbF9hZXMgICAgICAgICAgICAgICAgICAgICB3b2xmc3NsX2FlcworI2RlZmluZSBjeWFzc2xfY2hhY2hhICAgICAgICAgICAgICAgICAgd29sZnNzbF9jaGFjaGEKKyNkZWZpbmUgQ3lhU1NMX0VSUl9yZWFzb25fZXJyb3Jfc3RyaW5nIHdvbGZTU0xfRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmcKKworI2RlZmluZSBDeWFTU0xfc2V0X2V4X2RhdGEgIHdvbGZTU0xfc2V0X2V4X2RhdGEKKyNkZWZpbmUgQ3lhU1NMX2dldF9zaHV0ZG93biB3b2xmU1NMX2dldF9zaHV0ZG93bgorI2RlZmluZSBDeWFTU0xfc2V0X3JmZCAgICAgIHdvbGZTU0xfc2V0X3JmZAorI2RlZmluZSBDeWFTU0xfc2V0X3dmZCAgICAgIHdvbGZTU0xfc2V0X3dmZAorI2RlZmluZSBDeWFTU0xfc2V0X3NodXRkb3duIHdvbGZTU0xfc2V0X3NodXRkb3duCisjZGVmaW5lIEN5YVNTTF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0IHdvbGZTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dAorI2RlZmluZSBDeWFTU0xfc2V0X2Nvbm5lY3Rfc3RhdGUgICAgICB3b2xmU1NMX3NldF9jb25uZWN0X3N0YXRlCisjZGVmaW5lIEN5YVNTTF9zZXRfYWNjZXB0X3N0YXRlICAgICAgIHdvbGZTU0xfc2V0X2FjY2VwdF9zdGF0ZQorI2RlZmluZSBDeWFTU0xfc2Vzc2lvbl9yZXVzZWQgICAgICAgICB3b2xmU1NMX3Nlc3Npb25fcmV1c2VkCisjZGVmaW5lIEN5YVNTTF9TRVNTSU9OX2ZyZWUgICAgICAgICAgIHdvbGZTU0xfU0VTU0lPTl9mcmVlCisjZGVmaW5lIEN5YVNTTF9pc19pbml0X2ZpbmlzaGVkICAgICAgIHdvbGZTU0xfaXNfaW5pdF9maW5pc2hlZAorCisjZGVmaW5lIEN5YVNTTF9nZXRfdmVyc2lvbiAgICAgICAgICAgICAgd29sZlNTTF9nZXRfdmVyc2lvbgorI2RlZmluZSBDeWFTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyX3N1aXRlIHdvbGZTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyX3N1aXRlCisjZGVmaW5lIEN5YVNTTF9nZXRfY3VycmVudF9jaXBoZXIgICAgICAgd29sZlNTTF9nZXRfY3VycmVudF9jaXBoZXIKKyNkZWZpbmUgQ3lhU1NMX0NJUEhFUl9kZXNjcmlwdGlvbiAgICAgICB3b2xmU1NMX0NJUEhFUl9kZXNjcmlwdGlvbgorI2RlZmluZSBDeWFTU0xfQ0lQSEVSX2dldF9uYW1lICAgICAgICAgIHdvbGZTU0xfQ0lQSEVSX2dldF9uYW1lCisjZGVmaW5lIEN5YVNTTF9nZXRfY2lwaGVyICAgICAgICAgICAgICAgd29sZlNTTF9nZXRfY2lwaGVyCisjZGVmaW5lIEN5YVNTTF9nZXQxX3Nlc3Npb24gICAgICAgICAgICAgd29sZlNTTF9nZXQxX3Nlc3Npb24KKworI2RlZmluZSBDeWFTU0xfWDUwOV9mcmVlICAgICAgd29sZlNTTF9YNTA5X2ZyZWUKKyNkZWZpbmUgQ3lhU1NMX09QRU5TU0xfZnJlZSAgIHdvbGZTU0xfT1BFTlNTTF9mcmVlCisjZGVmaW5lIEN5YVNTTF9PQ1NQX3BhcnNlX3VybCB3b2xmU1NMX09DU1BfcGFyc2VfdXJsCisKKyNkZWZpbmUgQ3lhU1NMdjIzX2NsaWVudF9tZXRob2Qgd29sZlNTTHYyM19jbGllbnRfbWV0aG9kCisjZGVmaW5lIEN5YVNTTHYyX2NsaWVudF9tZXRob2QgIHdvbGZTU0x2Ml9jbGllbnRfbWV0aG9kCisjZGVmaW5lIEN5YVNTTHYyX3NlcnZlcl9tZXRob2QgIHdvbGZTU0x2Ml9zZXJ2ZXJfbWV0aG9kCisKKyNkZWZpbmUgQ3lhU1NMX01ENF9Jbml0ICAgICB3b2xmU1NMX01ENF9Jbml0CisjZGVmaW5lIEN5YVNTTF9NRDRfVXBkYXRlICAgd29sZlNTTF9NRDRfVXBkYXRlCisjZGVmaW5lIEN5YVNTTF9NRDRfRmluYWwgICAgd29sZlNTTF9NRDRfRmluYWwKKworCisjZGVmaW5lIEN5YVNTTF9CSU9fbmV3ICAgICAgd29sZlNTTF9CSU9fbmV3CisjZGVmaW5lIEN5YVNTTF9CSU9fZnJlZSAgICAgd29sZlNTTF9CSU9fZnJlZQorI2RlZmluZSBDeWFTU0xfQklPX2ZyZWVfYWxsIHdvbGZTU0xfQklPX2ZyZWVfYWxsCisjZGVmaW5lIEN5YVNTTF9CSU9fcmVhZCAgICAgd29sZlNTTF9CSU9fcmVhZAorI2RlZmluZSBDeWFTU0xfQklPX3dyaXRlICAgIHdvbGZTU0xfQklPX3dyaXRlCisjZGVmaW5lIEN5YVNTTF9CSU9fcHVzaCAgICAgd29sZlNTTF9CSU9fcHVzaAorI2RlZmluZSBDeWFTU0xfQklPX3BvcCAgICAgIHdvbGZTU0xfQklPX3BvcAorI2RlZmluZSBDeWFTU0xfQklPX2ZsdXNoICAgIHdvbGZTU0xfQklPX2ZsdXNoCisjZGVmaW5lIEN5YVNTTF9CSU9fcGVuZGluZyAgd29sZlNTTF9CSU9fcGVuZGluZworCisjZGVmaW5lIEN5YVNTTF9CSU9fZl9idWZmZXIgICAgICAgICAgICAgIHdvbGZTU0xfQklPX2ZfYnVmZmVyCisjZGVmaW5lIEN5YVNTTF9CSU9fc2V0X3dyaXRlX2J1ZmZlcl9zaXplIHdvbGZTU0xfQklPX3NldF93cml0ZV9idWZmZXJfc2l6ZQorI2RlZmluZSBDeWFTU0xfQklPX2Zfc3NsICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19mX3NzbAorI2RlZmluZSBDeWFTU0xfQklPX25ld19zb2NrZXQgICAgICAgICAgICB3b2xmU1NMX0JJT19uZXdfc29ja2V0CisjZGVmaW5lIEN5YVNTTF9CSU9fZW9mICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX2VvZgorCisjZGVmaW5lIEN5YVNTTF9CSU9fc19tZW0gICAgICAgIHdvbGZTU0xfQklPX3NfbWVtCisjZGVmaW5lIEN5YVNTTF9CSU9fZl9iYXNlNjQgICAgIHdvbGZTU0xfQklPX2ZfYmFzZTY0CisjZGVmaW5lIEN5YVNTTF9CSU9fc2V0X2ZsYWdzICAgIHdvbGZTU0xfQklPX3NldF9mbGFncworI2RlZmluZSBDeWFTU0xfQklPX2dldF9tZW1fZGF0YSB3b2xmU1NMX0JJT19nZXRfbWVtX2RhdGEKKyNkZWZpbmUgQ3lhU1NMX0JJT19uZXdfbWVtX2J1ZiAgd29sZlNTTF9CSU9fbmV3X21lbV9idWYKKworCisjZGVmaW5lIEN5YVNTTF9CSU9fc2V0X3NzbCB3b2xmU1NMX0JJT19zZXRfc3NsCisjZGVmaW5lIEN5YVNTTF9zZXRfYmlvICAgICB3b2xmU1NMX3NldF9iaW8KKworI2RlZmluZSBDeWFTU0xfYWRkX2FsbF9hbGdvcml0aG1zIHdvbGZTU0xfYWRkX2FsbF9hbGdvcml0aG1zCisjZGVmaW5lIEN5YVNTTF9SQU5EX3NjcmVlbiAgICAgICAgd29sZlNTTF9SQU5EX3NjcmVlbgorI2RlZmluZSBDeWFTU0xfUkFORF9maWxlX25hbWUgICAgIHdvbGZTU0xfUkFORF9maWxlX25hbWUKKyNkZWZpbmUgQ3lhU1NMX1JBTkRfd3JpdGVfZmlsZSAgICB3b2xmU1NMX1JBTkRfd3JpdGVfZmlsZQorI2RlZmluZSBDeWFTU0xfUkFORF9sb2FkX2ZpbGUgICAgIHdvbGZTU0xfUkFORF9sb2FkX2ZpbGUKKyNkZWZpbmUgQ3lhU1NMX1JBTkRfZWdkICAgICAgICAgICB3b2xmU1NMX1JBTkRfZWdkCisjZGVmaW5lIEN5YVNTTF9SQU5EX3NlZWQgICAgICAgICAgd29sZlNTTF9SQU5EX3NlZWQKKyNkZWZpbmUgQ3lhU1NMX1JBTkRfYWRkICAgICAgICAgICB3b2xmU1NMX1JBTkRfYWRkCisKKyNkZWZpbmUgQ3lhU1NMX0NPTVBfemxpYiB3b2xmU1NMX0NPTVBfemxpYgorI2RlZmluZSBDeWFTU0xfQ09NUF9ybGUgIHdvbGZTU0xfQ09NUF9ybGUKKyNkZWZpbmUgQ3lhU1NMX0NPTVBfYWRkX2NvbXByZXNzaW9uX21ldGhvZCAgd29sZlNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2QKKyNkZWZpbmUgQ3lhU1NMX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjayAgd29sZlNTTF9zZXRfZHlubG9ja19jcmVhdGVfY2FsbGJhY2sKKyNkZWZpbmUgQ3lhU1NMX3NldF9keW5sb2NrX2xvY2tfY2FsbGJhY2sgICAgd29sZlNTTF9zZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrCisjZGVmaW5lIEN5YVNTTF9zZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrIHdvbGZTU0xfc2V0X2R5bmxvY2tfZGVzdHJveV9jYWxsYmFjaworI2RlZmluZSBDeWFTU0xfZ2V0X2V4X25ld19pbmRleCAgICAgd29sZlNTTF9nZXRfZXhfbmV3X2luZGV4CisjZGVmaW5lIEN5YVNTTF9zZXRfaWRfY2FsbGJhY2sgICAgICB3b2xmU1NMX3NldF9pZF9jYWxsYmFjaworI2RlZmluZSBDeWFTU0xfc2V0X2xvY2tpbmdfY2FsbGJhY2sgd29sZlNTTF9zZXRfbG9ja2luZ19jYWxsYmFjaworI2RlZmluZSBDeWFTU0xfbnVtX2xvY2tzICAgICAgICAgICAgd29sZlNTTF9udW1fbG9ja3MKKworI2RlZmluZSBDeWFTU0xfWDUwOV9TVE9SRV9DVFhfZ2V0X2N1cnJlbnRfY2VydCB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfU1RPUkVfQ1RYX2dldF9lcnJvciAgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3IKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcl9kZXB0aCAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGgKKworI2RlZmluZSBDeWFTU0xfWDUwOV9OQU1FX29uZWxpbmUgICAgICAgICAgICB3b2xmU1NMX1g1MDlfTkFNRV9vbmVsaW5lCisjZGVmaW5lIEN5YVNTTF9YNTA5X2dldF9pc3N1ZXJfbmFtZSAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfaXNzdWVyX25hbWUKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZ2V0X3N1YmplY3RfbmFtZSAgICAgICAgd29sZlNTTF9YNTA5X2dldF9zdWJqZWN0X25hbWUKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZXh0X2lzU2V0X2J5X05JRCAgICAgICAgd29sZlNTTF9YNTA5X2V4dF9pc1NldF9ieV9OSUQKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZXh0X2dldF9jcml0aWNhbF9ieV9OSUQgd29sZlNTTF9YNTA5X2V4dF9nZXRfY3JpdGljYWxfYnlfTklECisjZGVmaW5lIEN5YVNTTF9YNTA5X2dldF9pc0NBICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfaXNDQQorI2RlZmluZSBDeWFTU0xfWDUwOV9nZXRfaXNTZXRfcGF0aExlbmd0aCAgICB3b2xmU1NMX1g1MDlfZ2V0X2lzU2V0X3BhdGhMZW5ndGgKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZ2V0X3BhdGhMZW5ndGggICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9wYXRoTGVuZ3RoCisjZGVmaW5lIEN5YVNTTF9YNTA5X2dldF9rZXlVc2FnZSAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfa2V5VXNhZ2UKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZ2V0X2F1dGhvcml0eUtleUlEICAgICAgd29sZlNTTF9YNTA5X2dldF9hdXRob3JpdHlLZXlJRAorI2RlZmluZSBDeWFTU0xfWDUwOV9nZXRfc3ViamVjdEtleUlEICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X3N1YmplY3RLZXlJRAorI2RlZmluZSBDeWFTU0xfWDUwOV9OQU1FX2VudHJ5X2NvdW50ICAgICAgICB3b2xmU1NMX1g1MDlfTkFNRV9lbnRyeV9jb3VudAorI2RlZmluZSBDeWFTU0xfWDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRCAgICB3b2xmU1NMX1g1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfdmVyaWZ5X2NlcnQgICAgICAgICAgICAgd29sZlNTTF9YNTA5X3ZlcmlmeV9jZXJ0CisjZGVmaW5lIEN5YVNTTF9YNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyB3b2xmU1NMX1g1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nCisjZGVmaW5lIEN5YVNTTF9YNTA5X2dldF9zaWduYXR1cmVfdHlwZSAgICAgIHdvbGZTU0xfWDUwOV9nZXRfc2lnbmF0dXJlX3R5cGUKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZ2V0X3NpZ25hdHVyZSAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9zaWduYXR1cmUKKworI2RlZmluZSBDeWFTU0xfWDUwOV9MT09LVVBfYWRkX2RpciAgIHdvbGZTU0xfWDUwOV9MT09LVVBfYWRkX2RpcgorI2RlZmluZSBDeWFTU0xfWDUwOV9MT09LVVBfbG9hZF9maWxlIHdvbGZTU0xfWDUwOV9MT09LVVBfbG9hZF9maWxlCisjZGVmaW5lIEN5YVNTTF9YNTA5X0xPT0tVUF9oYXNoX2RpciAgd29sZlNTTF9YNTA5X0xPT0tVUF9oYXNoX2RpcgorI2RlZmluZSBDeWFTU0xfWDUwOV9MT09LVVBfZmlsZSAgICAgIHdvbGZTU0xfWDUwOV9MT09LVVBfZmlsZQorCisjZGVmaW5lIEN5YVNTTF9YNTA5X1NUT1JFX2FkZF9sb29rdXAgd29sZlNTTF9YNTA5X1NUT1JFX2FkZF9sb29rdXAKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfU1RPUkVfbmV3ICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfbmV3CisjZGVmaW5lIEN5YVNTTF9YNTA5X1NUT1JFX2ZyZWUgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX2ZyZWUKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfU1RPUkVfYWRkX2NlcnQgICB3b2xmU1NMX1g1MDlfU1RPUkVfYWRkX2NlcnQKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfU1RPUkVfc2V0X2RlZmF1bHRfcGF0aHMgd29sZlNTTF9YNTA5X1NUT1JFX3NldF9kZWZhdWx0X3BhdGhzCisjZGVmaW5lIEN5YVNTTF9YNTA5X1NUT1JFX2dldF9ieV9zdWJqZWN0ICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9nZXRfYnlfc3ViamVjdAorI2RlZmluZSBDeWFTU0xfWDUwOV9TVE9SRV9DVFhfbmV3ICAgICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX25ldworI2RlZmluZSBDeWFTU0xfWDUwOV9TVE9SRV9DVFhfaW5pdCAgICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2luaXQKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfU1RPUkVfQ1RYX2ZyZWUgICAgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9mcmVlCisjZGVmaW5lIEN5YVNTTF9YNTA5X1NUT1JFX0NUWF9jbGVhbnVwICAgICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfY2xlYW51cAorCisjZGVmaW5lIEN5YVNTTF9YNTA5X0NSTF9nZXRfbGFzdFVwZGF0ZSB3b2xmU1NMX1g1MDlfQ1JMX2dldF9sYXN0VXBkYXRlCisjZGVmaW5lIEN5YVNTTF9YNTA5X0NSTF9nZXRfbmV4dFVwZGF0ZSB3b2xmU1NMX1g1MDlfQ1JMX2dldF9uZXh0VXBkYXRlCisKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZ2V0X3B1YmtleSB3b2xmU1NMX1g1MDlfZ2V0X3B1YmtleQorI2RlZmluZSBDeWFTU0xfWDUwOV9DUkxfdmVyaWZ5IHdvbGZTU0xfWDUwOV9DUkxfdmVyaWZ5CisjZGVmaW5lIEN5YVNTTF9YNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3IgIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yCisjZGVmaW5lIEN5YVNTTF9YNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRzIHdvbGZTU0xfWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cworI2RlZmluZSBDeWFTU0xfRVZQX1BLRVlfZnJlZSAgICAgICAgICAgICB3b2xmU1NMX0VWUF9QS0VZX2ZyZWUKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfY21wX2N1cnJlbnRfdGltZSAgICAgd29sZlNTTF9YNTA5X2NtcF9jdXJyZW50X3RpbWUKKyNkZWZpbmUgQ3lhU1NMX3NrX1g1MDlfUkVWT0tFRF9udW0gICAgICAgd29sZlNTTF9za19YNTA5X1JFVk9LRURfbnVtCisKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfQ1JMX2dldF9SRVZPS0VEICAgICB3b2xmU1NMX1g1MDlfQ1JMX2dldF9SRVZPS0VECisjZGVmaW5lIEN5YVNTTF9za19YNTA5X1JFVk9LRURfdmFsdWUgICAgd29sZlNTTF9za19YNTA5X1JFVk9LRURfdmFsdWUKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZ2V0X3NlcmlhbE51bWJlciAgICB3b2xmU1NMX1g1MDlfZ2V0X3NlcmlhbE51bWJlcgorI2RlZmluZSBDeWFTU0xfQVNOMV9USU1FX3ByaW50ICAgICAgICAgIHdvbGZTU0xfQVNOMV9USU1FX3ByaW50CisjZGVmaW5lIEN5YVNTTF9BU04xX0lOVEVHRVJfY21wICAgICAgICAgd29sZlNTTF9BU04xX0lOVEVHRVJfY21wCisjZGVmaW5lIEN5YVNTTF9BU04xX0lOVEVHRVJfZ2V0ICAgICAgICAgd29sZlNTTF9BU04xX0lOVEVHRVJfZ2V0CisjZGVmaW5lIEN5YVNTTF9sb2FkX2NsaWVudF9DQV9maWxlICAgICAgd29sZlNTTF9sb2FkX2NsaWVudF9DQV9maWxlCisjZGVmaW5lIEN5YVNTTF9DVFhfc2V0X2NsaWVudF9DQV9saXN0ICAgd29sZlNTTF9DVFhfc2V0X2NsaWVudF9DQV9saXN0CisjZGVmaW5lIEN5YVNTTF9YNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YSAgICAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YQorI2RlZmluZSBDeWFTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4IHdvbGZTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4CisjZGVmaW5lIEN5YVNTTF9nZXRfZXhfZGF0YSAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9nZXRfZXhfZGF0YQorCisjZGVmaW5lIEN5YVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhIHdvbGZTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YQorI2RlZmluZSBDeWFTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYiAgICAgICAgICB3b2xmU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2IKKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXRfaW5mb19jYWxsYmFjayAgd29sZlNTTF9DVFhfc2V0X2luZm9fY2FsbGJhY2sKKyNkZWZpbmUgQ3lhU1NMX0VSUl9wZWVrX2Vycm9yICAgICAgICAgd29sZlNTTF9FUlJfcGVla19lcnJvcgorI2RlZmluZSBDeWFTU0xfR0VUX1JFQVNPTiAgICAgICAgICAgICB3b2xmU1NMX0dFVF9SRUFTT04KKyNkZWZpbmUgQ3lhU1NMX2FsZXJ0X3R5cGVfc3RyaW5nX2xvbmcgd29sZlNTTF9hbGVydF90eXBlX3N0cmluZ19sb25nCisjZGVmaW5lIEN5YVNTTF9hbGVydF9kZXNjX3N0cmluZ19sb25nIHdvbGZTU0xfYWxlcnRfZGVzY19zdHJpbmdfbG9uZworI2RlZmluZSBDeWFTU0xfc3RhdGVfc3RyaW5nX2xvbmcgICAgICB3b2xmU1NMX3N0YXRlX3N0cmluZ19sb25nCisKKyNkZWZpbmUgQ3lhU1NMX1JTQV9nZW5lcmF0ZV9rZXkgICAgICAgICB3b2xmU1NMX1JTQV9nZW5lcmF0ZV9rZXkKKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXRfdG1wX3JzYV9jYWxsYmFjayB3b2xmU1NMX0NUWF9zZXRfdG1wX3JzYV9jYWxsYmFjaworI2RlZmluZSBDeWFTU0xfUEVNX2RlZl9jYWxsYmFjayAgICAgICAgIHdvbGZTU0xfUEVNX2RlZl9jYWxsYmFjaworI2RlZmluZSBDeWFTU0xfQ1RYX3Nlc3NfYWNjZXB0ICAgICAgICAgIHdvbGZTU0xfQ1RYX3Nlc3NfYWNjZXB0CisjZGVmaW5lIEN5YVNTTF9DVFhfc2Vzc19jb25uZWN0ICAgICAgICAgd29sZlNTTF9DVFhfc2Vzc19jb25uZWN0CisjZGVmaW5lIEN5YVNTTF9DVFhfc2Vzc19hY2NlcHRfZ29vZCAgICAgd29sZlNTTF9DVFhfc2Vzc19hY2NlcHRfZ29vZAorI2RlZmluZSBDeWFTU0xfQ1RYX3Nlc3NfY29ubmVjdF9nb29kICAgIHdvbGZTU0xfQ1RYX3Nlc3NfY29ubmVjdF9nb29kCisjZGVmaW5lIEN5YVNTTF9DVFhfc2Vzc19hY2NlcHRfcmVuZWdvdGlhdGUgIHdvbGZTU0xfQ1RYX3Nlc3NfYWNjZXB0X3JlbmVnb3RpYXRlCisjZGVmaW5lIEN5YVNTTF9DVFhfc2Vzc19jb25uZWN0X3JlbmVnb3RpYXRlIHdvbGZTU0xfQ1RYX3Nlc3NfY29ubmVjdF9yZW5lZ290aWF0ZQorI2RlZmluZSBDeWFTU0xfQ1RYX3Nlc3NfaGl0cyAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9zZXNzX2hpdHMKKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXNzX2NiX2hpdHMgICAgICAgICAgICAgd29sZlNTTF9DVFhfc2Vzc19jYl9oaXRzCisjZGVmaW5lIEN5YVNTTF9DVFhfc2Vzc19jYWNoZV9mdWxsICAgICAgICAgIHdvbGZTU0xfQ1RYX3Nlc3NfY2FjaGVfZnVsbAorI2RlZmluZSBDeWFTU0xfQ1RYX3Nlc3NfbWlzc2VzICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9zZXNzX21pc3NlcworI2RlZmluZSBDeWFTU0xfQ1RYX3Nlc3NfdGltZW91dHMgICAgICAgICAgICB3b2xmU1NMX0NUWF9zZXNzX3RpbWVvdXRzCisjZGVmaW5lIEN5YVNTTF9DVFhfc2Vzc19udW1iZXIgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX3Nlc3NfbnVtYmVyCisjZGVmaW5lIEN5YVNTTF9DVFhfc2Vzc19nZXRfY2FjaGVfc2l6ZSAgICAgIHdvbGZTU0xfQ1RYX3Nlc3NfZ2V0X2NhY2hlX3NpemUKKworCisKKy8qIHNyYy9rZXlzLmMgKi8KKyNkZWZpbmUgY3lhc3NsX3RyaXBsZV9kZXMgd29sZnNzbF90cmlwbGVfZGVzCisKKy8qIEluaXRpYWxpemF0aW9uIGFuZCBTaHV0ZG93biAqLworI2RlZmluZSBDeWFTU0xfSW5pdCAgICAgICAgIHdvbGZTU0xfSW5pdAorI2RlZmluZSBDeWFTU0xfbGlicmFyeV9pbml0IHdvbGZTU0xfbGlicmFyeV9pbml0CisjZGVmaW5lIEN5YVNTTF9DbGVhbnVwICAgICAgd29sZlNTTF9DbGVhbnVwCisjZGVmaW5lIEN5YVNTTF9zaHV0ZG93biAgICAgd29sZlNTTF9zaHV0ZG93bgorCisvKiBDZXJ0cyBhbmQga2V5cyAqLworI2RlZmluZSBDeWFTU0xfU2V0VG1wREggICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1NldFRtcERICisjZGVmaW5lIEN5YVNTTF9LZWVwQXJyYXlzICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfS2VlcEFycmF5cworI2RlZmluZSBDeWFTU0xfRnJlZUFycmF5cyAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0ZyZWVBcnJheXMKKyNkZWZpbmUgQ3lhU1NMX1NldFRtcERIX2ZpbGUgICAgICAgICAgICAgICAgd29sZlNTTF9TZXRUbXBESF9maWxlCisjZGVmaW5lIEN5YVNTTF91c2VfUHJpdmF0ZUtleV9idWZmZXIgICAgICAgIHdvbGZTU0xfdXNlX1ByaXZhdGVLZXlfYnVmZmVyCisjZGVmaW5lIEN5YVNTTF91c2VfY2VydGlmaWNhdGVfYnVmZmVyICAgICAgIHdvbGZTU0xfdXNlX2NlcnRpZmljYXRlX2J1ZmZlcgorI2RlZmluZSBDeWFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2J1ZmZlciAgICAgICB3b2xmU1NMX0NUWF9sb2FkX3ZlcmlmeV9idWZmZXIKKyNkZWZpbmUgQ3lhU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlICAgICAgd29sZlNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZQorI2RlZmluZSBDeWFTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlICAgICB3b2xmU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZQorI2RlZmluZSBDeWFTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2J1ZmZlciAgICB3b2xmU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9idWZmZXIKKyNkZWZpbmUgQ3lhU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfYnVmZmVyICAgd29sZlNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2J1ZmZlcgorI2RlZmluZSBDeWFTU0xfQ1RYX3VzZV9OVFJVUHJpdmF0ZUtleV9maWxlICB3b2xmU1NMX0NUWF91c2VfTlRSVVByaXZhdGVLZXlfZmlsZQorI2RlZmluZSBDeWFTU0xfdXNlX2NlcnRpZmljYXRlX2NoYWluX2J1ZmZlciB3b2xmU1NMX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9idWZmZXIKKyNkZWZpbmUgQ3lhU1NMX0NUWF9kZXJfbG9hZF92ZXJpZnlfbG9jYXRpb25zICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfZGVyX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucworI2RlZmluZSBDeWFTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZQorI2RlZmluZSBDeWFTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9idWZmZXIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fYnVmZmVyCisKKy8qIENvbnRleHQgYW5kIFNlc3Npb24gU2V0dXAqLworI2RlZmluZSBDeWFTU0xfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9uZXcKKyNkZWZpbmUgQ3lhU1NMX2ZyZWUgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZnJlZQorI2RlZmluZSBDeWFTU0xfc2V0X2ZkICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9zZXRfZmQKKyNkZWZpbmUgQ3lhU1NMX0NUWF9uZXcgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX25ldworI2RlZmluZSBDeWFTU0xfQ1RYX2ZyZWUgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZQorI2RlZmluZSBDeWFTU0xfU2V0VmVyc2lvbiAgICAgICAgICAgICAgICAgd29sZlNTTF9TZXRWZXJzaW9uCisjZGVmaW5lIEN5YVNTTF9zZXRfdmVyaWZ5ICAgICAgICAgICAgICAgICB3b2xmU1NMX3NldF92ZXJpZnkKKyNkZWZpbmUgQ3lhU1NMX3NldF9zZXNzaW9uICAgICAgICAgICAgICAgIHdvbGZTU0xfc2V0X3Nlc3Npb24KKyNkZWZpbmUgQ3lhU1NMX3NldF90aW1lb3V0ICAgICAgICAgICAgICAgIHdvbGZTU0xfc2V0X3RpbWVvdXQKKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXRfdmVyaWZ5ICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX3NldF92ZXJpZnkKKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXRfdGltZW91dCAgICAgICAgICAgIHdvbGZTU0xfQ1RYX3NldF90aW1lb3V0CisjZGVmaW5lIEN5YVNTTF9zZXRfY2lwaGVyX2xpc3QgICAgICAgICAgICB3b2xmU1NMX3NldF9jaXBoZXJfbGlzdAorI2RlZmluZSBDeWFTU0xfc2V0X2NvbXByZXNzaW9uICAgICAgICAgICAgd29sZlNTTF9zZXRfY29tcHJlc3Npb24KKyNkZWZpbmUgQ3lhVExTdjFfY2xpZW50X21ldGhvZCAgICAgICAgICAgIHdvbGZUTFN2MV9jbGllbnRfbWV0aG9kCisjZGVmaW5lIEN5YVRMU3YxX3NlcnZlcl9tZXRob2QgICAgICAgICAgICB3b2xmVExTdjFfc2VydmVyX21ldGhvZAorI2RlZmluZSBDeWFTU0x2M19jbGllbnRfbWV0aG9kICAgICAgICAgICAgd29sZlNTTHYzX2NsaWVudF9tZXRob2QKKyNkZWZpbmUgQ3lhU1NMdjNfc2VydmVyX21ldGhvZCAgICAgICAgICAgIHdvbGZTU0x2M19zZXJ2ZXJfbWV0aG9kCisjZGVmaW5lIEN5YVNTTHYyM19jbGllbnRfbWV0aG9kICAgICAgICAgICB3b2xmU1NMdjIzX2NsaWVudF9tZXRob2QKKyNkZWZpbmUgQ3lhU1NMdjIzX3NlcnZlcl9tZXRob2QgICAgICAgICAgIHdvbGZTU0x2MjNfc2VydmVyX21ldGhvZAorI2RlZmluZSBDeWFEVExTdjFfY2xpZW50X21ldGhvZCAgICAgICAgICAgd29sZkRUTFN2MV9jbGllbnRfbWV0aG9kCisjZGVmaW5lIEN5YURUTFN2MV9zZXJ2ZXJfbWV0aG9kICAgICAgICAgICB3b2xmRFRMU3YxX3NlcnZlcl9tZXRob2QKKyNkZWZpbmUgQ3lhU1NMX2NoZWNrX2RvbWFpbl9uYW1lICAgICAgICAgIHdvbGZTU0xfY2hlY2tfZG9tYWluX25hbWUKKyNkZWZpbmUgQ3lhVExTdjFfMV9jbGllbnRfbWV0aG9kICAgICAgICAgIHdvbGZUTFN2MV8xX2NsaWVudF9tZXRob2QKKyNkZWZpbmUgQ3lhVExTdjFfMV9zZXJ2ZXJfbWV0aG9kICAgICAgICAgIHdvbGZUTFN2MV8xX3NlcnZlcl9tZXRob2QKKyNkZWZpbmUgQ3lhVExTdjFfMl9jbGllbnRfbWV0aG9kICAgICAgICAgIHdvbGZUTFN2MV8yX2NsaWVudF9tZXRob2QKKyNkZWZpbmUgQ3lhVExTdjFfMl9zZXJ2ZXJfbWV0aG9kICAgICAgICAgIHdvbGZUTFN2MV8yX3NlcnZlcl9tZXRob2QKKyNkZWZpbmUgQ3lhRFRMU3YxXzJfY2xpZW50X21ldGhvZCAgICAgICAgIHdvbGZEVExTdjFfMl9jbGllbnRfbWV0aG9kCisjZGVmaW5lIEN5YURUTFN2MV8yX3NlcnZlcl9tZXRob2QgICAgICAgICB3b2xmRFRMU3YxXzJfc2VydmVyX21ldGhvZAorI2RlZmluZSBDeWFTU0xfc2V0X2dyb3VwX21lc3NhZ2VzICAgICAgICAgd29sZlNTTF9zZXRfZ3JvdXBfbWVzc2FnZXMKKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdAorI2RlZmluZSBDeWFTU0xfQ1RYX3NldF9ncm91cF9tZXNzYWdlcyAgICAgd29sZlNTTF9DVFhfc2V0X2dyb3VwX21lc3NhZ2VzCisjZGVmaW5lIEN5YVNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZSB3b2xmU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlCisKKy8qIENhbGxiYWNrcyAqLworCisvKgorICogRW1wdHkgY29tbWVudCBkZW5vdGVzIG5vdCBsaXN0ZWQgaW4gQ3lhU1NMIE1hbnVhbAorICogKHNvb24gdG8gYmUgd29sZlNTTCBNYW51YWwpCisgKi8KKworI2RlZmluZSBDeWFTU0xfYWNjZXB0X2V4ICAgICAgICAgICAgICB3b2xmU1NMX2FjY2VwdF9leAorI2RlZmluZSBDeWFTU0xfU2V0SU9SZWN2ICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9TZXRJT1JlY3YKKyNkZWZpbmUgQ3lhU1NMX1NldElPU2VuZCAgICAgICAgICAgICAgd29sZlNTTF9DVFhfU2V0SU9TZW5kCisjZGVmaW5lIEN5YVNTTF9jb25uZWN0X2V4ICAgICAgICAgICAgIHdvbGZTU0xfY29ubmVjdF9leAorI2RlZmluZSBDeWFTU0xfQ1RYX1NldENBQ2IgICAgICAgICAgICB3b2xmU1NMX0NUWF9TZXRDQUNiCisjZGVmaW5lIEN5YVNTTF9TZXRJT1JlYWRDdHggICAgICAgICAgIHdvbGZTU0xfU2V0SU9SZWFkQ3R4CisjZGVmaW5lIEN5YVNTTF9TZXRSc2FFbmNDdHggICAgICAgICAgIHdvbGZTU0xfU2V0UnNhRW5jQ3R4CisjZGVmaW5lIEN5YVNTTF9HZXRSc2FFbmNDdHggICAgICAgICAgIHdvbGZTU0xfR2V0UnNhRW5jQ3R4CisjZGVmaW5lIEN5YVNTTF9TZXRSc2FEZWNDdHggICAgICAgICAgIHdvbGZTU0xfU2V0UnNhRGVjQ3R4CisjZGVmaW5lIEN5YVNTTF9HZXRSc2FEZWNDdHggICAgICAgICAgIHdvbGZTU0xfR2V0UnNhRGVjQ3R4CisjZGVmaW5lIEN5YVNTTF9TZXRMb2dnaW5nQ2IgICAgICAgICAgIHdvbGZTU0xfU2V0TG9nZ2luZ0NiCisjZGVmaW5lIEN5YVNTTF9TZXRFY2NTaWduQ3R4ICAgICAgICAgIHdvbGZTU0xfU2V0RWNjU2lnbkN0eAorI2RlZmluZSBDeWFTU0xfR2V0RWNjU2lnbkN0eCAgICAgICAgICB3b2xmU1NMX0dldEVjY1NpZ25DdHgKKyNkZWZpbmUgQ3lhU1NMX1NldFJzYVNpZ25DdHggICAgICAgICAgd29sZlNTTF9TZXRSc2FTaWduQ3R4CisjZGVmaW5lIEN5YVNTTF9HZXRSc2FTaWduQ3R4ICAgICAgICAgIHdvbGZTU0xfR2V0UnNhU2lnbkN0eAorI2RlZmluZSBDeWFTU0xfU2V0SU9Xcml0ZUN0eCAgICAgICAgICB3b2xmU1NMX1NldElPV3JpdGVDdHgKKyNkZWZpbmUgQ3lhU1NMX1NldElPUmVhZEZsYWdzICAgICAgICAgd29sZlNTTF9TZXRJT1JlYWRGbGFncworI2RlZmluZSBDeWFTU0xfU2V0RWNjVmVyaWZ5Q3R4ICAgICAgICB3b2xmU1NMX1NldEVjY1ZlcmlmeUN0eAorI2RlZmluZSBDeWFTU0xfR2V0RWNjVmVyaWZ5Q3R4ICAgICAgICB3b2xmU1NMX0dldEVjY1ZlcmlmeUN0eAorI2RlZmluZSBDeWFTU0xfU2V0UnNhVmVyaWZ5Q3R4ICAgICAgICB3b2xmU1NMX1NldFJzYVZlcmlmeUN0eAorI2RlZmluZSBDeWFTU0xfR2V0UnNhVmVyaWZ5Q3R4ICAgICAgICB3b2xmU1NMX0dldFJzYVZlcmlmeUN0eAorI2RlZmluZSBDeWFTU0xfQ1RYX1NldFJzYUVuY0NiICAgICAgICB3b2xmU1NMX0NUWF9TZXRSc2FFbmNDYgorI2RlZmluZSBDeWFTU0xfQ1RYX1NldFJzYURlY0NiICAgICAgICB3b2xmU1NMX0NUWF9TZXRSc2FEZWNDYgorI2RlZmluZSBDeWFTU0xfU2V0SU9Xcml0ZUZsYWdzICAgICAgICB3b2xmU1NMX1NldElPV3JpdGVGbGFncworI2RlZmluZSBDeWFTU0xfU2V0VGxzSG1hY0lubmVyICAgICAgICB3b2xmU1NMX1NldFRsc0htYWNJbm5lcgorI2RlZmluZSBDeWFTU0xfU2V0TWFjRW5jcnlwdEN0eCAgICAgICB3b2xmU1NMX1NldE1hY0VuY3J5cHRDdHgKKyNkZWZpbmUgQ3lhU1NMX0dldE1hY0VuY3J5cHRDdHggICAgICAgd29sZlNTTF9HZXRNYWNFbmNyeXB0Q3R4CisjZGVmaW5lIEN5YVNTTF9DVFhfU2V0RWNjU2lnbkNiICAgICAgIHdvbGZTU0xfQ1RYX1NldEVjY1NpZ25DYgorI2RlZmluZSBDeWFTU0xfQ1RYX1NldFJzYVNpZ25DYiAgICAgICB3b2xmU1NMX0NUWF9TZXRSc2FTaWduQ2IKKyNkZWZpbmUgQ3lhU1NMX0NUWF9TZXRFY2NWZXJpZnlDYiAgICAgd29sZlNTTF9DVFhfU2V0RWNjVmVyaWZ5Q2IKKyNkZWZpbmUgQ3lhU1NMX0NUWF9TZXRSc2FWZXJpZnlDYiAgICAgd29sZlNTTF9DVFhfU2V0UnNhVmVyaWZ5Q2IKKyNkZWZpbmUgQ3lhU1NMX0NUWF9TZXRNYWNFbmNyeXB0Q2IgICAgd29sZlNTTF9DVFhfU2V0TWFjRW5jcnlwdENiCisjZGVmaW5lIEN5YVNTTF9TZXREZWNyeXB0VmVyaWZ5Q3R4ICAgIHdvbGZTU0xfU2V0RGVjcnlwdFZlcmlmeUN0eAorI2RlZmluZSBDeWFTU0xfR2V0RGVjcnlwdFZlcmlmeUN0eCAgICB3b2xmU1NMX0dldERlY3J5cHRWZXJpZnlDdHgKKyNkZWZpbmUgQ3lhU1NMX0NUWF9TZXREZWNyeXB0VmVyaWZ5Q2Igd29sZlNTTF9DVFhfU2V0RGVjcnlwdFZlcmlmeUNiCisKKy8qIHBzayBzcGVjaWZpYyAqLworI2lmbmRlZiBOT19QU0sKKworI2RlZmluZSBDeWFTU0xfZ2V0X3Bza19pZGVudGl0eSAgICAgICAgICB3b2xmU1NMX2dldF9wc2tfaWRlbnRpdHkgICAgICAgICAgLyoqLworI2RlZmluZSBDeWFTU0xfZ2V0X3Bza19pZGVudGl0eV9oaW50ICAgICB3b2xmU1NMX2dldF9wc2tfaWRlbnRpdHlfaGludCAgICAgLyoqLworI2RlZmluZSBDeWFTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50ICAgICB3b2xmU1NMX3VzZV9wc2tfaWRlbnRpdHlfaGludCAgICAgLyoqLworI2RlZmluZSBDeWFTU0xfc2V0X3Bza19jbGllbnRfY2FsbGJhY2sgICB3b2xmU1NMX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrICAgLyoqLworI2RlZmluZSBDeWFTU0xfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2sgICB3b2xmU1NMX3NldF9wc2tfc2VydmVyX2NhbGxiYWNrICAgLyoqLworI2RlZmluZSBDeWFTU0xfQ1RYX3VzZV9wc2tfaWRlbnRpdHlfaGludCB3b2xmU1NMX0NUWF91c2VfcHNrX2lkZW50aXR5X2hpbnQgLyoqLworI2RlZmluZSBDeWFTU0xfQ1RYX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfc2V0X3Bza19jbGllbnRfY2FsbGJhY2sgIC8qKi8KKyNkZWZpbmUgQ3lhU1NMX0NUWF9zZXRfcHNrX3NlcnZlcl9jYWxsYmFjayBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9wc2tfc2VydmVyX2NhbGxiYWNrICAvKiovCisKKyNlbmRpZgorLyogZW5kIHBzayBzcGVjaWZpYyAqLworCisvKiBBbm9ueW1vdXMgKi8KKyNkZWZpbmUgQ3lhU1NMX0NUWF9hbGxvd19hbm9uX2NpcGhlciB3b2xmU1NMX0NUWF9hbGxvd19hbm9uX2NpcGhlciAgICAgICAgIC8qKi8KKworLyogRXJyb3IgSGFuZGxpbmcgYW5kIERlYnVnZ2luZyovCisjZGVmaW5lIEN5YVNTTF9nZXRfZXJyb3IgICAgICAgICAgIHdvbGZTU0xfZ2V0X2Vycm9yCisjZGVmaW5lIEN5YVNTTF93YW50X3JlYWQgICAgICAgICAgIHdvbGZTU0xfd2FudF9yZWFkCisjZGVmaW5lIEN5YVNTTF93YW50X3dyaXRlICAgICAgICAgIHdvbGZTU0xfd2FudF93cml0ZQorI2RlZmluZSBDeWFTU0xfRGVidWdnaW5nX09OICAgICAgICB3b2xmU1NMX0RlYnVnZ2luZ19PTgorI2RlZmluZSBDeWFTU0xfRGVidWdnaW5nX09GRiAgICAgICB3b2xmU1NMX0RlYnVnZ2luZ19PRkYKKyNkZWZpbmUgQ3lhU1NMX0VSUl9lcnJvcl9zdHJpbmcgICAgd29sZlNTTF9FUlJfZXJyb3Jfc3RyaW5nCisjZGVmaW5lIEN5YVNTTF9sb2FkX2Vycm9yX3N0cmluZ3MgIHdvbGZTU0xfbG9hZF9lcnJvcl9zdHJpbmdzCisjZGVmaW5lIEN5YVNTTF9FUlJfZXJyb3Jfc3RyaW5nX24gIHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZ19uCisjZGVmaW5lIEN5YVNTTF9FUlJfcHJpbnRfZXJyb3JzX2ZwIHdvbGZTU0xfRVJSX3ByaW50X2Vycm9yc19mcAorCisvKiBPQ1NQIGFuZCBDUkwgKi8KKworLyoKKyAqIEVtcHR5IGNvbW1lbnQgZGVub3RlcyBub3QgbGlzdGVkIGluIEN5YVNTTCBNYW51YWwKKyAqIChzb29uIHRvIGJlIHdvbGZTU0wgTWFudWFsKQorICovCisKKyNkZWZpbmUgQ1lBU1NMX0NSTF9NT05JVE9SICAgICAgICAgICAgICAgV09MRlNTTF9DUkxfTU9OSVRPUiAgICAgICAgICAgICAgIC8qKi8KKyNkZWZpbmUgQ1lBU1NMX0NSTF9TVEFSVF9NT04gICAgICAgICAgICAgV09MRlNTTF9DUkxfU1RBUlRfTU9OICAgICAgICAgICAgIC8qKi8KKyNkZWZpbmUgQ1lBU1NMX09DU1BfTk9fTk9OQ0UgICAgICAgICAgICAgV09MRlNTTF9PQ1NQX05PX05PTkNFICAgICAgICAgICAgIC8qKi8KKyNkZWZpbmUgQ1lBU1NMX09DU1BfVVJMX09WRVJSSURFICAgICAgICAgV09MRlNTTF9PQ1NQX1VSTF9PVkVSUklERQorI2RlZmluZSBDWUFTU0xfT0NTUF9DSEVDS0FMTCAgICAgICAgICAgICBXT0xGU1NMX09DU1BfQ0hFQ0tBTEwKKworI2RlZmluZSBDeWFTU0xfQ1RYX0VuYWJsZU9DU1AgICAgICAgICAgICB3b2xmU1NMX0NUWF9FbmFibGVPQ1NQCisjZGVmaW5lIEN5YVNTTF9DVFhfT0NTUF9zZXRfb3B0aW9ucyAgICAgIHdvbGZTU0xfQ1RYX09DU1Bfc2V0X29wdGlvbnMgICAgICAvKiovCisjZGVmaW5lIEN5YVNTTF9DVFhfU2V0T0NTUF9PdmVycmlkZVVSTCAgIHdvbGZTU0xfQ1RYX1NldE9DU1BfT3ZlcnJpZGVVUkwgICAvKiovCisjZGVmaW5lIEN5YVNTTF9DVFhfT0NTUF9zZXRfb3ZlcnJpZGVfdXJsIHdvbGZTU0xfQ1RYX09DU1Bfc2V0X292ZXJyaWRlX3VybCAvKiovCisKKy8qIEluZm9ybWF0aW9uYWwgKi8KKyNkZWZpbmUgQ3lhU1NMX0dldFNpZGUgICAgICAgICAgICB3b2xmU1NMX0dldFNpZGUKKyNkZWZpbmUgQ3lhU1NMX0lzVExTdjFfMSAgICAgICAgICB3b2xmU1NMX0lzVExTdjFfMQorI2RlZmluZSBDeWFTU0xfR2V0S2V5U2l6ZSAgICAgICAgIHdvbGZTU0xfR2V0S2V5U2l6ZQorI2RlZmluZSBDeWFTU0xfR2V0SG1hY1NpemUgICAgICAgIHdvbGZTU0xfR2V0SG1hY1NpemUKKyNkZWZpbmUgQ3lhU1NMX0dldEhtYWNUeXBlICAgICAgICB3b2xmU1NMX0dldEhtYWNUeXBlCisjZGVmaW5lIEN5YVNTTF9HZXRNYWNTZWNyZXQgICAgICAgd29sZlNTTF9HZXRNYWNTZWNyZXQKKyNkZWZpbmUgQ3lhU1NMX0dldE9iamVjdFNpemUgICAgICB3b2xmU1NMX0dldE9iamVjdFNpemUKKyNkZWZpbmUgQ3lhU1NMX0dldEJ1bGtDaXBoZXIgICAgICB3b2xmU1NMX0dldEJ1bGtDaXBoZXIKKyNkZWZpbmUgQ3lhU1NMX0dldENpcGhlclR5cGUgICAgICB3b2xmU1NMX0dldENpcGhlclR5cGUKKyNkZWZpbmUgQ3lhU1NMX0dldEFlYWRNYWNTaXplICAgICB3b2xmU1NMX0dldEFlYWRNYWNTaXplCisjZGVmaW5lIEN5YVNTTF9HZXRDbGllbnRXcml0ZUlWICAgd29sZlNTTF9HZXRDbGllbnRXcml0ZUlWCisjZGVmaW5lIEN5YVNTTF9HZXRTZXJ2ZXJXcml0ZUlWICAgd29sZlNTTF9HZXRTZXJ2ZXJXcml0ZUlWCisjZGVmaW5lIEN5YVNTTF9HZXRDbGllbnRXcml0ZUtleSAgd29sZlNTTF9HZXRDbGllbnRXcml0ZUtleQorI2RlZmluZSBDeWFTU0xfR2V0U2VydmVyV3JpdGVLZXkgIHdvbGZTU0xfR2V0U2VydmVyV3JpdGVLZXkKKyNkZWZpbmUgQ3lhU1NMX0dldENpcGhlckJsb2NrU2l6ZSB3b2xmU1NMX0dldENpcGhlckJsb2NrU2l6ZQorCisvKiBDb25uZWN0aW9uLCBTZXNzaW9uLCBhbmQgSS9PICovCisjZGVmaW5lIEN5YVNTTF9wZWVrICAgICAgICAgICAgICAgd29sZlNTTF9wZWVrCisjZGVmaW5lIEN5YVNTTF9yZWFkICAgICAgICAgICAgICAgd29sZlNTTF9yZWFkCisjZGVmaW5lIEN5YVNTTF9yZWN2ICAgICAgICAgICAgICAgd29sZlNTTF9yZWN2CisjZGVmaW5lIEN5YVNTTF9zZW5kICAgICAgICAgICAgICAgd29sZlNTTF9zZW5kCisjZGVmaW5lIEN5YVNTTF93cml0ZSAgICAgICAgICAgICAgd29sZlNTTF93cml0ZQorI2RlZmluZSBDeWFTU0xfd3JpdGV2ICAgICAgICAgICAgIHdvbGZTU0xfd3JpdGV2CisjZGVmaW5lIEN5YVNTTF9hY2NlcHQgICAgICAgICAgICAgd29sZlNTTF9hY2NlcHQKKyNkZWZpbmUgQ3lhU1NMX2dldF9mZCAgICAgICAgICAgICB3b2xmU1NMX2dldF9mZAorI2RlZmluZSBDeWFTU0xfY29ubmVjdCAgICAgICAgICAgIHdvbGZTU0xfY29ubmVjdAorI2RlZmluZSBDeWFTU0xfcGVuZGluZyAgICAgICAgICAgIHdvbGZTU0xfcGVuZGluZworI2RlZmluZSBDeWFTU0xfbmVnb3RpYXRlICAgICAgICAgIHdvbGZTU0xfbmVnb3RpYXRlCisjZGVmaW5lIEN5YVNTTF9nZXRfc2Vzc2lvbiAgICAgICAgd29sZlNTTF9nZXRfc2Vzc2lvbgorI2RlZmluZSBDeWFTU0xfY29ubmVjdF9jZXJ0ICAgICAgIHdvbGZTU0xfY29ubmVjdF9jZXJ0CisjZGVmaW5lIEN5YVNTTF9mbHVzaF9zZXNzaW9ucyAgICAgd29sZlNTTF9mbHVzaF9zZXNzaW9ucworI2RlZmluZSBDeWFTU0xfZ2V0X3VzaW5nX25vbmJsb2NrIHdvbGZTU0xfZ2V0X3VzaW5nX25vbmJsb2NrCisjZGVmaW5lIEN5YVNTTF9QcmludFNlc3Npb25TdGF0cyAgd29sZlNTTF9QcmludFNlc3Npb25TdGF0cworCisvKiBEVExTIFNwZWNpZmljICovCisjZGVmaW5lIEN5YVNTTF9kdGxzICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9kdGxzCisjZGVmaW5lIEN5YVNTTF9kdGxzX3NldF9wZWVyICAgICAgICAgICAgd29sZlNTTF9kdGxzX3NldF9wZWVyCisjZGVmaW5lIEN5YVNTTF9kdGxzX2dldF9wZWVyICAgICAgICAgICAgd29sZlNTTF9kdGxzX2dldF9wZWVyCisjZGVmaW5lIEN5YVNTTF9kdGxzX2dvdF90aW1lb3V0ICAgICAgICAgd29sZlNTTF9kdGxzX2dvdF90aW1lb3V0CisjZGVmaW5lIEN5YVNTTF9kdGxzX2dldF9jdXJyZW50X3RpbWVvdXQgd29sZlNTTF9kdGxzX2dldF9jdXJyZW50X3RpbWVvdXQKKyNkZWZpbmUgQ3lhU1NMX3NldF91c2luZ19ub25ibG9jayAgICAgICB3b2xmU1NMX2R0bHNfc2V0X3VzaW5nX25vbmJsb2NrCisKKy8qIENlcnRpZmljYXRlIE1hbmFnZXIgKi8KKyNkZWZpbmUgQ3lhU1NMX0NlcnRNYW5hZ2VyTmV3ICAgICAgICAgIHdvbGZTU0xfQ2VydE1hbmFnZXJOZXcKKyNkZWZpbmUgQ3lhU1NMX0NlcnRNYW5hZ2VyRnJlZSAgICAgICAgIHdvbGZTU0xfQ2VydE1hbmFnZXJGcmVlCisjZGVmaW5lIEN5YVNTTF9DZXJ0TWFuYWdlckxvYWRDQSAgICAgICB3b2xmU1NMX0NlcnRNYW5hZ2VyTG9hZENBCisjZGVmaW5lIEN5YVNTTF9DZXJ0TWFuYWdlclZlcmlmeSAgICAgICB3b2xmU1NMX0NlcnRNYW5hZ2VyVmVyaWZ5CisjZGVmaW5lIEN5YVNTTF9DZXJ0TWFuYWdlckVuYWJsZUNSTCAgICB3b2xmU1NMX0NlcnRNYW5hZ2VyRW5hYmxlQ1JMCisjZGVmaW5lIEN5YVNTTF9DZXJ0TWFuYWdlckRpc2FibGVDUkwgICB3b2xmU1NMX0NlcnRNYW5hZ2VyRGlzYWJsZUNSTAorI2RlZmluZSBDeWFTU0xfQ2VydE1hbmFnZXJWZXJpZnlCdWZmZXIgd29sZlNTTF9DZXJ0TWFuYWdlclZlcmlmeUJ1ZmZlcgorI2lmbmRlZiBOT19DRVJUUworCSNkZWZpbmUgQ3lhU1NMX0NlcnRNYW5hZ2VyQ2hlY2tDUkwgICB3b2xmU1NMX0NlcnRNYW5hZ2VyQ2hlY2tDUkwKKwkjZGVmaW5lIEN5YVNTTF9DZXJ0TWFuYWdlckxvYWRDUkwgICAgd29sZlNTTF9DZXJ0TWFuYWdlckxvYWRDUkwKKwkjZGVmaW5lIEN5YVNTTF9DZXJ0TWFuYWdlclNldENSTF9DYiAgd29sZlNTTF9DZXJ0TWFuYWdlclNldENSTF9DYgorCSNkZWZpbmUgQ3lhU1NMX0NlcnRNYW5hZ2VyQ2hlY2tPQ1NQICB3b2xmU1NMX0NlcnRNYW5hZ2VyQ2hlY2tPQ1NQCisJI2RlZmluZSBDeWFTU0xfQ2VydE1hbmFnZXJTZXRPQ1NQX0NiIHdvbGZTU0xfQ2VydE1hbmFnZXJTZXRPQ1NQX0NiCisJI2RlZmluZSBDeWFTU0xfQ2VydE1hbmFnZXJTZXRPQ1NQT3ZlcnJpZGVVUkwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DZXJ0TWFuYWdlclNldE9DU1BPdmVycmlkZVVSTAorCisJI2RlZmluZSBDeWFTU0xfRGlzYWJsZUNSTCAgICAgICAgICB3b2xmU1NMX0Rpc2FibGVDUkwKKwkjZGVmaW5lIEN5YVNTTF9FbmFibGVPQ1NQICAgICAgICAgIHdvbGZTU0xfRW5hYmxlT0NTUAorCSNkZWZpbmUgQ3lhU1NMX0Rpc2FibGVPQ1NQICAgICAgICAgd29sZlNTTF9EaXNhYmxlT0NTUAorCSNkZWZpbmUgQ3lhU1NMX1NldE9DU1BfT3ZlcnJpZGVVUkwgd29sZlNTTF9TZXRPQ1NQX092ZXJyaWRlVVJMCisJI2RlZmluZSBDeWFTU0xfU2V0T0NTUF9DYiAgICAgICAgICB3b2xmU1NMX1NldE9DU1BfQ2IKKworCSNkZWZpbmUgQ3lhU1NMX0NUWF9FbmFibGVDUkwgICB3b2xmU1NMX0NUWF9FbmFibGVDUkwKKwkjZGVmaW5lIEN5YVNTTF9DVFhfRGlzYWJsZUNSTCAgd29sZlNTTF9DVFhfRGlzYWJsZUNSTAorCSNkZWZpbmUgQ3lhU1NMX0NUWF9Mb2FkQ1JMICAgICB3b2xmU1NMX0NUWF9Mb2FkQ1JMCisJI2RlZmluZSBDeWFTU0xfQ1RYX1NldENSTF9DYiAgIHdvbGZTU0xfQ1RYX1NldENSTF9DYgorCSNkZWZpbmUgQ3lhU1NMX0NUWF9EaXNhYmxlT0NTUCB3b2xmU1NMX0NUWF9EaXNhYmxlT0NTUAorCSNkZWZpbmUgQ3lhU1NMX0NUWF9TZXRPQ1NQX0NiICB3b2xmU1NMX0NUWF9TZXRPQ1NQX0NiCisjZW5kaWYgLyogIU5PX0NFUlRTICovCisKKworLyogT3BlblNTTCBDb21wYXRpYmlsaXR5IExheWVyICovCisjZGVmaW5lIEN5YVNTTF9nZXRfc2Vzc2lvbklEICAgICAgICAgICAgICB3b2xmU1NMX2dldF9zZXNzaW9uSUQKKyNkZWZpbmUgQ3lhU1NMX2dldF9wZWVyX2NvdW50ICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X3BlZXJfY291bnQKKyNkZWZpbmUgQ3lhU1NMX2dldF9jaGFpbl9jZXJ0ICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X2NoYWluX2NlcnQKKyNkZWZpbmUgQ3lhU1NMX2dldF9wZWVyX2NoYWluICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X3BlZXJfY2hhaW4KKyNkZWZpbmUgQ3lhU1NMX2dldF9wZWVyX2xlbmd0aCAgICAgICAgICAgIHdvbGZTU0xfZ2V0X3BlZXJfbGVuZ3RoCisjZGVmaW5lIEN5YVNTTF9nZXRfY2hhaW5fY2VydF9wZW0gICAgICAgICB3b2xmU1NMX2dldF9jaGFpbl9jZXJ0X3BlbQorI2RlZmluZSBDeWFTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZSAgICAgICAgd29sZlNTTF91c2VfUHJpdmF0ZUtleV9maWxlCisjZGVmaW5lIEN5YVNTTF91c2VfY2VydGlmaWNhdGVfZmlsZSAgICAgICB3b2xmU1NMX3VzZV9jZXJ0aWZpY2F0ZV9maWxlCisjZGVmaW5lIEN5YVNTTF91c2VfUlNBUHJpdmF0ZUtleV9maWxlICAgICB3b2xmU1NMX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGUKKyNkZWZpbmUgQ3lhU1NMX1g1MDlfZ2V0X3NlcmlhbF9udW1iZXIgICAgIHdvbGZTU0xfWDUwOV9nZXRfc2VyaWFsX251bWJlcgorI2RlZmluZSBDeWFTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGUgd29sZlNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfZmlsZQorI2RlZmluZSBDeWFTU0xfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUgd29sZlNTTF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZQorCisvKiBUTFMgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBDWUFTU0xfU05JX0hPU1RfTkFNRSAgICAgICAgIFdPTEZTU0xfU05JX0hPU1RfTkFNRQorCisjZGVmaW5lIEN5YVNTTF9Vc2VTTkkgICAgICAgICAgICAgICAgd29sZlNTTF9Vc2VTTkkKKyNkZWZpbmUgQ3lhU1NMX0NUWF9Vc2VTTkkgICAgICAgICAgICB3b2xmU1NMX0NUWF9Vc2VTTkkKKyNkZWZpbmUgQ3lhU1NMX1NOSV9TZXRPcHRpb25zICAgICAgICB3b2xmU1NMX1NOSV9TZXRPcHRpb25zCisjZGVmaW5lIEN5YVNTTF9TTklfR2V0UmVxdWVzdCAgICAgICAgd29sZlNTTF9TTklfR2V0UmVxdWVzdAorI2RlZmluZSBDeWFTU0xfVXNlTWF4RnJhZ21lbnQgICAgICAgIHdvbGZTU0xfVXNlTWF4RnJhZ21lbnQKKyNkZWZpbmUgQ3lhU1NMX1VzZVRydW5jYXRlZEhNQUMgICAgICB3b2xmU1NMX1VzZVRydW5jYXRlZEhNQUMKKyNkZWZpbmUgQ3lhU1NMX1VzZVN1cHBvcnRlZEN1cnZlICAgICB3b2xmU1NMX1VzZVN1cHBvcnRlZEN1cnZlCisjZGVmaW5lIEN5YVNTTF9TTklfR2V0RnJvbUJ1ZmZlciAgICAgd29sZlNTTF9TTklfR2V0RnJvbUJ1ZmZlcgorI2RlZmluZSBDeWFTU0xfQ1RYX1NOSV9TZXRPcHRpb25zICAgIHdvbGZTU0xfQ1RYX1NOSV9TZXRPcHRpb25zCisjZGVmaW5lIEN5YVNTTF9DVFhfVXNlTWF4RnJhZ21lbnQgICAgd29sZlNTTF9DVFhfVXNlTWF4RnJhZ21lbnQKKyNkZWZpbmUgQ3lhU1NMX0NUWF9Vc2VUcnVuY2F0ZWRITUFDICB3b2xmU1NMX0NUWF9Vc2VUcnVuY2F0ZWRITUFDCisjZGVmaW5lIEN5YVNTTF9DVFhfVXNlU3VwcG9ydGVkQ3VydmUgd29sZlNTTF9DVFhfVXNlU3VwcG9ydGVkQ3VydmUKKworLyogRW5kIHdvbGZzc2wgLT4gY3lhc3NsIC0+IG9wZW5zc2wgY29tcGF0aWJpbGl0eSAqLworCisvKiBKUkIgbWFjcm8gcmVkZWZpbml0aW9ucyBhbmQgYXBpIGNhbGxzIGZvciBjcnlwdG9ncmFwaHkgZm9yIHJldmVyc2UgY29tcGF0LiAqLworCisjaWZkZWYgV09MRlNTTF9TTUFMTF9TVEFDSworICAgICNkZWZpbmUgQ1lBU1NMX1NNQUxMX1NUQUNLCisjZW5kaWYKKworCisvKgorICogd3JhcHBlciBhcm91bmQgbWFjcm9zIHVudGlsIHRoZXkgYXJlIGNoYW5nZWQgaW4gY3lhc3NsIGNvZGUKKyAqIG5lZWRzIGludmVzdGlnYXRpb24gaW4gcmVnYXJkcyB0byBtYWNyb3MgaW4gZmlwcworICovCisjZGVmaW5lIE5PX1dPTEZTU0xfQUxMT0NfQUxJR04gTk9fQ1lBU1NMX0FMTE9DX0FMSUdOIC8qIEBUT0RPICovCisKKworLyogZXhhbXBsZXMvY2xpZW50L2NsaWVudC5oICovCisjZGVmaW5lIENZQVNTTF9USFJFQUQgV09MRlNTTF9USFJFQUQKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAjZGVmaW5lIENZQVNTTF9EVExTICAgV09MRlNTTF9EVExTCisjZW5kaWYKKworLyogZXhhbXBsZXMvY2xpZW50L2NsaWVudC5jICovCisjZGVmaW5lIExJQkNZQVNTTF9WRVJTSU9OX1NUUklORyBMSUJXT0xGU1NMX1ZFUlNJT05fU1RSSU5HCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIEN5YVNTTF9vcGVuc3NsX2hfXyAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC90ZXN0LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjhiMTQxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC90ZXN0LmgKQEAgLTAsMCArMSwzIEBACisvKiB0ZXN0LmggKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvdGVzdC5oPgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC92ZXJzaW9uLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvY3lhc3NsL3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzVkYTkwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL2N5YXNzbC92ZXJzaW9uLmgKQEAgLTAsMCArMSwyNyBAQAorLyogY3lhc3NsL3ZlcnNpb24uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworI2luY2x1ZGUgPHdvbGZzc2wvdmVyc2lvbi5oPgorCisjZGVmaW5lIExJQkNZQVNTTF9WRVJTSU9OX1NUUklORyBMSUJXT0xGU1NMX1ZFUlNJT05fU1RSSU5HCisjZGVmaW5lIExJQkNZQVNTTF9WRVJTSU9OX0hFWCBMSUJXT0xGU1NMX1ZFUlNJT05fSEVYCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL2NhbGxiYWNrcy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvY2FsbGJhY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhNjkxNgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL2NhbGxiYWNrcy5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qIGNhbGxiYWNrcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKyNpZm5kZWYgV09MRlNTTF9DQUxMQkFDS1NfSAorI2RlZmluZSBXT0xGU1NMX0NBTExCQUNLU19ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC93Y19wb3J0Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKworZW51bSB7IC8qIENBTExCQUNLIENPTlNUQU5UUyAqLworICAgIE1BWF9QQUNLRVROQU1FX1NaICAgICA9ICAyNCwKKyAgICBNQVhfQ0lQSEVSTkFNRV9TWiAgICAgPSAgMjQsCisgICAgTUFYX1RJTUVPVVRfTkFNRV9TWiAgID0gIDI0LAorICAgIE1BWF9QQUNLRVRTX0hBTkRTSEFLRSA9ICAxNCwgICAgICAgLyogMTIgZm9yIGNsaWVudCBhdXRoIHBsdXMgMiBhbGVydHMgKi8KKyAgICBNQVhfVkFMVUVfU1ogICAgICAgICAgPSAxMjgsICAgICAgIC8qIGFsbCBoYW5kc2hha2UgcGFja2V0cyBidXQgQ2VydCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpdCBoZXJlICAqLworfTsKKworc3RydWN0IFdPTEZTU0w7CisKK3R5cGVkZWYgc3RydWN0IGhhbmRTaGFrZUluZm9fc3QgeworICAgIHN0cnVjdCBXT0xGU1NMKiBzc2w7CisgICAgY2hhciAgIGNpcGhlck5hbWVbTUFYX0NJUEhFUk5BTUVfU1ogKyAxXTsgICAgLyogbmVnb3RpYXRlZCBjaXBoZXIgKi8KKyAgICBjaGFyICAgcGFja2V0TmFtZXNbTUFYX1BBQ0tFVFNfSEFORFNIQUtFXVtNQVhfUEFDS0VUTkFNRV9TWiArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNTTCBwYWNrZXQgbmFtZXMgICovCisgICAgaW50ICAgIG51bWJlclBhY2tldHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYWN0dWFsICMgb2YgcGFja2V0cyAqLworICAgIGludCAgICBuZWdvdGlhdGlvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgIC8qIGNpcGhlci9wYXJhbWV0ZXIgZXJyICovCit9IEhhbmRTaGFrZUluZm87CisKKworI2lmIGRlZmluZWQoSEFWRV9TWVNfVElNRV9IKSAmJiAhZGVmaW5lZChOT19USU1FVkFMKQorICAgIHR5cGVkZWYgc3RydWN0IHRpbWV2YWwgV09MRlNTTF9USU1FVkFMOworI2Vsc2UgLyogSEFWRV9TWVNfVElNRV9IICovCisgICAgLyogRGVmaW5lIHRoZSB0aW1ldmFsIGV4cGxpY2l0bHkuICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBsb25nIHR2X3NlYzsgIC8qIFNlY29uZHMuICovCisgICAgICAgIGxvbmcgdHZfdXNlYzsgLyogTWljcm9zZWNvbmRzLiAqLworICAgIH0gV09MRlNTTF9USU1FVkFMOworI2VuZGlmIC8qIEhBVkVfU1lTX1RJTUVfSCAqLworI2lmICFkZWZpbmVkKE5PX09MRF9USU1FVkFMX05BTUUpCisgICAgI2RlZmluZSBUaW1ldmFsIFdPTEZTU0xfVElNRVZBTAorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHBhY2tldEluZm9fc3QgeworICAgIGNoYXIgICAgICAgICAgIHBhY2tldE5hbWVbTUFYX1BBQ0tFVE5BTUVfU1ogKyAxXTsgLyogU1NMIHBhY2tldCBuYW1lICovCisgICAgV09MRlNTTF9USU1FVkFMIHRpbWVzdGFtcDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoZW4gaXQgb2NjdXJyZWQgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICB2YWx1ZVtNQVhfVkFMVUVfU1pdOyAgICAgICAgICAgICAvKiBpZiBmaXRzLCBpdCdzIGhlcmUgKi8KKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UgaGVyZSAobm9uIDApICovCisgICAgaW50ICAgICAgICAgICAgdmFsdWVTejsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3ogb2YgdmFsdWUgb3IgYnVmZmVyICovCit9IFBhY2tldEluZm87CisKKwordHlwZWRlZiBzdHJ1Y3QgdGltZW91dEluZm9fc3QgeworICAgIGNoYXIgICAgICAgdGltZW91dE5hbWVbTUFYX1RJTUVPVVRfTkFNRV9TWiArIDFdOyAvKiB0aW1lb3V0IE5hbWUgKi8KKyAgICBpbnQgICAgICAgIGZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBmdXR1cmUgdXNlICovCisgICAgaW50ICAgICAgICBudW1iZXJQYWNrZXRzOyAgICAgICAgICAgICAgICAgICAgICAvKiBhY3R1YWwgIyBvZiBwYWNrZXRzICovCisgICAgUGFja2V0SW5mbyBwYWNrZXRzW01BWF9QQUNLRVRTX0hBTkRTSEFLRV07ICAgICAvKiBsaXN0IG9mIGFsbCBwYWNrZXRzICAqLworICAgIFdPTEZTU0xfVElNRVZBTCB0aW1lb3V0VmFsdWU7ICAgICAgICAgICAgICAgICAgLyogdGltZXIgdGhhdCBjYXVzZWQgaXQgKi8KK30gVGltZW91dEluZm87CisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworCisjZW5kaWYgLyogV09MRlNTTF9DQUxMQkFDS1NfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9jZXJ0c190ZXN0LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9jZXJ0c190ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3YTYxMAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL2NlcnRzX3Rlc3QuaApAQCAtMCwwICsxLDQyNDggQEAKKy8qIGNlcnRzX3Rlc3QuaCAqLworCisjaWZuZGVmIFdPTEZTU0xfQ0VSVFNfVEVTVF9ICisjZGVmaW5lIFdPTEZTU0xfQ0VSVFNfVEVTVF9ICisKKyNpZmRlZiBVU0VfQ0VSVF9CVUZGRVJTXzEwMjQKKworLyogLi9jZXJ0cy8xMDI0L2NsaWVudC1rZXkuZGVyLCAxMDI0LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2xpZW50X2tleV9kZXJfMTAyNFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwMiwgMHg1QywgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MSwgMHg4MSwKKyAgICAgICAgMHgwMCwgMHhCQywgMHg3MywgMHgwRSwgMHhBOCwgMHg0OSwgMHhGMywgMHg3NCwgMHhBMiwgMHhBOSwKKyAgICAgICAgMHhFRiwgMHgxOCwgMHhBNSwgMHhEQSwgMHg1NSwgMHg5OSwgMHgyMSwgMHhGOSwgMHhDOCwgMHhFQywKKyAgICAgICAgMHhCMywgMHg2RCwgMHg0OCwgMHhFNSwgMHgzNSwgMHgzNSwgMHg3NSwgMHg3NywgMHgzNywgMHhFQywKKyAgICAgICAgMHhEMSwgMHg2MSwgMHg5MCwgMHg1RiwgMHgzRSwgMHhEOSwgMHhFNCwgMHhENSwgMHhERiwgMHg5NCwKKyAgICAgICAgMHhDQSwgMHhDMSwgMHhBOSwgMHhENywgMHgxOSwgMHhEQSwgMHg4NiwgMHhDOSwgMHhFOCwgMHg0RCwKKyAgICAgICAgMHhDNCwgMHg2MSwgMHgzNiwgMHg4MiwgMHhGRSwgMHhBQiwgMHhBRCwgMHg3RSwgMHg3NywgMHgyNSwKKyAgICAgICAgMHhCQiwgMHg4RCwgMHgxMSwgMHhBNSwgMHhCQywgMHg2MiwgMHgzQSwgMHhBOCwgMHgzOCwgMHhDQywKKyAgICAgICAgMHgzOSwgMHhBMiwgMHgwNCwgMHg2NiwgMHhCNCwgMHhGNywgMHhGNywgMHhGMywgMHhBQSwgMHhEQSwKKyAgICAgICAgMHg0RCwgMHgwMiwgMHgwRSwgMHhCQiwgMHg1RSwgMHg4RCwgMHg2OSwgMHg0OCwgMHhEQywgMHg3NywKKyAgICAgICAgMHhDOSwgMHgyOCwgMHgwRSwgMHgyMiwgMHhFOSwgMHg2QiwgMHhBNCwgMHgyNiwgMHhCQSwgMHg0QywKKyAgICAgICAgMHhFOCwgMHhDMSwgMHhGRCwgMHg0QSwgMHg2RiwgMHgyQiwgMHgxRiwgMHhFRiwgMHg4QSwgMHhBRSwKKyAgICAgICAgMHhGNiwgMHg5MCwgMHg2MiwgMHhFNSwgMHg2NCwgMHgxRSwgMHhFQiwgMHgyQiwgMHgzQywgMHg2NywKKyAgICAgICAgMHhDOCwgMHhEQywgMHgyNywgMHgwMCwgMHhGNiwgMHg5MSwgMHg2OCwgMHg2NSwgMHhBOSwgMHgwMiwKKyAgICAgICAgMHgwMywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwgMHg4MSwgMHg4MCwgMHgxMywgMHg5NywgMHhFQSwKKyAgICAgICAgMHhFOCwgMHgzOCwgMHg3OCwgMHgyNSwgMHhBMiwgMHg1QywgMHgwNCwgMHhDRSwgMHgwRCwgMHg0MCwKKyAgICAgICAgMHg3QywgMHgzMSwgMHhFNSwgMHhDNCwgMHg3MCwgMHhDRCwgMHg5QiwgMHg4MiwgMHgzQiwgMHg1OCwKKyAgICAgICAgMHgwOSwgMHg4NiwgMHgzQiwgMHg2NiwgMHg1RiwgMHhEQywgMHgzMSwgMHg5MCwgMHhGMSwgMHg0RiwKKyAgICAgICAgMHhENSwgMHhEQiwgMHgxNSwgMHhERCwgMHhERSwgMHhENywgMHgzQiwgMHg5NSwgMHg5MywgMHgzMSwKKyAgICAgICAgMHgxOCwgMHgzMSwgMHgwRSwgMHg1RSwgMHhBMywgMHhENiwgMHhBMiwgMHgxQSwgMHg3MSwgMHg2RSwKKyAgICAgICAgMHg4MSwgMHg0OCwgMHgxQywgMHg0QiwgMHhDRiwgMHhEQiwgMHg4RSwgMHg3QSwgMHg4NiwgMHg2MSwKKyAgICAgICAgMHgzMiwgMHhEQywgMHhGQiwgMHg1NSwgMHhDMSwgMHgxNiwgMHg2RCwgMHgyNywgMHg5MiwgMHgyNCwKKyAgICAgICAgMHg0NSwgMHg4QiwgMHhGMSwgMHhCOCwgMHg0OCwgMHhCMSwgMHg0QiwgMHgxRCwgMHhBQywgMHhERSwKKyAgICAgICAgMHhEQSwgMHhERCwgMHg4RSwgMHgyRiwgMHhDMiwgMHg5MSwgMHhGQiwgMHhBNSwgMHhBOSwgMHg2RSwKKyAgICAgICAgMHhGOCwgMHgzQSwgMHg2QSwgMHhGMSwgMHhGRCwgMHg1MCwgMHgxOCwgMHhFRiwgMHg5RiwgMHhFNywKKyAgICAgICAgMHhDMywgMHhDQSwgMHg3OCwgMHhFQSwgMHg1NiwgMHhEMywgMHhEMywgMHg3MiwgMHg1QiwgMHg5NiwKKyAgICAgICAgMHhERCwgMHg0RSwgMHgwNiwgMHg0RSwgMHgzQSwgMHhDMywgMHhEOSwgMHhCRSwgMHg3MiwgMHhCNiwKKyAgICAgICAgMHg2NSwgMHgwNywgMHgwNywgMHg0QywgMHgwMSwgMHgwMiwgMHg0MSwgMHgwMCwgMHhGQSwgMHg0NywKKyAgICAgICAgMHhENCwgMHg3QSwgMHg3QywgMHg5MiwgMHgzQywgMHg1NSwgMHhFRiwgMHg4MSwgMHhGMCwgMHg0MSwKKyAgICAgICAgMHgzMCwgMHgyRCwgMHhBMywgMHhDRiwgMHg4RiwgMHgxQywgMHhFNiwgMHg4NywgMHgyNywgMHgwNSwKKyAgICAgICAgMHg3MCwgMHgwRCwgMHhERiwgMHg5OCwgMHgzNSwgMHhENiwgMHhGMSwgMHg4QiwgMHgzOCwgMHgyRiwKKyAgICAgICAgMHgyNCwgMHhCNSwgMHhEMCwgMHg4NCwgMHhCNiwgMHg3OSwgMHg0RiwgMHg3MSwgMHgyOSwgMHg5NCwKKyAgICAgICAgMHg1QSwgMHhGMCwgMHg2NCwgMHg2QSwgMHhBQywgMHhFNywgMHg3MiwgMHhDNiwgMHhFRCwgMHg0RCwKKyAgICAgICAgMHg1OSwgMHg5OCwgMHgzRSwgMHg2NywgMHgzQSwgMHhGMywgMHg3NCwgMHgyQywgMHhGOSwgMHg2MSwKKyAgICAgICAgMHgxNywgMHg2OSwgMHgwMiwgMHg0MSwgMHgwMCwgMHhDMCwgMHhDMSwgMHg4MiwgMHgwRCwgMHgwQywKKyAgICAgICAgMHhFQiwgMHhDNiwgMHgyRiwgMHhEQywgMHg5MiwgMHhGOSwgMHg5RCwgMHg4MiwgMHgxQSwgMHgzMSwKKyAgICAgICAgMHhFOSwgMHhFOSwgMHhGNywgMHg0QiwgMHhGMiwgMHg4MiwgMHg4NywgMHgxQywgMHhFRSwgMHgxNiwKKyAgICAgICAgMHg2QSwgMHhEMSwgMHgxRCwgMHgxOCwgMHg4MiwgMHg3MCwgMHhGMywgMHhDMCwgMHhCNiwgMHgyRiwKKyAgICAgICAgMHhGNiwgMHhGMywgMHhGNywgMHgxRCwgMHhGMSwgMHg4NiwgMHgyMywgMHhDOCwgMHg0RSwgMHhFQiwKKyAgICAgICAgMHg4RiwgMHg1NiwgMHg4RSwgMHg4RiwgMHhGNSwgMHhCRiwgMHhGMSwgMHhGNywgMHgyQiwgMHhCNSwKKyAgICAgICAgMHhDQywgMHgzRCwgMHhDNiwgMHg1NywgMHgzOSwgMHgwQywgMHgxQiwgMHg1NCwgMHg0MSwgMHgwMiwKKyAgICAgICAgMHg0MSwgMHgwMCwgMHg5RCwgMHg3RSwgMHgwNSwgMHhERSwgMHhFRCwgMHhGNCwgMHhCNywgMHhCMiwKKyAgICAgICAgMHhGQiwgMHhGQywgMHgzMCwgMHg0QiwgMHg1NSwgMHgxRCwgMHhFMywgMHgyRiwgMHgwMSwgMHg0NywKKyAgICAgICAgMHg5NiwgMHg2OSwgMHgwNSwgMHhDRCwgMHgwRSwgMHgyRSwgMHgyQywgMHhCRCwgMHg4MywgMHg2MywKKyAgICAgICAgMHhCNiwgMHhBQiwgMHg3QywgMHhCNywgMHg2RCwgMHhDQSwgMHg1QiwgMHg2NCwgMHhBNywgMHhDRSwKKyAgICAgICAgMHhCRSwgMHg4NiwgMHhERiwgMHgzQiwgMHg1MywgMHhERSwgMHg2MSwgMHhEMiwgMHgxRSwgMHhFQiwKKyAgICAgICAgMHhBNSwgMHhGNiwgMHgzNywgMHhFRCwgMHhBQywgMHhBQiwgMHg3OCwgMHhEOSwgMHg0QywgMHhFNywKKyAgICAgICAgMHg1NSwgMHhGQiwgMHhENywgMHgxMSwgMHg5OSwgMHhDMSwgMHgwMiwgMHg0MCwgMHgxOCwgMHg5OCwKKyAgICAgICAgMHgxOCwgMHgyOSwgMHhFNiwgMHgxRSwgMHgyNywgMHgzOSwgMHg3MCwgMHgyMSwgMHg2OCwgMHhBQywKKyAgICAgICAgMHgwQSwgMHgyRiwgMHhBMSwgMHg3MiwgMHhDMSwgMHgyMSwgMHg4NiwgMHg5NSwgMHgzOCwgMHhDNiwKKyAgICAgICAgMHg1OCwgMHg5MCwgMHhBMCwgMHg1NywgMHg5QywgMHhCQSwgMHhFMywgMHhBNywgMHhCMSwgMHgxNSwKKyAgICAgICAgMHhDOCwgMHhERSwgMHhGNiwgMHgxQiwgMHhDMiwgMHg2MSwgMHgyMywgMHg3NiwgMHhFRiwgMHhCMCwKKyAgICAgICAgMHg5RCwgMHgxQywgMHg0NCwgMHhCRSwgMHgxMywgMHg0MywgMHgzOSwgMHg2NywgMHgxNywgMHhDOCwKKyAgICAgICAgMHg5RCwgMHhDQSwgMHhGQiwgMHhGNSwgMHg0NSwgMHg2NCwgMHg4QiwgMHgzOCwgMHg4MiwgMHgyQywKKyAgICAgICAgMHhGMiwgMHg4MSwgMHgwMiwgMHg0MCwgMHgzOSwgMHg4OSwgMHhFNSwgMHg5QywgMHgxOSwgMHg1NSwKKyAgICAgICAgMHgzMCwgMHhCQSwgMHhCNywgMHg0OCwgMHg4QywgMHg0OCwgMHgxNCwgMHgwRSwgMHhGNCwgMHg5RiwKKyAgICAgICAgMHg3RSwgMHg3NywgMHg5NywgMHg0MywgMHhFMSwgMHhCNCwgMHgxOSwgMHgzNSwgMHgzMSwgMHgyMywKKyAgICAgICAgMHg3NSwgMHg5QywgMHgzQiwgMHg0NCwgMHhBRCwgMHg2OSwgMHgxMiwgMHg1NiwgMHhFRSwgMHgwMCwKKyAgICAgICAgMHg2MSwgMHg2NCwgMHgxNiwgMHg2NiwgMHhEMywgMHg3QywgMHg3NCwgMHgyQiwgMHgxNSwgMHhCNCwKKyAgICAgICAgMHhBMiwgMHhGRSwgMHhCRiwgMHgwOCwgMHg2QiwgMHgxQSwgMHg1RCwgMHgzRiwgMHg5MCwgMHgxMiwKKyAgICAgICAgMHhCMSwgMHgwNSwgMHg4NiwgMHgzMSwgMHgyOSwgMHhEQiwgMHhEOSwgMHhFMgorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NsaWVudF9rZXlfZGVyXzEwMjQgPSBzaXplb2YoY2xpZW50X2tleV9kZXJfMTAyNCk7CisKKy8qIC4vY2VydHMvMTAyNC9jbGllbnQta2V5UHViLmRlciwgMTAyNC1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNsaWVudF9rZXlwdWJfZGVyXzEwMjRbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODEsIDB4OUYsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsCisgICAgICAgIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODEsCisgICAgICAgIDB4OEQsIDB4MDAsIDB4MzAsIDB4ODEsIDB4ODksIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4QkMsCisgICAgICAgIDB4NzMsIDB4MEUsIDB4QTgsIDB4NDksIDB4RjMsIDB4NzQsIDB4QTIsIDB4QTksIDB4RUYsIDB4MTgsCisgICAgICAgIDB4QTUsIDB4REEsIDB4NTUsIDB4OTksIDB4MjEsIDB4RjksIDB4QzgsIDB4RUMsIDB4QjMsIDB4NkQsCisgICAgICAgIDB4NDgsIDB4RTUsIDB4MzUsIDB4MzUsIDB4NzUsIDB4NzcsIDB4MzcsIDB4RUMsIDB4RDEsIDB4NjEsCisgICAgICAgIDB4OTAsIDB4NUYsIDB4M0UsIDB4RDksIDB4RTQsIDB4RDUsIDB4REYsIDB4OTQsIDB4Q0EsIDB4QzEsCisgICAgICAgIDB4QTksIDB4RDcsIDB4MTksIDB4REEsIDB4ODYsIDB4QzksIDB4RTgsIDB4NEQsIDB4QzQsIDB4NjEsCisgICAgICAgIDB4MzYsIDB4ODIsIDB4RkUsIDB4QUIsIDB4QUQsIDB4N0UsIDB4NzcsIDB4MjUsIDB4QkIsIDB4OEQsCisgICAgICAgIDB4MTEsIDB4QTUsIDB4QkMsIDB4NjIsIDB4M0EsIDB4QTgsIDB4MzgsIDB4Q0MsIDB4MzksIDB4QTIsCisgICAgICAgIDB4MDQsIDB4NjYsIDB4QjQsIDB4RjcsIDB4RjcsIDB4RjMsIDB4QUEsIDB4REEsIDB4NEQsIDB4MDIsCisgICAgICAgIDB4MEUsIDB4QkIsIDB4NUUsIDB4OEQsIDB4NjksIDB4NDgsIDB4REMsIDB4NzcsIDB4QzksIDB4MjgsCisgICAgICAgIDB4MEUsIDB4MjIsIDB4RTksIDB4NkIsIDB4QTQsIDB4MjYsIDB4QkEsIDB4NEMsIDB4RTgsIDB4QzEsCisgICAgICAgIDB4RkQsIDB4NEEsIDB4NkYsIDB4MkIsIDB4MUYsIDB4RUYsIDB4OEEsIDB4QUUsIDB4RjYsIDB4OTAsCisgICAgICAgIDB4NjIsIDB4RTUsIDB4NjQsIDB4MUUsIDB4RUIsIDB4MkIsIDB4M0MsIDB4NjcsIDB4QzgsIDB4REMsCisgICAgICAgIDB4MjcsIDB4MDAsIDB4RjYsIDB4OTEsIDB4NjgsIDB4NjUsIDB4QTksIDB4MDIsIDB4MDMsIDB4MDEsCisgICAgICAgIDB4MDAsIDB4MDEKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9jbGllbnRfa2V5cHViX2Rlcl8xMDI0ID0gc2l6ZW9mKGNsaWVudF9rZXlwdWJfZGVyXzEwMjQpOworCisvKiAuL2NlcnRzLzEwMjQvY2xpZW50LWNlcnQuZGVyLCAxMDI0LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2xpZW50X2NlcnRfZGVyXzEwMjRbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDQsIDB4MDIsIDB4MzAsIDB4ODIsIDB4MDMsIDB4NkIsIDB4QTAsIDB4MDMsCisgICAgICAgIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDksIDB4MDAsIDB4QzUsIDB4MTksIDB4OTAsIDB4QTEsCisgICAgICAgIDB4QzksIDB4MDEsIDB4MEYsIDB4QjksIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsCisgICAgICAgIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MEIsIDB4MDUsIDB4MDAsIDB4MzAsCisgICAgICAgIDB4ODEsIDB4OUUsIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsCisgICAgICAgIDB4NjEsIDB4NkUsIDB4NjEsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsCisgICAgICAgIDB4NkUsIDB4MzEsIDB4MTUsIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsCisgICAgICAgIDB4MEMsIDB4MEMsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NTMsIDB4NTMsIDB4NEMsIDB4NUYsCisgICAgICAgIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzQsIDB4MzEsIDB4MTksIDB4MzAsIDB4MTcsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MTAsIDB4NTAsIDB4NzIsIDB4NkYsIDB4NjcsIDB4NzIsCisgICAgICAgIDB4NjEsIDB4NkQsIDB4NkQsIDB4NjksIDB4NkUsIDB4NjcsIDB4MkQsIDB4MzEsIDB4MzAsIDB4MzIsCisgICAgICAgIDB4MzQsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDMsCisgICAgICAgIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsCisgICAgICAgIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsIDB4MUYsIDB4MzAsCisgICAgICAgIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsCisgICAgICAgIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsIDB4NDAsIDB4NzcsCisgICAgICAgIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsCisgICAgICAgIDB4MzAsIDB4MUUsIDB4MTcsIDB4MEQsIDB4MzIsIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzEsIDB4MzAsCisgICAgICAgIDB4MzEsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsIDB4MzIsIDB4NUEsIDB4MTcsIDB4MEQsIDB4MzIsCisgICAgICAgIDB4MzMsIDB4MzEsIDB4MzEsIDB4MzAsIDB4MzcsIDB4MzEsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsCisgICAgICAgIDB4MzIsIDB4NUEsIDB4MzAsIDB4ODEsIDB4OUUsIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsCisgICAgICAgIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsCisgICAgICAgIDB4NkYsIDB4NkUsIDB4NzQsIDB4NjEsIDB4NkUsIDB4NjEsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsCisgICAgICAgIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsCisgICAgICAgIDB4NjUsIDB4NkQsIDB4NjEsIDB4NkUsIDB4MzEsIDB4MTUsIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MEMsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NTMsCisgICAgICAgIDB4NTMsIDB4NEMsIDB4NUYsIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzQsIDB4MzEsIDB4MTksIDB4MzAsCisgICAgICAgIDB4MTcsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MTAsIDB4NTAsIDB4NzIsCisgICAgICAgIDB4NkYsIDB4NjcsIDB4NzIsIDB4NjEsIDB4NkQsIDB4NkQsIDB4NjksIDB4NkUsIDB4NjcsIDB4MkQsCisgICAgICAgIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzQsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsCisgICAgICAgIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsCisgICAgICAgIDB4MzEsIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsCisgICAgICAgIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsCisgICAgICAgIDB4NkYsIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsCisgICAgICAgIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzAsIDB4ODEsIDB4OUYsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksCisgICAgICAgIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsCisgICAgICAgIDB4MDAsIDB4MDMsIDB4ODEsIDB4OEQsIDB4MDAsIDB4MzAsIDB4ODEsIDB4ODksIDB4MDIsIDB4ODEsCisgICAgICAgIDB4ODEsIDB4MDAsIDB4QkMsIDB4NzMsIDB4MEUsIDB4QTgsIDB4NDksIDB4RjMsIDB4NzQsIDB4QTIsCisgICAgICAgIDB4QTksIDB4RUYsIDB4MTgsIDB4QTUsIDB4REEsIDB4NTUsIDB4OTksIDB4MjEsIDB4RjksIDB4QzgsCisgICAgICAgIDB4RUMsIDB4QjMsIDB4NkQsIDB4NDgsIDB4RTUsIDB4MzUsIDB4MzUsIDB4NzUsIDB4NzcsIDB4MzcsCisgICAgICAgIDB4RUMsIDB4RDEsIDB4NjEsIDB4OTAsIDB4NUYsIDB4M0UsIDB4RDksIDB4RTQsIDB4RDUsIDB4REYsCisgICAgICAgIDB4OTQsIDB4Q0EsIDB4QzEsIDB4QTksIDB4RDcsIDB4MTksIDB4REEsIDB4ODYsIDB4QzksIDB4RTgsCisgICAgICAgIDB4NEQsIDB4QzQsIDB4NjEsIDB4MzYsIDB4ODIsIDB4RkUsIDB4QUIsIDB4QUQsIDB4N0UsIDB4NzcsCisgICAgICAgIDB4MjUsIDB4QkIsIDB4OEQsIDB4MTEsIDB4QTUsIDB4QkMsIDB4NjIsIDB4M0EsIDB4QTgsIDB4MzgsCisgICAgICAgIDB4Q0MsIDB4MzksIDB4QTIsIDB4MDQsIDB4NjYsIDB4QjQsIDB4RjcsIDB4RjcsIDB4RjMsIDB4QUEsCisgICAgICAgIDB4REEsIDB4NEQsIDB4MDIsIDB4MEUsIDB4QkIsIDB4NUUsIDB4OEQsIDB4NjksIDB4NDgsIDB4REMsCisgICAgICAgIDB4NzcsIDB4QzksIDB4MjgsIDB4MEUsIDB4MjIsIDB4RTksIDB4NkIsIDB4QTQsIDB4MjYsIDB4QkEsCisgICAgICAgIDB4NEMsIDB4RTgsIDB4QzEsIDB4RkQsIDB4NEEsIDB4NkYsIDB4MkIsIDB4MUYsIDB4RUYsIDB4OEEsCisgICAgICAgIDB4QUUsIDB4RjYsIDB4OTAsIDB4NjIsIDB4RTUsIDB4NjQsIDB4MUUsIDB4RUIsIDB4MkIsIDB4M0MsCisgICAgICAgIDB4NjcsIDB4QzgsIDB4REMsIDB4MjcsIDB4MDAsIDB4RjYsIDB4OTEsIDB4NjgsIDB4NjUsIDB4QTksCisgICAgICAgIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4QTMsIDB4ODIsIDB4MDEsIDB4NDQsIDB4MzAsCisgICAgICAgIDB4ODIsIDB4MDEsIDB4NDAsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MEUsCisgICAgICAgIDB4MDQsIDB4MTYsIDB4MDQsIDB4MTQsIDB4ODEsIDB4NjksIDB4MEYsIDB4RjgsIDB4REYsIDB4REQsCisgICAgICAgIDB4Q0YsIDB4MzQsIDB4MjksIDB4RDUsIDB4NjcsIDB4NzUsIDB4NzEsIDB4ODUsIDB4QzcsIDB4NzUsCisgICAgICAgIDB4MTAsIDB4NjksIDB4NTksIDB4RUMsIDB4MzAsIDB4ODEsIDB4RDMsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MUQsIDB4MjMsIDB4MDQsIDB4ODEsIDB4Q0IsIDB4MzAsIDB4ODEsIDB4QzgsIDB4ODAsIDB4MTQsCisgICAgICAgIDB4ODEsIDB4NjksIDB4MEYsIDB4RjgsIDB4REYsIDB4REQsIDB4Q0YsIDB4MzQsIDB4MjksIDB4RDUsCisgICAgICAgIDB4NjcsIDB4NzUsIDB4NzEsIDB4ODUsIDB4QzcsIDB4NzUsIDB4MTAsIDB4NjksIDB4NTksIDB4RUMsCisgICAgICAgIDB4QTEsIDB4ODEsIDB4QTQsIDB4QTQsIDB4ODEsIDB4QTEsIDB4MzAsIDB4ODEsIDB4OUUsIDB4MzEsCisgICAgICAgIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsCisgICAgICAgIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsIDB4NjEsIDB4NkUsIDB4NjEsCisgICAgICAgIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsCisgICAgICAgIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsIDB4NkUsIDB4MzEsIDB4MTUsCisgICAgICAgIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MEMsIDB4NzcsCisgICAgICAgIDB4NkYsIDB4NkMsIDB4NjYsIDB4NTMsIDB4NTMsIDB4NEMsIDB4NUYsIDB4MzEsIDB4MzAsIDB4MzIsCisgICAgICAgIDB4MzQsIDB4MzEsIDB4MTksIDB4MzAsIDB4MTcsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsCisgICAgICAgIDB4MEMsIDB4MTAsIDB4NTAsIDB4NzIsIDB4NkYsIDB4NjcsIDB4NzIsIDB4NjEsIDB4NkQsIDB4NkQsCisgICAgICAgIDB4NjksIDB4NkUsIDB4NjcsIDB4MkQsIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzQsIDB4MzEsIDB4MTgsCisgICAgICAgIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsCisgICAgICAgIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsCisgICAgICAgIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksCisgICAgICAgIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsCisgICAgICAgIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsCisgICAgICAgIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4ODIsIDB4MDksIDB4MDAsCisgICAgICAgIDB4QzUsIDB4MTksIDB4OTAsIDB4QTEsIDB4QzksIDB4MDEsIDB4MEYsIDB4QjksIDB4MzAsIDB4MEMsCisgICAgICAgIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MzAsIDB4MDMsIDB4MDEsCisgICAgICAgIDB4MDEsIDB4RkYsIDB4MzAsIDB4MUMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MTEsIDB4MDQsCisgICAgICAgIDB4MTUsIDB4MzAsIDB4MTMsIDB4ODIsIDB4MEIsIDB4NjUsIDB4NzgsIDB4NjEsIDB4NkQsIDB4NzAsCisgICAgICAgIDB4NkMsIDB4NjUsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4ODcsIDB4MDQsIDB4N0YsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDEsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MjUsIDB4MDQsCisgICAgICAgIDB4MTYsIDB4MzAsIDB4MTQsIDB4MDYsIDB4MDgsIDB4MkIsIDB4MDYsIDB4MDEsIDB4MDUsIDB4MDUsCisgICAgICAgIDB4MDcsIDB4MDMsIDB4MDEsIDB4MDYsIDB4MDgsIDB4MkIsIDB4MDYsIDB4MDEsIDB4MDUsIDB4MDUsCisgICAgICAgIDB4MDcsIDB4MDMsIDB4MDIsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsCisgICAgICAgIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MEIsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODEsCisgICAgICAgIDB4ODEsIDB4MDAsIDB4MzAsIDB4Q0UsIDB4NDYsIDB4NDMsIDB4NkQsIDB4NzAsIDB4RTEsIDB4NkQsCisgICAgICAgIDB4QkIsIDB4OEYsIDB4NEEsIDB4MDUsIDB4NjQsIDB4RjcsIDB4MkMsIDB4OEQsIDB4MEUsIDB4RDYsCisgICAgICAgIDB4RjksIDB4MUUsIDB4QjYsIDB4MkEsIDB4OEUsIDB4RUQsIDB4NTIsIDB4RTEsIDB4N0MsIDB4NDQsCisgICAgICAgIDB4QkYsIDB4NTksIDB4NTQsIDB4REEsIDB4MkQsIDB4MzEsIDB4NEQsIDB4RTYsIDB4NzksIDB4RDIsCisgICAgICAgIDB4RDAsIDB4RDgsIDB4QjQsIDB4Q0YsIDB4NUIsIDB4MTYsIDB4MEEsIDB4MTYsIDB4QTEsIDB4QkUsCisgICAgICAgIDB4NjIsIDB4OUYsIDB4NkMsIDB4MjQsIDB4NDYsIDB4N0IsIDB4QjgsIDB4REQsIDB4QjgsIDB4OEQsCisgICAgICAgIDB4N0YsIDB4RkUsIDB4RjEsIDB4QUMsIDB4NjIsIDB4OTQsIDB4RTAsIDB4MzQsIDB4Q0UsIDB4NEMsCisgICAgICAgIDB4NTksIDB4M0EsIDB4QzUsIDB4NUEsIDB4RTYsIDB4NDAsIDB4RDUsIDB4NjAsIDB4N0UsIDB4MjAsCisgICAgICAgIDB4NUQsIDB4RUQsIDB4NDMsIDB4OTIsIDB4RDMsIDB4RjMsIDB4RUEsIDB4RTAsIDB4RDEsIDB4NTcsCisgICAgICAgIDB4QzgsIDB4Q0UsIDB4NDEsIDB4NzksIDB4REIsIDB4ODEsIDB4NDEsIDB4QzYsIDB4RjAsIDB4MEUsCisgICAgICAgIDB4MzUsIDB4RDQsIDB4NkYsIDB4OTIsIDB4NTgsIDB4MkQsIDB4RDYsIDB4QjIsIDB4RUMsIDB4RjEsCisgICAgICAgIDB4ODgsIDB4RkYsIDB4NkQsIDB4Q0EsIDB4NjMsIDB4RDYsIDB4NEEsIDB4OEQsIDB4MTAsIDB4QTYsCisgICAgICAgIDB4MjMsIDB4MDYsIDB4NzcsIDB4OUEsIDB4RDUsIDB4QUIsIDB4OUQsIDB4NjQsIDB4NDYsIDB4MDIKKworfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NsaWVudF9jZXJ0X2Rlcl8xMDI0ID0gc2l6ZW9mKGNsaWVudF9jZXJ0X2Rlcl8xMDI0KTsKKworLyogLi9jZXJ0cy8xMDI0L2RoMTAyNC5kZXIsIDEwMjQtYml0ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF9rZXlfZGVyXzEwMjRbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODEsIDB4ODcsIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4QTQsIDB4RDIsIDB4QjgsCisgICAgICAgIDB4NkUsIDB4NzgsIDB4RjUsIDB4RDksIDB4RUQsIDB4MkQsIDB4N0MsIDB4REQsIDB4QjYsIDB4MTYsCisgICAgICAgIDB4ODYsIDB4NUEsIDB4NEIsIDB4MDUsIDB4NzYsIDB4OTAsIDB4REQsIDB4NjYsIDB4NjEsIDB4QjksCisgICAgICAgIDB4NkQsIDB4NTIsIDB4QTcsIDB4MUMsIDB4QUYsIDB4NjIsIDB4QzYsIDB4NjksIDB4NDcsIDB4N0IsCisgICAgICAgIDB4MzksIDB4RjIsIDB4RkIsIDB4OTQsIDB4RUMsIDB4QkMsIDB4NzksIDB4RkYsIDB4MjQsIDB4NUUsCisgICAgICAgIDB4RUYsIDB4NzksIDB4QkIsIDB4NTksIDB4QjIsIDB4RkMsIDB4Q0EsIDB4MDcsIDB4RDYsIDB4RjQsCisgICAgICAgIDB4RTksIDB4MzQsIDB4RjcsIDB4RTgsIDB4MzgsIDB4RTcsIDB4RDcsIDB4MzMsIDB4NDQsIDB4MUQsCisgICAgICAgIDB4QTMsIDB4NjQsIDB4NzYsIDB4MUEsIDB4ODQsIDB4OTcsIDB4NTQsIDB4NzQsIDB4NDAsIDB4ODQsCisgICAgICAgIDB4MUYsIDB4MTUsIDB4RkUsIDB4N0MsIDB4MjUsIDB4MkEsIDB4MkIsIDB4MjUsIDB4RkQsIDB4OUUsCisgICAgICAgIDB4QzEsIDB4ODksIDB4MzMsIDB4OEMsIDB4MzksIDB4MjUsIDB4MkIsIDB4NDAsIDB4RTYsIDB4Q0QsCisgICAgICAgIDB4RjgsIDB4QTgsIDB4QTEsIDB4OEEsIDB4NTMsIDB4QzYsIDB4NDcsIDB4QjIsIDB4QTAsIDB4RDcsCisgICAgICAgIDB4OEYsIDB4RUIsIDB4MkUsIDB4NjAsIDB4MEEsIDB4MEQsIDB4NEIsIDB4RjgsIDB4QjQsIDB4OTQsCisgICAgICAgIDB4OEMsIDB4NjMsIDB4MEEsIDB4QUQsIDB4QzcsIDB4MTAsIDB4RUEsIDB4QzcsIDB4QTEsIDB4QjksCisgICAgICAgIDB4OUQsIDB4RjIsIDB4QTgsIDB4MzcsIDB4NzMsIDB4MDIsIDB4MDEsIDB4MDIKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9kaF9rZXlfZGVyXzEwMjQgPSBzaXplb2YoZGhfa2V5X2Rlcl8xMDI0KTsKKworLyogLi9jZXJ0cy8xMDI0L2RzYTEwMjQuZGVyLCAxMDI0LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX2tleV9kZXJfMTAyNFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwMSwgMHhCQywgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MSwgMHg4MSwKKyAgICAgICAgMHgwMCwgMHhGNywgMHg0QiwgMHhGOSwgMHhCQiwgMHgxNSwgMHg5OCwgMHhFQiwgMHhERCwgMHhERSwKKyAgICAgICAgMHgxRSwgMHg0RSwgMHg3MSwgMHg4OCwgMHg4NSwgMHhGMiwgMHhCNywgMHhCQSwgMHhFMiwgMHg0QSwKKyAgICAgICAgMHhEQSwgMHg3NiwgMHg0MCwgMHhDRCwgMHg2OSwgMHg0OCwgMHg5RSwgMHg4MywgMHg3QywgMHgxMSwKKyAgICAgICAgMHhGNywgMHg2NSwgMHgzMSwgMHg3OCwgMHhGNSwgMHgyNSwgMHgyRCwgMHhGNywgMHhCNywgMHhGOCwKKyAgICAgICAgMHg1MiwgMHgzRiwgMHhCRSwgMHhEOCwgMHhCNiwgMHhDNSwgMHhGRSwgMHgxOCwgMHgxNSwgMHg1QiwKKyAgICAgICAgMHhCOSwgMHhENSwgMHg5MiwgMHg4NiwgMHhCQywgMHhCMiwgMHgxNywgMHg3QywgMHhEOCwgMHhCMCwKKyAgICAgICAgMHhCRSwgMHhBMCwgMHg3QywgMHhGMiwgMHhENSwgMHg3MywgMHg3QSwgMHg1OCwgMHg4RiwgMHg4RCwKKyAgICAgICAgMHhFNSwgMHg0QSwgMHgwMCwgMHg5OSwgMHg4MywgMHg0QSwgMHhDMCwgMHg5RSwgMHgxNiwgMHgwOSwKKyAgICAgICAgMHhBMSwgMHgxMCwgMHgzNCwgMHhENSwgMHgxOSwgMHhCQiwgMHg2MywgMHhFMywgMHhERCwgMHg4MywKKyAgICAgICAgMHg3NCwgMHg3RiwgMHgxMCwgMHhDQSwgMHg3MywgMHg3NSwgMHhFRSwgMHgzMSwgMHg0QSwgMHhERCwKKyAgICAgICAgMHg5RiwgMHhFMCwgMHgwMiwgMHg2QSwgMHg5RCwgMHhFRSwgMHhCMiwgMHg0QiwgMHhBNywgMHg2QiwKKyAgICAgICAgMHgyQSwgMHg2QywgMHhDNywgMHg4NiwgMHg3NywgMHhFOCwgMHgwNCwgMHgxNSwgMHhEQywgMHg5MiwKKyAgICAgICAgMHhCNCwgMHg3QSwgMHgyOSwgMHgxRiwgMHg0RSwgMHg4MywgMHg2MywgMHg4NSwgMHg1NSwgMHgwMiwKKyAgICAgICAgMHgxNSwgMHgwMCwgMHhEMiwgMHgwNSwgMHhFNCwgMHg3MywgMHhGQiwgMHhDMSwgMHg5OSwgMHhDNSwKKyAgICAgICAgMHhEQywgMHg2OCwgMHhBNCwgMHg4RCwgMHg5MiwgMHgyNywgMHgzRCwgMHhFMiwgMHg1MiwgMHg1RiwKKyAgICAgICAgMHg4OSwgMHg4QiwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhBQSwgMHgyMSwgMHgwMiwgMHgwOSwKKyAgICAgICAgMHg0MywgMHg2RSwgMHhGQiwgMHhBMiwgMHg1NCwgMHgxNCwgMHg4NSwgMHgwQSwgMHhGNCwgMHgyOCwKKyAgICAgICAgMHg3QywgMHhDQiwgMHhDQywgMHhEQiwgMHhGNSwgMHgxRSwgMHhBMiwgMHgxOCwgMHhBOSwgMHgyMSwKKyAgICAgICAgMHhERSwgMHg4OCwgMHg4OCwgMHgzMywgMHg4QywgMHgyRSwgMHhFQiwgMHg4RCwgMHhBMywgMHhGMCwKKyAgICAgICAgMHgxRCwgMHhDOCwgMHg4RiwgMHhGNiwgMHg3RSwgMHhGOCwgMHhDRiwgMHgxMiwgMHhGNSwgMHhCNCwKKyAgICAgICAgMHhBMSwgMHgxMSwgMHg2RiwgMHgwQywgMHhENCwgMHhGMCwgMHgwNiwgMHhBRCwgMHhDNCwgMHhGQywKKyAgICAgICAgMHgxNCwgMHg0NSwgMHhDNywgMHg5NCwgMHgxNSwgMHhCQywgMHgxOSwgMHg0QiwgMHhBRSwgMHhFRiwKKyAgICAgICAgMHg5MywgMHg2QSwgMHg0RiwgMHhDQywgMHgxNCwgMHhEOCwgMHg0NywgMHg4QiwgMHgzOSwgMHg2NiwKKyAgICAgICAgMHg4NywgMHgwMiwgMHhENCwgMHgyOCwgMHgwQSwgMHhCOCwgMHhFRSwgMHgwOSwgMHgzNywgMHhGNCwKKyAgICAgICAgMHgwMCwgMHhBMCwgMHgwNCwgMHhBNywgMHg3OSwgMHhBNywgMHhEMiwgMHgzQywgMHhGNywgMHgzNCwKKyAgICAgICAgMHg0MywgMHg1NiwgMHg4RSwgMHhEMCwgMHg3QywgMHhDMiwgMHhEOCwgMHg0RCwgMHgwRiwgMHg4OSwKKyAgICAgICAgMHhFRCwgMHgxNCwgMHhDMSwgMHgyQywgMHg5QywgMHg0QywgMHgxOSwgMHg5QiwgMHg5RSwgMHhEQywKKyAgICAgICAgMHg1MywgMHgwOSwgMHg5RiwgMHhERiwgMHgyRCwgMHhGMCwgMHgwQywgMHgyNywgMHg1NCwgMHgzQSwKKyAgICAgICAgMHg3NywgMHgxNCwgMHgyRCwgMHhERSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhFOCwgMHgxRiwKKyAgICAgICAgMHg3QywgMHhCNywgMHhDMCwgMHg1NCwgMHg1MSwgMHhBNywgMHgyOCwgMHgyRCwgMHg1OCwgMHg3QywKKyAgICAgICAgMHhERSwgMHhENCwgMHg1QywgMHhERCwgMHhENSwgMHg3NiwgMHg4NCwgMHgzQywgMHgzNiwgMHgyMCwKKyAgICAgICAgMHhDMCwgMHhDMywgMHgyNSwgMHhENywgMHgzQSwgMHgzOCwgMHhFMSwgMHg1NCwgMHhDOCwgMHhGRCwKKyAgICAgICAgMHg0MCwgMHg2OCwgMHgxQSwgMHgyMSwgMHg1NCwgMHgyNiwgMHgzOSwgMHgxNCwgMHhCRiwgMHhGNiwKKyAgICAgICAgMHhBMywgMHg5QywgMHg1RSwgMHhEOSwgMHgyQiwgMHhGNywgMHhDOSwgMHgyNSwgMHhCQSwgMHgwMCwKKyAgICAgICAgMHgwOSwgMHhDQiwgMHg3RiwgMHgwQywgMHg0QSwgMHgyNCwgMHhGRCwgMHgxNSwgMHgxNiwgMHgxNSwKKyAgICAgICAgMHg0OCwgMHhDRCwgMHgwQiwgMHg1MiwgMHg0NCwgMHg0MCwgMHg3QiwgMHg5MCwgMHg2MywgMHgyQiwKKyAgICAgICAgMHg5MCwgMHgyMiwgMHhDNSwgMHgxOCwgMHgwNSwgMHg4MCwgMHg1MywgMHhBRiwgMHg4MywgMHgxRiwKKyAgICAgICAgMHg1NCwgMHhFMiwgMHhCMCwgMHhBMiwgMHgwQiwgMHg1QSwgMHg5MiwgMHgyNCwgMHhFMSwgMHg2MiwKKyAgICAgICAgMHgyOCwgMHgzRiwgMHhCNywgMHhDQSwgMHhCOSwgMHg4OSwgMHhENiwgMHhBMCwgMHhCNywgMHhBRCwKKyAgICAgICAgMHhBRSwgMHgwNSwgMHhFMSwgMHhDMSwgMHg1OSwgMHg0MCwgMHhFRCwgMHg0QSwgMHgxQiwgMHg2OCwKKyAgICAgICAgMHhBNywgMHg3QiwgMHhGQiwgMHhDMywgMHgyMCwgMHg4MSwgMHhFRiwgMHg0QiwgMHhGMywgMHg2OSwKKyAgICAgICAgMHg5MSwgMHhCMCwgMHhDRSwgMHgzQSwgMHhCMCwgMHgzOCwgMHgwMiwgMHgxNCwgMHgyNSwgMHgzOCwKKyAgICAgICAgMHgzQiwgMHhBMSwgMHgxOSwgMHg3NSwgMHhERiwgMHg5QiwgMHhGNSwgMHg3MiwgMHg1MywgMHg0RiwKKyAgICAgICAgMHgzOSwgMHhFMSwgMHgxQywgMHhFQywgMHgxMywgMHg4NCwgMHg4MiwgMHgxOAorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2RzYV9rZXlfZGVyXzEwMjQgPSBzaXplb2YoZHNhX2tleV9kZXJfMTAyNCk7CisKKy8qIC4vY2VydHMvMTAyNC9yc2ExMDI0LmRlciwgMTAyNC1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJzYV9rZXlfZGVyXzEwMjRbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDIsIDB4NUQsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4ODEsCisgICAgICAgIDB4MDAsIDB4QkUsIDB4NzAsIDB4NzAsIDB4QjgsIDB4MDQsIDB4MTgsIDB4RTUsIDB4MjgsIDB4RkUsCisgICAgICAgIDB4NjYsIDB4RDgsIDB4OTAsIDB4ODgsIDB4RTAsIDB4RjEsIDB4QjcsIDB4QzMsIDB4RDAsIDB4RDIsCisgICAgICAgIDB4M0UsIDB4RTYsIDB4NEIsIDB4OTQsIDB4NzQsIDB4QjAsIDB4RkYsIDB4QjAsIDB4RjcsIDB4NjMsCisgICAgICAgIDB4QTUsIDB4QUIsIDB4N0UsIDB4QUYsIDB4QjYsIDB4MkIsIDB4QjcsIDB4MzgsIDB4MTYsIDB4MUEsCisgICAgICAgIDB4NTAsIDB4QkYsIDB4RjEsIDB4Q0EsIDB4ODcsIDB4M0EsIDB4RDUsIDB4QjAsIDB4REEsIDB4RjgsCisgICAgICAgIDB4NDMsIDB4N0EsIDB4MTUsIDB4QjksIDB4N0UsIDB4RUEsIDB4MkEsIDB4ODAsIDB4RDIsIDB4NTEsCisgICAgICAgIDB4QjAsIDB4MzUsIDB4QUYsIDB4MDcsIDB4RjMsIDB4RjIsIDB4NUQsIDB4MjQsIDB4M0EsIDB4NEIsCisgICAgICAgIDB4ODcsIDB4NTYsIDB4NDgsIDB4MUIsIDB4M0MsIDB4MjQsIDB4OUEsIDB4REEsIDB4NzAsIDB4ODAsCisgICAgICAgIDB4QkQsIDB4M0MsIDB4OEIsIDB4MDMsIDB4NEEsIDB4MEMsIDB4ODMsIDB4NzEsIDB4REUsIDB4RTMsCisgICAgICAgIDB4MDMsIDB4NzAsIDB4QTIsIDB4QjcsIDB4NjAsIDB4MDksIDB4MUIsIDB4NUUsIDB4QzcsIDB4M0QsCisgICAgICAgIDB4QTAsIDB4NjQsIDB4NjAsIDB4RTMsIDB4QTksIDB4MDYsIDB4OEQsIDB4RDMsIDB4RkYsIDB4NDIsCisgICAgICAgIDB4QkIsIDB4MEEsIDB4OTQsIDB4MjcsIDB4MkQsIDB4NTcsIDB4NDIsIDB4MEQsIDB4QjAsIDB4MkQsCisgICAgICAgIDB4RTAsIDB4QkEsIDB4MTgsIDB4MjUsIDB4NjAsIDB4OTIsIDB4MTEsIDB4OTIsIDB4RjMsIDB4MDIsCisgICAgICAgIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4ODEsIDB4ODAsIDB4MEUsIDB4RUUsIDB4MUQsCisgICAgICAgIDB4QzgsIDB4MkYsIDB4N0EsIDB4MEMsIDB4MkQsIDB4NDQsIDB4OTQsIDB4QTcsIDB4OTEsIDB4REQsCisgICAgICAgIDB4NDksIDB4NTUsIDB4NkEsIDB4MDQsIDB4Q0UsIDB4MTAsIDB4NEQsIDB4QTIsIDB4MUMsIDB4NzYsCisgICAgICAgIDB4Q0QsIDB4MTcsIDB4M0IsIDB4NTQsIDB4OTIsIDB4NzAsIDB4OUIsIDB4ODIsIDB4NzAsIDB4NzIsCisgICAgICAgIDB4MzIsIDB4MjQsIDB4MDcsIDB4M0YsIDB4M0MsIDB4NkMsIDB4NUYsIDB4QkMsIDB4NEMsIDB4QTYsCisgICAgICAgIDB4ODYsIDB4MjcsIDB4OTQsIDB4QUQsIDB4NDIsIDB4REQsIDB4ODcsIDB4REMsIDB4QzAsIDB4NkIsCisgICAgICAgIDB4NDQsIDB4ODksIDB4RjMsIDB4M0YsIDB4MUEsIDB4M0UsIDB4MTEsIDB4NDQsIDB4ODQsIDB4MkUsCisgICAgICAgIDB4NjksIDB4NEMsIDB4QkIsIDB4NEEsIDB4NzEsIDB4MUEsIDB4QkIsIDB4OUEsIDB4NTIsIDB4M0MsCisgICAgICAgIDB4NkIsIDB4REUsIDB4QkMsIDB4QjIsIDB4N0MsIDB4NTEsIDB4RUYsIDB4NEYsIDB4OEYsIDB4M0EsCisgICAgICAgIDB4REMsIDB4NTAsIDB4MDQsIDB4NEUsIDB4QjYsIDB4MzEsIDB4NjYsIDB4QTgsIDB4OEUsIDB4MDYsCisgICAgICAgIDB4M0IsIDB4NTEsIDB4QTksIDB4QzEsIDB4OEEsIDB4Q0IsIDB4QzQsIDB4ODEsIDB4Q0EsIDB4MkQsCisgICAgICAgIDB4NjksIDB4RUMsIDB4ODgsIDB4RkMsIDB4MzMsIDB4ODgsIDB4RDEsIDB4RDQsIDB4MjksIDB4NDcsCisgICAgICAgIDB4ODcsIDB4MzcsIDB4RjksIDB4NkEsIDB4MjIsIDB4NjksIDB4QjksIDB4QzksIDB4RkUsIDB4RUIsCisgICAgICAgIDB4OEMsIDB4QzUsIDB4MjEsIDB4NDEsIDB4NzEsIDB4MDIsIDB4NDEsIDB4MDAsIDB4RkQsIDB4MTcsCisgICAgICAgIDB4OTgsIDB4NDIsIDB4NTQsIDB4MUMsIDB4MjMsIDB4RjgsIDB4RDcsIDB4NUQsIDB4RUYsIDB4NDksCisgICAgICAgIDB4NEYsIDB4QUYsIDB4RDksIDB4MzUsIDB4NkYsIDB4MDgsIDB4QzYsIDB4QzcsIDB4NDAsIDB4NUMsCisgICAgICAgIDB4N0UsIDB4NTgsIDB4ODYsIDB4QzIsIDB4QjIsIDB4MTYsIDB4MzksIDB4MjQsIDB4QzUsIDB4MDYsCisgICAgICAgIDB4QjAsIDB4M0QsIDB4QUYsIDB4MDIsIDB4RDIsIDB4ODcsIDB4NzcsIDB4RDIsIDB4NzYsIDB4QkEsCisgICAgICAgIDB4RTMsIDB4NTksIDB4NjAsIDB4NDIsIDB4RjEsIDB4MTYsIDB4RUYsIDB4MzMsIDB4MEIsIDB4RjIsCisgICAgICAgIDB4MEIsIDB4QkEsIDB4OTksIDB4Q0MsIDB4QjYsIDB4NEMsIDB4NDYsIDB4M0YsIDB4MzMsIDB4RTQsCisgICAgICAgIDB4RDQsIDB4NjcsIDB4MDIsIDB4NDEsIDB4MDAsIDB4QzAsIDB4QTAsIDB4OTEsIDB4NkQsIDB4RkUsCisgICAgICAgIDB4MjgsIDB4RTAsIDB4ODEsIDB4NUEsIDB4MTUsIDB4QTcsIDB4QzksIDB4QTgsIDB4OTgsIDB4QzYsCisgICAgICAgIDB4MEEsIDB4QUIsIDB4MDAsIDB4QzUsIDB4NDAsIDB4QzksIDB4MjEsIDB4QkIsIDB4QjIsIDB4MzMsCisgICAgICAgIDB4NUEsIDB4QTcsIDB4Q0IsIDB4NkUsIDB4QjgsIDB4MDgsIDB4NTYsIDB4NEEsIDB4NzYsIDB4MjgsCisgICAgICAgIDB4RTgsIDB4NkQsIDB4QkQsIDB4RjUsIDB4MjYsIDB4N0IsIDB4QkYsIDB4QzUsIDB4NDYsIDB4NDUsCisgICAgICAgIDB4MEQsIDB4RUMsIDB4N0QsIDB4RUUsIDB4ODIsIDB4RDYsIDB4Q0EsIDB4NUYsIDB4M0QsIDB4NkUsCisgICAgICAgIDB4Q0MsIDB4OTQsIDB4NzMsIDB4Q0QsIDB4Q0UsIDB4ODYsIDB4NkUsIDB4OTUsIDB4OTUsIDB4MDIsCisgICAgICAgIDB4NDAsIDB4MzgsIDB4RkQsIDB4MjgsIDB4MUUsIDB4QkYsIDB4NUIsIDB4QkEsIDB4QzksIDB4REMsCisgICAgICAgIDB4OEMsIDB4REQsIDB4NDUsIDB4QUYsIDB4QjgsIDB4RDMsIDB4RkIsIDB4MTEsIDB4MkUsIDB4NzMsCisgICAgICAgIDB4QkMsIDB4MDgsIDB4MDUsIDB4MEIsIDB4QkEsIDB4MTksIDB4NTYsIDB4MUIsIDB4Q0QsIDB4OUYsCisgICAgICAgIDB4M0UsIDB4NjUsIDB4NTMsIDB4MTUsIDB4M0EsIDB4M0UsIDB4N0YsIDB4MkYsIDB4MzIsIDB4QUIsCisgICAgICAgIDB4Q0IsIDB4NkIsIDB4NEEsIDB4QjcsIDB4QzgsIDB4QjcsIDB4NDEsIDB4M0IsIDB4OTIsIDB4NDMsCisgICAgICAgIDB4NzgsIDB4NDYsIDB4MTcsIDB4NTEsIDB4ODYsIDB4QzksIDB4RkMsIDB4RUIsIDB4OEIsIDB4OEYsCisgICAgICAgIDB4NDEsIDB4Q0EsIDB4MDgsIDB4OUIsIDB4QkYsIDB4MDIsIDB4NDEsIDB4MDAsIDB4QUQsIDB4OUIsCisgICAgICAgIDB4ODksIDB4QjYsIDB4RjIsIDB4OEMsIDB4NzAsIDB4REEsIDB4RTQsIDB4MTAsIDB4MDQsIDB4NkIsCisgICAgICAgIDB4MTEsIDB4OTIsIDB4QUYsIDB4NUEsIDB4Q0EsIDB4MDgsIDB4MjUsIDB4QkYsIDB4NjAsIDB4MDcsCisgICAgICAgIDB4MTEsIDB4MUQsIDB4NjgsIDB4N0YsIDB4NUEsIDB4MUYsIDB4NTUsIDB4MjgsIDB4NzQsIDB4MEIsCisgICAgICAgIDB4MjEsIDB4OEQsIDB4MjEsIDB4MEQsIDB4NkEsIDB4NkEsIDB4RkIsIDB4RDksIDB4QjUsIDB4NEEsCisgICAgICAgIDB4N0YsIDB4NDcsIDB4RjcsIDB4RDAsIDB4QjYsIDB4QzYsIDB4NDEsIDB4MDIsIDB4OTcsIDB4MDcsCisgICAgICAgIDB4NDksIDB4OTMsIDB4MUEsIDB4OUIsIDB4MzMsIDB4NjgsIDB4QjMsIDB4QTIsIDB4NjEsIDB4MzIsCisgICAgICAgIDB4QTUsIDB4ODksIDB4MDIsIDB4NDEsIDB4MDAsIDB4OEYsIDB4RUYsIDB4QUQsIDB4QjUsIDB4QjAsCisgICAgICAgIDB4QjAsIDB4N0UsIDB4ODYsIDB4MDMsIDB4NDMsIDB4OTMsIDB4NkUsIDB4REQsIDB4M0MsIDB4MkQsCisgICAgICAgIDB4OUIsIDB4NkEsIDB4NTUsIDB4RkYsIDB4NkYsIDB4M0UsIDB4NzAsIDB4MkEsIDB4RDQsIDB4QkYsCisgICAgICAgIDB4MUYsIDB4OEMsIDB4OTMsIDB4NjAsIDB4OUUsIDB4NkQsIDB4MkYsIDB4MTgsIDB4NkMsIDB4MTEsCisgICAgICAgIDB4MzYsIDB4OTgsIDB4M0YsIDB4MTAsIDB4NzgsIDB4RTgsIDB4M0UsIDB4OEYsIDB4RkUsIDB4NTUsCisgICAgICAgIDB4QjksIDB4OUUsIDB4RDUsIDB4NUIsIDB4MkUsIDB4ODcsIDB4MUMsIDB4NTgsIDB4RDAsIDB4MzcsCisgICAgICAgIDB4ODksIDB4OTYsIDB4RUMsIDB4NDgsIDB4NTQsIDB4RjUsIDB4OUYsIDB4MEYsIDB4QjMKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9yc2Ffa2V5X2Rlcl8xMDI0ID0gc2l6ZW9mKHJzYV9rZXlfZGVyXzEwMjQpOworCisvKiAuL2NlcnRzLzEwMjQvY2Eta2V5LmRlciwgMTAyNC1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhX2tleV9kZXJfMTAyNFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwMiwgMHg1RSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MSwgMHg4MSwKKyAgICAgICAgMHgwMCwgMHhDRCwgMHhBQywgMHhERCwgMHg0NywgMHhFQywgMHhCRSwgMHhCNywgMHgyNCwgMHhDMywKKyAgICAgICAgMHg2MywgMHgxQiwgMHg1NCwgMHg5OCwgMHg3OSwgMHhFMSwgMHhDNywgMHgzMSwgMHgxNiwgMHg1OSwKKyAgICAgICAgMHhENiwgMHg5RCwgMHg3NywgMHg5RCwgMHg4RCwgMHhFMiwgMHg4QiwgMHhFRCwgMHgwNCwgMHgxNywKKyAgICAgICAgMHhCMiwgMHhDNiwgMHhFQiwgMHhFNCwgMHg5QiwgMHg5MSwgMHhCRSwgMHgzMSwgMHg1MCwgMHg2MiwKKyAgICAgICAgMHg5NywgMHg1OCwgMHhCNSwgMHg3RiwgMHgyOSwgMHhERSwgMHhCMywgMHg3MSwgMHgyNCwgMHgwQiwKKyAgICAgICAgMHhCRiwgMHg5NywgMHgwOSwgMHg3RiwgMHgyNiwgMHhEQywgMHgyRCwgMHhFQywgMHhBOCwgMHgyRSwKKyAgICAgICAgMHhCMiwgMHg2NCwgMHgyQiwgMHg3QSwgMHgyQiwgMHgzNSwgMHgxOSwgMHgyRCwgMHhBMiwgMHg4MCwKKyAgICAgICAgMHhDQiwgMHg5OSwgMHhGRCwgMHg5NCwgMHg3MSwgMHgxQiwgMHgyMywgMHg4RCwgMHg1NCwgMHhEQiwKKyAgICAgICAgMHgyRSwgMHg2MiwgMHg4RCwgMHg4MSwgMHgwOCwgMHgyRCwgMHhGNCwgMHgyNCwgMHg3MiwgMHgyNywKKyAgICAgICAgMHg2QywgMHhGOSwgMHhDOSwgMHg4RSwgMHhEQiwgMHg0QywgMHg3NSwgMHhCQSwgMHg5QiwgMHgwMSwKKyAgICAgICAgMHhGOCwgMHgzRiwgMHgxOCwgMHhGNCwgMHhFNiwgMHg3RiwgMHhGQiwgMHg1NywgMHg5NCwgMHg5MiwKKyAgICAgICAgMHhDQywgMHg4OCwgMHhDNCwgMHhCNCwgMHgwMCwgMHhDMiwgMHhBQSwgMHhENCwgMHhFNSwgMHg4OCwKKyAgICAgICAgMHgxOCwgMHhCMywgMHgxMSwgMHgyRiwgMHg3MywgMHhDMCwgMHhENiwgMHgyOSwgMHgwOSwgMHgwMiwKKyAgICAgICAgMHgwMywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwgMHg4MSwgMHg4MCwgMHg1MiwgMHgzNSwgMHgzRCwKKyAgICAgICAgMHgwMSwgMHgyOSwgMHhBNCwgMHg5NSwgMHgyOSwgMHg3MSwgMHg5QiwgMHg2NCwgMHg2QSwgMHgyQywKKyAgICAgICAgMHhDMywgMHhEMiwgMHhCNSwgMHhCRSwgMHg2RSwgMHgxMywgMHg5QywgMHg4RiwgMHhCNiwgMHgyNiwKKyAgICAgICAgMHhEOCwgMHg3NiwgMHg2QiwgMHhCRCwgMHg2MSwgMHhCQywgMHg2MywgMHgyRCwgMHhENSwgMHg0RCwKKyAgICAgICAgMHhCQiwgMHhDQywgMHhDNiwgMHgzQiwgMHg4OSwgMHhDOCwgMHhDRSwgMHg3QiwgMHg5QiwgMHg5NywKKyAgICAgICAgMHhFNywgMHg1MSwgMHg2NywgMHg2MSwgMHhEQSwgMHhBOSwgMHg4MywgMHg3QiwgMHhDOCwgMHg0NCwKKyAgICAgICAgMHhGNSwgMHg3MCwgMHg1RSwgMHgzRSwgMHhEMCwgMHg3RSwgMHg1MSwgMHhCOSwgMHg2RSwgMHgxMywKKyAgICAgICAgMHg1NywgMHgwOCwgMHg1QywgMHhFMSwgMHg2NywgMHg0RiwgMHg2MSwgMHg1RSwgMHhBNSwgMHgwOSwKKyAgICAgICAgMHhFQywgMHgxMSwgMHhERCwgMHhFNCwgMHhCOCwgMHhCNCwgMHhGNCwgMHhFMCwgMHg2MywgMHgzNCwKKyAgICAgICAgMHg0QywgMHhEQSwgMHgzMiwgMHgyMCwgMHgxRiwgMHg4NSwgMHg0MSwgMHg1RCwgMHhCQywgMHhEQiwKKyAgICAgICAgMHgyNCwgMHhDNSwgMHhBRiwgMHhCRSwgMHgwMiwgMHg1RiwgMHgyMiwgMHhGMSwgMHg3QywgMHhDQywKKyAgICAgICAgMHgwNSwgMHg1NiwgMHhBNiwgMHhBNiwgMHgzNywgMHg5QSwgMHhFQiwgMHhGRiwgMHg1MiwgMHgyRCwKKyAgICAgICAgMHhCRiwgMHgzMCwgMHg0QiwgMHg5QSwgMHgxRCwgMHhFRSwgMHhBQiwgMHg5QywgMHgyQywgMHhFMiwKKyAgICAgICAgMHhDMSwgMHhCOCwgMHg5RCwgMHhDOSwgMHgzMSwgMHgwMiwgMHg0MSwgMHgwMCwgMHhFOSwgMHg4OSwKKyAgICAgICAgMHgxNiwgMHhDRCwgMHhBQywgMHgyRSwgMHhGMiwgMHg0RCwgMHg2NiwgMHgxNywgMHhCRCwgMHg3OCwKKyAgICAgICAgMHgxMiwgMHgxMiwgMHg4RCwgMHg4RSwgMHg4NCwgMHgyNCwgMHhERSwgMHgyRCwgMHg1MCwgMHg0MSwKKyAgICAgICAgMHg4NSwgMHg4QywgMHgzNCwgMHgwOSwgMHhGQSwgMHhGQiwgMHg2RCwgMHg4NywgMHg1MSwgMHg0QywKKyAgICAgICAgMHgxMywgMHgyOCwgMHhGMCwgMHg2MCwgMHgxMSwgMHg4NiwgMHgzRCwgMHhDMiwgMHhBNCwgMHhDRiwKKyAgICAgICAgMHg1RSwgMHhDNSwgMHg2RiwgMHg1QiwgMHgxMSwgMHgzMiwgMHgwQSwgMHhCNSwgMHgyOCwgMHhEMCwKKyAgICAgICAgMHg4MiwgMHg0NywgMHg0NCwgMHgyNiwgMHg5MiwgMHhFMiwgMHg3OCwgMHg1OSwgMHhCNCwgMHgwOCwKKyAgICAgICAgMHhCMywgMHhGRCwgMHgwMiwgMHg0MSwgMHgwMCwgMHhFMSwgMHg3NSwgMHhCNCwgMHg2QSwgMHhCNSwKKyAgICAgICAgMHg4QywgMHgxMSwgMHhGQiwgMHhDQywgMHg0MiwgMHgwMiwgMHhDNSwgMHhEQSwgMHg0OCwgMHhDRSwKKyAgICAgICAgMHgyOSwgMHg0MywgMHgxNCwgMHgwMSwgMHg5QSwgMHgyQywgMHhCMywgMHhBNCwgMHhDQiwgMHg3MywKKyAgICAgICAgMHhFQiwgMHhBMSwgMHgzNSwgMHg1NywgMHhBRCwgMHhCNSwgMHgxNiwgMHgxNywgMHg4MCwgMHgwMywKKyAgICAgICAgMHg1RiwgMHgzMiwgMHgzNywgMHhCRSwgMHhBMiwgMHg2RiwgMHhGOSwgMHgzMSwgMHg4NCwgMHhCRiwKKyAgICAgICAgMHgwMCwgMHg2RSwgMHg4RCwgMHgwMywgMHgwRSwgMHgzMCwgMHgxQywgMHhEMCwgMHgyRiwgMHgzNywKKyAgICAgICAgMHhGMCwgMHg3RSwgMHhDMiwgMHg2NCwgMHhCRiwgMHhFRSwgMHg0QiwgMHhFOCwgMHhGRCwgMHgwMiwKKyAgICAgICAgMHg0MSwgMHgwMCwgMHhFMSwgMHg5OSwgMHg4QiwgMHgyQiwgMHhEOCwgMHg5RiwgMHhFOSwgMHg3NiwKKyAgICAgICAgMHg5NywgMHg5RiwgMHg2QiwgMHg2QiwgMHgyOCwgMHg5QSwgMHgzRiwgMHhBMSwgMHg2MywgMHg0QSwKKyAgICAgICAgMHg3MiwgMHg0RSwgMHhGNywgMHhFRSwgMHhCMywgMHhFMiwgMHg0MywgMHgwQiwgMHgzOSwgMHgyNywKKyAgICAgICAgMHhENiwgMHgyMSwgMHgxOCwgMHg4QSwgMHgxMywgMHgyMCwgMHg0MywgMHg0NSwgMHhBQSwgMHhFOCwKKyAgICAgICAgMHgzMSwgMHg5NSwgMHg2QywgMHhCQywgMHhERSwgMHhFMiwgMHg3RiwgMHhCNiwgMHg0QiwgMHhBMCwKKyAgICAgICAgMHgzOSwgMHhGMywgMHhEMywgMHg5RiwgMHhDOSwgMHg5QSwgMHhBQSwgMHhERCwgMHg1MCwgMHg5QiwKKyAgICAgICAgMHhGMiwgMHg4MywgMHg0NSwgMHg4NSwgMHhGQSwgMHhDOSwgMHgwMiwgMHg0MSwgMHgwMCwgMHhBRiwKKyAgICAgICAgMHhCMCwgMHhDNywgMHg3QywgMHhGOCwgMHgyOCwgMHg0NCwgMHhDMywgMHg1MCwgMHhGMiwgMHg4NywKKyAgICAgICAgMHhCMiwgMHhBMiwgMHg1RCwgMHg2NSwgMHhCQSwgMHgyNSwgMHhCOSwgMHg2QiwgMHg1RSwgMHgzNywKKyAgICAgICAgMHg0MywgMHg2RSwgMHg0MSwgMHhENCwgMHhGRCwgMHg2MywgMHg0QywgMHg2QywgMHgxQywgMHhDMywKKyAgICAgICAgMHgyNiwgMHg4OSwgMHhGRCwgMHg4OSwgMHhBMywgMHgxRiwgMHg0MCwgMHhFRCwgMHg1RiwgMHgyQiwKKyAgICAgICAgMHg5RSwgMHhBNiwgMHg4NSwgMHhFOSwgMHg0OSwgMHg2RSwgMHhEQywgMHg5NywgMHhFQSwgMHhGMCwKKyAgICAgICAgMHg3NywgMHgyMywgMHg4QywgMHgwOCwgMHgyRCwgMHg3MiwgMHhCQSwgMHgwRCwgMHg0NCwgMHhCQiwKKyAgICAgICAgMHg2RiwgMHg5MCwgMHgwOSwgMHgwMiwgMHg0MSwgMHgwMCwgMHg5MSwgMHhFNCwgMHgyRSwgMHhDQSwKKyAgICAgICAgMHg4QywgMHgwQSwgMHg2OSwgMHgyRiwgMHg2MiwgMHhFMiwgMHg2MiwgMHgzQiwgMHhBNSwgMHg4RCwKKyAgICAgICAgMHg1QSwgMHgyQywgMHg1NiwgMHgzRSwgMHg3RiwgMHg2NywgMHg0MiwgMHg5MiwgMHgxMiwgMHg5MiwKKyAgICAgICAgMHg1RiwgMHhGMywgMHg5NywgMHhERCwgMHhFMSwgMHhBOSwgMHg3RiwgMHhBRCwgMHgyRSwgMHgyRCwKKyAgICAgICAgMHhGNCwgMHg0QSwgMHg1NywgMHhCMywgMHg3QSwgMHgxMCwgMHhCRCwgMHhENywgMHhFNCwgMHhFQywKKyAgICAgICAgMHg2QSwgMHgwOCwgMHgyMSwgMHhFOSwgMHhGMiwgMHg0NiwgMHg0OSwgMHhEMiwgMHg2OSwgMHg0NywKKyAgICAgICAgMHg4QSwgMHgyMCwgMHg0QiwgMHhGMiwgMHhCMSwgMHg1MiwgMHg4MywgMHhBQiwgMHg2RiwgMHgxMAorCit9Oworc3RhdGljIGNvbnN0IGludCBzaXplb2ZfY2Ffa2V5X2Rlcl8xMDI0ID0gc2l6ZW9mKGNhX2tleV9kZXJfMTAyNCk7CisKKy8qIC4vY2VydHMvMTAyNC9jYS1jZXJ0LmRlciwgMTAyNC1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhX2NlcnRfZGVyXzEwMjRbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDMsIDB4RjMsIDB4MzAsIDB4ODIsIDB4MDMsIDB4NUMsIDB4QTAsIDB4MDMsCisgICAgICAgIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDksIDB4MDAsIDB4OTcsIDB4MUQsIDB4MzMsIDB4MTEsCisgICAgICAgIDB4RTgsIDB4NDAsIDB4NkUsIDB4OTUsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsCisgICAgICAgIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MEIsIDB4MDUsIDB4MDAsIDB4MzAsCisgICAgICAgIDB4ODEsIDB4OTksIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsCisgICAgICAgIDB4NjEsIDB4NkUsIDB4NjEsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsCisgICAgICAgIDB4NkUsIDB4MzEsIDB4MTEsIDB4MzAsIDB4MEYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsCisgICAgICAgIDB4MEMsIDB4MDgsIDB4NTMsIDB4NjEsIDB4NzcsIDB4NzQsIDB4NkYsIDB4NkYsIDB4NzQsIDB4NjgsCisgICAgICAgIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsCisgICAgICAgIDB4MEYsIDB4NDMsIDB4NkYsIDB4NkUsIDB4NzMsIDB4NzUsIDB4NkMsIDB4NzQsIDB4NjksIDB4NkUsCisgICAgICAgIDB4NjcsIDB4NUYsIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzQsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsCisgICAgICAgIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsCisgICAgICAgIDB4MkUsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsCisgICAgICAgIDB4NkYsIDB4NkQsIDB4MzEsIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsCisgICAgICAgIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksCisgICAgICAgIDB4NkUsIDB4NjYsIDB4NkYsIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsCisgICAgICAgIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzAsIDB4MUUsIDB4MTcsIDB4MEQsIDB4MzIsCisgICAgICAgIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzEsIDB4MzAsIDB4MzEsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsCisgICAgICAgIDB4MzMsIDB4NUEsIDB4MTcsIDB4MEQsIDB4MzIsIDB4MzMsIDB4MzEsIDB4MzEsIDB4MzAsIDB4MzcsCisgICAgICAgIDB4MzEsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsIDB4MzMsIDB4NUEsIDB4MzAsIDB4ODEsIDB4OTksCisgICAgICAgIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsCisgICAgICAgIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsIDB4NjEsIDB4NkUsCisgICAgICAgIDB4NjEsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsCisgICAgICAgIDB4MEMsIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsIDB4NkUsIDB4MzEsCisgICAgICAgIDB4MTEsIDB4MzAsIDB4MEYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MDgsCisgICAgICAgIDB4NTMsIDB4NjEsIDB4NzcsIDB4NzQsIDB4NkYsIDB4NkYsIDB4NzQsIDB4NjgsIDB4MzEsIDB4MTgsCisgICAgICAgIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MEYsIDB4NDMsCisgICAgICAgIDB4NkYsIDB4NkUsIDB4NzMsIDB4NzUsIDB4NkMsIDB4NzQsIDB4NjksIDB4NkUsIDB4NjcsIDB4NUYsCisgICAgICAgIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzQsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsCisgICAgICAgIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsCisgICAgICAgIDB4MzEsIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsCisgICAgICAgIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsCisgICAgICAgIDB4NkYsIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsCisgICAgICAgIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzAsIDB4ODEsIDB4OUYsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksCisgICAgICAgIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsCisgICAgICAgIDB4MDAsIDB4MDMsIDB4ODEsIDB4OEQsIDB4MDAsIDB4MzAsIDB4ODEsIDB4ODksIDB4MDIsIDB4ODEsCisgICAgICAgIDB4ODEsIDB4MDAsIDB4Q0QsIDB4QUMsIDB4REQsIDB4NDcsIDB4RUMsIDB4QkUsIDB4QjcsIDB4MjQsCisgICAgICAgIDB4QzMsIDB4NjMsIDB4MUIsIDB4NTQsIDB4OTgsIDB4NzksIDB4RTEsIDB4QzcsIDB4MzEsIDB4MTYsCisgICAgICAgIDB4NTksIDB4RDYsIDB4OUQsIDB4NzcsIDB4OUQsIDB4OEQsIDB4RTIsIDB4OEIsIDB4RUQsIDB4MDQsCisgICAgICAgIDB4MTcsIDB4QjIsIDB4QzYsIDB4RUIsIDB4RTQsIDB4OUIsIDB4OTEsIDB4QkUsIDB4MzEsIDB4NTAsCisgICAgICAgIDB4NjIsIDB4OTcsIDB4NTgsIDB4QjUsIDB4N0YsIDB4MjksIDB4REUsIDB4QjMsIDB4NzEsIDB4MjQsCisgICAgICAgIDB4MEIsIDB4QkYsIDB4OTcsIDB4MDksIDB4N0YsIDB4MjYsIDB4REMsIDB4MkQsIDB4RUMsIDB4QTgsCisgICAgICAgIDB4MkUsIDB4QjIsIDB4NjQsIDB4MkIsIDB4N0EsIDB4MkIsIDB4MzUsIDB4MTksIDB4MkQsIDB4QTIsCisgICAgICAgIDB4ODAsIDB4Q0IsIDB4OTksIDB4RkQsIDB4OTQsIDB4NzEsIDB4MUIsIDB4MjMsIDB4OEQsIDB4NTQsCisgICAgICAgIDB4REIsIDB4MkUsIDB4NjIsIDB4OEQsIDB4ODEsIDB4MDgsIDB4MkQsIDB4RjQsIDB4MjQsIDB4NzIsCisgICAgICAgIDB4MjcsIDB4NkMsIDB4RjksIDB4QzksIDB4OEUsIDB4REIsIDB4NEMsIDB4NzUsIDB4QkEsIDB4OUIsCisgICAgICAgIDB4MDEsIDB4RjgsIDB4M0YsIDB4MTgsIDB4RjQsIDB4RTYsIDB4N0YsIDB4RkIsIDB4NTcsIDB4OTQsCisgICAgICAgIDB4OTIsIDB4Q0MsIDB4ODgsIDB4QzQsIDB4QjQsIDB4MDAsIDB4QzIsIDB4QUEsIDB4RDQsIDB4RTUsCisgICAgICAgIDB4ODgsIDB4MTgsIDB4QjMsIDB4MTEsIDB4MkYsIDB4NzMsIDB4QzAsIDB4RDYsIDB4MjksIDB4MDksCisgICAgICAgIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4QTMsIDB4ODIsIDB4MDEsIDB4M0YsIDB4MzAsCisgICAgICAgIDB4ODIsIDB4MDEsIDB4M0IsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MEUsCisgICAgICAgIDB4MDQsIDB4MTYsIDB4MDQsIDB4MTQsIDB4RDMsIDB4MjIsIDB4OEYsIDB4MjgsIDB4MkMsIDB4RTAsCisgICAgICAgIDB4MDUsIDB4RUUsIDB4RDMsIDB4RUQsIDB4QzMsIDB4NzEsIDB4M0QsIDB4QzksIDB4QjIsIDB4MzYsCisgICAgICAgIDB4M0EsIDB4MUQsIDB4QkYsIDB4QTgsIDB4MzAsIDB4ODEsIDB4Q0UsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MUQsIDB4MjMsIDB4MDQsIDB4ODEsIDB4QzYsIDB4MzAsIDB4ODEsIDB4QzMsIDB4ODAsIDB4MTQsCisgICAgICAgIDB4RDMsIDB4MjIsIDB4OEYsIDB4MjgsIDB4MkMsIDB4RTAsIDB4MDUsIDB4RUUsIDB4RDMsIDB4RUQsCisgICAgICAgIDB4QzMsIDB4NzEsIDB4M0QsIDB4QzksIDB4QjIsIDB4MzYsIDB4M0EsIDB4MUQsIDB4QkYsIDB4QTgsCisgICAgICAgIDB4QTEsIDB4ODEsIDB4OUYsIDB4QTQsIDB4ODEsIDB4OUMsIDB4MzAsIDB4ODEsIDB4OTksIDB4MzEsCisgICAgICAgIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsCisgICAgICAgIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsIDB4NjEsIDB4NkUsIDB4NjEsCisgICAgICAgIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsCisgICAgICAgIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsIDB4NkUsIDB4MzEsIDB4MTEsCisgICAgICAgIDB4MzAsIDB4MEYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MDgsIDB4NTMsCisgICAgICAgIDB4NjEsIDB4NzcsIDB4NzQsIDB4NkYsIDB4NkYsIDB4NzQsIDB4NjgsIDB4MzEsIDB4MTgsIDB4MzAsCisgICAgICAgIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MEYsIDB4NDMsIDB4NkYsCisgICAgICAgIDB4NkUsIDB4NzMsIDB4NzUsIDB4NkMsIDB4NzQsIDB4NjksIDB4NkUsIDB4NjcsIDB4NUYsIDB4MzEsCisgICAgICAgIDB4MzAsIDB4MzIsIDB4MzQsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsCisgICAgICAgIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsCisgICAgICAgIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsCisgICAgICAgIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsCisgICAgICAgIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsCisgICAgICAgIDB4NkYsIDB4NkQsIDB4ODIsIDB4MDksIDB4MDAsIDB4OTcsIDB4MUQsIDB4MzMsIDB4MTEsIDB4RTgsCisgICAgICAgIDB4NDAsIDB4NkUsIDB4OTUsIDB4MzAsIDB4MEMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MTMsCisgICAgICAgIDB4MDQsIDB4MDUsIDB4MzAsIDB4MDMsIDB4MDEsIDB4MDEsIDB4RkYsIDB4MzAsIDB4MUMsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MUQsIDB4MTEsIDB4MDQsIDB4MTUsIDB4MzAsIDB4MTMsIDB4ODIsIDB4MEIsCisgICAgICAgIDB4NjUsIDB4NzgsIDB4NjEsIDB4NkQsIDB4NzAsIDB4NkMsIDB4NjUsIDB4MkUsIDB4NjMsIDB4NkYsCisgICAgICAgIDB4NkQsIDB4ODcsIDB4MDQsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzAsIDB4MUQsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MUQsIDB4MjUsIDB4MDQsIDB4MTYsIDB4MzAsIDB4MTQsIDB4MDYsIDB4MDgsCisgICAgICAgIDB4MkIsIDB4MDYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDcsIDB4MDMsIDB4MDEsIDB4MDYsIDB4MDgsCisgICAgICAgIDB4MkIsIDB4MDYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDcsIDB4MDMsIDB4MDIsIDB4MzAsIDB4MEQsCisgICAgICAgIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsCisgICAgICAgIDB4MEIsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODEsIDB4ODEsIDB4MDAsIDB4NEUsIDB4QjEsIDB4MzksCisgICAgICAgIDB4NkEsIDB4MjMsIDB4QTMsIDB4NjUsIDB4MTcsIDB4MTQsIDB4QjYsIDB4NTIsIDB4MkUsIDB4ODYsCisgICAgICAgIDB4NDYsIDB4RDUsIDB4NEYsIDB4N0MsIDB4RDUsIDB4NkMsIDB4QkIsIDB4RkEsIDB4NjYsIDB4QjEsCisgICAgICAgIDB4NzEsIDB4NTQsIDB4QTEsIDB4QUQsIDB4MEUsIDB4QTIsIDB4QjcsIDB4QkEsIDB4NTksIDB4NjUsCisgICAgICAgIDB4OEIsIDB4RDUsIDB4ODcsIDB4NUQsIDB4NTEsIDB4RDAsIDB4NjUsIDB4REUsIDB4NzQsIDB4MDQsCisgICAgICAgIDB4ODAsIDB4N0MsIDB4REEsIDB4M0EsIDB4NTIsIDB4NTcsIDB4N0EsIDB4MUQsIDB4NUQsIDB4NDYsCisgICAgICAgIDB4N0EsIDB4MDYsIDB4NzksIDB4NzUsIDB4RTUsIDB4MzEsIDB4REQsIDB4MUQsIDB4RjYsIDB4NTQsCisgICAgICAgIDB4NzcsIDB4RkMsIDB4NDAsIDB4MTMsIDB4QTEsIDB4NUIsIDB4RkQsIDB4OUUsIDB4N0QsIDB4MUMsCisgICAgICAgIDB4RkQsIDB4MDQsIDB4NEYsIDB4N0MsIDB4RUUsIDB4OTIsIDB4QTIsIDB4ODAsIDB4NTUsIDB4M0MsCisgICAgICAgIDB4M0YsIDB4MkEsIDB4MUMsIDB4QkQsIDB4M0EsIDB4MzcsIDB4MTIsIDB4MEUsIDB4RkQsIDB4NTIsCisgICAgICAgIDB4NjAsIDB4NjYsIDB4MTksIDB4RDUsIDB4NEIsIDB4RjYsIDB4MzUsIDB4NTAsIDB4QTMsIDB4NTksCisgICAgICAgIDB4RDMsIDB4N0YsIDB4NkQsIDB4OTUsIDB4RDcsIDB4NTYsIDB4MTAsIDB4QzYsIDB4ODYsIDB4MjgsCisgICAgICAgIDB4RjQsIDB4NkUsIDB4NkQsIDB4REEsIDB4NEUsIDB4MUMsIDB4QjQsIDB4RTksIDB4MEIsIDB4NEMsCisgICAgICAgIDB4RUQsIDB4NjIsIDB4MEYsIDB4NjQsIDB4MDYKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9jYV9jZXJ0X2Rlcl8xMDI0ID0gc2l6ZW9mKGNhX2NlcnRfZGVyXzEwMjQpOworCisvKiAuL2NlcnRzLzEwMjQvc2VydmVyLWtleS5kZXIsIDEwMjQtYml0ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzZXJ2ZXJfa2V5X2Rlcl8xMDI0W10gPQoreworICAgICAgICAweDMwLCAweDgyLCAweDAyLCAweDVELCAweDAyLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDgxLAorICAgICAgICAweDAwLCAweEFBLCAweDNFLCAweEE1LCAweDlDLCAweEQzLCAweDE3LCAweDQ5LCAweDY1LCAweDQzLAorICAgICAgICAweERFLCAweEQwLCAweEYzLCAweDRCLCAweDFDLCAweERCLCAweDQ5LCAweDBDLCAweEZDLCAweDdBLAorICAgICAgICAweDY1LCAweDA1LCAweDZELCAweERFLCAweDZBLCAweEM0LCAweEU0LCAweDczLCAweDJDLCAweDhBLAorICAgICAgICAweDk2LCAweDgyLCAweDhGLCAweDIzLCAweEE1LCAweDA2LCAweDcxLCAweDFDLCAweDA2LCAweDNFLAorICAgICAgICAweDJGLCAweDkyLCAweDhELCAweDBCLCAweDI5LCAweDM0LCAweDQ1LCAweDU5LCAweEU5LCAweEE5LAorICAgICAgICAweEJDLCAweDYxLCAweEQ3LCAweDI0LCAweDM3LCAweDVELCAweEI1LCAweEM0LCAweDM3LCAweDhELAorICAgICAgICAweEJBLCAweDY3LCAweEIyLCAweEVGLCAweDAzLCAweDI3LCAweEZBLCAweEMxLCAweEI0LCAweENELAorICAgICAgICAweDZCLCAweDAwLCAweDY2LCAweEI0LCAweEQ2LCAweDczLCAweDcwLCAweDFGLCAweDA4LCAweDNBLAorICAgICAgICAweENDLCAweDc3LCAweEFELCAweEU5LCAweEY5LCAweDM0LCAweEQ0LCAweEYzLCAweEEwLCAweDJELAorICAgICAgICAweEE5LCAweEU3LCAweDU4LCAweEE5LCAweEMwLCAweDYxLCAweDg0LCAweEI2LCAweEVDLCAweDNELAorICAgICAgICAweDBBLCAweEFELCAweEZELCAweDVDLCAweDg2LCAweDczLCAweEFBLCAweDZCLCAweDQ3LCAweEQ4LAorICAgICAgICAweDhCLCAweDJFLCAweDU4LCAweDRCLCAweDY5LCAweDEyLCAweDgyLCAweDI2LCAweDU1LCAweEU2LAorICAgICAgICAweDE0LCAweEJGLCAweDU1LCAweDcwLCAweDg4LCAweEZFLCAweEY5LCAweDc1LCAweEUxLCAweDAyLAorICAgICAgICAweDAzLCAweDAxLCAweDAwLCAweDAxLCAweDAyLCAweDgxLCAweDgwLCAweDBBLCAweDRDLCAweEMxLAorICAgICAgICAweEZFLCAweDRCLCAweEYzLCAweDIzLCAweEI4LCAweEExLCAweEIzLCAweDkwLCAweDU2LCAweEI3LAorICAgICAgICAweERCLCAweEE2LCAweDE0LCAweEI0LCAweDU5LCAweDZFLCAweDFBLCAweDQwLCAweDhBLCAweEQ2LAorICAgICAgICAweDIzLCAweDA1LCAweDg4LCAweDgwLCAweEMzLCAweDU4LCAweDFCLCAweDI1LCAweDA4LCAweEZELAorICAgICAgICAweEYyLCAweDE1LCAweDAyLCAweEIwLCAweERDLCAweDVCLCAweEQ0LCAweENBLCAweEZDLCAweDA3LAorICAgICAgICAweDg5LCAweEQ1LCAweEE0LCAweEMwLCAweDdDLCAweEQ3LCAweDhELCAweDEzLCAweDJBLCAweDRFLAorICAgICAgICAweDAxLCAweDlGLCAweDg0LCAweEM4LCAweEJCLCAweDQ3LCAweEIyLCAweEQ4LCAweDY1LCAweDQ1LAorICAgICAgICAweEZBLCAweDg0LCAweDlGLCAweDg4LCAweEQwLCAweEY0LCAweEY1LCAweDIyLCAweDM1LCAweDc3LAorICAgICAgICAweDExLCAweDY3LCAweDFDLCAweERFLCAweDVGLCAweDg1LCAweDZELCAweDU1LCAweEQ4LCAweEE3LAorICAgICAgICAweDA3LCAweDE1LCAweDhDLCAweEUxLCAweEIwLCAweEE3LCAweDc5LCAweEI0LCAweDQ3LCAweDlELAorICAgICAgICAweDcwLCAweEIzLCAweEQyLCAweEYxLCAweDFGLCAweDQxLCAweDRDLCAweDY1LCAweDcyLCAweDI2LAorICAgICAgICAweEVCLCAweDY2LCAweEM4LCAweDk1LCAweEY2LCAweDZELCAweDg3LCAweDM1LCAweDUzLCAweEZFLAorICAgICAgICAweEIxLCAweDUyLCAweDRELCAweDc2LCAweDVCLCAweDYxLCAweDUzLCAweDg5LCAweEIxLCAweDIwLAorICAgICAgICAweDFBLCAweDhCLCAweEU0LCAweDdELCAweEYxLCAweDAyLCAweDQxLCAweDAwLCAweEQ5LCAweDZFLAorICAgICAgICAweEUxLCAweEQ5LCAweDA2LCAweDU2LCAweEExLCAweEY2LCAweERGLCAweDU0LCAweDQ1LCAweEM1LAorICAgICAgICAweEVDLCAweDZBLCAweEM4LCAweDJBLCAweDM4LCAweDRFLCAweDZCLCAweEM2LCAweEU4LCAweEVBLAorICAgICAgICAweEZCLCAweDZGLCAweDY1LCAweDJELCAweEJBLCAweERFLCAweDI3LCAweDYzLCAweDM3LCAweDIxLAorICAgICAgICAweDJFLCAweEE0LCAweDU1LCAweEFCLCAweEU3LCAweERCLCAweENFLCAweDcxLCAweEUxLCAweDA4LAorICAgICAgICAweEZDLCAweEYyLCAweENBLCAweDUyLCAweDMzLCAweDU1LCAweEU4LCAweDM5LCAweEIzLCAweERBLAorICAgICAgICAweEM1LCAweEIwLCAweDY5LCAweDg0LCAweDZFLCAweEUzLCAweENGLCAweDQ3LCAweDgwLCAweEE2LAorICAgICAgICAweEI2LCAweDg1LCAweDAyLCAweDQxLCAweDAwLCAweEM4LCAweDcxLCAweDBELCAweDM3LCAweDQ3LAorICAgICAgICAweEUxLCAweDdCLCAweDIxLCAweDJELCAweDExLCAweDJELCAweDk1LCAweDJFLCAweEM3LCAweEQwLAorICAgICAgICAweEI2LCAweEQzLCAweDdDLCAweDVDLCAweDkzLCAweDNDLCAweDVCLCAweDIyLCAweEU1LCAweEUwLAorICAgICAgICAweDhCLCAweDZELCAweDQ3LCAweEY5LCAweDE0LCAweDBGLCAweDlFLCAweDA4LCAweDFCLCAweDUzLAorICAgICAgICAweEFCLCAweDBBLCAweEE5LCAweEU0LCAweDdGLCAweDQwLCAweEQzLCAweERGLCAweDYyLCAweDc0LAorICAgICAgICAweDEwLCAweEEyLCAweEZFLCAweDgzLCAweDFGLCAweENGLCAweDU1LCAweDY2LCAweEVCLCAweDVELAorICAgICAgICAweEM1LCAweDgzLCAweEJBLCAweEVDLCAweDlGLCAweEQyLCAweEI1LCAweDA2LCAweEFELCAweDAyLAorICAgICAgICAweDQxLCAweDAwLCAweEI3LCAweDY4LCAweDE5LCAweEE3LCAweEM3LCAweEY5LCAweEYxLCAweDlBLAorICAgICAgICAweERELCAweDVELCAweDI3LCAweDkxLCAweEMxLCAweDRGLCAweDdELCAweDUyLCAweDY3LCAweEI2LAorICAgICAgICAweDc2LCAweEExLCAweDBELCAweDNELCAweDkxLCAweDIzLCAweEIwLCAweEIzLCAweEY3LCAweDQ5LAorICAgICAgICAweDg2LCAweEVELCAweEUwLCAweEM1LCAweEUzLCAweEEzLCAweDA5LCAweDA0LCAweEZELCAweDg5LAorICAgICAgICAweEUyLCAweEM1LCAweDFBLCAweDZFLCAweDRCLCAweDc3LCAweEJELCAweDAzLCAweEMzLCAweDdCLAorICAgICAgICAweEI2LCAweDZDLCAweDVELCAweEYyLCAweEFGLCAweDA4LCAweDk0LCAweEE4LCAweEZBLCAweDI0LAorICAgICAgICAweEJELCAweDY2LCAweDcxLCAweEY1LCAweEFFLCAweDQ1LCAweDAyLCAweDQwLCAweDE1LCAweDUyLAorICAgICAgICAweEQxLCAweDkxLCAweDFCLCAweEY4LCAweDg0LCAweERDLCAweEQ2LCAweEFBLCAweDg5LCAweDJBLAorICAgICAgICAweEUxLCAweEJCLCAweDI4LCAweDFELCAweDBCLCAweDBBLCAweEEzLCAweERFLCAweDk2LCAweDAxLAorICAgICAgICAweDJDLCAweDA5LCAweDQwLCAweDg2LCAweDE0LCAweEFFLCAweDFGLCAweDc1LCAweDVFLCAweEUzLAorICAgICAgICAweEY1LCAweDAwLCAweEQzLCAweDM5LCAweEQyLCAweEZDLCAweDk3LCAweEVFLCAweDYxLCAweEJCLAorICAgICAgICAweDI4LCAweDdDLCAweDk0LCAweEQ0LCAweDYwLCAweDQyLCAweEFCLCAweDM4LCAweDZCLCAweDFBLAorICAgICAgICAweDJFLCAweEM0LCAweEMzLCAweDQ5LCAweDBCLCAweEU2LCAweDhBLCAweERELCAweEM1LCAweEQwLAorICAgICAgICAweEI0LCAweDUxLCAweDAyLCAweDQxLCAweDAwLCAweEE5LCAweDhCLCAweEE3LCAweEE5LCAweEVFLAorICAgICAgICAweEFFLCAweEJCLCAweDE3LCAweENCLCAweDcyLCAweEYyLCAweDUwLCAweDIyLCAweDlELCAweEIzLAorICAgICAgICAweERGLCAweEUwLCAweDQwLCAweDM3LCAweDA4LCAweEQ1LCAweDdGLCAweDE5LCAweDU4LCAweDgwLAorICAgICAgICAweDcwLCAweDc5LCAweDY5LCAweDk5LCAweERGLCAweDYyLCAweDBELCAweDIxLCAweEFCLCAweERELAorICAgICAgICAweEIyLCAweENFLCAweDY4LCAweEIzLCAweDlGLCAweDg3LCAweEFGLCAweDU1LCAweEY0LCAweEFBLAorICAgICAgICAweEUxLCAweDAwLCAweDcyLCAweEJFLCAweDZFLCAweEMzLCAweDk0LCAweDQ5LCAweERDLCAweEJCLAorICAgICAgICAweDhFLCAweDFBLCAweDc4LCAweEU1LCAweDQ5LCAweDFGLCAweDU1LCAweDQxLCAweEExCit9Oworc3RhdGljIGNvbnN0IGludCBzaXplb2Zfc2VydmVyX2tleV9kZXJfMTAyNCA9IHNpemVvZihzZXJ2ZXJfa2V5X2Rlcl8xMDI0KTsKKworLyogLi9jZXJ0cy8xMDI0L3NlcnZlci1jZXJ0LmRlciwgMTAyNC1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNlcnZlcl9jZXJ0X2Rlcl8xMDI0W10gPQoreworICAgICAgICAweDMwLCAweDgyLCAweDAzLCAweEU3LCAweDMwLCAweDgyLCAweDAzLCAweDUwLCAweEEwLCAweDAzLAorICAgICAgICAweDAyLCAweDAxLCAweDAyLCAweDAyLCAweDAxLCAweDAxLCAweDMwLCAweDBELCAweDA2LCAweDA5LAorICAgICAgICAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDAxLCAweDBCLCAweDA1LAorICAgICAgICAweDAwLCAweDMwLCAweDgxLCAweDk5LCAweDMxLCAweDBCLCAweDMwLCAweDA5LCAweDA2LCAweDAzLAorICAgICAgICAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLCAweDU1LCAweDUzLCAweDMxLCAweDEwLCAweDMwLAorICAgICAgICAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA4LCAweDBDLCAweDA3LCAweDRELCAweDZGLAorICAgICAgICAweDZFLCAweDc0LCAweDYxLCAweDZFLCAweDYxLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLCAweDA3LCAweDQyLCAweDZGLCAweDdBLCAweDY1LAorICAgICAgICAweDZELCAweDYxLCAweDZFLCAweDMxLCAweDExLCAweDMwLCAweDBGLCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDA0LCAweDBBLCAweDBDLCAweDA4LCAweDUzLCAweDYxLCAweDc3LCAweDc0LCAweDZGLCAweDZGLAorICAgICAgICAweDc0LCAweDY4LCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LAorICAgICAgICAweDBCLCAweDBDLCAweDBGLCAweDQzLCAweDZGLCAweDZFLCAweDczLCAweDc1LCAweDZDLCAweDc0LAorICAgICAgICAweDY5LCAweDZFLCAweDY3LCAweDVGLCAweDMxLCAweDMwLCAweDMyLCAweDM0LCAweDMxLCAweDE4LAorICAgICAgICAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDAzLCAweDBDLCAweDBGLCAweDc3LAorICAgICAgICAweDc3LCAweDc3LCAweDJFLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLAorICAgICAgICAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMxLCAweDFGLCAweDMwLCAweDFELCAweDA2LCAweDA5LAorICAgICAgICAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDA5LCAweDAxLCAweDE2LAorICAgICAgICAweDEwLCAweDY5LCAweDZFLCAweDY2LCAweDZGLCAweDQwLCAweDc3LCAweDZGLCAweDZDLCAweDY2LAorICAgICAgICAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMwLCAweDFFLCAweDE3LAorICAgICAgICAweDBELCAweDMyLCAweDMxLCAweDMwLCAweDMyLCAweDMxLCAweDMwLCAweDMxLCAweDM5LCAweDM0LAorICAgICAgICAweDM5LCAweDM1LCAweDMzLCAweDVBLCAweDE3LCAweDBELCAweDMyLCAweDMzLCAweDMxLCAweDMxLAorICAgICAgICAweDMwLCAweDM3LCAweDMxLCAweDM5LCAweDM0LCAweDM5LCAweDM1LCAweDMzLCAweDVBLCAweDMwLAorICAgICAgICAweDgxLCAweDk1LCAweDMxLCAweDBCLCAweDMwLCAweDA5LCAweDA2LCAweDAzLCAweDU1LCAweDA0LAorICAgICAgICAweDA2LCAweDEzLCAweDAyLCAweDU1LCAweDUzLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDA4LCAweDBDLCAweDA3LCAweDRELCAweDZGLCAweDZFLCAweDc0LAorICAgICAgICAweDYxLCAweDZFLCAweDYxLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDA0LCAweDA3LCAweDBDLCAweDA3LCAweDQyLCAweDZGLCAweDdBLCAweDY1LCAweDZELCAweDYxLAorICAgICAgICAweDZFLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBBLAorICAgICAgICAweDBDLCAweDA3LCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDUzLCAweDUzLCAweDRDLCAweDMxLAorICAgICAgICAweDE1LCAweDMwLCAweDEzLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBCLCAweDBDLCAweDBDLAorICAgICAgICAweDUzLCAweDc1LCAweDcwLCAweDcwLCAweDZGLCAweDcyLCAweDc0LCAweDVGLCAweDMxLCAweDMwLAorICAgICAgICAweDMyLCAweDM0LCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LAorICAgICAgICAweDAzLCAweDBDLCAweDBGLCAweDc3LCAweDc3LCAweDc3LCAweDJFLCAweDc3LCAweDZGLCAweDZDLAorICAgICAgICAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMxLCAweDFGLAorICAgICAgICAweDMwLCAweDFELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELAorICAgICAgICAweDAxLCAweDA5LCAweDAxLCAweDE2LCAweDEwLCAweDY5LCAweDZFLCAweDY2LCAweDZGLCAweDQwLAorICAgICAgICAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLAorICAgICAgICAweDZELCAweDMwLCAweDgxLCAweDlGLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LAorICAgICAgICAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDAxLCAweDAxLCAweDA1LCAweDAwLCAweDAzLAorICAgICAgICAweDgxLCAweDhELCAweDAwLCAweDMwLCAweDgxLCAweDg5LCAweDAyLCAweDgxLCAweDgxLCAweDAwLAorICAgICAgICAweEFBLCAweDNFLCAweEE1LCAweDlDLCAweEQzLCAweDE3LCAweDQ5LCAweDY1LCAweDQzLCAweERFLAorICAgICAgICAweEQwLCAweEYzLCAweDRCLCAweDFDLCAweERCLCAweDQ5LCAweDBDLCAweEZDLCAweDdBLCAweDY1LAorICAgICAgICAweDA1LCAweDZELCAweERFLCAweDZBLCAweEM0LCAweEU0LCAweDczLCAweDJDLCAweDhBLCAweDk2LAorICAgICAgICAweDgyLCAweDhGLCAweDIzLCAweEE1LCAweDA2LCAweDcxLCAweDFDLCAweDA2LCAweDNFLCAweDJGLAorICAgICAgICAweDkyLCAweDhELCAweDBCLCAweDI5LCAweDM0LCAweDQ1LCAweDU5LCAweEU5LCAweEE5LCAweEJDLAorICAgICAgICAweDYxLCAweEQ3LCAweDI0LCAweDM3LCAweDVELCAweEI1LCAweEM0LCAweDM3LCAweDhELCAweEJBLAorICAgICAgICAweDY3LCAweEIyLCAweEVGLCAweDAzLCAweDI3LCAweEZBLCAweEMxLCAweEI0LCAweENELCAweDZCLAorICAgICAgICAweDAwLCAweDY2LCAweEI0LCAweEQ2LCAweDczLCAweDcwLCAweDFGLCAweDA4LCAweDNBLCAweENDLAorICAgICAgICAweDc3LCAweEFELCAweEU5LCAweEY5LCAweDM0LCAweEQ0LCAweEYzLCAweEEwLCAweDJELCAweEE5LAorICAgICAgICAweEU3LCAweDU4LCAweEE5LCAweEMwLCAweDYxLCAweDg0LCAweEI2LCAweEVDLCAweDNELCAweDBBLAorICAgICAgICAweEFELCAweEZELCAweDVDLCAweDg2LCAweDczLCAweEFBLCAweDZCLCAweDQ3LCAweEQ4LCAweDhCLAorICAgICAgICAweDJFLCAweDU4LCAweDRCLCAweDY5LCAweDEyLCAweDgyLCAweDI2LCAweDU1LCAweEU2LCAweDE0LAorICAgICAgICAweEJGLCAweDU1LCAweDcwLCAweDg4LCAweEZFLCAweEY5LCAweDc1LCAweEUxLCAweDAyLCAweDAzLAorICAgICAgICAweDAxLCAweDAwLCAweDAxLCAweEEzLCAweDgyLCAweDAxLCAweDNGLCAweDMwLCAweDgyLCAweDAxLAorICAgICAgICAweDNCLCAweDMwLCAweDFELCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDBFLCAweDA0LCAweDE2LAorICAgICAgICAweDA0LCAweDE0LCAweEQ5LCAweDNDLCAweDM1LCAweEVBLCAweDc0LCAweDBFLCAweDIzLCAweEJFLAorICAgICAgICAweDlDLCAweEZDLCAweEZBLCAweDI5LCAweDkwLCAweDA5LCAweEMxLCAweEU3LCAweDg0LCAweDE2LAorICAgICAgICAweDlGLCAweDdDLCAweDMwLCAweDgxLCAweENFLCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDIzLAorICAgICAgICAweDA0LCAweDgxLCAweEM2LCAweDMwLCAweDgxLCAweEMzLCAweDgwLCAweDE0LCAweEQzLCAweDIyLAorICAgICAgICAweDhGLCAweDI4LCAweDJDLCAweEUwLCAweDA1LCAweEVFLCAweEQzLCAweEVELCAweEMzLCAweDcxLAorICAgICAgICAweDNELCAweEM5LCAweEIyLCAweDM2LCAweDNBLCAweDFELCAweEJGLCAweEE4LCAweEExLCAweDgxLAorICAgICAgICAweDlGLCAweEE0LCAweDgxLCAweDlDLCAweDMwLCAweDgxLCAweDk5LCAweDMxLCAweDBCLCAweDMwLAorICAgICAgICAweDA5LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLCAweDU1LCAweDUzLAorICAgICAgICAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA4LCAweDBDLAorICAgICAgICAweDA3LCAweDRELCAweDZGLCAweDZFLCAweDc0LCAweDYxLCAweDZFLCAweDYxLCAweDMxLCAweDEwLAorICAgICAgICAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLCAweDA3LCAweDQyLAorICAgICAgICAweDZGLCAweDdBLCAweDY1LCAweDZELCAweDYxLCAweDZFLCAweDMxLCAweDExLCAweDMwLCAweDBGLAorICAgICAgICAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBBLCAweDBDLCAweDA4LCAweDUzLCAweDYxLCAweDc3LAorICAgICAgICAweDc0LCAweDZGLCAweDZGLCAweDc0LCAweDY4LCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDBCLCAweDBDLCAweDBGLCAweDQzLCAweDZGLCAweDZFLCAweDczLAorICAgICAgICAweDc1LCAweDZDLCAweDc0LCAweDY5LCAweDZFLCAweDY3LCAweDVGLCAweDMxLCAweDMwLCAweDMyLAorICAgICAgICAweDM0LCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDAzLAorICAgICAgICAweDBDLCAweDBGLCAweDc3LCAweDc3LCAweDc3LCAweDJFLCAweDc3LCAweDZGLCAweDZDLCAweDY2LAorICAgICAgICAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMxLCAweDFGLCAweDMwLAorICAgICAgICAweDFELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLAorICAgICAgICAweDA5LCAweDAxLCAweDE2LCAweDEwLCAweDY5LCAweDZFLCAweDY2LCAweDZGLCAweDQwLCAweDc3LAorICAgICAgICAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELAorICAgICAgICAweDgyLCAweDA5LCAweDAwLCAweDk3LCAweDFELCAweDMzLCAweDExLCAweEU4LCAweDQwLCAweDZFLAorICAgICAgICAweDk1LCAweDMwLCAweDBDLCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDEzLCAweDA0LCAweDA1LAorICAgICAgICAweDMwLCAweDAzLCAweDAxLCAweDAxLCAweEZGLCAweDMwLCAweDFDLCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDFELCAweDExLCAweDA0LCAweDE1LCAweDMwLCAweDEzLCAweDgyLCAweDBCLCAweDY1LCAweDc4LAorICAgICAgICAweDYxLCAweDZELCAweDcwLCAweDZDLCAweDY1LCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDg3LAorICAgICAgICAweDA0LCAweDdGLCAweDAwLCAweDAwLCAweDAxLCAweDMwLCAweDFELCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDFELCAweDI1LCAweDA0LCAweDE2LCAweDMwLCAweDE0LCAweDA2LCAweDA4LCAweDJCLCAweDA2LAorICAgICAgICAweDAxLCAweDA1LCAweDA1LCAweDA3LCAweDAzLCAweDAxLCAweDA2LCAweDA4LCAweDJCLCAweDA2LAorICAgICAgICAweDAxLCAweDA1LCAweDA1LCAweDA3LCAweDAzLCAweDAyLCAweDMwLCAweDBELCAweDA2LCAweDA5LAorICAgICAgICAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDAxLCAweDBCLCAweDA1LAorICAgICAgICAweDAwLCAweDAzLCAweDgxLCAweDgxLCAweDAwLCAweDI3LCAweDBBLCAweDRFLCAweDA4LCAweDhDLAorICAgICAgICAweEJBLCAweDczLCAweEQwLCAweDA1LCAweEYyLCAweEVBLCAweEY5LCAweDUxLCAweDhDLCAweDdFLAorICAgICAgICAweDI5LCAweDE0LCAweDIzLCAweDhFLCAweDlFLCAweDlBLCAweEZDLCAweDQ2LCAweDZGLCAweDEwLAorICAgICAgICAweDY4LCAweDU5LCAweEQ5LCAweEEwLCAweEVBLCAweDUzLCAweDE5LCAweEJELCAweDI4LCAweDg5LAorICAgICAgICAweEUxLCAweDk3LCAweDFFLCAweDRDLCAweEI4LCAweDFFLCAweEJFLCAweDBGLCAweDRELCAweDlELAorICAgICAgICAweDFELCAweDc2LCAweDU3LCAweDE3LCAweDMxLCAweDk1LCAweEMyLCAweDgwLCAweEJFLCAweDA0LAorICAgICAgICAweEQwLCAweEMyLCAweEU5LCAweDVDLCAweEUwLCAweEY0LCAweDgxLCAweDNGLCAweEM0LCAweEIwLAorICAgICAgICAweEM1LCAweDg2LCAweEFFLCAweDU4LCAweDY4LCAweEI5LCAweEFFLCAweDBGLCAweDg4LCAweEU4LAorICAgICAgICAweDYzLCAweDZGLCAweEI5LCAweDA4LCAweEYxLCAweDFCLCAweDU2LCAweDkwLCAweEZCLCAweDFGLAorICAgICAgICAweDJFLCAweENDLCAweEU1LCAweDY5LCAweDFGLCAweDdDLCAweDAyLCAweDRGLCAweEVELCAweEIwLAorICAgICAgICAweDQ1LCAweDdDLCAweDJELCAweEE4LCAweDU5LCAweDExLCAweEE1LCAweDk1LCAweDUxLCAweEM3LAorICAgICAgICAweDUwLCAweEQ4LCAweDg5LCAweEMyLCAweDkwLCAweDYzLCAweDY4LCAweEE4LCAweDQxLCAweDZGLAorICAgICAgICAweEQwLCAweDM3LCAweDI2LCAweDZGLCAweEM4LCAweDBFLCAweEI1LCAweEEwLCAweDE1LCAweDlELAorICAgICAgICAweEE1LCAweEU2LCAweEQyCit9Oworc3RhdGljIGNvbnN0IGludCBzaXplb2Zfc2VydmVyX2NlcnRfZGVyXzEwMjQgPSBzaXplb2Yoc2VydmVyX2NlcnRfZGVyXzEwMjQpOworCisjZW5kaWYgLyogVVNFX0NFUlRfQlVGRkVSU18xMDI0ICovCisKKyNpZmRlZiBVU0VfQ0VSVF9CVUZGRVJTXzIwNDgKKworLyogLi9jZXJ0cy9jbGllbnQta2V5LmRlciwgMjA0OC1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNsaWVudF9rZXlfZGVyXzIwNDhbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDQsIDB4QTQsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODIsIDB4MDEsCisgICAgICAgIDB4MDEsIDB4MDAsIDB4QzMsIDB4MDMsIDB4RDEsIDB4MkIsIDB4RkUsIDB4MzksIDB4QTQsIDB4MzIsCisgICAgICAgIDB4NDUsIDB4M0IsIDB4NTMsIDB4QzgsIDB4ODQsIDB4MkIsIDB4MkEsIDB4N0MsIDB4NzQsIDB4OUEsCisgICAgICAgIDB4QkQsIDB4QUEsIDB4MkEsIDB4NTIsIDB4MDcsIDB4NDcsIDB4RDYsIDB4QTYsIDB4MzYsIDB4QjIsCisgICAgICAgIDB4MDcsIDB4MzIsIDB4OEUsIDB4RDAsIDB4QkEsIDB4NjksIDB4N0IsIDB4QzYsIDB4QzMsIDB4NDQsCisgICAgICAgIDB4OUUsIDB4RDQsIDB4ODEsIDB4NDgsIDB4RkQsIDB4MkQsIDB4NjgsIDB4QTIsIDB4OEIsIDB4NjcsCisgICAgICAgIDB4QkIsIDB4QTEsIDB4NzUsIDB4QzgsIDB4MzYsIDB4MkMsIDB4NEEsIDB4RDIsIDB4MUIsIDB4RjcsCisgICAgICAgIDB4OEIsIDB4QkEsIDB4Q0YsIDB4MEQsIDB4RjksIDB4RUYsIDB4RUMsIDB4RjEsIDB4ODEsIDB4MUUsCisgICAgICAgIDB4N0IsIDB4OUIsIDB4MDMsIDB4NDcsIDB4OUEsIDB4QkYsIDB4NjUsIDB4Q0MsIDB4N0YsIDB4NjUsCisgICAgICAgIDB4MjQsIDB4NjksIDB4QTYsIDB4RTgsIDB4MTQsIDB4ODksIDB4NUIsIDB4RTQsIDB4MzQsIDB4RjcsCisgICAgICAgIDB4QzUsIDB4QjAsIDB4MTQsIDB4OTMsIDB4RjUsIDB4NjcsIDB4N0IsIDB4M0EsIDB4N0EsIDB4NzgsCisgICAgICAgIDB4RTEsIDB4MDEsIDB4NTYsIDB4NTYsIDB4OTEsIDB4QTYsIDB4MTMsIDB4NDIsIDB4OEQsIDB4RDIsCisgICAgICAgIDB4M0MsIDB4NDAsIDB4OUMsIDB4NEMsIDB4RUYsIDB4RDEsIDB4ODYsIDB4REYsIDB4MzcsIDB4NTEsCisgICAgICAgIDB4MUIsIDB4MEMsIDB4QTEsIDB4M0IsIDB4RjUsIDB4RjEsIDB4QTMsIDB4NEEsIDB4MzUsIDB4RTQsCisgICAgICAgIDB4RTEsIDB4Q0UsIDB4OTYsIDB4REYsIDB4MUIsIDB4N0UsIDB4QkYsIDB4NEUsIDB4OTcsIDB4RDAsCisgICAgICAgIDB4MTAsIDB4RTgsIDB4QTgsIDB4MDgsIDB4MzAsIDB4ODEsIDB4QUYsIDB4MjAsIDB4MEIsIDB4NDMsCisgICAgICAgIDB4MTQsIDB4QzUsIDB4NzQsIDB4NjcsIDB4QjQsIDB4MzIsIDB4ODIsIDB4NkYsIDB4OEQsIDB4ODYsCisgICAgICAgIDB4QzIsIDB4ODgsIDB4NDAsIDB4OTksIDB4MzYsIDB4ODMsIDB4QkEsIDB4MUUsIDB4NDAsIDB4NzIsCisgICAgICAgIDB4MjIsIDB4MTcsIDB4RDcsIDB4NTIsIDB4NjUsIDB4MjQsIDB4NzMsIDB4QjAsIDB4Q0UsIDB4RUYsCisgICAgICAgIDB4MTksIDB4Q0QsIDB4QUUsIDB4RkYsIDB4NzgsIDB4NkMsIDB4N0IsIDB4QzAsIDB4MTIsIDB4MDMsCisgICAgICAgIDB4RDQsIDB4NEUsIDB4NzIsIDB4MEQsIDB4NTAsIDB4NkQsIDB4M0IsIDB4QTMsIDB4M0IsIDB4QTMsCisgICAgICAgIDB4OTksIDB4NUUsIDB4OUQsIDB4QzgsIDB4RDksIDB4MEMsIDB4ODUsIDB4QjMsIDB4RDksIDB4OEEsCisgICAgICAgIDB4RDksIDB4NTQsIDB4MjYsIDB4REIsIDB4NkQsIDB4RkEsIDB4QUMsIDB4QkIsIDB4RkYsIDB4MjUsCisgICAgICAgIDB4NEMsIDB4QzQsIDB4RDEsIDB4NzksIDB4RjQsIDB4NzEsIDB4RDMsIDB4ODYsIDB4NDAsIDB4MTgsCisgICAgICAgIDB4MTMsIDB4QjAsIDB4NjMsIDB4QjUsIDB4NzIsIDB4NEUsIDB4MzAsIDB4QzQsIDB4OTcsIDB4ODQsCisgICAgICAgIDB4ODYsIDB4MkQsIDB4NTYsIDB4MkYsIDB4RDcsIDB4MTUsIDB4RjcsIDB4N0YsIDB4QzAsIDB4QUUsCisgICAgICAgIDB4RjUsIDB4RkMsIDB4NUIsIDB4RTUsIDB4RkIsIDB4QTEsIDB4QkEsIDB4RDMsIDB4MDIsIDB4MDMsCisgICAgICAgIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4QTIsIDB4RTYsCisgICAgICAgIDB4RDgsIDB4NUYsIDB4MTAsIDB4NzEsIDB4NjQsIDB4MDgsIDB4OUUsIDB4MkUsIDB4NkQsIDB4RDEsCisgICAgICAgIDB4NkQsIDB4MUUsIDB4ODUsIDB4RDIsIDB4MEEsIDB4QjEsIDB4OEMsIDB4NDcsIDB4Q0UsIDB4MkMsCisgICAgICAgIDB4NTEsIDB4NkEsIDB4QTAsIDB4MTIsIDB4OUUsIDB4NTMsIDB4REUsIDB4OTEsIDB4NEMsIDB4MUQsCisgICAgICAgIDB4NkQsIDB4RUEsIDB4NTksIDB4N0IsIDB4RjIsIDB4NzcsIDB4QUEsIDB4RDksIDB4QzYsIDB4RDksCisgICAgICAgIDB4OEEsIDB4QUIsIDB4RDgsIDB4RTEsIDB4MTYsIDB4RTQsIDB4NjMsIDB4MjYsIDB4RkYsIDB4QjUsCisgICAgICAgIDB4NkMsIDB4MTMsIDB4NTksIDB4QjgsIDB4RTMsIDB4QTUsIDB4QzgsIDB4NzIsIDB4MTcsIDB4MkUsCisgICAgICAgIDB4MEMsIDB4OUYsIDB4NkYsIDB4RTUsIDB4NTksIDB4M0YsIDB4NzYsIDB4NkYsIDB4NDksIDB4QjEsCisgICAgICAgIDB4MTEsIDB4QzIsIDB4NUEsIDB4MkUsIDB4MTYsIDB4MjksIDB4MEQsIDB4REUsIDB4QjcsIDB4OEUsCisgICAgICAgIDB4REMsIDB4NDAsIDB4RDUsIDB4QTIsIDB4RUUsIDB4RTAsIDB4MUUsIDB4QTEsIDB4RjQsIDB4QkUsCisgICAgICAgIDB4OTcsIDB4REIsIDB4ODYsIDB4NjMsIDB4OTYsIDB4MTQsIDB4Q0QsIDB4OTgsIDB4MDksIDB4NjAsCisgICAgICAgIDB4MkQsIDB4MzAsIDB4NzYsIDB4OUMsIDB4M0MsIDB4Q0QsIDB4RTYsIDB4ODgsIDB4RUUsIDB4NDcsCisgICAgICAgIDB4OTIsIDB4NzksIDB4MEIsIDB4NUEsIDB4MDAsIDB4RTIsIDB4NUUsIDB4NUYsIDB4MTEsIDB4N0MsCisgICAgICAgIDB4N0QsIDB4RjksIDB4MDgsIDB4QjcsIDB4MjAsIDB4MDYsIDB4ODksIDB4MkEsIDB4NUQsIDB4RkQsCisgICAgICAgIDB4MDAsIDB4QUIsIDB4MjIsIDB4RTEsIDB4RjAsIDB4QjMsIDB4QkMsIDB4MjQsIDB4QTksIDB4NUUsCisgICAgICAgIDB4MjYsIDB4MEUsIDB4MUYsIDB4MDAsIDB4MkQsIDB4RkUsIDB4MjEsIDB4OUEsIDB4NTMsIDB4NUIsCisgICAgICAgIDB4NkQsIDB4RDMsIDB4MkIsIDB4QUIsIDB4OTQsIDB4ODIsIDB4NjgsIDB4NDMsIDB4MzYsIDB4RDgsCisgICAgICAgIDB4RjYsIDB4MkYsIDB4QzYsIDB4MjIsIDB4RkMsIDB4QjUsIDB4NDEsIDB4NUQsIDB4MEQsIDB4MzMsCisgICAgICAgIDB4NjAsIDB4RUEsIDB4QTQsIDB4N0QsIDB4N0UsIDB4RTgsIDB4NEIsIDB4NTUsIDB4OTEsIDB4NTYsCisgICAgICAgIDB4RDMsIDB4NUMsIDB4NTcsIDB4OEYsIDB4MUYsIDB4OTQsIDB4MTcsIDB4MkYsIDB4QUEsIDB4REUsCisgICAgICAgIDB4RTksIDB4OUUsIDB4QTgsIDB4RjQsIDB4Q0YsIDB4OEEsIDB4NEMsIDB4OEUsIDB4QTAsIDB4RTQsCisgICAgICAgIDB4NTYsIDB4NzMsIDB4QjIsIDB4Q0YsIDB4NEYsIDB4ODYsIDB4QzUsIDB4NjksIDB4M0MsIDB4RjMsCisgICAgICAgIDB4MjQsIDB4MjAsIDB4OEIsIDB4NUMsIDB4OTYsIDB4MEMsIDB4RkEsIDB4NkIsIDB4MTIsIDB4M0IsCisgICAgICAgIDB4OUEsIDB4NjcsIDB4QzEsIDB4REYsIDB4QzYsIDB4OTYsIDB4QjIsIDB4QTUsIDB4RDUsIDB4OTIsCisgICAgICAgIDB4MEQsIDB4OUIsIDB4MDksIDB4NDIsIDB4NjgsIDB4MjQsIDB4MTAsIDB4NDUsIDB4RDQsIDB4NTAsCisgICAgICAgIDB4RTQsIDB4MTcsIDB4MzksIDB4NDgsIDB4RDAsIDB4MzUsIDB4OEIsIDB4OTQsIDB4NkQsIDB4MTEsCisgICAgICAgIDB4REUsIDB4OEYsIDB4Q0EsIDB4NTksIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4RUEsIDB4MjQsCisgICAgICAgIDB4QTcsIDB4RjksIDB4NjksIDB4MzMsIDB4RTksIDB4NzEsIDB4REMsIDB4NTIsIDB4N0QsIDB4ODgsCisgICAgICAgIDB4MjEsIDB4MjgsIDB4MkYsIDB4NDksIDB4REUsIDB4QkEsIDB4NzIsIDB4MTYsIDB4RTksIDB4Q0MsCisgICAgICAgIDB4NDcsIDB4N0EsIDB4ODgsIDB4MEQsIDB4OTQsIDB4NTcsIDB4ODQsIDB4NTgsIDB4MTYsIDB4M0EsCisgICAgICAgIDB4ODEsIDB4QjAsIDB4M0YsIDB4QTIsIDB4Q0YsIDB4QTYsIDB4NkMsIDB4MUUsIDB4QjAsIDB4MDYsCisgICAgICAgIDB4MjksIDB4MDAsIDB4OEYsIDB4RTcsIDB4NzcsIDB4NzYsIDB4QUMsIDB4REIsIDB4Q0EsIDB4QzcsCisgICAgICAgIDB4RDksIDB4NUUsIDB4OUIsIDB4M0YsIDB4MjYsIDB4OTAsIDB4NTIsIDB4QUUsIDB4RkMsIDB4MzgsCisgICAgICAgIDB4OTAsIDB4MDAsIDB4MTQsIDB4QkIsIDB4QjQsIDB4MEYsIDB4NTgsIDB4OTQsIDB4RTcsIDB4MkYsCisgICAgICAgIDB4NkEsIDB4N0UsIDB4MUMsIDB4NEYsIDB4NDEsIDB4MjEsIDB4RDQsIDB4MzEsIDB4NTksIDB4MUYsCisgICAgICAgIDB4NEUsIDB4OEEsIDB4MUEsIDB4OEQsIDB4QTcsIDB4NTcsIDB4NkMsIDB4MjIsIDB4RDgsIDB4RTUsCisgICAgICAgIDB4RjQsIDB4N0UsIDB4MzIsIDB4QTYsIDB4MTAsIDB4Q0IsIDB4NjQsIDB4QTUsIDB4NTUsIDB4MDMsCisgICAgICAgIDB4ODcsIDB4QTYsIDB4MjcsIDB4MDUsIDB4OEMsIDB4QzMsIDB4RDcsIDB4QjYsIDB4MjcsIDB4QjIsCisgICAgICAgIDB4NEQsIDB4QkEsIDB4MzAsIDB4REEsIDB4NDcsIDB4OEYsIDB4NTQsIDB4RDMsIDB4M0QsIDB4OEIsCisgICAgICAgIDB4ODQsIDB4OEQsIDB4OTQsIDB4OTgsIDB4NTgsIDB4QTUsIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsCisgICAgICAgIDB4RDUsIDB4MzgsIDB4MUIsIDB4QzMsIDB4OEYsIDB4QzUsIDB4OTMsIDB4MEMsIDB4NDcsIDB4MEIsCisgICAgICAgIDB4NkYsIDB4MzUsIDB4OTIsIDB4QzUsIDB4QjAsIDB4OEQsIDB4NDYsIDB4QzgsIDB4OTIsIDB4MTgsCisgICAgICAgIDB4OEYsIDB4RjUsIDB4ODAsIDB4MEEsIDB4RjcsIDB4RUYsIDB4QTEsIDB4RkUsIDB4ODAsIDB4QjksCisgICAgICAgIDB4QjUsIDB4MkEsIDB4QkEsIDB4Q0EsIDB4MTgsIDB4QjAsIDB4NUQsIDB4QTUsIDB4MDcsIDB4RDAsCisgICAgICAgIDB4OTMsIDB4OEQsIDB4RDgsIDB4OUMsIDB4MDQsIDB4MUMsIDB4RDQsIDB4NjIsIDB4OEUsIDB4QTYsCisgICAgICAgIDB4MjYsIDB4ODEsIDB4MDEsIDB4RkYsIDB4Q0UsIDB4OEEsIDB4MkEsIDB4NjMsIDB4MzQsIDB4MzUsCisgICAgICAgIDB4NDAsIDB4QUEsIDB4NkQsIDB4ODAsIDB4REUsIDB4ODksIDB4MjMsIDB4NkEsIDB4NTcsIDB4NEQsCisgICAgICAgIDB4OUUsIDB4NkUsIDB4QUQsIDB4OTMsIDB4NEUsIDB4NTYsIDB4OTAsIDB4MEIsIDB4NkQsIDB4OUQsCisgICAgICAgIDB4NzMsIDB4OEIsIDB4MEMsIDB4QUUsIDB4MjcsIDB4M0QsIDB4REUsIDB4NEUsIDB4RjAsIDB4QUEsCisgICAgICAgIDB4QzUsIDB4NkMsIDB4NzgsIDB4NjcsIDB4NkMsIDB4OTQsIDB4NTIsIDB4OUMsIDB4MzcsIDB4NjcsCisgICAgICAgIDB4NkMsIDB4MkQsIDB4RUYsIDB4QkIsIDB4QUYsIDB4REYsIDB4QTYsIDB4OTAsIDB4M0MsIDB4QzQsCisgICAgICAgIDB4NDcsIDB4Q0YsIDB4OEQsIDB4OTYsIDB4OUUsIDB4OTgsIDB4QTksIDB4QjQsIDB4OUYsIDB4QzUsCisgICAgICAgIDB4QTYsIDB4NTAsIDB4REMsIDB4QjMsIDB4RjAsIDB4RkIsIDB4NzQsIDB4MTcsIDB4MDIsIDB4ODEsCisgICAgICAgIDB4ODAsIDB4NUUsIDB4ODMsIDB4MDksIDB4NjIsIDB4QkQsIDB4QkEsIDB4N0MsIDB4QTIsIDB4QkYsCisgICAgICAgIDB4NDIsIDB4NzQsIDB4RjUsIDB4N0MsIDB4MUMsIDB4RDIsIDB4NjksIDB4QzksIDB4MDQsIDB4MEQsCisgICAgICAgIDB4ODUsIDB4N0UsIDB4M0UsIDB4M0QsIDB4MjQsIDB4MTIsIDB4QzMsIDB4MTgsIDB4N0IsIDB4RjMsCisgICAgICAgIDB4MjksIDB4RjMsIDB4NUYsIDB4MEUsIDB4NzYsIDB4NkMsIDB4NTksIDB4NzUsIDB4RTQsIDB4NDEsCisgICAgICAgIDB4ODQsIDB4NjksIDB4OUQsIDB4MzIsIDB4RjMsIDB4Q0QsIDB4MjIsIDB4QUIsIDB4QjAsIDB4MzUsCisgICAgICAgIDB4QkEsIDB4NEEsIDB4QjIsIDB4M0MsIDB4RTUsIDB4RDksIDB4NTgsIDB4QjYsIDB4NjIsIDB4NEYsCisgICAgICAgIDB4NUQsIDB4REUsIDB4RTUsIDB4OUUsIDB4MEEsIDB4Q0EsIDB4NTMsIDB4QjIsIDB4MkMsIDB4RjcsCisgICAgICAgIDB4OUUsIDB4QjMsIDB4NkIsIDB4MEEsIDB4NUIsIDB4NzksIDB4NjUsIDB4RUMsIDB4NkUsIDB4OTEsCisgICAgICAgIDB4NEUsIDB4OTIsIDB4MjAsIDB4RjYsIDB4RkMsIDB4RkMsIDB4MTYsIDB4RUQsIDB4RDMsIDB4NzYsCisgICAgICAgIDB4MEMsIDB4RTIsIDB4RUMsIDB4N0YsIDB4QjIsIDB4NjksIDB4MTMsIDB4NkIsIDB4NzgsIDB4MEUsCisgICAgICAgIDB4NUEsIDB4NDYsIDB4NjQsIDB4QjQsIDB4NUUsIDB4QjcsIDB4MjUsIDB4QTAsIDB4NUEsIDB4NzUsCisgICAgICAgIDB4M0EsIDB4NEIsIDB4RUYsIDB4QzcsIDB4M0MsIDB4M0UsIDB4RjcsIDB4RkQsIDB4MjYsIDB4QjgsCisgICAgICAgIDB4MjAsIDB4QzQsIDB4OTksIDB4MEEsIDB4OUEsIDB4NzMsIDB4QkUsIDB4QzMsIDB4MTksIDB4MDIsCisgICAgICAgIDB4ODEsIDB4ODEsIDB4MDAsIDB4QkEsIDB4NDQsIDB4OTMsIDB4MTQsIDB4QUMsIDB4MzQsIDB4MTksCisgICAgICAgIDB4M0IsIDB4NUYsIDB4OTEsIDB4NjAsIDB4QUMsIDB4RjcsIDB4QjQsIDB4RDYsIDB4ODEsIDB4MDUsCisgICAgICAgIDB4MzYsIDB4NTEsIDB4NTMsIDB4M0QsIDB4RTgsIDB4NjUsIDB4REMsIDB4QUYsIDB4MkUsIDB4REMsCisgICAgICAgIDB4NjEsIDB4M0UsIDB4QzksIDB4N0QsIDB4QjgsIDB4N0YsIDB4ODcsIDB4RjAsIDB4M0IsIDB4OUIsCisgICAgICAgIDB4MDMsIDB4ODIsIDB4MjksIDB4MzcsIDB4Q0UsIDB4NzIsIDB4NEUsIDB4MTEsIDB4RDUsIDB4QjEsCisgICAgICAgIDB4QzEsIDB4MEMsIDB4MDcsIDB4QTAsIDB4OTksIDB4OTEsIDB4NEEsIDB4OEQsIDB4N0YsIDB4RUMsCisgICAgICAgIDB4NzksIDB4Q0YsIDB4RjEsIDB4MzksIDB4QjUsIDB4RTksIDB4ODUsIDB4RUMsIDB4NjIsIDB4RjcsCisgICAgICAgIDB4REEsIDB4N0QsIDB4QkMsIDB4NjQsIDB4NEQsIDB4MjIsIDB4M0MsIDB4MEUsIDB4RjIsIDB4RDYsCisgICAgICAgIDB4NTEsIDB4RjUsIDB4ODcsIDB4RDgsIDB4OTksIDB4QzAsIDB4MTEsIDB4MjAsIDB4NUQsIDB4MEYsCisgICAgICAgIDB4MjksIDB4RkQsIDB4NUIsIDB4RTIsIDB4QUUsIDB4RDksIDB4MUMsIDB4RDksIDB4MjEsIDB4NTYsCisgICAgICAgIDB4NkQsIDB4RkMsIDB4ODQsIDB4RDAsIDB4NUYsIDB4RUQsIDB4MTAsIDB4MTUsIDB4MUMsIDB4MTgsCisgICAgICAgIDB4MjEsIDB4RTcsIDB4QzQsIDB4M0QsIDB4NEIsIDB4RDcsIDB4RDAsIDB4OUUsIDB4NkEsIDB4OTUsCisgICAgICAgIDB4Q0YsIDB4MjIsIDB4QzksIDB4MDMsIDB4N0IsIDB4OUUsIDB4RTMsIDB4NjAsIDB4MDEsIDB4RkMsCisgICAgICAgIDB4MkYsIDB4MDIsIDB4ODEsIDB4ODAsIDB4MTEsIDB4RDAsIDB4NEIsIDB4Q0YsIDB4MUIsIDB4NjcsCisgICAgICAgIDB4QjksIDB4OUYsIDB4MTAsIDB4NzUsIDB4NDcsIDB4ODYsIDB4NjUsIDB4QUUsIDB4MzEsIDB4QzIsCisgICAgICAgIDB4QzYsIDB4MzAsIDB4QUMsIDB4NTksIDB4MDYsIDB4NTAsIDB4RDksIDB4MEYsIDB4QjUsIDB4NzAsCisgICAgICAgIDB4MDYsIDB4RjcsIDB4RjAsIDB4RDMsIDB4QzgsIDB4NjIsIDB4N0MsIDB4QTgsIDB4REEsIDB4NkUsCisgICAgICAgIDB4RjYsIDB4MjEsIDB4M0YsIDB4RDMsIDB4N0YsIDB4NUYsIDB4RUEsIDB4OEEsIDB4QUIsIDB4M0YsCisgICAgICAgIDB4RDksIDB4MkEsIDB4NUUsIDB4RjMsIDB4NTEsIDB4RDIsIDB4QzIsIDB4MzAsIDB4MzcsIDB4RTMsCisgICAgICAgIDB4MkQsIDB4QTMsIDB4NzUsIDB4MEQsIDB4MUUsIDB4NEQsIDB4MjEsIDB4MzQsIDB4RDUsIDB4NTcsCisgICAgICAgIDB4NzAsIDB4NUMsIDB4ODksIDB4QkYsIDB4NzIsIDB4RUMsIDB4NEEsIDB4NkUsIDB4NjgsIDB4RDUsCisgICAgICAgIDB4Q0QsIDB4MTgsIDB4NzQsIDB4MzMsIDB4NEUsIDB4OEMsIDB4M0EsIDB4NDUsIDB4OEYsIDB4RTYsCisgICAgICAgIDB4OTYsIDB4NDAsIDB4RUIsIDB4NjMsIDB4RjksIDB4MTksIDB4ODYsIDB4M0EsIDB4NTEsIDB4REQsCisgICAgICAgIDB4ODksIDB4NEIsIDB4QjAsIDB4RjMsIDB4RjksIDB4OUYsIDB4NUQsIDB4MjgsIDB4OTUsIDB4MzgsCisgICAgICAgIDB4QkUsIDB4MzUsIDB4QUIsIDB4Q0EsIDB4NUMsIDB4RTcsIDB4OTMsIDB4NTMsIDB4MzQsIDB4QTEsCisgICAgICAgIDB4NDUsIDB4NUQsIDB4MTMsIDB4MzksIDB4NjUsIDB4NDIsIDB4NDYsIDB4QTEsIDB4OUYsIDB4Q0QsCisgICAgICAgIDB4RjUsIDB4QkYKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9jbGllbnRfa2V5X2Rlcl8yMDQ4ID0gc2l6ZW9mKGNsaWVudF9rZXlfZGVyXzIwNDgpOworCisvKiAuL2NlcnRzL2NsaWVudC1rZXlQdWIuZGVyLCAyMDQ4LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2xpZW50X2tleXB1Yl9kZXJfMjA0OFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwMSwgMHgyMiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwKKyAgICAgICAgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNSwgMHgwMCwgMHgwMywKKyAgICAgICAgMHg4MiwgMHgwMSwgMHgwRiwgMHgwMCwgMHgzMCwgMHg4MiwgMHgwMSwgMHgwQSwgMHgwMiwgMHg4MiwKKyAgICAgICAgMHgwMSwgMHgwMSwgMHgwMCwgMHhDMywgMHgwMywgMHhEMSwgMHgyQiwgMHhGRSwgMHgzOSwgMHhBNCwKKyAgICAgICAgMHgzMiwgMHg0NSwgMHgzQiwgMHg1MywgMHhDOCwgMHg4NCwgMHgyQiwgMHgyQSwgMHg3QywgMHg3NCwKKyAgICAgICAgMHg5QSwgMHhCRCwgMHhBQSwgMHgyQSwgMHg1MiwgMHgwNywgMHg0NywgMHhENiwgMHhBNiwgMHgzNiwKKyAgICAgICAgMHhCMiwgMHgwNywgMHgzMiwgMHg4RSwgMHhEMCwgMHhCQSwgMHg2OSwgMHg3QiwgMHhDNiwgMHhDMywKKyAgICAgICAgMHg0NCwgMHg5RSwgMHhENCwgMHg4MSwgMHg0OCwgMHhGRCwgMHgyRCwgMHg2OCwgMHhBMiwgMHg4QiwKKyAgICAgICAgMHg2NywgMHhCQiwgMHhBMSwgMHg3NSwgMHhDOCwgMHgzNiwgMHgyQywgMHg0QSwgMHhEMiwgMHgxQiwKKyAgICAgICAgMHhGNywgMHg4QiwgMHhCQSwgMHhDRiwgMHgwRCwgMHhGOSwgMHhFRiwgMHhFQywgMHhGMSwgMHg4MSwKKyAgICAgICAgMHgxRSwgMHg3QiwgMHg5QiwgMHgwMywgMHg0NywgMHg5QSwgMHhCRiwgMHg2NSwgMHhDQywgMHg3RiwKKyAgICAgICAgMHg2NSwgMHgyNCwgMHg2OSwgMHhBNiwgMHhFOCwgMHgxNCwgMHg4OSwgMHg1QiwgMHhFNCwgMHgzNCwKKyAgICAgICAgMHhGNywgMHhDNSwgMHhCMCwgMHgxNCwgMHg5MywgMHhGNSwgMHg2NywgMHg3QiwgMHgzQSwgMHg3QSwKKyAgICAgICAgMHg3OCwgMHhFMSwgMHgwMSwgMHg1NiwgMHg1NiwgMHg5MSwgMHhBNiwgMHgxMywgMHg0MiwgMHg4RCwKKyAgICAgICAgMHhEMiwgMHgzQywgMHg0MCwgMHg5QywgMHg0QywgMHhFRiwgMHhEMSwgMHg4NiwgMHhERiwgMHgzNywKKyAgICAgICAgMHg1MSwgMHgxQiwgMHgwQywgMHhBMSwgMHgzQiwgMHhGNSwgMHhGMSwgMHhBMywgMHg0QSwgMHgzNSwKKyAgICAgICAgMHhFNCwgMHhFMSwgMHhDRSwgMHg5NiwgMHhERiwgMHgxQiwgMHg3RSwgMHhCRiwgMHg0RSwgMHg5NywKKyAgICAgICAgMHhEMCwgMHgxMCwgMHhFOCwgMHhBOCwgMHgwOCwgMHgzMCwgMHg4MSwgMHhBRiwgMHgyMCwgMHgwQiwKKyAgICAgICAgMHg0MywgMHgxNCwgMHhDNSwgMHg3NCwgMHg2NywgMHhCNCwgMHgzMiwgMHg4MiwgMHg2RiwgMHg4RCwKKyAgICAgICAgMHg4NiwgMHhDMiwgMHg4OCwgMHg0MCwgMHg5OSwgMHgzNiwgMHg4MywgMHhCQSwgMHgxRSwgMHg0MCwKKyAgICAgICAgMHg3MiwgMHgyMiwgMHgxNywgMHhENywgMHg1MiwgMHg2NSwgMHgyNCwgMHg3MywgMHhCMCwgMHhDRSwKKyAgICAgICAgMHhFRiwgMHgxOSwgMHhDRCwgMHhBRSwgMHhGRiwgMHg3OCwgMHg2QywgMHg3QiwgMHhDMCwgMHgxMiwKKyAgICAgICAgMHgwMywgMHhENCwgMHg0RSwgMHg3MiwgMHgwRCwgMHg1MCwgMHg2RCwgMHgzQiwgMHhBMywgMHgzQiwKKyAgICAgICAgMHhBMywgMHg5OSwgMHg1RSwgMHg5RCwgMHhDOCwgMHhEOSwgMHgwQywgMHg4NSwgMHhCMywgMHhEOSwKKyAgICAgICAgMHg4QSwgMHhEOSwgMHg1NCwgMHgyNiwgMHhEQiwgMHg2RCwgMHhGQSwgMHhBQywgMHhCQiwgMHhGRiwKKyAgICAgICAgMHgyNSwgMHg0QywgMHhDNCwgMHhEMSwgMHg3OSwgMHhGNCwgMHg3MSwgMHhEMywgMHg4NiwgMHg0MCwKKyAgICAgICAgMHgxOCwgMHgxMywgMHhCMCwgMHg2MywgMHhCNSwgMHg3MiwgMHg0RSwgMHgzMCwgMHhDNCwgMHg5NywKKyAgICAgICAgMHg4NCwgMHg4NiwgMHgyRCwgMHg1NiwgMHgyRiwgMHhENywgMHgxNSwgMHhGNywgMHg3RiwgMHhDMCwKKyAgICAgICAgMHhBRSwgMHhGNSwgMHhGQywgMHg1QiwgMHhFNSwgMHhGQiwgMHhBMSwgMHhCQSwgMHhEMywgMHgwMiwKKyAgICAgICAgMHgwMywgMHgwMSwgMHgwMCwgMHgwMQorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NsaWVudF9rZXlwdWJfZGVyXzIwNDggPSBzaXplb2YoY2xpZW50X2tleXB1Yl9kZXJfMjA0OCk7CisKKy8qIC4vY2VydHMvY2xpZW50LWNlcnQuZGVyLCAyMDQ4LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2xpZW50X2NlcnRfZGVyXzIwNDhbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDUsIDB4MDcsIDB4MzAsIDB4ODIsIDB4MDMsIDB4RUYsIDB4QTAsIDB4MDMsCisgICAgICAgIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDksIDB4MDAsIDB4RjEsIDB4NUMsIDB4OTksIDB4NDMsCisgICAgICAgIDB4NjYsIDB4M0QsIDB4OTYsIDB4MDQsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsCisgICAgICAgIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MEIsIDB4MDUsIDB4MDAsIDB4MzAsCisgICAgICAgIDB4ODEsIDB4OUUsIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsCisgICAgICAgIDB4NjEsIDB4NkUsIDB4NjEsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsCisgICAgICAgIDB4NkUsIDB4MzEsIDB4MTUsIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsCisgICAgICAgIDB4MEMsIDB4MEMsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NTMsIDB4NTMsIDB4NEMsIDB4NUYsCisgICAgICAgIDB4MzIsIDB4MzAsIDB4MzQsIDB4MzgsIDB4MzEsIDB4MTksIDB4MzAsIDB4MTcsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MTAsIDB4NTAsIDB4NzIsIDB4NkYsIDB4NjcsIDB4NzIsCisgICAgICAgIDB4NjEsIDB4NkQsIDB4NkQsIDB4NjksIDB4NkUsIDB4NjcsIDB4MkQsIDB4MzIsIDB4MzAsIDB4MzQsCisgICAgICAgIDB4MzgsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDMsCisgICAgICAgIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsCisgICAgICAgIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsIDB4MUYsIDB4MzAsCisgICAgICAgIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsCisgICAgICAgIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsIDB4NDAsIDB4NzcsCisgICAgICAgIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsCisgICAgICAgIDB4MzAsIDB4MUUsIDB4MTcsIDB4MEQsIDB4MzIsIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzEsIDB4MzAsCisgICAgICAgIDB4MzEsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsIDB4MzIsIDB4NUEsIDB4MTcsIDB4MEQsIDB4MzIsCisgICAgICAgIDB4MzMsIDB4MzEsIDB4MzEsIDB4MzAsIDB4MzcsIDB4MzEsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsCisgICAgICAgIDB4MzIsIDB4NUEsIDB4MzAsIDB4ODEsIDB4OUUsIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsCisgICAgICAgIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsCisgICAgICAgIDB4NkYsIDB4NkUsIDB4NzQsIDB4NjEsIDB4NkUsIDB4NjEsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsCisgICAgICAgIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsCisgICAgICAgIDB4NjUsIDB4NkQsIDB4NjEsIDB4NkUsIDB4MzEsIDB4MTUsIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MEMsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NTMsCisgICAgICAgIDB4NTMsIDB4NEMsIDB4NUYsIDB4MzIsIDB4MzAsIDB4MzQsIDB4MzgsIDB4MzEsIDB4MTksIDB4MzAsCisgICAgICAgIDB4MTcsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MTAsIDB4NTAsIDB4NzIsCisgICAgICAgIDB4NkYsIDB4NjcsIDB4NzIsIDB4NjEsIDB4NkQsIDB4NkQsIDB4NjksIDB4NkUsIDB4NjcsIDB4MkQsCisgICAgICAgIDB4MzIsIDB4MzAsIDB4MzQsIDB4MzgsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsCisgICAgICAgIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsCisgICAgICAgIDB4MzEsIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsCisgICAgICAgIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsCisgICAgICAgIDB4NkYsIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsCisgICAgICAgIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MjIsIDB4MzAsIDB4MEQsIDB4MDYsCisgICAgICAgIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MDEsCisgICAgICAgIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODIsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MDEsCisgICAgICAgIDB4MEEsIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4QzMsIDB4MDMsIDB4RDEsIDB4MkIsCisgICAgICAgIDB4RkUsIDB4MzksIDB4QTQsIDB4MzIsIDB4NDUsIDB4M0IsIDB4NTMsIDB4QzgsIDB4ODQsIDB4MkIsCisgICAgICAgIDB4MkEsIDB4N0MsIDB4NzQsIDB4OUEsIDB4QkQsIDB4QUEsIDB4MkEsIDB4NTIsIDB4MDcsIDB4NDcsCisgICAgICAgIDB4RDYsIDB4QTYsIDB4MzYsIDB4QjIsIDB4MDcsIDB4MzIsIDB4OEUsIDB4RDAsIDB4QkEsIDB4NjksCisgICAgICAgIDB4N0IsIDB4QzYsIDB4QzMsIDB4NDQsIDB4OUUsIDB4RDQsIDB4ODEsIDB4NDgsIDB4RkQsIDB4MkQsCisgICAgICAgIDB4NjgsIDB4QTIsIDB4OEIsIDB4NjcsIDB4QkIsIDB4QTEsIDB4NzUsIDB4QzgsIDB4MzYsIDB4MkMsCisgICAgICAgIDB4NEEsIDB4RDIsIDB4MUIsIDB4RjcsIDB4OEIsIDB4QkEsIDB4Q0YsIDB4MEQsIDB4RjksIDB4RUYsCisgICAgICAgIDB4RUMsIDB4RjEsIDB4ODEsIDB4MUUsIDB4N0IsIDB4OUIsIDB4MDMsIDB4NDcsIDB4OUEsIDB4QkYsCisgICAgICAgIDB4NjUsIDB4Q0MsIDB4N0YsIDB4NjUsIDB4MjQsIDB4NjksIDB4QTYsIDB4RTgsIDB4MTQsIDB4ODksCisgICAgICAgIDB4NUIsIDB4RTQsIDB4MzQsIDB4RjcsIDB4QzUsIDB4QjAsIDB4MTQsIDB4OTMsIDB4RjUsIDB4NjcsCisgICAgICAgIDB4N0IsIDB4M0EsIDB4N0EsIDB4NzgsIDB4RTEsIDB4MDEsIDB4NTYsIDB4NTYsIDB4OTEsIDB4QTYsCisgICAgICAgIDB4MTMsIDB4NDIsIDB4OEQsIDB4RDIsIDB4M0MsIDB4NDAsIDB4OUMsIDB4NEMsIDB4RUYsIDB4RDEsCisgICAgICAgIDB4ODYsIDB4REYsIDB4MzcsIDB4NTEsIDB4MUIsIDB4MEMsIDB4QTEsIDB4M0IsIDB4RjUsIDB4RjEsCisgICAgICAgIDB4QTMsIDB4NEEsIDB4MzUsIDB4RTQsIDB4RTEsIDB4Q0UsIDB4OTYsIDB4REYsIDB4MUIsIDB4N0UsCisgICAgICAgIDB4QkYsIDB4NEUsIDB4OTcsIDB4RDAsIDB4MTAsIDB4RTgsIDB4QTgsIDB4MDgsIDB4MzAsIDB4ODEsCisgICAgICAgIDB4QUYsIDB4MjAsIDB4MEIsIDB4NDMsIDB4MTQsIDB4QzUsIDB4NzQsIDB4NjcsIDB4QjQsIDB4MzIsCisgICAgICAgIDB4ODIsIDB4NkYsIDB4OEQsIDB4ODYsIDB4QzIsIDB4ODgsIDB4NDAsIDB4OTksIDB4MzYsIDB4ODMsCisgICAgICAgIDB4QkEsIDB4MUUsIDB4NDAsIDB4NzIsIDB4MjIsIDB4MTcsIDB4RDcsIDB4NTIsIDB4NjUsIDB4MjQsCisgICAgICAgIDB4NzMsIDB4QjAsIDB4Q0UsIDB4RUYsIDB4MTksIDB4Q0QsIDB4QUUsIDB4RkYsIDB4NzgsIDB4NkMsCisgICAgICAgIDB4N0IsIDB4QzAsIDB4MTIsIDB4MDMsIDB4RDQsIDB4NEUsIDB4NzIsIDB4MEQsIDB4NTAsIDB4NkQsCisgICAgICAgIDB4M0IsIDB4QTMsIDB4M0IsIDB4QTMsIDB4OTksIDB4NUUsIDB4OUQsIDB4QzgsIDB4RDksIDB4MEMsCisgICAgICAgIDB4ODUsIDB4QjMsIDB4RDksIDB4OEEsIDB4RDksIDB4NTQsIDB4MjYsIDB4REIsIDB4NkQsIDB4RkEsCisgICAgICAgIDB4QUMsIDB4QkIsIDB4RkYsIDB4MjUsIDB4NEMsIDB4QzQsIDB4RDEsIDB4NzksIDB4RjQsIDB4NzEsCisgICAgICAgIDB4RDMsIDB4ODYsIDB4NDAsIDB4MTgsIDB4MTMsIDB4QjAsIDB4NjMsIDB4QjUsIDB4NzIsIDB4NEUsCisgICAgICAgIDB4MzAsIDB4QzQsIDB4OTcsIDB4ODQsIDB4ODYsIDB4MkQsIDB4NTYsIDB4MkYsIDB4RDcsIDB4MTUsCisgICAgICAgIDB4RjcsIDB4N0YsIDB4QzAsIDB4QUUsIDB4RjUsIDB4RkMsIDB4NUIsIDB4RTUsIDB4RkIsIDB4QTEsCisgICAgICAgIDB4QkEsIDB4RDMsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4QTMsIDB4ODIsIDB4MDEsCisgICAgICAgIDB4NDQsIDB4MzAsIDB4ODIsIDB4MDEsIDB4NDAsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MUQsIDB4MEUsIDB4MDQsIDB4MTYsIDB4MDQsIDB4MTQsIDB4MzMsIDB4RDgsIDB4NDUsIDB4NjYsCisgICAgICAgIDB4RDcsIDB4NjgsIDB4ODcsIDB4MTgsIDB4N0UsIDB4NTQsIDB4MEQsIDB4NzAsIDB4MjcsIDB4OTEsCisgICAgICAgIDB4QzcsIDB4MjYsIDB4RDcsIDB4ODUsIDB4NjUsIDB4QzAsIDB4MzAsIDB4ODEsIDB4RDMsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MUQsIDB4MjMsIDB4MDQsIDB4ODEsIDB4Q0IsIDB4MzAsIDB4ODEsIDB4QzgsCisgICAgICAgIDB4ODAsIDB4MTQsIDB4MzMsIDB4RDgsIDB4NDUsIDB4NjYsIDB4RDcsIDB4NjgsIDB4ODcsIDB4MTgsCisgICAgICAgIDB4N0UsIDB4NTQsIDB4MEQsIDB4NzAsIDB4MjcsIDB4OTEsIDB4QzcsIDB4MjYsIDB4RDcsIDB4ODUsCisgICAgICAgIDB4NjUsIDB4QzAsIDB4QTEsIDB4ODEsIDB4QTQsIDB4QTQsIDB4ODEsIDB4QTEsIDB4MzAsIDB4ODEsCisgICAgICAgIDB4OUUsIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsCisgICAgICAgIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsIDB4NjEsCisgICAgICAgIDB4NkUsIDB4NjEsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MDcsIDB4MEMsIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsIDB4NkUsCisgICAgICAgIDB4MzEsIDB4MTUsIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsCisgICAgICAgIDB4MEMsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NTMsIDB4NTMsIDB4NEMsIDB4NUYsIDB4MzIsCisgICAgICAgIDB4MzAsIDB4MzQsIDB4MzgsIDB4MzEsIDB4MTksIDB4MzAsIDB4MTcsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MEIsIDB4MEMsIDB4MTAsIDB4NTAsIDB4NzIsIDB4NkYsIDB4NjcsIDB4NzIsIDB4NjEsCisgICAgICAgIDB4NkQsIDB4NkQsIDB4NjksIDB4NkUsIDB4NjcsIDB4MkQsIDB4MzIsIDB4MzAsIDB4MzQsIDB4MzgsCisgICAgICAgIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDMsIDB4MEMsCisgICAgICAgIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsCisgICAgICAgIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsIDB4MUYsIDB4MzAsIDB4MUQsCisgICAgICAgIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDksCisgICAgICAgIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsIDB4NDAsIDB4NzcsIDB4NkYsCisgICAgICAgIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4ODIsCisgICAgICAgIDB4MDksIDB4MDAsIDB4RjEsIDB4NUMsIDB4OTksIDB4NDMsIDB4NjYsIDB4M0QsIDB4OTYsIDB4MDQsCisgICAgICAgIDB4MzAsIDB4MEMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MzAsCisgICAgICAgIDB4MDMsIDB4MDEsIDB4MDEsIDB4RkYsIDB4MzAsIDB4MUMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsCisgICAgICAgIDB4MTEsIDB4MDQsIDB4MTUsIDB4MzAsIDB4MTMsIDB4ODIsIDB4MEIsIDB4NjUsIDB4NzgsIDB4NjEsCisgICAgICAgIDB4NkQsIDB4NzAsIDB4NkMsIDB4NjUsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4ODcsIDB4MDQsCisgICAgICAgIDB4N0YsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsCisgICAgICAgIDB4MjUsIDB4MDQsIDB4MTYsIDB4MzAsIDB4MTQsIDB4MDYsIDB4MDgsIDB4MkIsIDB4MDYsIDB4MDEsCisgICAgICAgIDB4MDUsIDB4MDUsIDB4MDcsIDB4MDMsIDB4MDEsIDB4MDYsIDB4MDgsIDB4MkIsIDB4MDYsIDB4MDEsCisgICAgICAgIDB4MDUsIDB4MDUsIDB4MDcsIDB4MDMsIDB4MDIsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksIDB4MkEsCisgICAgICAgIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MEIsIDB4MDUsIDB4MDAsCisgICAgICAgIDB4MDMsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4QkEsIDB4MkIsIDB4NDgsIDB4RDEsIDB4QTgsCisgICAgICAgIDB4RTMsIDB4QzIsIDB4ODQsIDB4NDIsIDB4OTYsIDB4QTEsIDB4N0MsIDB4RTUsIDB4RjEsIDB4NDYsCisgICAgICAgIDB4QkEsIDB4NEMsIDB4RjcsIDB4ODcsIDB4NTcsIDB4QzcsIDB4NzgsIDB4QzgsIDB4QzEsIDB4MzIsCisgICAgICAgIDB4QzQsIDB4NjksIDB4RkYsIDB4ODUsIDB4QkIsIDB4NUQsIDB4NkEsIDB4REQsIDB4QzksIDB4ODcsCisgICAgICAgIDB4N0UsIDB4RkUsIDB4QkIsIDB4RjQsIDB4RkQsIDB4MTUsIDB4MEEsIDB4NEMsIDB4OTQsIDB4OTUsCisgICAgICAgIDB4ODAsIDB4MzAsIDB4OTAsIDB4NDUsIDB4MDMsIDB4RjgsIDB4MzMsIDB4ODcsIDB4Q0EsIDB4NUYsCisgICAgICAgIDB4NzQsIDB4MzgsIDB4QTQsIDB4RDAsIDB4NUEsIDB4QzcsIDB4NjUsIDB4MzgsIDB4QzMsIDB4QjAsCisgICAgICAgIDB4RTgsIDB4ODcsIDB4QjEsIDB4NDksIDB4MzIsIDB4QjksIDB4QUMsIDB4RTksIDB4RkIsIDB4RDMsCisgICAgICAgIDB4MDgsIDB4MUQsIDB4QTQsIDB4NTEsIDB4N0IsIDB4RDcsIDB4RDksIDB4NEIsIDB4NzksIDB4MzUsCisgICAgICAgIDB4QTIsIDB4M0EsIDB4MEIsIDB4RTQsIDB4MEMsIDB4QTAsIDB4MDIsIDB4OUMsIDB4QTEsIDB4NjgsCisgICAgICAgIDB4RTEsIDB4NUQsIDB4NkMsIDB4OEUsIDB4MkUsIDB4M0EsIDB4MjQsIDB4REUsIDB4QkIsIDB4RDYsCisgICAgICAgIDB4MUMsIDB4QTcsIDB4QUMsIDB4MkUsIDB4Q0QsIDB4NTcsIDB4NDQsIDB4NDgsIDB4RjYsIDB4NzIsCisgICAgICAgIDB4RTAsIDB4QzcsIDB4NUIsIDB4OTMsIDB4REMsIDB4N0QsIDB4NUIsIDB4NjQsIDB4MEUsIDB4MTcsCisgICAgICAgIDB4ODQsIDB4NjgsIDB4MkMsIDB4OTUsIDB4MUQsIDB4MkMsIDB4ODYsIDB4RDYsIDB4QjAsIDB4NzQsCisgICAgICAgIDB4NjcsIDB4NTEsIDB4NkUsIDB4N0IsIDB4RjQsIDB4RDUsIDB4NjEsIDB4MzgsIDB4NTEsIDB4QjMsCisgICAgICAgIDB4MTgsIDB4RTMsIDB4MTAsIDB4MTYsIDB4NzMsIDB4NEIsIDB4MzYsIDB4OEEsIDB4OEEsIDB4NjIsCisgICAgICAgIDB4MDUsIDB4RjUsIDB4NTYsIDB4OEEsIDB4QkUsIDB4MjEsIDB4RTEsIDB4NzgsIDB4N0QsIDB4QkYsCisgICAgICAgIDB4QUQsIDB4NDUsIDB4RjksIDB4MEIsIDB4RjUsIDB4QUYsIDB4QTAsIDB4NjIsIDB4MDEsIDB4RkQsCisgICAgICAgIDB4M0YsIDB4NDksIDB4REYsIDB4MzksIDB4M0MsIDB4RkYsIDB4NDYsIDB4RTgsIDB4MEEsIDB4RkUsCisgICAgICAgIDB4NUMsIDB4NkIsIDB4QkIsIDB4NDEsIDB4QTUsIDB4NjQsIDB4RjEsIDB4NUMsIDB4OUIsIDB4NTEsCisgICAgICAgIDB4NEMsIDB4QkMsIDB4NkQsIDB4OUYsIDB4QTMsIDB4MjAsIDB4RUQsIDB4RTksIDB4NDgsIDB4RTEsCisgICAgICAgIDB4QTksIDB4QkUsIDB4MDgsIDB4MkQsIDB4ODUsIDB4NDIsIDB4NTksIDB4RDYsIDB4NDMsIDB4N0QsCisgICAgICAgIDB4NDcsIDB4MjIsIDB4QTUsIDB4RkEsIDB4MUYsIDB4QTIsIDB4NTgsIDB4NzYsIDB4MEIsIDB4NzAsCisgICAgICAgIDB4MUMsIDB4MUQsIDB4NTksIDB4MUQsIDB4QUEsIDB4QkUsIDB4NUQsIDB4MkQsIDB4MjUsIDB4N0MsCisgICAgICAgIDB4QjEsIDB4MDYsIDB4QjYsIDB4QzAsIDB4QUEsIDB4MjgsIDB4QUEsIDB4OTMsIDB4N0MsIDB4RDAsCisgICAgICAgIDB4QkQsIDB4NDMsIDB4QUQsIDB4OTEsIDB4NTAsIDB4MUMsIDB4N0IsIDB4NEQsIDB4RjMsIDB4RTQsCisgICAgICAgIDB4RDcKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9jbGllbnRfY2VydF9kZXJfMjA0OCA9IHNpemVvZihjbGllbnRfY2VydF9kZXJfMjA0OCk7CisKKy8qIC4vY2VydHMvZGgyMDQ4LmRlciwgMjA0OC1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRoX2tleV9kZXJfMjA0OFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwMSwgMHgwOCwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhCMCwKKyAgICAgICAgMHhBMSwgMHgwOCwgMHgwNiwgMHg5QywgMHgwOCwgMHgxMywgMHhCQSwgMHg1OSwgMHgwNiwgMHgzQywKKyAgICAgICAgMHhCQywgMHgzMCwgMHhENSwgMHhGNSwgMHgwMCwgMHhDMSwgMHg0RiwgMHg0NCwgMHhBNywgMHhENiwKKyAgICAgICAgMHhFRiwgMHg0QSwgMHhDNiwgMHgyNSwgMHgyNywgMHgxQywgMHhFOCwgMHhEMiwgMHg5NiwgMHg1MywKKyAgICAgICAgMHgwQSwgMHg1QywgMHg5MSwgMHhERCwgMHhBMiwgMHhDMiwgMHg5NCwgMHg4NCwgMHhCRiwgMHg3RCwKKyAgICAgICAgMHhCMiwgMHg0NCwgMHg5RiwgMHg5QiwgMHhEMiwgMHhDMSwgMHg4QSwgMHhDNSwgMHhCRSwgMHg3MiwKKyAgICAgICAgMHg1QywgMHhBNywgMHhFNywgMHg5MSwgMHhFNiwgMHhENCwgMHg5RiwgMHg3MywgMHgwNywgMHg4NSwKKyAgICAgICAgMHg1QiwgMHg2NiwgMHg0OCwgMHhDNywgMHg3MCwgMHhGQSwgMHhCNCwgMHhFRSwgMHgwMiwgMHhDOSwKKyAgICAgICAgMHgzRCwgMHg5QSwgMHg0QSwgMHhEQSwgMHgzRCwgMHhDMSwgMHg0NiwgMHgzRSwgMHgxOSwgMHg2OSwKKyAgICAgICAgMHhEMSwgMHgxNywgMHg0NiwgMHgwNywgMHhBMywgMHg0RCwgMHg5RiwgMHgyQiwgMHg5NiwgMHgxNywKKyAgICAgICAgMHgzOSwgMHg2RCwgMHgzMCwgMHg4RCwgMHgyQSwgMHhGMywgMHg5NCwgMHhEMywgMHg3NSwgMHhDRiwKKyAgICAgICAgMHhBMCwgMHg3NSwgMHhFNiwgMHhGMiwgMHg5MiwgMHgxRiwgMHgxQSwgMHg3MCwgMHgwNSwgMHhBQSwKKyAgICAgICAgMHgwNCwgMHg4MywgMHg1NywgMHgzMCwgMHhGQiwgMHhEQSwgMHg3NiwgMHg5MywgMHgzOCwgMHg1MCwKKyAgICAgICAgMHhFOCwgMHgyNywgMHhGRCwgMHg2MywgMHhFRSwgMHgzQywgMHhFNSwgMHhCNywgMHhDOCwgMHgwOSwKKyAgICAgICAgMHhBRSwgMHg2RiwgMHg1MCwgMHgzNSwgMHg4RSwgMHg4NCwgMHhDRSwgMHg0QSwgMHgwMCwgMHhFOSwKKyAgICAgICAgMHgxMiwgMHg3RSwgMHg1QSwgMHgzMSwgMHhENywgMHgzMywgMHhGQywgMHgyMSwgMHgxMywgMHg3NiwKKyAgICAgICAgMHhDQywgMHgxNiwgMHgzMCwgMHhEQiwgMHgwQywgMHhGQywgMHhDNSwgMHg2MiwgMHhBNywgMHgzNSwKKyAgICAgICAgMHhCOCwgMHhFRiwgMHhCNywgMHhCMCwgMHhBQywgMHhDMCwgMHgzNiwgMHhGNiwgMHhEOSwgMHhDOSwKKyAgICAgICAgMHg0NiwgMHg0OCwgMHhGOSwgMHg0MCwgMHg5MCwgMHgwMCwgMHgyQiwgMHgxQiwgMHhBQSwgMHg2QywKKyAgICAgICAgMHhFMywgMHgxQSwgMHhDMywgMHgwQiwgMHgwMywgMHg5RSwgMHgxQiwgMHhDMiwgMHg0NiwgMHhFNCwKKyAgICAgICAgMHg0OCwgMHg0RSwgMHgyMiwgMHg3MywgMHg2RiwgMHhDMywgMHg1RiwgMHhENCwgMHg5QSwgMHhENiwKKyAgICAgICAgMHgzMCwgMHgwNywgMHg0OCwgMHhENiwgMHg4QywgMHg5MCwgMHhBQiwgMHhENCwgMHhGNiwgMHhGMSwKKyAgICAgICAgMHhFMywgMHg0OCwgMHhEMywgMHg1OCwgMHg0QiwgMHhBNiwgMHhCOSwgMHhDRCwgMHgyOSwgMHhCRiwKKyAgICAgICAgMHg2OCwgMHgxRiwgMHgwOCwgMHg0QiwgMHg2MywgMHg4NiwgMHgyRiwgMHg1QywgMHg2QiwgMHhENiwKKyAgICAgICAgMHhCNiwgMHgwNiwgMHg2NSwgMHhGNywgMHhBNiwgMHhEQywgMHgwMCwgMHg2NywgMHg2QiwgMHhCQiwKKyAgICAgICAgMHhDMywgMHhBOSwgMHg0MSwgMHg4MywgMHhGQiwgMHhDNywgMHhGQSwgMHhDOCwgMHhFMiwgMHgxRSwKKyAgICAgICAgMHg3RSwgMHhBRiwgMHgwMCwgMHgzRiwgMHg5MywgMHgwMiwgMHgwMSwgMHgwMgorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2RoX2tleV9kZXJfMjA0OCA9IHNpemVvZihkaF9rZXlfZGVyXzIwNDgpOworCisvKiAuL2NlcnRzL2RoLXB1YmtleS0yMDQ4LmRlciwgMjA0OC1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRoX3B1Yl9rZXlfZGVyXzIwNDhbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDIsIDB4MjQsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MTcsIDB4MDYsIDB4MDksCisgICAgICAgIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDMsIDB4MDEsIDB4MzAsCisgICAgICAgIDB4ODIsIDB4MDEsIDB4MDgsIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4RDMsIDB4QjIsCisgICAgICAgIDB4OTksIDB4ODQsIDB4NUMsIDB4MEEsIDB4NEMsIDB4RTcsIDB4MzcsIDB4Q0MsIDB4RkMsIDB4MTgsCisgICAgICAgIDB4MzcsIDB4MDEsIDB4MkYsIDB4NUQsIDB4QzEsIDB4NEMsIDB4RjQsIDB4NUMsIDB4QzksIDB4ODIsCisgICAgICAgIDB4OEQsIDB4QjcsIDB4RjMsIDB4RDQsIDB4QTksIDB4OEEsIDB4OUQsIDB4MzQsIDB4RDcsIDB4NzYsCisgICAgICAgIDB4NTcsIDB4RTUsIDB4RTUsIDB4QzMsIDB4RTUsIDB4MTYsIDB4ODUsIDB4Q0EsIDB4NEQsIDB4RDYsCisgICAgICAgIDB4NUIsIDB4QzEsIDB4RjgsIDB4Q0YsIDB4ODksIDB4MjYsIDB4RDAsIDB4MzgsIDB4OEEsIDB4RUUsCisgICAgICAgIDB4RjMsIDB4Q0QsIDB4MzMsIDB4RTUsIDB4NTYsIDB4QkIsIDB4OTAsIDB4ODMsIDB4OUYsIDB4OTcsCisgICAgICAgIDB4OEUsIDB4NzEsIDB4RkIsIDB4MjcsIDB4RTQsIDB4MzUsIDB4MTUsIDB4NDUsIDB4ODYsIDB4MDksCisgICAgICAgIDB4NzEsIDB4QTgsIDB4OUEsIDB4QjksIDB4M0UsIDB4MEYsIDB4NTEsIDB4OEEsIDB4QzIsIDB4NzUsCisgICAgICAgIDB4NTEsIDB4MjMsIDB4MTIsIDB4RkIsIDB4OTQsIDB4MzEsIDB4NDQsIDB4QkYsIDB4Q0UsIDB4RjYsCisgICAgICAgIDB4RUQsIDB4QTYsIDB4M0EsIDB4QjcsIDB4OTIsIDB4Q0UsIDB4MTYsIDB4QTksIDB4MTQsIDB4QjMsCisgICAgICAgIDB4ODgsIDB4QjcsIDB4MTMsIDB4ODEsIDB4NzEsIDB4ODMsIDB4ODgsIDB4Q0QsIDB4QjEsIDB4QTIsCisgICAgICAgIDB4MzcsIDB4RTEsIDB4NTksIDB4NUMsIDB4RDAsIDB4REMsIDB4Q0EsIDB4ODIsIDB4ODcsIDB4RkEsCisgICAgICAgIDB4NDMsIDB4NDQsIDB4REQsIDB4NzgsIDB4M0YsIDB4Q0EsIDB4MjcsIDB4N0UsIDB4RTEsIDB4NkIsCisgICAgICAgIDB4OTMsIDB4MTksIDB4N0MsIDB4RDksIDB4QTYsIDB4OTYsIDB4NDcsIDB4MEQsIDB4MTIsIDB4QzEsCisgICAgICAgIDB4MTMsIDB4RDcsIDB4QjksIDB4MEEsIDB4NDAsIDB4RDksIDB4MUYsIDB4RkYsIDB4QjgsIDB4QjQsCisgICAgICAgIDB4MDAsIDB4QzgsIDB4QUEsIDB4NUUsIDB4RDIsIDB4NjYsIDB4NEEsIDB4MDUsIDB4OEUsIDB4OUUsCisgICAgICAgIDB4RjUsIDB4MzQsIDB4RTcsIDB4RDcsIDB4MDksIDB4N0IsIDB4MTUsIDB4NDksIDB4MUQsIDB4NzYsCisgICAgICAgIDB4MzEsIDB4RDYsIDB4NzEsIDB4RUMsIDB4MTMsIDB4NEUsIDB4ODksIDB4OEMsIDB4MDksIDB4MjIsCisgICAgICAgIDB4RDgsIDB4RTcsIDB4QTMsIDB4RTksIDB4N0QsIDB4MjEsIDB4NTEsIDB4MjYsIDB4NkUsIDB4OUYsCisgICAgICAgIDB4MzAsIDB4OEEsIDB4QkIsIDB4QkMsIDB4NzQsIDB4QzEsIDB4QzMsIDB4MjcsIDB4NkEsIDB4Q0UsCisgICAgICAgIDB4QTMsIDB4MTIsIDB4NjAsIDB4NjgsIDB4MDEsIDB4RDIsIDB4MzQsIDB4MDcsIDB4ODAsIDB4Q0MsCisgICAgICAgIDB4MkQsIDB4N0YsIDB4NUMsIDB4QUUsIDB4QTIsIDB4OTcsIDB4NDAsIDB4QzgsIDB4M0MsIDB4QUMsCisgICAgICAgIDB4REIsIDB4NkYsIDB4RkUsIDB4NkMsIDB4NkQsIDB4RDIsIDB4MDYsIDB4MUMsIDB4NDMsIDB4QTIsCisgICAgICAgIDB4QjIsIDB4MkIsIDB4ODIsIDB4QjcsIDB4RDAsIDB4QUIsIDB4M0YsIDB4MkMsIDB4RTcsIDB4OUMsCisgICAgICAgIDB4MTksIDB4MTYsIDB4RDEsIDB4NUUsIDB4MjYsIDB4ODYsIDB4QzcsIDB4OTIsIDB4RjksIDB4MTYsCisgICAgICAgIDB4MEIsIDB4RkEsIDB4NjYsIDB4ODMsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDMsIDB4ODIsIDB4MDEsCisgICAgICAgIDB4MDUsIDB4MDAsIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDAsIDB4MzQsIDB4NDEsIDB4QkYsIDB4RTksCisgICAgICAgIDB4RjIsIDB4MTEsIDB4QkYsIDB4MDUsIDB4REIsIDB4QjIsIDB4NzIsIDB4QTgsIDB4MjksIDB4Q0MsCisgICAgICAgIDB4QkQsIDB4OTMsIDB4RUIsIDB4MTQsIDB4NUQsIDB4MkMsIDB4NkIsIDB4ODQsIDB4NEUsIDB4OTYsCisgICAgICAgIDB4MTIsIDB4QjMsIDB4MzgsIDB4QkEsIDB4OEEsIDB4NDYsIDB4N0MsIDB4MzYsIDB4Q0IsIDB4RTksCisgICAgICAgIDB4OTcsIDB4NzAsIDB4QzUsIDB4QzMsIDB4ODUsIDB4QjUsIDB4NTEsIDB4QTUsIDB4OEIsIDB4MzksCisgICAgICAgIDB4QTgsIDB4RUEsIDB4NDcsIDB4RDMsIDB4RDUsIDB4MTEsIDB4QzAsIDB4NkQsIDB4RTMsIDB4RTMsCisgICAgICAgIDB4OUUsIDB4MDAsIDB4NEMsIDB4NjUsIDB4NDEsIDB4OUIsIDB4RjYsIDB4RDAsIDB4QUMsIDB4MjYsCisgICAgICAgIDB4ODgsIDB4MDEsIDB4RkMsIDB4M0MsIDB4MjYsIDB4NUYsIDB4NjcsIDB4RjcsIDB4NzcsIDB4RDcsCisgICAgICAgIDB4QUMsIDB4QzUsIDB4Q0EsIDB4QkIsIDB4RDgsIDB4NzAsIDB4NTgsIDB4NDEsIDB4RjUsIDB4RjEsCisgICAgICAgIDB4MjEsIDB4M0IsIDB4MTUsIDB4RDUsIDB4MzEsIDB4RjIsIDB4QzQsIDB4OEUsIDB4MEMsIDB4MzgsCisgICAgICAgIDB4MDEsIDB4OTMsIDB4RDMsIDB4NjQsIDB4NjMsIDB4NTcsIDB4REMsIDB4MzEsIDB4RTUsIDB4RkQsCisgICAgICAgIDB4OUMsIDB4MkIsIDB4QTYsIDB4REUsIDB4MTUsIDB4QjIsIDB4QzgsIDB4OEQsIDB4NjUsIDB4NzEsCisgICAgICAgIDB4MkUsIDB4RUQsIDB4RjksIDB4MUQsIDB4MkQsIDB4QTEsIDB4MTcsIDB4REQsIDB4QTMsIDB4REEsCisgICAgICAgIDB4RjMsIDB4MTAsIDB4ODEsIDB4NDAsIDB4RkEsIDB4NEYsIDB4NDksIDB4QjAsIDB4REEsIDB4MTYsCisgICAgICAgIDB4NjQsIDB4QkUsIDB4NkYsIDB4QzUsIDB4MDUsIDB4Q0UsIDB4QzQsIDB4NEYsIDB4NjcsIDB4ODAsCisgICAgICAgIDB4QjMsIDB4OEEsIDB4ODEsIDB4MTcsIDB4RUIsIDB4RjksIDB4NkYsIDB4NkQsIDB4OUYsIDB4N0YsCisgICAgICAgIDB4REUsIDB4RUUsIDB4MDgsIDB4QjgsIDB4RkEsIDB4ODEsIDB4NjgsIDB4NjYsIDB4RDYsIDB4QzYsCisgICAgICAgIDB4MDgsIDB4NTAsIDB4QUIsIDB4RjAsIDB4MjksIDB4REUsIDB4NkIsIDB4MUQsIDB4NTAsIDB4MTMsCisgICAgICAgIDB4N0YsIDB4NTQsIDB4MzEsIDB4NTMsIDB4ODksIDB4NUYsIDB4NDgsIDB4NzIsIDB4MjQsIDB4RDQsCisgICAgICAgIDB4RDIsIDB4MUQsIDB4MjcsIDB4N0QsIDB4NzQsIDB4Q0YsIDB4NTEsIDB4MTcsIDB4RjAsIDB4QzUsCisgICAgICAgIDB4NkQsIDB4M0MsIDB4M0QsIDB4NkQsIDB4MEEsIDB4OEIsIDB4REIsIDB4RUYsIDB4MDIsIDB4RDgsCisgICAgICAgIDB4QzMsIDB4Q0IsIDB4Q0EsIDB4MjEsIDB4Q0EsIDB4RDYsIDB4OUMsIDB4MTgsIDB4OUUsIDB4OTIsCisgICAgICAgIDB4QkUsIDB4NkUsIDB4RTIsIDB4MTYsIDB4NUUsIDB4ODksIDB4OUIsIDB4QUQsIDB4RDQsIDB4MDQsCisgICAgICAgIDB4NUEsIDB4MjQsIDB4NUEsIDB4M0YsIDB4N0MsIDB4MTIsIDB4QUMsIDB4QjQsIDB4NzEsIDB4NTEsCisgICAgICAgIDB4MjUsIDB4NTgsIDB4NzQsIDB4RTQsIDB4QjIsIDB4RDQsIDB4NDUsIDB4RkMsIDB4NUYsIDB4Q0QsCisgICAgICAgIDB4ODEsIDB4OEYsIDB4RTcsIDB4OTYsIDB4MTgsIDB4RDksIDB4RTAsIDB4OTcsIDB4MDgsIDB4NDUsCisgICAgICAgIDB4MzYsIDB4QzMKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9kaF9wdWJfa2V5X2Rlcl8yMDQ4ID0gc2l6ZW9mKGRoX3B1Yl9rZXlfZGVyXzIwNDgpOworCisvKiAuL2NlcnRzL2RzYS1wdWJrZXktMjA0OC5kZXIsIDIwNDgtYml0ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfcHViX2tleV9kZXJfMjA0OFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwMywgMHg0NywgMHgzMCwgMHg4MiwgMHgwMiwgMHgzOSwgMHgwNiwgMHgwNywKKyAgICAgICAgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzOCwgMHgwNCwgMHgwMSwgMHgzMCwgMHg4MiwgMHgwMiwKKyAgICAgICAgMHgyQywgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhFQiwgMHg3RSwgMHgyQywgMHg5NywKKyAgICAgICAgMHgzNiwgMHg2NywgMHgwRSwgMHg3MywgMHg5QSwgMHhBQywgMHhGRCwgMHhCMSwgMHgxOSwgMHgwMywKKyAgICAgICAgMHg1MiwgMHg2MSwgMHgyNSwgMHgxMiwgMHhCMiwgMHgzNywgMHgzRCwgMHhFQSwgMHhDQSwgMHg4MCwKKyAgICAgICAgMHgwNywgMHg1RCwgMHgyRCwgMHgzMywgMHhBMiwgMHg0RSwgMHg2QiwgMHhCNywgMHg2MiwgMHhGOCwKKyAgICAgICAgMHg4NywgMHg0RCwgMHg0QiwgMHgyMCwgMHhEQSwgMHhFQSwgMHg2QSwgMHg5NiwgMHgxMywgMHhCNywKKyAgICAgICAgMHhCOSwgMHg0OSwgMHhDMCwgMHg4NiwgMHgxNCwgMHg3MSwgMHhDRCwgMHg4QywgMHg2MCwgMHg2MSwKKyAgICAgICAgMHg5NCwgMHg3MSwgMHg4OSwgMHg5NSwgMHgxQSwgMHgwRiwgMHgzOCwgMHhDQywgMHg5QywgMHgxRiwKKyAgICAgICAgMHgyMCwgMHhFNSwgMHhEMCwgMHg2NSwgMHg3NSwgMHhDRCwgMHhGRSwgMHgyNCwgMHgyOSwgMHhFNiwKKyAgICAgICAgMHg2MCwgMHg5NywgMHg3NCwgMHhFQywgMHg0QywgMHg0MiwgMHhFOCwgMHhCQSwgMHhFOSwgMHhDMiwKKyAgICAgICAgMHhGNywgMHhDQiwgMHg5QiwgMHhFQSwgMHg1NSwgMHhEOCwgMHg0MCwgMHg1MCwgMHgyRSwgMHhDRiwKKyAgICAgICAgMHhDRCwgMHg0MSwgMHgwMSwgMHhBOSwgMHhFNSwgMHgyOSwgMHhDQSwgMHhDMywgMHgzNiwgMHg1OCwKKyAgICAgICAgMHg3RSwgMHgyRSwgMHgxMSwgMHg5NiwgMHg4NywgMHhDNiwgMHhGQSwgMHhFMSwgMHgyNywgMHg1MywKKyAgICAgICAgMHgzRCwgMHg2MCwgMHg5MywgMHg3QiwgMHhBRCwgMHhFRSwgMHhFNywgMHhENCwgMHhEQywgMHhENiwKKyAgICAgICAgMHgwMywgMHgxNiwgMHg5MiwgMHhENCwgMHg1MSwgMHgwQywgMHhGRCwgMHhBOSwgMHgwMSwgMHgzRSwKKyAgICAgICAgMHg2RSwgMHgyNywgMHg2NywgMHg2RSwgMHg5RiwgMHgyOSwgMHg2MywgMHhGRCwgMHg1MSwgMHg4MiwKKyAgICAgICAgMHg3OSwgMHg4MywgMHgyQiwgMHhDQiwgMHgxMiwgMHhDRCwgMHg1MCwgMHg5MiwgMHhBQywgMHgxNiwKKyAgICAgICAgMHhDOSwgMHhFQSwgMHg5RSwgMHg2OCwgMHg5RSwgMHg0QiwgMHhFMSwgMHg2MywgMHhCNCwgMHg4MCwKKyAgICAgICAgMHhFNCwgMHhERiwgMHg3NSwgMHhCQywgMHgyNywgMHhEMSwgMHg3NiwgMHgwMywgMHg0OCwgMHg5OCwKKyAgICAgICAgMHgxRCwgMHhFMywgMHgyOSwgMHg4QSwgMHg5OSwgMHg1OSwgMHhGMywgMHg3NSwgMHg1QiwgMHhEOSwKKyAgICAgICAgMHhBQywgMHg1OSwgMHgxMSwgMHg1MiwgMHgyRiwgMHhFMCwgMHg5MSwgMHg1NSwgMHhCMCwgMHhGMiwKKyAgICAgICAgMHg1RiwgMHgwQSwgMHhGOCwgMHhEMiwgMHg3QSwgMHhERCwgMHg4RCwgMHhFOSwgMHg5MiwgMHhFMiwKKyAgICAgICAgMHhGMywgMHhGNywgMHg0QSwgMHhCMSwgMHg1MCwgMHhENywgMHhGRSwgMHgwNywgMHg4RCwgMHgyNywKKyAgICAgICAgMHg3RCwgMHgwOCwgMHg2RiwgMHgwOCwgMHg3RSwgMHgyNSwgMHgxOSwgMHgwRCwgMHhERSwgMHgxMSwKKyAgICAgICAgMHhEMSwgMHg2MywgMHgzMSwgMHg4NCwgMHgxOCwgMHgyNSwgMHhCRSwgMHg3RCwgMHg2NCwgMHg3NywKKyAgICAgICAgMHhEQiwgMHg0QSwgMHgyMCwgMHhDNSwgMHg1MSwgMHg3NSwgMHhEOCwgMHhCMSwgMHgxQiwgMHhERiwKKyAgICAgICAgMHg5MSwgMHg3RiwgMHhGQywgMHg3NCwgMHhCQSwgMHg5RCwgMHhEMSwgMHhGQSwgMHg4RCwgMHhCRCwKKyAgICAgICAgMHg1OSwgMHhGRCwgMHgwMiwgMHgyMSwgMHgwMCwgMHhGQSwgMHhGNywgMHg2MiwgMHg5QSwgMHg2MiwKKyAgICAgICAgMHgxOSwgMHg2NCwgMHg2RCwgMHhDMSwgMHhGMywgMHhDMCwgMHg5QiwgMHhBQywgMHg5MCwgMHgyOCwKKyAgICAgICAgMHhFQSwgMHhBMSwgMHg4MywgMHhGOSwgMHhDOCwgMHhFRCwgMHgzMSwgMHhFRSwgMHgzMywgMHgxRCwKKyAgICAgICAgMHgzNSwgMHgyMiwgMHgwMCwgMHgyQiwgMHgxMiwgMHg4NCwgMHhGRiwgMHgwMiwgMHg4MiwgMHgwMSwKKyAgICAgICAgMHgwMCwgMHg3MywgMHhDOSwgMHhFRCwgMHgxRiwgMHhCQywgMHhDNywgMHhDNCwgMHhFRiwgMHg0NiwKKyAgICAgICAgMHgwMywgMHhEMSwgMHg3MiwgMHhDMywgMHhFNSwgMHgyOSwgMHhCMCwgMHg5QSwgMHg5NSwgMHgxMywKKyAgICAgICAgMHg1QiwgMHg0RSwgMHg1OSwgMHg1NywgMHgwRiwgMHg4MCwgMHhFQiwgMHg3NCwgMHg4NywgMHgxMSwKKyAgICAgICAgMHgxQiwgMHhDOCwgMHgxMSwgMHhCNiwgMHg5NywgMHg0QywgMHg0OCwgMHg1MCwgMHgzQSwgMHhCOCwKKyAgICAgICAgMHgyQywgMHgyOCwgMHhGMywgMHhCMCwgMHg5QywgMHg3QywgMHgzRCwgMHhGRiwgMHg4QiwgMHg0MywKKyAgICAgICAgMHg0MywgMHgzMCwgMHg4NSwgMHg1RiwgMHg5NywgMHhEMiwgMHg2OCwgMHg4NSwgMHgzNSwgMHgyRSwKKyAgICAgICAgMHhENCwgMHg2MSwgMHhGNiwgMHgzRSwgMHgwNSwgMHhFQywgMHhDRCwgMHg2MCwgMHgxMywgMHhFMiwKKyAgICAgICAgMHgxNiwgMHgwMiwgMHg3QywgMHg4QiwgMHgyMSwgMHhDRSwgMHgzNiwgMHg3MSwgMHhDNCwgMHhFRCwKKyAgICAgICAgMHgwQiwgMHg0NywgMHg3NiwgMHg4MywgMHgyMywgMHgyRiwgMHg5OCwgMHhBNCwgMHg4NCwgMHg5OCwKKyAgICAgICAgMHg5QywgMHhGQiwgMHhEMCwgMHhBOCwgMHhEOSwgMHhCOSwgMHhFMywgMHhENywgMHgzMiwgMHhEOSwKKyAgICAgICAgMHhCNSwgMHg5RSwgMHg4MiwgMHg5MywgMHhEMCwgMHg1NSwgMHg3NCwgMHg1RiwgMHhEQSwgMHg4NywKKyAgICAgICAgMHg5MSwgMHg5MCwgMHgwRiwgMHg4NSwgMHg3NCwgMHgxQSwgMHgzMiwgMHg3NiwgMHg0RiwgMHhDQywKKyAgICAgICAgMHgyQSwgMHgxOCwgMHgxMSwgMHg1QiwgMHhCNCwgMHg3OCwgMHg5MywgMHhCNiwgMHhFNSwgMHhGMCwKKyAgICAgICAgMHhDNiwgMHg3MSwgMHhFOCwgMHhENywgMHgzMSwgMHgxOSwgMHg5MSwgMHgyNywgMHg3MSwgMHg1QSwKKyAgICAgICAgMHgwMiwgMHgxQSwgMHgxQSwgMHgzQSwgMHg1NSwgMHg5NSwgMHhGRiwgMHhGOCwgMHhFRCwgMHhEMywKKyAgICAgICAgMHhFMSwgMHhBRSwgMHg4QSwgMHgxRCwgMHhGRiwgMHg1MywgMHg2MywgMHg3OSwgMHgxMywgMHhBMSwKKyAgICAgICAgMHhBRCwgMHgwQSwgMHg2OCwgMHg2NywgMHg0MywgMHhCMiwgMHg1QiwgMHhENSwgMHgzNiwgMHhENCwKKyAgICAgICAgMHg4NCwgMHhEMCwgMHhDRCwgMHgzNCwgMHg4MiwgMHg4NCwgMHhBNCwgMHg4OSwgMHhBRSwgMHhBMSwKKyAgICAgICAgMHg2NiwgMHg1NywgMHg4OSwgMHg2RiwgMHhEQywgMHgwQywgMHgzQiwgMHg0OCwgMHgxNCwgMHg3QywKKyAgICAgICAgMHhDQywgMHg2MywgMHg3QywgMHg4MywgMHg5MywgMHg1NSwgMHg3RCwgMHhCNCwgMHhGMywgMHgzNCwKKyAgICAgICAgMHg2NiwgMHg3MiwgMHg4NSwgMHhGNSwgMHg4RCwgMHhFRiwgMHg5MCwgMHgxQSwgMHg2NiwgMHhGOCwKKyAgICAgICAgMHgzQiwgMHhDNiwgMHhBNCwgMHg1OSwgMHhCOCwgMHgyNSwgMHg0RSwgMHg1RCwgMHg4NCwgMHhFRCwKKyAgICAgICAgMHg3QywgMHgxQywgMHhERCwgMHgzNSwgMHhBNiwgMHhCQSwgMHhFRCwgMHgzQiwgMHhENiwgMHg0OSwKKyAgICAgICAgMHhFNiwgMHg1QSwgMHhEMSwgMHhGOCwgMHhFQSwgMHg5NiwgMHg3NSwgMHg5MiwgMHhDRiwgMHgwNSwKKyAgICAgICAgMHg1MiwgMHgwNSwgMHgzRCwgMHg3OCwgMHgwOSwgMHhDRiwgMHhDRCwgMHhFMiwgMHgxQSwgMHg5OSwKKyAgICAgICAgMHhFQiwgMHg1RSwgMHhGQSwgMHgyNywgMHg3MywgMHg4OSwgMHgxNSwgMHgwMywgMHg4MiwgMHgwMSwKKyAgICAgICAgMHgwNiwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhDMiwgMHgzNSwgMHgyRCwKKyAgICAgICAgMHhFQywgMHg4MywgMHg4MywgMHg2QywgMHg3MywgMHgxMywgMHg5RSwgMHg1MiwgMHg3QywgMHg3NCwKKyAgICAgICAgMHhDOCwgMHg3QiwgMHhFRSwgMHhERiwgMHgzOSwgMHhDMCwgMHgzMywgMHhDRCwgMHg5RiwgMHhCMiwKKyAgICAgICAgMHgyMiwgMHg2NCwgMHg5RiwgMHhDNSwgMHhFOSwgMHhGRiwgMHhGNywgMHgwOSwgMHg0NywgMHg3OSwKKyAgICAgICAgMHgxMywgMHg5NiwgMHg3NywgMHgyNSwgMHhGMywgMHg1RCwgMHhBQSwgMHg5RiwgMHg5NywgMHg2NywKKyAgICAgICAgMHg2MiwgMHhCQywgMHg5NCwgMHgxRCwgMHhBRSwgMHgyMiwgMHg3RSwgMHgwOCwgMHgwMywgMHhCRCwKKyAgICAgICAgMHg3RSwgMHgzNCwgMHgyOSwgMHhDQiwgMHg2MiwgMHhCNywgMHg4MiwgMHgxRCwgMHhFMiwgMHhGQSwKKyAgICAgICAgMHgwNSwgMHhDNiwgMHhDMSwgMHg2OCwgMHhFNywgMHgwMSwgMHgyNywgMHg2MywgMHg1MSwgMHgzRSwKKyAgICAgICAgMHgzNywgMHg1OSwgMHg0MiwgMHg5MiwgMHg0RiwgMHg5OSwgMHg2MCwgMHhGRCwgMHg2MywgMHg5NCwKKyAgICAgICAgMHhCNywgMHhEMCwgMHhFRSwgMHhDMSwgMHhBMCwgMHhBNSwgMHgwMSwgMHg3NCwgMHg0RCwgMHgwRSwKKyAgICAgICAgMHgxNCwgMHhCMiwgMHhFMiwgMHgyQywgMHhFNywgMHg4MiwgMHgwQSwgMHgyMywgMHhDNywgMHgzOSwKKyAgICAgICAgMHg0NSwgMHg0MCwgMHhFOSwgMHhFOSwgMHg5RCwgMHgzNiwgMHhFMCwgMHg1MiwgMHgwMywgMHg5OSwKKyAgICAgICAgMHhEQywgMHg4NywgMHg3RCwgMHg2QSwgMHg5MCwgMHhFNCwgMHhERCwgMHhBOSwgMHhDMiwgMHg1NywKKyAgICAgICAgMHg5MCwgMHhENiwgMHhDQSwgMHhCNCwgMHgxNSwgMHg4MCwgMHhFRSwgMHgwMCwgMHhDQiwgMHgyQSwKKyAgICAgICAgMHhDOSwgMHg1OSwgMHg0QywgMHhBNywgMHg3RCwgMHgzMywgMHgwQSwgMHgzRSwgMHg0QSwgMHg3NiwKKyAgICAgICAgMHhFQSwgMHgyNywgMHg4OSwgMHhEOCwgMHgxQSwgMHhFQSwgMHg3RSwgMHhEQiwgMHgxMywgMHg5MiwKKyAgICAgICAgMHg5MywgMHg2QSwgMHg1NywgMHg5QiwgMHgzMywgMHhGRCwgMHhDRSwgMHgwOSwgMHgwQSwgMHhCMCwKKyAgICAgICAgMHgzNSwgMHgyNCwgMHhFNCwgMHg3RCwgMHhEOCwgMHg5RCwgMHhGRiwgMHg4MCwgMHg2NSwgMHgwRiwKKyAgICAgICAgMHg2MSwgMHhGNywgMHhGNywgMHhFRCwgMHg4QiwgMHhENSwgMHg4RiwgMHhCRiwgMHhCMywgMHgyMiwKKyAgICAgICAgMHgyMCwgMHgzOSwgMHg4OSwgMHg4MywgMHhCOCwgMHg4MywgMHg5NiwgMHgzMiwgMHgyMCwgMHhBRCwKKyAgICAgICAgMHhBMSwgMHg1RCwgMHg3MywgMHg4RiwgMHhFMywgMHgyNywgMHhEOSwgMHg1RCwgMHhEQiwgMHgwMCwKKyAgICAgICAgMHgyNywgMHhGMiwgMHhCRSwgMHg4OSwgMHgxMywgMHhFMiwgMHg5NywgMHg3OSwgMHgxMCwgMHgyNywKKyAgICAgICAgMHgzRCwgMHhEOCwgMHgwNSwgMHg5NiwgMHg1OSwgMHg2RSwgMHhBMCwgMHhDMSwgMHg2RiwgMHg5OSwKKyAgICAgICAgMHg0RiwgMHgyOCwgMHhGQSwgMHhBNiwgMHgwQiwgMHg1QywgMHgxNiwgMHhFRSwgMHhCMCwgMHg5OCwKKyAgICAgICAgMHg4QSwgMHgwNiwgMHg0QSwgMHhCMCwgMHgwMiwgMHgyQSwgMHg2RCwgMHhDQywgMHhFMiwgMHhDOCwKKyAgICAgICAgMHgxMSwgMHhGOSwgMHgxQiwgMHhGMSwgMHgzQywgMHg2OCwgMHhERiwgMHhDMiwgMHhGNCwgMHg5OCwKKyAgICAgICAgMHg1RiwgMHg2QywgMHhDOAorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2RzYV9wdWJfa2V5X2Rlcl8yMDQ4ID0gc2l6ZW9mKGRzYV9wdWJfa2V5X2Rlcl8yMDQ4KTsKKworLyogLi9jZXJ0cy9kc2EyMDQ4LmRlciwgMjA0OC1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV9rZXlfZGVyXzIwNDhbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDMsIDB4M0YsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODIsIDB4MDEsCisgICAgICAgIDB4MDEsIDB4MDAsIDB4Q0MsIDB4OEUsIDB4QzksIDB4QTAsIDB4RDUsIDB4OUEsIDB4MjcsIDB4MUMsCisgICAgICAgIDB4REEsIDB4NTIsIDB4REYsIDB4QzcsIDB4QzAsIDB4RTYsIDB4MDYsIDB4QTQsIDB4M0UsIDB4OEEsCisgICAgICAgIDB4NjYsIDB4NDksIDB4RDAsIDB4NTksIDB4MzMsIDB4NTEsIDB4NjksIDB4QzQsIDB4OUMsIDB4NUUsCisgICAgICAgIDB4NjQsIDB4ODUsIDB4QzcsIDB4RjEsIDB4QUIsIDB4RDUsIDB4RDksIDB4NjIsIDB4QUMsIDB4RkQsCisgICAgICAgIDB4QTEsIDB4RTAsIDB4MUIsIDB4NTcsIDB4RkYsIDB4OTYsIDB4RUYsIDB4MEMsIDB4OUYsIDB4QzgsCisgICAgICAgIDB4NDQsIDB4ODcsIDB4RUIsIDB4NUMsIDB4OTEsIDB4RDAsIDB4NDYsIDB4NDIsIDB4MDksIDB4NTAsCisgICAgICAgIDB4NkEsIDB4MjMsIDB4Q0IsIDB4ODksIDB4NkYsIDB4NTUsIDB4RTksIDB4NkEsIDB4MTEsIDB4QTksCisgICAgICAgIDB4QTgsIDB4MzIsIDB4QUIsIDB4MzMsIDB4MEQsIDB4NTEsIDB4QjUsIDB4NzksIDB4NTEsIDB4QjQsCisgICAgICAgIDB4QUIsIDB4QTIsIDB4MjUsIDB4MTEsIDB4OEQsIDB4RTUsIDB4MjQsIDB4QkUsIDB4RDgsIDB4RjEsCisgICAgICAgIDB4OUQsIDB4NEUsIDB4MTIsIDB4NkYsIDB4QUMsIDB4NDQsIDB4NTQsIDB4ODAsIDB4QTksIDB4QjQsCisgICAgICAgIDB4ODEsIDB4NjgsIDB4NEUsIDB4NDQsIDB4MEUsIDB4QjgsIDB4MzksIDB4RjMsIDB4QkUsIDB4ODMsCisgICAgICAgIDB4MDgsIDB4NzQsIDB4QTIsIDB4QzYsIDB4N0EsIDB4RDcsIDB4NkEsIDB4N0QsIDB4MEEsIDB4ODgsCisgICAgICAgIDB4NTcsIDB4ODMsIDB4NDgsIDB4REMsIDB4Q0YsIDB4NUUsIDB4NkYsIDB4RUUsIDB4NjgsIDB4MEMsCisgICAgICAgIDB4RjcsIDB4RkYsIDB4MDMsIDB4MDQsIDB4OTAsIDB4QUEsIDB4RjcsIDB4MDcsIDB4OTgsIDB4RjgsCisgICAgICAgIDB4NjcsIDB4NUEsIDB4ODMsIDB4MjMsIDB4NjYsIDB4NDcsIDB4NjAsIDB4QzMsIDB4NDMsIDB4NkUsCisgICAgICAgIDB4MDMsIDB4OTEsIDB4QUMsIDB4MjgsIDB4NjYsIDB4Q0IsIDB4RjAsIDB4RDMsIDB4MDUsIDB4QzgsCisgICAgICAgIDB4MDksIDB4OTcsIDB4QjUsIDB4QUUsIDB4MDEsIDB4NUUsIDB4ODAsIDB4M0IsIDB4OUQsIDB4NEYsCisgICAgICAgIDB4REUsIDB4M0UsIDB4OTQsIDB4RkUsIDB4Q0IsIDB4ODIsIDB4QjAsIDB4QjEsIDB4RkMsIDB4OTEsCisgICAgICAgIDB4OEIsIDB4MUQsIDB4OEEsIDB4RUUsIDB4QzYsIDB4MDYsIDB4MUYsIDB4MzcsIDB4OTEsIDB4NDgsCisgICAgICAgIDB4RDIsIDB4RjgsIDB4NkMsIDB4NUQsIDB4NjAsIDB4MTMsIDB4ODMsIDB4QTcsIDB4ODEsIDB4QUMsCisgICAgICAgIDB4Q0EsIDB4OEQsIDB4RDAsIDB4NkEsIDB4MDQsIDB4MEEsIDB4RUEsIDB4M0UsIDB4MjIsIDB4NEUsCisgICAgICAgIDB4MTMsIDB4RjEsIDB4MEQsIDB4QkIsIDB4NjAsIDB4NkIsIDB4Q0QsIDB4QkMsIDB4NUMsIDB4ODcsCisgICAgICAgIDB4QTMsIDB4NjcsIDB4MkIsIDB4NDIsIDB4QTEsIDB4OUYsIDB4Q0QsIDB4MzksIDB4NTgsIDB4QkUsCisgICAgICAgIDB4NTUsIDB4QjEsIDB4OTMsIDB4ODQsIDB4Q0UsIDB4QjIsIDB4MTAsIDB4NEUsIDB4RTQsIDB4QzMsCisgICAgICAgIDB4OUYsIDB4QjIsIDB4NTMsIDB4NjEsIDB4MDEsIDB4MjksIDB4QUEsIDB4OTYsIDB4Q0IsIDB4MjAsCisgICAgICAgIDB4NjAsIDB4NDIsIDB4MUQsIDB4QkEsIDB4NzUsIDB4NEIsIDB4NjMsIDB4QzEsIDB4MDIsIDB4MTUsCisgICAgICAgIDB4MDAsIDB4RTcsIDB4QTUsIDB4MzksIDB4RDQsIDB4NkEsIDB4MzcsIDB4NUUsIDB4OTUsIDB4MDYsCisgICAgICAgIDB4MzksIDB4MDcsIDB4NzcsIDB4MEEsIDB4RUIsIDB4QTAsIDB4MDMsIDB4RUIsIDB4NzgsIDB4ODIsCisgICAgICAgIDB4OUIsIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4OUEsIDB4RDQsIDB4NEMsIDB4NzEsCisgICAgICAgIDB4MkYsIDB4RUMsIDB4RkEsIDB4MzIsIDB4QjIsIDB4ODAsIDB4N0UsIDB4NjEsIDB4NEEsIDB4NkIsCisgICAgICAgIDB4NUYsIDB4MTgsIDB4NzYsIDB4NDMsIDB4QzMsIDB4NjksIDB4QkEsIDB4NDEsIDB4QzcsIDB4QTcsCisgICAgICAgIDB4MUQsIDB4NzksIDB4MDEsIDB4RUMsIDB4QUYsIDB4MzQsIDB4ODcsIDB4NjcsIDB4NEYsIDB4MjksCisgICAgICAgIDB4ODAsIDB4QTgsIDB4M0IsIDB4ODcsIDB4RjYsIDB4RTgsIDB4QTEsIDB4RTgsIDB4Q0QsIDB4MUIsCisgICAgICAgIDB4MUMsIDB4ODYsIDB4MzgsIDB4RjYsIDB4RDEsIDB4MEMsIDB4NDYsIDB4MkUsIDB4QzgsIDB4RTAsCisgICAgICAgIDB4QzksIDB4MzAsIDB4MjYsIDB4RDUsIDB4MkMsIDB4N0YsIDB4QzEsIDB4MDgsIDB4QkYsIDB4Q0MsCisgICAgICAgIDB4NUEsIDB4ODIsIDB4OEUsIDB4RDQsIDB4RDQsIDB4NDksIDB4QUEsIDB4QTIsIDB4RkEsIDB4RTYsCisgICAgICAgIDB4QzEsIDB4OUQsIDB4RjAsIDB4RDksIDB4OTYsIDB4QjAsIDB4RkYsIDB4MEMsIDB4NUIsIDB4MzMsCisgICAgICAgIDB4OEUsIDB4MDYsIDB4REQsIDB4OUQsIDB4MjgsIDB4QTksIDB4RTksIDB4ODAsIDB4NDEsIDB4M0IsCisgICAgICAgIDB4RDgsIDB4N0EsIDB4OTQsIDB4MjEsIDB4OEYsIDB4NTYsIDB4RjEsIDB4QTIsIDB4QjQsIDB4MkIsCisgICAgICAgIDB4ODksIDB4MUMsIDB4NzQsIDB4RkYsIDB4N0UsIDB4OTEsIDB4REMsIDB4MUYsIDB4OTEsIDB4MTMsCisgICAgICAgIDB4OTgsIDB4QUYsIDB4QzcsIDB4MDYsIDB4RDIsIDB4NEMsIDB4OTAsIDB4QTIsIDB4QkQsIDB4REEsCisgICAgICAgIDB4MTYsIDB4QkEsIDB4NjUsIDB4QjAsIDB4MkQsIDB4NjgsIDB4ODcsIDB4M0MsIDB4NkUsIDB4MjUsCisgICAgICAgIDB4OEQsIDB4OTAsIDB4QzcsIDB4QkMsIDB4MEQsIDB4QTksIDB4NDMsIDB4MDMsIDB4QzksIDB4QkUsCisgICAgICAgIDB4Q0YsIDB4ODUsIDB4NkYsIDB4REIsIDB4MDcsIDB4N0IsIDB4OEMsIDB4RjgsIDB4QjEsIDB4QzIsCisgICAgICAgIDB4NDksIDB4MTAsIDB4NjksIDB4NjMsIDB4NTYsIDB4MzcsIDB4QzUsIDB4MzAsIDB4RDIsIDB4RkIsCisgICAgICAgIDB4NzEsIDB4OUEsIDB4RTgsIDB4ODIsIDB4MDcsIDB4MkUsIDB4M0UsIDB4OTUsIDB4NTAsIDB4RjMsCisgICAgICAgIDB4NzMsIDB4Q0YsIDB4MzQsIDB4NUIsIDB4RDUsIDB4QUIsIDB4MDIsIDB4MTUsIDB4RjIsIDB4Q0MsCisgICAgICAgIDB4RDcsIDB4NTIsIDB4QzUsIDB4MjgsIDB4RDgsIDB4NDEsIDB4MTksIDB4NTUsIDB4NkYsIDB4QjgsCisgICAgICAgIDB4NUYsIDB4RjEsIDB4OTksIDB4QjMsIDB4QzcsIDB4RDksIDB4QjMsIDB4NzEsIDB4RjQsIDB4MkQsCisgICAgICAgIDB4REYsIDB4MjIsIDB4NTksIDB4MzUsIDB4ODYsIDB4REIsIDB4MzksIDB4Q0EsIDB4MUIsIDB4NEQsCisgICAgICAgIDB4MzUsIDB4OTAsIDB4MTksIDB4NkIsIDB4MzEsIDB4RTMsIDB4QzgsIDB4QzYsIDB4MDksIDB4QkYsCisgICAgICAgIDB4N0MsIDB4RUQsIDB4MDEsIDB4QjQsIDB4QjIsIDB4RjUsIDB4NkUsIDB4REEsIDB4NjMsIDB4NDEsCisgICAgICAgIDB4M0MsIDB4RTYsIDB4M0EsIDB4NzIsIDB4MkQsIDB4NjUsIDB4NDgsIDB4RjYsIDB4MDcsIDB4Q0QsCisgICAgICAgIDB4OTIsIDB4ODQsIDB4OEIsIDB4MUQsIDB4QTcsIDB4MzEsIDB4NkIsIDB4RDYsIDB4RjAsIDB4RkIsCisgICAgICAgIDB4RDksIDB4RjQsIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4NEIsIDB4QkIsIDB4QjcsCisgICAgICAgIDB4QzksIDB4NDgsIDB4OTUsIDB4MEQsIDB4NUEsIDB4QTYsIDB4MkQsIDB4QTEsIDB4N0YsIDB4REYsCisgICAgICAgIDB4MUYsIDB4NjcsIDB4NkQsIDB4RUQsIDB4NTIsIDB4NEIsIDB4MTYsIDB4NkMsIDB4MTcsIDB4QzYsCisgICAgICAgIDB4QUUsIDB4RjgsIDB4NkEsIDB4QzQsIDB4NTcsIDB4RUQsIDB4MkYsIDB4QjMsIDB4RjAsIDB4MkEsCisgICAgICAgIDB4NTUsIDB4QUIsIDB4QkEsIDB4Q0EsIDB4RUEsIDB4MTcsIDB4RTgsIDB4MzUsIDB4N0MsIDB4RTUsCisgICAgICAgIDB4MzEsIDB4MEQsIDB4NEEsIDB4OTUsIDB4RkMsIDB4NDMsIDB4NkYsIDB4OTcsIDB4M0MsIDB4NUMsCisgICAgICAgIDB4NjcsIDB4QUMsIDB4QkUsIDB4NjcsIDB4N0YsIDB4RTksIDB4NEUsIDB4QUEsIDB4NDgsIDB4QjMsCisgICAgICAgIDB4OTIsIDB4QTEsIDB4NzYsIDB4NzUsIDB4RUEsIDB4MDQsIDB4MzQsIDB4N0YsIDB4ODcsIDB4MzMsCisgICAgICAgIDB4MkQsIDB4MjQsIDB4QjYsIDB4MjksIDB4OTcsIDB4RTMsIDB4MDQsIDB4NzcsIDB4OTMsIDB4ODksCisgICAgICAgIDB4MTMsIDB4REIsIDB4MUIsIDB4OTMsIDB4QjgsIDB4MkMsIDB4OTAsIDB4MUEsIDB4MDksIDB4M0IsCisgICAgICAgIDB4MjYsIDB4RDksIDB4NTksIDB4RjMsIDB4MkEsIDB4MDksIDB4NTgsIDB4REMsIDB4QUMsIDB4MjUsCisgICAgICAgIDB4QjQsIDB4QTksIDB4NDUsIDB4M0IsIDB4QTIsIDB4M0EsIDB4NkMsIDB4NjEsIDB4ODQsIDB4QkYsCisgICAgICAgIDB4NjgsIDB4RDQsIDB4RUEsIDB4OUIsIDB4QzUsIDB4MjksIDB4NDgsIDB4NjAsIDB4MTUsIDB4MTAsCisgICAgICAgIDB4MzUsIDB4MkMsIDB4NDQsIDB4MUQsIDB4QjUsIDB4OUEsIDB4RUUsIDB4QUMsIDB4QzEsIDB4NjgsCisgICAgICAgIDB4RTgsIDB4NDcsIDB4QjcsIDB4NDEsIDB4MzQsIDB4MzksIDB4OUEsIDB4RjgsIDB4QTUsIDB4MjAsCisgICAgICAgIDB4RTksIDB4MjQsIDB4QzQsIDB4MkMsIDB4NTgsIDB4M0YsIDB4NEMsIDB4NDEsIDB4MzAsIDB4M0EsCisgICAgICAgIDB4MTQsIDB4NkUsIDB4OEQsIDB4RUEsIDB4QUQsIDB4QkEsIDB4OUIsIDB4NDMsIDB4RDMsIDB4OTgsCisgICAgICAgIDB4MkYsIDB4ODMsIDB4RDgsIDB4MTQsIDB4NjcsIDB4RTgsIDB4RjgsIDB4RDUsIDB4NEYsIDB4QUMsCisgICAgICAgIDB4RTAsIDB4M0IsIDB4QkYsIDB4QTcsIDB4NTQsIDB4MTYsIDB4NUUsIDB4NDksIDB4NjQsIDB4MjYsCisgICAgICAgIDB4NTQsIDB4QTQsIDB4NkIsIDB4NjksIDB4N0MsIDB4QkEsIDB4OEEsIDB4ODMsIDB4RDksIDB4MkUsCisgICAgICAgIDB4NjUsIDB4MEEsIDB4QTIsIDB4MjcsIDB4RUYsIDB4OTksIDB4OTksIDB4MDgsIDB4RDcsIDB4QjUsCisgICAgICAgIDB4OUYsIDB4QTAsIDB4MDEsIDB4RUYsIDB4N0UsIDB4MTcsIDB4QkYsIDB4ODMsIDB4NkIsIDB4MkUsCisgICAgICAgIDB4REQsIDB4QzAsIDB4MzksIDB4MzgsIDB4MjMsIDB4NjgsIDB4QjQsIDB4NzYsIDB4NkIsIDB4RTUsCisgICAgICAgIDB4Q0EsIDB4RjcsIDB4N0MsIDB4RUUsIDB4QzAsIDB4NTIsIDB4RTIsIDB4REQsIDB4QUQsIDB4NTksCisgICAgICAgIDB4M0EsIDB4NDIsIDB4MDYsIDB4NDUsIDB4QjAsIDB4QzcsIDB4QzEsIDB4NzcsIDB4MDUsIDB4QjIsCisgICAgICAgIDB4MEMsIDB4MzIsIDB4NDAsIDB4NDYsIDB4QUEsIDB4REEsIDB4NzksIDB4NzcsIDB4MDQsIDB4NzEsCisgICAgICAgIDB4REYsIDB4N0EsIDB4MDIsIDB4MTUsIDB4MDAsIDB4OTgsIDB4RUUsIDB4QjksIDB4NTEsIDB4MzcsCisgICAgICAgIDB4M0UsIDB4NzUsIDB4MTMsIDB4MTMsIDB4MDYsIDB4OEYsIDB4OTQsIDB4RDMsIDB4RTYsIDB4RTksCisgICAgICAgIDB4MDAsIDB4Q0IsIDB4NjIsIDB4NkQsIDB4OUEKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9kc2Ffa2V5X2Rlcl8yMDQ4ID0gc2l6ZW9mKGRzYV9rZXlfZGVyXzIwNDgpOworCisvKiAuL2NlcnRzL3JzYTIwNDguZGVyLCAyMDQ4LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcnNhX2tleV9kZXJfMjA0OFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwNCwgMHhBMywgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMSwKKyAgICAgICAgMHgwMSwgMHgwMCwgMHhFOSwgMHg4QSwgMHg1RCwgMHgxNSwgMHhBNCwgMHhENCwgMHgzNCwgMHhCOSwKKyAgICAgICAgMHg1OSwgMHhBMiwgMHhEQSwgMHhBRiwgMHg3NCwgMHhDOCwgMHhDOSwgMHgwMywgMHgyNiwgMHgzOCwKKyAgICAgICAgMHhGQSwgMHg0OCwgMHhGQywgMHg0RCwgMHgzMCwgMHg2RSwgMHhFQSwgMHg3NiwgMHg4OSwgMHhDRSwKKyAgICAgICAgMHg0RiwgMHhGNiwgMHg4NywgMHhERSwgMHgzMiwgMHgzQSwgMHg0NiwgMHg2RSwgMHgzOCwgMHgxMiwKKyAgICAgICAgMHg1OCwgMHgzNywgMHgyMiwgMHgwRCwgMHg4MCwgMHhBQywgMHgyRCwgMHhBRiwgMHgyRiwgMHgxMiwKKyAgICAgICAgMHgzRSwgMHg2MiwgMHg3MywgMHg2MCwgMHg2NiwgMHg2OCwgMHg5MCwgMHhCMiwgMHg2RiwgMHg0NywKKyAgICAgICAgMHgxNywgMHgwNCwgMHgyQiwgMHhDQSwgMHhCNywgMHgyNiwgMHhCNywgMHgxMCwgMHhDMiwgMHgxMywKKyAgICAgICAgMHhGOSwgMHg3QSwgMHg2MiwgMHgwQSwgMHg5MywgMHgzMiwgMHg5MCwgMHg0MiwgMHgwRCwgMHgxNiwKKyAgICAgICAgMHgyRSwgMHhGQSwgMHhENywgMHgyOSwgMHhENywgMHg5RiwgMHg1NCwgMHhFNCwgMHhGQywgMHg2NSwKKyAgICAgICAgMHg3NCwgMHhGOCwgMHhGNiwgMHg0MywgMHg2QiwgMHg0RSwgMHg5RSwgMHgzNCwgMHg3RiwgMHhDQiwKKyAgICAgICAgMHg2QiwgMHgxQywgMHgxQSwgMHhERSwgMHg4MiwgMHg4MSwgMHhCRiwgMHgwOCwgMHg1RCwgMHgzRiwKKyAgICAgICAgMHhDMCwgMHhCNiwgMHhCMSwgMHhBOCwgMHhBNSwgMHg5QywgMHg4MSwgMHg3MCwgMHhBNywgMHg0RSwKKyAgICAgICAgMHgzMiwgMHg4NywgMHgxNSwgMHgxQywgMHg3OCwgMHgwRSwgMHhGMCwgMHgxOCwgMHhGRSwgMHhFQiwKKyAgICAgICAgMHg0QiwgMHgzNywgMHgyQiwgMHhFOSwgMHhFMSwgMHhGNywgMHhGQSwgMHg1MSwgMHhDNiwgMHg1OCwKKyAgICAgICAgMHhCOSwgMHhEOCwgMHgwNiwgMHgwMywgMHhFRCwgMHhDMCwgMHgwMywgMHgxOCwgMHg1NSwgMHg4QiwKKyAgICAgICAgMHg5OCwgMHhGRSwgMHhCMSwgMHhGNiwgMHhEMCwgMHgzRCwgMHhGQSwgMHg2MywgMHhDMCwgMHgzOCwKKyAgICAgICAgMHgxOSwgMHhDNywgMHgwMCwgMHhFRiwgMHg0RCwgMHg5OSwgMHg2MCwgMHhCNCwgMHhCQSwgMHhDRSwKKyAgICAgICAgMHhFMywgMHhDRSwgMHhEOSwgMHg2QiwgMHgyRCwgMHg3NiwgMHg5NCwgMHhGRiwgMHhGQiwgMHg3NywKKyAgICAgICAgMHgxOCwgMHg0QSwgMHhGRSwgMHg2NSwgMHhGMCwgMHgwQSwgMHg5MSwgMHg1QywgMHgzQiwgMHgyMiwKKyAgICAgICAgMHg5NCwgMHg4NSwgMHhEMCwgMHgyMCwgMHgxOCwgMHg1OSwgMHgyRSwgMHhBNSwgMHgzMywgMHgwMywKKyAgICAgICAgMHhBQywgMHgxQiwgMHg1RiwgMHg3OCwgMHgzMiwgMHgxMSwgMHgyNSwgMHhFRSwgMHg3RiwgMHg5NiwKKyAgICAgICAgMHgyMSwgMHhBOSwgMHhENiwgMHg3NiwgMHg5NywgMHg4RCwgMHg2NiwgMHg3RSwgMHhCMiwgMHg5MSwKKyAgICAgICAgMHhEMCwgMHgzNiwgMHgyRSwgMHhBMywgMHgxRCwgMHhCRiwgMHhGMSwgMHg4NSwgMHhFRCwgMHhDMCwKKyAgICAgICAgMHgzRSwgMHg2MCwgMHhCOCwgMHg1QSwgMHg5RiwgMHhBQiwgMHg4MCwgMHhFMCwgMHhFQSwgMHg1RCwKKyAgICAgICAgMHg1RiwgMHg3NSwgMHg1NiwgMHhDNywgMHg0RCwgMHg1MSwgMHg4RSwgMHhENCwgMHgxRiwgMHgzNCwKKyAgICAgICAgMHhBNiwgMHgzNiwgMHhGMSwgMHgzMCwgMHgxRiwgMHg1MSwgMHg5OSwgMHgyRiwgMHgwMiwgMHgwMywKKyAgICAgICAgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMCwgMHg1MiwgMHgxMSwgMHgzMywKKyAgICAgICAgMHg0MCwgMHhDNSwgMHhEOSwgMHg2NCwgMHg2NSwgMHhCNSwgMHhFMCwgMHgwQSwgMHhBNSwgMHgxOSwKKyAgICAgICAgMHg4RSwgMHhFRCwgMHg0NCwgMHg1NCwgMHgwQywgMHgzNSwgMHhCNywgMHhBQywgMHgyMSwgMHg5QiwKKyAgICAgICAgMHhFMSwgMHg3RSwgMHgzNywgMHgwNSwgMHg5QSwgMHgyMCwgMHg3MywgMHg2QiwgMHhBRiwgMHg2MywKKyAgICAgICAgMHg0QiwgMHgyMywgMHgzMCwgMHhEQywgMHgzNywgMHg2NiwgMHgxNCwgMHg4OSwgMHhCQywgMHhFMCwKKyAgICAgICAgMHhGOCwgMHhBMCwgMHg1RCwgMHgyRCwgMHg1NywgMHg2NSwgMHhFMCwgMHhDNiwgMHhENiwgMHg5QiwKKyAgICAgICAgMHg2NiwgMHgyNywgMHg2MiwgMHhFQywgMHhDMywgMHhCOCwgMHg4QywgMHhEOCwgMHhBRSwgMHhCNSwKKyAgICAgICAgMHhDOSwgMHhCRiwgMHgwRSwgMHhGRSwgMHg4NCwgMHg3MiwgMHg2OCwgMHhENSwgMHg0NywgMHgwRSwKKyAgICAgICAgMHgwRSwgMHhGOCwgMHhBRSwgMHg5RCwgMHg1NiwgMHhBQywgMHg0RiwgMHhBRCwgMHg4OCwgMHhBMCwKKyAgICAgICAgMHhBMiwgMHhGNiwgMHhGQywgMHgzOCwgMHhDRCwgMHg5NiwgMHg1QiwgMHg1RSwgMHg3RSwgMHhCNiwKKyAgICAgICAgMHg5OCwgMHhCQiwgMHhGMywgMHg4QSwgMHhFQywgMHhGQSwgMHhDOCwgMHhCNywgMHg5MCwgMHg3NSwKKyAgICAgICAgMHhBMCwgMHgwRSwgMHg3NywgMHg2QiwgMHhGRCwgMHg1OSwgMHg0NSwgMHg1QSwgMHgwQywgMHhGRiwKKyAgICAgICAgMHg5NSwgMHg4RCwgMHhDRSwgMHhGRSwgMHg5QiwgMHhGNiwgMHgxOSwgMHg4RSwgMHgwQiwgMHhBMSwKKyAgICAgICAgMHgwQywgMHhFRSwgMHhDNiwgMHg3OSwgMHhERCwgMHg5RCwgMHg2MSwgMHg4NSwgMHg1QywgMHgxOSwKKyAgICAgICAgMHg2QywgMHg0NywgMHhDQywgMHgwOCwgMHhGRiwgMHhBNSwgMHg2MiwgMHhEQiwgMHhFNCwgMHgyRCwKKyAgICAgICAgMHgyRCwgMHhERCwgMHgxNCwgMHg2NywgMHhENiwgMHg0QSwgMHg2NCwgMHgyQSwgMHg2NiwgMHg0OSwKKyAgICAgICAgMHg1NCwgMHg5QywgMHhFMywgMHg4NSwgMHgxOCwgMHhFNywgMHgzMSwgMHg0MiwgMHhFMiwgMHhEMCwKKyAgICAgICAgMHgyQywgMHgyMCwgMHhBMCwgMHg3NCwgMHgwRiwgMHgxRiwgMHgyMCwgMHg4OSwgMHhCQSwgMHhBQiwKKyAgICAgICAgMHg4MCwgMHhEOCwgMHgzOCwgMHhEOSwgMHg0NiwgMHg2OSwgMHhCQiwgMHhFRiwgMHhDQywgMHg4QiwKKyAgICAgICAgMHhBMSwgMHg3MywgMHhBNywgMHhGMiwgMHhFNCwgMHgzOCwgMHg1RCwgMHhENiwgMHg3NSwgMHg5RiwKKyAgICAgICAgMHg4OCwgMHgwRSwgMHg1NiwgMHhDRCwgMHhEOCwgMHg4NCwgMHg1OSwgMHgyOSwgMHg3MywgMHhGNSwKKyAgICAgICAgMHhBMSwgMHg3OSwgMHhEQSwgMHg3QSwgMHgxRiwgMHhCRiwgMHg3MywgMHg4MywgMHhDMCwgMHg2RCwKKyAgICAgICAgMHg5RiwgMHg4QiwgMHgzNCwgMHgxNSwgMHhDMCwgMHg2RCwgMHg2OSwgMHg2QSwgMHgyMCwgMHhFNiwKKyAgICAgICAgMHg1MSwgMHhDRiwgMHg0NSwgMHg2RSwgMHhDQywgMHgwNSwgMHhDNCwgMHgzQSwgMHhDMCwgMHg5RSwKKyAgICAgICAgMHhBQSwgMHhDMSwgMHgwNiwgMHgyRiwgMHhBQiwgMHg5OSwgMHgzMCwgMHhFMSwgMHg2RSwgMHg5RCwKKyAgICAgICAgMHg0NSwgMHg3QSwgMHhGRiwgMHhBOSwgMHhDRSwgMHg3MCwgMHhCOCwgMHgxNiwgMHgxQSwgMHgwRSwKKyAgICAgICAgMHgyMCwgMHhGQSwgMHhDMSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhGRiwgMHgzMCwgMHgxMSwKKyAgICAgICAgMHhDMiwgMHgzQywgMHg2QiwgMHhCNCwgMHhENiwgMHg5RSwgMHg2QiwgMHhDMSwgMHg5MywgMHhEMSwKKyAgICAgICAgMHg0OCwgMHhDRSwgMHg4MCwgMHgyRCwgMHhCRSwgMHhBRiwgMHhGNywgMHhCQSwgMHhCMiwgMHhENywKKyAgICAgICAgMHhDMywgMHhDNCwgMHg1MywgMHg2RSwgMHgxNSwgMHgwMiwgMHhBQSwgMHg2MSwgMHhCOSwgMHhFQSwKKyAgICAgICAgMHgwNSwgMHg5QiwgMHg3OSwgMHg2NywgMHgwQiwgMHhDRSwgMHhEOSwgMHhGQiwgMHg5OCwgMHg4QywKKyAgICAgICAgMHgxRCwgMHg2QiwgMHhGNCwgMHg1QSwgMHhBNywgMHhBMCwgMHg1RSwgMHg1NCwgMHgxOCwgMHhFOSwKKyAgICAgICAgMHgzMSwgMHg0NCwgMHg3QywgMHhDNywgMHg1MiwgMHhEOCwgMHg2RCwgMHhBMCwgMHgzRSwgMHhENiwKKyAgICAgICAgMHgxNCwgMHgyRCwgMHg3QiwgMHgxNSwgMHg5RCwgMHgxRSwgMHgzOSwgMHg4NywgMHg5NiwgMHhERCwKKyAgICAgICAgMHhBOCwgMHgzMywgMHg1NSwgMHgyQSwgMHg4RSwgMHgzMiwgMHhDMCwgMHhDNCwgMHhFNSwgMHhCOCwKKyAgICAgICAgMHhDQiwgMHhDRCwgMHgzMiwgMHg4RCwgMHhBRCwgMHg3QiwgMHhFNSwgMHhDNiwgMHg3RSwgMHg0RCwKKyAgICAgICAgMHg2RiwgMHhGMywgMHhBNCwgMHhDNSwgMHhBNiwgMHg0MCwgMHhCRSwgMHg5MCwgMHgzQSwgMHgzMywKKyAgICAgICAgMHg2QSwgMHgyNCwgMHhCMiwgMHg4MCwgMHg4MSwgMHgxMiwgMHhBQywgMHhFMywgMHg3QiwgMHgyNiwKKyAgICAgICAgMHg2MywgMHhDRiwgMHg4OCwgMHhCOSwgMHhGRiwgMHg3NCwgMHgyMywgMHgzNywgMHg1MiwgMHhGMCwKKyAgICAgICAgMHhDNCwgMHgyNywgMHg1RCwgMHg0NSwgMHgxRiwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhFQSwKKyAgICAgICAgMHg0OCwgMHhBNywgMHhERCwgMHg3MywgMHg0MSwgMHg1NiwgMHgyMSwgMHgxNSwgMHhGNywgMHg0MiwKKyAgICAgICAgMHg0NSwgMHg0RCwgMHhBOSwgMHhFMSwgMHg2NiwgMHg1QiwgMHhCRCwgMHgyNSwgMHg3RCwgMHhGNywKKyAgICAgICAgMHhBOCwgMHg2NSwgMHgxMywgMHhBRSwgMHgyRCwgMHgzOCwgMHgxMSwgMHhDRCwgMHg5MywgMHhGQywKKyAgICAgICAgMHgzMCwgMHhBMywgMHgyQywgMHg0NCwgMHhCQiwgMHhDRiwgMHhEMCwgMHgyMSwgMHg4RiwgMHhGQiwKKyAgICAgICAgMHhDMSwgMHhGOSwgMHhBRCwgMHgxRCwgMHhFRSwgMHg5NiwgMHhDRiwgMHg5NywgMHg0OSwgMHg2MCwKKyAgICAgICAgMHg1MywgMHg4MCwgMHhBNSwgMHhBMiwgMHhGOCwgMHhFRSwgMHhCOSwgMHhENSwgMHg3NywgMHg0NCwKKyAgICAgICAgMHhERCwgMHhGRCwgMHgxOSwgMHgyQSwgMHhGMSwgMHg4MSwgMHhGNCwgMHhEOSwgMHgzQywgMHhFQywKKyAgICAgICAgMHg3MywgMHhEMCwgMHgyQSwgMHhEOCwgMHgzQywgMHgyNywgMHg4NywgMHg3OSwgMHgxMiwgMHg4NiwKKyAgICAgICAgMHhFNywgMHg1NywgMHgwQywgMHg1OSwgMHhEMSwgMHg0NCwgMHg1NSwgMHhBRSwgMHhDMywgMHg0RCwKKyAgICAgICAgMHg0MiwgMHhBRCwgMHhBOSwgMHhCMywgMHgyOCwgMHg2MSwgMHhCNCwgMHg5QywgMHhBNiwgMHg2MywKKyAgICAgICAgMHhEMywgMHg5NiwgMHhCMSwgMHg3NSwgMHg5RiwgMHgyQSwgMHg3OCwgMHg5OSwgMHhFMywgMHgxRSwKKyAgICAgICAgMHg3MSwgMHg0NywgMHgzOSwgMHhGNCwgMHg1MiwgMHhFMywgMHg2NiwgMHhGMSwgMHhFQiwgMHg3RiwKKyAgICAgICAgMHhFRiwgMHhDNiwgMHg4MSwgMHg5MywgMHg0QywgMHg5OSwgMHhGMSwgMHgwMiwgMHg4MSwgMHg4MSwKKyAgICAgICAgMHgwMCwgMHhDNSwgMHhCNiwgMHgyMCwgMHg4QywgMHgzNCwgMHhGMywgMHhERCwgMHhGMCwgMHg0QSwKKyAgICAgICAgMHg1RCwgMHg4MiwgMHg2NSwgMHg1QywgMHg0OCwgMHhFNCwgMHg3NSwgMHgzQSwgMHhGQiwgMHhGQSwKKyAgICAgICAgMHhBQSwgMHgxQywgMHhFNCwgMHg2MywgMHg3NywgMHgzMSwgMHhBQywgMHhEMiwgMHgyNSwgMHg0NSwKKyAgICAgICAgMHgyMywgMHg2RCwgMHgwMywgMHhGNSwgMHhFNCwgMHhEMiwgMHg0OCwgMHg4NSwgMHgyNiwgMHgwOCwKKyAgICAgICAgMHhFNSwgMHhBQSwgMHhBMCwgMHhDRSwgMHgyRSwgMHgxRCwgMHg2RCwgMHhGQywgMHhBRSwgMHhEMiwKKyAgICAgICAgMHhGOSwgMHg0MiwgMHg3RSwgMHhFQSwgMHg2RCwgMHg1OSwgMHg3QSwgMHhCMywgMHg5MywgMHhFNCwKKyAgICAgICAgMHg0QiwgMHg0QiwgMHg1NCwgMHg2MywgMHhEOCwgMHhDRSwgMHg0NCwgMHgwNiwgMHhDMiwgMHhFQywKKyAgICAgICAgMHg5RiwgMHhGNiwgMHgwNSwgMHg1NSwgMHg0NiwgMHhGNCwgMHgzRSwgMHg4RiwgMHhGMiwgMHgwQywKKyAgICAgICAgMHgzMCwgMHg3RSwgMHg1QywgMHhERCwgMHg4OCwgMHg0OSwgMHgzQiwgMHg1OSwgMHhCOSwgMHg4NywKKyAgICAgICAgMHhCQywgMHhDNiwgMHhDNSwgMHgyNCwgMHg4QSwgMHgxMCwgMHg2MywgMHgyMSwgMHgxRiwgMHg2NiwKKyAgICAgICAgMHgxQSwgMHgzRSwgMHhGNCwgMHg1OCwgMHhEMSwgMHg2QywgMHgwRCwgMHg0MCwgMHhCMiwgMHhDMCwKKyAgICAgICAgMHgxRCwgMHg2MywgMHg0MiwgMHgwRSwgMHhDNCwgMHg1NiwgMHgwRSwgMHhDMCwgMHhDQywgMHhDMiwKKyAgICAgICAgMHhENiwgMHg2NiwgMHgwRSwgMHhDNCwgMHhBQiwgMHhCNSwgMHgzMywgMHhGNiwgMHg1MSwgMHgwMiwKKyAgICAgICAgMHg4MSwgMHg4MCwgMHgxOSwgMHg3RSwgMHhFNiwgMHhBNSwgMHhCNiwgMHhEMSwgMHgzOSwgMHg2QSwKKyAgICAgICAgMHg0OCwgMHg1NSwgMHhBQywgMHgyNCwgMHg5NiwgMHg5QiwgMHgxMiwgMHgyOCwgMHg2RCwgMHg3QiwKKyAgICAgICAgMHg1QywgMHgwNSwgMHgyNSwgMHg1QSwgMHg3MiwgMHgwNSwgMHg3RSwgMHg0MiwgMHhGNSwgMHg4MywKKyAgICAgICAgMHgxQSwgMHg3OCwgMHgyQywgMHg0RCwgMHhBRSwgMHhCNCwgMHgzNiwgMHg5NiwgMHhBOSwgMHhCQSwKKyAgICAgICAgMHhFMCwgMHhBQywgMHgyNiwgMHg5RCwgMHhBOSwgMHg2QSwgMHgyOSwgMHg4MywgMHhCOSwgMHg2RCwKKyAgICAgICAgMHhDNSwgMHhFQywgMHhGQSwgMHg0QSwgMHg5QywgMHgwOSwgMHg2QSwgMHg3RSwgMHhFNCwgMHg5QiwKKyAgICAgICAgMHhEQywgMHg5QiwgMHgyQSwgMHgyNywgMHg2RSwgMHg0RiwgMHhCQSwgMHhEOCwgMHhBNSwgMHg2NywKKyAgICAgICAgMHhEQiwgMHhFQywgMHg0MSwgMHg1RiwgMHgyOSwgMHgxQywgMHg0MCwgMHg4MywgMHhFQiwgMHg1OSwKKyAgICAgICAgMHg1NiwgMHhENywgMHhBOSwgMHg0RSwgMHhBQiwgMHhBRSwgMHg3MCwgMHg2NywgMHhEMSwgMHhBMywKKyAgICAgICAgMHhGMSwgMHg2QywgMHhENywgMHg4RiwgMHg5NiwgMHgwRSwgMHg4RCwgMHhBQywgMHhBQiwgMHg1NSwKKyAgICAgICAgMHg1OCwgMHg2NiwgMHhEMywgMHgxRSwgMHg0NywgMHg5QiwgMHhGMCwgMHg0QywgMHhFRCwgMHhGNiwKKyAgICAgICAgMHg0OSwgMHhFOCwgMHhFOSwgMHg3QiwgMHgzMiwgMHg2MSwgMHgyMCwgMHgzMSwgMHg5NSwgMHgwNSwKKyAgICAgICAgMHhCMiwgMHhGNiwgMHgwOSwgMHhFQSwgMHgzMiwgMHgxNCwgMHgwRiwgMHhDRiwgMHg5QSwgMHg0MSwKKyAgICAgICAgMHgwMiwgMHg4MSwgMHg4MCwgMHg3NywgMHgzRiwgMHhCNiwgMHgxNCwgMHg4RCwgMHhDNSwgMHgxMywKKyAgICAgICAgMHgwOCwgMHg3RSwgMHhDOSwgMHhDNCwgMHhFQSwgMHhENCwgMHhCQSwgMHgwRCwgMHhBNCwgMHg5RSwKKyAgICAgICAgMHhCMywgMHg2RSwgMHhERSwgMHgxQSwgMHg3QSwgMHhGOCwgMHg4OSwgMHg4OCwgMHhFRiwgMHgzNiwKKyAgICAgICAgMHgzQywgMHgxMSwgMHhCQywgMHg4MywgMHhFOCwgMHgzMCwgMHg2QywgMHg4MSwgMHg3QywgMHg0NywKKyAgICAgICAgMHhGMywgMHg0RCwgMHhDQSwgMHhFQSwgMHg1NiwgMHgwMSwgMHg2MiwgMHg1NSwgMHgyRSwgMHg0QiwKKyAgICAgICAgMHg4OSwgMHhBOSwgMHhCRCwgMHg2RiwgMHgwMSwgMHhGNiwgMHg3NCwgMHgwMiwgMHhBQSwgMHhFMywKKyAgICAgICAgMHg4NCwgMHg2NiwgMHgwNiwgMHg5NSwgMHgzNCwgMHhBMSwgMHhFMiwgMHhDQSwgMHg2NSwgMHhGRSwKKyAgICAgICAgMHhBMywgMHgyRCwgMHg0MywgMHg5NywgMHg5NSwgMHg2QywgMHg2RiwgMHhENSwgMHhCNCwgMHgzOCwKKyAgICAgICAgMHhGNiwgMHhGOSwgMHg5NSwgMHgzMCwgMHhGQSwgMHhGOCwgMHg5QywgMHgyNSwgMHgyQiwgMHhCNiwKKyAgICAgICAgMHgxNCwgMHg1MSwgMHhDQywgMHgyRSwgMHhCMywgMHg1QiwgMHhENiwgMHhEQywgMHgxQSwgMHhFQywKKyAgICAgICAgMHgyRCwgMHgwOSwgMHg1QiwgMHgzRiwgMHgzQSwgMHhEMCwgMHhCOCwgMHg0RSwgMHgyNywgMHgxRiwKKyAgICAgICAgMHhEQywgMHgyQSwgMHhFRSwgMHhBQywgMHhBOSwgMHg1OSwgMHg1RCwgMHgwNywgMHg2MywgMHgxMSwKKyAgICAgICAgMHg4MywgMHgwQiwgMHhENCwgMHg3NCwgMHg4MCwgMHhCNiwgMHg3RCwgMHg2MiwgMHg0NSwgMHhCRiwKKyAgICAgICAgMHg1NgorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX3JzYV9rZXlfZGVyXzIwNDggPSBzaXplb2YocnNhX2tleV9kZXJfMjA0OCk7CisKKy8qIC4vY2VydHMvY2Eta2V5LmRlciwgMjA0OC1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhX2tleV9kZXJfMjA0OFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwNCwgMHhBNCwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMSwKKyAgICAgICAgMHgwMSwgMHgwMCwgMHhCRiwgMHgwQywgMHhDQSwgMHgyRCwgMHgxNCwgMHhCMiwgMHgxRSwgMHg4NCwKKyAgICAgICAgMHg0MiwgMHg1QiwgMHhDRCwgMHgzOCwgMHgxRiwgMHg0QSwgMHhGMiwgMHg0RCwgMHg3NSwgMHgxMCwKKyAgICAgICAgMHhGMSwgMHhCNiwgMHgzNSwgMHg5RiwgMHhERiwgMHhDQSwgMHg3RCwgMHgwMywgMHg5OCwgMHhEMywKKyAgICAgICAgMHhBQywgMHhERSwgMHgwMywgMHg2NiwgMHhFRSwgMHgyQSwgMHhGMSwgMHhEOCwgMHhCMCwgMHg3RCwKKyAgICAgICAgMHg2RSwgMHgwNywgMHg1NCwgMHgwQiwgMHgxMCwgMHg5OCwgMHgyMSwgMHg0RCwgMHg4MCwgMHhDQiwKKyAgICAgICAgMHgxMiwgMHgyMCwgMHhFNywgMHhDQywgMHg0RiwgMHhERSwgMHg0NSwgMHg3RCwgMHhDOSwgMHg3MiwKKyAgICAgICAgMHg3NywgMHgzMiwgMHhFQSwgMHhDQSwgMHg5MCwgMHhCQiwgMHg2OSwgMHg1MiwgMHgxMCwgMHgwMywKKyAgICAgICAgMHgyRiwgMHhBOCwgMHhGMywgMHg5NSwgMHhDNSwgMHhGMSwgMHg4QiwgMHg2MiwgMHg1NiwgMHgxQiwKKyAgICAgICAgMHhFRiwgMHg2NywgMHg2RiwgMHhBNCwgMHgxMCwgMHg0MSwgMHg5NSwgMHhBRCwgMHgwQSwgMHg5QiwKKyAgICAgICAgMHhFMywgMHhBNSwgMHhDMCwgMHhCMCwgMHhEMiwgMHg3MCwgMHg3NiwgMHg1MCwgMHgzMCwgMHg1QiwKKyAgICAgICAgMHhBOCwgMHhFOCwgMHgwOCwgMHgyQywgMHg3QywgMHhFRCwgMHhBNywgMHhBMiwgMHg3QSwgMHg4RCwKKyAgICAgICAgMHgzOCwgMHgyOSwgMHgxQywgMHhBQywgMHhDNywgMHhFRCwgMHhGMiwgMHg3QywgMHg5NSwgMHhCMCwKKyAgICAgICAgMHg5NSwgMHg4MiwgMHg3RCwgMHg0OSwgMHg1QywgMHgzOCwgMHhDRCwgMHg3NywgMHgyNSwgMHhFRiwKKyAgICAgICAgMHhCRCwgMHg4MCwgMHg3NSwgMHg1MywgMHg5NCwgMHgzQywgMHgzRCwgMHhDQSwgMHg2MywgMHg1QiwKKyAgICAgICAgMHg5RiwgMHgxNSwgMHhCNSwgMHhEMywgMHgxRCwgMHgxMywgMHgyRiwgMHgxOSwgMHhEMSwgMHgzQywKKyAgICAgICAgMHhEQiwgMHg3NiwgMHgzQSwgMHhDQywgMHhCOCwgMHg3RCwgMHhDOSwgMHhFNSwgMHhDMiwgMHhENywKKyAgICAgICAgMHhEQSwgMHg0MCwgMHg2RiwgMHhEOCwgMHgyMSwgMHhEQywgMHg3MywgMHgxQiwgMHg0MiwgMHgyRCwKKyAgICAgICAgMHg1MywgMHg5QywgMHhGRSwgMHgxQSwgMHhGQywgMHg3RCwgMHhBQiwgMHg3QSwgMHgzNiwgMHgzRiwKKyAgICAgICAgMHg5OCwgMHhERSwgMHg4NCwgMHg3QywgMHgwNSwgMHg2NywgMHhDRSwgMHg2QSwgMHgxNCwgMHgzOCwKKyAgICAgICAgMHg4NywgMHhBOSwgMHhGMSwgMHg4QywgMHhCNSwgMHg2OCwgMHhDQiwgMHg2OCwgMHg3RiwgMHg3MSwKKyAgICAgICAgMHgyMCwgMHgyQiwgMHhGNSwgMHhBMCwgMHg2MywgMHhGNSwgMHg1NiwgMHgyRiwgMHhBMywgMHgyNiwKKyAgICAgICAgMHhEMiwgMHhCNywgMHg2RiwgMHhCMSwgMHg1QSwgMHgxNywgMHhENywgMHgzOCwgMHg5OSwgMHgwOCwKKyAgICAgICAgMHhGRSwgMHg5MywgMHg1OCwgMHg2RiwgMHhGRSwgMHhDMywgMHgxMywgMHg0OSwgMHgwOCwgMHgxNiwKKyAgICAgICAgMHgwQiwgMHhBNywgMHg0RCwgMHg2NywgMHgwMCwgMHg1MiwgMHgzMSwgMHg2NywgMHgyMywgMHg0RSwKKyAgICAgICAgMHg5OCwgMHhFRCwgMHg1MSwgMHg0NSwgMHgxRCwgMHhCOSwgMHgwNCwgMHhEOSwgMHgwQiwgMHhFQywKKyAgICAgICAgMHhEOCwgMHgyOCwgMHhCMywgMHg0QiwgMHhCRCwgMHhFRCwgMHgzNiwgMHg3OSwgMHgwMiwgMHgwMywKKyAgICAgICAgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMCwgMHgzRCwgMHg2RSwgMHg0RSwKKyAgICAgICAgMHg2MCwgMHgxQSwgMHg4NCwgMHg3RiwgMHg5RCwgMHg4NSwgMHg3QywgMHhFMSwgMHg0QiwgMHgwNywKKyAgICAgICAgMHg3QywgMHhFMCwgMHhENiwgMHg5OSwgMHgyQSwgMHhERSwgMHg5RCwgMHhGOSwgMHgzNiwgMHgzNCwKKyAgICAgICAgMHgwRSwgMHg3NywgMHgwRSwgMHgzRSwgMHgwOCwgMHhFQSwgMHg0RiwgMHhFNSwgMHgwNiwgMHgyNiwKKyAgICAgICAgMHhENCwgMHhGNiwgMHgzOCwgMHhGNywgMHhERiwgMHgwRCwgMHgwRiwgMHgxQywgMHgyRSwgMHgwNiwKKyAgICAgICAgMHhBMiwgMHhGNCwgMHgyQSwgMHg2OCwgMHg5QywgMHg2MywgMHg3MiwgMHhFMywgMHgzNSwgMHhFNiwKKyAgICAgICAgMHgwNCwgMHg5MSwgMHg5MSwgMHhCNSwgMHhDMSwgMHhCMSwgMHhBNCwgMHg1NCwgMHhBQywgMHhENywKKyAgICAgICAgMHhDNiwgMHhGQiwgMHg0MSwgMHhBMCwgMHhENiwgMHg3NSwgMHg2RiwgMHhCRCwgMHgwQiwgMHg0RSwKKyAgICAgICAgMHhCRiwgMHhCMSwgMHg1MiwgMHhFOCwgMHg1RiwgMHg0OSwgMHgyNiwgMHg5OCwgMHg1NiwgMHg0NywKKyAgICAgICAgMHhDNywgMHhERSwgMHhFOSwgMHhFQSwgMHgzQywgMHg2MCwgMHgwMSwgMHhCRiwgMHgyOCwgMHhEQywKKyAgICAgICAgMHgzMSwgMHhCRiwgMHg0OSwgMHg1RiwgMHg5MywgMHg0OSwgMHg4NywgMHg3QSwgMHg4MSwgMHg1QiwKKyAgICAgICAgMHg5NiwgMHg0QiwgMHg0RCwgMHhDQSwgMHg1QywgMHgzOCwgMHg0RiwgMHhCNywgMHhFMSwgMHhCMiwKKyAgICAgICAgMHhEMywgMHhDNywgMHgyMSwgMHhEQSwgMHgzQywgMHgxMiwgMHg4NywgMHgwNywgMHhFNCwgMHgxQiwKKyAgICAgICAgMHhEQywgMHg0MywgMHhFQywgMHhFOCwgMHhFQywgMHg1NCwgMHg2MSwgMHhFNywgMHhGNiwgMHhFRCwKKyAgICAgICAgMHhBNiwgMHgwQiwgMHgyRSwgMHhGNSwgMHhERiwgMHg4MiwgMHg3RiwgMHhDNiwgMHgxRiwgMHg2MSwKKyAgICAgICAgMHgxOSwgMHg5QywgMHhBNCwgMHg4MywgMHgzOSwgMHhERiwgMHgyMSwgMHg4NSwgMHg4OSwgMHg2RiwKKyAgICAgICAgMHg3NywgMHhBRiwgMHg4NiwgMHgxNSwgMHgzMiwgMHgwOCwgMHhBMiwgMHg1QSwgMHgwQiwgMHgyNiwKKyAgICAgICAgMHg2MSwgMHhGQiwgMHg3MCwgMHgwQywgMHhDQSwgMHg5QywgMHgzOCwgMHg3RCwgMHhCQywgMHgyMiwKKyAgICAgICAgMHhFRSwgMHhFQiwgMHhBMywgMHhBOCwgMHgxNiwgMHgwMCwgMHhGOSwgMHg4QSwgMHg4MCwgMHgxRSwKKyAgICAgICAgMHgwMCwgMHg4NCwgMHhBOCwgMHg0QSwgMHg0MSwgMHhGOCwgMHg4NCwgMHgwMywgMHg2NywgMHgyRiwKKyAgICAgICAgMHgyMywgMHg1QiwgMHgyRiwgMHg5QiwgMHg2QiwgMHgyNiwgMHhDMywgMHgwNywgMHgzNCwgMHg5NCwKKyAgICAgICAgMHhBMywgMHgwMywgMHgzQiwgMHg3MiwgMHhENSwgMHg5RiwgMHg3MiwgMHhFMCwgMHhBRCwgMHhDQywKKyAgICAgICAgMHgzNCwgMHhBQiwgMHhCRCwgMHhDNywgMHhENSwgMHhGNSwgMHgyNiwgMHgzMCwgMHg4NSwgMHgwRiwKKyAgICAgICAgMHgzMCwgMHgyMywgMHgzOSwgMHg1MiwgMHhGRiwgMHgzQywgMHhDQiwgMHg5OSwgMHgyMSwgMHg0RCwKKyAgICAgICAgMHg4OCwgMHhBNSwgMHhBQiwgMHhFRSwgMHg2MiwgMHhCOSwgMHhDNywgMHhFMCwgMHhCQiwgMHg0NywKKyAgICAgICAgMHg4NywgMHhDMSwgMHg2OSwgMHhDRiwgMHg3MywgMHhGMywgMHgzMCwgMHhCRSwgMHhDRSwgMHgzOSwKKyAgICAgICAgMHgwNCwgMHg5QywgMHhFNSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhFMSwgMHg3NiwgMHg0NSwKKyAgICAgICAgMHg4MCwgMHg1OSwgMHhCNiwgMHhEMywgMHg0OSwgMHhERiwgMHgwQSwgMHhFRiwgMHgxMiwgMHhENiwKKyAgICAgICAgMHgwRiwgMHhGMCwgMHhCNywgMHhDQiwgMHgyQSwgMHgzNywgMHhCRiwgMHhBNywgMHhGOCwgMHhCNSwKKyAgICAgICAgMHg0RCwgMHhGNSwgMHgzMSwgMHgzNSwgMHhBRCwgMHhFNCwgMHhBMywgMHg5NCwgMHhBMSwgMHhEQiwKKyAgICAgICAgMHhGMSwgMHg5NiwgMHhBRCwgMHhCNSwgMHgwNSwgMHg2NCwgMHg4NSwgMHg4MywgMHhGQywgMHgxQiwKKyAgICAgICAgMHg1QiwgMHgyOSwgMHhBQSwgMHhCRSwgMHhGOCwgMHgyNiwgMHgzRiwgMHg3NiwgMHg3RSwgMHhBRCwKKyAgICAgICAgMHgxQywgMHhGMCwgMHhDQiwgMHhENywgMHgyNiwgMHhCNCwgMHgxQiwgMHgwNSwgMHg4RSwgMHg1NiwKKyAgICAgICAgMHg4NiwgMHg3RSwgMHgwOCwgMHg2MiwgMHgyMSwgMHhDMSwgMHg4NiwgMHhENiwgMHg0NywgMHg3OSwKKyAgICAgICAgMHgzRSwgMHhCNywgMHg1RCwgMHhBNCwgMHhDNiwgMHgzQSwgMHhENywgMHhCMSwgMHg3NCwgMHgyMCwKKyAgICAgICAgMHhGNiwgMHg1MCwgMHg5NywgMHg0MSwgMHgwNCwgMHg1MywgMHhFRCwgMHgzRiwgMHgyNiwgMHhENiwKKyAgICAgICAgMHg2RiwgMHg5MSwgMHhGQSwgMHg2OCwgMHgyNiwgMHhFQywgMHgyQSwgMHhEQywgMHg5QSwgMHhGMSwKKyAgICAgICAgMHhFNywgMHhEQywgMHhGQiwgMHg3MywgMHhGMCwgMHg3OSwgMHg0MywgMHgxQiwgMHgyMSwgMHhBMywKKyAgICAgICAgMHg1OSwgMHgwNCwgMHg2MywgMHg1MiwgMHgwNywgMHhDOSwgMHhENywgMHhFNiwgMHhEMSwgMHgxQiwKKyAgICAgICAgMHg1RCwgMHg1RSwgMHg5NiwgMHhGQSwgMHg1MywgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhEOCwKKyAgICAgICAgMHhFRCwgMHg0RSwgMHg2NCwgMHg2MSwgMHg2QiwgMHg5MSwgMHgwQywgMHg2MSwgMHgwMSwgMHhCNSwKKyAgICAgICAgMHgwRiwgMHhCQiwgMHg0NCwgMHg2NywgMHg1MywgMHgxRSwgMHhEQywgMHgwNywgMHhDNCwgMHgyNCwKKyAgICAgICAgMHg3RSwgMHg5RSwgMHg2QywgMHg4NCwgMHgyMywgMHg5MSwgMHgwQywgMHhFNCwgMHgxMiwgMHgwNCwKKyAgICAgICAgMHgxNiwgMHg0RCwgMHg3OCwgMHg5OCwgMHhDQywgMHg5NiwgMHgzRCwgMHgyMCwgMHg0RSwgMHgwRiwKKyAgICAgICAgMHg0NSwgMHg5QSwgMHhCNiwgMHhGOCwgMHhCMywgMHg5MywgMHgwRCwgMHhCMiwgMHhBMiwgMHgxQiwKKyAgICAgICAgMHgyOSwgMHhGMiwgMHgyNiwgMHg3OSwgMHhDOCwgMHhDNSwgMHhEMiwgMHg3OCwgMHg3RSwgMHg1RSwKKyAgICAgICAgMHg3MywgMHhGMiwgMHhENywgMHg3MCwgMHg2MSwgMHhCQiwgMHg0MCwgMHhDRSwgMHg2MSwgMHgwNSwKKyAgICAgICAgMHhGRSwgMHg2OSwgMHgxRSwgMHg4MiwgMHgyOSwgMHhFNiwgMHgxNCwgMHhCOCwgMHhBMSwgMHhFNywKKyAgICAgICAgMHg5NiwgMHhEMCwgMHgyMywgMHgzRiwgMHgwNSwgMHg5MywgMHgwMCwgMHhGMiwgMHhFMSwgMHg0RCwKKyAgICAgICAgMHg3RSwgMHhFRCwgMHhCNywgMHg5NiwgMHg2QywgMHhGNywgMHhGMCwgMHhFNCwgMHhEMSwgMHhDRiwKKyAgICAgICAgMHgwMSwgMHg5OCwgMHg0RiwgMHhEQywgMHg3NCwgMHg1NCwgMHhBQSwgMHg2RCwgMHg1RSwgMHg1QSwKKyAgICAgICAgMHg0MSwgMHgzMSwgMHhGRSwgMHhGRiwgMHg5QSwgMHhCNiwgMHhBMCwgMHgwNSwgMHhERCwgMHhBOSwKKyAgICAgICAgMHgxMCwgMHg1NCwgMHhGOCwgMHg2QiwgMHhEMCwgMHhBQSwgMHg4MywgMHgwMiwgMHg4MSwgMHg4MCwKKyAgICAgICAgMHgyMSwgMHhEMywgMHgwNCwgMHg4QSwgMHg0NCwgMHhFQiwgMHg1MCwgMHhCNywgMHg3QywgMHg2NiwKKyAgICAgICAgMHhCRiwgMHg4NywgMHgyQiwgMHhFNiwgMHgyOCwgMHg0RSwgMHhFQSwgMHg4MywgMHhFMiwgMHhFOSwKKyAgICAgICAgMHgzNSwgMHhFMSwgMHhGMiwgMHgxMSwgMHg0NywgMHhGRiwgMHhBMSwgMHhGNSwgMHhGQywgMHg5RiwKKyAgICAgICAgMHgyRCwgMHhFNSwgMHgzQSwgMHg4MSwgMHhGQywgMHgwMSwgMHgwMywgMHg2RiwgMHg1MywgMHhBRCwKKyAgICAgICAgMHg1NCwgMHgyNywgMHhCNiwgMHg1MiwgMHhFRSwgMHhFNSwgMHg1NiwgMHhEMSwgMHgxMywgMHhBQiwKKyAgICAgICAgMHhFMSwgMHhCMywgMHgwRiwgMHg3NSwgMHg5MCwgMHgwQSwgMHg4NCwgMHhCNCwgMHhBMSwgMHhDMCwKKyAgICAgICAgMHg4QywgMHgwQywgMHhENiwgMHg5RSwgMHg0NiwgMHhCQSwgMHgyQiwgMHgzRSwgMHhCNSwgMHgzMSwKKyAgICAgICAgMHhFRCwgMHg2MywgMHhCQiwgMHhBNCwgMHhENSwgMHgwRCwgMHg4RiwgMHg3MiwgMHhDRCwgMHhEMSwKKyAgICAgICAgMHgxRSwgMHgyNiwgMHgzNSwgMHhFQiwgMHhCRSwgMHgxQiwgMHg3MiwgMHhGRCwgMHg5QiwgMHgzOSwKKyAgICAgICAgMHhCNCwgMHg4NywgMHhCNywgMHgxMywgMHhGNSwgMHhFQSwgMHg4MywgMHg0NSwgMHg5MywgMHg5OCwKKyAgICAgICAgMHhCQSwgMHg4RiwgMHhFNCwgMHg0QSwgMHhDQywgMHhCNCwgMHg0QywgMHhBOCwgMHg3RiwgMHgwOCwKKyAgICAgICAgMHhCQSwgMHg0MSwgMHg0OSwgMHhBOCwgMHg0OSwgMHgyOCwgMHgzRCwgMHg1RSwgMHgzRCwgMHhDMSwKKyAgICAgICAgMHhDRSwgMHgzNywgMHgwMCwgMHhDQiwgMHhGOSwgMHgyQywgMHhERCwgMHg1MSwgMHgwMiwgMHg4MSwKKyAgICAgICAgMHg4MSwgMHgwMCwgMHhBMSwgMHg1NywgMHg5RiwgMHgzRSwgMHhCOSwgMHhENiwgMHhBRiwgMHg4MywKKyAgICAgICAgMHg2RCwgMHg4MywgMHgzRiwgMHg4RiwgMHhGQiwgMHhEMCwgMHhEQywgMHhBOCwgMHhDRSwgMHgwMywKKyAgICAgICAgMHgwOSwgMHgyMywgMHhCMSwgMHhBMSwgMHgxQiwgMHg2MywgMHhDQSwgMHhDNCwgMHg0OSwgMHg1NiwKKyAgICAgICAgMHgzNSwgMHgyQiwgMHhEMSwgMHgyRSwgMHg2NSwgMHg2MCwgMHg5NSwgMHgwNSwgMHg1NSwgMHg5OSwKKyAgICAgICAgMHgxMSwgMHgzNSwgMHhGRCwgMHhENSwgMHhERiwgMHg0NCwgMHhDNywgMHhBNSwgMHg4OCwgMHg3MiwKKyAgICAgICAgMHg1RiwgMHhCMiwgMHg4MiwgMHg1MSwgMHhBOCwgMHg3MSwgMHg0NSwgMHg5MywgMHgzNiwgMHhDRiwKKyAgICAgICAgMHg1QywgMHgxRiwgMHg2MSwgMHg1MSwgMHgwQywgMHgwNSwgMHg4MCwgMHhFOCwgMHhBRiwgMHhDNSwKKyAgICAgICAgMHg3QiwgMHhCQSwgMHg1RSwgMHgyMiwgMHhFMywgMHgzQywgMHg3NSwgMHhDMywgMHg4NCwgMHgwNSwKKyAgICAgICAgMHg1NSwgMHg2RCwgMHhENiwgMHgzQSwgMHgyRCwgMHg4NCwgMHg4OSwgMHg5MywgMHgzMywgMHhDQiwKKyAgICAgICAgMHgzOCwgMHhEQSwgMHhBQSwgMHgzMSwgMHgwNSwgMHhDRCwgMHhDRSwgMHg2QywgMHgyRCwgMHhERCwKKyAgICAgICAgMHg1NSwgMHhEMywgMHg1NywgMHgwQiwgMHhGMCwgMHhBNSwgMHgzNSwgMHg2QSwgMHhCMCwgMHhBRSwKKyAgICAgICAgMHgzMSwgMHhCQSwgMHg0MywgMHg5NiwgMHhDQSwgMHgwMCwgMHhDNywgMHg0QiwgMHhFMywgMHgxOSwKKyAgICAgICAgMHgxMiwgMHg0MywgMHhEMywgMHg0MiwgMHhGQSwgMHg2RiwgMHhFQSwgMHg4MCwgMHhDMCwgMHhEMSwKKyAgICAgICAgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhCOSwgMHhEQiwgMHg4OSwgMHgyMCwgMHgzNCwgMHgyNywKKyAgICAgICAgMHg3MCwgMHg2MiwgMHgzNCwgMHhFQSwgMHg1RiwgMHgyNSwgMHg2MiwgMHgxMiwgMHhGMywgMHg5RCwKKyAgICAgICAgMHg4MSwgMHhCRiwgMHg0OCwgMHhFRSwgMHg5QSwgMHgwRSwgMHhDMSwgMHg4RCwgMHgxMCwgMHhGRiwKKyAgICAgICAgMHg2NSwgMHg5QSwgMHg5RCwgMHgyRCwgMHgxQSwgMHg4QSwgMHg5NCwgMHg1QSwgMHhDOCwgMHhDMCwKKyAgICAgICAgMHhBNSwgMHhBNSwgMHg4NCwgMHg2MSwgMHg5RSwgMHhENCwgMHgyNCwgMHhCOSwgMHhFRiwgMHhBOSwKKyAgICAgICAgMHg5RCwgMHhDOSwgMHg3NywgMHgwQiwgMHhDNywgMHg3MCwgMHg2NiwgMHgzRCwgMHhCQSwgMHhDOCwKKyAgICAgICAgMHg1NCwgMHhERiwgMHhEMiwgMHgzMywgMHhFMSwgMHhGNSwgMHg3RiwgMHhGOSwgMHgyNywgMHg2MSwKKyAgICAgICAgMHhCRSwgMHg1NywgMHg0NSwgMHhERCwgMHhCNywgMHg0NSwgMHgxNywgMHgyNCwgMHhGNSwgMHgyMywKKyAgICAgICAgMHhFNCwgMHgzOCwgMHgwRSwgMHg5MSwgMHgyNywgMHhFRSwgMHhFMywgMHgyMCwgMHhEOCwgMHgxNCwKKyAgICAgICAgMHhDOCwgMHg5NCwgMHg0NywgMHg3NywgMHg0MCwgMHg3NywgMHg0NSwgMHgxOCwgMHg5RSwgMHgwRCwKKyAgICAgICAgMHhDRSwgMHg3OSwgMHgzRiwgMHg1NywgMHgzMSwgMHg1NiwgMHgwOSwgMHg0OSwgMHg2NywgMHhCRSwKKyAgICAgICAgMHg5NCwgMHg1OCwgMHg0RiwgMHhGNiwgMHhDNCwgMHhBQiwgMHhFMiwgMHg4OSwgMHhFMywgMHhFMywKKyAgICAgICAgMHg4QSwgMHhDMCwgMHgwNSwgMHg1NSwgMHgyQywgMHgyNCwgMHhDMCwgMHg0QSwgMHg5NywgMHgwNCwKKyAgICAgICAgMHgyNywgMHg5QQorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NhX2tleV9kZXJfMjA0OCA9IHNpemVvZihjYV9rZXlfZGVyXzIwNDgpOworCisvKiAuL2NlcnRzL2NhLWNlcnQuZGVyLCAyMDQ4LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2FfY2VydF9kZXJfMjA0OFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwNCwgMHhFOSwgMHgzMCwgMHg4MiwgMHgwMywgMHhEMSwgMHhBMCwgMHgwMywKKyAgICAgICAgMHgwMiwgMHgwMSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwMCwgMHhBQSwgMHhEMywgMHgzRiwgMHhBQywKKyAgICAgICAgMHgxOCwgMHgwQSwgMHgzNywgMHg0RCwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwKKyAgICAgICAgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwMSwgMHgwQiwgMHgwNSwgMHgwMCwgMHgzMCwKKyAgICAgICAgMHg4MSwgMHg5NCwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwKKyAgICAgICAgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywgMHg0RCwgMHg2RiwgMHg2RSwgMHg3NCwKKyAgICAgICAgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwKKyAgICAgICAgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwgMHg3QSwgMHg2NSwgMHg2RCwgMHg2MSwKKyAgICAgICAgMHg2RSwgMHgzMSwgMHgxMSwgMHgzMCwgMHgwRiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwKKyAgICAgICAgMHgwQywgMHgwOCwgMHg1MywgMHg2MSwgMHg3NywgMHg3NCwgMHg2RiwgMHg2RiwgMHg3NCwgMHg2OCwKKyAgICAgICAgMHgzMSwgMHgxMywgMHgzMCwgMHgxMSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywKKyAgICAgICAgMHgwQSwgMHg0MywgMHg2RiwgMHg2RSwgMHg3MywgMHg3NSwgMHg2QywgMHg3NCwgMHg2OSwgMHg2RSwKKyAgICAgICAgMHg2NywgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywKKyAgICAgICAgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwKKyAgICAgICAgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwKKyAgICAgICAgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwKKyAgICAgICAgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywKKyAgICAgICAgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwKKyAgICAgICAgMHgzMCwgMHgxRSwgMHgxNywgMHgwRCwgMHgzMiwgMHgzMSwgMHgzMCwgMHgzMiwgMHgzMSwgMHgzMCwKKyAgICAgICAgMHgzMSwgMHgzOSwgMHgzNCwgMHgzOSwgMHgzNSwgMHgzMiwgMHg1QSwgMHgxNywgMHgwRCwgMHgzMiwKKyAgICAgICAgMHgzMywgMHgzMSwgMHgzMSwgMHgzMCwgMHgzNywgMHgzMSwgMHgzOSwgMHgzNCwgMHgzOSwgMHgzNSwKKyAgICAgICAgMHgzMiwgMHg1QSwgMHgzMCwgMHg4MSwgMHg5NCwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwgMHgxMCwKKyAgICAgICAgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywgMHg0RCwKKyAgICAgICAgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwgMHg3QSwKKyAgICAgICAgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwgMHgzMSwgMHgxMSwgMHgzMCwgMHgwRiwgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwOCwgMHg1MywgMHg2MSwgMHg3NywgMHg3NCwgMHg2RiwKKyAgICAgICAgMHg2RiwgMHg3NCwgMHg2OCwgMHgzMSwgMHgxMywgMHgzMCwgMHgxMSwgMHgwNiwgMHgwMywgMHg1NSwKKyAgICAgICAgMHgwNCwgMHgwQiwgMHgwQywgMHgwQSwgMHg0MywgMHg2RiwgMHg2RSwgMHg3MywgMHg3NSwgMHg2QywKKyAgICAgICAgMHg3NCwgMHg2OSwgMHg2RSwgMHg2NywgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywgMHgyRSwgMHg3NywKKyAgICAgICAgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwKKyAgICAgICAgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwKKyAgICAgICAgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwKKyAgICAgICAgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwKKyAgICAgICAgMHg2MywgMHg2RiwgMHg2RCwgMHgzMCwgMHg4MiwgMHgwMSwgMHgyMiwgMHgzMCwgMHgwRCwgMHgwNiwKKyAgICAgICAgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwMSwgMHgwMSwKKyAgICAgICAgMHgwNSwgMHgwMCwgMHgwMywgMHg4MiwgMHgwMSwgMHgwRiwgMHgwMCwgMHgzMCwgMHg4MiwgMHgwMSwKKyAgICAgICAgMHgwQSwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhCRiwgMHgwQywgMHhDQSwgMHgyRCwKKyAgICAgICAgMHgxNCwgMHhCMiwgMHgxRSwgMHg4NCwgMHg0MiwgMHg1QiwgMHhDRCwgMHgzOCwgMHgxRiwgMHg0QSwKKyAgICAgICAgMHhGMiwgMHg0RCwgMHg3NSwgMHgxMCwgMHhGMSwgMHhCNiwgMHgzNSwgMHg5RiwgMHhERiwgMHhDQSwKKyAgICAgICAgMHg3RCwgMHgwMywgMHg5OCwgMHhEMywgMHhBQywgMHhERSwgMHgwMywgMHg2NiwgMHhFRSwgMHgyQSwKKyAgICAgICAgMHhGMSwgMHhEOCwgMHhCMCwgMHg3RCwgMHg2RSwgMHgwNywgMHg1NCwgMHgwQiwgMHgxMCwgMHg5OCwKKyAgICAgICAgMHgyMSwgMHg0RCwgMHg4MCwgMHhDQiwgMHgxMiwgMHgyMCwgMHhFNywgMHhDQywgMHg0RiwgMHhERSwKKyAgICAgICAgMHg0NSwgMHg3RCwgMHhDOSwgMHg3MiwgMHg3NywgMHgzMiwgMHhFQSwgMHhDQSwgMHg5MCwgMHhCQiwKKyAgICAgICAgMHg2OSwgMHg1MiwgMHgxMCwgMHgwMywgMHgyRiwgMHhBOCwgMHhGMywgMHg5NSwgMHhDNSwgMHhGMSwKKyAgICAgICAgMHg4QiwgMHg2MiwgMHg1NiwgMHgxQiwgMHhFRiwgMHg2NywgMHg2RiwgMHhBNCwgMHgxMCwgMHg0MSwKKyAgICAgICAgMHg5NSwgMHhBRCwgMHgwQSwgMHg5QiwgMHhFMywgMHhBNSwgMHhDMCwgMHhCMCwgMHhEMiwgMHg3MCwKKyAgICAgICAgMHg3NiwgMHg1MCwgMHgzMCwgMHg1QiwgMHhBOCwgMHhFOCwgMHgwOCwgMHgyQywgMHg3QywgMHhFRCwKKyAgICAgICAgMHhBNywgMHhBMiwgMHg3QSwgMHg4RCwgMHgzOCwgMHgyOSwgMHgxQywgMHhBQywgMHhDNywgMHhFRCwKKyAgICAgICAgMHhGMiwgMHg3QywgMHg5NSwgMHhCMCwgMHg5NSwgMHg4MiwgMHg3RCwgMHg0OSwgMHg1QywgMHgzOCwKKyAgICAgICAgMHhDRCwgMHg3NywgMHgyNSwgMHhFRiwgMHhCRCwgMHg4MCwgMHg3NSwgMHg1MywgMHg5NCwgMHgzQywKKyAgICAgICAgMHgzRCwgMHhDQSwgMHg2MywgMHg1QiwgMHg5RiwgMHgxNSwgMHhCNSwgMHhEMywgMHgxRCwgMHgxMywKKyAgICAgICAgMHgyRiwgMHgxOSwgMHhEMSwgMHgzQywgMHhEQiwgMHg3NiwgMHgzQSwgMHhDQywgMHhCOCwgMHg3RCwKKyAgICAgICAgMHhDOSwgMHhFNSwgMHhDMiwgMHhENywgMHhEQSwgMHg0MCwgMHg2RiwgMHhEOCwgMHgyMSwgMHhEQywKKyAgICAgICAgMHg3MywgMHgxQiwgMHg0MiwgMHgyRCwgMHg1MywgMHg5QywgMHhGRSwgMHgxQSwgMHhGQywgMHg3RCwKKyAgICAgICAgMHhBQiwgMHg3QSwgMHgzNiwgMHgzRiwgMHg5OCwgMHhERSwgMHg4NCwgMHg3QywgMHgwNSwgMHg2NywKKyAgICAgICAgMHhDRSwgMHg2QSwgMHgxNCwgMHgzOCwgMHg4NywgMHhBOSwgMHhGMSwgMHg4QywgMHhCNSwgMHg2OCwKKyAgICAgICAgMHhDQiwgMHg2OCwgMHg3RiwgMHg3MSwgMHgyMCwgMHgyQiwgMHhGNSwgMHhBMCwgMHg2MywgMHhGNSwKKyAgICAgICAgMHg1NiwgMHgyRiwgMHhBMywgMHgyNiwgMHhEMiwgMHhCNywgMHg2RiwgMHhCMSwgMHg1QSwgMHgxNywKKyAgICAgICAgMHhENywgMHgzOCwgMHg5OSwgMHgwOCwgMHhGRSwgMHg5MywgMHg1OCwgMHg2RiwgMHhGRSwgMHhDMywKKyAgICAgICAgMHgxMywgMHg0OSwgMHgwOCwgMHgxNiwgMHgwQiwgMHhBNywgMHg0RCwgMHg2NywgMHgwMCwgMHg1MiwKKyAgICAgICAgMHgzMSwgMHg2NywgMHgyMywgMHg0RSwgMHg5OCwgMHhFRCwgMHg1MSwgMHg0NSwgMHgxRCwgMHhCOSwKKyAgICAgICAgMHgwNCwgMHhEOSwgMHgwQiwgMHhFQywgMHhEOCwgMHgyOCwgMHhCMywgMHg0QiwgMHhCRCwgMHhFRCwKKyAgICAgICAgMHgzNiwgMHg3OSwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMSwgMHhBMywgMHg4MiwgMHgwMSwKKyAgICAgICAgMHgzQSwgMHgzMCwgMHg4MiwgMHgwMSwgMHgzNiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwMywgMHg1NSwKKyAgICAgICAgMHgxRCwgMHgwRSwgMHgwNCwgMHgxNiwgMHgwNCwgMHgxNCwgMHgyNywgMHg4RSwgMHg2NywgMHgxMSwKKyAgICAgICAgMHg3NCwgMHhDMywgMHgyNiwgMHgxRCwgMHgzRiwgMHhFRCwgMHgzMywgMHg2MywgMHhCMywgMHhBNCwKKyAgICAgICAgMHhEOCwgMHgxRCwgMHgzMCwgMHhFNSwgMHhFOCwgMHhENSwgMHgzMCwgMHg4MSwgMHhDOSwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgxRCwgMHgyMywgMHgwNCwgMHg4MSwgMHhDMSwgMHgzMCwgMHg4MSwgMHhCRSwKKyAgICAgICAgMHg4MCwgMHgxNCwgMHgyNywgMHg4RSwgMHg2NywgMHgxMSwgMHg3NCwgMHhDMywgMHgyNiwgMHgxRCwKKyAgICAgICAgMHgzRiwgMHhFRCwgMHgzMywgMHg2MywgMHhCMywgMHhBNCwgMHhEOCwgMHgxRCwgMHgzMCwgMHhFNSwKKyAgICAgICAgMHhFOCwgMHhENSwgMHhBMSwgMHg4MSwgMHg5QSwgMHhBNCwgMHg4MSwgMHg5NywgMHgzMCwgMHg4MSwKKyAgICAgICAgMHg5NCwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwKKyAgICAgICAgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywgMHg0RCwgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwKKyAgICAgICAgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwKKyAgICAgICAgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwgMHg3QSwgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwKKyAgICAgICAgMHgzMSwgMHgxMSwgMHgzMCwgMHgwRiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywKKyAgICAgICAgMHgwOCwgMHg1MywgMHg2MSwgMHg3NywgMHg3NCwgMHg2RiwgMHg2RiwgMHg3NCwgMHg2OCwgMHgzMSwKKyAgICAgICAgMHgxMywgMHgzMCwgMHgxMSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywgMHgwQSwKKyAgICAgICAgMHg0MywgMHg2RiwgMHg2RSwgMHg3MywgMHg3NSwgMHg2QywgMHg3NCwgMHg2OSwgMHg2RSwgMHg2NywKKyAgICAgICAgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywKKyAgICAgICAgMHgwRiwgMHg3NywgMHg3NywgMHg3NywgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywKKyAgICAgICAgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwKKyAgICAgICAgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwKKyAgICAgICAgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwKKyAgICAgICAgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHg4MiwKKyAgICAgICAgMHgwOSwgMHgwMCwgMHhBQSwgMHhEMywgMHgzRiwgMHhBQywgMHgxOCwgMHgwQSwgMHgzNywgMHg0RCwKKyAgICAgICAgMHgzMCwgMHgwQywgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgxMywgMHgwNCwgMHgwNSwgMHgzMCwKKyAgICAgICAgMHgwMywgMHgwMSwgMHgwMSwgMHhGRiwgMHgzMCwgMHgxQywgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwKKyAgICAgICAgMHgxMSwgMHgwNCwgMHgxNSwgMHgzMCwgMHgxMywgMHg4MiwgMHgwQiwgMHg2NSwgMHg3OCwgMHg2MSwKKyAgICAgICAgMHg2RCwgMHg3MCwgMHg2QywgMHg2NSwgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHg4NywgMHgwNCwKKyAgICAgICAgMHg3RiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwKKyAgICAgICAgMHgyNSwgMHgwNCwgMHgxNiwgMHgzMCwgMHgxNCwgMHgwNiwgMHgwOCwgMHgyQiwgMHgwNiwgMHgwMSwKKyAgICAgICAgMHgwNSwgMHgwNSwgMHgwNywgMHgwMywgMHgwMSwgMHgwNiwgMHgwOCwgMHgyQiwgMHgwNiwgMHgwMSwKKyAgICAgICAgMHgwNSwgMHgwNSwgMHgwNywgMHgwMywgMHgwMiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwKKyAgICAgICAgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwMSwgMHgwQiwgMHgwNSwgMHgwMCwKKyAgICAgICAgMHgwMywgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHg2MiwgMHg5OCwgMHhDOCwgMHg1OCwgMHhDRiwKKyAgICAgICAgMHg1NiwgMHgwMywgMHg4NiwgMHg1QiwgMHgxQiwgMHg3MSwgMHg0OSwgMHg3RCwgMHgwNSwgMHgwMywKKyAgICAgICAgMHg1RCwgMHhFMCwgMHgwOCwgMHg4NiwgMHhBRCwgMHhEQiwgMHg0QSwgMHhERSwgMHhBQiwgMHgyMiwKKyAgICAgICAgMHg5NiwgMHhBOCwgMHhDMywgMHg1OSwgMHg2OCwgMHhDMSwgMHgzNywgMHg5MCwgMHg0MCwgMHhERiwKKyAgICAgICAgMHhCRCwgMHg4OSwgMHhEMCwgMHhCQywgMHhEQSwgMHg4RSwgMHhFRiwgMHg4NywgMHhCMiwgMHhDMiwKKyAgICAgICAgMHg2MiwgMHg1MiwgMHhFMSwgMHgxQSwgMHgyOSwgMHgxNywgMHg2QSwgMHg5NiwgMHg5OSwgMHhDOCwKKyAgICAgICAgMHg0RSwgMHhEOCwgMHgzMiwgMHhGRSwgMHhCOCwgMHhEMSwgMHg1QywgMHgzQiwgMHgwQSwgMHhDMiwKKyAgICAgICAgMHgzQywgMHg1RiwgMHhBMSwgMHgxRSwgMHg5OCwgMHg3RiwgMHhDRSwgMHg4OSwgMHgyNiwgMHgyMSwKKyAgICAgICAgMHgxRiwgMHg2NCwgMHg5QywgMHgxNSwgMHg3QSwgMHg5QywgMHhFRiwgMHhGQiwgMHgxRCwgMHg4NSwKKyAgICAgICAgMHg2QSwgMHhGQSwgMHg5OCwgMHhDRSwgMHhBOCwgMHhBOSwgMHhBQiwgMHhDMywgMHhBMiwgMHhDMCwKKyAgICAgICAgMHhFQiwgMHg4NywgMHhFRCwgMHhCQywgMHgyMSwgMHhERiwgMHhGMywgMHgwNywgMHg1QiwgMHhBRSwKKyAgICAgICAgMHhGRCwgMHg0MCwgMHhENCwgMHhBRSwgMHgyMCwgMHhEMCwgMHg3NiwgMHg4QSwgMHgzMSwgMHgwQSwKKyAgICAgICAgMHhBMiwgMHg2MiwgMHg3QywgMHg2MSwgMHgwRCwgMHhDRSwgMHg1RCwgMHg5QSwgMHgxRSwgMHhFNCwKKyAgICAgICAgMHgyMCwgMHg4OCwgMHg1MSwgMHg0OSwgMHhGQiwgMHg3NywgMHhBOSwgMHhDRCwgMHg0RCwgMHhDNiwKKyAgICAgICAgMHhCRiwgMHg1NCwgMHg5OSwgMHgzMywgMHhFRiwgMHg0QiwgMHhBMCwgMHg3MywgMHg3MCwgMHg2RCwKKyAgICAgICAgMHgyRSwgMHhEOSwgMHgzRCwgMHgwOCwgMHhGNiwgMHgxMiwgMHgzOSwgMHgzMSwgMHg2OCwgMHhDNiwKKyAgICAgICAgMHg2MSwgMHg1QywgMHg0MSwgMHhCNSwgMHgxQiwgMHhGNCwgMHgzOCwgMHg3RCwgMHhGQywgMHhCRSwKKyAgICAgICAgMHg3MywgMHg2NiwgMHgyRCwgMHhGNywgMHhDQSwgMHg1QiwgMHgyQywgMHg1QiwgMHgzMSwgMHhBQSwKKyAgICAgICAgMHhDRiwgMHhGNiwgMHg3RiwgMHgzMCwgMHhFNCwgMHgxMiwgMHgyQywgMHg4RSwgMHhENiwgMHgzOCwKKyAgICAgICAgMHg1MSwgMHhFNiwgMHg0NSwgMHhFRSwgMHhENSwgMHhEQSwgMHhDMywgMHg4MywgMHhENiwgMHhFRCwKKyAgICAgICAgMHg1RSwgMHhFQywgMHhENiwgMHhCNiwgMHgxNCwgMHhCMywgMHg5MywgMHg1OSwgMHhFMSwgMHg1NSwKKyAgICAgICAgMHg0QSwgMHg3RiwgMHgwNCwgMHhERiwgMHhDRSwgMHg2NSwgMHhENCwgMHhERiwgMHgxOCwgMHg0RiwKKyAgICAgICAgMHhERCwgMHhCNCwgMHg0NSwgMHg3RiwgMHhBNiwgMHg1NiwgMHgzMCwgMHhDNCwgMHgwNSwgMHg0NCwKKyAgICAgICAgMHg5OCwgMHg5RCwgMHg0RiwgMHgyNiwgMHg2RCwgMHg4NCwgMHg4MCwgMHhBMCwgMHg1RSwgMHhFRCwKKyAgICAgICAgMHgyMywgMHhEMSwgMHg0OCwgMHg4NywgMHgwRSwgMHgwNSwgMHgwNiwgMHg5MSwgMHgzQiwgMHhCMCwKKyAgICAgICAgMHgzQywgMHhCQiwgMHg4QywgMHg4RiwgMHgzQywgMHg3QiwgMHg0QywgMHg0RiwgMHhBMSwgMHhDQSwKKyAgICAgICAgMHg5OAorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NhX2NlcnRfZGVyXzIwNDggPSBzaXplb2YoY2FfY2VydF9kZXJfMjA0OCk7CisKKy8qIC4vY2VydHMvY2EtY2VydC1jaGFpbi5kZXIsIDIwNDgtYml0ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYV9jZXJ0X2NoYWluX2RlcltdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwMywgMHhFNCwgMHgzMCwgMHg4MiwgMHgwMywgMHg0RCwgMHhBMCwgMHgwMywKKyAgICAgICAgMHgwMiwgMHgwMSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwMCwgMHhFOSwgMHgyRiwgMHhEQSwgMHhBOCwKKyAgICAgICAgMHg1MywgMHhCRCwgMHhCRCwgMHhENSwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwKKyAgICAgICAgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwMSwgMHgwQiwgMHgwNSwgMHgwMCwgMHgzMCwKKyAgICAgICAgMHg4MSwgMHg5NCwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwKKyAgICAgICAgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywgMHg0RCwgMHg2RiwgMHg2RSwgMHg3NCwKKyAgICAgICAgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwKKyAgICAgICAgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwgMHg3QSwgMHg2NSwgMHg2RCwgMHg2MSwKKyAgICAgICAgMHg2RSwgMHgzMSwgMHgxMSwgMHgzMCwgMHgwRiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwKKyAgICAgICAgMHgwQywgMHgwOCwgMHg1MywgMHg2MSwgMHg3NywgMHg3NCwgMHg2RiwgMHg2RiwgMHg3NCwgMHg2OCwKKyAgICAgICAgMHgzMSwgMHgxMywgMHgzMCwgMHgxMSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywKKyAgICAgICAgMHgwQSwgMHg0MywgMHg2RiwgMHg2RSwgMHg3MywgMHg3NSwgMHg2QywgMHg3NCwgMHg2OSwgMHg2RSwKKyAgICAgICAgMHg2NywgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywKKyAgICAgICAgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwKKyAgICAgICAgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwKKyAgICAgICAgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwKKyAgICAgICAgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywKKyAgICAgICAgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwKKyAgICAgICAgMHgzMCwgMHgxRSwgMHgxNywgMHgwRCwgMHgzMiwgMHgzMSwgMHgzMCwgMHgzMiwgMHgzMSwgMHgzMCwKKyAgICAgICAgMHgzMSwgMHgzOSwgMHgzNCwgMHgzOSwgMHgzNSwgMHgzMiwgMHg1QSwgMHgxNywgMHgwRCwgMHgzMiwKKyAgICAgICAgMHgzMywgMHgzMSwgMHgzMSwgMHgzMCwgMHgzNywgMHgzMSwgMHgzOSwgMHgzNCwgMHgzOSwgMHgzNSwKKyAgICAgICAgMHgzMiwgMHg1QSwgMHgzMCwgMHg4MSwgMHg5NCwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwgMHgxMCwKKyAgICAgICAgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywgMHg0RCwKKyAgICAgICAgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwgMHg3QSwKKyAgICAgICAgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwgMHgzMSwgMHgxMSwgMHgzMCwgMHgwRiwgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwOCwgMHg1MywgMHg2MSwgMHg3NywgMHg3NCwgMHg2RiwKKyAgICAgICAgMHg2RiwgMHg3NCwgMHg2OCwgMHgzMSwgMHgxMywgMHgzMCwgMHgxMSwgMHgwNiwgMHgwMywgMHg1NSwKKyAgICAgICAgMHgwNCwgMHgwQiwgMHgwQywgMHgwQSwgMHg0MywgMHg2RiwgMHg2RSwgMHg3MywgMHg3NSwgMHg2QywKKyAgICAgICAgMHg3NCwgMHg2OSwgMHg2RSwgMHg2NywgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywgMHgyRSwgMHg3NywKKyAgICAgICAgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwKKyAgICAgICAgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwKKyAgICAgICAgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwKKyAgICAgICAgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwKKyAgICAgICAgMHg2MywgMHg2RiwgMHg2RCwgMHgzMCwgMHg4MSwgMHg5RiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwKKyAgICAgICAgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNSwKKyAgICAgICAgMHgwMCwgMHgwMywgMHg4MSwgMHg4RCwgMHgwMCwgMHgzMCwgMHg4MSwgMHg4OSwgMHgwMiwgMHg4MSwKKyAgICAgICAgMHg4MSwgMHgwMCwgMHhDRCwgMHhBQywgMHhERCwgMHg0NywgMHhFQywgMHhCRSwgMHhCNywgMHgyNCwKKyAgICAgICAgMHhDMywgMHg2MywgMHgxQiwgMHg1NCwgMHg5OCwgMHg3OSwgMHhFMSwgMHhDNywgMHgzMSwgMHgxNiwKKyAgICAgICAgMHg1OSwgMHhENiwgMHg5RCwgMHg3NywgMHg5RCwgMHg4RCwgMHhFMiwgMHg4QiwgMHhFRCwgMHgwNCwKKyAgICAgICAgMHgxNywgMHhCMiwgMHhDNiwgMHhFQiwgMHhFNCwgMHg5QiwgMHg5MSwgMHhCRSwgMHgzMSwgMHg1MCwKKyAgICAgICAgMHg2MiwgMHg5NywgMHg1OCwgMHhCNSwgMHg3RiwgMHgyOSwgMHhERSwgMHhCMywgMHg3MSwgMHgyNCwKKyAgICAgICAgMHgwQiwgMHhCRiwgMHg5NywgMHgwOSwgMHg3RiwgMHgyNiwgMHhEQywgMHgyRCwgMHhFQywgMHhBOCwKKyAgICAgICAgMHgyRSwgMHhCMiwgMHg2NCwgMHgyQiwgMHg3QSwgMHgyQiwgMHgzNSwgMHgxOSwgMHgyRCwgMHhBMiwKKyAgICAgICAgMHg4MCwgMHhDQiwgMHg5OSwgMHhGRCwgMHg5NCwgMHg3MSwgMHgxQiwgMHgyMywgMHg4RCwgMHg1NCwKKyAgICAgICAgMHhEQiwgMHgyRSwgMHg2MiwgMHg4RCwgMHg4MSwgMHgwOCwgMHgyRCwgMHhGNCwgMHgyNCwgMHg3MiwKKyAgICAgICAgMHgyNywgMHg2QywgMHhGOSwgMHhDOSwgMHg4RSwgMHhEQiwgMHg0QywgMHg3NSwgMHhCQSwgMHg5QiwKKyAgICAgICAgMHgwMSwgMHhGOCwgMHgzRiwgMHgxOCwgMHhGNCwgMHhFNiwgMHg3RiwgMHhGQiwgMHg1NywgMHg5NCwKKyAgICAgICAgMHg5MiwgMHhDQywgMHg4OCwgMHhDNCwgMHhCNCwgMHgwMCwgMHhDMiwgMHhBQSwgMHhENCwgMHhFNSwKKyAgICAgICAgMHg4OCwgMHgxOCwgMHhCMywgMHgxMSwgMHgyRiwgMHg3MywgMHhDMCwgMHhENiwgMHgyOSwgMHgwOSwKKyAgICAgICAgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMSwgMHhBMywgMHg4MiwgMHgwMSwgMHgzQSwgMHgzMCwKKyAgICAgICAgMHg4MiwgMHgwMSwgMHgzNiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgwRSwKKyAgICAgICAgMHgwNCwgMHgxNiwgMHgwNCwgMHgxNCwgMHhEMywgMHgyMiwgMHg4RiwgMHgyOCwgMHgyQywgMHhFMCwKKyAgICAgICAgMHgwNSwgMHhFRSwgMHhEMywgMHhFRCwgMHhDMywgMHg3MSwgMHgzRCwgMHhDOSwgMHhCMiwgMHgzNiwKKyAgICAgICAgMHgzQSwgMHgxRCwgMHhCRiwgMHhBOCwgMHgzMCwgMHg4MSwgMHhDOSwgMHgwNiwgMHgwMywgMHg1NSwKKyAgICAgICAgMHgxRCwgMHgyMywgMHgwNCwgMHg4MSwgMHhDMSwgMHgzMCwgMHg4MSwgMHhCRSwgMHg4MCwgMHgxNCwKKyAgICAgICAgMHhEMywgMHgyMiwgMHg4RiwgMHgyOCwgMHgyQywgMHhFMCwgMHgwNSwgMHhFRSwgMHhEMywgMHhFRCwKKyAgICAgICAgMHhDMywgMHg3MSwgMHgzRCwgMHhDOSwgMHhCMiwgMHgzNiwgMHgzQSwgMHgxRCwgMHhCRiwgMHhBOCwKKyAgICAgICAgMHhBMSwgMHg4MSwgMHg5QSwgMHhBNCwgMHg4MSwgMHg5NywgMHgzMCwgMHg4MSwgMHg5NCwgMHgzMSwKKyAgICAgICAgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwKKyAgICAgICAgMHg1NSwgMHg1MywgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwKKyAgICAgICAgMHgwOCwgMHgwQywgMHgwNywgMHg0RCwgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwgMHg2RSwgMHg2MSwKKyAgICAgICAgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywKKyAgICAgICAgMHgwNywgMHg0MiwgMHg2RiwgMHg3QSwgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwgMHgzMSwgMHgxMSwKKyAgICAgICAgMHgzMCwgMHgwRiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwOCwgMHg1MywKKyAgICAgICAgMHg2MSwgMHg3NywgMHg3NCwgMHg2RiwgMHg2RiwgMHg3NCwgMHg2OCwgMHgzMSwgMHgxMywgMHgzMCwKKyAgICAgICAgMHgxMSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywgMHgwQSwgMHg0MywgMHg2RiwKKyAgICAgICAgMHg2RSwgMHg3MywgMHg3NSwgMHg2QywgMHg3NCwgMHg2OSwgMHg2RSwgMHg2NywgMHgzMSwgMHgxOCwKKyAgICAgICAgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywgMHgwRiwgMHg3NywKKyAgICAgICAgMHg3NywgMHg3NywgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywKKyAgICAgICAgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwOSwKKyAgICAgICAgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgxNiwKKyAgICAgICAgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwKKyAgICAgICAgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHg4MiwgMHgwOSwgMHgwMCwKKyAgICAgICAgMHhFOSwgMHgyRiwgMHhEQSwgMHhBOCwgMHg1MywgMHhCRCwgMHhCRCwgMHhENSwgMHgzMCwgMHgwQywKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgxMywgMHgwNCwgMHgwNSwgMHgzMCwgMHgwMywgMHgwMSwKKyAgICAgICAgMHgwMSwgMHhGRiwgMHgzMCwgMHgxQywgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgxMSwgMHgwNCwKKyAgICAgICAgMHgxNSwgMHgzMCwgMHgxMywgMHg4MiwgMHgwQiwgMHg2NSwgMHg3OCwgMHg2MSwgMHg2RCwgMHg3MCwKKyAgICAgICAgMHg2QywgMHg2NSwgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHg4NywgMHgwNCwgMHg3RiwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMSwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgyNSwgMHgwNCwKKyAgICAgICAgMHgxNiwgMHgzMCwgMHgxNCwgMHgwNiwgMHgwOCwgMHgyQiwgMHgwNiwgMHgwMSwgMHgwNSwgMHgwNSwKKyAgICAgICAgMHgwNywgMHgwMywgMHgwMSwgMHgwNiwgMHgwOCwgMHgyQiwgMHgwNiwgMHgwMSwgMHgwNSwgMHgwNSwKKyAgICAgICAgMHgwNywgMHgwMywgMHgwMiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwKKyAgICAgICAgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwMSwgMHgwQiwgMHgwNSwgMHgwMCwgMHgwMywgMHg4MSwKKyAgICAgICAgMHg4MSwgMHgwMCwgMHhCMywgMHhFOSwgMHg4OCwgMHg2QSwgMHhFQSwgMHg1RiwgMHgzNSwgMHg3QywKKyAgICAgICAgMHg2QywgMHhGRCwgMHg5MywgMHhGRSwgMHg5QSwgMHg5OCwgMHhFNywgMHgxQywgMHhCQywgMHhEMSwKKyAgICAgICAgMHhDOCwgMHg3QSwgMHgxNSwgMHhDNSwgMHg2OSwgMHhFMSwgMHhGQiwgMHgzNSwgMHgxQiwgMHhFQywKKyAgICAgICAgMHg5MiwgMHgzRiwgMHhEMSwgMHgzRSwgMHg2OSwgMHgyQSwgMHgxMSwgMHg5NSwgMHg0NCwgMHgzRCwKKyAgICAgICAgMHgzRiwgMHg3QywgMHhGRiwgMHhGNiwgMHg2NCwgMHhEOCwgMHhFNCwgMHgxRCwgMHhFQywgMHg4NiwKKyAgICAgICAgMHg5NSwgMHg2OSwgMHg0OCwgMHgzRCwgMHg1QiwgMHg2RCwgMHgzOSwgMHhFNywgMHg3RSwgMHg1MSwKKyAgICAgICAgMHgxMiwgMHgxNSwgMHg0QiwgMHg5MCwgMHhBOCwgMHhGQSwgMHgxRSwgMHhBQSwgMHg4MSwgMHg1MywKKyAgICAgICAgMHhERSwgMHg4NSwgMHgyOSwgMHg0RCwgMHg3OSwgMHg2QywgMHgwOCwgMHhDMiwgMHhDNCwgMHg1RSwKKyAgICAgICAgMHg0RCwgMHgzOSwgMHhBNiwgMHgwOSwgMHhBNCwgMHg2NywgMHhBQywgMHhEQywgMHhGMCwgMHhDRCwKKyAgICAgICAgMHhCNywgMHg0RSwgMHhFNSwgMHhGOSwgMHg3MiwgMHhDMywgMHgyNSwgMHgxQywgMHg4RCwgMHhFMCwKKyAgICAgICAgMHgwMywgMHgzMCwgMHgxOSwgMHg1QSwgMHhBNSwgMHg2MywgMHhBNiwgMHhCQSwgMHhFQywgMHgxMiwKKyAgICAgICAgMHg4NywgMHhFRiwgMHg2RCwgMHg1NiwgMHgyMiwgMHhBNywgMHg0MiwgMHg0QSwgMHg4RiwgMHgzQiwKKyAgICAgICAgMHhGRCwgMHgyMCwgMHhBQiwgMHhFRiwgMHgyOSwgMHg1RSwgMHgzRCwgMHgxNiwgMHhENywgMHhBQworCit9Oworc3RhdGljIGNvbnN0IGludCBzaXplb2ZfY2FfY2VydF9jaGFpbl9kZXIgPSBzaXplb2YoY2FfY2VydF9jaGFpbl9kZXIpOworCisvKiAuL2NlcnRzL3NlcnZlci1rZXkuZGVyLCAyMDQ4LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2VydmVyX2tleV9kZXJfMjA0OFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwNCwgMHhBNSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMSwKKyAgICAgICAgMHgwMSwgMHgwMCwgMHhDMCwgMHg5NSwgMHgwOCwgMHhFMSwgMHg1NywgMHg0MSwgMHhGMiwgMHg3MSwKKyAgICAgICAgMHg2RCwgMHhCNywgMHhEMiwgMHg0NSwgMHg0MSwgMHgyNywgMHgwMSwgMHg2NSwgMHhDNiwgMHg0NSwKKyAgICAgICAgMHhBRSwgMHhGMiwgMHhCQywgMHgyNCwgMHgzMCwgMHhCOCwgMHg5NSwgMHhDRSwgMHgyRiwgMHg0RSwKKyAgICAgICAgMHhENiwgMHhGNiwgMHgxQywgMHg4OCwgMHhCQywgMHg3QywgMHg5RiwgMHhGQiwgMHhBOCwgMHg2NywKKyAgICAgICAgMHg3RiwgMHhGRSwgMHg1QywgMHg5QywgMHg1MSwgMHg3NSwgMHhGNywgMHg4QSwgMHhDQSwgMHgwNywKKyAgICAgICAgMHhFNywgMHgzNSwgMHgyRiwgMHg4RiwgMHhFMSwgMHhCRCwgMHg3QiwgMHhDMCwgMHgyRiwgMHg3QywKKyAgICAgICAgMHhBQiwgMHg2NCwgMHhBOCwgMHgxNywgMHhGQywgMHhDQSwgMHg1RCwgMHg3QiwgMHhCQSwgMHhFMCwKKyAgICAgICAgMHgyMSwgMHhFNSwgMHg3MiwgMHgyRSwgMHg2RiwgMHgyRSwgMHg4NiwgMHhEOCwgMHg5NSwgMHg3MywKKyAgICAgICAgMHhEQSwgMHhBQywgMHgxQiwgMHg1MywgMHhCOSwgMHg1RiwgMHgzRiwgMHhENywgMHgxOSwgMHgwRCwKKyAgICAgICAgMHgyNSwgMHg0RiwgMHhFMSwgMHg2MywgMHg2MywgMHg1MSwgMHg4QiwgMHgwQiwgMHg2NCwgMHgzRiwKKyAgICAgICAgMHhBRCwgMHg0MywgMHhCOCwgMHhBNSwgMHgxQywgMHg1QywgMHgzNCwgMHhCMywgMHhBRSwgMHgwMCwKKyAgICAgICAgMHhBMCwgMHg2MywgMHhDNSwgMHhGNiwgMHg3RiwgMHgwQiwgMHg1OSwgMHg2OCwgMHg3OCwgMHg3MywKKyAgICAgICAgMHhBNiwgMHg4QywgMHgxOCwgMHhBOSwgMHgwMiwgMHg2RCwgMHhBRiwgMHhDMywgMHgxOSwgMHgwMSwKKyAgICAgICAgMHgyRSwgMHhCOCwgMHgxMCwgMHhFMywgMHhDNiwgMHhDQywgMHg0MCwgMHhCNCwgMHg2OSwgMHhBMywKKyAgICAgICAgMHg0NiwgMHgzMywgMHg2OSwgMHg4NywgMHg2RSwgMHhDNCwgMHhCQiwgMHgxNywgMHhBNiwgMHhGMywKKyAgICAgICAgMHhFOCwgMHhERCwgMHhBRCwgMHg3MywgMHhCQywgMHg3QiwgMHgyRiwgMHgyMSwgMHhCNSwgMHhGRCwKKyAgICAgICAgMHg2NiwgMHg1MSwgMHgwQywgMHhCRCwgMHg1NCwgMHhCMywgMHhFMSwgMHg2RCwgMHg1RiwgMHgxQywKKyAgICAgICAgMHhCQywgMHgyMywgMHg3MywgMHhEMSwgMHgwOSwgMHgwMywgMHg4OSwgMHgxNCwgMHhEMiwgMHgxMCwKKyAgICAgICAgMHhCOSwgMHg2NCwgMHhDMywgMHgyQSwgMHhEMCwgMHhBMSwgMHg5NiwgMHg0QSwgMHhCQywgMHhFMSwKKyAgICAgICAgMHhENCwgMHgxQSwgMHg1QiwgMHhDNywgMHhBMCwgMHhDMCwgMHhDMSwgMHg2MywgMHg3OCwgMHgwRiwKKyAgICAgICAgMHg0NCwgMHgzNywgMHgzMCwgMHgzMiwgMHg5NiwgMHg4MCwgMHgzMiwgMHgyMywgMHg5NSwgMHhBMSwKKyAgICAgICAgMHg3NywgMHhCQSwgMHgxMywgMHhEMiwgMHg5NywgMHg3MywgMHhFMiwgMHg1RCwgMHgyNSwgMHhDOSwKKyAgICAgICAgMHg2QSwgMHgwRCwgMHhDMywgMHgzOSwgMHg2MCwgMHhBNCwgMHhCNCwgMHhCMCwgMHg2OSwgMHg0MiwKKyAgICAgICAgMHg0MiwgMHgwOSwgMHhFOSwgMHhEOCwgMHgwOCwgMHhCQywgMHgzMywgMHgyMCwgMHhCMywgMHg1OCwKKyAgICAgICAgMHgyMiwgMHhBNywgMHhBQSwgMHhFQiwgMHhDNCwgMHhFMSwgMHhFNiwgMHg2MSwgMHg4MywgMHhDNSwKKyAgICAgICAgMHhEMiwgMHg5NiwgMHhERiwgMHhEOSwgMHhEMCwgMHg0RiwgMHhBRCwgMHhENywgMHgwMiwgMHgwMywKKyAgICAgICAgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHg5QSwgMHhEMCwKKyAgICAgICAgMHgzNCwgMHgwRiwgMHg1MiwgMHg2MiwgMHgwNSwgMHg1MCwgMHgwMSwgMHhFRiwgMHg5RiwgMHhFRCwKKyAgICAgICAgMHg2NCwgMHg2RSwgMHhDMiwgMHhDNCwgMHhEQSwgMHgxQSwgMHhGMiwgMHg4NCwgMHhENywgMHg5MiwKKyAgICAgICAgMHgxMCwgMHg0OCwgMHg5MiwgMHhDNCwgMHhFOSwgMHg2QSwgMHhFQiwgMHg4QiwgMHg3NSwgMHg2QywKKyAgICAgICAgMHhDNiwgMHg3OSwgMHgzOCwgMHhGMiwgMHhDOSwgMHg3MiwgMHg0QSwgMHg4NiwgMHg2NCwgMHg1NCwKKyAgICAgICAgMHg5NSwgMHg3NywgMHhDQiwgMHhDMywgMHg5QSwgMHg5RCwgMHhCNywgMHhENCwgMHgxRCwgMHhBNCwKKyAgICAgICAgMHgwMCwgMHhDOCwgMHg5RSwgMHg0RSwgMHhFNCwgMHhERCwgMHhDNywgMHhCQSwgMHg2NywgMHgxNiwKKyAgICAgICAgMHhDMSwgMHg3NCwgMHhCQywgMHhBOSwgMHhENiwgMHg5NCwgMHg4RiwgMHgyQiwgMHgzMCwgMHgxQSwKKyAgICAgICAgMHhGQiwgMHhFRCwgMHhERiwgMHgyMSwgMHgwNSwgMHgyMywgMHhEOSwgMHg0QSwgMHgzOSwgMHhCRCwKKyAgICAgICAgMHg5OCwgMHg2QiwgMHg2NSwgMHg5QSwgMHhCOCwgMHhEQywgMHhDNCwgMHg3RCwgMHhFRSwgMHhBNiwKKyAgICAgICAgMHg0MywgMHgxNSwgMHgyRSwgMHgzRCwgMHhCRSwgMHgxRCwgMHgyMiwgMHg2MCwgMHgyQSwgMHg3MywKKyAgICAgICAgMHgzMCwgMHhENSwgMHgzRSwgMHhEOCwgMHhBMiwgMHhBQywgMHg4NiwgMHg0MywgMHgyRSwgMHhDNCwKKyAgICAgICAgMHhGNSwgMHg2NCwgMHg1RSwgMHgzRiwgMHg4OSwgMHg3NSwgMHgwRiwgMHgxMSwgMHhEOCwgMHg1MSwKKyAgICAgICAgMHgyNSwgMHg0RSwgMHg5RiwgMHhEOCwgMHhBQSwgMHhBMywgMHhDRSwgMHg2MCwgMHhCMywgMHhFMiwKKyAgICAgICAgMHg4QSwgMHhEOSwgMHg3RSwgMHgxQiwgMHhGMCwgMHg2NCwgMHhDQSwgMHg5QSwgMHg1QiwgMHgwNSwKKyAgICAgICAgMHgwQiwgMHg1QiwgMHhBQSwgMHhDQiwgMHhFNSwgMHhFMywgMHgzRiwgMHg2RSwgMHgzMiwgMHgyMiwKKyAgICAgICAgMHgwNSwgMHhGMywgMHhEMCwgMHhGQSwgMHhFRiwgMHg3NCwgMHg1MiwgMHg4MSwgMHhFMiwgMHg1RiwKKyAgICAgICAgMHg3NCwgMHhEMywgMHhCRCwgMHhGRiwgMHgzMSwgMHg4MywgMHg0NSwgMHg3NSwgMHhGQSwgMHg2MywKKyAgICAgICAgMHg3QSwgMHg5NywgMHgyRSwgMHhENiwgMHhCNiwgMHgxOSwgMHhDNiwgMHg5MiwgMHgyNiwgMHhFNCwKKyAgICAgICAgMHgyOCwgMHgwNiwgMHg1MCwgMHg1MCwgMHgwRSwgMHg3OCwgMHgyRSwgMHhBOSwgMHg3OCwgMHgwRCwKKyAgICAgICAgMHgxNCwgMHg5NywgMHhCNCwgMHgxMiwgMHhEOCwgMHgzMSwgMHg0MCwgMHhBQiwgMHhBMSwgMHgwMSwKKyAgICAgICAgMHg0MSwgMHhDMiwgMHgzMCwgMHhGOCwgMHgwNywgMHg1RiwgMHgxNiwgMHhFNCwgMHg2MSwgMHg3NywKKyAgICAgICAgMHhEMiwgMHg2MCwgMHhGMiwgMHg5RiwgMHg4RCwgMHhFOCwgMHhGNCwgMHhCQSwgMHhFQiwgMHg2MywKKyAgICAgICAgMHhERSwgMHgyQSwgMHg5NywgMHg4MSwgMHhFRiwgMHg0QywgMHg2QywgMHhFNiwgMHg1NSwgMHgzNCwKKyAgICAgICAgMHg1MSwgMHgyQiwgMHgyOCwgMHgzNCwgMHhGNCwgMHg1MywgMHgxQywgMHhDNCwgMHg1OCwgMHgwQSwKKyAgICAgICAgMHgzRiwgMHhCQiwgMHhBRiwgMHhCNSwgMHhGNywgMHg0QSwgMHg4NSwgMHg0MywgMHgyRCwgMHgzQywKKyAgICAgICAgMHhGMSwgMHg1OCwgMHg1OCwgMHg4MSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhGMiwgMHgyQywKKyAgICAgICAgMHg1NCwgMHg3NiwgMHgzOSwgMHgyMywgMHg2MywgMHhDOSwgMHgxMCwgMHgzMiwgMHhCNywgMHg5MywKKyAgICAgICAgMHhBRCwgMHhBRiwgMHhCRSwgMHgxOSwgMHg3NSwgMHg5NiwgMHg4MSwgMHg2NCwgMHhFNiwgMHhCNSwKKyAgICAgICAgMHhCOCwgMHg4OSwgMHg0MiwgMHg0MSwgMHhEMSwgMHg2RCwgMHhEMCwgMHgxQywgMHgxQiwgMHhGOCwKKyAgICAgICAgMHgxQiwgMHhBQywgMHg2OSwgMHhDQiwgMHgzNiwgMHgzQywgMHg2NCwgMHg3RCwgMHhEQywgMHhGNCwKKyAgICAgICAgMHgxOSwgMHhCOCwgMHhDMywgMHg2MCwgMHhCMSwgMHg1NywgMHg0OCwgMHg1RiwgMHg1MiwgMHg0RiwKKyAgICAgICAgMHg1OSwgMHgzQSwgMHg1NSwgMHg3RiwgMHgzMiwgMHhDMCwgMHgxOSwgMHg0MywgMHg1MCwgMHgzRiwKKyAgICAgICAgMHhBRSwgMHhDRSwgMHg2RiwgMHgxNywgMHhGMywgMHgwRSwgMHg5RiwgMHg0MCwgMHhDQSwgMHg0RSwKKyAgICAgICAgMHhBRCwgMHgxNSwgMHgzQiwgMHhDOSwgMHg3OSwgMHhFOSwgMHhDMCwgMHg1OSwgMHgzOCwgMHg3MywKKyAgICAgICAgMHg3MCwgMHg5QywgMHgwQSwgMHg3QywgMHhDOSwgMHgzQSwgMHg0OCwgMHgzMiwgMHhBNywgMHhEOCwKKyAgICAgICAgMHg0OSwgMHg3NSwgMHgwQSwgMHg4NSwgMHhDMiwgMHhDMiwgMHhGRCwgMHgxNSwgMHg3MywgMHhEQSwKKyAgICAgICAgMHg5OSwgMHgwOSwgMHgyQSwgMHg2OSwgMHg5QSwgMHg5RiwgMHgwQSwgMHg3MSwgMHhCRiwgMHhCMCwKKyAgICAgICAgMHgwNCwgMHhBNiwgMHg4QywgMHg3QSwgMHg1QSwgMHg2RiwgMHg0OCwgMHg1QSwgMHg1NCwgMHgzQiwKKyAgICAgICAgMHhDNiwgMHhCMSwgMHg1MywgMHgxNywgMHhERiwgMHhFNywgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwKKyAgICAgICAgMHhDQiwgMHg5MywgMHhERSwgMHg3NywgMHgxNSwgMHg1RCwgMHhCNywgMHg1QywgMHg1QywgMHg3QywKKyAgICAgICAgMHhEOCwgMHg5MCwgMHhBOSwgMHg5OCwgMHgyRCwgMHhENiwgMHg2OSwgMHgwRSwgMHg2MywgMHhCMywKKyAgICAgICAgMHhBMywgMHhEQywgMHhBNiwgMHhDQywgMHg4QiwgMHg2QSwgMHhBNCwgMHhBMiwgMHgxMiwgMHg4QywKKyAgICAgICAgMHg4RSwgMHg3QiwgMHg0OCwgMHgyQywgMHhCMiwgMHg0QiwgMHgzNywgMHhEQywgMHgwNiwgMHgxOCwKKyAgICAgICAgMHg3RCwgMHhFQSwgMHhGRSwgMHg3NiwgMHhBMSwgMHhENCwgMHhBMSwgMHhFOSwgMHgzRiwgMHgwRCwKKyAgICAgICAgMHhDRCwgMHgxQiwgMHg1RiwgMHhBRiwgMHg1RiwgMHg5RSwgMHg5NiwgMHg1QiwgMHg1QiwgMHgwRiwKKyAgICAgICAgMHhBMSwgMHg3QywgMHhBRiwgMHhCMywgMHg5QiwgMHg5MCwgMHhEQiwgMHg1NywgMHg3MywgMHgzQSwKKyAgICAgICAgMHhFRCwgMHhCMCwgMHgyMywgMHg0NCwgMHhBRSwgMHg0MSwgMHg0RiwgMHgxRiwgMHgwNywgMHg0MiwKKyAgICAgICAgMHgxMywgMHgyMywgMHg0QywgMHhDQiwgMHhGQSwgMHhGNCwgMHgxNCwgMHhBNCwgMHhENSwgMHhGNywKKyAgICAgICAgMHg5RSwgMHgzNiwgMHg3QywgMHg1QiwgMHg5RiwgMHhBOCwgMHgzQywgMHhDMSwgMHg4NSwgMHg1RiwKKyAgICAgICAgMHg3NCwgMHhEMiwgMHgzOSwgMHgyRCwgMHhGRiwgMHhEMCwgMHg4NCwgMHhERiwgMHhGQiwgMHhCMywKKyAgICAgICAgMHgyMCwgMHg3QSwgMHgyRSwgMHg5QiwgMHgxNywgMHhBRSwgMHhFNiwgMHhCQSwgMHgwQiwgMHhBRSwKKyAgICAgICAgMHg1RiwgMHg1MywgMHhBNCwgMHg1MiwgMHhFRCwgMHgxQiwgMHhDNCwgMHg5MSwgMHgwMiwgMHg4MSwKKyAgICAgICAgMHg4MSwgMHgwMCwgMHhFQywgMHg5OCwgMHhEQSwgMHhCQiwgMHhENSwgMHhGRSwgMHhGOSwgMHg1MiwKKyAgICAgICAgMHg0QSwgMHg3RCwgMHgwMiwgMHg1NSwgMHg0OSwgMHg2RiwgMHg1NSwgMHg2RSwgMHg1MiwgMHgyRiwKKyAgICAgICAgMHg4NCwgMHhBMywgMHgyQiwgMHhCMywgMHg4NiwgMHg2MiwgMHhCMywgMHg1NCwgMHhEMiwgMHg2MywKKyAgICAgICAgMHg1MiwgMHhEQSwgMHhFMywgMHg4OCwgMHg3NiwgMHhBMCwgMHhFRiwgMHg4QiwgMHgxNSwgMHhBNSwKKyAgICAgICAgMHhEMywgMHgxOCwgMHgxNCwgMHg3MiwgMHg3NywgMHg1RSwgMHhDNywgMHhBMywgMHgwNCwgMHgxRiwKKyAgICAgICAgMHg5RSwgMHgxOSwgMHg2MiwgMHhCNSwgMHgxQiwgMHgxQiwgMHg5RSwgMHhDMywgMHhGMiwgMHhCNSwKKyAgICAgICAgMHgzMiwgMHhGOSwgMHg0QywgMHhDMSwgMHhBQSwgMHhFQiwgMHgwQywgMHgyNiwgMHg3RCwgMHhENCwKKyAgICAgICAgMHg1RiwgMHg0QSwgMHg1MSwgMHg1QywgMHhBNCwgMHg0NSwgMHgwNiwgMHg3MCwgMHg0NCwgMHhBNywKKyAgICAgICAgMHg1NiwgMHhDMCwgMHhENCwgMHgyMiwgMHgxNCwgMHg3NiwgMHg5RSwgMHhEOCwgMHg2MywgMHg1MCwKKyAgICAgICAgMHg4OSwgMHg5MCwgMHhEMywgMHhFMiwgMHhCRiwgMHg4MSwgMHg5NSwgMHg5MiwgMHgzMSwgMHg0MSwKKyAgICAgICAgMHg4NywgMHgzOSwgMHgxQSwgMHg0MywgMHgwQiwgMHgxOCwgMHhBNSwgMHg1MywgMHgxRiwgMHgzOSwKKyAgICAgICAgMHgxQSwgMHg1RiwgMHgxRiwgMHg0MywgMHhCQywgMHg4NywgMHg2QSwgMHhERiwgMHg2RSwgMHhEMywKKyAgICAgICAgMHgyMiwgMHgwMCwgMHhGRSwgMHgyMiwgMHg5OCwgMHg3MCwgMHg0RSwgMHgxQSwgMHgxOSwgMHgyOSwKKyAgICAgICAgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHg4QSwgMHg0MSwgMHg1NiwgMHgyOCwgMHg1MSwgMHg5RSwKKyAgICAgICAgMHg1RiwgMHhENCwgMHg5RSwgMHgwQiwgMHgzQiwgMHg5OCwgMHhBMywgMHg1NCwgMHhGMiwgMHg2QywKKyAgICAgICAgMHg1NiwgMHhENCwgMHhBQSwgMHhFOSwgMHg2OSwgMHgzMywgMHg4NSwgMHgyNCwgMHgwQywgMHhEQSwKKyAgICAgICAgMHhENCwgMHgwQywgMHgyRCwgMHhDNCwgMHhCRiwgMHg0RiwgMHgwMiwgMHg2OSwgMHgzOCwgMHg3QywKKyAgICAgICAgMHhENCwgMHhFNiwgMHhEQywgMHg0QywgMHhFRCwgMHhENywgMHgxNiwgMHgxMSwgMHhDMywgMHgzRSwKKyAgICAgICAgMHgwMCwgMHhFNywgMHhDMywgMHgyNiwgMHhDMCwgMHg1MSwgMHgwMiwgMHhERSwgMHhCQiwgMHg3NSwKKyAgICAgICAgMHg5QywgMHg2RiwgMHg1NiwgMHg5QywgMHg3QSwgMHhGMywgMHg4RSwgMHhFRiwgMHhDRiwgMHg4QSwKKyAgICAgICAgMHhDNSwgMHgyQiwgMHhEMiwgMHhEQSwgMHgwNiwgMHg2QSwgMHg0NCwgMHhDOSwgMHg3MywgMHhGRSwKKyAgICAgICAgMHg2RSwgMHg5OSwgMHg4NywgMHhGOCwgMHg1QiwgMHhCRSwgMHhGMSwgMHg3QywgMHhFNiwgMHg2NSwKKyAgICAgICAgMHhCNSwgMHg0RiwgMHg2QywgMHhGMCwgMHhDOSwgMHhDNSwgMHhGRiwgMHgxNiwgMHhDQSwgMHg4QiwKKyAgICAgICAgMHgxQiwgMHgxNywgMHhFMiwgMHg1OCwgMHgzRCwgMHhBMiwgMHgzNywgMHhBQiwgMHgwMSwgMHhCQywKKyAgICAgICAgMHhCRiwgMHg0MCwgMHhDRSwgMHg1MywgMHg4QywgMHg4RSwgMHhFRCwgMHhFRiwgMHhFRSwgMHg1OSwKKyAgICAgICAgMHg5RCwgMHhFMCwgMHg2MywgMHhFNiwgMHg3QywgMHg1RSwgMHhGNSwgMHg4RSwgMHg0QiwgMHhGMSwKKyAgICAgICAgMHgzQiwgMHhDMSwgMHgwMiwgMHg4MSwgMHg4MCwgMHg0RCwgMHg0NSwgMHhGOSwgMHg0MCwgMHg4QywKKyAgICAgICAgMHhDNSwgMHg1QiwgMHhGNCwgMHgyQSwgMHgxQSwgMHg4QSwgMHhCNCwgMHhGMiwgMHgxQywgMHhBQywKKyAgICAgICAgMHg2QiwgMHhFOSwgMHgwQywgMHg1NiwgMHgzNiwgMHhCNywgMHg0RSwgMHg3MiwgMHg5NiwgMHhENSwKKyAgICAgICAgMHhFNSwgMHg4QSwgMHhEMiwgMHhFMiwgMHhGRiwgMHhGMSwgMHhGMSwgMHgxOCwgMHgxMywgMHgzRCwKKyAgICAgICAgMHg4NiwgMHgwOSwgMHhCOCwgMHhEOCwgMHg3NiwgMHhBNywgMHhDOSwgMHgxQywgMHg3MSwgMHg1MiwKKyAgICAgICAgMHg5NCwgMHgzMCwgMHg0MywgMHhFMCwgMHhGMSwgMHg3OCwgMHg3NCwgMHhGRCwgMHg2MSwgMHgxQiwKKyAgICAgICAgMHg0QywgMHgwOSwgMHhDQywgMHhFNiwgMHg2OCwgMHgyQSwgMHg3MSwgMHhBRCwgMHgxQywgMHhERiwKKyAgICAgICAgMHg0MywgMHhCQywgMHg1NiwgMHhEQiwgMHhBNSwgMHhBNCwgMHhCRSwgMHgzNSwgMHg3MCwgMHhBNCwKKyAgICAgICAgMHg1RSwgMHhDRiwgMHg0RiwgMHhGQywgMHgwMCwgMHg1NSwgMHg5OSwgMHgzQSwgMHgzRCwgMHgyMywKKyAgICAgICAgMHhDRiwgMHg2NywgMHg1QSwgMHhGNSwgMHgyMiwgMHhGOCwgMHhCNSwgMHgyOSwgMHhEMCwgMHg0NCwKKyAgICAgICAgMHgxMSwgMHhFQiwgMHgzNSwgMHgyRSwgMHg0NiwgMHhCRSwgMHhGRCwgMHg4RSwgMHgxOCwgMHhCMiwKKyAgICAgICAgMHg1RiwgMHhBOCwgMHhCRiwgMHgxOSwgMHgzMiwgMHhBMSwgMHhGNSwgMHhEQywgMHgwMywgMHhFNiwKKyAgICAgICAgMHg3QywgMHg5QSwgMHgxRiwgMHgwQywgMHg3QywgMHhBOSwgMHhCMCwgMHgwRSwgMHgyMSwgMHgzNywKKyAgICAgICAgMHgzQiwgMHhGMSwgMHhCMAorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX3NlcnZlcl9rZXlfZGVyXzIwNDggPSBzaXplb2Yoc2VydmVyX2tleV9kZXJfMjA0OCk7CisKKy8qIC4vY2VydHMvc2VydmVyLWNlcnQuZGVyLCAyMDQ4LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2VydmVyX2NlcnRfZGVyXzIwNDhbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDQsIDB4REQsIDB4MzAsIDB4ODIsIDB4MDMsIDB4QzUsIDB4QTAsIDB4MDMsCisgICAgICAgIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksCisgICAgICAgIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MEIsIDB4MDUsCisgICAgICAgIDB4MDAsIDB4MzAsIDB4ODEsIDB4OTQsIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsIDB4MzAsCisgICAgICAgIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsIDB4NkYsCisgICAgICAgIDB4NkUsIDB4NzQsIDB4NjEsIDB4NkUsIDB4NjEsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsIDB4NjUsCisgICAgICAgIDB4NkQsIDB4NjEsIDB4NkUsIDB4MzEsIDB4MTEsIDB4MzAsIDB4MEYsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MEEsIDB4MEMsIDB4MDgsIDB4NTMsIDB4NjEsIDB4NzcsIDB4NzQsIDB4NkYsIDB4NkYsCisgICAgICAgIDB4NzQsIDB4NjgsIDB4MzEsIDB4MTMsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MEIsIDB4MEMsIDB4MEEsIDB4NDMsIDB4NkYsIDB4NkUsIDB4NzMsIDB4NzUsIDB4NkMsIDB4NzQsCisgICAgICAgIDB4NjksIDB4NkUsIDB4NjcsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsCisgICAgICAgIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsCisgICAgICAgIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsCisgICAgICAgIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsCisgICAgICAgIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsCisgICAgICAgIDB4NkYsIDB4NkQsIDB4MzAsIDB4MUUsIDB4MTcsIDB4MEQsIDB4MzIsIDB4MzEsIDB4MzAsIDB4MzIsCisgICAgICAgIDB4MzEsIDB4MzAsIDB4MzEsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsIDB4MzMsIDB4NUEsIDB4MTcsCisgICAgICAgIDB4MEQsIDB4MzIsIDB4MzMsIDB4MzEsIDB4MzEsIDB4MzAsIDB4MzcsIDB4MzEsIDB4MzksIDB4MzQsCisgICAgICAgIDB4MzksIDB4MzUsIDB4MzMsIDB4NUEsIDB4MzAsIDB4ODEsIDB4OTAsIDB4MzEsIDB4MEIsIDB4MzAsCisgICAgICAgIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsCisgICAgICAgIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsCisgICAgICAgIDB4MDcsIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsIDB4NjEsIDB4NkUsIDB4NjEsIDB4MzEsIDB4MTAsCisgICAgICAgIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDcsIDB4NDIsCisgICAgICAgIDB4NkYsIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsIDB4NkUsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsCisgICAgICAgIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MDcsIDB4NzcsIDB4NkYsIDB4NkMsCisgICAgICAgIDB4NjYsIDB4NTMsIDB4NTMsIDB4NEMsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MDcsIDB4NTMsIDB4NzUsIDB4NzAsIDB4NzAsIDB4NkYsCisgICAgICAgIDB4NzIsIDB4NzQsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsIDB4NkMsCisgICAgICAgIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsIDB4MUYsCisgICAgICAgIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsCisgICAgICAgIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsIDB4NDAsCisgICAgICAgIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsCisgICAgICAgIDB4NkQsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MjIsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksIDB4MkEsCisgICAgICAgIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDAsCisgICAgICAgIDB4MDMsIDB4ODIsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MEEsIDB4MDIsCisgICAgICAgIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4QzAsIDB4OTUsIDB4MDgsIDB4RTEsIDB4NTcsIDB4NDEsCisgICAgICAgIDB4RjIsIDB4NzEsIDB4NkQsIDB4QjcsIDB4RDIsIDB4NDUsIDB4NDEsIDB4MjcsIDB4MDEsIDB4NjUsCisgICAgICAgIDB4QzYsIDB4NDUsIDB4QUUsIDB4RjIsIDB4QkMsIDB4MjQsIDB4MzAsIDB4QjgsIDB4OTUsIDB4Q0UsCisgICAgICAgIDB4MkYsIDB4NEUsIDB4RDYsIDB4RjYsIDB4MUMsIDB4ODgsIDB4QkMsIDB4N0MsIDB4OUYsIDB4RkIsCisgICAgICAgIDB4QTgsIDB4NjcsIDB4N0YsIDB4RkUsIDB4NUMsIDB4OUMsIDB4NTEsIDB4NzUsIDB4RjcsIDB4OEEsCisgICAgICAgIDB4Q0EsIDB4MDcsIDB4RTcsIDB4MzUsIDB4MkYsIDB4OEYsIDB4RTEsIDB4QkQsIDB4N0IsIDB4QzAsCisgICAgICAgIDB4MkYsIDB4N0MsIDB4QUIsIDB4NjQsIDB4QTgsIDB4MTcsIDB4RkMsIDB4Q0EsIDB4NUQsIDB4N0IsCisgICAgICAgIDB4QkEsIDB4RTAsIDB4MjEsIDB4RTUsIDB4NzIsIDB4MkUsIDB4NkYsIDB4MkUsIDB4ODYsIDB4RDgsCisgICAgICAgIDB4OTUsIDB4NzMsIDB4REEsIDB4QUMsIDB4MUIsIDB4NTMsIDB4QjksIDB4NUYsIDB4M0YsIDB4RDcsCisgICAgICAgIDB4MTksIDB4MEQsIDB4MjUsIDB4NEYsIDB4RTEsIDB4NjMsIDB4NjMsIDB4NTEsIDB4OEIsIDB4MEIsCisgICAgICAgIDB4NjQsIDB4M0YsIDB4QUQsIDB4NDMsIDB4QjgsIDB4QTUsIDB4MUMsIDB4NUMsIDB4MzQsIDB4QjMsCisgICAgICAgIDB4QUUsIDB4MDAsIDB4QTAsIDB4NjMsIDB4QzUsIDB4RjYsIDB4N0YsIDB4MEIsIDB4NTksIDB4NjgsCisgICAgICAgIDB4NzgsIDB4NzMsIDB4QTYsIDB4OEMsIDB4MTgsIDB4QTksIDB4MDIsIDB4NkQsIDB4QUYsIDB4QzMsCisgICAgICAgIDB4MTksIDB4MDEsIDB4MkUsIDB4QjgsIDB4MTAsIDB4RTMsIDB4QzYsIDB4Q0MsIDB4NDAsIDB4QjQsCisgICAgICAgIDB4NjksIDB4QTMsIDB4NDYsIDB4MzMsIDB4NjksIDB4ODcsIDB4NkUsIDB4QzQsIDB4QkIsIDB4MTcsCisgICAgICAgIDB4QTYsIDB4RjMsIDB4RTgsIDB4REQsIDB4QUQsIDB4NzMsIDB4QkMsIDB4N0IsIDB4MkYsIDB4MjEsCisgICAgICAgIDB4QjUsIDB4RkQsIDB4NjYsIDB4NTEsIDB4MEMsIDB4QkQsIDB4NTQsIDB4QjMsIDB4RTEsIDB4NkQsCisgICAgICAgIDB4NUYsIDB4MUMsIDB4QkMsIDB4MjMsIDB4NzMsIDB4RDEsIDB4MDksIDB4MDMsIDB4ODksIDB4MTQsCisgICAgICAgIDB4RDIsIDB4MTAsIDB4QjksIDB4NjQsIDB4QzMsIDB4MkEsIDB4RDAsIDB4QTEsIDB4OTYsIDB4NEEsCisgICAgICAgIDB4QkMsIDB4RTEsIDB4RDQsIDB4MUEsIDB4NUIsIDB4QzcsIDB4QTAsIDB4QzAsIDB4QzEsIDB4NjMsCisgICAgICAgIDB4NzgsIDB4MEYsIDB4NDQsIDB4MzcsIDB4MzAsIDB4MzIsIDB4OTYsIDB4ODAsIDB4MzIsIDB4MjMsCisgICAgICAgIDB4OTUsIDB4QTEsIDB4NzcsIDB4QkEsIDB4MTMsIDB4RDIsIDB4OTcsIDB4NzMsIDB4RTIsIDB4NUQsCisgICAgICAgIDB4MjUsIDB4QzksIDB4NkEsIDB4MEQsIDB4QzMsIDB4MzksIDB4NjAsIDB4QTQsIDB4QjQsIDB4QjAsCisgICAgICAgIDB4NjksIDB4NDIsIDB4NDIsIDB4MDksIDB4RTksIDB4RDgsIDB4MDgsIDB4QkMsIDB4MzMsIDB4MjAsCisgICAgICAgIDB4QjMsIDB4NTgsIDB4MjIsIDB4QTcsIDB4QUEsIDB4RUIsIDB4QzQsIDB4RTEsIDB4RTYsIDB4NjEsCisgICAgICAgIDB4ODMsIDB4QzUsIDB4RDIsIDB4OTYsIDB4REYsIDB4RDksIDB4RDAsIDB4NEYsIDB4QUQsIDB4RDcsCisgICAgICAgIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4QTMsIDB4ODIsIDB4MDEsIDB4M0EsIDB4MzAsCisgICAgICAgIDB4ODIsIDB4MDEsIDB4MzYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MEUsCisgICAgICAgIDB4MDQsIDB4MTYsIDB4MDQsIDB4MTQsIDB4QjMsIDB4MTEsIDB4MzIsIDB4QzksIDB4OTIsIDB4OTgsCisgICAgICAgIDB4ODQsIDB4RTIsIDB4QzksIDB4RjgsIDB4RDAsIDB4M0IsIDB4NkUsIDB4MDMsIDB4NDIsIDB4Q0EsCisgICAgICAgIDB4MUYsIDB4MEUsIDB4OEUsIDB4M0MsIDB4MzAsIDB4ODEsIDB4QzksIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MUQsIDB4MjMsIDB4MDQsIDB4ODEsIDB4QzEsIDB4MzAsIDB4ODEsIDB4QkUsIDB4ODAsIDB4MTQsCisgICAgICAgIDB4MjcsIDB4OEUsIDB4NjcsIDB4MTEsIDB4NzQsIDB4QzMsIDB4MjYsIDB4MUQsIDB4M0YsIDB4RUQsCisgICAgICAgIDB4MzMsIDB4NjMsIDB4QjMsIDB4QTQsIDB4RDgsIDB4MUQsIDB4MzAsIDB4RTUsIDB4RTgsIDB4RDUsCisgICAgICAgIDB4QTEsIDB4ODEsIDB4OUEsIDB4QTQsIDB4ODEsIDB4OTcsIDB4MzAsIDB4ODEsIDB4OTQsIDB4MzEsCisgICAgICAgIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsCisgICAgICAgIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MDgsIDB4MEMsIDB4MDcsIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsIDB4NjEsIDB4NkUsIDB4NjEsCisgICAgICAgIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsCisgICAgICAgIDB4MDcsIDB4NDIsIDB4NkYsIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsIDB4NkUsIDB4MzEsIDB4MTEsCisgICAgICAgIDB4MzAsIDB4MEYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MDgsIDB4NTMsCisgICAgICAgIDB4NjEsIDB4NzcsIDB4NzQsIDB4NkYsIDB4NkYsIDB4NzQsIDB4NjgsIDB4MzEsIDB4MTMsIDB4MzAsCisgICAgICAgIDB4MTEsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MEEsIDB4NDMsIDB4NkYsCisgICAgICAgIDB4NkUsIDB4NzMsIDB4NzUsIDB4NkMsIDB4NzQsIDB4NjksIDB4NkUsIDB4NjcsIDB4MzEsIDB4MTgsCisgICAgICAgIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsCisgICAgICAgIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsCisgICAgICAgIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksCisgICAgICAgIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsCisgICAgICAgIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsCisgICAgICAgIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4ODIsIDB4MDksIDB4MDAsCisgICAgICAgIDB4QUEsIDB4RDMsIDB4M0YsIDB4QUMsIDB4MTgsIDB4MEEsIDB4MzcsIDB4NEQsIDB4MzAsIDB4MEMsCisgICAgICAgIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MzAsIDB4MDMsIDB4MDEsCisgICAgICAgIDB4MDEsIDB4RkYsIDB4MzAsIDB4MUMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MTEsIDB4MDQsCisgICAgICAgIDB4MTUsIDB4MzAsIDB4MTMsIDB4ODIsIDB4MEIsIDB4NjUsIDB4NzgsIDB4NjEsIDB4NkQsIDB4NzAsCisgICAgICAgIDB4NkMsIDB4NjUsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4ODcsIDB4MDQsIDB4N0YsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDEsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MjUsIDB4MDQsCisgICAgICAgIDB4MTYsIDB4MzAsIDB4MTQsIDB4MDYsIDB4MDgsIDB4MkIsIDB4MDYsIDB4MDEsIDB4MDUsIDB4MDUsCisgICAgICAgIDB4MDcsIDB4MDMsIDB4MDEsIDB4MDYsIDB4MDgsIDB4MkIsIDB4MDYsIDB4MDEsIDB4MDUsIDB4MDUsCisgICAgICAgIDB4MDcsIDB4MDMsIDB4MDIsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsCisgICAgICAgIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MEIsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODIsCisgICAgICAgIDB4MDEsIDB4MDEsIDB4MDAsIDB4MUIsIDB4MEQsIDB4QTYsIDB4NDQsIDB4OTMsIDB4MEQsIDB4MEUsCisgICAgICAgIDB4MEMsIDB4MzUsIDB4MjgsIDB4MjYsIDB4NDAsIDB4MzEsIDB4RDIsIDB4RUIsIDB4MjYsIDB4NEMsCisgICAgICAgIDB4NDcsIDB4NUIsIDB4MTksIDB4RkIsIDB4QUQsIDB4RkUsIDB4M0EsIDB4RjUsIDB4MzAsIDB4M0EsCisgICAgICAgIDB4MjgsIDB4RDcsIDB4QUEsIDB4NjksIDB4QTQsIDB4MTUsIDB4RTcsIDB4MjYsIDB4NkUsIDB4QjcsCisgICAgICAgIDB4MzMsIDB4NTYsIDB4QUMsIDB4OEYsIDB4MzQsIDB4M0QsIDB4RjMsIDB4MjEsIDB4MkYsIDB4NTMsCisgICAgICAgIDB4NTgsIDB4OTEsIDB4RDAsIDB4M0UsIDB4QjQsIDB4MzksIDB4NDgsIDB4QkYsIDB4OTMsIDB4MTEsCisgICAgICAgIDB4NzQsIDB4MzYsIDB4RDMsIDB4ODcsIDB4NDksIDB4QzMsIDB4MzQsIDB4MEQsIDB4MzAsIDB4MzAsCisgICAgICAgIDB4QUIsIDB4RjQsIDB4NEMsIDB4MjcsIDB4MTksIDB4RDUsIDB4QzQsIDB4MEMsIDB4QUQsIDB4NDksCisgICAgICAgIDB4QkQsIDB4OTEsIDB4RjgsIDB4REEsIDB4OUUsIDB4QzgsIDB4MkQsIDB4MkEsIDB4QUMsIDB4RTIsCisgICAgICAgIDB4NzUsIDB4OEUsIDB4QUEsIDB4MDgsIDB4RDksIDB4QkYsIDB4NjUsIDB4RkYsIDB4QTMsIDB4QjEsCisgICAgICAgIDB4NEYsIDB4RjAsIDB4NjAsIDB4NkYsIDB4NEQsIDB4OTUsIDB4QzQsIDB4MDYsIDB4N0YsIDB4QUYsCisgICAgICAgIDB4NjYsIDB4NkEsIDB4MjMsIDB4M0IsIDB4M0EsIDB4QTQsIDB4NjEsIDB4QjYsIDB4NkMsIDB4Q0EsCisgICAgICAgIDB4QkUsIDB4RTEsIDB4QjAsIDB4NzcsIDB4RjMsIDB4RUMsIDB4ODMsIDB4RDUsIDB4OEMsIDB4MUQsCisgICAgICAgIDB4ODUsIDB4N0YsIDB4OEQsIDB4NzQsIDB4QzgsIDB4RUMsIDB4MUUsIDB4NDksIDB4RUMsIDB4NTcsCisgICAgICAgIDB4NEEsIDB4Q0MsIDB4RkQsIDB4RTIsIDB4M0EsIDB4M0UsIDB4NTQsIDB4NTAsIDB4QUUsIDB4NjcsCisgICAgICAgIDB4Q0QsIDB4MTcsIDB4QjAsIDB4NjcsIDB4QTUsIDB4NTMsIDB4N0YsIDB4QzMsIDB4MEUsIDB4M0UsCisgICAgICAgIDB4QTcsIDB4NTgsIDB4RTgsIDB4REYsIDB4RDUsIDB4MEMsIDB4RjIsIDB4NjQsIDB4RjMsIDB4QUQsCisgICAgICAgIDB4MTIsIDB4NzAsIDB4RTMsIDB4QjksIDB4NDIsIDB4QkMsIDB4MDgsIDB4NjAsIDB4NzYsIDB4RDUsCisgICAgICAgIDB4MEMsIDB4QTUsIDB4MzEsIDB4NzcsIDB4NTAsIDB4RTAsIDB4QzgsIDB4RjMsIDB4M0EsIDB4M0QsCisgICAgICAgIDB4NDUsIDB4Q0YsIDB4MzIsIDB4NzUsIDB4RUYsIDB4MTAsIDB4REQsIDB4QjUsIDB4RUQsIDB4NkUsCisgICAgICAgIDB4RDIsIDB4MkQsIDB4NTcsIDB4ODIsIDB4OTUsIDB4MzgsIDB4QkMsIDB4N0QsIDB4NTQsIDB4QzQsCisgICAgICAgIDB4ODQsIDB4NUUsIDB4RkIsIDB4N0UsIDB4ODMsIDB4RjUsIDB4RjEsIDB4MkQsIDB4OUMsIDB4OTgsCisgICAgICAgIDB4QUMsIDB4NzMsIDB4RTMsIDB4QTcsIDB4RDIsIDB4MDIsIDB4MzAsIDB4RDYsIDB4MUYsIDB4MDYsCisgICAgICAgIDB4MUUsIDB4RDAsIDB4REMsIDB4M0EsIDB4QUMsIDB4RjQsIDB4QzIsIDB4QzIsIDB4QkUsIDB4NzIsCisgICAgICAgIDB4NDAsIDB4OUEsIDB4RUEsIDB4Q0YsIDB4MzUsIDB4MjEsIDB4M0IsIDB4NTYsIDB4NkQsIDB4RTEsCisgICAgICAgIDB4NTIsIDB4RjIsIDB4ODAsIDB4RDcsIDB4MzUsIDB4ODMsIDB4OTcsIDB4MDcsIDB4Q0MKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9zZXJ2ZXJfY2VydF9kZXJfMjA0OCA9IHNpemVvZihzZXJ2ZXJfY2VydF9kZXJfMjA0OCk7CisKKyNlbmRpZiAvKiBVU0VfQ0VSVF9CVUZGRVJTXzIwNDggKi8KKworI2lmZGVmIFVTRV9DRVJUX0JVRkZFUlNfMzA3MgorCisvKiAuL2NlcnRzL2RoMzA3Mi5kZXIsIDMwNzItYml0ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF9rZXlfZGVyXzMwNzJbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDEsIDB4ODgsIDB4MDIsIDB4ODIsIDB4MDEsIDB4ODEsIDB4MDAsIDB4ODksCisgICAgICAgIDB4MUIsIDB4NzUsIDB4M0YsIDB4ODQsIDB4QjYsIDB4MTEsIDB4RUQsIDB4MjEsIDB4RjEsIDB4MDgsCisgICAgICAgIDB4MEYsIDB4QjgsIDB4MDYsIDB4QzksIDB4QTMsIDB4QzksIDB4NDEsIDB4REIsIDB4NUEsIDB4QzgsCisgICAgICAgIDB4RjgsIDB4ODIsIDB4NzMsIDB4MEYsIDB4RUIsIDB4ODksIDB4MUUsIDB4NTQsIDB4MTgsIDB4QkUsCisgICAgICAgIDB4RTYsIDB4NDgsIDB4NDEsIDB4OUUsIDB4RkEsIDB4QzIsIDB4MEMsIDB4NTAsIDB4NjcsIDB4QzMsCisgICAgICAgIDB4NUQsIDB4QjUsIDB4RjUsIDB4MEYsIDB4MjMsIDB4NkEsIDB4NDMsIDB4MzMsIDB4OTEsIDB4RDksCisgICAgICAgIDB4NDAsIDB4RjMsIDB4NjYsIDB4QzYsIDB4OTksIDB4RkYsIDB4OTcsIDB4QjYsIDB4N0IsIDB4QUYsCisgICAgICAgIDB4MjcsIDB4NzIsIDB4M0IsIDB4OUYsIDB4N0UsIDB4NTgsIDB4MTgsIDB4MTQsIDB4OUYsIDB4OTEsCisgICAgICAgIDB4NkUsIDB4MkIsIDB4MTEsIDB4QzEsIDB4NTcsIDB4NDksIDB4MjcsIDB4MzYsIDB4NzgsIDB4RTEsCisgICAgICAgIDB4MDksIDB4NjgsIDB4OUMsIDB4MDUsIDB4NUEsIDB4QUMsIDB4RTYsIDB4MDAsIDB4MzgsIDB4QkUsCisgICAgICAgIDB4OTUsIDB4NzQsIDB4ODEsIDB4NTMsIDB4MjgsIDB4RjAsIDB4QUQsIDB4REYsIDB4QjUsIDB4ODcsCisgICAgICAgIDB4MUMsIDB4NzIsIDB4MTcsIDB4NEUsIDB4RUMsIDB4MDAsIDB4OTEsIDB4MjIsIDB4QUEsIDB4RTQsCisgICAgICAgIDB4ODgsIDB4RDcsIDB4RjUsIDB4M0QsIDB4MUYsIDB4MDMsIDB4MTMsIDB4MkQsIDB4MUMsIDB4RkIsCisgICAgICAgIDB4REUsIDB4NTksIDB4NjgsIDB4QUQsIDB4RTAsIDB4MTcsIDB4QTEsIDB4RUUsIDB4OEQsIDB4Q0MsCisgICAgICAgIDB4QkYsIDB4RkUsIDB4Q0YsIDB4MjQsIDB4NDIsIDB4RUQsIDB4MjYsIDB4REQsIDB4MjksIDB4RDAsCisgICAgICAgIDB4NEUsIDB4NjIsIDB4M0MsIDB4ODUsIDB4MzYsIDB4MUIsIDB4NUYsIDB4NkEsIDB4NDcsIDB4ODgsCisgICAgICAgIDB4MjEsIDB4RTUsIDB4MUIsIDB4ODUsIDB4MEEsIDB4MkMsIDB4RTksIDB4MkYsIDB4RTAsIDB4MjAsCisgICAgICAgIDB4RkMsIDB4MUQsIDB4Q0QsIDB4NTUsIDB4NjYsIDB4RjUsIDB4QUMsIDB4MzIsIDB4MDAsIDB4OEUsCisgICAgICAgIDB4QTMsIDB4RTksIDB4RUQsIDB4RkIsIDB4MzUsIDB4QTcsIDB4RTYsIDB4NzYsIDB4NTMsIDB4NDIsCisgICAgICAgIDB4QzYsIDB4NzcsIDB4NzcsIDB4QUIsIDB4OTAsIDB4OTksIDB4N0MsIDB4QzIsIDB4RUMsIDB4QzksCisgICAgICAgIDB4MTgsIDB4NEEsIDB4M0MsIDB4RjQsIDB4MTEsIDB4NzUsIDB4MjcsIDB4ODMsIDB4QkQsIDB4OUUsCisgICAgICAgIDB4QzIsIDB4OEYsIDB4MjMsIDB4QUIsIDB4NTIsIDB4NDYsIDB4RTIsIDB4NTIsIDB4NUQsIDB4OUEsCisgICAgICAgIDB4MDQsIDB4QzMsIDB4MTUsIDB4MUYsIDB4NjksIDB4OUMsIDB4NzIsIDB4NjksIDB4NTksIDB4NTIsCisgICAgICAgIDB4RDQsIDB4NjksIDB4M0QsIDB4MTksIDB4NzcsIDB4MzYsIDB4MjUsIDB4QUYsIDB4MDcsIDB4NzEsCisgICAgICAgIDB4ODIsIDB4REUsIDB4QjcsIDB4MjQsIDB4NjAsIDB4ODIsIDB4NkEsIDB4NzIsIDB4QkIsIDB4RUQsCisgICAgICAgIDB4QjYsIDB4NzYsIDB4QUUsIDB4N0UsIDB4QkMsIDB4N0QsIDB4MkYsIDB4NzMsIDB4NEIsIDB4MDQsCisgICAgICAgIDB4MTYsIDB4RDUsIDB4QTQsIDB4RjMsIDB4MDMsIDB4MjYsIDB4RkIsIDB4RjMsIDB4Q0QsIDB4N0IsCisgICAgICAgIDB4NzcsIDB4N0UsIDB4N0MsIDB4OEQsIDB4NjUsIDB4QUUsIDB4QTUsIDB4REMsIDB4NkMsIDB4RTMsCisgICAgICAgIDB4NzAsIDB4RDIsIDB4MjksIDB4NkIsIDB4RjIsIDB4RUIsIDB4NzYsIDB4QzksIDB4RTUsIDB4NDYsCisgICAgICAgIDB4MTgsIDB4MTIsIDB4NTcsIDB4QjAsIDB4NTUsIDB4QTUsIDB4N0MsIDB4Q0QsIDB4NDEsIDB4OTMsCisgICAgICAgIDB4MjYsIDB4OTksIDB4RjcsIDB4QTUsIDB4QzUsIDB4MzQsIDB4QkUsIDB4NTksIDB4NzksIDB4REUsCisgICAgICAgIDB4MEEsIDB4NTcsIDB4NUYsIDB4MjEsIDB4RjgsIDB4OTgsIDB4NTIsIDB4RjAsIDB4MkYsIDB4N0IsCisgICAgICAgIDB4NTcsIDB4QjYsIDB4OUQsIDB4RkMsIDB4NDAsIDB4QTYsIDB4NTUsIDB4RkIsIDB4QUYsIDB4RDksCisgICAgICAgIDB4MTYsIDB4OUIsIDB4MjAsIDB4NEYsIDB4QTgsIDB4QTMsIDB4MEIsIDB4MDQsIDB4NDgsIDB4RTMsCisgICAgICAgIDB4NzcsIDB4MjIsIDB4QzQsIDB4Q0MsIDB4NTcsIDB4MTQsIDB4MzMsIDB4QTIsIDB4RjAsIDB4OUEsCisgICAgICAgIDB4RTMsIDB4MTIsIDB4QkQsIDB4RkYsIDB4NzIsIDB4OEIsIDB4RUUsIDB4NTIsIDB4RjMsIDB4QzksCisgICAgICAgIDB4NTksIDB4QzIsIDB4QTIsIDB4NkIsIDB4QTUsIDB4NzUsIDB4NDgsIDB4NTEsIDB4ODIsIDB4MEUsCisgICAgICAgIDB4N0EsIDB4RkYsIDB4RkUsIDB4NDEsIDB4Q0QsIDB4N0MsIDB4NjMsIDB4RDIsIDB4NTMsIDB4QTgsCisgICAgICAgIDB4MTEsIDB4MDMsIDB4QjksIDB4MDMsIDB4MDcsIDB4RkUsIDB4NjYsIDB4MzgsIDB4NUYsIDB4QTIsCisgICAgICAgIDB4M0UsIDB4OUMsIDB4MUIsIDB4MDIsIDB4MDEsIDB4MDIKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9kaF9rZXlfZGVyXzMwNzIgPSBzaXplb2YoZGhfa2V5X2Rlcl8zMDcyKTsKKworLyogLi9jZXJ0cy9kc2EzMDcyLmRlciwgMzA3Mi1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV9rZXlfZGVyXzMwNzJbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDQsIDB4RDcsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODIsIDB4MDEsCisgICAgICAgIDB4ODEsIDB4MDAsIDB4QjUsIDB4RDAsIDB4MkYsIDB4NTUsIDB4QzEsIDB4MjcsIDB4NEMsIDB4NUIsCisgICAgICAgIDB4MjgsIDB4ODEsIDB4NEUsIDB4QTQsIDB4MzIsIDB4MEQsIDB4NzMsIDB4NTQsIDB4NjgsIDB4NEYsCisgICAgICAgIDB4MEEsIDB4MzYsIDB4NjgsIDB4NEEsIDB4NTEsIDB4QkUsIDB4REUsIDB4NDksIDB4RDQsIDB4OUQsCisgICAgICAgIDB4Q0UsIDB4QzYsIDB4RjcsIDB4MDEsIDB4NzAsIDB4RDIsIDB4ODgsIDB4OTAsIDB4MUQsIDB4NjAsCisgICAgICAgIDB4MzAsIDB4OUIsIDB4MEEsIDB4OUMsIDB4MjMsIDB4REEsIDB4RTAsIDB4NzQsIDB4NDYsIDB4NUIsCisgICAgICAgIDB4QzcsIDB4NDEsIDB4NDAsIDB4NUMsIDB4RDksIDB4N0EsIDB4QkUsIDB4NzgsIDB4Q0EsIDB4NDksCisgICAgICAgIDB4RjUsIDB4MkQsIDB4N0IsIDB4RDcsIDB4QkYsIDB4NjcsIDB4MEQsIDB4ODQsIDB4MjgsIDB4QkIsCisgICAgICAgIDB4OUQsIDB4QzIsIDB4QUIsIDB4MjMsIDB4MDYsIDB4MjgsIDB4MEMsIDB4OTgsIDB4NDYsIDB4NDMsCisgICAgICAgIDB4Q0UsIDB4NkYsIDB4OUUsIDB4RDAsIDB4RTksIDB4MEUsIDB4RjMsIDB4N0UsIDB4MzAsIDB4NUQsCisgICAgICAgIDB4RDMsIDB4NDUsIDB4NDQsIDB4N0IsIDB4MEMsIDB4N0EsIDB4NzMsIDB4QTYsIDB4OTUsIDB4NjUsCisgICAgICAgIDB4QUEsIDB4OEIsIDB4RDgsIDB4NzUsIDB4NkEsIDB4MTEsIDB4QjMsIDB4MTAsIDB4N0MsIDB4NTcsCisgICAgICAgIDB4QUYsIDB4Q0UsIDB4QkUsIDB4NUIsIDB4RjcsIDB4QzgsIDB4RkUsIDB4NDIsIDB4QTMsIDB4NzcsCisgICAgICAgIDB4QjcsIDB4MEIsIDB4M0QsIDB4NjYsIDB4QjUsIDB4MDgsIDB4NzQsIDB4MjIsIDB4NzQsIDB4MjYsCisgICAgICAgIDB4RTYsIDB4REIsIDB4OEUsIDB4RUYsIDB4QTMsIDB4OTksIDB4QUUsIDB4MEIsIDB4NDIsIDB4OEMsCisgICAgICAgIDB4NUYsIDB4N0UsIDB4NDgsIDB4RTksIDB4MTksIDB4OTAsIDB4QTgsIDB4MzUsIDB4QTksIDB4RkMsCisgICAgICAgIDB4NDgsIDB4MEQsIDB4QzgsIDB4QjgsIDB4RTQsIDB4MUEsIDB4MEMsIDB4MjYsIDB4QzcsIDB4MUEsCisgICAgICAgIDB4MjAsIDB4MDIsIDB4RUIsIDB4NzIsIDB4MkUsIDB4OTQsIDB4RDYsIDB4MTksIDB4MzQsIDB4MzksCisgICAgICAgIDB4NTUsIDB4NEUsIDB4RkMsIDB4NTMsIDB4NDgsIDB4RDgsIDB4MTAsIDB4ODksIDB4QTEsIDB4NkUsCisgICAgICAgIDB4MjIsIDB4MzksIDB4NzEsIDB4MTUsIDB4QTYsIDB4MTMsIDB4QkMsIDB4NzcsIDB4NDksIDB4NTMsCisgICAgICAgIDB4Q0IsIDB4MTYsIDB4NEIsIDB4NTYsIDB4M0QsIDB4MDgsIDB4QTIsIDB4NzEsIDB4MEUsIDB4MDYsCisgICAgICAgIDB4MEMsIDB4M0EsIDB4REUsIDB4ODIsIDB4QzAsIDB4REYsIDB4RTcsIDB4OTYsIDB4NTcsIDB4RDcsCisgICAgICAgIDB4M0YsIDB4NkIsIDB4RjAsIDB4QUUsIDB4RDEsIDB4MzgsIDB4QjgsIDB4NUIsIDB4ODMsIDB4NzcsCisgICAgICAgIDB4OEIsIDB4RUIsIDB4MkIsIDB4REEsIDB4MzgsIDB4QzgsIDB4NEMsIDB4QTksIDB4NDgsIDB4NTIsCisgICAgICAgIDB4RDgsIDB4NDEsIDB4MDMsIDB4RDMsIDB4MTEsIDB4MUMsIDB4NjYsIDB4OUUsIDB4REUsIDB4QzksCisgICAgICAgIDB4NzgsIDB4NUEsIDB4RTEsIDB4N0IsIDB4RUEsIDB4NkYsIDB4RDYsIDB4Q0EsIDB4NkEsIDB4MkYsCisgICAgICAgIDB4MDEsIDB4QjIsIDB4ODMsIDB4MzcsIDB4MjUsIDB4RDksIDB4OUMsIDB4RDQsIDB4QjAsIDB4MjEsCisgICAgICAgIDB4RDksIDB4OEYsIDB4QTYsIDB4RjgsIDB4RDYsIDB4MjEsIDB4ODIsIDB4QkIsIDB4MDgsIDB4NjQsCisgICAgICAgIDB4MjgsIDB4MEUsIDB4MEMsIDB4MjYsIDB4RTYsIDB4QTUsIDB4NjksIDB4RTAsIDB4MjMsIDB4RTksCisgICAgICAgIDB4QjMsIDB4QzQsIDB4RjksIDB4REUsIDB4QzYsIDB4RDYsIDB4MzIsIDB4MDAsIDB4NjYsIDB4OUIsCisgICAgICAgIDB4OEEsIDB4MEIsIDB4NkYsIDB4REUsIDB4QjgsIDB4REQsIDB4NjgsIDB4N0YsIDB4OUQsIDB4NjgsCisgICAgICAgIDB4NTksIDB4NkIsIDB4NTUsIDB4RDksIDB4NTMsIDB4MDEsIDB4N0IsIDB4MUEsIDB4MUMsIDB4OEQsCisgICAgICAgIDB4QkYsIDB4QUYsIDB4QzAsIDB4QjEsIDB4MTQsIDB4OUUsIDB4QzEsIDB4OEQsIDB4M0UsIDB4MUUsCisgICAgICAgIDB4RkIsIDB4NDAsIDB4RjksIDB4NkQsIDB4NDgsIDB4NDMsIDB4Q0QsIDB4NkMsIDB4RTgsIDB4QkMsCisgICAgICAgIDB4M0MsIDB4N0MsIDB4MzUsIDB4M0MsIDB4NjUsIDB4NkQsIDB4QTAsIDB4MjUsIDB4ODcsIDB4QkYsCisgICAgICAgIDB4RUMsIDB4OUIsIDB4MTIsIDB4NzQsIDB4NDgsIDB4QzgsIDB4RTQsIDB4QkYsIDB4NTMsIDB4NTMsCisgICAgICAgIDB4NDcsIDB4NzgsIDB4RDksIDB4OUIsIDB4MUEsIDB4QTUsIDB4MDcsIDB4NDYsIDB4MTUsIDB4MTYsCisgICAgICAgIDB4RDIsIDB4MzMsIDB4OTMsIDB4Q0MsIDB4NDEsIDB4OUIsIDB4QjcsIDB4MjIsIDB4REYsIDB4MDcsCisgICAgICAgIDB4REQsIDB4NzIsIDB4QzYsIDB4MUEsIDB4OUIsIDB4OTIsIDB4RTcsIDB4MzIsIDB4MDQsIDB4QUIsCisgICAgICAgIDB4OTQsIDB4ODAsIDB4QkQsIDB4NTgsIDB4RjIsIDB4MzUsIDB4MDIsIDB4MjEsIDB4MDAsIDB4OUEsCisgICAgICAgIDB4REQsIDB4OTgsIDB4MUEsIDB4NkYsIDB4RUEsIDB4QjUsIDB4OEIsIDB4QzksIDB4NjgsIDB4MTgsCisgICAgICAgIDB4ODEsIDB4RTQsIDB4NEMsIDB4RkQsIDB4OEUsIDB4NDUsIDB4Q0YsIDB4NUYsIDB4MEUsIDB4NjIsCisgICAgICAgIDB4MUUsIDB4N0QsIDB4MkQsIDB4NEEsIDB4NEMsIDB4NUQsIDB4N0YsIDB4RjgsIDB4RDgsIDB4NTIsCisgICAgICAgIDB4RDcsIDB4MDIsIDB4ODIsIDB4MDEsIDB4ODEsIDB4MDAsIDB4ODQsIDB4REYsIDB4QUIsIDB4OTEsCisgICAgICAgIDB4NjEsIDB4RTQsIDB4MkIsIDB4MDcsIDB4MEEsIDB4MUMsIDB4QzcsIDB4OUMsIDB4RDcsIDB4QUMsCisgICAgICAgIDB4OEQsIDB4QTUsIDB4QUEsIDB4NDEsIDB4NjUsIDB4OUUsIDB4NEEsIDB4RUQsIDB4MjEsIDB4NDUsCisgICAgICAgIDB4OTYsIDB4RjcsIDB4RjcsIDB4Q0IsIDB4N0EsIDB4ODgsIDB4MTksIDB4MEYsIDB4MzYsIDB4ODAsCisgICAgICAgIDB4MjUsIDB4MkYsIDB4MjMsIDB4MEQsIDB4RkYsIDB4NkMsIDB4MEQsIDB4MDIsIDB4QkIsIDB4NkEsCisgICAgICAgIDB4NzksIDB4NkEsIDB4Q0IsIDB4MDUsIDB4MDAsIDB4OUIsIDB4NzcsIDB4RUQsIDB4NkIsIDB4RjMsCisgICAgICAgIDB4QzIsIDB4RUEsIDB4MUEsIDB4REYsIDB4QjgsIDB4MTUsIDB4QTgsIDB4OTIsIDB4MTksIDB4NUEsCisgICAgICAgIDB4NTEsIDB4M0IsIDB4NzYsIDB4MDYsIDB4OTgsIDB4NDcsIDB4QzcsIDB4NkYsIDB4NzYsIDB4OTksCisgICAgICAgIDB4QUQsIDB4NTAsIDB4QzUsIDB4OTgsIDB4RTcsIDB4RkYsIDB4ODgsIDB4QkMsIDB4NDksIDB4NzcsCisgICAgICAgIDB4RUYsIDB4OTYsIDB4NzUsIDB4RTIsIDB4MzYsIDB4NjYsIDB4MUYsIDB4MEMsIDB4RkEsIDB4NTcsCisgICAgICAgIDB4MUUsIDB4MTEsIDB4RkYsIDB4OEYsIDB4M0MsIDB4RDAsIDB4RUEsIDB4OTcsIDB4MjUsIDB4M0YsCisgICAgICAgIDB4RkEsIDB4RDEsIDB4NEYsIDB4QkEsIDB4REYsIDB4RTMsIDB4MzUsIDB4RkIsIDB4NkUsIDB4NUMsCisgICAgICAgIDB4NjUsIDB4RjksIDB4QTIsIDB4MjYsIDB4NDMsIDB4RjIsIDB4RjQsIDB4RTAsIDB4MDUsIDB4M0QsCisgICAgICAgIDB4QzYsIDB4NUIsIDB4QzQsIDB4MjEsIDB4RTcsIDB4QjEsIDB4MDIsIDB4RUIsIDB4RjIsIDB4QTksCisgICAgICAgIDB4MDYsIDB4NUUsIDB4QjcsIDB4MUIsIDB4QzEsIDB4RDgsIDB4ODYsIDB4MzQsIDB4RUQsIDB4ODQsCisgICAgICAgIDB4ODksIDB4Q0UsIDB4Q0UsIDB4QzIsIDB4NjMsIDB4NzgsIDB4NjcsIDB4RjgsIDB4QzMsIDB4QUEsCisgICAgICAgIDB4N0MsIDB4MUMsIDB4NTksIDB4MzIsIDB4RTQsIDB4NzcsIDB4QTIsIDB4MzYsIDB4MzEsIDB4RkUsCisgICAgICAgIDB4NEIsIDB4OUMsIDB4OTgsIDB4Q0UsIDB4MDEsIDB4NTUsIDB4NjEsIDB4Q0UsIDB4MjMsIDB4QUUsCisgICAgICAgIDB4MEYsIDB4N0UsIDB4MjQsIDB4OEIsIDB4NTQsIDB4OEEsIDB4RTQsIDB4Q0IsIDB4OEUsIDB4REMsCisgICAgICAgIDB4N0EsIDB4OTQsIDB4NEMsIDB4RjksIDB4M0MsIDB4RjgsIDB4NjcsIDB4NjgsIDB4OUQsIDB4N0EsCisgICAgICAgIDB4ODIsIDB4QTEsIDB4QTAsIDB4MDEsIDB4QzcsIDB4MUIsIDB4OEQsIDB4QTAsIDB4QzAsIDB4NTMsCisgICAgICAgIDB4MUUsIDB4OTMsIDB4QzcsIDB4ODYsIDB4MTIsIDB4RDMsIDB4MTYsIDB4REMsIDB4MjgsIDB4QTAsCisgICAgICAgIDB4RDEsIDB4MEQsIDB4MUUsIDB4NDIsIDB4OUEsIDB4Q0IsIDB4NTUsIDB4OEMsIDB4MjIsIDB4N0YsCisgICAgICAgIDB4NDEsIDB4QzMsIDB4QzksIDB4MTQsIDB4RjIsIDB4QjAsIDB4NzMsIDB4QTEsIDB4NEQsIDB4NzIsCisgICAgICAgIDB4RkQsIDB4ODgsIDB4QjYsIDB4REUsIDB4RTUsIDB4RjAsIDB4M0MsIDB4M0EsIDB4N0UsIDB4NjgsCisgICAgICAgIDB4M0UsIDB4ODIsIDB4NTgsIDB4NjAsIDB4Q0QsIDB4QjQsIDB4MDgsIDB4NjQsIDB4MTgsIDB4QjIsCisgICAgICAgIDB4MjQsIDB4OTcsIDB4MTMsIDB4QTYsIDB4MDcsIDB4NzUsIDB4QkUsIDB4RTAsIDB4MTQsIDB4OTIsCisgICAgICAgIDB4OUEsIDB4OTgsIDB4NkMsIDB4MDgsIDB4OTQsIDB4RDEsIDB4MEQsIDB4NDgsIDB4NDQsIDB4QzMsCisgICAgICAgIDB4RTMsIDB4RDUsIDB4QzAsIDB4OTMsIDB4NDksIDB4NzksIDB4MkYsIDB4NjcsIDB4MTUsIDB4NzYsCisgICAgICAgIDB4RDgsIDB4OTAsIDB4MTEsIDB4REIsIDB4RUMsIDB4QTcsIDB4RTIsIDB4REIsIDB4RDQsIDB4NEYsCisgICAgICAgIDB4NDksIDB4NUUsIDB4RUYsIDB4QzUsIDB4QjksIDB4NzcsIDB4NjksIDB4REEsIDB4MDIsIDB4QjcsCisgICAgICAgIDB4MjMsIDB4QkMsIDB4RUEsIDB4REMsIDB4ODQsIDB4RDQsIDB4QTUsIDB4NUMsIDB4QTIsIDB4NkMsCisgICAgICAgIDB4QUQsIDB4NEEsIDB4OUYsIDB4RjAsIDB4NjUsIDB4NDgsIDB4RTksIDB4QkYsIDB4REYsIDB4QTUsCisgICAgICAgIDB4QjMsIDB4OTksIDB4RDYsIDB4NzYsIDB4MDgsIDB4ODcsIDB4MkMsIDB4RjIsIDB4MjksIDB4NzksCisgICAgICAgIDB4QjIsIDB4MjAsIDB4N0MsIDB4NkYsIDB4QzEsIDB4QzUsIDB4M0MsIDB4QjAsIDB4NTAsIDB4M0YsCisgICAgICAgIDB4NzIsIDB4QTUsIDB4NTcsIDB4RTMsIDB4QjAsIDB4NjIsIDB4MTgsIDB4ODAsIDB4NzEsIDB4QjksCisgICAgICAgIDB4M0YsIDB4NEQsIDB4NEUsIDB4N0MsIDB4RjYsIDB4MjksIDB4REIsIDB4QjgsIDB4QUQsIDB4RjYsCisgICAgICAgIDB4NDEsIDB4NjksIDB4MDYsIDB4OTAsIDB4NDUsIDB4N0IsIDB4OTUsIDB4MDMsIDB4RTEsIDB4OUUsCisgICAgICAgIDB4QTUsIDB4QTEsIDB4NUEsIDB4RTMsIDB4MDgsIDB4MjYsIDB4NzMsIDB4RkMsIDB4MkIsIDB4MjAsCisgICAgICAgIDB4MDIsIDB4ODIsIDB4MDEsIDB4ODEsIDB4MDAsIDB4QTUsIDB4NTIsIDB4OEYsIDB4NTMsIDB4RjAsCisgICAgICAgIDB4QjksIDB4NEYsIDB4MDYsIDB4QjksIDB4QzgsIDB4QjQsIDB4NTAsIDB4QTQsIDB4MzksIDB4QkEsCisgICAgICAgIDB4MTIsIDB4OTIsIDB4NzUsIDB4MjcsIDB4NDMsIDB4QTgsIDB4MzAsIDB4QTksIDB4RjIsIDB4MkEsCisgICAgICAgIDB4QzYsIDB4OTMsIDB4MjYsIDB4M0MsIDB4OEMsIDB4OUYsIDB4QTIsIDB4NkYsIDB4NTMsIDB4RDksCisgICAgICAgIDB4MTQsIDB4QUIsIDB4M0YsIDB4MDAsIDB4QzYsIDB4MTEsIDB4MTMsIDB4OTAsIDB4NkEsIDB4NDIsCisgICAgICAgIDB4RjIsIDB4OUQsIDB4QTMsIDB4OEYsIDB4MzEsIDB4MzIsIDB4NDYsIDB4NzMsIDB4QTMsIDB4OTMsCisgICAgICAgIDB4NTcsIDB4NUQsIDB4NzYsIDB4NDUsIDB4NDksIDB4NkMsIDB4QkQsIDB4RUEsIDB4QUYsIDB4QUEsCisgICAgICAgIDB4QjMsIDB4NTUsIDB4MjUsIDB4MTEsIDB4OEUsIDB4QTUsIDB4MkEsIDB4QjEsIDB4QkEsIDB4QTUsCisgICAgICAgIDB4MDYsIDB4NEEsIDB4NjYsIDB4QUEsIDB4NzgsIDB4OUUsIDB4RjYsIDB4NUMsIDB4MUUsIDB4QjEsCisgICAgICAgIDB4NEEsIDB4Q0EsIDB4NUMsIDB4M0YsIDB4MUQsIDB4MzMsIDB4NzUsIDB4OTEsIDB4RjIsIDB4RjksCisgICAgICAgIDB4NTMsIDB4MTQsIDB4MkYsIDB4REMsIDB4RjAsIDB4NEMsIDB4QTQsIDB4RjQsIDB4NTAsIDB4MDQsCisgICAgICAgIDB4MUYsIDB4RkYsIDB4QzksIDB4MEMsIDB4QzYsIDB4OEEsIDB4MDQsIDB4OEIsIDB4ODAsIDB4ODcsCisgICAgICAgIDB4QTcsIDB4NzAsIDB4NDksIDB4RDcsIDB4RTQsIDB4RTcsIDB4ODMsIDB4RjEsIDB4ODYsIDB4MUEsCisgICAgICAgIDB4QjAsIDB4ODUsIDB4M0MsIDB4NTksIDB4MDQsIDB4OTYsIDB4RDEsIDB4ODUsIDB4NDcsIDB4QTEsCisgICAgICAgIDB4NTcsIDB4N0QsIDB4QzYsIDB4OEUsIDB4NjAsIDB4N0QsIDB4QzYsIDB4RTgsIDB4MTgsIDB4QjMsCisgICAgICAgIDB4MUYsIDB4QjgsIDB4OTksIDB4RjAsIDB4QzQsIDB4RTUsIDB4MUUsIDB4QkMsIDB4MzQsIDB4MDcsCisgICAgICAgIDB4OEUsIDB4NDAsIDB4NTcsIDB4QTUsIDB4OEQsIDB4M0EsIDB4QTMsIDB4ODgsIDB4OTYsIDB4RjEsCisgICAgICAgIDB4QjMsIDB4NjEsIDB4RjEsIDB4MUMsIDB4OTYsIDB4OEEsIDB4QTQsIDB4OUUsIDB4Q0QsIDB4MjEsCisgICAgICAgIDB4QTIsIDB4OTQsIDB4QUUsIDB4NUUsIDB4MUYsIDB4Q0QsIDB4NUIsIDB4NUIsIDB4RTMsIDB4ODgsCisgICAgICAgIDB4MUUsIDB4MTcsIDB4NEEsIDB4NDYsIDB4QUIsIDB4OUMsIDB4RTAsIDB4NTksIDB4MDMsIDB4NEEsCisgICAgICAgIDB4QjgsIDB4QzgsIDB4ODMsIDB4RTcsIDB4RkYsIDB4MzksIDB4MjcsIDB4NjgsIDB4ODAsIDB4QTAsCisgICAgICAgIDB4OEUsIDB4QjMsIDB4QTIsIDB4MDAsIDB4QzYsIDB4MkQsIDB4MkMsIDB4NzYsIDB4QkEsIDB4OTAsCisgICAgICAgIDB4N0MsIDB4MDMsIDB4MUIsIDB4MTksIDB4QzgsIDB4MzMsIDB4QjIsIDB4MTIsIDB4M0EsIDB4QzgsCisgICAgICAgIDB4OEQsIDB4MzIsIDB4RkUsIDB4QzAsIDB4RjksIDB4QTUsIDB4NkEsIDB4NjMsIDB4RTIsIDB4QTQsCisgICAgICAgIDB4MTIsIDB4NDMsIDB4MTksIDB4RjUsIDB4MTQsIDB4RjIsIDB4MjcsIDB4RjgsIDB4MEIsIDB4QkQsCisgICAgICAgIDB4MUEsIDB4MjIsIDB4NjQsIDB4MkQsIDB4QzksIDB4MDUsIDB4RkEsIDB4RDgsIDB4REQsIDB4MTEsCisgICAgICAgIDB4MUEsIDB4RDMsIDB4RjIsIDB4QkMsIDB4OTksIDB4M0EsIDB4Q0QsIDB4MjEsIDB4Q0YsIDB4MTAsCisgICAgICAgIDB4MTQsIDB4MzYsIDB4REYsIDB4RUQsIDB4NjYsIDB4MDIsIDB4MDMsIDB4NEEsIDB4NDIsIDB4NzAsCisgICAgICAgIDB4NzEsIDB4MjIsIDB4QUQsIDB4RTcsIDB4NTMsIDB4OTEsIDB4RjQsIDB4NDAsIDB4OEYsIDB4NzIsCisgICAgICAgIDB4N0UsIDB4NTQsIDB4QTAsIDB4NUQsIDB4NTgsIDB4OTMsIDB4RDYsIDB4RjYsIDB4QkMsIDB4ODcsCisgICAgICAgIDB4MUEsIDB4NjgsIDB4MEYsIDB4QUIsIDB4OTQsIDB4MjAsIDB4NzAsIDB4QzIsIDB4MTEsIDB4QTEsCisgICAgICAgIDB4MTQsIDB4QkMsIDB4MDYsIDB4QTgsIDB4NDQsIDB4QjksIDB4MUYsIDB4MDQsIDB4NDksIDB4N0UsCisgICAgICAgIDB4QjMsIDB4OUEsIDB4NTMsIDB4NDYsIDB4MDUsIDB4NzUsIDB4NUQsIDB4MjksIDB4NzcsIDB4MjgsCisgICAgICAgIDB4QTksIDB4QjEsIDB4REMsIDB4RjEsIDB4MEQsIDB4OEEsIDB4MUMsIDB4NUUsIDB4Q0QsIDB4RDcsCisgICAgICAgIDB4NEMsIDB4MTYsIDB4NkYsIDB4ODgsIDB4QkYsIDB4QjMsIDB4MzQsIDB4RTIsIDB4QUQsIDB4OUEsCisgICAgICAgIDB4QzQsIDB4ODksIDB4RTIsIDB4MkUsIDB4NUMsIDB4MjAsIDB4RTEsIDB4NUYsIDB4MzksIDB4QkYsCisgICAgICAgIDB4QjcsIDB4NDUsIDB4RDMsIDB4MEYsIDB4OTgsIDB4QjAsIDB4RDgsIDB4QzksIDB4MTgsIDB4OTEsCisgICAgICAgIDB4MTcsIDB4MjUsIDB4QkMsIDB4NTMsIDB4NjIsIDB4RkYsIDB4MjcsIDB4ODUsIDB4QkQsIDB4RTIsCisgICAgICAgIDB4RTMsIDB4OUMsIDB4QTgsIDB4MDYsIDB4N0EsIDB4NTQsIDB4RUEsIDB4RkQsIDB4RUEsIDB4MDIsCisgICAgICAgIDB4MjAsIDB4NEMsIDB4QUMsIDB4NjksIDB4NjIsIDB4MDgsIDB4RTUsIDB4Q0QsIDB4MTQsIDB4QzgsCisgICAgICAgIDB4MkQsIDB4NEUsIDB4REYsIDB4MUYsIDB4NjAsIDB4MUQsIDB4OTMsIDB4NDQsIDB4ODYsIDB4NUQsCisgICAgICAgIDB4NzMsIDB4OTksIDB4NDAsIDB4MUIsIDB4REMsIDB4QTksIDB4QkEsIDB4QzQsIDB4MUIsIDB4MTIsCisgICAgICAgIDB4NkMsIDB4RkYsIDB4NTMKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9kc2Ffa2V5X2Rlcl8zMDcyID0gc2l6ZW9mKGRzYV9rZXlfZGVyXzMwNzIpOworCisvKiAuL2NlcnRzL3JzYTMwNzIuZGVyLCAzMDcyLWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcnNhX2tleV9kZXJfMzA3MltdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwNiwgMHhFNCwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMSwKKyAgICAgICAgMHg4MSwgMHgwMCwgMHhCQywgMHg2RCwgMHg2OCwgMHhGRiwgMHhDMCwgMHgwNywgMHgwRSwgMHgwQywKKyAgICAgICAgMHg0QSwgMHhFNiwgMHg3NiwgMHgxRiwgMHg3QSwgMHgyNSwgMHgzQSwgMHg3NSwgMHhBNywgMHhFMiwKKyAgICAgICAgMHhGMSwgMHgxNywgMHgwMCwgMHhGOCwgMHg4NSwgMHhFNiwgMHg4RiwgMHg1OSwgMHgxNCwgMHhBNywKKyAgICAgICAgMHhERSwgMHg4QywgMHg3NCwgMHg0QiwgMHhFQiwgMHg4NSwgMHhFQywgMHg0OSwgMHg5QiwgMHhGRiwKKyAgICAgICAgMHg0QiwgMHg0MywgMHgwQSwgMHgwOCwgMHhBMSwgMHhFQywgMHg2NCwgMHg1OCwgMHg0NywgMHgyOCwKKyAgICAgICAgMHhENSwgMHhDRSwgMHg0OCwgMHhFOSwgMHhDRiwgMHgzNCwgMHhERiwgMHgxNSwgMHgyMCwgMHgzNywKKyAgICAgICAgMHg5OSwgMHgwRSwgMHgzQywgMHg4MSwgMHhCRSwgMHgyRSwgMHhFNCwgMHg2QywgMHhCQiwgMHhERSwKKyAgICAgICAgMHhEMSwgMHg5MywgMHhDNSwgMHhFQywgMHg2QywgMHhDQywgMHg0MCwgMHgwQiwgMHg0NiwgMHhBMSwKKyAgICAgICAgMHhFNiwgMHhDQSwgMHhBMCwgMHhENSwgMHgzQiwgMHg0NCwgMHg0OCwgMHg3OSwgMHg2NywgMHg1MiwKKyAgICAgICAgMHg2RiwgMHhEQSwgMHhFRCwgMHg3MywgMHg4QiwgMHg3QywgMHgzMywgMHhEQSwgMHgxNywgMHg5NiwKKyAgICAgICAgMHhFOCwgMHhBMiwgMHg5MSwgMHgzQywgMHg1NywgMHhERCwgMHhDOSwgMHgyRSwgMHgwMSwgMHg3NCwKKyAgICAgICAgMHg4NywgMHgzMywgMHhBMCwgMHgxMiwgMHg3QywgMHhCQiwgMHhGOSwgMHg1MywgMHhGNCwgMHhDNCwKKyAgICAgICAgMHgzMSwgMHg0OCwgMHg1MywgMHhDQiwgMHhCQiwgMHgzQywgMHg0MiwgMHg0MywgMHgwQywgMHg3QSwKKyAgICAgICAgMHg3QiwgMHhCOCwgMHgyQSwgMHhGQywgMHhEQywgMHg3MCwgMHhENSwgMHg2NCwgMHgxNiwgMHg3NCwKKyAgICAgICAgMHhBOCwgMHg4MCwgMHhERSwgMHgxNiwgMHhFMCwgMHhCMiwgMHg2QywgMHgwNCwgMHg0NywgMHg2QywKKyAgICAgICAgMHgyNSwgMHhBNiwgMHg3RiwgMHhCNCwgMHg3MywgMHg0OSwgMHhCQywgMHhGMywgMHhBRSwgMHhFMywKKyAgICAgICAgMHg5MywgMHgzNiwgMHg4NywgMHgyQiwgMHhCNywgMHg4RiwgMHhCNSwgMHg4OCwgMHg4OCwgMHgyMiwKKyAgICAgICAgMHg0NywgMHhERiwgMHhCRiwgMHg0RCwgMHgzQywgMHgyQSwgMHhCRCwgMHgzRiwgMHgyRiwgMHgxMSwKKyAgICAgICAgMHgyOSwgMHhDQywgMHgxQywgMHgzMywgMHg0MCwgMHg0RSwgMHgyMywgMHhGNiwgMHgyNSwgMHhGMCwKKyAgICAgICAgMHhBRiwgMHgwMiwgMHgxNiwgMHg0OCwgMHhFRCwgMHgxQywgMHhEOCwgMHhDOSwgMHg5MiwgMHgyRiwKKyAgICAgICAgMHg1QiwgMHhBRiwgMHhCQSwgMHhEQiwgMHg2MCwgMHgxRSwgMHgwRSwgMHhFMSwgMHg2NSwgMHg5MSwKKyAgICAgICAgMHg5NiwgMHhGOCwgMHg3RCwgMHg3MywgMHg0QywgMHg3MiwgMHgyMywgMHgzMywgMHhENSwgMHgzMiwKKyAgICAgICAgMHgyQiwgMHgwRiwgMHg0RiwgMHhCQywgMHg4MSwgMHg0NSwgMHg5RSwgMHgzMSwgMHg3NiwgMHhFRiwKKyAgICAgICAgMHhFMSwgMHg3NiwgMHgyRCwgMHgzRiwgMHg4RiwgMHhDNCwgMHgxOSwgMHg4RiwgMHgyNywgMHgyQSwKKyAgICAgICAgMHg4RiwgMHg2RSwgMHg3NiwgMHhDQywgMHhFMCwgMHg1RCwgMHhCMCwgMHg4NiwgMHg2NiwgMHhGRSwKKyAgICAgICAgMHg3MiwgMHhEOSwgMHgwNiwgMHg0MCwgMHhCNiwgMHhDRSwgMHg4NSwgMHhDNiwgMHgyRCwgMHgzNCwKKyAgICAgICAgMHgzMywgMHhBQSwgMHg4RSwgMHhFNSwgMHg1NCwgMHg4RSwgMHhCOCwgMHhCQSwgMHhFRSwgMHg5MiwKKyAgICAgICAgMHgwNywgMHg1RCwgMHhCNSwgMHhGMSwgMHg2NywgMHhCRiwgMHhDQSwgMHhFNCwgMHhDQSwgMHhDQiwKKyAgICAgICAgMHhEOSwgMHgwMSwgMHg3MywgMHgyMiwgMHgwMSwgMHgzMiwgMHgzOSwgMHhGNCwgMHgwQSwgMHhFQywKKyAgICAgICAgMHg1RiwgMHg0QSwgMHgwMCwgMHgxMCwgMHgzRiwgMHgwMSwgMHgzRCwgMHgxNSwgMHhCQiwgMHg1NSwKKyAgICAgICAgMHg5MSwgMHg4MCwgMHhCRSwgMHhEOCwgMHhEMywgMHg1OSwgMHhDQywgMHhCMCwgMHg3QywgMHg1NiwKKyAgICAgICAgMHhGNywgMHhGRiwgMHhFMCwgMHgyOCwgMHg0MCwgMHgwMiwgMHhCMywgMHg5OCwgMHg4QSwgMHg1NCwKKyAgICAgICAgMHg1MiwgMHg2MCwgMHhBNSwgMHgwQiwgMHg5NSwgMHg1MywgMHg4NiwgMHg2QiwgMHhBNCwgMHgzNSwKKyAgICAgICAgMHhDQSwgMHgwNCwgMHhDNywgMHhGQiwgMHgwQSwgMHhDOCwgMHg5RCwgMHg1QSwgMHgxMSwgMHg0MCwKKyAgICAgICAgMHhGNywgMHg2MCwgMHgwNywgMHhCMSwgMHhCMywgMHg0MiwgMHhCNiwgMHg4MCwgMHg4RiwgMHhFNCwKKyAgICAgICAgMHgyNSwgMHhDOSwgMHhFOCwgMHhCQywgMHg4RSwgMHgyMSwgMHgwRCwgMHg0NywgMHhDRiwgMHhCOCwKKyAgICAgICAgMHgzNywgMHgwOSwgMHhBRiwgMHhCRiwgMHgyQywgMHgzNCwgMHgwOSwgMHgyMiwgMHhDMiwgMHg2RSwKKyAgICAgICAgMHgwRCwgMHgwNiwgMHgzMCwgMHg4MCwgMHgxRSwgMHhBNSwgMHg4QSwgMHg0NiwgMHgyRCwgMHhEQywKKyAgICAgICAgMHg1NywgMHhENCwgMHg1NywgMHg4MiwgMHg2QSwgMHgxMSwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwKKyAgICAgICAgMHgwMSwgMHgwMiwgMHg4MiwgMHgwMSwgMHg4MSwgMHgwMCwgMHhBRCwgMHg5OSwgMHhBRiwgMHhDRiwKKyAgICAgICAgMHg1MSwgMHg0MCwgMHgyRSwgMHhCNSwgMHgyQywgMHg5QywgMHhCRiwgMHhERiwgMHhBOCwgMHg0RCwKKyAgICAgICAgMHg3QywgMHg1QSwgMHhDMSwgMHhERSwgMHhEOCwgMHg3OCwgMHg3NSwgMHgzMCwgMHg4MywgMHg0RCwKKyAgICAgICAgMHgzNCwgMHg2QywgMHhDMiwgMHgxNywgMHgxNywgMHg3NywgMHgxNywgMHhGRSwgMHg4QSwgMHg3MywKKyAgICAgICAgMHhDQywgMHg4QSwgMHhENCwgMHhFQSwgMHg5NCwgMHg5MCwgMHhBMywgMHg0MSwgMHhFOCwgMHhDRCwKKyAgICAgICAgMHgzRSwgMHg3NiwgMHgwNiwgMHhCOSwgMHg5QywgMHhBMiwgMHg3RCwgMHg5MiwgMHhDQywgMHg5MCwKKyAgICAgICAgMHhDRCwgMHhBNywgMHg0RCwgMHgxMywgMHg2QywgMHgzNCwgMHgyRCwgMHg5MiwgMHhFQiwgMHg4MSwKKyAgICAgICAgMHg5MCwgMHg3QSwgMHg4RCwgMHg2QywgMHg3MCwgMHg3MiwgMHg1MSwgMHgzQiwgMHhDRCwgMHhEMSwKKyAgICAgICAgMHgzMCwgMHg4MCwgMHgzMywgMHgwNywgMHgxRSwgMHhGNywgMHgzOCwgMHhDRSwgMHhCQiwgMHhENywKKyAgICAgICAgMHhFMSwgMHg1RCwgMHhEOCwgMHhDRiwgMHg5RSwgMHhCNiwgMHg3OSwgMHg2NiwgMHhBNiwgMHhGMCwKKyAgICAgICAgMHgzQiwgMHg2NSwgMHg4NywgMHhBRSwgMHg0NSwgMHg4RSwgMHhFMSwgMHg3OCwgMHg1MywgMHgwQiwKKyAgICAgICAgMHhDNywgMHgzQSwgMHg1NywgMHhBNCwgMHhFMCwgMHg5QiwgMHhCMywgMHhCMiwgMHhENCwgMHhCMCwKKyAgICAgICAgMHhFQSwgMHhCOSwgMHg2QiwgMHgxRCwgMHgwNiwgMHhCQSwgMHhCOCwgMHg1OSwgMHg0RiwgMHg5QiwKKyAgICAgICAgMHhFOSwgMHgwMCwgMHg5NSwgMHgxMiwgMHg5MywgMHhDMSwgMHhDRCwgMHhGOSwgMHg0MSwgMHhBRiwKKyAgICAgICAgMHhDMywgMHgyQSwgMHg3RiwgMHg3NSwgMHhFMywgMHg3OSwgMHgzNywgMHgyNCwgMHhBNCwgMHhDOCwKKyAgICAgICAgMHgzRCwgMHhCNCwgMHg4MywgMHg4OSwgMHgyMywgMHhGNywgMHgwRSwgMHg1OSwgMHg1NiwgMHg4RSwKKyAgICAgICAgMHg2RCwgMHg0MywgMHhBNSwgMHhCMSwgMHg4RSwgMHgwNCwgMHgwMiwgMHhFRCwgMHg0OCwgMHgyNSwKKyAgICAgICAgMHg2MiwgMHhGRSwgMHhGMywgMHg0RCwgMHg4MiwgMHgyMiwgMHhBNiwgMHhDMSwgMHhBNSwgMHhEOSwKKyAgICAgICAgMHg0QSwgMHg5QSwgMHg1NywgMHhFNiwgMHhEQywgMHgzNywgMHg2RCwgMHgxMywgMHhEQSwgMHhGRiwKKyAgICAgICAgMHgyMywgMHgyQSwgMHhCOSwgMHgzMSwgMHhEMiwgMHg0QiwgMHg3RCwgMHhGMywgMHgwMiwgMHg5MCwKKyAgICAgICAgMHhGNiwgMHgyOCwgMHgzRCwgMHg5OCwgMHgzQywgMHhGNiwgMHg0MywgMHg0NSwgMHhBRSwgMHhBQiwKKyAgICAgICAgMHg5MSwgMHgxNSwgMHhDNywgMHhDNCwgMHg5MCwgMHg5QywgMHgzRSwgMHhEQSwgMHhENCwgMHgyMCwKKyAgICAgICAgMHgxMiwgMHhCMiwgMHhFMSwgMHgyQiwgMHg1NiwgMHhFMiwgMHgzOCwgMHgzMiwgMHg5QywgMHhFNiwKKyAgICAgICAgMHhBOSwgMHgxRCwgMHhGRSwgMHhBNSwgMHhFRSwgMHhENywgMHg1MiwgMHhCNCwgMHhFMywgMHhFNCwKKyAgICAgICAgMHg2NSwgMHhFQSwgMHg0MSwgMHg5RCwgMHhENCwgMHg5MSwgMHg4MywgMHg1RCwgMHhGRiwgMHg1MiwKKyAgICAgICAgMHhBNywgMHhDMywgMHg0MiwgMHg5RiwgMHgxNCwgMHg3MCwgMHg5RiwgMHg5OCwgMHgxNCwgMHhCMiwKKyAgICAgICAgMHgzMywgMHhFRSwgMHg0QywgMHg1QSwgMHhDOSwgMHg1RiwgMHgxNiwgMHhGNiwgMHgwNiwgMHhFOSwKKyAgICAgICAgMHhGMywgMHgzOSwgMHhEMiwgMHhDNSwgMHgzMSwgMHg1MywgMHgyQSwgMHgzOSwgMHhFRCwgMHgzQSwKKyAgICAgICAgMHg0RCwgMHgyQSwgMHhDMSwgMHg0QywgMHg4NywgMHg4MiwgMHhDNiwgMHhDQSwgMHhDRiwgMHhGNSwKKyAgICAgICAgMHg5QSwgMHg3MSwgMHgyNywgMHhBRSwgMHhGQiwgMHhGRSwgMHhEMCwgMHg2NiwgMHhEQiwgMHhBQSwKKyAgICAgICAgMHgwMywgMHgxNiwgMHg0QiwgMHhFRiwgMHhCNCwgMHgyOCwgMHhBQiwgMHhDRiwgMHhCRSwgMHg5QiwKKyAgICAgICAgMHg1OCwgMHhDRiwgMHhBNCwgMHg1OCwgMHg4MiwgMHhEMiwgMHgzNywgMHg4QywgMHhFQSwgMHgzRCwKKyAgICAgICAgMHg3NSwgMHg0RCwgMHgwQiwgMHg0NiwgMHg3QSwgMHgwNCwgMHhERSwgMHhGMSwgMHg2RSwgMHhCQiwKKyAgICAgICAgMHgwMywgMHhCRiwgMHhGNywgMHg4RSwgMHhFNiwgMHhGNCwgMHg5QSwgMHhFMSwgMHhDQSwgMHgyNiwKKyAgICAgICAgMHgyQywgMHg0MSwgMHgwOCwgMHhBRCwgMHgyMSwgMHhBNywgMHhDMiwgMHg0MCwgMHhGNSwgMHg5QywKKyAgICAgICAgMHhERCwgMHhBQiwgMHhDNSwgMHg1QSwgMHg0QywgMHhGNCwgMHhFNiwgMHg5QSwgMHg1MCwgMHhGRCwKKyAgICAgICAgMHhBQSwgMHg0NywgMHhENiwgMHhBNiwgMHgwNywgMHgyNSwgMHhCMiwgMHg0QiwgMHg5QywgMHgxRCwKKyAgICAgICAgMHg5MCwgMHhBMiwgMHg0QSwgMHg5OCwgMHhFMCwgMHgwNSwgMHg4QSwgMHg1QywgMHhEMSwgMHgyQywKKyAgICAgICAgMHhDMCwgMHgyOCwgMHhEMSwgMHg4NCwgMHgzQywgMHg3MiwgMHhGRiwgMHg4MywgMHhFQSwgMHhCMSwKKyAgICAgICAgMHgwMiwgMHg4MSwgMHhDMSwgMHgwMCwgMHhGOCwgMHhBMCwgMHg1RiwgMHgyNSwgMHgyRSwgMHgyMywKKyAgICAgICAgMHg3MywgMHgzMCwgMHhCNiwgMHg5NywgMHhBRiwgMHgwOCwgMHhFNywgMHhEMiwgMHhEOCwgMHhDMywKKyAgICAgICAgMHg5NSwgMHhFQSwgMHg5RCwgMHg4RSwgMHg5RiwgMHhGMSwgMHgzNiwgMHg4MSwgMHhENywgMHg3QSwKKyAgICAgICAgMHgyMSwgMHgyQiwgMHg5MCwgMHgzOCwgMHg5QywgMHhBNiwgMHgwOCwgMHg0MCwgMHhFQSwgMHhEMiwKKyAgICAgICAgMHg2RSwgMHgyOSwgMHhCNSwgMHgwQiwgMHgzRSwgMHg5MSwgMHhCMiwgMHgwNCwgMHg5MiwgMHhDRiwKKyAgICAgICAgMHg5NCwgMHhGRiwgMHhBNiwgMHhBNywgMHgxQSwgMHg1RiwgMHg5MywgMHgwQywgMHg4NiwgMHhFNiwKKyAgICAgICAgMHg0QiwgMHg2MSwgMHhENCwgMHg1RSwgMHhENywgMHhFMywgMHg2NiwgMHgwQiwgMHg4MywgMHhEQiwKKyAgICAgICAgMHgxNiwgMHg0OSwgMHgyNywgMHhENSwgMHhBMywgMHhCMywgMHhGNSwgMHg1RCwgMHg4RiwgMHhDOSwKKyAgICAgICAgMHg0OCwgMHgxMCwgMHhENywgMHg3NywgMHgxRSwgMHg3QiwgMHgwMSwgMHhDNCwgMHhGRCwgMHgxNCwKKyAgICAgICAgMHgwQywgMHhBQiwgMHg0MCwgMHhGNywgMHg5QiwgMHgwNywgMHhERSwgMHg1NSwgMHhFRiwgMHgzNiwKKyAgICAgICAgMHg0QywgMHgyMiwgMHgzNywgMHgzNywgMHgwOSwgMHg5RCwgMHgyQSwgMHg3MywgMHhBNiwgMHhBNSwKKyAgICAgICAgMHhGNCwgMHhBRiwgMHgzOSwgMHgyQiwgMHg4NywgMHhCNCwgMHhCMiwgMHgyOCwgMHg5RSwgMHgwOCwKKyAgICAgICAgMHhBNiwgMHhDQSwgMHhCNCwgMHgzOSwgMHg1QSwgMHgzQSwgMHhGQiwgMHg0MSwgMHg5MywgMHhFQywKKyAgICAgICAgMHg0NCwgMHhCQiwgMHhEMiwgMHg3QywgMHgzQiwgMHgyNywgMHgzRSwgMHgyNiwgMHhGRCwgMHg3QiwKKyAgICAgICAgMHgyMCwgMHhGQywgMHg0NCwgMHg2NywgMHhDMCwgMHg4NCwgMHhEMSwgMHhBMCwgMHhDQywgMHhCQiwKKyAgICAgICAgMHgyNiwgMHhDNywgMHgzMiwgMHgwRSwgMHgwMSwgMHg5QiwgMHgyQiwgMHgxRiwgMHg1OCwgMHg4NSwKKyAgICAgICAgMHg1QSwgMHg2QywgMHhEMCwgMHhDMSwgMHhBQywgMHgxNCwgMHg1RSwgMHgwNiwgMHgwNywgMHhDQSwKKyAgICAgICAgMHg2OSwgMHg1MiwgMHhGNSwgMHhBNiwgMHgxNiwgMHg3NSwgMHg0MiwgMHg4QSwgMHhFMSwgMHhCQSwKKyAgICAgICAgMHg4QiwgMHg0NiwgMHgzOCwgMHgxNywgMHg3QiwgMHhGMSwgMHg3RCwgMHg3OSwgMHgxRiwgMHg3RSwKKyAgICAgICAgMHg0QywgMHg2QSwgMHg3NSwgMHhEQywgMHhBOCwgMHgzQiwgMHgwMiwgMHg4MSwgMHhDMSwgMHgwMCwKKyAgICAgICAgMHhDMiwgMHgwMywgMHhGRSwgMHg1NywgMHhERiwgMHgyNiwgMHhEOCwgMHg3OSwgMHhEQywgMHgyQywKKyAgICAgICAgMHg0NywgMHg5QiwgMHg5MiwgMHg5QiwgMHg1MywgMHg0MCwgMHg4MiwgMHhFQywgMHhCRCwgMHgwQiwKKyAgICAgICAgMHhDMCwgMHg5NiwgMHg4OSwgMHgyMSwgMHhDNSwgMHgyNiwgMHg3RSwgMHg3QSwgMHg1OSwgMHhBNywKKyAgICAgICAgMHg4NSwgMHgxMSwgMHhDQywgMHgzOSwgMHgzMywgMHhBNywgMHhFNiwgMHg0MiwgMHg5QywgMHgxMiwKKyAgICAgICAgMHg4MSwgMHhBMCwgMHg4NywgMHhCQywgMHg1NywgMHgwNywgMHhDNCwgMHg1MSwgMHg5MywgMHg1OSwKKyAgICAgICAgMHhDNiwgMHhBQiwgMHgxMSwgMHhDQywgMHhDQiwgMHhDOCwgMHhDMSwgMHg0MCwgMHhERiwgMHhDQiwKKyAgICAgICAgMHhFOCwgMHg0NSwgMHgzMSwgMHgyMCwgMHg5MSwgMHg4OCwgMHg1RiwgMHg3NiwgMHg3NiwgMHhFRSwKKyAgICAgICAgMHgzMCwgMHgzNywgMHhGQSwgMHhBNywgMHgyMiwgMHg3MiwgMHg4MiwgMHg1MCwgMHgzMSwgMHhFOSwKKyAgICAgICAgMHhBMCwgMHg0NCwgMHhDQSwgMHhERCwgMHhENiwgMHhBQywgMHhFQywgMHg4MiwgMHhFOCwgMHg2MiwKKyAgICAgICAgMHhEOCwgMHg0MywgMHhGRCwgMHg3NywgMHgwRiwgMHgxQywgMHgyMywgMHgxMiwgMHg5MSwgMHgxQywKKyAgICAgICAgMHhGRSwgMHg5MywgMHgyQywgMHg4NywgMHg1MiwgMHhCRiwgMHg5NiwgMHg3OSwgMHg1RSwgMHgzQSwKKyAgICAgICAgMHg1QSwgMHgzMywgMHgyOCwgMHgyNywgMHgzRiwgMHgyMCwgMHgyQywgMHhCMywgMHgyNiwgMHhFMiwKKyAgICAgICAgMHgwRCwgMHg0NCwgMHhBOSwgMHgyRiwgMHgzOSwgMHg3QiwgMHg3QiwgMHhBRCwgMHhBMywgMHgyMSwKKyAgICAgICAgMHhEMiwgMHg3RiwgMHgzQywgMHg4OSwgMHg2MywgMHhERCwgMHgxMywgMHhCMSwgMHgyRSwgMHhENiwKKyAgICAgICAgMHgzNCwgMHhGQiwgMHgyQSwgMHg4MywgMHgyOSwgMHhFNywgMHg4QSwgMHg4OCwgMHhENywgMHhBMywKKyAgICAgICAgMHgzOCwgMHgzQywgMHg0MywgMHg2MiwgMHg4RiwgMHg2OSwgMHhGQSwgMHg0QiwgMHgxNSwgMHhCNSwKKyAgICAgICAgMHhGNiwgMHg1OSwgMHg5MCwgMHg2MiwgMHg3RCwgMHhDRiwgMHgxRCwgMHhERCwgMHg0OSwgMHg0MywKKyAgICAgICAgMHgzMywgMHg5NiwgMHhBOSwgMHhGNywgMHg3NiwgMHg5RiwgMHhFNCwgMHgwRCwgMHg2RSwgMHgxQywKKyAgICAgICAgMHhFQSwgMHgxOCwgMHg1QiwgMHhCRCwgMHg1QywgMHg5OCwgMHg5MCwgMHgwOSwgMHhDQSwgMHg1OSwKKyAgICAgICAgMHg5RSwgMHgyMywgMHgwMiwgMHg4MSwgMHhDMCwgMHg2NiwgMHhGRiwgMHg5OSwgMHgyQSwgMHhGRiwKKyAgICAgICAgMHhGOCwgMHgzMywgMHhBQSwgMHg0NCwgMHg5QSwgMHg4NiwgMHgyQSwgMHhCQywgMHg0RiwgMHgzRSwKKyAgICAgICAgMHhGOSwgMHg5NywgMHhDQiwgMHhDMCwgMHg0NSwgMHhFQiwgMHhDMCwgMHhCNCwgMHgwMiwgMHgwQSwKKyAgICAgICAgMHg1MCwgMHg1MCwgMHgxOSwgMHg4OSwgMHhGRiwgMHhDOSwgMHhGNSwgMHg4NiwgMHg4OSwgMHhDRSwKKyAgICAgICAgMHgzRSwgMHgyQSwgMHhFMSwgMHgyMCwgMHg1RCwgMHg2RSwgMHgyOCwgMHg1MSwgMHg4NSwgMHg0RiwKKyAgICAgICAgMHg4NCwgMHhBQiwgMHg4NywgMHg1NSwgMHg3NCwgMHhGOCwgMHg5QSwgMHgwQiwgMHg4MywgMHgyRiwKKyAgICAgICAgMHgwNywgMHg4QywgMHhDNywgMHgxNCwgMHg4MSwgMHhDRSwgMHgxMiwgMHgyOCwgMHg5RSwgMHgzMCwKKyAgICAgICAgMHg5QiwgMHhCQywgMHg5OSwgMHhDNSwgMHhFNCwgMHhERCwgMHg5MiwgMHg5OSwgMHhERCwgMHg4RSwKKyAgICAgICAgMHhDOSwgMHhBNiwgMHgwRiwgMHg0NCwgMHgxMywgMHhENywgMHgwRSwgMHhDMiwgMHg2NiwgMHhFNywKKyAgICAgICAgMHgyOSwgMHgzRCwgMHgyRSwgMHg1RCwgMHgxNSwgMHhCNiwgMHhBNiwgMHgwNSwgMHhENywgMHhCNywKKyAgICAgICAgMHhFNywgMHhEOCwgMHg5NiwgMHg3QywgMHgyNSwgMHg1MiwgMHhEOCwgMHg0NywgMHg1MywgMHhFRCwKKyAgICAgICAgMHhGRiwgMHhFNiwgMHg2NCwgMHgwOCwgMHhERCwgMHgxRCwgMHhCNSwgMHgxRiwgMHhGMSwgMHg2RiwKKyAgICAgICAgMHhCNiwgMHhDOSwgMHhEMiwgMHg0MywgMHhFMywgMHg1NiwgMHg5QywgMHgwNCwgMHhBNiwgMHhFMCwKKyAgICAgICAgMHgyRiwgMHgwQiwgMHgzMiwgMHg3QywgMHgzQSwgMHg3NywgMHgwRiwgMHgwNCwgMHhEMiwgMHg4NiwKKyAgICAgICAgMHg0NCwgMHg1MiwgMHgxRiwgMHhFRiwgMHhGRSwgMHhDMywgMHg2NCwgMHhDMiwgMHhBQiwgMHg0OCwKKyAgICAgICAgMHhFNSwgMHg2NywgMHg2NSwgMHgzMiwgMHgzOSwgMHg1NywgMHgzNCwgMHhGRiwgMHgyMiwgMHg1NywKKyAgICAgICAgMHgzQiwgMHhCNywgMHg4MCwgMHg0OCwgMHhFMywgMHg1MiwgMHhGNCwgMHg4NSwgMHgxNywgMHgxRSwKKyAgICAgICAgMHg3NywgMHgxRSwgMHgzNiwgMHhGRSwgMHgwOSwgMHgzNiwgMHg1OCwgMHg5MSwgMHg5RSwgMHg5MywKKyAgICAgICAgMHg3MSwgMHgwMiwgMHg2RCwgMHhBRSwgMHhBMywgMHgxQiwgMHhGNywgMHhBOSwgMHgzMSwgMHg1QSwKKyAgICAgICAgMHg3OCwgMHhBQSwgMHgxMywgMHg5OCwgMHg4QywgMHgzNywgMHgyRCwgMHgwMiwgMHg4MSwgMHhDMSwKKyAgICAgICAgMHgwMCwgMHhCRSwgMHgwMSwgMHhEOSwgMHgzQSwgMHhDNywgMHg4MSwgMHhBQywgMHhBQSwgMHgxMywKKyAgICAgICAgMHg3NSwgMHg4RSwgMHgxRiwgMHg4RiwgMHg0MSwgMHhFRCwgMHgxMywgMHg5NSwgMHhFNSwgMHgzMSwKKyAgICAgICAgMHhGMywgMHg2QiwgMHg4NiwgMHg0MiwgMHgwMCwgMHhCRiwgMHhBQSwgMHhDNiwgMHg1RCwgMHgxRSwKKyAgICAgICAgMHhBNiwgMHg5MCwgMHgwQywgMHhGMSwgMHgxQiwgMHhFOCwgMHgzOSwgMHhGQiwgMHhBOCwgMHhBQSwKKyAgICAgICAgMHg1RSwgMHhGOSwgMHg3MiwgMHg3NCwgMHhEQywgMHg3RiwgMHhDMywgMHg0QywgMHg4MSwgMHhCMywKKyAgICAgICAgMHhCNCwgMHg0RCwgMHg3QiwgMHhDNiwgMHgyRiwgMHhGMiwgMHgzNywgMHhDNywgMHgwMywgMHhCOCwKKyAgICAgICAgMHhFOSwgMHg2MiwgMHhBRCwgMHgzOCwgMHhDMiwgMHhCMywgMHhBNCwgMHg4MiwgMHgxMSwgMHg2QiwKKyAgICAgICAgMHhDMiwgMHgzMywgMHg5OCwgMHhFRiwgMHgzMiwgMHg3NSwgMHhFQSwgMHhGRCwgMHgzMiwgMHg3QSwKKyAgICAgICAgMHhERiwgMHg1OSwgMHhBNSwgMHg2NSwgMHhBNCwgMHg0MiwgMHg5NSwgMHgxMSwgMHhGRiwgMHhENiwKKyAgICAgICAgMHg4NCwgMHhDRiwgMHg1NiwgMHgyRSwgMHhDQSwgMHg0NiwgMHgxMywgMHgwMSwgMHg0QSwgMHgzMiwKKyAgICAgICAgMHhCMSwgMHhEOSwgMHhBMywgMHhEQiwgMHgwRCwgMHgyMCwgMHg3RSwgMHgxRiwgMHg2OCwgMHhGNywKKyAgICAgICAgMHg1RSwgMHg2MCwgMHg2RSwgMHgwRiwgMHg1OSwgMHhGOCwgMHg1OSwgMHg5MywgMHg0RCwgMHg1NCwKKyAgICAgICAgMHhCQywgMHgzNywgMHhEMCwgMHg1MSwgMHg3QywgMHhCRCwgMHg2NywgMHhGMCwgMHhBNSwgMHgwOSwKKyAgICAgICAgMHhDOSwgMHg5QSwgMHhGNCwgMHgxRiwgMHgxRSwgMHg1MiwgMHg5RCwgMHhGNSwgMHhBNiwgMHgyNSwKKyAgICAgICAgMHhCRiwgMHg4NSwgMHgxRCwgMHhBMSwgMHhGMSwgMHhEOCwgMHhCRCwgMHgzOSwgMHgxMCwgMHg3MSwKKyAgICAgICAgMHg1NywgMHgxOSwgMHg0MCwgMHhGMywgMHhBMSwgMHg3NywgMHhFMCwgMHg4QiwgMHg0RSwgMHhCMywKKyAgICAgICAgMHg5MSwgMHg4NCwgMHgxNSwgMHgwQywgMHhGMSwgMHg1OCwgMHg1MiwgMHhEOSwgMHhFNSwgMHg5OCwKKyAgICAgICAgMHhENSwgMHg2NiwgMHg5NSwgMHg5QywgMHgxOSwgMHg4RCwgMHhBNCwgMHg2MywgMHg1QywgMHhCRiwKKyAgICAgICAgMHhDNSwgMHgzMywgMHg4MSwgMHhFRCwgMHg3RSwgMHg5MywgMHg0QiwgMHg5QSwgMHg2QywgMHhFQywKKyAgICAgICAgMHgyRSwgMHgzRSwgMHg0RiwgMHgwMiwgMHg4MSwgMHhDMCwgMHgzNCwgMHhGOCwgMHhERiwgMHg3NCwKKyAgICAgICAgMHhDNiwgMHhDMSwgMHhEOSwgMHgwMywgMHg5QiwgMHgzQiwgMHg1MywgMHgxOSwgMHhFQiwgMHg0MywKKyAgICAgICAgMHhDNCwgMHhBQSwgMHgxRSwgMHg3MywgMHhFMywgMHgxMywgMHgyNSwgMHgzMiwgMHgwNCwgMHgyMiwKKyAgICAgICAgMHg3OSwgMHg0QSwgMHgwNywgMHhGMCwgMHgwNiwgMHgzOCwgMHhCRCwgMHg1NywgMHhFNiwgMHgwMSwKKyAgICAgICAgMHgzMywgMHg4QywgMHhGMSwgMHgwMiwgMHhDQywgMHgzNCwgMHgyQywgMHg2MCwgMHgzMiwgMHhBNCwKKyAgICAgICAgMHgyMiwgMHgxRCwgMHgwRSwgMHgzOSwgMHg2QiwgMHhBQiwgMHhGNywgMHhDRSwgMHhEQiwgMHhBNywKKyAgICAgICAgMHhDMywgMHhEOCwgMHhBMiwgMHgzQiwgMHg3MCwgMHgzMSwgMHg5MSwgMHg2OCwgMHhCOSwgMHhCRiwKKyAgICAgICAgMHhFMCwgMHhBMSwgMHgzOSwgMHg4MCwgMHhGRSwgMHg0NywgMHg5OSwgMHg1NiwgMHg2RCwgMHg3NiwKKyAgICAgICAgMHg5MCwgMHgxNywgMHhGNSwgMHg2NywgMHg0MSwgMHg0NCwgMHgyNywgMHgxMCwgMHgwNywgMHg5OCwKKyAgICAgICAgMHg0RCwgMHg0QywgMHg1MywgMHhENCwgMHgxNSwgMHhEQywgMHgwQSwgMHgyRiwgMHhFMCwgMHg4MywKKyAgICAgICAgMHgyOCwgMHgyMiwgMHg4RCwgMHg2MSwgMHgzQiwgMHhFNCwgMHg4RSwgMHhFNSwgMHhFNywgMHgyNCwKKyAgICAgICAgMHg5OCwgMHgxOSwgMHhBOCwgMHhBMywgMHhFRCwgMHg3MCwgMHg1OSwgMHgwNiwgMHg4NiwgMHg3NiwKKyAgICAgICAgMHhDMiwgMHg0QiwgMHhDQiwgMHgxNywgMHhDNSwgMHg3NywgMHgxMiwgMHgwNywgMHhCOCwgMHhBQiwKKyAgICAgICAgMHgxQSwgMHg5MSwgMHhGQywgMHg3MiwgMHg4RSwgMHhCNywgMHhCMSwgMHhFNiwgMHg3NCwgMHhERCwKKyAgICAgICAgMHgzRCwgMHg5MiwgMHhBNywgMHhERSwgMHg2QywgMHg2RSwgMHhDQiwgMHg1MCwgMHg0NCwgMHgyRiwKKyAgICAgICAgMHhBQywgMHg5OSwgMHhGNywgMHgzNiwgMHg0RCwgMHg2MiwgMHhDNywgMHhBQywgMHhDRSwgMHg3RCwKKyAgICAgICAgMHgyNiwgMHhDOSwgMHhEMiwgMHg0RSwgMHg0OSwgMHhENywgMHg4RSwgMHg2NiwgMHg2QywgMHhDMSwKKyAgICAgICAgMHg1MywgMHhERiwgMHgzMSwgMHhBQiwgMHgyNSwgMHgzNSwgMHhDQSwgMHhENiwgMHhDNCwgMHhBMywKKyAgICAgICAgMHhBNiwgMHg5RiwgMHg3RSwgMHgzRCwgMHgyRCwgMHgxQSwgMHg0NCwgMHgzMSwgMHgzRCwgMHg4MSwKKyAgICAgICAgMHg5MSwgMHhCOCwgMHgzNiwgMHgwOCwgMHgyNywgMHg0MiwgMHg5RSwgMHgwOAorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX3JzYV9rZXlfZGVyXzMwNzIgPSBzaXplb2YocnNhX2tleV9kZXJfMzA3Mik7CisKKy8qIC4vY2VydHMvMzA3Mi9jbGllbnQta2V5LmRlciwgMzA3Mi1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNsaWVudF9rZXlfZGVyXzMwNzJbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDYsIDB4RTQsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODIsIDB4MDEsCisgICAgICAgIDB4ODEsIDB4MDAsIDB4QUMsIDB4MzksIDB4NTAsIDB4NjgsIDB4OEYsIDB4NzgsIDB4RjgsIDB4MTAsCisgICAgICAgIDB4OUIsIDB4NjgsIDB4OTYsIDB4RDMsIDB4RTEsIDB4OUMsIDB4NTYsIDB4NjgsIDB4NUEsIDB4NDEsCisgICAgICAgIDB4NjIsIDB4RTMsIDB4QjMsIDB4NDEsIDB4QjAsIDB4NTUsIDB4ODAsIDB4MTcsIDB4QjAsIDB4ODgsCisgICAgICAgIDB4MTYsIDB4OUIsIDB4RTAsIDB4OTcsIDB4NzQsIDB4NUYsIDB4NDIsIDB4NzksIDB4NzMsIDB4NDIsCisgICAgICAgIDB4REYsIDB4OTMsIDB4RjMsIDB4QUEsIDB4OUQsIDB4RUUsIDB4MkQsIDB4NkYsIDB4QUEsIDB4QkMsCisgICAgICAgIDB4MjcsIDB4OTAsIDB4ODQsIDB4QzAsIDB4NUQsIDB4QzcsIDB4RUMsIDB4NDksIDB4RUEsIDB4NUMsCisgICAgICAgIDB4NjYsIDB4MUQsIDB4NzAsIDB4OUMsIDB4NTMsIDB4NUMsIDB4QkEsIDB4QTEsIDB4QjMsIDB4NTgsCisgICAgICAgIDB4QzksIDB4M0UsIDB4OEUsIDB4OUIsIDB4NzIsIDB4M0QsIDB4NkUsIDB4MDIsIDB4MDIsIDB4MDAsCisgICAgICAgIDB4OUMsIDB4NjUsIDB4NTYsIDB4ODIsIDB4QTMsIDB4MjIsIDB4QjQsIDB4MDgsIDB4NUYsIDB4MkEsCisgICAgICAgIDB4RUYsIDB4REYsIDB4OUEsIDB4RDAsIDB4RTcsIDB4MzEsIDB4NTksIDB4MjYsIDB4NUIsIDB4MEIsCisgICAgICAgIDB4MUMsIDB4NjMsIDB4NjEsIDB4RkYsIDB4RDUsIDB4NjksIDB4MzIsIDB4MTksIDB4MDYsIDB4N0UsCisgICAgICAgIDB4MEYsIDB4NDAsIDB4M0MsIDB4N0EsIDB4MUUsIDB4QzgsIDB4RkMsIDB4NTgsIDB4NkMsIDB4NjQsCisgICAgICAgIDB4QUUsIDB4MTAsIDB4M0QsIDB4QTgsIDB4MjMsIDB4RkYsIDB4OEUsIDB4MUEsIDB4Q0EsIDB4NkEsCisgICAgICAgIDB4ODIsIDB4RTIsIDB4RjksIDB4MDEsIDB4NjQsIDB4MkMsIDB4OTcsIDB4QTAsIDB4MUEsIDB4ODksCisgICAgICAgIDB4QTAsIDB4NzQsIDB4RDMsIDB4QjYsIDB4MDUsIDB4MTEsIDB4RjIsIDB4NjIsIDB4MDYsIDB4NDgsCisgICAgICAgIDB4MkEsIDB4RjcsIDB4NjYsIDB4Q0UsIDB4QzEsIDB4ODUsIDB4RTEsIDB4RDIsIDB4MjcsIDB4RUEsCisgICAgICAgIDB4Q0EsIDB4MTIsIDB4QTUsIDB4OTEsIDB4OTcsIDB4M0UsIDB4RkMsIDB4OTQsIDB4MDYsIDB4NTksCisgICAgICAgIDB4NTEsIDB4QzAsIDB4RTcsIDB4MTMsIDB4QjYsIDB4ODcsIDB4N0IsIDB4NUYsIDB4RDIsIDB4QzAsCisgICAgICAgIDB4NTYsIDB4MkYsIDB4NUUsIDB4MUQsIDB4MDIsIDB4QzMsIDB4MTEsIDB4MkMsIDB4REYsIDB4RjcsCisgICAgICAgIDB4MDEsIDB4REEsIDB4QkQsIDB4ODUsIDB4NTQsIDB4MzUsIDB4MzIsIDB4NUYsIDB4QzUsIDB4QzgsCisgICAgICAgIDB4RjksIDB4N0EsIDB4OUYsIDB4ODksIDB4RjcsIDB4MDMsIDB4MEUsIDB4N0UsIDB4NzksIDB4NUQsCisgICAgICAgIDB4MDQsIDB4ODIsIDB4MzUsIDB4MTAsIDB4RkUsIDB4NkQsIDB4OUIsIDB4QkYsIDB4QjgsIDB4RUUsCisgICAgICAgIDB4RTIsIDB4NjIsIDB4ODcsIDB4MjYsIDB4NUUsIDB4MkYsIDB4NTAsIDB4MkYsIDB4NzgsIDB4MEMsCisgICAgICAgIDB4RTgsIDB4NzMsIDB4NEYsIDB4ODgsIDB4NkEsIDB4RDYsIDB4MjYsIDB4QTQsIDB4QzksIDB4RkMsCisgICAgICAgIDB4RkEsIDB4MUUsIDB4OEEsIDB4QjAsIDB4RjQsIDB4MzIsIDB4Q0YsIDB4NTcsIDB4Q0QsIDB4QTEsCisgICAgICAgIDB4NTgsIDB4OEEsIDB4NDksIDB4MEYsIDB4QkIsIDB4QTksIDB4MUQsIDB4ODYsIDB4QUIsIDB4QjksCisgICAgICAgIDB4OEYsIDB4OEQsIDB4NTcsIDB4MTksIDB4QjIsIDB4NUEsIDB4N0UsIDB4QTQsIDB4RUEsIDB4Q0MsCisgICAgICAgIDB4QjcsIDB4OTYsIDB4N0EsIDB4M0IsIDB4MzgsIDB4Q0QsIDB4REUsIDB4RTAsIDB4NjEsIDB4RkMsCisgICAgICAgIDB4QzksIDB4MDYsIDB4OEYsIDB4OTMsIDB4NUEsIDB4Q0UsIDB4QUQsIDB4MkEsIDB4RTMsIDB4MkQsCisgICAgICAgIDB4M0UsIDB4MzksIDB4NUQsIDB4NDEsIDB4ODMsIDB4MDEsIDB4MUYsIDB4MEYsIDB4RTEsIDB4N0YsCisgICAgICAgIDB4NzYsIDB4QzcsIDB4MjgsIDB4REEsIDB4NTYsIDB4RUYsIDB4QkYsIDB4REMsIDB4MjYsIDB4MzUsCisgICAgICAgIDB4NDAsIDB4QkUsIDB4QUQsIDB4QzcsIDB4MzgsIDB4QUQsIDB4QTQsIDB4MDYsIDB4QUMsIDB4Q0EsCisgICAgICAgIDB4RTgsIDB4NTEsIDB4RUIsIDB4QzAsIDB4RjgsIDB4NjgsIDB4MDIsIDB4MkMsIDB4OUIsIDB4QTEsCisgICAgICAgIDB4MTQsIDB4QkMsIDB4RjgsIDB4NjEsIDB4ODYsIDB4RDcsIDB4NTYsIDB4RDcsIDB4NzMsIDB4RjQsCisgICAgICAgIDB4QUIsIDB4QkIsIDB4NkEsIDB4MjEsIDB4RDMsIDB4ODgsIDB4MjIsIDB4QjQsIDB4RTcsIDB4NkYsCisgICAgICAgIDB4N0YsIDB4OTEsIDB4RTUsIDB4MEUsIDB4QzYsIDB4MDgsIDB4NDksIDB4REUsIDB4RUEsIDB4MTMsCisgICAgICAgIDB4NTgsIDB4NzIsIDB4QTAsIDB4QUEsIDB4M0EsIDB4RjksIDB4MzYsIDB4MDMsIDB4NDUsIDB4NTcsCisgICAgICAgIDB4NUUsIDB4ODcsIDB4RDIsIDB4NzMsIDB4NjUsIDB4QzQsIDB4OEMsIDB4QTMsIDB4RUUsIDB4QzksCisgICAgICAgIDB4RDYsIDB4NzMsIDB4N0MsIDB4OTYsIDB4NDEsIDB4OTMsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsCisgICAgICAgIDB4MDEsIDB4MDIsIDB4ODIsIDB4MDEsIDB4ODAsIDB4NDAsIDB4MTksIDB4NzQsIDB4REIsIDB4RjUsCisgICAgICAgIDB4Q0EsIDB4NDgsIDB4NDksIDB4QTYsIDB4MEQsIDB4REYsIDB4NTUsIDB4MkMsIDB4RkIsIDB4NEIsCisgICAgICAgIDB4MEQsIDB4QkIsIDB4QzksIDB4RUEsIDB4NEMsIDB4NjUsIDB4NDMsIDB4NjUsIDB4QTUsIDB4RUMsCisgICAgICAgIDB4RUUsIDB4RTQsIDB4M0QsIDB4NDIsIDB4NkMsIDB4RjEsIDB4QzIsIDB4NkQsIDB4MDUsIDB4QTcsCisgICAgICAgIDB4NzAsIDB4MUMsIDB4N0UsIDB4MUYsIDB4NDgsIDB4QTksIDB4QzAsIDB4MkUsIDB4RDcsIDB4OUYsCisgICAgICAgIDB4MDEsIDB4OTgsIDB4QzIsIDB4M0UsIDB4RDcsIDB4ODMsIDB4MTEsIDB4MzUsIDB4RDYsIDB4NUIsCisgICAgICAgIDB4MTMsIDB4ODcsIDB4QUUsIDB4QUMsIDB4MzIsIDB4RjgsIDB4REUsIDB4QjYsIDB4MDgsIDB4MjUsCisgICAgICAgIDB4NEUsIDB4NTksIDB4QkEsIDB4MDksIDB4RUMsIDB4QzYsIDB4OTcsIDB4MDQsIDB4ODUsIDB4RTgsCisgICAgICAgIDB4OTMsIDB4QzYsIDB4QkIsIDB4MDMsIDB4N0EsIDB4OTQsIDB4MjAsIDB4M0IsIDB4MjcsIDB4ODcsCisgICAgICAgIDB4NkEsIDB4MzYsIDB4NDEsIDB4N0MsIDB4RDUsIDB4RjQsIDB4ODEsIDB4MUMsIDB4MEIsIDB4MzksCisgICAgICAgIDB4RUIsIDB4MTQsIDB4QTcsIDB4QTYsIDB4MDEsIDB4MzcsIDB4NTAsIDB4NDgsIDB4RDUsIDB4QzYsCisgICAgICAgIDB4NTcsIDB4OUEsIDB4MUIsIDB4MDEsIDB4MDIsIDB4MUYsIDB4ODAsIDB4MzQsIDB4NDUsIDB4MDksCisgICAgICAgIDB4RTYsIDB4QkYsIDB4MzEsIDB4MTksIDB4QjcsIDB4RTEsIDB4QkEsIDB4REEsIDB4RUIsIDB4MUEsCisgICAgICAgIDB4QjAsIDB4Q0QsIDB4RjUsIDB4QTYsIDB4OTEsIDB4NjMsIDB4QUMsIDB4MjgsIDB4RTQsIDB4OEYsCisgICAgICAgIDB4RUEsIDB4N0UsIDB4RjYsIDB4MEEsIDB4NEEsIDB4NzEsIDB4MjEsIDB4QTUsIDB4RjEsIDB4NzAsCisgICAgICAgIDB4MEQsIDB4MUIsIDB4RDksIDB4NzAsIDB4NjQsIDB4NzQsIDB4NTcsIDB4MkYsIDB4OUYsIDB4RUMsCisgICAgICAgIDB4RDQsIDB4OTMsIDB4MTYsIDB4QzcsIDB4RUUsIDB4RjgsIDB4QzAsIDB4OUYsIDB4NTIsIDB4NEEsCisgICAgICAgIDB4MUYsIDB4QUQsIDB4REQsIDB4NDAsIDB4OTgsIDB4NTMsIDB4NjgsIDB4RkEsIDB4REUsIDB4QTIsCisgICAgICAgIDB4MDQsIDB4QTAsIDB4MjQsIDB4MDUsIDB4RUYsIDB4Q0IsIDB4NEYsIDB4NzAsIDB4REYsIDB4QjksCisgICAgICAgIDB4NUMsIDB4QzIsIDB4NUUsIDB4RTQsIDB4QzksIDB4Q0QsIDB4MEYsIDB4NUUsIDB4NEIsIDB4NzcsCisgICAgICAgIDB4QkIsIDB4ODQsIDB4NjksIDB4NTQsIDB4OTgsIDB4NDEsIDB4QjcsIDB4OUMsIDB4MEUsIDB4MzgsCisgICAgICAgIDB4RDgsIDB4RjcsIDB4RjMsIDB4OUYsIDB4RUYsIDB4RTUsIDB4OUIsIDB4QjYsIDB4NEIsIDB4RDYsCisgICAgICAgIDB4N0EsIDB4NjUsIDB4RjUsIDB4NjksIDB4RkEsIDB4QzIsIDB4MTMsIDB4NzAsIDB4NkMsIDB4MjgsCisgICAgICAgIDB4QTQsIDB4MjksIDB4QUMsIDB4RDksIDB4QkYsIDB4RUMsIDB4NkEsIDB4MkUsIDB4RUQsIDB4RTQsCisgICAgICAgIDB4QkEsIDB4REYsIDB4RDAsIDB4RjEsIDB4RjMsIDB4M0MsIDB4NkMsIDB4ODQsIDB4REYsIDB4QjcsCisgICAgICAgIDB4NUEsIDB4OTQsIDB4Q0YsIDB4RDksIDB4MkQsIDB4RUEsIDB4RUEsIDB4QjQsIDB4RDAsIDB4OTEsCisgICAgICAgIDB4MkUsIDB4NzcsIDB4MTUsIDB4MTgsIDB4MEQsIDB4NkIsIDB4QkEsIDB4MkEsIDB4MEMsIDB4RjEsCisgICAgICAgIDB4OTIsIDB4OUQsIDB4RDYsIDB4MDQsIDB4MDUsIDB4QjYsIDB4MzgsIDB4QzIsIDB4RTAsIDB4QTcsCisgICAgICAgIDB4MkQsIDB4NjQsIDB4RjgsIDB4REYsIDB4MEMsIDB4M0EsIDB4OTMsIDB4ODMsIDB4RTEsIDB4ODgsCisgICAgICAgIDB4ODMsIDB4NUYsIDB4NjcsIDB4OTAsIDB4OUYsIDB4MkIsIDB4RTAsIDB4NjAsIDB4OEUsIDB4Q0EsCisgICAgICAgIDB4MzAsIDB4MTMsIDB4Q0EsIDB4OUYsIDB4Q0YsIDB4N0IsIDB4NkQsIDB4RDgsIDB4Q0QsIDB4RUUsCisgICAgICAgIDB4RjksIDB4OTYsIDB4REQsIDB4NUUsIDB4RjQsIDB4NDcsIDB4QzksIDB4NEMsIDB4RTYsIDB4OEYsCisgICAgICAgIDB4N0YsIDB4MzMsIDB4MkEsIDB4MzgsIDB4MzAsIDB4QUYsIDB4RDUsIDB4NEEsIDB4NzksIDB4NDcsCisgICAgICAgIDB4MDYsIDB4Q0MsIDB4OTYsIDB4NDQsIDB4MjksIDB4OEMsIDB4NjAsIDB4MkIsIDB4MDgsIDB4QzcsCisgICAgICAgIDB4RDAsIDB4RDMsIDB4QzMsIDB4QzUsIDB4MkMsIDB4NjMsIDB4NkMsIDB4ODcsIDB4RDIsIDB4QUUsCisgICAgICAgIDB4MkEsIDB4QTQsIDB4ODYsIDB4RTcsIDB4NzYsIDB4NzQsIDB4OTAsIDB4RDEsIDB4MDQsIDB4MzcsCisgICAgICAgIDB4NjQsIDB4MUEsIDB4RUQsIDB4MDgsIDB4RDksIDB4OTgsIDB4MDcsIDB4MUEsIDB4OTgsIDB4MEIsCisgICAgICAgIDB4ODksIDB4OTksIDB4QTQsIDB4QjAsIDB4OEMsIDB4MUEsIDB4MTAsIDB4RUIsIDB4RUMsIDB4RjQsCisgICAgICAgIDB4RUUsIDB4M0MsIDB4QzQsIDB4MDAsIDB4Q0MsIDB4MzAsIDB4OUMsIDB4NDMsIDB4MDEsIDB4MDIsCisgICAgICAgIDB4ODEsIDB4QzEsIDB4MDAsIDB4RDksIDB4NDMsIDB4RjYsIDB4MkMsIDB4NzgsIDB4MjYsIDB4RDIsCisgICAgICAgIDB4RTcsIDB4MTUsIDB4QTcsIDB4MEEsIDB4ODgsIDB4NUUsIDB4REIsIDB4MkQsIDB4QUYsIDB4QzYsCisgICAgICAgIDB4QTksIDB4NkYsIDB4NzMsIDB4ODgsIDB4M0IsIDB4NkEsIDB4MDgsIDB4MUYsIDB4RjUsIDB4ODAsCisgICAgICAgIDB4QjUsIDB4MkUsIDB4MjksIDB4OEIsIDB4NzIsIDB4RjgsIDB4MzUsIDB4QzgsIDB4MjMsIDB4MTgsCisgICAgICAgIDB4MUMsIDB4MEQsIDB4MEUsIDB4MzgsIDB4ODIsIDB4QkIsIDB4NUIsIDB4MkYsIDB4QjQsIDB4NUMsCisgICAgICAgIDB4NEUsIDB4MjQsIDB4MDUsIDB4QTcsIDB4NEMsIDB4NzksIDB4NDgsIDB4ODksIDB4OEQsIDB4MUMsCisgICAgICAgIDB4MUQsIDB4MEEsIDB4MkMsIDB4RkUsIDB4RDksIDB4OTksIDB4REYsIDB4MjUsIDB4OEEsIDB4MkQsCisgICAgICAgIDB4RjgsIDB4RUIsIDB4MkYsIDB4REEsIDB4MUIsIDB4NjMsIDB4RTEsIDB4Q0QsIDB4MDksIDB4OTcsCisgICAgICAgIDB4NjQsIDB4MTQsIDB4QUIsIDB4RUEsIDB4MEIsIDB4RDgsIDB4RTIsIDB4QTgsIDB4MkEsIDB4NjMsCisgICAgICAgIDB4MzUsIDB4OTAsIDB4RUUsIDB4N0YsIDB4RUEsIDB4Q0UsIDB4QTUsIDB4RUYsIDB4N0YsIDB4QUIsCisgICAgICAgIDB4ODcsIDB4NDcsIDB4OUIsIDB4NDUsIDB4MzUsIDB4OUEsIDB4REEsIDB4OEMsIDB4RjQsIDB4RDMsCisgICAgICAgIDB4OEEsIDB4MEIsIDB4OUIsIDB4RTYsIDB4RUEsIDB4OTIsIDB4QkIsIDB4MDUsIDB4RTEsIDB4QUMsCisgICAgICAgIDB4M0UsIDB4MzUsIDB4REIsIDB4RUQsIDB4NjUsIDB4MUQsIDB4QjYsIDB4OTIsIDB4RUIsIDB4MjksCisgICAgICAgIDB4NzksIDB4RjgsIDB4M0YsIDB4QzIsIDB4NTgsIDB4NDAsIDB4MzIsIDB4NjYsIDB4ODcsIDB4NTYsCisgICAgICAgIDB4NTAsIDB4RkYsIDB4QkYsIDB4M0UsIDB4QkQsIDB4RTksIDB4OTQsIDB4QkYsIDB4MzEsIDB4QkUsCisgICAgICAgIDB4ODcsIDB4MkQsIDB4RUYsIDB4NjQsIDB4MUUsIDB4MEUsIDB4NjcsIDB4M0EsIDB4OUMsIDB4OTQsCisgICAgICAgIDB4REEsIDB4NUIsIDB4MEMsIDB4OEMsIDB4M0QsIDB4RUUsIDB4OUQsIDB4Q0QsIDB4OTIsIDB4REUsCisgICAgICAgIDB4NDAsIDB4MDIsIDB4NjUsIDB4MzYsIDB4QzksIDB4MUIsIDB4RjUsIDB4N0UsIDB4NEUsIDB4MDcsCisgICAgICAgIDB4QjQsIDB4N0YsIDB4MTQsIDB4MEUsIDB4MDMsIDB4MkUsIDB4ODYsIDB4RjAsIDB4NDUsIDB4NUYsCisgICAgICAgIDB4REMsIDB4QTIsIDB4RTgsIDB4QzcsIDB4ODMsIDB4MDIsIDB4ODEsIDB4QzEsIDB4MDAsIDB4Q0EsCisgICAgICAgIDB4RUQsIDB4QTUsIDB4M0YsIDB4NTksIDB4QUMsIDB4NEMsIDB4QUQsIDB4QUIsIDB4MjMsIDB4MDIsCisgICAgICAgIDB4OTUsIDB4ODAsIDB4QTAsIDB4QUYsIDB4MzUsIDB4MTcsIDB4REIsIDB4RTcsIDB4N0YsIDB4NzIsCisgICAgICAgIDB4NDEsIDB4MkMsIDB4NUMsIDB4QjQsIDB4NDMsIDB4ODUsIDB4NDYsIDB4NzMsIDB4OUYsIDB4NTgsCisgICAgICAgIDB4RTksIDB4NDAsIDB4OEIsIDB4RUMsIDB4QjAsIDB4RUYsIDB4ODYsIDB4NEMsIDB4MzEsIDB4REUsCisgICAgICAgIDB4QzgsIDB4NkMsIDB4NzQsIDB4NzUsIDB4QTIsIDB4REIsIDB4NjUsIDB4RjQsIDB4NTAsIDB4QzYsCisgICAgICAgIDB4OTksIDB4QTIsIDB4NzAsIDB4REUsIDB4QjYsIDB4MjIsIDB4QzIsIDB4MDEsIDB4MTUsIDB4NDksCisgICAgICAgIDB4MTMsIDB4QTAsIDB4RTIsIDB4MjAsIDB4NzgsIDB4NDQsIDB4RUMsIDB4MUYsIDB4NDIsIDB4QjMsCisgICAgICAgIDB4MjUsIDB4MDksIDB4Q0UsIDB4NzUsIDB4MTMsIDB4NzUsIDB4MzYsIDB4MTEsIDB4NDcsIDB4MkMsCisgICAgICAgIDB4M0MsIDB4MTUsIDB4MUYsIDB4RjAsIDB4NTQsIDB4RDUsIDB4MTgsIDB4QUUsIDB4NjEsIDB4MDcsCisgICAgICAgIDB4QUMsIDB4M0QsIDB4ODMsIDB4NDYsIDB4MDMsIDB4OEMsIDB4QkYsIDB4NjMsIDB4MjYsIDB4QTgsCisgICAgICAgIDB4MTksIDB4N0MsIDB4RkYsIDB4REUsIDB4MjAsIDB4NzgsIDB4RDAsIDB4REEsIDB4NzAsIDB4MkUsCisgICAgICAgIDB4QkQsIDB4RkEsIDB4OTYsIDB4REQsIDB4MTUsIDB4NzgsIDB4OUIsIDB4RUYsIDB4RUQsIDB4MTcsCisgICAgICAgIDB4OTAsIDB4NkYsIDB4MTQsIDB4MzUsIDB4NTAsIDB4OEUsIDB4MUQsIDB4NzgsIDB4QjAsIDB4OEEsCisgICAgICAgIDB4QTAsIDB4NTMsIDB4MTAsIDB4MTUsIDB4NjQsIDB4Q0MsIDB4NDcsIDB4MDUsIDB4QjYsIDB4QzYsCisgICAgICAgIDB4NDgsIDB4QzAsIDB4NUQsIDB4QjQsIDB4NEIsIDB4MUEsIDB4NUYsIDB4QjgsIDB4OUUsIDB4NzUsCisgICAgICAgIDB4Q0QsIDB4QzMsIDB4NjQsIDB4NjYsIDB4ODgsIDB4MTAsIDB4OUMsIDB4OEIsIDB4ODcsIDB4MTQsCisgICAgICAgIDB4MzQsIDB4RTYsIDB4NjAsIDB4M0MsIDB4QTUsIDB4QjcsIDB4ODEsIDB4MUQsIDB4MEIsIDB4NzksCisgICAgICAgIDB4OTMsIDB4NUQsIDB4NEEsIDB4NDIsIDB4N0EsIDB4N0YsIDB4MzMsIDB4RjAsIDB4M0UsIDB4OUUsCisgICAgICAgIDB4NjMsIDB4QkQsIDB4QjYsIDB4NUYsIDB4RjksIDB4NDcsIDB4QTcsIDB4MEEsIDB4NDksIDB4NzAsCisgICAgICAgIDB4QjEsIDB4MDIsIDB4ODEsIDB4QzAsIDB4NkYsIDB4QzYsIDB4RjQsIDB4M0UsIDB4REEsIDB4QUQsCisgICAgICAgIDB4RjYsIDB4QjEsIDB4NjYsIDB4QzUsIDB4NjIsIDB4QjgsIDB4RDgsIDB4M0MsIDB4NjEsIDB4MUIsCisgICAgICAgIDB4REUsIDB4RDQsIDB4NEEsIDB4RkYsIDB4QTAsIDB4NjYsIDB4MTgsIDB4REUsIDB4MDcsIDB4M0IsCisgICAgICAgIDB4MzIsIDB4MzUsIDB4ODQsIDB4ODMsIDB4NjEsIDB4MzgsIDB4MEMsIDB4MTQsIDB4RjcsIDB4NUIsCisgICAgICAgIDB4N0UsIDB4Q0EsIDB4RTcsIDB4QjgsIDB4OUEsIDB4NDAsIDB4NDAsIDB4MEQsIDB4RTAsIDB4RDQsCisgICAgICAgIDB4MjQsIDB4RUQsIDB4MUEsIDB4QzEsIDB4NDEsIDB4REEsIDB4MjksIDB4NDcsIDB4QjUsIDB4NjQsCisgICAgICAgIDB4QzAsIDB4QzIsIDB4RkIsIDB4RkEsIDB4M0MsIDB4M0YsIDB4NEQsIDB4NTcsIDB4QUQsIDB4QTMsCisgICAgICAgIDB4OTIsIDB4OTUsIDB4NEUsIDB4QzIsIDB4NzYsIDB4QUUsIDB4QzIsIDB4Q0IsIDB4NjcsIDB4QzYsCisgICAgICAgIDB4NzgsIDB4NzksIDB4QzcsIDB4REMsIDB4Q0UsIDB4NzMsIDB4QkIsIDB4RTgsIDB4OTgsIDB4NjUsCisgICAgICAgIDB4RkUsIDB4NTYsIDB4OEYsIDB4QjIsIDB4RjQsIDB4NjIsIDB4QTQsIDB4NjAsIDB4NjAsIDB4ODAsCisgICAgICAgIDB4NDksIDB4OEEsIDB4MzYsIDB4QkYsIDB4REUsIDB4NzIsIDB4N0UsIDB4QjEsIDB4RDMsIDB4RjUsCisgICAgICAgIDB4MUQsIDB4NjQsIDB4MTcsIDB4MjYsIDB4RTUsIDB4M0QsIDB4NjcsIDB4QjIsIDB4MEEsIDB4OEIsCisgICAgICAgIDB4OTksIDB4MjcsIDB4MDQsIDB4NjQsIDB4OUEsIDB4OTQsIDB4RkMsIDB4MUQsIDB4NzMsIDB4MjYsCisgICAgICAgIDB4QzMsIDB4NTYsIDB4RjksIDB4RUUsIDB4MkIsIDB4OTksIDB4NjUsIDB4QTUsIDB4QzgsIDB4NzMsCisgICAgICAgIDB4RjYsIDB4NjcsIDB4ODMsIDB4QkMsIDB4MkIsIDB4OTYsIDB4NUYsIDB4MzYsIDB4RTQsIDB4Q0EsCisgICAgICAgIDB4QkQsIDB4RTAsIDB4MjQsIDB4MzQsIDB4RDYsIDB4NDgsIDB4NTQsIDB4NTYsIDB4QUQsIDB4QTMsCisgICAgICAgIDB4RTMsIDB4M0QsIDB4MTcsIDB4QkMsIDB4QjMsIDB4RTYsIDB4MjQsIDB4RkUsIDB4NTAsIDB4QzYsCisgICAgICAgIDB4MkYsIDB4Q0IsIDB4QjQsIDB4QUYsIDB4QzcsIDB4RTgsIDB4REQsIDB4OTYsIDB4ODYsIDB4OUQsCisgICAgICAgIDB4QjQsIDB4N0YsIDB4MUIsIDB4MjYsIDB4MDEsIDB4MzMsIDB4ODcsIDB4REIsIDB4NkEsIDB4N0YsCisgICAgICAgIDB4RjYsIDB4OUEsIDB4QjcsIDB4QzEsIDB4OTQsIDB4RUIsIDB4MDIsIDB4ODEsIDB4QzEsIDB4MDAsCisgICAgICAgIDB4QjAsIDB4NkQsIDB4MjAsIDB4NjgsIDB4MEQsIDB4N0MsIDB4ODEsIDB4NDUsIDB4RDQsIDB4MkUsCisgICAgICAgIDB4MjIsIDB4MDYsIDB4RkMsIDB4QzcsIDB4QjYsIDB4Q0MsIDB4NDAsIDB4MkMsIDB4MEQsIDB4RkUsCisgICAgICAgIDB4N0QsIDB4QzUsIDB4MkYsIDB4REUsIDB4ODEsIDB4NTIsIDB4REEsIDB4QzIsIDB4M0YsIDB4QUYsCisgICAgICAgIDB4RTAsIDB4NEIsIDB4MUEsIDB4QjUsIDB4MEMsIDB4NTksIDB4NjAsIDB4NDUsIDB4QjAsIDB4NjUsCisgICAgICAgIDB4MDMsIDB4M0QsIDB4RDksIDB4MUMsIDB4RkYsIDB4NTEsIDB4NTEsIDB4RDIsIDB4MzgsIDB4MzEsCisgICAgICAgIDB4MkEsIDB4MTksIDB4NTQsIDB4NjMsIDB4MzEsIDB4MUQsIDB4QzQsIDB4RTYsIDB4NEEsIDB4QUUsCisgICAgICAgIDB4QzgsIDB4RDMsIDB4RTksIDB4RTEsIDB4RUYsIDB4M0MsIDB4RTEsIDB4MUYsIDB4MzAsIDB4QTYsCisgICAgICAgIDB4N0EsIDB4QkQsIDB4Q0UsIDB4RTIsIDB4RDIsIDB4NjIsIDB4RDIsIDB4NUEsIDB4RTksIDB4NzYsCisgICAgICAgIDB4QTksIDB4N0MsIDB4QUIsIDB4MTksIDB4MTMsIDB4ODcsIDB4OEQsIDB4QTUsIDB4NjEsIDB4QTYsCisgICAgICAgIDB4MzYsIDB4NTcsIDB4ODcsIDB4M0IsIDB4NjQsIDB4NTksIDB4OUQsIDB4QkEsIDB4OUYsIDB4NjcsCisgICAgICAgIDB4NzIsIDB4NkEsIDB4ODYsIDB4ODQsIDB4QTYsIDB4MDgsIDB4MzEsIDB4NDEsIDB4RDMsIDB4NDgsCisgICAgICAgIDB4MDksIDB4M0IsIDB4NUUsIDB4NkMsIDB4NUYsIDB4NTYsIDB4NTUsIDB4N0YsIDB4QUQsIDB4N0UsCisgICAgICAgIDB4QzIsIDB4MjcsIDB4RUUsIDB4OEEsIDB4RjEsIDB4MzcsIDB4NTEsIDB4RjcsIDB4NDksIDB4ODAsCisgICAgICAgIDB4QTMsIDB4NjUsIDB4NzQsIDB4MTEsIDB4REQsIDB4QTcsIDB4QkUsIDB4RkEsIDB4NTgsIDB4N0IsCisgICAgICAgIDB4NjksIDB4QjQsIDB4QzIsIDB4OUEsIDB4MzUsIDB4MkYsIDB4QkUsIDB4ODQsIDB4NEUsIDB4MkMsCisgICAgICAgIDB4NjYsIDB4NUIsIDB4MzgsIDB4NkYsIDB4NDcsIDB4QkQsIDB4MzAsIDB4NDQsIDB4MEEsIDB4MDIsCisgICAgICAgIDB4QUMsIDB4OEMsIDB4QjksIDB4NjYsIDB4MUUsIDB4MTQsIDB4MkQsIDB4OTAsIDB4NzEsIDB4NDIsCisgICAgICAgIDB4MTIsIDB4QjcsIDB4MEUsIDB4M0EsIDB4OEIsIDB4QzUsIDB4OTgsIDB4NjUsIDB4RkQsIDB4OEYsCisgICAgICAgIDB4NTMsIDB4ODEsIDB4N0YsIDB4RTQsIDB4RDksIDB4NTgsIDB4MEUsIDB4RjUsIDB4QTksIDB4MzksCisgICAgICAgIDB4RTQsIDB4NjEsIDB4MDIsIDB4ODEsIDB4QzEsIDB4MDAsIDB4QjMsIDB4OTQsIDB4OEYsIDB4MkIsCisgICAgICAgIDB4RkQsIDB4ODQsIDB4MkUsIDB4ODMsIDB4NDIsIDB4ODYsIDB4NTYsIDB4N0UsIDB4QjUsIDB4RjgsCisgICAgICAgIDB4M0MsIDB4QzUsIDB4MEMsIDB4Q0IsIDB4QkQsIDB4MzIsIDB4MEMsIDB4RDcsIDB4QUEsIDB4QTcsCisgICAgICAgIDB4QjAsIDB4RTksIDB4QTQsIDB4NkEsIDB4RDEsIDB4MDEsIDB4REIsIDB4ODcsIDB4MkEsIDB4RjcsCisgICAgICAgIDB4REYsIDB4RUMsIDB4QzIsIDB4MDMsIDB4NUQsIDB4NTUsIDB4QTgsIDB4NjYsIDB4NzMsIDB4NzksCisgICAgICAgIDB4QTksIDB4QUIsIDB4QkQsIDB4QUYsIDB4NjksIDB4MzcsIDB4RkUsIDB4NDEsIDB4QjUsIDB4NTMsCisgICAgICAgIDB4QjMsIDB4QjIsIDB4QzAsIDB4QjEsIDB4ODAsIDB4MzQsIDB4RTYsIDB4RTEsIDB4N0IsIDB4QUUsCisgICAgICAgIDB4NjcsIDB4QzcsIDB4RjMsIDB4NTcsIDB4RkUsIDB4MTIsIDB4QkMsIDB4NzgsIDB4QUEsIDB4NzUsCisgICAgICAgIDB4MEQsIDB4QUMsIDB4NzksIDB4OTAsIDB4MTQsIDB4NDksIDB4RkUsIDB4NkIsIDB4NTEsIDB4RTMsCisgICAgICAgIDB4RTQsIDB4NDYsIDB4QjIsIDB4MTAsIDB4NEQsIDB4MDUsIDB4NkEsIDB4MTIsIDB4ODAsIDB4MkEsCisgICAgICAgIDB4OEYsIDB4MzksIDB4NDIsIDB4MEUsIDB4M0IsIDB4MjQsIDB4MkIsIDB4NTAsIDB4NUQsIDB4RjMsCisgICAgICAgIDB4QTcsIDB4N0YsIDB4MkYsIDB4ODIsIDB4ODksIDB4ODcsIDB4OUYsIDB4RjgsIDB4N0IsIDB4MUUsCisgICAgICAgIDB4MDUsIDB4NkUsIDB4NzUsIDB4ODMsIDB4MDQsIDB4MzUsIDB4NjYsIDB4NEEsIDB4MDYsIDB4NTcsCisgICAgICAgIDB4MzksIDB4QUIsIDB4MjEsIDB4MEIsIDB4OTQsIDB4NDEsIDB4NkEsIDB4MkEsIDB4QzcsIDB4REUsCisgICAgICAgIDB4OTgsIDB4NDUsIDB4OEYsIDB4OTYsIDB4MUMsIDB4RjIsIDB4RDgsIDB4RkIsIDB4OUMsIDB4MTAsCisgICAgICAgIDB4OEUsIDB4NDEsIDB4N0EsIDB4REQsIDB4REQsIDB4MUQsIDB4RUYsIDB4QTUsIDB4NjcsIDB4RUMsCisgICAgICAgIDB4RkUsIDB4QTMsIDB4MkQsIDB4QTksIDB4RkQsIDB4RjMsIDB4RUUsIDB4MzUsIDB4RjQsIDB4QTcsCisgICAgICAgIDB4QkMsIDB4RjksIDB4NzEsIDB4Q0MsIDB4QjksIDB4QzAsIDB4NUYsIDB4NTgsIDB4NUIsIDB4QkQsCisgICAgICAgIDB4MUEsIDB4OUUsIDB4QzcsIDB4MDgsIDB4NjcsIDB4N0MsIDB4QzcsIDB4NTEsIDB4NUIsIDB4QkUsCisgICAgICAgIDB4RTMsIDB4RjgsIDB4QkUsIDB4MUUsIDB4QzcsIDB4RDIsIDB4MjgsIDB4OTcKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9jbGllbnRfa2V5X2Rlcl8zMDcyID0gc2l6ZW9mKGNsaWVudF9rZXlfZGVyXzMwNzIpOworCisvKiAuL2NlcnRzLzMwNzIvY2xpZW50LWtleVB1Yi5kZXIsIDMwNzItYml0ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjbGllbnRfa2V5cHViX2Rlcl8zMDcyW10gPQoreworICAgICAgICAweDMwLCAweDgyLCAweDAxLCAweEEyLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LAorICAgICAgICAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDAxLCAweDAxLCAweDA1LCAweDAwLCAweDAzLAorICAgICAgICAweDgyLCAweDAxLCAweDhGLCAweDAwLCAweDMwLCAweDgyLCAweDAxLCAweDhBLCAweDAyLCAweDgyLAorICAgICAgICAweDAxLCAweDgxLCAweDAwLCAweEFDLCAweDM5LCAweDUwLCAweDY4LCAweDhGLCAweDc4LCAweEY4LAorICAgICAgICAweDEwLCAweDlCLCAweDY4LCAweDk2LCAweEQzLCAweEUxLCAweDlDLCAweDU2LCAweDY4LCAweDVBLAorICAgICAgICAweDQxLCAweDYyLCAweEUzLCAweEIzLCAweDQxLCAweEIwLCAweDU1LCAweDgwLCAweDE3LCAweEIwLAorICAgICAgICAweDg4LCAweDE2LCAweDlCLCAweEUwLCAweDk3LCAweDc0LCAweDVGLCAweDQyLCAweDc5LCAweDczLAorICAgICAgICAweDQyLCAweERGLCAweDkzLCAweEYzLCAweEFBLCAweDlELCAweEVFLCAweDJELCAweDZGLCAweEFBLAorICAgICAgICAweEJDLCAweDI3LCAweDkwLCAweDg0LCAweEMwLCAweDVELCAweEM3LCAweEVDLCAweDQ5LCAweEVBLAorICAgICAgICAweDVDLCAweDY2LCAweDFELCAweDcwLCAweDlDLCAweDUzLCAweDVDLCAweEJBLCAweEExLCAweEIzLAorICAgICAgICAweDU4LCAweEM5LCAweDNFLCAweDhFLCAweDlCLCAweDcyLCAweDNELCAweDZFLCAweDAyLCAweDAyLAorICAgICAgICAweDAwLCAweDlDLCAweDY1LCAweDU2LCAweDgyLCAweEEzLCAweDIyLCAweEI0LCAweDA4LCAweDVGLAorICAgICAgICAweDJBLCAweEVGLCAweERGLCAweDlBLCAweEQwLCAweEU3LCAweDMxLCAweDU5LCAweDI2LCAweDVCLAorICAgICAgICAweDBCLCAweDFDLCAweDYzLCAweDYxLCAweEZGLCAweEQ1LCAweDY5LCAweDMyLCAweDE5LCAweDA2LAorICAgICAgICAweDdFLCAweDBGLCAweDQwLCAweDNDLCAweDdBLCAweDFFLCAweEM4LCAweEZDLCAweDU4LCAweDZDLAorICAgICAgICAweDY0LCAweEFFLCAweDEwLCAweDNELCAweEE4LCAweDIzLCAweEZGLCAweDhFLCAweDFBLCAweENBLAorICAgICAgICAweDZBLCAweDgyLCAweEUyLCAweEY5LCAweDAxLCAweDY0LCAweDJDLCAweDk3LCAweEEwLCAweDFBLAorICAgICAgICAweDg5LCAweEEwLCAweDc0LCAweEQzLCAweEI2LCAweDA1LCAweDExLCAweEYyLCAweDYyLCAweDA2LAorICAgICAgICAweDQ4LCAweDJBLCAweEY3LCAweDY2LCAweENFLCAweEMxLCAweDg1LCAweEUxLCAweEQyLCAweDI3LAorICAgICAgICAweEVBLCAweENBLCAweDEyLCAweEE1LCAweDkxLCAweDk3LCAweDNFLCAweEZDLCAweDk0LCAweDA2LAorICAgICAgICAweDU5LCAweDUxLCAweEMwLCAweEU3LCAweDEzLCAweEI2LCAweDg3LCAweDdCLCAweDVGLCAweEQyLAorICAgICAgICAweEMwLCAweDU2LCAweDJGLCAweDVFLCAweDFELCAweDAyLCAweEMzLCAweDExLCAweDJDLCAweERGLAorICAgICAgICAweEY3LCAweDAxLCAweERBLCAweEJELCAweDg1LCAweDU0LCAweDM1LCAweDMyLCAweDVGLCAweEM1LAorICAgICAgICAweEM4LCAweEY5LCAweDdBLCAweDlGLCAweDg5LCAweEY3LCAweDAzLCAweDBFLCAweDdFLCAweDc5LAorICAgICAgICAweDVELCAweDA0LCAweDgyLCAweDM1LCAweDEwLCAweEZFLCAweDZELCAweDlCLCAweEJGLCAweEI4LAorICAgICAgICAweEVFLCAweEUyLCAweDYyLCAweDg3LCAweDI2LCAweDVFLCAweDJGLCAweDUwLCAweDJGLCAweDc4LAorICAgICAgICAweDBDLCAweEU4LCAweDczLCAweDRGLCAweDg4LCAweDZBLCAweEQ2LCAweDI2LCAweEE0LCAweEM5LAorICAgICAgICAweEZDLCAweEZBLCAweDFFLCAweDhBLCAweEIwLCAweEY0LCAweDMyLCAweENGLCAweDU3LCAweENELAorICAgICAgICAweEExLCAweDU4LCAweDhBLCAweDQ5LCAweDBGLCAweEJCLCAweEE5LCAweDFELCAweDg2LCAweEFCLAorICAgICAgICAweEI5LCAweDhGLCAweDhELCAweDU3LCAweDE5LCAweEIyLCAweDVBLCAweDdFLCAweEE0LCAweEVBLAorICAgICAgICAweENDLCAweEI3LCAweDk2LCAweDdBLCAweDNCLCAweDM4LCAweENELCAweERFLCAweEUwLCAweDYxLAorICAgICAgICAweEZDLCAweEM5LCAweDA2LCAweDhGLCAweDkzLCAweDVBLCAweENFLCAweEFELCAweDJBLCAweEUzLAorICAgICAgICAweDJELCAweDNFLCAweDM5LCAweDVELCAweDQxLCAweDgzLCAweDAxLCAweDFGLCAweDBGLCAweEUxLAorICAgICAgICAweDdGLCAweDc2LCAweEM3LCAweDI4LCAweERBLCAweDU2LCAweEVGLCAweEJGLCAweERDLCAweDI2LAorICAgICAgICAweDM1LCAweDQwLCAweEJFLCAweEFELCAweEM3LCAweDM4LCAweEFELCAweEE0LCAweDA2LCAweEFDLAorICAgICAgICAweENBLCAweEU4LCAweDUxLCAweEVCLCAweEMwLCAweEY4LCAweDY4LCAweDAyLCAweDJDLCAweDlCLAorICAgICAgICAweEExLCAweDE0LCAweEJDLCAweEY4LCAweDYxLCAweDg2LCAweEQ3LCAweDU2LCAweEQ3LCAweDczLAorICAgICAgICAweEY0LCAweEFCLCAweEJCLCAweDZBLCAweDIxLCAweEQzLCAweDg4LCAweDIyLCAweEI0LCAweEU3LAorICAgICAgICAweDZGLCAweDdGLCAweDkxLCAweEU1LCAweDBFLCAweEM2LCAweDA4LCAweDQ5LCAweERFLCAweEVBLAorICAgICAgICAweDEzLCAweDU4LCAweDcyLCAweEEwLCAweEFBLCAweDNBLCAweEY5LCAweDM2LCAweDAzLCAweDQ1LAorICAgICAgICAweDU3LCAweDVFLCAweDg3LCAweEQyLCAweDczLCAweDY1LCAweEM0LCAweDhDLCAweEEzLCAweEVFLAorICAgICAgICAweEM5LCAweEQ2LCAweDczLCAweDdDLCAweDk2LCAweDQxLCAweDkzLCAweDAyLCAweDAzLCAweDAxLAorICAgICAgICAweDAwLCAweDAxCit9Oworc3RhdGljIGNvbnN0IGludCBzaXplb2ZfY2xpZW50X2tleXB1Yl9kZXJfMzA3MiA9IHNpemVvZihjbGllbnRfa2V5cHViX2Rlcl8zMDcyKTsKKworLyogLi9jZXJ0cy8zMDcyL2NsaWVudC1jZXJ0LmRlciwgMzA3Mi1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNsaWVudF9jZXJ0X2Rlcl8zMDcyW10gPQoreworICAgICAgICAweDMwLCAweDgyLCAweDA2LCAweDA3LCAweDMwLCAweDgyLCAweDA0LCAweDZGLCAweEEwLCAweDAzLAorICAgICAgICAweDAyLCAweDAxLCAweDAyLCAweDAyLCAweDA5LCAweDAwLCAweEE0LCAweEUwLCAweEFBLCAweEYzLAorICAgICAgICAweDI5LCAweDUwLCAweDM5LCAweDhBLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LAorICAgICAgICAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDAxLCAweDBCLCAweDA1LCAweDAwLCAweDMwLAorICAgICAgICAweDgxLCAweDlFLCAweDMxLCAweDBCLCAweDMwLCAweDA5LCAweDA2LCAweDAzLCAweDU1LCAweDA0LAorICAgICAgICAweDA2LCAweDEzLCAweDAyLCAweDU1LCAweDUzLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDA4LCAweDBDLCAweDA3LCAweDRELCAweDZGLCAweDZFLCAweDc0LAorICAgICAgICAweDYxLCAweDZFLCAweDYxLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDA0LCAweDA3LCAweDBDLCAweDA3LCAweDQyLCAweDZGLCAweDdBLCAweDY1LCAweDZELCAweDYxLAorICAgICAgICAweDZFLCAweDMxLCAweDE1LCAweDMwLCAweDEzLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBBLAorICAgICAgICAweDBDLCAweDBDLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDUzLCAweDUzLCAweDRDLCAweDVGLAorICAgICAgICAweDMzLCAweDMwLCAweDM3LCAweDMyLCAweDMxLCAweDE5LCAweDMwLCAweDE3LCAweDA2LCAweDAzLAorICAgICAgICAweDU1LCAweDA0LCAweDBCLCAweDBDLCAweDEwLCAweDUwLCAweDcyLCAweDZGLCAweDY3LCAweDcyLAorICAgICAgICAweDYxLCAweDZELCAweDZELCAweDY5LCAweDZFLCAweDY3LCAweDJELCAweDMzLCAweDMwLCAweDM3LAorICAgICAgICAweDMyLCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDAzLAorICAgICAgICAweDBDLCAweDBGLCAweDc3LCAweDc3LCAweDc3LCAweDJFLCAweDc3LCAweDZGLCAweDZDLCAweDY2LAorICAgICAgICAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMxLCAweDFGLCAweDMwLAorICAgICAgICAweDFELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLAorICAgICAgICAweDA5LCAweDAxLCAweDE2LCAweDEwLCAweDY5LCAweDZFLCAweDY2LCAweDZGLCAweDQwLCAweDc3LAorICAgICAgICAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELAorICAgICAgICAweDMwLCAweDFFLCAweDE3LCAweDBELCAweDMyLCAweDMxLCAweDMwLCAweDMyLCAweDMxLCAweDMwLAorICAgICAgICAweDMxLCAweDM5LCAweDM0LCAweDM5LCAweDM1LCAweDMyLCAweDVBLCAweDE3LCAweDBELCAweDMyLAorICAgICAgICAweDMzLCAweDMxLCAweDMxLCAweDMwLCAweDM3LCAweDMxLCAweDM5LCAweDM0LCAweDM5LCAweDM1LAorICAgICAgICAweDMyLCAweDVBLCAweDMwLCAweDgxLCAweDlFLCAweDMxLCAweDBCLCAweDMwLCAweDA5LCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLCAweDU1LCAweDUzLCAweDMxLCAweDEwLAorICAgICAgICAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA4LCAweDBDLCAweDA3LCAweDRELAorICAgICAgICAweDZGLCAweDZFLCAweDc0LCAweDYxLCAweDZFLCAweDYxLCAweDMxLCAweDEwLCAweDMwLCAweDBFLAorICAgICAgICAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLCAweDA3LCAweDQyLCAweDZGLCAweDdBLAorICAgICAgICAweDY1LCAweDZELCAweDYxLCAweDZFLCAweDMxLCAweDE1LCAweDMwLCAweDEzLCAweDA2LCAweDAzLAorICAgICAgICAweDU1LCAweDA0LCAweDBBLCAweDBDLCAweDBDLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDUzLAorICAgICAgICAweDUzLCAweDRDLCAweDVGLCAweDMzLCAweDMwLCAweDM3LCAweDMyLCAweDMxLCAweDE5LCAweDMwLAorICAgICAgICAweDE3LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBCLCAweDBDLCAweDEwLCAweDUwLCAweDcyLAorICAgICAgICAweDZGLCAweDY3LCAweDcyLCAweDYxLCAweDZELCAweDZELCAweDY5LCAweDZFLCAweDY3LCAweDJELAorICAgICAgICAweDMzLCAweDMwLCAweDM3LCAweDMyLCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLAorICAgICAgICAweDU1LCAweDA0LCAweDAzLCAweDBDLCAweDBGLCAweDc3LCAweDc3LCAweDc3LCAweDJFLCAweDc3LAorICAgICAgICAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELAorICAgICAgICAweDMxLCAweDFGLCAweDMwLCAweDFELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LAorICAgICAgICAweEY3LCAweDBELCAweDAxLCAweDA5LCAweDAxLCAweDE2LCAweDEwLCAweDY5LCAweDZFLCAweDY2LAorICAgICAgICAweDZGLCAweDQwLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLAorICAgICAgICAweDYzLCAweDZGLCAweDZELCAweDMwLCAweDgyLCAweDAxLCAweEEyLCAweDMwLCAweDBELCAweDA2LAorICAgICAgICAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDAxLCAweDAxLAorICAgICAgICAweDA1LCAweDAwLCAweDAzLCAweDgyLCAweDAxLCAweDhGLCAweDAwLCAweDMwLCAweDgyLCAweDAxLAorICAgICAgICAweDhBLCAweDAyLCAweDgyLCAweDAxLCAweDgxLCAweDAwLCAweEFDLCAweDM5LCAweDUwLCAweDY4LAorICAgICAgICAweDhGLCAweDc4LCAweEY4LCAweDEwLCAweDlCLCAweDY4LCAweDk2LCAweEQzLCAweEUxLCAweDlDLAorICAgICAgICAweDU2LCAweDY4LCAweDVBLCAweDQxLCAweDYyLCAweEUzLCAweEIzLCAweDQxLCAweEIwLCAweDU1LAorICAgICAgICAweDgwLCAweDE3LCAweEIwLCAweDg4LCAweDE2LCAweDlCLCAweEUwLCAweDk3LCAweDc0LCAweDVGLAorICAgICAgICAweDQyLCAweDc5LCAweDczLCAweDQyLCAweERGLCAweDkzLCAweEYzLCAweEFBLCAweDlELCAweEVFLAorICAgICAgICAweDJELCAweDZGLCAweEFBLCAweEJDLCAweDI3LCAweDkwLCAweDg0LCAweEMwLCAweDVELCAweEM3LAorICAgICAgICAweEVDLCAweDQ5LCAweEVBLCAweDVDLCAweDY2LCAweDFELCAweDcwLCAweDlDLCAweDUzLCAweDVDLAorICAgICAgICAweEJBLCAweEExLCAweEIzLCAweDU4LCAweEM5LCAweDNFLCAweDhFLCAweDlCLCAweDcyLCAweDNELAorICAgICAgICAweDZFLCAweDAyLCAweDAyLCAweDAwLCAweDlDLCAweDY1LCAweDU2LCAweDgyLCAweEEzLCAweDIyLAorICAgICAgICAweEI0LCAweDA4LCAweDVGLCAweDJBLCAweEVGLCAweERGLCAweDlBLCAweEQwLCAweEU3LCAweDMxLAorICAgICAgICAweDU5LCAweDI2LCAweDVCLCAweDBCLCAweDFDLCAweDYzLCAweDYxLCAweEZGLCAweEQ1LCAweDY5LAorICAgICAgICAweDMyLCAweDE5LCAweDA2LCAweDdFLCAweDBGLCAweDQwLCAweDNDLCAweDdBLCAweDFFLCAweEM4LAorICAgICAgICAweEZDLCAweDU4LCAweDZDLCAweDY0LCAweEFFLCAweDEwLCAweDNELCAweEE4LCAweDIzLCAweEZGLAorICAgICAgICAweDhFLCAweDFBLCAweENBLCAweDZBLCAweDgyLCAweEUyLCAweEY5LCAweDAxLCAweDY0LCAweDJDLAorICAgICAgICAweDk3LCAweEEwLCAweDFBLCAweDg5LCAweEEwLCAweDc0LCAweEQzLCAweEI2LCAweDA1LCAweDExLAorICAgICAgICAweEYyLCAweDYyLCAweDA2LCAweDQ4LCAweDJBLCAweEY3LCAweDY2LCAweENFLCAweEMxLCAweDg1LAorICAgICAgICAweEUxLCAweEQyLCAweDI3LCAweEVBLCAweENBLCAweDEyLCAweEE1LCAweDkxLCAweDk3LCAweDNFLAorICAgICAgICAweEZDLCAweDk0LCAweDA2LCAweDU5LCAweDUxLCAweEMwLCAweEU3LCAweDEzLCAweEI2LCAweDg3LAorICAgICAgICAweDdCLCAweDVGLCAweEQyLCAweEMwLCAweDU2LCAweDJGLCAweDVFLCAweDFELCAweDAyLCAweEMzLAorICAgICAgICAweDExLCAweDJDLCAweERGLCAweEY3LCAweDAxLCAweERBLCAweEJELCAweDg1LCAweDU0LCAweDM1LAorICAgICAgICAweDMyLCAweDVGLCAweEM1LCAweEM4LCAweEY5LCAweDdBLCAweDlGLCAweDg5LCAweEY3LCAweDAzLAorICAgICAgICAweDBFLCAweDdFLCAweDc5LCAweDVELCAweDA0LCAweDgyLCAweDM1LCAweDEwLCAweEZFLCAweDZELAorICAgICAgICAweDlCLCAweEJGLCAweEI4LCAweEVFLCAweEUyLCAweDYyLCAweDg3LCAweDI2LCAweDVFLCAweDJGLAorICAgICAgICAweDUwLCAweDJGLCAweDc4LCAweDBDLCAweEU4LCAweDczLCAweDRGLCAweDg4LCAweDZBLCAweEQ2LAorICAgICAgICAweDI2LCAweEE0LCAweEM5LCAweEZDLCAweEZBLCAweDFFLCAweDhBLCAweEIwLCAweEY0LCAweDMyLAorICAgICAgICAweENGLCAweDU3LCAweENELCAweEExLCAweDU4LCAweDhBLCAweDQ5LCAweDBGLCAweEJCLCAweEE5LAorICAgICAgICAweDFELCAweDg2LCAweEFCLCAweEI5LCAweDhGLCAweDhELCAweDU3LCAweDE5LCAweEIyLCAweDVBLAorICAgICAgICAweDdFLCAweEE0LCAweEVBLCAweENDLCAweEI3LCAweDk2LCAweDdBLCAweDNCLCAweDM4LCAweENELAorICAgICAgICAweERFLCAweEUwLCAweDYxLCAweEZDLCAweEM5LCAweDA2LCAweDhGLCAweDkzLCAweDVBLCAweENFLAorICAgICAgICAweEFELCAweDJBLCAweEUzLCAweDJELCAweDNFLCAweDM5LCAweDVELCAweDQxLCAweDgzLCAweDAxLAorICAgICAgICAweDFGLCAweDBGLCAweEUxLCAweDdGLCAweDc2LCAweEM3LCAweDI4LCAweERBLCAweDU2LCAweEVGLAorICAgICAgICAweEJGLCAweERDLCAweDI2LCAweDM1LCAweDQwLCAweEJFLCAweEFELCAweEM3LCAweDM4LCAweEFELAorICAgICAgICAweEE0LCAweDA2LCAweEFDLCAweENBLCAweEU4LCAweDUxLCAweEVCLCAweEMwLCAweEY4LCAweDY4LAorICAgICAgICAweDAyLCAweDJDLCAweDlCLCAweEExLCAweDE0LCAweEJDLCAweEY4LCAweDYxLCAweDg2LCAweEQ3LAorICAgICAgICAweDU2LCAweEQ3LCAweDczLCAweEY0LCAweEFCLCAweEJCLCAweDZBLCAweDIxLCAweEQzLCAweDg4LAorICAgICAgICAweDIyLCAweEI0LCAweEU3LCAweDZGLCAweDdGLCAweDkxLCAweEU1LCAweDBFLCAweEM2LCAweDA4LAorICAgICAgICAweDQ5LCAweERFLCAweEVBLCAweDEzLCAweDU4LCAweDcyLCAweEEwLCAweEFBLCAweDNBLCAweEY5LAorICAgICAgICAweDM2LCAweDAzLCAweDQ1LCAweDU3LCAweDVFLCAweDg3LCAweEQyLCAweDczLCAweDY1LCAweEM0LAorICAgICAgICAweDhDLCAweEEzLCAweEVFLCAweEM5LCAweEQ2LCAweDczLCAweDdDLCAweDk2LCAweDQxLCAweDkzLAorICAgICAgICAweDAyLCAweDAzLCAweDAxLCAweDAwLCAweDAxLCAweEEzLCAweDgyLCAweDAxLCAweDQ0LCAweDMwLAorICAgICAgICAweDgyLCAweDAxLCAweDQwLCAweDMwLCAweDFELCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDBFLAorICAgICAgICAweDA0LCAweDE2LCAweDA0LCAweDE0LCAweDNELCAweEQxLCAweDg0LCAweEMyLCAweEFGLCAweEIwLAorICAgICAgICAweDIwLCAweDQ5LCAweEJDLCAweDc0LCAweDg3LCAweDQxLCAweDM4LCAweEFCLCAweEJBLCAweEQyLAorICAgICAgICAweEQ0LCAweDBDLCAweEEzLCAweEE4LCAweDMwLCAweDgxLCAweEQzLCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDFELCAweDIzLCAweDA0LCAweDgxLCAweENCLCAweDMwLCAweDgxLCAweEM4LCAweDgwLCAweDE0LAorICAgICAgICAweDNELCAweEQxLCAweDg0LCAweEMyLCAweEFGLCAweEIwLCAweDIwLCAweDQ5LCAweEJDLCAweDc0LAorICAgICAgICAweDg3LCAweDQxLCAweDM4LCAweEFCLCAweEJBLCAweEQyLCAweEQ0LCAweDBDLCAweEEzLCAweEE4LAorICAgICAgICAweEExLCAweDgxLCAweEE0LCAweEE0LCAweDgxLCAweEExLCAweDMwLCAweDgxLCAweDlFLCAweDMxLAorICAgICAgICAweDBCLCAweDMwLCAweDA5LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLAorICAgICAgICAweDU1LCAweDUzLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LAorICAgICAgICAweDA4LCAweDBDLCAweDA3LCAweDRELCAweDZGLCAweDZFLCAweDc0LCAweDYxLCAweDZFLCAweDYxLAorICAgICAgICAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLAorICAgICAgICAweDA3LCAweDQyLCAweDZGLCAweDdBLCAweDY1LCAweDZELCAweDYxLCAweDZFLCAweDMxLCAweDE1LAorICAgICAgICAweDMwLCAweDEzLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBBLCAweDBDLCAweDBDLCAweDc3LAorICAgICAgICAweDZGLCAweDZDLCAweDY2LCAweDUzLCAweDUzLCAweDRDLCAweDVGLCAweDMzLCAweDMwLCAweDM3LAorICAgICAgICAweDMyLCAweDMxLCAweDE5LCAweDMwLCAweDE3LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBCLAorICAgICAgICAweDBDLCAweDEwLCAweDUwLCAweDcyLCAweDZGLCAweDY3LCAweDcyLCAweDYxLCAweDZELCAweDZELAorICAgICAgICAweDY5LCAweDZFLCAweDY3LCAweDJELCAweDMzLCAweDMwLCAweDM3LCAweDMyLCAweDMxLCAweDE4LAorICAgICAgICAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDAzLCAweDBDLCAweDBGLCAweDc3LAorICAgICAgICAweDc3LCAweDc3LCAweDJFLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLAorICAgICAgICAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMxLCAweDFGLCAweDMwLCAweDFELCAweDA2LCAweDA5LAorICAgICAgICAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDA5LCAweDAxLCAweDE2LAorICAgICAgICAweDEwLCAweDY5LCAweDZFLCAweDY2LCAweDZGLCAweDQwLCAweDc3LCAweDZGLCAweDZDLCAweDY2LAorICAgICAgICAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDgyLCAweDA5LCAweDAwLAorICAgICAgICAweEE0LCAweEUwLCAweEFBLCAweEYzLCAweDI5LCAweDUwLCAweDM5LCAweDhBLCAweDMwLCAweDBDLAorICAgICAgICAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDEzLCAweDA0LCAweDA1LCAweDMwLCAweDAzLCAweDAxLAorICAgICAgICAweDAxLCAweEZGLCAweDMwLCAweDFDLCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDExLCAweDA0LAorICAgICAgICAweDE1LCAweDMwLCAweDEzLCAweDgyLCAweDBCLCAweDY1LCAweDc4LCAweDYxLCAweDZELCAweDcwLAorICAgICAgICAweDZDLCAweDY1LCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDg3LCAweDA0LCAweDdGLCAweDAwLAorICAgICAgICAweDAwLCAweDAxLCAweDMwLCAweDFELCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDI1LCAweDA0LAorICAgICAgICAweDE2LCAweDMwLCAweDE0LCAweDA2LCAweDA4LCAweDJCLCAweDA2LCAweDAxLCAweDA1LCAweDA1LAorICAgICAgICAweDA3LCAweDAzLCAweDAxLCAweDA2LCAweDA4LCAweDJCLCAweDA2LCAweDAxLCAweDA1LCAweDA1LAorICAgICAgICAweDA3LCAweDAzLCAweDAyLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LAorICAgICAgICAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDAxLCAweDBCLCAweDA1LCAweDAwLCAweDAzLCAweDgyLAorICAgICAgICAweDAxLCAweDgxLCAweDAwLCAweDU3LCAweDIxLCAweEMwLCAweEFELCAweDZFLCAweDE2LCAweDc0LAorICAgICAgICAweEQ1LCAweEIxLCAweDhCLCAweDE5LCAweDU1LCAweDQ5LCAweDdBLCAweEE0LCAweDVFLCAweEQ2LAorICAgICAgICAweDE4LCAweEY5LCAweDAzLCAweDgwLCAweDRCLCAweEMyLCAweDcxLCAweEQxLCAweDA0LCAweDQ3LAorICAgICAgICAweDlDLCAweEIzLCAweDczLCAweDlDLCAweDRGLCAweDYyLCAweDRBLCAweDNBLCAweDlBLCAweEQ0LAorICAgICAgICAweDQ4LCAweEU0LCAweDgxLCAweERCLCAweDhELCAweDE1LCAweERGLCAweDVELCAweDBGLCAweDA4LAorICAgICAgICAweDEzLCAweDI4LCAweDI4LCAweEQ3LCAweDA1LCAweDQ0LCAweEMxLCAweEI5LCAweDZELCAweEYxLAorICAgICAgICAweDc1LCAweDYwLCAweDc0LCAweEQwLCAweDQ0LCAweEFFLCAweDkxLCAweDBGLCAweDNBLCAweDdDLAorICAgICAgICAweEY0LCAweEVFLCAweEVBLCAweDZGLCAweDA2LCAweDNBLCAweDQxLCAweEFFLCAweDZCLCAweDVDLAorICAgICAgICAweDhBLCAweDBELCAweDg1LCAweDZCLCAweEIzLCAweEZCLCAweEIxLCAweDVGLCAweDcwLCAweEY3LAorICAgICAgICAweDlCLCAweDMyLCAweDU3LCAweEZCLCAweEM0LCAweDZCLCAweENFLCAweDkwLCAweDg2LCAweDBDLAorICAgICAgICAweDk2LCAweDhBLCAweDQxLCAweDRFLCAweDYxLCAweEYzLCAweEExLCAweDNGLCAweDU1LCAweEU4LAorICAgICAgICAweDk0LCAweDU2LCAweDEyLCAweDZELCAweDlFLCAweDQ2LCAweDJDLCAweDMxLCAweEJELCAweDNGLAorICAgICAgICAweDhBLCAweDcwLCAweEM4LCAweDIwLCAweEE0LCAweEZCLCAweEZBLCAweEM2LCAweDUzLCAweDU4LAorICAgICAgICAweEJCLCAweDA1LCAweDI4LCAweEJBLCAweDg5LCAweDBDLCAweEIxLCAweDVGLCAweDIxLCAweEFDLAorICAgICAgICAweDFFLCAweEYxLCAweDM1LCAweEZELCAweDZCLCAweDE0LCAweEMxLCAweDY5LCAweDA4LCAweEU5LAorICAgICAgICAweDM3LCAweDE0LCAweEQ4LCAweDc2LCAweDUwLCAweDJBLCAweEZDLCAweEFBLCAweDk0LCAweDdGLAorICAgICAgICAweDM5LCAweDUyLCAweDNBLCAweEE3LCAweDNDLCAweDBBLCAweDUzLCAweDVFLCAweEUwLCAweDEzLAorICAgICAgICAweDFBLCAweDAwLCAweENBLCAweEFDLCAweEFBLCAweDdFLCAweEY3LCAweDA5LCAweDY4LCAweDc4LAorICAgICAgICAweDYwLCAweDExLCAweDczLCAweEFCLCAweDdELCAweDU4LCAweEZFLCAweDAzLCAweDlGLCAweEU2LAorICAgICAgICAweDg0LCAweEVBLCAweDUxLCAweDU4LCAweDQwLCAweDgyLCAweEE1LCAweEZGLCAweEE3LCAweDJDLAorICAgICAgICAweEVBLCAweDQyLCAweEE1LCAweDRDLCAweEI2LCAweDNCLCAweDVDLCAweDZCLCAweEFCLCAweENGLAorICAgICAgICAweDU2LCAweDhBLCAweDhDLCAweEVDLCAweDNDLCAweEYwLCAweEFFLCAweEQzLCAweENBLCAweDBFLAorICAgICAgICAweDA5LCAweDcxLCAweENGLCAweDc5LCAweDk2LCAweDcyLCAweDYzLCAweDRCLCAweDI0LCAweDdBLAorICAgICAgICAweEYzLCAweDc5LCAweENBLCAweDY5LCAweDc1LCAweEM5LCAweEIyLCAweEE0LCAweDU0LCAweEI4LAorICAgICAgICAweDg0LCAweDQwLCAweDJCLCAweDhGLCAweDI0LCAweDI3LCAweDZBLCAweEVELCAweDhGLCAweDUzLAorICAgICAgICAweEUwLCAweDU1LCAweDlCLCAweDM1LCAweDkxLCAweDE4LCAweDExLCAweENGLCAweEIwLCAweDNCLAorICAgICAgICAweEI4LCAweDY1LCAweDNDLCAweEM2LCAweEVGLCAweEIwLCAweDc4LCAweDdDLCAweDQzLCAweDI2LAorICAgICAgICAweEYxLCAweDEyLCAweDg0LCAweDZCLCAweDJCLCAweEYwLCAweDdELCAweDNDLCAweDdGLCAweERDLAorICAgICAgICAweDY3LCAweEE0LCAweDE3LCAweDg5LCAweDc1LCAweDAwLCAweDg2LCAweDFBLCAweEVBLCAweENELAorICAgICAgICAweDFBLCAweENGLCAweERBLCAweDExLCAweDY0LCAweENDLCAweEJELCAweDEwLCAweDI2LCAweEVGLAorICAgICAgICAweDZCLCAweDFCLCAweDkzLCAweEIzLCAweDM3LCAweDE0LCAweDdGLCAweDEyLCAweDgwLCAweDgxLAorICAgICAgICAweEI2LCAweEZELCAweDhBLCAweDhBLCAweEQ4LCAweDk1LCAweDVGLCAweEY5LCAweDFFLCAweEE1LAorICAgICAgICAweDFFLCAweDY1LCAweDVGLCAweDc1LCAweDhELCAweDkwLCAweDJBLCAweDBELCAweEIxLCAweEFCLAorICAgICAgICAweDI2LCAweDE2LCAweDMxLCAweEIyLCAweDA2LCAweDY0LCAweDZGLCAweDJCLCAweDdFLCAweDRBLAorICAgICAgICAweEY0LCAweERFLCAweEU5LCAweDdBLCAweEVDLCAweDY3LCAweDM1LCAweEYzLCAweDQwLCAweDcxLAorICAgICAgICAweDc1LCAweDM3LCAweEIzLCAweEUxLCAweDFELCAweEVGLCAweDdELCAweEUyLCAweDkyLCAweEVDLAorICAgICAgICAweEQ1LCAweEU1LCAweEJCLCAweDk5LCAweDc5LCAweDUwLCAweDExLCAweEIyLCAweDhBLCAweDU3LAorICAgICAgICAweDFCLCAweDMwLCAweDJFLCAweEI3LCAweDE2LCAweDRDLCAweEM4LCAweEE2LCAweDk5LCAweEIxLAorICAgICAgICAweDAxLCAweDM0LCAweDA4LCAweDlELCAweEQ4LCAweERGLCAweEFGCit9Oworc3RhdGljIGNvbnN0IGludCBzaXplb2ZfY2xpZW50X2NlcnRfZGVyXzMwNzIgPSBzaXplb2YoY2xpZW50X2NlcnRfZGVyXzMwNzIpOworCisjZW5kaWYgLyogVVNFX0NFUlRfQlVGRkVSU18zMDcyICovCisKKyNpZmRlZiBVU0VfQ0VSVF9CVUZGRVJTXzQwOTYKKworLyogLi9jZXJ0cy80MDk2L2NsaWVudC1rZXkuZGVyLCA0MDk2LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2xpZW50X2tleV9kZXJfNDA5NltdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwOSwgMHgyOCwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMiwKKyAgICAgICAgMHgwMSwgMHgwMCwgMHhGNSwgMHhEMCwgMHgzMSwgMHhFNCwgMHg3MSwgMHg1OSwgMHg1OCwgMHhCMywKKyAgICAgICAgMHgwNywgMHg1MCwgMHhERCwgMHgxNiwgMHg3OSwgMHhGQywgMHhDNiwgMHg5NSwgMHg1MCwgMHhGQywKKyAgICAgICAgMHg0NiwgMHgwRSwgMHg1NywgMHgxMiwgMHg4NiwgMHg3MSwgMHg4RCwgMHhFMywgMHg5QiwgMHg0QSwKKyAgICAgICAgMHgzMywgMHhFQSwgMHg0RiwgMHhEOSwgMHgxNywgMHgxMywgMHg2RCwgMHg0OCwgMHg2OSwgMHhERiwKKyAgICAgICAgMHg1OSwgMHgxMSwgMHgwOCwgMHgwMiwgMHg5RCwgMHhBRiwgMHgyQiwgMHhDNywgMHgzMCwgMHhCRSwKKyAgICAgICAgMHgwQywgMHhEQywgMHg4NywgMHhENCwgMHg1QSwgMHgxMiwgMHgwOSwgMHgyMywgMHg1RCwgMHhFMSwKKyAgICAgICAgMHg3NiwgMHg1QSwgMHg2MiwgMHgzNywgMHg0NiwgMHg3NCwgMHhFRiwgMHgwMywgMHgwNSwgMHhCQiwKKyAgICAgICAgMHgxRSwgMHg2RCwgMHgyOSwgMHg3NSwgMHg2QywgMHgyRSwgMHg5RCwgMHg4NywgMHgwRCwgMHg4RiwKKyAgICAgICAgMHg4NywgMHhDQiwgMHgxNCwgMHg5NSwgMHg5QiwgMHhCRSwgMHgxNywgMHg2QiwgMHg1MSwgMHhEMSwKKyAgICAgICAgMHg0QywgMHhEQSwgMHhENywgMHg5MSwgMHg2NiwgMHhDNSwgMHgzNiwgMHhFQiwgMHhFMCwgMHgwNywKKyAgICAgICAgMHgxQSwgMHg3NiwgMHg0RCwgMHhCMCwgMHhGQiwgMHhDMSwgMHhGNSwgMHg1RSwgMHgwNSwgMHhEQiwKKyAgICAgICAgMHhCQSwgMHhDQiwgMHgyNSwgMHhEOSwgMHg5OSwgMHgxMywgMHgxQywgMHhDMCwgMHgzNSwgMHhEQywKKyAgICAgICAgMHg0MCwgMHhFOSwgMHgzNiwgMHhDRCwgMHhDNCwgMHhENSwgMHg3QSwgMHg0MSwgMHg3MCwgMHgwRiwKKyAgICAgICAgMHgzNiwgMHhFQiwgMHhBNSwgMHg0RSwgMHgxNywgMHgwNSwgMHhENSwgMHg3NSwgMHgxQiwgMHg2NCwKKyAgICAgICAgMHg2MiwgMHg3QSwgMHgzRiwgMHgwRCwgMHgyOCwgMHg0OCwgMHg2QSwgMHhFMywgMHhBQywgMHg5QywKKyAgICAgICAgMHhBOCwgMHg4RiwgMHhFOSwgMHhFRCwgMHhGNywgMHhDRCwgMHgyNCwgMHhBMCwgMHhCMSwgMHhBMCwKKyAgICAgICAgMHgwMywgMHhBQywgMHhFMywgMHgwMywgMHhGNSwgMHgzRiwgMHhEMSwgMHg5NiwgMHhGRiwgMHgyQSwKKyAgICAgICAgMHg3RSwgMHgwOCwgMHhCMSwgMHhEMywgMHhFMCwgMHgxOCwgMHgxNCwgMHhFQywgMHg2NSwgMHgzNywKKyAgICAgICAgMHg1MCwgMHg0MywgMHhDMiwgMHg2QSwgMHg4QywgMHhGNCwgMHg1QiwgMHhGRSwgMHhDNCwgMHhDQiwKKyAgICAgICAgMHg4RCwgMHgzRiwgMHg4MSwgMHgwMiwgMHhGNywgMHhDMiwgMHhERCwgMHhFNCwgMHhDMSwgMHg4RSwKKyAgICAgICAgMHg4MCwgMHgwQywgMHgwNCwgMHgyNSwgMHgyRCwgMHg4MCwgMHg1QSwgMHgyRSwgMHgwRiwgMHgyMiwKKyAgICAgICAgMHgzNSwgMHg0QSwgMHhGNCwgMHg4NSwgMHhFRCwgMHg1MSwgMHhEOCwgMHhBQiwgMHg2RCwgMHg4RiwKKyAgICAgICAgMHhBMiwgMHgzQiwgMHgyNCwgMHgwMCwgMHg2RSwgMHg4MSwgMHhFMiwgMHgxRSwgMHg3NiwgMHhENiwKKyAgICAgICAgMHhBQywgMHgzMSwgMHgxMiwgMHhEQiwgMHhGMywgMHg4RSwgMHgwNywgMHhBMSwgMHhERSwgMHg4OSwKKyAgICAgICAgMHg0QSwgMHgzOSwgMHg2MCwgMHg3NywgMHhDNSwgMHhBQSwgMHhGMSwgMHg1MSwgMHhFNiwgMHgwNiwKKyAgICAgICAgMHhGMSwgMHg5NSwgMHg1NiwgMHgyQSwgMHhFMSwgMHg4RSwgMHg5MiwgMHgzMCwgMHg5RiwgMHhGRSwKKyAgICAgICAgMHg1OCwgMHg0NCwgMHhBQywgMHg0NiwgMHhGMiwgMHhGRCwgMHg5QSwgMHhGQywgMHhBOCwgMHgxRCwKKyAgICAgICAgMHhBMSwgMHhEMywgMHg1NSwgMHgzNywgMHg0QSwgMHg4QiwgMHhGQywgMHg5QywgMHgzMywgMHhGOCwKKyAgICAgICAgMHhBNywgMHg2MSwgMHg0OCwgMHg0MSwgMHg3QywgMHg5QywgMHg3NywgMHgzRiwgMHhGNSwgMHg4MCwKKyAgICAgICAgMHgyMywgMHg3RCwgMHg0MywgMHhCNCwgMHhENSwgMHg4OCwgMHgwQSwgMHhDOSwgMHg3NSwgMHhENywKKyAgICAgICAgMHg0NCwgMHgxOSwgMHg0RCwgMHg3NywgMHg2QywgMHgwQiwgMHgwQSwgMHg0OSwgMHhBQSwgMHgxQywKKyAgICAgICAgMHgyRiwgMHhENiwgMHg1QSwgMHg0NCwgMHhBNiwgMHg0NywgMHg0RCwgMHhFNSwgMHgzNiwgMHg5NiwKKyAgICAgICAgMHg0MCwgMHg5OSwgMHgyQywgMHg1NiwgMHgyNiwgMHhCMSwgMHhGMiwgMHg5MiwgMHgzMSwgMHg1OSwKKyAgICAgICAgMHhENywgMHgyQywgMHhENCwgMHhCNCwgMHgyMSwgMHhENiwgMHg2NSwgMHgxMywgMHgwQiwgMHgzRSwKKyAgICAgICAgMHhGQiwgMHhGRiwgMHgwNCwgMHhFQiwgMHhCOSwgMHg4NSwgMHhCOSwgMHhEOCwgMHhEOCwgMHgyOCwKKyAgICAgICAgMHg0RiwgMHg1QywgMHgxNywgMHg5NiwgMHhBMywgMHg1MSwgMHhCRSwgMHhGRSwgMHg3RCwgMHgwQiwKKyAgICAgICAgMHgxQiwgMHg0OCwgMHg0MCwgMHgyNSwgMHg3NiwgMHg5NCwgMHhEQywgMHg0MSwgMHhGQiwgMHhCRiwKKyAgICAgICAgMHg3MywgMHg3NiwgMHhEQSwgMHhFQiwgMHhCMywgMHg2MiwgMHhFNywgMHhDMSwgMHhDOCwgMHg1NCwKKyAgICAgICAgMHg2QSwgMHg5MywgMHhFMSwgMHg4RCwgMHgzMSwgMHhFOCwgMHgzRSwgMHgzRSwgMHhERiwgMHhCQywKKyAgICAgICAgMHg4NywgMHgwMiwgMHgzMCwgMHgyMiwgMHg1NywgMHhDNCwgMHhFMCwgMHgxOCwgMHg3QSwgMHhEMywKKyAgICAgICAgMHhBRSwgMHhFNCwgMHgwMiwgMHg5QiwgMHhBQSwgMHhCRCwgMHg0RSwgMHg0OSwgMHg0NywgMHg3MiwKKyAgICAgICAgMHhFOSwgMHg4RCwgMHgxMywgMHgyRCwgMHg1NCwgMHg5QiwgMHgwMCwgMHhBNywgMHg5MSwgMHg2MSwKKyAgICAgICAgMHg3MSwgMHhDOSwgMHhDQywgMHg0OCwgMHg0RiwgMHhFRSwgMHhERiwgMHg1RSwgMHgxQiwgMHgxQSwKKyAgICAgICAgMHhERiwgMHg2NywgMHhEMywgMHgyMCwgMHhFNiwgMHg0NCwgMHg0NSwgMHg5OCwgMHg3RSwgMHhFNywKKyAgICAgICAgMHgwRSwgMHg2MywgMHgxNiwgMHg4MywgMHhDOSwgMHgyNiwgMHg1RCwgMHg5MCwgMHhDMSwgMHhFNSwKKyAgICAgICAgMHgyQSwgMHg1QywgMHg0NSwgMHg1NCwgMHgxMywgMHhCMiwgMHg4MSwgMHgxOCwgMHgwNiwgMHgyMCwKKyAgICAgICAgMHgyRSwgMHgyRSwgMHg2NiwgMHg1QSwgMHhCNSwgMHg3QiwgMHg2RSwgMHhENiwgMHgwQywgMHg0RSwKKyAgICAgICAgMHg4OSwgMHgwMSwgMHg1NiwgMHg3MCwgMHhCQiwgMHhBRSwgMHhERSwgMHhFOSwgMHg5OSwgMHg1RSwKKyAgICAgICAgMHhEMSwgMHhCOSwgMHgzQSwgMHhCNywgMHg2QywgMHgxNywgMHhCNiwgMHgwMywgMHhBOSwgMHgwOCwKKyAgICAgICAgMHhERCwgMHg5QywgMHhGNCwgMHgxNCwgMHhDOSwgMHhDOSwgMHg1OSwgMHgzOSwgMHg3MiwgMHhENCwKKyAgICAgICAgMHg3RSwgMHgwMiwgMHgzNywgMHgzMSwgMHhDRCwgMHgwRSwgMHhBNywgMHgzRCwgMHhGOCwgMHhGMiwKKyAgICAgICAgMHhDRiwgMHg2QiwgMHgxNSwgMHhBQiwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwKKyAgICAgICAgMHg4MiwgMHgwMiwgMHgwMSwgMHgwMCwgMHhDNSwgMHg3NiwgMHg1NywgMHg3RCwgMHhGMSwgMHg2OCwKKyAgICAgICAgMHgxQSwgMHg4RSwgMHhDNiwgMHg2MywgMHhCOSwgMHgxNiwgMHhBMywgMHgyQiwgMHhFMSwgMHhDMiwKKyAgICAgICAgMHg3NCwgMHhFQSwgMHgxMiwgMHhDNCwgMHhENiwgMHg0MSwgMHg3NSwgMHg2QSwgMHhBNiwgMHhENiwKKyAgICAgICAgMHg5RSwgMHgxQSwgMHg3RiwgMHg5NSwgMHhDQywgMHg0QSwgMHhEMSwgMHhGNCwgMHhCMywgMHgyNywKKyAgICAgICAgMHgyNiwgMHg5NSwgMHg1QSwgMHg5MSwgMHgwOSwgMHhFNCwgMHg0MCwgMHgxMywgMHg0NSwgMHg5MSwKKyAgICAgICAgMHg5RiwgMHhBMCwgMHgyQiwgMHhFOCwgMHhDMywgMHhEQywgMHg1QiwgMHhGNiwgMHg3RCwgMHgwQywKKyAgICAgICAgMHhDMiwgMHgwRiwgMHhBOSwgMHhFOSwgMHg3NSwgMHg1OCwgMHg3RCwgMHhFQSwgMHhENSwgMHg0RCwKKyAgICAgICAgMHg5MiwgMHgzRSwgMHhGQywgMHg3NCwgMHgyOCwgMHg4NywgMHhDMSwgMHgzRCwgMHhCOSwgMHgyMSwKKyAgICAgICAgMHg5MiwgMHg0RCwgMHgyOCwgMHg4MiwgMHg4NCwgMHhBOCwgMHhBMiwgMHgxMSwgMHg5MywgMHhGMiwKKyAgICAgICAgMHg4QywgMHgyOSwgMHgxQywgMHgxOSwgMHhGOCwgMHg2RCwgMHgzRiwgMHgyNywgMHg1MSwgMHhCNSwKKyAgICAgICAgMHgyRCwgMHhBMywgMHhDNywgMHgyOCwgMHgxRCwgMHhDNCwgMHhGQywgMHg5OCwgMHg5NCwgMHhBOCwKKyAgICAgICAgMHhEMCwgMHhGRiwgMHhGMCwgMHgwRiwgMHhEQywgMHhGOSwgMHhFRCwgMHhCMywgMHhBMiwgMHhCNiwKKyAgICAgICAgMHhFRCwgMHgwRCwgMHg1RiwgMHhCRiwgMHg3OCwgMHg1QywgMHhENywgMHhBRiwgMHhCRCwgMHhBMywKKyAgICAgICAgMHhFRiwgMHg4NiwgMHhFOSwgMHg1MSwgMHg2NiwgMHhEQiwgMHg1MiwgMHgzNywgMHg0NywgMHg3RiwKKyAgICAgICAgMHhFOSwgMHg1RiwgMHgzQywgMHg5NCwgMHg4MywgMHgyRCwgMHhFOCwgMHg5QywgMHgzMywgMHhGMSwKKyAgICAgICAgMHg2QywgMHhFOSwgMHhGMywgMHhBNiwgMHg5NywgMHhGRSwgMHhBNywgMHhCRiwgMHg0RCwgMHg5QiwKKyAgICAgICAgMHgyMCwgMHhENSwgMHgyRiwgMHhERSwgMHhBNCwgMHgwNiwgMHhCQiwgMHhFRSwgMHg2NiwgMHg0OSwKKyAgICAgICAgMHg2QiwgMHhGNSwgMHgxMCwgMHg4NSwgMHg5RiwgMHg4NCwgMHg1QSwgMHg1MiwgMHgzRSwgMHgwQywKKyAgICAgICAgMHhBMCwgMHg0QSwgMHg0QywgMHhEQSwgMHgwMSwgMHhDNSwgMHg2MiwgMHgzMSwgMHhCMSwgMHhFQywKKyAgICAgICAgMHhGOCwgMHhERCwgMHhBMywgMHgzQiwgMHhDRSwgMHg0MSwgMHgzQSwgMHgxMiwgMHg3OSwgMHhGOSwKKyAgICAgICAgMHg5NywgMHg1QiwgMHgwNywgMHg5NSwgMHg5RiwgMHg4NiwgMHhENiwgMHgwNCwgMHg3MywgMHg2QywKKyAgICAgICAgMHhFOCwgMHg4RiwgMHg0QywgMHg0QywgMHg0OCwgMHgxRCwgMHg4NSwgMHhDNCwgMHhFNywgMHhDRSwKKyAgICAgICAgMHhERSwgMHgxNiwgMHgzMSwgMHhGNiwgMHg1QywgMHgzNywgMHg1NCwgMHg4RSwgMHg1NSwgMHhCQywKKyAgICAgICAgMHhBRiwgMHgyRSwgMHg0NywgMHhFOCwgMHhBQywgMHgwMywgMHhCMCwgMHhBNCwgMHhGOSwgMHg5MCwKKyAgICAgICAgMHg5OCwgMHg5OSwgMHhBNCwgMHhEQywgMHg2RSwgMHg5OCwgMHgwOCwgMHg1QywgMHgwNywgMHhCQiwKKyAgICAgICAgMHgwOCwgMHg5MywgMHhBRiwgMHg2MSwgMHg4RCwgMHg3NCwgMHhBOCwgMHhGOCwgMHhDNCwgMHg4OSwKKyAgICAgICAgMHg2NCwgMHgxMCwgMHhFMSwgMHhFNiwgMHhDMCwgMHhDRCwgMHgxRCwgMHgzOSwgMHgyMCwgMHhENiwKKyAgICAgICAgMHg1QSwgMHg4OSwgMHg4MywgMHhGQywgMHgzNywgMHhFMiwgMHgxMiwgMHg2NiwgMHhBOCwgMHgxMiwKKyAgICAgICAgMHhDQywgMHg3MiwgMHhCQiwgMHgxRSwgMHhGQiwgMHg2QSwgMHhFMywgMHg3QywgMHg3MSwgMHg3RSwKKyAgICAgICAgMHhCOSwgMHgyRSwgMHg4RSwgMHg4NCwgMHg2NiwgMHhFMSwgMHhCOSwgMHhEMCwgMHgyNSwgMHg5QSwKKyAgICAgICAgMHg2RiwgMHg5RCwgMHgxOSwgMHhFNiwgMHg3RSwgMHhFOCwgMHhEOCwgMHhGMCwgMHhDNSwgMHgyMywKKyAgICAgICAgMHgxNiwgMHg5QSwgMHg2OCwgMHgyQywgMHgxRCwgMHg1NSwgMHhBRSwgMHg4RSwgMHg5MCwgMHhFRSwKKyAgICAgICAgMHg4RSwgMHhFQywgMHg1RSwgMHg0NiwgMHg5RCwgMHg2MCwgMHg1MiwgMHgzMiwgMHgxNywgMHgyOCwKKyAgICAgICAgMHg1OSwgMHhDNCwgMHg0OSwgMHgyQSwgMHgyMCwgMHgzRSwgMHg5NSwgMHhDNSwgMHhERiwgMHhGNiwKKyAgICAgICAgMHgzRCwgMHhGNywgMHhDNSwgMHhDRiwgMHhCMSwgMHhDMiwgMHhDOSwgMHg3NiwgMHhGOCwgMHgzRCwKKyAgICAgICAgMHhCRSwgMHhGNCwgMHg2MywgMHhGQywgMHgyQSwgMHgwMCwgMHg2RiwgMHg5OSwgMHhBNiwgMHhCNiwKKyAgICAgICAgMHhBRCwgMHgzNSwgMHhFRSwgMHhERSwgMHhDNSwgMHhFMCwgMHg5NywgMHhDNiwgMHg3MywgMHhFRSwKKyAgICAgICAgMHgzMywgMHhBMCwgMHhBOCwgMHhGQywgMHg0QywgMHg4RiwgMHhGMiwgMHg4QywgMHg2MSwgMHhGQiwKKyAgICAgICAgMHgwMywgMHgxOSwgMHhBMSwgMHhFOCwgMHgxNywgMHg0RSwgMHhFMywgMHgyMSwgMHg1OCwgMHhDRSwKKyAgICAgICAgMHhGRSwgMHhGMiwgMHg1RiwgMHhCQiwgMHhERCwgMHg0RiwgMHhGNywgMHgxOCwgMHhDQiwgMHgzNSwKKyAgICAgICAgMHg1NywgMHhERCwgMHhFNSwgMHg1MCwgMHgyQSwgMHg3QiwgMHgxQSwgMHhFOSwgMHgxMiwgMHhGMiwKKyAgICAgICAgMHg3QSwgMHgxMSwgMHhCMSwgMHg0MywgMHhCOSwgMHg3MCwgMHgwNywgMHgwQywgMHg4RiwgMHg2OSwKKyAgICAgICAgMHhCOSwgMHhFNSwgMHhBNSwgMHhDOSwgMHhFMiwgMHgxQiwgMHg5NiwgMHg3NCwgMHgxMSwgMHhGNSwKKyAgICAgICAgMHg5NSwgMHhCOSwgMHg1OCwgMHhDMCwgMHhCRCwgMHgzNywgMHhGQiwgMHgyOCwgMHgyQSwgMHhCRCwKKyAgICAgICAgMHg4NCwgMHhCMSwgMHgyQiwgMHg2NywgMHg0MiwgMHg4MiwgMHhDMywgMHg5NSwgMHg1NSwgMHg0NSwKKyAgICAgICAgMHhENSwgMHhFQSwgMHhDMywgMHg4QSwgMHg0MiwgMHgzQSwgMHg0MywgMHgxNywgMHg1RSwgMHhDRCwKKyAgICAgICAgMHhEMiwgMHhFQSwgMHhGQywgMHhERiwgMHg2NywgMHhFQywgMHhFMSwgMHg2QywgMHhBOCwgMHgwMywKKyAgICAgICAgMHgxOSwgMHhCMiwgMHgxRCwgMHg0QSwgMHg1RiwgMHg0RiwgMHhFNywgMHhEMywgMHhFMCwgMHg4NiwKKyAgICAgICAgMHhDNSwgMHgxQSwgMHgxMCwgMHhDMywgMHgwOCwgMHhEMiwgMHhFRCwgMHg4NSwgMHg5MywgMHgwOCwKKyAgICAgICAgMHg1MSwgMHgwNSwgMHhBNiwgMHgzNywgMHgxNSwgMHgzMiwgMHhCRCwgMHg2QywgMHg3MywgMHg2MywKKyAgICAgICAgMHgwMSwgMHg1RCwgMHg1QiwgMHg0RiwgMHg2QSwgMHhEQywgMHg2RCwgMHgxRCwgMHg1NSwgMHg5MSwKKyAgICAgICAgMHgyMSwgMHhFNCwgMHg4RSwgMHhCNywgMHhGMCwgMHg4MSwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwKKyAgICAgICAgMHgwMCwgMHhGRCwgMHgyNywgMHhDOCwgMHhGRSwgMHg3NiwgMHg1QywgMHg4OSwgMHgzMiwgMHhDQiwKKyAgICAgICAgMHg4QSwgMHgyMiwgMHg4NywgMHg2MSwgMHg0OCwgMHg5MSwgMHg0QSwgMHgwNSwgMHhBRCwgMHhBNCwKKyAgICAgICAgMHg1QywgMHg4QSwgMHhDQSwgMHg1QywgMHgwMiwgMHg4OCwgMHg3RSwgMHg1MSwgMHhDNSwgMHg2NiwKKyAgICAgICAgMHg5MCwgMHgyQywgMHhBMywgMHhFRCwgMHhBNywgMHg0MywgMHgxOSwgMHgwQiwgMHhBMiwgMHg0MiwKKyAgICAgICAgMHhCNCwgMHhFMCwgMHhFMCwgMHg0NSwgMHhCRiwgMHhGRSwgMHhBMCwgMHhGMiwgMHg3NSwgMHgwQiwKKyAgICAgICAgMHg4RSwgMHg3RCwgMHg5RCwgMHg3MywgMHg2NywgMHhEMywgMHgxMCwgMHgwOSwgMHhDNSwgMHhEOSwKKyAgICAgICAgMHg4QywgMHhBRCwgMHgzQSwgMHg2NCwgMHg3MiwgMHhBRCwgMHg5NiwgMHgzNSwgMHg5MSwgMHgwRiwKKyAgICAgICAgMHg0QiwgMHhDOSwgMHhCRCwgMHg0RiwgMHg2NSwgMHg0NywgMHhBNiwgMHgyRCwgMHhFQiwgMHgzRiwKKyAgICAgICAgMHhFMiwgMHg5OSwgMHg3MiwgMHg2NiwgMHgxMiwgMHhFRCwgMHhFQiwgMHhEMiwgMHg3QywgMHhGRiwKKyAgICAgICAgMHgzQSwgMHgyMCwgMHgzNywgMHgyQSwgMHhEMywgMHg2NSwgMHg1MSwgMHg5QiwgMHhDMywgMHhBQSwKKyAgICAgICAgMHgxOCwgMHhCMSwgMHgxRiwgMHg2RSwgMHg5RCwgMHg0MCwgMHg0NywgMHhBNCwgMHgxRiwgMHg4MiwKKyAgICAgICAgMHg5QiwgMHhEQiwgMHg1MCwgMHg2QiwgMHg4NiwgMHgyRiwgMHhGQiwgMHgzRiwgMHgzMSwgMHhCOSwKKyAgICAgICAgMHg4MSwgMHgxMSwgMHgwNCwgMHgxNCwgMHg2MywgMHg4NiwgMHg0RiwgMHg0MCwgMHgyQSwgMHhGNSwKKyAgICAgICAgMHhGOSwgMHg3QywgMHhBMSwgMHg3OCwgMHgxOSwgMHgxMywgMHhEMCwgMHg1MSwgMHg1MSwgMHgwRiwKKyAgICAgICAgMHg3OSwgMHg4OCwgMHg4RCwgMHgxNCwgMHhBMywgMHhERSwgMHhCNiwgMHgzMywgMHgyOSwgMHg0MiwKKyAgICAgICAgMHhCOSwgMHhFOCwgMHg1OSwgMHg3NiwgMHhGNywgMHg0MywgMHgxQSwgMHhCNiwgMHhBNiwgMHhERiwKKyAgICAgICAgMHgwQSwgMHhDMSwgMHg0MiwgMHhDNywgMHgzRiwgMHgxQywgMHg3RSwgMHg1QywgMHgyQywgMHg5MSwKKyAgICAgICAgMHg0QiwgMHgxRSwgMHhGOCwgMHg0NiwgMHg5MSwgMHgxRiwgMHhFRSwgMHg1NiwgMHhCMywgMHgwRSwKKyAgICAgICAgMHhDOCwgMHhEMCwgMHgzMSwgMHhEMywgMHgzRCwgMHhFRCwgMHgzRCwgMHhEOSwgMHhDNSwgMHgzMCwKKyAgICAgICAgMHgwQywgMHg1OCwgMHhEOCwgMHhCNywgMHhCNSwgMHhFQywgMHgxNCwgMHhBQywgMHg0MSwgMHg2NCwKKyAgICAgICAgMHg2RCwgMHhFNCwgMHhDNiwgMHg1OSwgMHhGRCwgMHgxNCwgMHgwNSwgMHg2MCwgMHg2NSwgMHhEOCwKKyAgICAgICAgMHhDNCwgMHg4NCwgMHg0NCwgMHg3RSwgMHgxQiwgMHhCNCwgMHhBNCwgMHgxNiwgMHg3NSwgMHhDMSwKKyAgICAgICAgMHgyNywgMHg5NiwgMHhCMiwgMHgxOSwgMHhENiwgMHgzOSwgMHg1NCwgMHhDMCwgMHg5MywgMHhGMywKKyAgICAgICAgMHhENywgMHgxRiwgMHhDRCwgMHgxQiwgMHhERiwgMHhGOCwgMHgxMiwgMHg4OCwgMHgxNCwgMHg5RiwKKyAgICAgICAgMHg5OCwgMHgwNSwgMHg0NywgMHg0NiwgMHg3MSwgMHg4MSwgMHg2QywgMHhERiwgMHg5MSwgMHhFRiwKKyAgICAgICAgMHg1MywgMHhFMywgMHhDNSwgMHhCMSwgMHg4OSwgMHgyRiwgMHhFMSwgMHgwMiwgMHg4MiwgMHgwMSwKKyAgICAgICAgMHgwMSwgMHgwMCwgMHhGOCwgMHg5MywgMHg0QSwgMHgyOCwgMHg3NywgMHg5NCwgMHhFRiwgMHhFOSwKKyAgICAgICAgMHhDNCwgMHgwQSwgMHhDMywgMHhFOCwgMHg1MiwgMHg1OSwgMHhCNiwgMHgxRCwgMHg4RCwgMHhDRSwKKyAgICAgICAgMHgxNCwgMHhFNywgMHg0MywgMHhDNiwgMHhFRCwgMHgwOSwgMHgyNywgMHg1RCwgMHhGMywgMHg4RSwKKyAgICAgICAgMHgwOCwgMHg2QSwgMHgxOSwgMHg2QiwgMHgyQywgMHg5NywgMHg5QiwgMHg4OCwgMHg1MywgMHgyQiwKKyAgICAgICAgMHhEQSwgMHhGRSwgMHg0QiwgMHg5NCwgMHg2NiwgMHg4NCwgMHhENSwgMHhBOSwgMHhDRSwgMHhBNSwKKyAgICAgICAgMHg0MywgMHg3MCwgMHhGQiwgMHgwMSwgMHg1QSwgMHg2RiwgMHhDRCwgMHhGNywgMHhEMSwgMHg5RCwKKyAgICAgICAgMHg1MSwgMHhFRSwgMHhBMCwgMHhEQywgMHg0NiwgMHhGNSwgMHg3RCwgMHhBNywgMHhFRSwgMHhBMCwKKyAgICAgICAgMHg4NiwgMHhCNywgMHg4MywgMHhGRiwgMHgyMSwgMHg4QiwgMHg3NiwgMHgwNSwgMHg3RCwgMHhERSwKKyAgICAgICAgMHhDNCwgMHgyNiwgMHgzNiwgMHhCQywgMHhCNCwgMHg4QSwgMHg0OCwgMHhDMywgMHgwNiwgMHg5MCwKKyAgICAgICAgMHg5NywgMHhFNSwgMHhBNiwgMHgzOCwgMHhDMywgMHhFNiwgMHg3QywgMHhEMCwgMHhGOCwgMHgyMywKKyAgICAgICAgMHhEMiwgMHgzMywgMHgxRiwgMHg4MSwgMHhDMywgMHhFMywgMHg3RCwgMHg4NSwgMHg1QSwgMHgzOCwKKyAgICAgICAgMHgxMCwgMHgwMywgMHhFNiwgMHg4OCwgMHhEQiwgMHhDOCwgMHg0QywgMHhEMCwgMHhGNywgMHhCMiwKKyAgICAgICAgMHg0RCwgMHgyNywgMHgzMywgMHg4NSwgMHhDRCwgMHgzQSwgMHg3NCwgMHg4MywgMHg2QiwgMHg4MiwKKyAgICAgICAgMHg1OCwgMHhEOSwgMHhERiwgMHhFRSwgMHhGNSwgMHhEMywgMHhFOSwgMHhGRSwgMHgxQywgMHhFRiwKKyAgICAgICAgMHgwNiwgMHgxMiwgMHgxNiwgMHhEMSwgMHg0QywgMHhBRSwgMHg1NCwgMHg0QiwgMHgwRCwgMHgxQSwKKyAgICAgICAgMHhCRCwgMHhFMiwgMHhDRiwgMHg1NiwgMHhCMywgMHg3NCwgMHhCRSwgMHg0NCwgMHg0RiwgMHhBNCwKKyAgICAgICAgMHg3MywgMHgwQSwgMHg5OCwgMHg4RCwgMHg2MSwgMHg4NCwgMHgzOCwgMHg0NiwgMHhEQywgMHg5NSwKKyAgICAgICAgMHhDRiwgMHgzRiwgMHg2QiwgMHhFNywgMHg2NSwgMHg4NywgMHgwMiwgMHhCRiwgMHg0QiwgMHg1NywKKyAgICAgICAgMHhFMiwgMHgzRCwgMHhDNCwgMHgyQiwgMHgxQywgMHg4MiwgMHgxRCwgMHhDQywgMHgxMywgMHg3RiwKKyAgICAgICAgMHhDMCwgMHgwNiwgMHgxMiwgMHg4QywgMHg2RiwgMHg5NywgMHg1MCwgMHg3QiwgMHg4QywgMHg4MSwKKyAgICAgICAgMHhDMywgMHgyMywgMHgxNSwgMHhFQiwgMHg3MCwgMHgwNywgMHg4RSwgMHhBMSwgMHgwNywgMHgxRSwKKyAgICAgICAgMHg1OSwgMHhGQSwgMHgxMCwgMHhDQSwgMHg3RSwgMHgwRiwgMHhFMiwgMHhCQiwgMHhFRSwgMHg4NiwKKyAgICAgICAgMHgyNiwgMHgxRSwgMHg1NSwgMHhCOSwgMHg5OCwgMHg2NiwgMHg4NSwgMHhFQywgMHgyNywgMHhDNSwKKyAgICAgICAgMHhEOSwgMHg2MywgMHg4RCwgMHg1MSwgMHg3NywgMHhBQSwgMHhBMCwgMHgzNiwgMHg1NSwgMHgzMywKKyAgICAgICAgMHgxMCwgMHgyMSwgMHg1RSwgMHhFQywgMHg0NywgMHg2NywgMHg3MSwgMHhEMSwgMHhBRiwgMHhGQywKKyAgICAgICAgMHgzRSwgMHg1MCwgMHhGNSwgMHhCRSwgMHhENiwgMHg5MiwgMHhFNywgMHgwQiwgMHgwMiwgMHg4MiwKKyAgICAgICAgMHgwMSwgMHgwMCwgMHgyMSwgMHg3QywgMHg4QSwgMHhDNCwgMHhDNiwgMHgyOSwgMHg1NSwgMHg2OCwKKyAgICAgICAgMHhBNywgMHhBRCwgMHhERCwgMHgwNSwgMHg2NSwgMHg2MywgMHhGMCwgMHhGQywgMHgwNiwgMHhBNiwKKyAgICAgICAgMHg0MiwgMHg3MCwgMHg4RiwgMHg1NywgMHg1NywgMHgzNiwgMHg2QSwgMHg5MSwgMHhCMywgMHgwNSwKKyAgICAgICAgMHg1NiwgMHg5QywgMHhDOSwgMHg5QSwgMHhFMSwgMHg4QiwgMHhENywgMHg3RiwgMHg0RiwgMHg5RiwKKyAgICAgICAgMHhBNiwgMHgwRCwgMHg0MSwgMHgxNSwgMHhDOSwgMHg4NCwgMHgyRCwgMHgwRCwgMHg2MywgMHgyNSwKKyAgICAgICAgMHgwMiwgMHg2MywgMHg1NSwgMHhEMCwgMHg2NiwgMHhGQywgMHg5QiwgMHhEOSwgMHhBQSwgMHg0MSwKKyAgICAgICAgMHg0NiwgMHg5NiwgMHhBQSwgMHgyRiwgMHg2OCwgMHgyQywgMHgxNywgMHgzNCwgMHgyMCwgMHg1RiwKKyAgICAgICAgMHhEMCwgMHhEMywgMHgyOCwgMHg5QiwgMHg2NywgMHgwRSwgMHgzMSwgMHg5RCwgMHgxNCwgMHhDMywKKyAgICAgICAgMHhFMiwgMHg4RSwgMHg3OSwgMHhENywgMHhCRCwgMHgxMiwgMHhEMSwgMHhFRiwgMHhGOCwgMHhDNiwKKyAgICAgICAgMHhEQSwgMHgwNywgMHhGOSwgMHg0QywgMHhGMiwgMHhEOCwgMHg0NSwgMHhCNSwgMHhCNiwgMHhEMSwKKyAgICAgICAgMHhGQSwgMHgwNSwgMHgwQywgMHgyMCwgMHhFOSwgMHg0MywgMHhEOSwgMHhDNSwgMHhFMCwgMHgzQSwKKyAgICAgICAgMHhERSwgMHhDRSwgMHhGOSwgMHgwMiwgMHhCOSwgMHg0NiwgMHg2NSwgMHhDMCwgMHg2OSwgMHg0QSwKKyAgICAgICAgMHg4RCwgMHg4QywgMHgzQSwgMHgxMCwgMHhGRCwgMHgxNSwgMHg3MSwgMHgyNSwgMHhCOCwgMHg4QSwKKyAgICAgICAgMHgzNiwgMHg0MSwgMHg0QiwgMHgzMCwgMHgxQywgMHhBRiwgMHhDQywgMHg4NCwgMHgyOCwgMHhDRCwKKyAgICAgICAgMHg3RCwgMHgyQiwgMHg4OSwgMHg1OSwgMHg4OCwgMHgxQSwgMHg2OSwgMHgxMiwgMHg1NiwgMHhEMCwKKyAgICAgICAgMHgyNSwgMHg2OCwgMHg2QywgMHgwOCwgMHhCMSwgMHg4OCwgMHhFMSwgMHg5MiwgMHg3RSwgMHgwOCwKKyAgICAgICAgMHhCMiwgMHhDNiwgMHgzQywgMHg2QywgMHgzNSwgMHhFOCwgMHhFRSwgMHgzRSwgMHhGNCwgMHhCOCwKKyAgICAgICAgMHg1QywgMHg3QiwgMHhDMCwgMHg1QiwgMHhGRCwgMHgxMSwgMHhBMywgMHg1NCwgMHhBNiwgMHg5OSwKKyAgICAgICAgMHg0NiwgMHhFMiwgMHg1RiwgMHg0RiwgMHhDNywgMHhFRSwgMHg5MCwgMHgxQywgMHgzNywgMHg1QiwKKyAgICAgICAgMHgzMywgMHgxMCwgMHhERiwgMHgwQiwgMHhDMywgMHhCOSwgMHg0NywgMHhDMiwgMHgzMCwgMHg0QSwKKyAgICAgICAgMHhGMiwgMHgxQSwgMHhFQiwgMHg0MSwgMHgyNSwgMHg5NCwgMHgyOSwgMHg3QSwgMHhEMCwgMHg5NiwKKyAgICAgICAgMHg4OCwgMHg0NiwgMHhFRSwgMHg2QywgMHgxNCwgMHhGNiwgMHg1QiwgMHgzRCwgMHhCRCwgMHg0RSwKKyAgICAgICAgMHhENCwgMHgzRiwgMHgwNSwgMHg1QiwgMHgwNywgMHhCOSwgMHhFMywgMHg5OSwgMHg4NywgMHg2MywKKyAgICAgICAgMHhDQSwgMHhDNCwgMHg3MSwgMHgwQiwgMHg3MywgMHg5RCwgMHg3QiwgMHhCNiwgMHgwRiwgMHhENCwKKyAgICAgICAgMHgxMiwgMHg4QywgMHg0QywgMHg1RSwgMHg3MiwgMHgzRCwgMHhGRiwgMHg2RCwgMHhDNCwgMHg2MSwKKyAgICAgICAgMHgwQywgMHg3NCwgMHg1RiwgMHg1MywgMHhCRSwgMHgzOSwgMHgzNCwgMHg2MSwgMHgwMiwgMHg4MiwKKyAgICAgICAgMHgwMSwgMHgwMCwgMHg1RiwgMHhGMiwgMHhGMiwgMHhCMCwgMHgxNiwgMHgyMCwgMHg4RSwgMHg0RSwKKyAgICAgICAgMHhDQywgMHg5NiwgMHg1RiwgMHgzMiwgMHg4MCwgMHhGRiwgMHgxMSwgMHhGNSwgMHhFQywgMHg3MywKKyAgICAgICAgMHhCQywgMHhDQiwgMHhEQiwgMHhGNCwgMHhBMCwgMHgzMCwgMHg2NSwgMHg1QSwgMHhCNSwgMHg5NSwKKyAgICAgICAgMHg4MCwgMHg5NywgMHhGQiwgMHhDMSwgMHhDQiwgMHhDRiwgMHhBNSwgMHg4MCwgMHg4NCwgMHhBMiwKKyAgICAgICAgMHgyQywgMHgwMCwgMHhGNiwgMHg4OSwgMHg4QywgMHhEQywgMHhGRiwgMHg2MCwgMHg3MSwgMHg1QywKKyAgICAgICAgMHg4NywgMHg2MCwgMHhDNywgMHhGMiwgMHhBOCwgMHhDNiwgMHhGOSwgMHg1OSwgMHgwQywgMHgzNywKKyAgICAgICAgMHg0RSwgMHg5NSwgMHhFRSwgMHhDRiwgMHhCOCwgMHgzMCwgMHgzMCwgMHg1NSwgMHhBRiwgMHgxRCwKKyAgICAgICAgMHg5NSwgMHg4MiwgMHhBNiwgMHhENywgMHhDNywgMHg0OSwgMHhGRSwgMHhCRiwgMHg3NSwgMHhFQiwKKyAgICAgICAgMHg5NCwgMHgwOSwgMHgzMCwgMHgxRCwgMHhCRCwgMHgwRSwgMHg5NywgMHhCMSwgMHg3OCwgMHgwQSwKKyAgICAgICAgMHgzRSwgMHgyNywgMHhBRCwgMHhGNiwgMHhDMSwgMHg1RiwgMHg2OSwgMHg5NCwgMHg3QywgMHgwMywKKyAgICAgICAgMHhDRiwgMHhCMiwgMHg1RSwgMHgxQSwgMHgwNywgMHhEMywgMHhGQSwgMHhGMiwgMHg4QiwgMHg3NSwKKyAgICAgICAgMHg5MiwgMHg3MCwgMHhGRSwgMHhGRSwgMHg5QSwgMHhERiwgMHg4MSwgMHgwRiwgMHgzNCwgMHg1RCwKKyAgICAgICAgMHg0NSwgMHhCQywgMHhCOCwgMHhGRCwgMHg4RiwgMHhDRiwgMHg1RCwgMHg4NCwgMHgxMCwgMHhFRSwKKyAgICAgICAgMHg5QSwgMHg3RiwgMHg1NywgMHgxOSwgMHhGNSwgMHgxNywgMHhEQywgMHg3RCwgMHg3MywgMHgwQiwKKyAgICAgICAgMHhBQywgMHg2QiwgMHgzNSwgMHgxNSwgMHg4QiwgMHgyNCwgMHhDQiwgMHg3MiwgMHhDMCwgMHhENywKKyAgICAgICAgMHgyRSwgMHhBRSwgMHhBQSwgMHhEQiwgMHhDQiwgMHg5RiwgMHg2NywgMHg4NiwgMHgxNCwgMHhCQiwKKyAgICAgICAgMHhFNCwgMHg5MCwgMHgxNSwgMHg3QywgMHg5NSwgMHg0NCwgMHhBNSwgMHgzOCwgMHg2RCwgMHgxMywKKyAgICAgICAgMHgwMiwgMHg5MSwgMHg3NywgMHg4NCwgMHgzNSwgMHg0MywgMHg1RCwgMHgwMywgMHgxQywgMHgwMSwKKyAgICAgICAgMHgwQiwgMHg1QSwgMHg0RSwgMHgyQiwgMHg1OSwgMHhGMCwgMHhCQiwgMHhCMSwgMHhCNywgMHg2MSwKKyAgICAgICAgMHgxQiwgMHg2QywgMHhGQywgMHhBMSwgMHhFQSwgMHhCRCwgMHgxQywgMHg5QSwgMHhFNCwgMHgwQywKKyAgICAgICAgMHg3RSwgMHg5NywgMHgzRiwgMHg3MSwgMHhDNiwgMHhBNywgMHg5NCwgMHgxRCwgMHg4MiwgMHgxMiwKKyAgICAgICAgMHhFQywgMHgyNiwgMHg0MywgMHg2RSwgMHhGNiwgMHgyNCwgMHgwOSwgMHhBMCwgMHgwMywgMHgxRCwKKyAgICAgICAgMHgxMiwgMHhGRiwgMHhBOCwgMHg5NSwgMHg2MCwgMHg0NywgMHg0QSwgMHhCMCwgMHg3MiwgMHg1NSwKKyAgICAgICAgMHhDMywgMHg2OCwgMHhEMiwgMHhGNiwgMHhCQywgMHg1QiwgMHg0NywgMHg0NiwgMHg1MSwgMHhCMiwKKyAgICAgICAgMHhDOSwgMHgyQSwgMHgyOCwgMHg2QSwgMHhDOSwgMHhEMSwgMHgxQiwgMHgzNSwgMHgxNiwgMHg1QSwKKyAgICAgICAgMHgyNiwgMHg2RiwgMHhCNywgMHhCQiwgMHhGNywgMHgzNSwgMHg3MywgMHgyQiwgMHgwMiwgMHg4MiwKKyAgICAgICAgMHgwMSwgMHgwMCwgMHg1NiwgMHhCQSwgMHhEOCwgMHgwMiwgMHhENywgMHg0QiwgMHgzMCwgMHg1RSwKKyAgICAgICAgMHgxQiwgMHgxRSwgMHgyRiwgMHhGMywgMHgwRCwgMHhCQywgMHhGMSwgMHgwNSwgMHg2QSwgMHg2OCwKKyAgICAgICAgMHg0QSwgMHhFMSwgMHhFQSwgMHhCMywgMHhERSwgMHg2MSwgMHg4QywgMHg4OSwgMHg0NCwgMHhCQSwKKyAgICAgICAgMHg2MywgMHg1RSwgMHhERiwgMHgwNSwgMHgyNCwgMHgzMiwgMHg3MSwgMHg2NSwgMHgxQSwgMHgzNiwKKyAgICAgICAgMHgyRiwgMHhCQywgMHgwNywgMHg3NSwgMHhBMywgMHhDRSwgMHg5RSwgMHg1MiwgMHg5MiwgMHg5NSwKKyAgICAgICAgMHg0RCwgMHgzRiwgMHhDOSwgMHgwNiwgMHhCQywgMHhBMSwgMHgxNCwgMHgzMywgMHgzNywgMHg5NSwKKyAgICAgICAgMHhBQiwgMHg5QSwgMHhFQiwgMHgwNCwgMHhGNiwgMHgxNSwgMHhDMywgMHg5QiwgMHgxMCwgMHg1NiwKKyAgICAgICAgMHg1MywgMHhBMiwgMHgyOCwgMHhGMiwgMHg2OCwgMHhEQSwgMHg3RCwgMHg5NywgMHg1MiwgMHg2MywKKyAgICAgICAgMHhBQywgMHg5QiwgMHg1NiwgMHhBOSwgMHhBQiwgMHgyRSwgMHgxRSwgMHg5RSwgMHgwMSwgMHg3MCwKKyAgICAgICAgMHhGRiwgMHgyQiwgMHg2RCwgMHgwQywgMHg0QiwgMHhBNiwgMHhDMywgMHgzQSwgMHhCMywgMHhEMSwKKyAgICAgICAgMHhBNywgMHg0QiwgMHg1RSwgMHg0OSwgMHgyRSwgMHg5NSwgMHhENiwgMHg2QSwgMHhBRSwgMHg1OCwKKyAgICAgICAgMHgxMywgMHg2NiwgMHg4RiwgMHgyRiwgMHg5MywgMHhFNCwgMHg2RSwgMHg4QiwgMHhGQSwgMHg5NCwKKyAgICAgICAgMHgzMCwgMHgzRSwgMHhFQywgMHg5NiwgMHhBQiwgMHg0NiwgMHgyMCwgMHgzRSwgMHhDNSwgMHgzMCwKKyAgICAgICAgMHhCNCwgMHhFQiwgMHg0MSwgMHgwMCwgMHgzOSwgMHg2MCwgMHgxRCwgMHhFMSwgMHgyMCwgMHhDRSwKKyAgICAgICAgMHgzMSwgMHg3MCwgMHgxNywgMHgzOSwgMHhDQiwgMHg3NiwgMHg1NiwgMHg2QywgMHg1NSwgMHg3QiwKKyAgICAgICAgMHg5MCwgMHgyMCwgMHhCQywgMHgzOSwgMHhCMiwgMHg1QiwgMHhEMSwgMHgyOCwgMHg2RiwgMHgwQywKKyAgICAgICAgMHg0RiwgMHg0NSwgMHg2QiwgMHg4MiwgMHhDNCwgMHg1NywgMHgyMywgMHgwQywgMHgzRiwgMHgzRiwKKyAgICAgICAgMHgyRCwgMHg4MywgMHhCMywgMHgzRCwgMHg4RSwgMHhGOSwgMHgxQSwgMHhEQSwgMHg3NywgMHg1NCwKKyAgICAgICAgMHgyRSwgMHhGRSwgMHgxNiwgMHgyRSwgMHhCQSwgMHg5OSwgMHhERCwgMHhDQSwgMHhCMywgMHhEMSwKKyAgICAgICAgMHhEOCwgMHhCQiwgMHg4NywgMHhFMSwgMHhEMCwgMHhBOSwgMHhENCwgMHhFNiwgMHg4RiwgMHhFOCwKKyAgICAgICAgMHgwMCwgMHgzRSwgMHg0OSwgMHg4QSwgMHhERCwgMHhBNiwgMHgzMiwgMHg5MSwgMHgwMCwgMHgzMSwKKyAgICAgICAgMHgzMSwgMHgyMSwgMHg5OCwgMHgxOCwgMHg5NCwgMHhDOSwgMHgyRCwgMHgyNywgMHgwNSwgMHhCNywKKyAgICAgICAgMHg5QiwgMHgwOSwgMHgyRSwgMHhCQiwgMHg1RCwgMHhCRiwgMHg2NywgMHhFOCwgMHgwRSwgMHhEMSwKKyAgICAgICAgMHg0NCwgMHg3NSwgMHg4MCwgMHgxRCwgMHgwQSwgMHgyMSwgMHg4RiwgMHg5NSwgMHg3NiwgMHhCMCwKKyAgICAgICAgMHhGQywgMHgxOSwgMHgzQywgMHhGRiwgMHg5MiwgMHhFQSwgMHgwMSwgMHg0NSwgMHg4OSwgMHhEMSwKKyAgICAgICAgMHg0RSwgMHhGRSwgMHg0RCwgMHgyQiwgMHg0QiwgMHgxOCwgMHhFNiwgMHhDRQorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NsaWVudF9rZXlfZGVyXzQwOTYgPSBzaXplb2YoY2xpZW50X2tleV9kZXJfNDA5Nik7CisKKy8qIC4vY2VydHMvNDA5Ni9jbGllbnQta2V5UHViLmRlciwgNDA5Ni1iaXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNsaWVudF9rZXlwdWJfZGVyXzQwOTZbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDIsIDB4MjIsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsCisgICAgICAgIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDAsIDB4MDMsCisgICAgICAgIDB4ODIsIDB4MDIsIDB4MEYsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MDIsIDB4MEEsIDB4MDIsIDB4ODIsCisgICAgICAgIDB4MDIsIDB4MDEsIDB4MDAsIDB4RjUsIDB4RDAsIDB4MzEsIDB4RTQsIDB4NzEsIDB4NTksIDB4NTgsCisgICAgICAgIDB4QjMsIDB4MDcsIDB4NTAsIDB4REQsIDB4MTYsIDB4NzksIDB4RkMsIDB4QzYsIDB4OTUsIDB4NTAsCisgICAgICAgIDB4RkMsIDB4NDYsIDB4MEUsIDB4NTcsIDB4MTIsIDB4ODYsIDB4NzEsIDB4OEQsIDB4RTMsIDB4OUIsCisgICAgICAgIDB4NEEsIDB4MzMsIDB4RUEsIDB4NEYsIDB4RDksIDB4MTcsIDB4MTMsIDB4NkQsIDB4NDgsIDB4NjksCisgICAgICAgIDB4REYsIDB4NTksIDB4MTEsIDB4MDgsIDB4MDIsIDB4OUQsIDB4QUYsIDB4MkIsIDB4QzcsIDB4MzAsCisgICAgICAgIDB4QkUsIDB4MEMsIDB4REMsIDB4ODcsIDB4RDQsIDB4NUEsIDB4MTIsIDB4MDksIDB4MjMsIDB4NUQsCisgICAgICAgIDB4RTEsIDB4NzYsIDB4NUEsIDB4NjIsIDB4MzcsIDB4NDYsIDB4NzQsIDB4RUYsIDB4MDMsIDB4MDUsCisgICAgICAgIDB4QkIsIDB4MUUsIDB4NkQsIDB4MjksIDB4NzUsIDB4NkMsIDB4MkUsIDB4OUQsIDB4ODcsIDB4MEQsCisgICAgICAgIDB4OEYsIDB4ODcsIDB4Q0IsIDB4MTQsIDB4OTUsIDB4OUIsIDB4QkUsIDB4MTcsIDB4NkIsIDB4NTEsCisgICAgICAgIDB4RDEsIDB4NEMsIDB4REEsIDB4RDcsIDB4OTEsIDB4NjYsIDB4QzUsIDB4MzYsIDB4RUIsIDB4RTAsCisgICAgICAgIDB4MDcsIDB4MUEsIDB4NzYsIDB4NEQsIDB4QjAsIDB4RkIsIDB4QzEsIDB4RjUsIDB4NUUsIDB4MDUsCisgICAgICAgIDB4REIsIDB4QkEsIDB4Q0IsIDB4MjUsIDB4RDksIDB4OTksIDB4MTMsIDB4MUMsIDB4QzAsIDB4MzUsCisgICAgICAgIDB4REMsIDB4NDAsIDB4RTksIDB4MzYsIDB4Q0QsIDB4QzQsIDB4RDUsIDB4N0EsIDB4NDEsIDB4NzAsCisgICAgICAgIDB4MEYsIDB4MzYsIDB4RUIsIDB4QTUsIDB4NEUsIDB4MTcsIDB4MDUsIDB4RDUsIDB4NzUsIDB4MUIsCisgICAgICAgIDB4NjQsIDB4NjIsIDB4N0EsIDB4M0YsIDB4MEQsIDB4MjgsIDB4NDgsIDB4NkEsIDB4RTMsIDB4QUMsCisgICAgICAgIDB4OUMsIDB4QTgsIDB4OEYsIDB4RTksIDB4RUQsIDB4RjcsIDB4Q0QsIDB4MjQsIDB4QTAsIDB4QjEsCisgICAgICAgIDB4QTAsIDB4MDMsIDB4QUMsIDB4RTMsIDB4MDMsIDB4RjUsIDB4M0YsIDB4RDEsIDB4OTYsIDB4RkYsCisgICAgICAgIDB4MkEsIDB4N0UsIDB4MDgsIDB4QjEsIDB4RDMsIDB4RTAsIDB4MTgsIDB4MTQsIDB4RUMsIDB4NjUsCisgICAgICAgIDB4MzcsIDB4NTAsIDB4NDMsIDB4QzIsIDB4NkEsIDB4OEMsIDB4RjQsIDB4NUIsIDB4RkUsIDB4QzQsCisgICAgICAgIDB4Q0IsIDB4OEQsIDB4M0YsIDB4ODEsIDB4MDIsIDB4RjcsIDB4QzIsIDB4REQsIDB4RTQsIDB4QzEsCisgICAgICAgIDB4OEUsIDB4ODAsIDB4MEMsIDB4MDQsIDB4MjUsIDB4MkQsIDB4ODAsIDB4NUEsIDB4MkUsIDB4MEYsCisgICAgICAgIDB4MjIsIDB4MzUsIDB4NEEsIDB4RjQsIDB4ODUsIDB4RUQsIDB4NTEsIDB4RDgsIDB4QUIsIDB4NkQsCisgICAgICAgIDB4OEYsIDB4QTIsIDB4M0IsIDB4MjQsIDB4MDAsIDB4NkUsIDB4ODEsIDB4RTIsIDB4MUUsIDB4NzYsCisgICAgICAgIDB4RDYsIDB4QUMsIDB4MzEsIDB4MTIsIDB4REIsIDB4RjMsIDB4OEUsIDB4MDcsIDB4QTEsIDB4REUsCisgICAgICAgIDB4ODksIDB4NEEsIDB4MzksIDB4NjAsIDB4NzcsIDB4QzUsIDB4QUEsIDB4RjEsIDB4NTEsIDB4RTYsCisgICAgICAgIDB4MDYsIDB4RjEsIDB4OTUsIDB4NTYsIDB4MkEsIDB4RTEsIDB4OEUsIDB4OTIsIDB4MzAsIDB4OUYsCisgICAgICAgIDB4RkUsIDB4NTgsIDB4NDQsIDB4QUMsIDB4NDYsIDB4RjIsIDB4RkQsIDB4OUEsIDB4RkMsIDB4QTgsCisgICAgICAgIDB4MUQsIDB4QTEsIDB4RDMsIDB4NTUsIDB4MzcsIDB4NEEsIDB4OEIsIDB4RkMsIDB4OUMsIDB4MzMsCisgICAgICAgIDB4RjgsIDB4QTcsIDB4NjEsIDB4NDgsIDB4NDEsIDB4N0MsIDB4OUMsIDB4NzcsIDB4M0YsIDB4RjUsCisgICAgICAgIDB4ODAsIDB4MjMsIDB4N0QsIDB4NDMsIDB4QjQsIDB4RDUsIDB4ODgsIDB4MEEsIDB4QzksIDB4NzUsCisgICAgICAgIDB4RDcsIDB4NDQsIDB4MTksIDB4NEQsIDB4NzcsIDB4NkMsIDB4MEIsIDB4MEEsIDB4NDksIDB4QUEsCisgICAgICAgIDB4MUMsIDB4MkYsIDB4RDYsIDB4NUEsIDB4NDQsIDB4QTYsIDB4NDcsIDB4NEQsIDB4RTUsIDB4MzYsCisgICAgICAgIDB4OTYsIDB4NDAsIDB4OTksIDB4MkMsIDB4NTYsIDB4MjYsIDB4QjEsIDB4RjIsIDB4OTIsIDB4MzEsCisgICAgICAgIDB4NTksIDB4RDcsIDB4MkMsIDB4RDQsIDB4QjQsIDB4MjEsIDB4RDYsIDB4NjUsIDB4MTMsIDB4MEIsCisgICAgICAgIDB4M0UsIDB4RkIsIDB4RkYsIDB4MDQsIDB4RUIsIDB4QjksIDB4ODUsIDB4QjksIDB4RDgsIDB4RDgsCisgICAgICAgIDB4MjgsIDB4NEYsIDB4NUMsIDB4MTcsIDB4OTYsIDB4QTMsIDB4NTEsIDB4QkUsIDB4RkUsIDB4N0QsCisgICAgICAgIDB4MEIsIDB4MUIsIDB4NDgsIDB4NDAsIDB4MjUsIDB4NzYsIDB4OTQsIDB4REMsIDB4NDEsIDB4RkIsCisgICAgICAgIDB4QkYsIDB4NzMsIDB4NzYsIDB4REEsIDB4RUIsIDB4QjMsIDB4NjIsIDB4RTcsIDB4QzEsIDB4QzgsCisgICAgICAgIDB4NTQsIDB4NkEsIDB4OTMsIDB4RTEsIDB4OEQsIDB4MzEsIDB4RTgsIDB4M0UsIDB4M0UsIDB4REYsCisgICAgICAgIDB4QkMsIDB4ODcsIDB4MDIsIDB4MzAsIDB4MjIsIDB4NTcsIDB4QzQsIDB4RTAsIDB4MTgsIDB4N0EsCisgICAgICAgIDB4RDMsIDB4QUUsIDB4RTQsIDB4MDIsIDB4OUIsIDB4QUEsIDB4QkQsIDB4NEUsIDB4NDksIDB4NDcsCisgICAgICAgIDB4NzIsIDB4RTksIDB4OEQsIDB4MTMsIDB4MkQsIDB4NTQsIDB4OUIsIDB4MDAsIDB4QTcsIDB4OTEsCisgICAgICAgIDB4NjEsIDB4NzEsIDB4QzksIDB4Q0MsIDB4NDgsIDB4NEYsIDB4RUUsIDB4REYsIDB4NUUsIDB4MUIsCisgICAgICAgIDB4MUEsIDB4REYsIDB4NjcsIDB4RDMsIDB4MjAsIDB4RTYsIDB4NDQsIDB4NDUsIDB4OTgsIDB4N0UsCisgICAgICAgIDB4RTcsIDB4MEUsIDB4NjMsIDB4MTYsIDB4ODMsIDB4QzksIDB4MjYsIDB4NUQsIDB4OTAsIDB4QzEsCisgICAgICAgIDB4RTUsIDB4MkEsIDB4NUMsIDB4NDUsIDB4NTQsIDB4MTMsIDB4QjIsIDB4ODEsIDB4MTgsIDB4MDYsCisgICAgICAgIDB4MjAsIDB4MkUsIDB4MkUsIDB4NjYsIDB4NUEsIDB4QjUsIDB4N0IsIDB4NkUsIDB4RDYsIDB4MEMsCisgICAgICAgIDB4NEUsIDB4ODksIDB4MDEsIDB4NTYsIDB4NzAsIDB4QkIsIDB4QUUsIDB4REUsIDB4RTksIDB4OTksCisgICAgICAgIDB4NUUsIDB4RDEsIDB4QjksIDB4M0EsIDB4QjcsIDB4NkMsIDB4MTcsIDB4QjYsIDB4MDMsIDB4QTksCisgICAgICAgIDB4MDgsIDB4REQsIDB4OUMsIDB4RjQsIDB4MTQsIDB4QzksIDB4QzksIDB4NTksIDB4MzksIDB4NzIsCisgICAgICAgIDB4RDQsIDB4N0UsIDB4MDIsIDB4MzcsIDB4MzEsIDB4Q0QsIDB4MEUsIDB4QTcsIDB4M0QsIDB4RjgsCisgICAgICAgIDB4RjIsIDB4Q0YsIDB4NkIsIDB4MTUsIDB4QUIsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDEKKworfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NsaWVudF9rZXlwdWJfZGVyXzQwOTYgPSBzaXplb2YoY2xpZW50X2tleXB1Yl9kZXJfNDA5Nik7CisKKy8qIC4vY2VydHMvNDA5Ni9jbGllbnQtY2VydC5kZXIsIDQwOTYtYml0ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjbGllbnRfY2VydF9kZXJfNDA5NltdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwNywgMHgwNywgMHgzMCwgMHg4MiwgMHgwNCwgMHhFRiwgMHhBMCwgMHgwMywKKyAgICAgICAgMHgwMiwgMHgwMSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwMCwgMHhBMCwgMHgzRSwgMHhEQiwgMHhDRiwKKyAgICAgICAgMHg5NywgMHg5QSwgMHg3MiwgMHg4QywgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwKKyAgICAgICAgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwMSwgMHgwQiwgMHgwNSwgMHgwMCwgMHgzMCwKKyAgICAgICAgMHg4MSwgMHg5RSwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwKKyAgICAgICAgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywgMHg0RCwgMHg2RiwgMHg2RSwgMHg3NCwKKyAgICAgICAgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwKKyAgICAgICAgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwgMHg3QSwgMHg2NSwgMHg2RCwgMHg2MSwKKyAgICAgICAgMHg2RSwgMHgzMSwgMHgxNSwgMHgzMCwgMHgxMywgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwKKyAgICAgICAgMHgwQywgMHgwQywgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg1MywgMHg1MywgMHg0QywgMHg1RiwKKyAgICAgICAgMHgzNCwgMHgzMCwgMHgzOSwgMHgzNiwgMHgzMSwgMHgxOSwgMHgzMCwgMHgxNywgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywgMHgxMCwgMHg1MCwgMHg3MiwgMHg2RiwgMHg2NywgMHg3MiwKKyAgICAgICAgMHg2MSwgMHg2RCwgMHg2RCwgMHg2OSwgMHg2RSwgMHg2NywgMHgyRCwgMHgzNCwgMHgzMCwgMHgzOSwKKyAgICAgICAgMHgzNiwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywKKyAgICAgICAgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwKKyAgICAgICAgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwKKyAgICAgICAgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwKKyAgICAgICAgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywKKyAgICAgICAgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwKKyAgICAgICAgMHgzMCwgMHgxRSwgMHgxNywgMHgwRCwgMHgzMiwgMHgzMSwgMHgzMCwgMHgzMiwgMHgzMSwgMHgzMCwKKyAgICAgICAgMHgzMSwgMHgzOSwgMHgzNCwgMHgzOSwgMHgzNSwgMHgzMiwgMHg1QSwgMHgxNywgMHgwRCwgMHgzMiwKKyAgICAgICAgMHgzMywgMHgzMSwgMHgzMSwgMHgzMCwgMHgzNywgMHgzMSwgMHgzOSwgMHgzNCwgMHgzOSwgMHgzNSwKKyAgICAgICAgMHgzMiwgMHg1QSwgMHgzMCwgMHg4MSwgMHg5RSwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwgMHgxMCwKKyAgICAgICAgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywgMHg0RCwKKyAgICAgICAgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwgMHg3QSwKKyAgICAgICAgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwgMHgzMSwgMHgxNSwgMHgzMCwgMHgxMywgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwQywgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg1MywKKyAgICAgICAgMHg1MywgMHg0QywgMHg1RiwgMHgzNCwgMHgzMCwgMHgzOSwgMHgzNiwgMHgzMSwgMHgxOSwgMHgzMCwKKyAgICAgICAgMHgxNywgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywgMHgxMCwgMHg1MCwgMHg3MiwKKyAgICAgICAgMHg2RiwgMHg2NywgMHg3MiwgMHg2MSwgMHg2RCwgMHg2RCwgMHg2OSwgMHg2RSwgMHg2NywgMHgyRCwKKyAgICAgICAgMHgzNCwgMHgzMCwgMHgzOSwgMHgzNiwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywgMHgyRSwgMHg3NywKKyAgICAgICAgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwKKyAgICAgICAgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwKKyAgICAgICAgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwKKyAgICAgICAgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwKKyAgICAgICAgMHg2MywgMHg2RiwgMHg2RCwgMHgzMCwgMHg4MiwgMHgwMiwgMHgyMiwgMHgzMCwgMHgwRCwgMHgwNiwKKyAgICAgICAgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwMSwgMHgwMSwKKyAgICAgICAgMHgwNSwgMHgwMCwgMHgwMywgMHg4MiwgMHgwMiwgMHgwRiwgMHgwMCwgMHgzMCwgMHg4MiwgMHgwMiwKKyAgICAgICAgMHgwQSwgMHgwMiwgMHg4MiwgMHgwMiwgMHgwMSwgMHgwMCwgMHhGNSwgMHhEMCwgMHgzMSwgMHhFNCwKKyAgICAgICAgMHg3MSwgMHg1OSwgMHg1OCwgMHhCMywgMHgwNywgMHg1MCwgMHhERCwgMHgxNiwgMHg3OSwgMHhGQywKKyAgICAgICAgMHhDNiwgMHg5NSwgMHg1MCwgMHhGQywgMHg0NiwgMHgwRSwgMHg1NywgMHgxMiwgMHg4NiwgMHg3MSwKKyAgICAgICAgMHg4RCwgMHhFMywgMHg5QiwgMHg0QSwgMHgzMywgMHhFQSwgMHg0RiwgMHhEOSwgMHgxNywgMHgxMywKKyAgICAgICAgMHg2RCwgMHg0OCwgMHg2OSwgMHhERiwgMHg1OSwgMHgxMSwgMHgwOCwgMHgwMiwgMHg5RCwgMHhBRiwKKyAgICAgICAgMHgyQiwgMHhDNywgMHgzMCwgMHhCRSwgMHgwQywgMHhEQywgMHg4NywgMHhENCwgMHg1QSwgMHgxMiwKKyAgICAgICAgMHgwOSwgMHgyMywgMHg1RCwgMHhFMSwgMHg3NiwgMHg1QSwgMHg2MiwgMHgzNywgMHg0NiwgMHg3NCwKKyAgICAgICAgMHhFRiwgMHgwMywgMHgwNSwgMHhCQiwgMHgxRSwgMHg2RCwgMHgyOSwgMHg3NSwgMHg2QywgMHgyRSwKKyAgICAgICAgMHg5RCwgMHg4NywgMHgwRCwgMHg4RiwgMHg4NywgMHhDQiwgMHgxNCwgMHg5NSwgMHg5QiwgMHhCRSwKKyAgICAgICAgMHgxNywgMHg2QiwgMHg1MSwgMHhEMSwgMHg0QywgMHhEQSwgMHhENywgMHg5MSwgMHg2NiwgMHhDNSwKKyAgICAgICAgMHgzNiwgMHhFQiwgMHhFMCwgMHgwNywgMHgxQSwgMHg3NiwgMHg0RCwgMHhCMCwgMHhGQiwgMHhDMSwKKyAgICAgICAgMHhGNSwgMHg1RSwgMHgwNSwgMHhEQiwgMHhCQSwgMHhDQiwgMHgyNSwgMHhEOSwgMHg5OSwgMHgxMywKKyAgICAgICAgMHgxQywgMHhDMCwgMHgzNSwgMHhEQywgMHg0MCwgMHhFOSwgMHgzNiwgMHhDRCwgMHhDNCwgMHhENSwKKyAgICAgICAgMHg3QSwgMHg0MSwgMHg3MCwgMHgwRiwgMHgzNiwgMHhFQiwgMHhBNSwgMHg0RSwgMHgxNywgMHgwNSwKKyAgICAgICAgMHhENSwgMHg3NSwgMHgxQiwgMHg2NCwgMHg2MiwgMHg3QSwgMHgzRiwgMHgwRCwgMHgyOCwgMHg0OCwKKyAgICAgICAgMHg2QSwgMHhFMywgMHhBQywgMHg5QywgMHhBOCwgMHg4RiwgMHhFOSwgMHhFRCwgMHhGNywgMHhDRCwKKyAgICAgICAgMHgyNCwgMHhBMCwgMHhCMSwgMHhBMCwgMHgwMywgMHhBQywgMHhFMywgMHgwMywgMHhGNSwgMHgzRiwKKyAgICAgICAgMHhEMSwgMHg5NiwgMHhGRiwgMHgyQSwgMHg3RSwgMHgwOCwgMHhCMSwgMHhEMywgMHhFMCwgMHgxOCwKKyAgICAgICAgMHgxNCwgMHhFQywgMHg2NSwgMHgzNywgMHg1MCwgMHg0MywgMHhDMiwgMHg2QSwgMHg4QywgMHhGNCwKKyAgICAgICAgMHg1QiwgMHhGRSwgMHhDNCwgMHhDQiwgMHg4RCwgMHgzRiwgMHg4MSwgMHgwMiwgMHhGNywgMHhDMiwKKyAgICAgICAgMHhERCwgMHhFNCwgMHhDMSwgMHg4RSwgMHg4MCwgMHgwQywgMHgwNCwgMHgyNSwgMHgyRCwgMHg4MCwKKyAgICAgICAgMHg1QSwgMHgyRSwgMHgwRiwgMHgyMiwgMHgzNSwgMHg0QSwgMHhGNCwgMHg4NSwgMHhFRCwgMHg1MSwKKyAgICAgICAgMHhEOCwgMHhBQiwgMHg2RCwgMHg4RiwgMHhBMiwgMHgzQiwgMHgyNCwgMHgwMCwgMHg2RSwgMHg4MSwKKyAgICAgICAgMHhFMiwgMHgxRSwgMHg3NiwgMHhENiwgMHhBQywgMHgzMSwgMHgxMiwgMHhEQiwgMHhGMywgMHg4RSwKKyAgICAgICAgMHgwNywgMHhBMSwgMHhERSwgMHg4OSwgMHg0QSwgMHgzOSwgMHg2MCwgMHg3NywgMHhDNSwgMHhBQSwKKyAgICAgICAgMHhGMSwgMHg1MSwgMHhFNiwgMHgwNiwgMHhGMSwgMHg5NSwgMHg1NiwgMHgyQSwgMHhFMSwgMHg4RSwKKyAgICAgICAgMHg5MiwgMHgzMCwgMHg5RiwgMHhGRSwgMHg1OCwgMHg0NCwgMHhBQywgMHg0NiwgMHhGMiwgMHhGRCwKKyAgICAgICAgMHg5QSwgMHhGQywgMHhBOCwgMHgxRCwgMHhBMSwgMHhEMywgMHg1NSwgMHgzNywgMHg0QSwgMHg4QiwKKyAgICAgICAgMHhGQywgMHg5QywgMHgzMywgMHhGOCwgMHhBNywgMHg2MSwgMHg0OCwgMHg0MSwgMHg3QywgMHg5QywKKyAgICAgICAgMHg3NywgMHgzRiwgMHhGNSwgMHg4MCwgMHgyMywgMHg3RCwgMHg0MywgMHhCNCwgMHhENSwgMHg4OCwKKyAgICAgICAgMHgwQSwgMHhDOSwgMHg3NSwgMHhENywgMHg0NCwgMHgxOSwgMHg0RCwgMHg3NywgMHg2QywgMHgwQiwKKyAgICAgICAgMHgwQSwgMHg0OSwgMHhBQSwgMHgxQywgMHgyRiwgMHhENiwgMHg1QSwgMHg0NCwgMHhBNiwgMHg0NywKKyAgICAgICAgMHg0RCwgMHhFNSwgMHgzNiwgMHg5NiwgMHg0MCwgMHg5OSwgMHgyQywgMHg1NiwgMHgyNiwgMHhCMSwKKyAgICAgICAgMHhGMiwgMHg5MiwgMHgzMSwgMHg1OSwgMHhENywgMHgyQywgMHhENCwgMHhCNCwgMHgyMSwgMHhENiwKKyAgICAgICAgMHg2NSwgMHgxMywgMHgwQiwgMHgzRSwgMHhGQiwgMHhGRiwgMHgwNCwgMHhFQiwgMHhCOSwgMHg4NSwKKyAgICAgICAgMHhCOSwgMHhEOCwgMHhEOCwgMHgyOCwgMHg0RiwgMHg1QywgMHgxNywgMHg5NiwgMHhBMywgMHg1MSwKKyAgICAgICAgMHhCRSwgMHhGRSwgMHg3RCwgMHgwQiwgMHgxQiwgMHg0OCwgMHg0MCwgMHgyNSwgMHg3NiwgMHg5NCwKKyAgICAgICAgMHhEQywgMHg0MSwgMHhGQiwgMHhCRiwgMHg3MywgMHg3NiwgMHhEQSwgMHhFQiwgMHhCMywgMHg2MiwKKyAgICAgICAgMHhFNywgMHhDMSwgMHhDOCwgMHg1NCwgMHg2QSwgMHg5MywgMHhFMSwgMHg4RCwgMHgzMSwgMHhFOCwKKyAgICAgICAgMHgzRSwgMHgzRSwgMHhERiwgMHhCQywgMHg4NywgMHgwMiwgMHgzMCwgMHgyMiwgMHg1NywgMHhDNCwKKyAgICAgICAgMHhFMCwgMHgxOCwgMHg3QSwgMHhEMywgMHhBRSwgMHhFNCwgMHgwMiwgMHg5QiwgMHhBQSwgMHhCRCwKKyAgICAgICAgMHg0RSwgMHg0OSwgMHg0NywgMHg3MiwgMHhFOSwgMHg4RCwgMHgxMywgMHgyRCwgMHg1NCwgMHg5QiwKKyAgICAgICAgMHgwMCwgMHhBNywgMHg5MSwgMHg2MSwgMHg3MSwgMHhDOSwgMHhDQywgMHg0OCwgMHg0RiwgMHhFRSwKKyAgICAgICAgMHhERiwgMHg1RSwgMHgxQiwgMHgxQSwgMHhERiwgMHg2NywgMHhEMywgMHgyMCwgMHhFNiwgMHg0NCwKKyAgICAgICAgMHg0NSwgMHg5OCwgMHg3RSwgMHhFNywgMHgwRSwgMHg2MywgMHgxNiwgMHg4MywgMHhDOSwgMHgyNiwKKyAgICAgICAgMHg1RCwgMHg5MCwgMHhDMSwgMHhFNSwgMHgyQSwgMHg1QywgMHg0NSwgMHg1NCwgMHgxMywgMHhCMiwKKyAgICAgICAgMHg4MSwgMHgxOCwgMHgwNiwgMHgyMCwgMHgyRSwgMHgyRSwgMHg2NiwgMHg1QSwgMHhCNSwgMHg3QiwKKyAgICAgICAgMHg2RSwgMHhENiwgMHgwQywgMHg0RSwgMHg4OSwgMHgwMSwgMHg1NiwgMHg3MCwgMHhCQiwgMHhBRSwKKyAgICAgICAgMHhERSwgMHhFOSwgMHg5OSwgMHg1RSwgMHhEMSwgMHhCOSwgMHgzQSwgMHhCNywgMHg2QywgMHgxNywKKyAgICAgICAgMHhCNiwgMHgwMywgMHhBOSwgMHgwOCwgMHhERCwgMHg5QywgMHhGNCwgMHgxNCwgMHhDOSwgMHhDOSwKKyAgICAgICAgMHg1OSwgMHgzOSwgMHg3MiwgMHhENCwgMHg3RSwgMHgwMiwgMHgzNywgMHgzMSwgMHhDRCwgMHgwRSwKKyAgICAgICAgMHhBNywgMHgzRCwgMHhGOCwgMHhGMiwgMHhDRiwgMHg2QiwgMHgxNSwgMHhBQiwgMHgwMiwgMHgwMywKKyAgICAgICAgMHgwMSwgMHgwMCwgMHgwMSwgMHhBMywgMHg4MiwgMHgwMSwgMHg0NCwgMHgzMCwgMHg4MiwgMHgwMSwKKyAgICAgICAgMHg0MCwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgwRSwgMHgwNCwgMHgxNiwKKyAgICAgICAgMHgwNCwgMHgxNCwgMHhGQSwgMHg1NCwgMHg4OSwgMHg2NywgMHhFNSwgMHg1RiwgMHhCNywgMHgzMSwKKyAgICAgICAgMHg0MCwgMHhFQSwgMHhGRCwgMHhFNywgMHhGNiwgMHhBMywgMHhDNiwgMHg1QSwgMHg1NiwgMHgxNiwKKyAgICAgICAgMHhBNSwgMHg2RSwgMHgzMCwgMHg4MSwgMHhEMywgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgyMywKKyAgICAgICAgMHgwNCwgMHg4MSwgMHhDQiwgMHgzMCwgMHg4MSwgMHhDOCwgMHg4MCwgMHgxNCwgMHhGQSwgMHg1NCwKKyAgICAgICAgMHg4OSwgMHg2NywgMHhFNSwgMHg1RiwgMHhCNywgMHgzMSwgMHg0MCwgMHhFQSwgMHhGRCwgMHhFNywKKyAgICAgICAgMHhGNiwgMHhBMywgMHhDNiwgMHg1QSwgMHg1NiwgMHgxNiwgMHhBNSwgMHg2RSwgMHhBMSwgMHg4MSwKKyAgICAgICAgMHhBNCwgMHhBNCwgMHg4MSwgMHhBMSwgMHgzMCwgMHg4MSwgMHg5RSwgMHgzMSwgMHgwQiwgMHgzMCwKKyAgICAgICAgMHgwOSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywKKyAgICAgICAgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywKKyAgICAgICAgMHgwNywgMHg0RCwgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwKKyAgICAgICAgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwKKyAgICAgICAgMHg2RiwgMHg3QSwgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwgMHgzMSwgMHgxNSwgMHgzMCwgMHgxMywKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwQywgMHg3NywgMHg2RiwgMHg2QywKKyAgICAgICAgMHg2NiwgMHg1MywgMHg1MywgMHg0QywgMHg1RiwgMHgzNCwgMHgzMCwgMHgzOSwgMHgzNiwgMHgzMSwKKyAgICAgICAgMHgxOSwgMHgzMCwgMHgxNywgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywgMHgxMCwKKyAgICAgICAgMHg1MCwgMHg3MiwgMHg2RiwgMHg2NywgMHg3MiwgMHg2MSwgMHg2RCwgMHg2RCwgMHg2OSwgMHg2RSwKKyAgICAgICAgMHg2NywgMHgyRCwgMHgzNCwgMHgzMCwgMHgzOSwgMHgzNiwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywKKyAgICAgICAgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywKKyAgICAgICAgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwKKyAgICAgICAgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwKKyAgICAgICAgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywKKyAgICAgICAgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHg4MiwgMHgwOSwgMHgwMCwgMHhBMCwgMHgzRSwKKyAgICAgICAgMHhEQiwgMHhDRiwgMHg5NywgMHg5QSwgMHg3MiwgMHg4QywgMHgzMCwgMHgwQywgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgxRCwgMHgxMywgMHgwNCwgMHgwNSwgMHgzMCwgMHgwMywgMHgwMSwgMHgwMSwgMHhGRiwKKyAgICAgICAgMHgzMCwgMHgxQywgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgxMSwgMHgwNCwgMHgxNSwgMHgzMCwKKyAgICAgICAgMHgxMywgMHg4MiwgMHgwQiwgMHg2NSwgMHg3OCwgMHg2MSwgMHg2RCwgMHg3MCwgMHg2QywgMHg2NSwKKyAgICAgICAgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHg4NywgMHgwNCwgMHg3RiwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgMHgzMCwgMHgxRCwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgyNSwgMHgwNCwgMHgxNiwgMHgzMCwKKyAgICAgICAgMHgxNCwgMHgwNiwgMHgwOCwgMHgyQiwgMHgwNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNywgMHgwMywKKyAgICAgICAgMHgwMSwgMHgwNiwgMHgwOCwgMHgyQiwgMHgwNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNywgMHgwMywKKyAgICAgICAgMHgwMiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywKKyAgICAgICAgMHgwRCwgMHgwMSwgMHgwMSwgMHgwQiwgMHgwNSwgMHgwMCwgMHgwMywgMHg4MiwgMHgwMiwgMHgwMSwKKyAgICAgICAgMHgwMCwgMHgxNywgMHhBQiwgMHgyMiwgMHg2MSwgMHgwNSwgMHg2RCwgMHgzQSwgMHhDMCwgMHgwRCwKKyAgICAgICAgMHg2QiwgMHhEOSwgMHgxNSwgMHg4MiwgMHgxMSwgMHhDRiwgMHhFNywgMHhGOCwgMHg2NSwgMHhEQSwKKyAgICAgICAgMHhDNywgMHhFRiwgMHhEQSwgMHgwRiwgMHg1MCwgMHg3NSwgMHhCRCwgMHg1NSwgMHhDRiwgMHgzRCwKKyAgICAgICAgMHg1MCwgMHhERCwgMHhENCwgMHgwRCwgMHgyQywgMHgwNCwgMHg0OCwgMHhBOCwgMHgyNSwgMHgzQSwKKyAgICAgICAgMHhCOSwgMHhDNCwgMHhDRSwgMHg0OCwgMHg3RSwgMHhCOCwgMHg2MywgMHhDRCwgMHhDRCwgMHhDRSwKKyAgICAgICAgMHhCQywgMHg1MCwgMHgyNiwgMHhEQywgMHg2RCwgMHhDMiwgMHgxRSwgMHhEMSwgMHg3MSwgMHgzQSwKKyAgICAgICAgMHgyRiwgMHhEQiwgMHhFNSwgMHgwMywgMHg2QiwgMHg3MywgMHg1NSwgMHgyMywgMHg3MCwgMHg3NiwKKyAgICAgICAgMHgxRSwgMHgwOCwgMHgyQSwgMHg5MiwgMHg3QiwgMHhENiwgMHg2QSwgMHhFRiwgMHgxNywgMHhBMCwKKyAgICAgICAgMHhGMywgMHg4QywgMHhFQSwgMHhFQiwgMHhDNCwgMHgyRSwgMHhDQiwgMHhENCwgMHhEOSwgMHhENSwKKyAgICAgICAgMHhBQiwgMHhGNywgMHhFNiwgMHg4RCwgMHhFQywgMHhEOSwgMHg5NywgMHhBMSwgMHg1NiwgMHhBNywKKyAgICAgICAgMHgwQiwgMHg1RCwgMHhFNSwgMHgzRiwgMHgxRiwgMHg1RSwgMHg2QSwgMHg3QSwgMHhBNCwgMHg2NCwKKyAgICAgICAgMHhENywgMHhCMiwgMHg0MiwgMHgxQSwgMHgxRSwgMHg0OSwgMHgzNywgMHg5MywgMHhCQywgMHhCRSwKKyAgICAgICAgMHgxMywgMHhBOCwgMHhGQiwgMHhCMSwgMHg5MywgMHg3QiwgMHhBOCwgMHgyQiwgMHg0OSwgMHg5MCwKKyAgICAgICAgMHg0MywgMHg4NCwgMHgyNCwgMHg2MCwgMHg0NCwgMHhGQywgMHgzMiwgMHg3NCwgMHg4NSwgMHgwRSwKKyAgICAgICAgMHgxQiwgMHhGOCwgMHgzQSwgMHg5MiwgMHgzRCwgMHhBQSwgMHgyNSwgMHgxQiwgMHg5RiwgMHg5NywKKyAgICAgICAgMHgzMSwgMHg5NSwgMHg5NywgMHhDNSwgMHgzRCwgMHg1MSwgMHhERCwgMHhCNiwgMHhENSwgMHg0QSwKKyAgICAgICAgMHg3RSwgMHg0MSwgMHhCMywgMHg5MCwgMHg4MywgMHg3QywgMHg5OCwgMHhGQSwgMHhDQiwgMHgyMiwKKyAgICAgICAgMHgzMywgMHhBNSwgMHhGNCwgMHgzMiwgMHg3NCwgMHhCRCwgMHgzRSwgMHhCMSwgMHgzQiwgMHgzNCwKKyAgICAgICAgMHhGOSwgMHhDMywgMHgzRiwgMHhCRSwgMHhEQiwgMHgwRSwgMHhEOSwgMHgyRiwgMHgxQSwgMHhGOSwKKyAgICAgICAgMHhEMiwgMHg0RiwgMHgxNCwgMHg1MywgMHg2MywgMHhGMiwgMHgyMSwgMHhBMywgMHhFOSwgMHhDMywKKyAgICAgICAgMHhBRCwgMHgwNCwgMHg2RSwgMHhFNywgMHhBRCwgMHgxRiwgMHg2QiwgMHhDRSwgMHg0RSwgMHgzNSwKKyAgICAgICAgMHg0QSwgMHg2MSwgMHg4NCwgMHhCOSwgMHg2MSwgMHg2NSwgMHgxRCwgMHhBMiwgMHhENywgMHhBMSwKKyAgICAgICAgMHhFNiwgMHg3NCwgMHgwOCwgMHgxNSwgMHgzOCwgMHg3NSwgMHhCMCwgMHgyMywgMHg3MCwgMHgyMiwKKyAgICAgICAgMHgxNSwgMHg1OSwgMHgyQywgMHg0OCwgMHhGMCwgMHhEQSwgMHg5QSwgMHg5OSwgMHhENCwgMHgyQiwKKyAgICAgICAgMHg4MywgMHhERiwgMHg5QSwgMHg5MywgMHg3OCwgMHg0NSwgMHhCOSwgMHg4NCwgMHg1QywgMHg3RSwKKyAgICAgICAgMHg3MSwgMHg5MCwgMHhEQSwgMHg1NiwgMHgxQywgMHg5RiwgMHg1NywgMHhFRCwgMHg3NiwgMHhGNywKKyAgICAgICAgMHgxNywgMHhFNSwgMHhEMiwgMHgwMSwgMHg5MCwgMHg5OSwgMHg1RiwgMHg0QywgMHgwNywgMHg0OSwKKyAgICAgICAgMHgwNywgMHg4MiwgMHg3NSwgMHg5MiwgMHg0NCwgMHg3QSwgMHhGRSwgMHg5QiwgMHhBNywgMHg0RCwKKyAgICAgICAgMHhFQywgMHhDOCwgMHhEQywgMHg0NiwgMHg2NywgMHgyOCwgMHgwNCwgMHg4QiwgMHgwOCwgMHgxNywKKyAgICAgICAgMHg5NCwgMHgxMywgMHhFOSwgMHhBMCwgMHhEMiwgMHhCMiwgMHgyNiwgMHg1NiwgMHgyNywgMHg2MCwKKyAgICAgICAgMHg5NCwgMHg1QSwgMHg1MCwgMHg1QywgMHhDRiwgMHgzNCwgMHg0RCwgMHgzRiwgMHgzNSwgMHhFNywKKyAgICAgICAgMHgxMiwgMHg1RCwgMHhDNSwgMHgzMiwgMHgwMCwgMHgyRiwgMHhFMCwgMHgxRCwgMHgwOSwgMHhFNSwKKyAgICAgICAgMHgzNiwgMHg4RCwgMHg3NywgMHg5MywgMHhGNiwgMHhFNSwgMHg2MiwgMHhCNCwgMHhBMywgMHg5QiwKKyAgICAgICAgMHhDNiwgMHg3QywgMHhFNiwgMHgzRCwgMHhENSwgMHgzOCwgMHgzMywgMHg1RiwgMHgyMywgMHg1QiwKKyAgICAgICAgMHg4MSwgMHgyRSwgMHgyNCwgMHgyNiwgMHg5RSwgMHg5OCwgMHhBOCwgMHhBRiwgMHgwNCwgMHgzRCwKKyAgICAgICAgMHg2NSwgMHgzRiwgMHg3MSwgMHg4OCwgMHg0OCwgMHg0NCwgMHg1QywgMHgxQSwgMHgxMSwgMHgwRSwKKyAgICAgICAgMHgxQiwgMHhFMSwgMHg4MSwgMHhCMSwgMHhCNiwgMHg2NiwgMHhFNiwgMHgzQywgMHgxMywgMHg2NywKKyAgICAgICAgMHhENiwgMHg2QiwgMHhBMywgMHhGMywgMHhCNywgMHhGNiwgMHg5RiwgMHgxNCwgMHhBNiwgMHg4NywKKyAgICAgICAgMHg3RiwgMHgyQiwgMHgxNCwgMHgzMSwgMHgyMiwgMHg3QSwgMHhGNSwgMHgwRCwgMHg0NCwgMHhFNiwKKyAgICAgICAgMHhBMywgMHgxQSwgMHhENiwgMHhEMiwgMHhEQywgMHg4OCwgMHg3MSwgMHgzNywgMHgyOCwgMHgxMSwKKyAgICAgICAgMHg2QywgMHhFRiwgMHg5NSwgMHhBQiwgMHgxRCwgMHhDNSwgMHhDMywgMHg5QSwgMHhFRiwgMHgxQSwKKyAgICAgICAgMHg1NCwgMHgxMSwgMHg5MiwgMHg4RSwgMHg4OSwgMHg0MywgMHgwMywgMHgyNiwgMHhEMCwgMHhFOSwKKyAgICAgICAgMHg2MywgMHgzMywgMHhGRSwgMHg3OSwgMHg0QywgMHhBNiwgMHg2RiwgMHhDNCwgMHg1OCwgMHg1OCwKKyAgICAgICAgMHgyRSwgMHhCNiwgMHhBQiwgMHg1NywgMHhBMCwgMHgzOSwgMHg0RCwgMHhGRiwgMHg4OCwgMHhDMCwKKyAgICAgICAgMHgyMywgMHgyQywgMHgzQiwgMHhFMywgMHg5QSwgMHhERiwgMHg0OCwgMHhEMywgMHgxNywgMHg0NSwKKyAgICAgICAgMHg1RCwgMHgzNiwgMHg0RSwgMHgwMCwgMHg1OCwgMHg3MiwgMHhDMywgMHhFRiwgMHhFNywgMHg3NiwKKyAgICAgICAgMHgwQiwgMHhGOCwgMHgxOSwgMHhBOCwgMHg1RiwgMHhGNiwgMHg1MywgMHg5OCwgMHg0OSwgMHgyQiwKKyAgICAgICAgMHg1MiwgMHhCNSwgMHg4RSwgMHhBNSwgMHhEOCwgMHg3MywgMHg2RSwgMHgzQywgMHgyMywgMHgyMywKKyAgICAgICAgMHgwNiwgMHg4NiwgMHgyNSwgMHg2QiwgMHgwRCwgMHgzQiwgMHhGMiwgMHg5QSwgMHgxNywgMHgzMywKKyAgICAgICAgMHhBNCwgMHg0RSwgMHhGNSwgMHg2QiwgMHhERSwgMHhCMywgMHg2NCwgMHgyMCwgMHg1OCwgMHhDNiwKKyAgICAgICAgMHg2RCwgMHgyMiwgMHhBOSwgMHhBRSwgMHhGNCwgMHgwOSwgMHg5RCwgMHgwRCwgMHg2RSwgMHg5RiwKKyAgICAgICAgMHg5NiwgMHgyQSwgMHg5RQorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NsaWVudF9jZXJ0X2Rlcl80MDk2ID0gc2l6ZW9mKGNsaWVudF9jZXJ0X2Rlcl80MDk2KTsKKworLyogLi9jZXJ0cy9kaDQwOTYuZGVyLCA0MDk2LWJpdCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGhfa2V5X2Rlcl80MDk2W10gPQoreworICAgICAgICAweDMwLCAweDgyLCAweDAyLCAweDA4LCAweDAyLCAweDgyLCAweDAyLCAweDAxLCAweDAwLCAweEU5LAorICAgICAgICAweDBFLCAweDNFLCAweDc5LCAweDRGLCAweEM5LCAweEIyLCAweEEwLCAweEIxLCAweERCLCAweDJGLAorICAgICAgICAweDFFLCAweDI0LCAweDIxLCAweDkwLCAweDVDLCAweDUwLCAweEE0LCAweDM0LCAweERCLCAweDk5LAorICAgICAgICAweDkwLCAweEFDLCAweEY3LCAweEJGLCAweDJGLCAweDAxLCAweDRCLCAweEFDLCAweDg3LCAweDcwLAorICAgICAgICAweEJBLCAweEVDLCAweEQxLCAweDY0LCAweERFLCAweDA0LCAweENBLCAweEZDLCAweEY5LCAweDUxLAorICAgICAgICAweDY5LCAweDFFLCAweEI3LCAweDk5LCAweEUyLCAweEI0LCAweDBELCAweERCLCAweDVELCAweDc4LAorICAgICAgICAweDM4LCAweDM4LCAweDQxLCAweDA1LCAweEU4LCAweDY3LCAweDQ4LCAweDY1LCAweDU0LCAweDcxLAorICAgICAgICAweENDLCAweEM5LCAweEFBLCAweDk1LCAweDFFLCAweEQ0LCAweEJGLCAweEJDLCAweENBLCAweDVELAorICAgICAgICAweEMyLCAweDlDLCAweDlFLCAweDdFLCAweDVFLCAweDk0LCAweDVCLCAweDJGLCAweDYwLCAweDcyLAorICAgICAgICAweEVELCAweEVCLCAweDU0LCAweDBDLCAweDQ4LCAweDJCLCAweDIxLCAweDc0LCAweDRELCAweDM3LAorICAgICAgICAweDA0LCAweDVBLCAweDJGLCAweDhCLCAweDI0LCAweDRBLCAweERCLCAweEVFLCAweEZBLCAweEE5LAorICAgICAgICAweDk0LCAweDEzLCAweDhGLCAweDUyLCAweDRBLCAweDFCLCAweEFFLCAweEU2LCAweEM4LCAweDdGLAorICAgICAgICAweDk5LCAweDA5LCAweDIzLCAweDg0LCAweDg5LCAweEU5LCAweEE2LCAweDUzLCAweDgyLCAweEI2LAorICAgICAgICAweDAzLCAweDZELCAweDM4LCAweDVELCAweDJFLCAweEVCLCAweDBCLCAweEYwLCAweEU2LCAweEFBLAorICAgICAgICAweEIxLCAweDhCLCAweDUxLCAweEZDLCAweEQ2LCAweDEzLCAweEZCLCAweDIwLCAweENCLCAweERGLAorICAgICAgICAweDc5LCAweDk3LCAweERCLCAweDU1LCAweDc0LCAweEMyLCAweDIxLCAweEU4LCAweERCLCAweDhDLAorICAgICAgICAweDZBLCAweDk1LCAweDJELCAweDUxLCAweDkxLCAweEE3LCAweEExLCAweDNDLCAweDlCLCAweEVGLAorICAgICAgICAweEY1LCAweDQzLCAweEFDLCAweEE2LCAweDY5LCAweENFLCAweDY2LCAweDVDLCAweEQ1LCAweEIxLAorICAgICAgICAweEY4LCAweEJBLCAweEQ0LCAweDg2LCAweDI1LCAweDI5LCAweDJFLCAweDBFLCAweDIzLCAweDA1LAorICAgICAgICAweERBLCAweDdDLCAweDdDLCAweEMyLCAweDdCLCAweEM4LCAweEI1LCAweDc5LCAweDg0LCAweDZELAorICAgICAgICAweDY4LCAweDJELCAweDgyLCAweDRBLCAweDM1LCAweDlGLCAweERDLCAweDBFLCAweDYzLCAweDJCLAorICAgICAgICAweDU4LCAweDVGLCAweDM0LCAweDdFLCAweEE4LCAweDczLCAweENFLCAweDQ0LCAweDUzLCAweDExLAorICAgICAgICAweEUzLCAweERCLCAweDQ2LCAweEZBLCAweDNBLCAweEMzLCAweERBLCAweDYzLCAweEE1LCAweDY1LAorICAgICAgICAweDU2LCAweDk5LCAweEE1LCAweDkxLCAweDI3LCAweEQ2LCAweEU3LCAweERGLCAweDJELCAweEVGLAorICAgICAgICAweEEwLCAweDgxLCAweEI2LCAweDA3LCAweDNBLCAweEM2LCAweEMxLCAweDJCLCAweEExLCAweDNBLAorICAgICAgICAweDc0LCAweEI0LCAweEU5LCAweEUxLCAweDJGLCAweDZCLCAweDJCLCAweEU0LCAweEYwLCAweDk4LAorICAgICAgICAweEJFLCAweDZGLCAweENCLCAweEJCLCAweEFFLCAweDhELCAweEQyLCAweDdFLCAweDFCLCAweDZGLAorICAgICAgICAweEJBLCAweEYyLCAweEIyLCAweEI4LCAweEIxLCAweDVELCAweDlFLCAweDc5LCAweDE5LCAweEY3LAorICAgICAgICAweDk0LCAweEIyLCAweEMxLCAweDE3LCAweDVFLCAweDlCLCAweEIzLCAweDA1LCAweDY3LCAweDZELAorICAgICAgICAweDVDLCAweDYyLCAweDY0LCAweEE4LCAweDJCLCAweEIwLCAweDM2LCAweDNELCAweEY5LCAweDRDLAorICAgICAgICAweDY1LCAweDUzLCAweEVFLCAweDJFLCAweDU1LCAweDY5LCAweENDLCAweDFDLCAweEY1LCAweDk2LAorICAgICAgICAweERDLCAweEJFLCAweDYwLCAweDVFLCAweDM3LCAweEVFLCAweEQ0LCAweDYzLCAweDk2LCAweDUxLAorICAgICAgICAweDk3LCAweDk2LCAweDE0LCAweDNDLCAweDYxLCAweEJGLCAweDUzLCAweEFBLCAweDI0LCAweEI1LAorICAgICAgICAweDI0LCAweDVCLCAweDI2LCAweDY3LCAweEFELCAweDAyLCAweDY3LCAweEI4LCAweEQzLCAweDA1LAorICAgICAgICAweDZFLCAweEE0LCAweDhGLCAweDQ2LCAweDkxLCAweDlELCAweDg0LCAweEE2LCAweDJDLCAweDQ0LAorICAgICAgICAweDlGLCAweDJELCAweDE4LCAweDJGLCAweDczLCAweEE1LCAweEU1LCAweEM0LCAweEQ5LCAweDRGLAorICAgICAgICAweEQ5LCAweDlGLCAweEY1LCAweEMwLCAweEM1LCAweDQ4LCAweEU4LCAweDIzLCAweDMyLCAweEM0LAorICAgICAgICAweDRBLCAweENFLCAweEZGLCAweDNCLCAweDE2LCAweDg3LCAweDg1LCAweEE1LCAweDFGLCAweDIyLAorICAgICAgICAweEE4LCAweDBCLCAweDkxLCAweDk3LCAweDI0LCAweDk1LCAweDA3LCAweEM4LCAweDczLCAweEQyLAorICAgICAgICAweEIwLCAweDAxLCAweEY4LCAweDIwLCAweEE5LCAweEFCLCAweDZCLCAweDcxLCAweDc5LCAweDI0LAorICAgICAgICAweEYzLCAweDc5LCAweEI1LCAweDlCLCAweDAwLCAweEY1LCAweEY5LCAweEFFLCAweDIzLCAweEFDLAorICAgICAgICAweEVBLCAweEUxLCAweDQ4LCAweDg4LCAweDI4LCAweDUzLCAweEUwLCAweEM4LCAweDc2LCAweDI5LAorICAgICAgICAweEFFLCAweDNFLCAweDI1LCAweDlGLCAweDFDLCAweEM1LCAweDhBLCAweDg2LCAweDMzLCAweDAyLAorICAgICAgICAweDIxLCAweEFCLCAweEE1LCAweDEwLCAweEYwLCAweDA3LCAweDFCLCAweDU2LCAweDhGLCAweENELAorICAgICAgICAweEZDLCAweDg3LCAweDlFLCAweDJFLCAweEQwLCAweDQ0LCAweDk4LCAweDQ0LCAweDk5LCAweEIzLAorICAgICAgICAweEMyLCAweDE0LCAweENFLCAweEQ4LCAweDkzLCAweEVBLCAweEQxLCAweDgyLCAweDNDLCAweDFCLAorICAgICAgICAweDQ5LCAweEU4LCAweDZGLCAweDA0LCAweEIyLCAweEY1LCAweEFGLCAweDlCLCAweDM3LCAweDdELAorICAgICAgICAweEU1LCAweEUwLCAweDU2LCAweEU5LCAweEVFLCAweDAwLCAweDU4LCAweDI1LCAweDE2LCAweDIzLAorICAgICAgICAweEMzLCAweDhFLCAweEYwLCAweEI5LCAweEUyLCAweDk4LCAweDVELCAweEYyLCAweDRGLCAweDVDLAorICAgICAgICAweEMzLCAweDI3LCAweDJBLCAweDY3LCAweDdELCAweDQzLCAweEY2LCAweDM2LCAweDc2LCAweEQ0LAorICAgICAgICAweDJDLCAweDdFLCAweDE2LCAweDgwLCAweENCLCAweEYxLCAweDA3LCAweERDLCAweEI5LCAweEY1LAorICAgICAgICAweEYzLCAweDU2LCAweEJELCAweEYwLCAweEZDLCAweDAwLCAweDc4LCAweDAwLCAweDU2LCAweEI0LAorICAgICAgICAweDNCLCAweDAyLCAweDAxLCAweDAyCit9Oworc3RhdGljIGNvbnN0IGludCBzaXplb2ZfZGhfa2V5X2Rlcl80MDk2ID0gc2l6ZW9mKGRoX2tleV9kZXJfNDA5Nik7CisKKyNlbmRpZiAvKiBVU0VfQ0VSVF9CVUZGRVJTXzQwOTYgKi8KKworI2lmIGRlZmluZWQoSEFWRV9FQ0MpICYmIGRlZmluZWQoVVNFX0NFUlRfQlVGRkVSU18yNTYpCisKKy8qIC4vY2VydHMvZWNjLWNsaWVudC1rZXkuZGVyLCBFQ0MgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjY19jbGlrZXlfZGVyXzI1NltdID0KK3sKKyAgICAgICAgMHgzMCwgMHg3NywgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgyMCwgMHhGOCwgMHhDRiwgMHg5MiwKKyAgICAgICAgMHg2QiwgMHhCRCwgMHgxRSwgMHgyOCwgMHhGMSwgMHhBOCwgMHhBQiwgMHhBMSwgMHgyMywgMHg0RiwKKyAgICAgICAgMHgzMiwgMHg3NCwgMHgxOCwgMHg4OCwgMHg1MCwgMHhBRCwgMHg3RSwgMHhDNywgMHhFQywgMHg5MiwKKyAgICAgICAgMHhGOCwgMHg4RiwgMHg5NywgMHg0RCwgMHhBRiwgMHg1NiwgMHg4OSwgMHg2NSwgMHhDNywgMHhBMCwKKyAgICAgICAgMHgwQSwgMHgwNiwgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwKKyAgICAgICAgMHgwNywgMHhBMSwgMHg0NCwgMHgwMywgMHg0MiwgMHgwMCwgMHgwNCwgMHg1NSwgMHhCRiwgMHhGNCwKKyAgICAgICAgMHgwRiwgMHg0NCwgMHg1MCwgMHg5QSwgMHgzRCwgMHhDRSwgMHg5QiwgMHhCNywgMHhGMCwgMHhDNSwKKyAgICAgICAgMHg0RCwgMHhGNSwgMHg3MCwgMHg3QiwgMHhENCwgMHhFQywgMHgyNCwgMHg4RSwgMHgxOSwgMHg4MCwKKyAgICAgICAgMHhFQywgMHg1QSwgMHg0QywgMHhBMiwgMHgyNCwgMHgwMywgMHg2MiwgMHgyQywgMHg5QiwgMHhEQSwKKyAgICAgICAgMHhFRiwgMHhBMiwgMHgzNSwgMHgxMiwgMHg0MywgMHg4NCwgMHg3NiwgMHgxNiwgMHhDNiwgMHg1NiwKKyAgICAgICAgMHg5NSwgMHgwNiwgMHhDQywgMHgwMSwgMHhBOSwgMHhCRCwgMHhGNiwgMHg3NSwgMHgxQSwgMHg0MiwKKyAgICAgICAgMHhGNywgMHhCRCwgMHhBOSwgMHhCMiwgMHgzNiwgMHgyMiwgMHg1RiwgMHhDNywgMHg1RCwgMHg3RiwKKyAgICAgICAgMHhCNAorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2VjY19jbGlrZXlfZGVyXzI1NiA9IHNpemVvZihlY2NfY2xpa2V5X2Rlcl8yNTYpOworCisvKiAuL2NlcnRzL2VjYy1jbGllbnQta2V5UHViLmRlciwgRUNDICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2NfY2xpa2V5cHViX2Rlcl8yNTZbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4NTksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsCisgICAgICAgIDB4M0QsIDB4MDIsIDB4MDEsIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsCisgICAgICAgIDB4MDMsIDB4MDEsIDB4MDcsIDB4MDMsIDB4NDIsIDB4MDAsIDB4MDQsIDB4NTUsIDB4QkYsIDB4RjQsCisgICAgICAgIDB4MEYsIDB4NDQsIDB4NTAsIDB4OUEsIDB4M0QsIDB4Q0UsIDB4OUIsIDB4QjcsIDB4RjAsIDB4QzUsCisgICAgICAgIDB4NEQsIDB4RjUsIDB4NzAsIDB4N0IsIDB4RDQsIDB4RUMsIDB4MjQsIDB4OEUsIDB4MTksIDB4ODAsCisgICAgICAgIDB4RUMsIDB4NUEsIDB4NEMsIDB4QTIsIDB4MjQsIDB4MDMsIDB4NjIsIDB4MkMsIDB4OUIsIDB4REEsCisgICAgICAgIDB4RUYsIDB4QTIsIDB4MzUsIDB4MTIsIDB4NDMsIDB4ODQsIDB4NzYsIDB4MTYsIDB4QzYsIDB4NTYsCisgICAgICAgIDB4OTUsIDB4MDYsIDB4Q0MsIDB4MDEsIDB4QTksIDB4QkQsIDB4RjYsIDB4NzUsIDB4MUEsIDB4NDIsCisgICAgICAgIDB4RjcsIDB4QkQsIDB4QTksIDB4QjIsIDB4MzYsIDB4MjIsIDB4NUYsIDB4QzcsIDB4NUQsIDB4N0YsCisgICAgICAgIDB4QjQKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9lY2NfY2xpa2V5cHViX2Rlcl8yNTYgPSBzaXplb2YoZWNjX2NsaWtleXB1Yl9kZXJfMjU2KTsKKworLyogLi9jZXJ0cy9jbGllbnQtZWNjLWNlcnQuZGVyLCBFQ0MgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNsaWVjY19jZXJ0X2Rlcl8yNTZbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDMsIDB4NDksIDB4MzAsIDB4ODIsIDB4MDIsIDB4RUUsIDB4QTAsIDB4MDMsCisgICAgICAgIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDksIDB4MDAsIDB4RTcsIDB4NEEsIDB4NEYsIDB4RTUsCisgICAgICAgIDB4NTYsIDB4OTcsIDB4Q0EsIDB4QzMsIDB4MzAsIDB4MEEsIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsCisgICAgICAgIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MzAsIDB4ODEsIDB4OEQsIDB4MzEsCisgICAgICAgIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsCisgICAgICAgIDB4NTUsIDB4NTMsIDB4MzEsIDB4MEYsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MDgsIDB4MEMsIDB4MDYsIDB4NEYsIDB4NzIsIDB4NjUsIDB4NjcsIDB4NkYsIDB4NkUsIDB4MzEsCisgICAgICAgIDB4MEUsIDB4MzAsIDB4MEMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDUsCisgICAgICAgIDB4NTMsIDB4NjEsIDB4NkMsIDB4NjUsIDB4NkQsIDB4MzEsIDB4MTMsIDB4MzAsIDB4MTEsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MEEsIDB4NDMsIDB4NkMsIDB4NjksIDB4NjUsCisgICAgICAgIDB4NkUsIDB4NzQsIDB4MjAsIDB4NDUsIDB4NDMsIDB4NDMsIDB4MzEsIDB4MEQsIDB4MzAsIDB4MEIsCisgICAgICAgIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MDQsIDB4NDYsIDB4NjEsIDB4NzMsCisgICAgICAgIDB4NzQsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDMsCisgICAgICAgIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsCisgICAgICAgIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsIDB4MUYsIDB4MzAsCisgICAgICAgIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsCisgICAgICAgIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsIDB4NDAsIDB4NzcsCisgICAgICAgIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsCisgICAgICAgIDB4MzAsIDB4MUUsIDB4MTcsIDB4MEQsIDB4MzIsIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzEsIDB4MzAsCisgICAgICAgIDB4MzEsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsIDB4MzMsIDB4NUEsIDB4MTcsIDB4MEQsIDB4MzIsCisgICAgICAgIDB4MzMsIDB4MzEsIDB4MzEsIDB4MzAsIDB4MzcsIDB4MzEsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsCisgICAgICAgIDB4MzMsIDB4NUEsIDB4MzAsIDB4ODEsIDB4OEQsIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MEYsCisgICAgICAgIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDYsIDB4NEYsCisgICAgICAgIDB4NzIsIDB4NjUsIDB4NjcsIDB4NkYsIDB4NkUsIDB4MzEsIDB4MEUsIDB4MzAsIDB4MEMsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDUsIDB4NTMsIDB4NjEsIDB4NkMsIDB4NjUsCisgICAgICAgIDB4NkQsIDB4MzEsIDB4MTMsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsCisgICAgICAgIDB4MEMsIDB4MEEsIDB4NDMsIDB4NkMsIDB4NjksIDB4NjUsIDB4NkUsIDB4NzQsIDB4MjAsIDB4NDUsCisgICAgICAgIDB4NDMsIDB4NDMsIDB4MzEsIDB4MEQsIDB4MzAsIDB4MEIsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgICAgIDB4MEIsIDB4MEMsIDB4MDQsIDB4NDYsIDB4NjEsIDB4NzMsIDB4NzQsIDB4MzEsIDB4MTgsIDB4MzAsCisgICAgICAgIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsCisgICAgICAgIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsCisgICAgICAgIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsCisgICAgICAgIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsCisgICAgICAgIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsCisgICAgICAgIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzAsIDB4NTksIDB4MzAsIDB4MTMsCisgICAgICAgIDB4MDYsIDB4MDcsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDIsIDB4MDEsIDB4MDYsCisgICAgICAgIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsIDB4MDcsIDB4MDMsCisgICAgICAgIDB4NDIsIDB4MDAsIDB4MDQsIDB4NTUsIDB4QkYsIDB4RjQsIDB4MEYsIDB4NDQsIDB4NTAsIDB4OUEsCisgICAgICAgIDB4M0QsIDB4Q0UsIDB4OUIsIDB4QjcsIDB4RjAsIDB4QzUsIDB4NEQsIDB4RjUsIDB4NzAsIDB4N0IsCisgICAgICAgIDB4RDQsIDB4RUMsIDB4MjQsIDB4OEUsIDB4MTksIDB4ODAsIDB4RUMsIDB4NUEsIDB4NEMsIDB4QTIsCisgICAgICAgIDB4MjQsIDB4MDMsIDB4NjIsIDB4MkMsIDB4OUIsIDB4REEsIDB4RUYsIDB4QTIsIDB4MzUsIDB4MTIsCisgICAgICAgIDB4NDMsIDB4ODQsIDB4NzYsIDB4MTYsIDB4QzYsIDB4NTYsIDB4OTUsIDB4MDYsIDB4Q0MsIDB4MDEsCisgICAgICAgIDB4QTksIDB4QkQsIDB4RjYsIDB4NzUsIDB4MUEsIDB4NDIsIDB4RjcsIDB4QkQsIDB4QTksIDB4QjIsCisgICAgICAgIDB4MzYsIDB4MjIsIDB4NUYsIDB4QzcsIDB4NUQsIDB4N0YsIDB4QjQsIDB4QTMsIDB4ODIsIDB4MDEsCisgICAgICAgIDB4MzMsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MkYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MUQsIDB4MEUsIDB4MDQsIDB4MTYsIDB4MDQsIDB4MTQsIDB4RUIsIDB4RDQsIDB4NEIsIDB4NTksCisgICAgICAgIDB4NkIsIDB4OTUsIDB4NjEsIDB4M0YsIDB4NTEsIDB4NTcsIDB4QjYsIDB4MDQsIDB4NEQsIDB4ODksCisgICAgICAgIDB4NDEsIDB4ODgsIDB4NDQsIDB4NUMsIDB4QUIsIDB4RjIsIDB4MzAsIDB4ODEsIDB4QzIsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MUQsIDB4MjMsIDB4MDQsIDB4ODEsIDB4QkEsIDB4MzAsIDB4ODEsIDB4QjcsCisgICAgICAgIDB4ODAsIDB4MTQsIDB4RUIsIDB4RDQsIDB4NEIsIDB4NTksIDB4NkIsIDB4OTUsIDB4NjEsIDB4M0YsCisgICAgICAgIDB4NTEsIDB4NTcsIDB4QjYsIDB4MDQsIDB4NEQsIDB4ODksIDB4NDEsIDB4ODgsIDB4NDQsIDB4NUMsCisgICAgICAgIDB4QUIsIDB4RjIsIDB4QTEsIDB4ODEsIDB4OTMsIDB4QTQsIDB4ODEsIDB4OTAsIDB4MzAsIDB4ODEsCisgICAgICAgIDB4OEQsIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsCisgICAgICAgIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MEYsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDYsIDB4NEYsIDB4NzIsIDB4NjUsIDB4NjcsIDB4NkYsCisgICAgICAgIDB4NkUsIDB4MzEsIDB4MEUsIDB4MzAsIDB4MEMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsCisgICAgICAgIDB4MEMsIDB4MDUsIDB4NTMsIDB4NjEsIDB4NkMsIDB4NjUsIDB4NkQsIDB4MzEsIDB4MTMsIDB4MzAsCisgICAgICAgIDB4MTEsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MEEsIDB4NDMsIDB4NkMsCisgICAgICAgIDB4NjksIDB4NjUsIDB4NkUsIDB4NzQsIDB4MjAsIDB4NDUsIDB4NDMsIDB4NDMsIDB4MzEsIDB4MEQsCisgICAgICAgIDB4MzAsIDB4MEIsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MDQsIDB4NDYsCisgICAgICAgIDB4NjEsIDB4NzMsIDB4NzQsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsCisgICAgICAgIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsCisgICAgICAgIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsCisgICAgICAgIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsCisgICAgICAgIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsCisgICAgICAgIDB4NkYsIDB4NkQsIDB4ODIsIDB4MDksIDB4MDAsIDB4RTcsIDB4NEEsIDB4NEYsIDB4RTUsIDB4NTYsCisgICAgICAgIDB4OTcsIDB4Q0EsIDB4QzMsIDB4MzAsIDB4MEMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MTMsCisgICAgICAgIDB4MDQsIDB4MDUsIDB4MzAsIDB4MDMsIDB4MDEsIDB4MDEsIDB4RkYsIDB4MzAsIDB4MUMsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MUQsIDB4MTEsIDB4MDQsIDB4MTUsIDB4MzAsIDB4MTMsIDB4ODIsIDB4MEIsCisgICAgICAgIDB4NjUsIDB4NzgsIDB4NjEsIDB4NkQsIDB4NzAsIDB4NkMsIDB4NjUsIDB4MkUsIDB4NjMsIDB4NkYsCisgICAgICAgIDB4NkQsIDB4ODcsIDB4MDQsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzAsIDB4MUQsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MUQsIDB4MjUsIDB4MDQsIDB4MTYsIDB4MzAsIDB4MTQsIDB4MDYsIDB4MDgsCisgICAgICAgIDB4MkIsIDB4MDYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDcsIDB4MDMsIDB4MDEsIDB4MDYsIDB4MDgsCisgICAgICAgIDB4MkIsIDB4MDYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDcsIDB4MDMsIDB4MDIsIDB4MzAsIDB4MEEsCisgICAgICAgIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDQsIDB4MDMsIDB4MDIsCisgICAgICAgIDB4MDMsIDB4NDksIDB4MDAsIDB4MzAsIDB4NDYsIDB4MDIsIDB4MjEsIDB4MDAsIDB4RTMsIDB4QkIsCisgICAgICAgIDB4Q0EsIDB4MEUsIDB4MzEsIDB4MkQsIDB4MzksIDB4MUQsIDB4OTQsIDB4MjUsIDB4ODEsIDB4OTAsCisgICAgICAgIDB4RDUsIDB4MTEsIDB4RjksIDB4MDksIDB4NkQsIDB4NTgsIDB4MTYsIDB4MjMsIDB4QkUsIDB4OUYsCisgICAgICAgIDB4QTksIDB4MTgsIDB4NjQsIDB4ODMsIDB4M0MsIDB4MjUsIDB4MDMsIDB4NTgsIDB4NTgsIDB4MzksCisgICAgICAgIDB4MDIsIDB4MjEsIDB4MDAsIDB4QTQsIDB4QUEsIDB4QjMsIDB4RjAsIDB4MDksIDB4QzksIDB4MEMsCisgICAgICAgIDB4MkYsIDB4RjcsIDB4QjEsIDB4RDQsIDB4OEUsIDB4OUYsIDB4QTYsIDB4QjYsIDB4QUIsIDB4MUEsCisgICAgICAgIDB4QzcsIDB4MzcsIDB4RUQsIDB4NzAsIDB4NEQsIDB4MzQsIDB4MDQsIDB4QTAsIDB4OUIsIDB4M0QsCisgICAgICAgIDB4ODQsIDB4ODYsIDB4MTAsIDB4QTAsIDB4RjAKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9jbGllY2NfY2VydF9kZXJfMjU2ID0gc2l6ZW9mKGNsaWVjY19jZXJ0X2Rlcl8yNTYpOworCisvKiAuL2NlcnRzL2VjYy1rZXkuZGVyLCBFQ0MgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjY19rZXlfZGVyXzI1NltdID0KK3sKKyAgICAgICAgMHgzMCwgMHg3NywgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgyMCwgMHg0NSwgMHhCNiwgMHg2OSwKKyAgICAgICAgMHgwMiwgMHg3MywgMHg5QywgMHg2QywgMHg4NSwgMHhBMSwgMHgzOCwgMHg1QiwgMHg3MiwgMHhFOCwKKyAgICAgICAgMHhFOCwgMHhDNywgMHhBQywgMHhDNCwgMHgwMywgMHg4RCwgMHg1MywgMHgzNSwgMHgwNCwgMHhGQSwKKyAgICAgICAgMHg2QywgMHgyOCwgMHhEQywgMHgzNCwgMHg4RCwgMHhFMSwgMHhBOCwgMHgwOSwgMHg4QywgMHhBMCwKKyAgICAgICAgMHgwQSwgMHgwNiwgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwKKyAgICAgICAgMHgwNywgMHhBMSwgMHg0NCwgMHgwMywgMHg0MiwgMHgwMCwgMHgwNCwgMHhCQiwgMHgzMywgMHhBQywKKyAgICAgICAgMHg0QywgMHgyNywgMHg1MCwgMHg0QSwgMHhDNiwgMHg0QSwgMHhBNSwgMHgwNCwgMHhDMywgMHgzQywKKyAgICAgICAgMHhERSwgMHg5RiwgMHgzNiwgMHhEQiwgMHg3MiwgMHgyRCwgMHhDRSwgMHg5NCwgMHhFQSwgMHgyQiwKKyAgICAgICAgMHhGQSwgMHhDQiwgMHgyMCwgMHgwOSwgMHgzOSwgMHgyQywgMHgxNiwgMHhFOCwgMHg2MSwgMHgwMiwKKyAgICAgICAgMHhFOSwgMHhBRiwgMHg0RCwgMHhEMywgMHgwMiwgMHg5MywgMHg5QSwgMHgzMSwgMHg1QiwgMHg5NywKKyAgICAgICAgMHg5MiwgMHgyMSwgMHg3RiwgMHhGMCwgMHhDRiwgMHgxOCwgMHhEQSwgMHg5MSwgMHgxMSwgMHgwMiwKKyAgICAgICAgMHgzNCwgMHg4NiwgMHhFOCwgMHgyMCwgMHg1OCwgMHgzMywgMHgwQiwgMHg4MCwgMHgzNCwgMHg4OSwKKyAgICAgICAgMHhEOAorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2VjY19rZXlfZGVyXzI1NiA9IHNpemVvZihlY2Nfa2V5X2Rlcl8yNTYpOworCisvKiAuL2NlcnRzL2VjYy1rZXlQdWIuZGVyLCBFQ0MgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjY19rZXlfcHViX2Rlcl8yNTZbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4NTksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsCisgICAgICAgIDB4M0QsIDB4MDIsIDB4MDEsIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsCisgICAgICAgIDB4MDMsIDB4MDEsIDB4MDcsIDB4MDMsIDB4NDIsIDB4MDAsIDB4MDQsIDB4QkIsIDB4MzMsIDB4QUMsCisgICAgICAgIDB4NEMsIDB4MjcsIDB4NTAsIDB4NEEsIDB4QzYsIDB4NEEsIDB4QTUsIDB4MDQsIDB4QzMsIDB4M0MsCisgICAgICAgIDB4REUsIDB4OUYsIDB4MzYsIDB4REIsIDB4NzIsIDB4MkQsIDB4Q0UsIDB4OTQsIDB4RUEsIDB4MkIsCisgICAgICAgIDB4RkEsIDB4Q0IsIDB4MjAsIDB4MDksIDB4MzksIDB4MkMsIDB4MTYsIDB4RTgsIDB4NjEsIDB4MDIsCisgICAgICAgIDB4RTksIDB4QUYsIDB4NEQsIDB4RDMsIDB4MDIsIDB4OTMsIDB4OUEsIDB4MzEsIDB4NUIsIDB4OTcsCisgICAgICAgIDB4OTIsIDB4MjEsIDB4N0YsIDB4RjAsIDB4Q0YsIDB4MTgsIDB4REEsIDB4OTEsIDB4MTEsIDB4MDIsCisgICAgICAgIDB4MzQsIDB4ODYsIDB4RTgsIDB4MjAsIDB4NTgsIDB4MzMsIDB4MEIsIDB4ODAsIDB4MzQsIDB4ODksCisgICAgICAgIDB4RDgKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9lY2Nfa2V5X3B1Yl9kZXJfMjU2ID0gc2l6ZW9mKGVjY19rZXlfcHViX2Rlcl8yNTYpOworCisvKiAuL2NlcnRzL3NlcnZlci1lY2MtY29tcC5kZXIsIEVDQyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2Vydl9lY2NfY29tcF9kZXJfMjU2W10gPQoreworICAgICAgICAweDMwLCAweDgyLCAweDAzLCAweDYxLCAweDMwLCAweDgyLCAweDAzLCAweDA3LCAweEEwLCAweDAzLAorICAgICAgICAweDAyLCAweDAxLCAweDAyLCAweDAyLCAweDA5LCAweDAwLCAweEU1LCAweEI2LCAweDY2LCAweEUwLAorICAgICAgICAweDA4LCAweDk2LCAweEM1LCAweDk1LCAweDMwLCAweDBBLCAweDA2LCAweDA4LCAweDJBLCAweDg2LAorICAgICAgICAweDQ4LCAweENFLCAweDNELCAweDA0LCAweDAzLCAweDAyLCAweDMwLCAweDgxLCAweEEwLCAweDMxLAorICAgICAgICAweDBCLCAweDMwLCAweDA5LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLAorICAgICAgICAweDU1LCAweDUzLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LAorICAgICAgICAweDA4LCAweDBDLCAweDA3LCAweDRELCAweDZGLCAweDZFLCAweDc0LCAweDYxLCAweDZFLCAweDYxLAorICAgICAgICAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLAorICAgICAgICAweDA3LCAweDQyLCAweDZGLCAweDdBLCAweDY1LCAweDZELCAweDYxLCAweDZFLCAweDMxLCAweDE4LAorICAgICAgICAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBBLCAweDBDLCAweDBGLCAweDQ1LAorICAgICAgICAweDZDLCAweDZDLCAweDY5LCAweDcwLCAweDc0LCAweDY5LCAweDYzLCAweDIwLCAweDJELCAweDIwLAorICAgICAgICAweDYzLCAweDZGLCAweDZELCAweDcwLCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLAorICAgICAgICAweDU1LCAweDA0LCAweDBCLCAweDBDLCAweDBGLCAweDUzLCAweDY1LCAweDcyLCAweDc2LCAweDY1LAorICAgICAgICAweDcyLCAweDIwLCAweDQ1LCAweDQzLCAweDQzLCAweDJELCAweDYzLCAweDZGLCAweDZELCAweDcwLAorICAgICAgICAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDAzLCAweDBDLAorICAgICAgICAweDBGLCAweDc3LCAweDc3LCAweDc3LCAweDJFLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLAorICAgICAgICAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMxLCAweDFGLCAweDMwLCAweDFELAorICAgICAgICAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDA5LAorICAgICAgICAweDAxLCAweDE2LCAweDEwLCAweDY5LCAweDZFLCAweDY2LCAweDZGLCAweDQwLCAweDc3LCAweDZGLAorICAgICAgICAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMwLAorICAgICAgICAweDFFLCAweDE3LCAweDBELCAweDMyLCAweDMxLCAweDMwLCAweDMyLCAweDMxLCAweDMwLCAweDMxLAorICAgICAgICAweDM5LCAweDM0LCAweDM5LCAweDM1LCAweDMzLCAweDVBLCAweDE3LCAweDBELCAweDMyLCAweDMzLAorICAgICAgICAweDMxLCAweDMxLCAweDMwLCAweDM3LCAweDMxLCAweDM5LCAweDM0LCAweDM5LCAweDM1LCAweDMzLAorICAgICAgICAweDVBLCAweDMwLCAweDgxLCAweEEwLCAweDMxLCAweDBCLCAweDMwLCAweDA5LCAweDA2LCAweDAzLAorICAgICAgICAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLCAweDU1LCAweDUzLCAweDMxLCAweDEwLCAweDMwLAorICAgICAgICAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA4LCAweDBDLCAweDA3LCAweDRELCAweDZGLAorICAgICAgICAweDZFLCAweDc0LCAweDYxLCAweDZFLCAweDYxLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLCAweDA3LCAweDQyLCAweDZGLCAweDdBLCAweDY1LAorICAgICAgICAweDZELCAweDYxLCAweDZFLCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDA0LCAweDBBLCAweDBDLCAweDBGLCAweDQ1LCAweDZDLCAweDZDLCAweDY5LCAweDcwLCAweDc0LAorICAgICAgICAweDY5LCAweDYzLCAweDIwLCAweDJELCAweDIwLCAweDYzLCAweDZGLCAweDZELCAweDcwLCAweDMxLAorICAgICAgICAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBCLCAweDBDLCAweDBGLAorICAgICAgICAweDUzLCAweDY1LCAweDcyLCAweDc2LCAweDY1LCAweDcyLCAweDIwLCAweDQ1LCAweDQzLCAweDQzLAorICAgICAgICAweDJELCAweDYzLCAweDZGLCAweDZELCAweDcwLCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDAzLCAweDBDLCAweDBGLCAweDc3LCAweDc3LCAweDc3LCAweDJFLAorICAgICAgICAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLAorICAgICAgICAweDZELCAweDMxLCAweDFGLCAweDMwLCAweDFELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LAorICAgICAgICAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDA5LCAweDAxLCAweDE2LCAweDEwLCAweDY5LCAweDZFLAorICAgICAgICAweDY2LCAweDZGLCAweDQwLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLAorICAgICAgICAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMwLCAweDM5LCAweDMwLCAweDEzLCAweDA2LCAweDA3LAorICAgICAgICAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAyLCAweDAxLCAweDA2LCAweDA4LCAweDJBLAorICAgICAgICAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLCAweDA3LCAweDAzLCAweDIyLCAweDAwLAorICAgICAgICAweDAyLCAweEJCLCAweDMzLCAweEFDLCAweDRDLCAweDI3LCAweDUwLCAweDRBLCAweEM2LCAweDRBLAorICAgICAgICAweEE1LCAweDA0LCAweEMzLCAweDNDLCAweERFLCAweDlGLCAweDM2LCAweERCLCAweDcyLCAweDJELAorICAgICAgICAweENFLCAweDk0LCAweEVBLCAweDJCLCAweEZBLCAweENCLCAweDIwLCAweDA5LCAweDM5LCAweDJDLAorICAgICAgICAweDE2LCAweEU4LCAweDYxLCAweEEzLCAweDgyLCAweDAxLCAweDQ2LCAweDMwLCAweDgyLCAweDAxLAorICAgICAgICAweDQyLCAweDMwLCAweDFELCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDBFLCAweDA0LCAweDE2LAorICAgICAgICAweDA0LCAweDE0LCAweDhDLCAweDM4LCAweDNBLCAweDZCLCAweEI4LCAweDI0LCAweEI3LCAweERGLAorICAgICAgICAweDZFLCAweEY0LCAweDU5LCAweEFDLCAweDU2LCAweDRFLCAweEFBLCAweEUyLCAweDU4LCAweEE2LAorICAgICAgICAweDVBLCAweDE4LCAweDMwLCAweDgxLCAweEQ1LCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDIzLAorICAgICAgICAweDA0LCAweDgxLCAweENELCAweDMwLCAweDgxLCAweENBLCAweDgwLCAweDE0LCAweDhDLCAweDM4LAorICAgICAgICAweDNBLCAweDZCLCAweEI4LCAweDI0LCAweEI3LCAweERGLCAweDZFLCAweEY0LCAweDU5LCAweEFDLAorICAgICAgICAweDU2LCAweDRFLCAweEFBLCAweEUyLCAweDU4LCAweEE2LCAweDVBLCAweDE4LCAweEExLCAweDgxLAorICAgICAgICAweEE2LCAweEE0LCAweDgxLCAweEEzLCAweDMwLCAweDgxLCAweEEwLCAweDMxLCAweDBCLCAweDMwLAorICAgICAgICAweDA5LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLCAweDU1LCAweDUzLAorICAgICAgICAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA4LCAweDBDLAorICAgICAgICAweDA3LCAweDRELCAweDZGLCAweDZFLCAweDc0LCAweDYxLCAweDZFLCAweDYxLCAweDMxLCAweDEwLAorICAgICAgICAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLCAweDA3LCAweDQyLAorICAgICAgICAweDZGLCAweDdBLCAweDY1LCAweDZELCAweDYxLCAweDZFLCAweDMxLCAweDE4LCAweDMwLCAweDE2LAorICAgICAgICAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBBLCAweDBDLCAweDBGLCAweDQ1LCAweDZDLCAweDZDLAorICAgICAgICAweDY5LCAweDcwLCAweDc0LCAweDY5LCAweDYzLCAweDIwLCAweDJELCAweDIwLCAweDYzLCAweDZGLAorICAgICAgICAweDZELCAweDcwLCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LAorICAgICAgICAweDBCLCAweDBDLCAweDBGLCAweDUzLCAweDY1LCAweDcyLCAweDc2LCAweDY1LCAweDcyLCAweDIwLAorICAgICAgICAweDQ1LCAweDQzLCAweDQzLCAweDJELCAweDYzLCAweDZGLCAweDZELCAweDcwLCAweDMxLCAweDE4LAorICAgICAgICAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDAzLCAweDBDLCAweDBGLCAweDc3LAorICAgICAgICAweDc3LCAweDc3LCAweDJFLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLAorICAgICAgICAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMxLCAweDFGLCAweDMwLCAweDFELCAweDA2LCAweDA5LAorICAgICAgICAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDA5LCAweDAxLCAweDE2LAorICAgICAgICAweDEwLCAweDY5LCAweDZFLCAweDY2LCAweDZGLCAweDQwLCAweDc3LCAweDZGLCAweDZDLCAweDY2LAorICAgICAgICAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDgyLCAweDA5LCAweDAwLAorICAgICAgICAweEU1LCAweEI2LCAweDY2LCAweEUwLCAweDA4LCAweDk2LCAweEM1LCAweDk1LCAweDMwLCAweDBDLAorICAgICAgICAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDEzLCAweDA0LCAweDA1LCAweDMwLCAweDAzLCAweDAxLAorICAgICAgICAweDAxLCAweEZGLCAweDMwLCAweDFDLCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDExLCAweDA0LAorICAgICAgICAweDE1LCAweDMwLCAweDEzLCAweDgyLCAweDBCLCAweDY1LCAweDc4LCAweDYxLCAweDZELCAweDcwLAorICAgICAgICAweDZDLCAweDY1LCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDg3LCAweDA0LCAweDdGLCAweDAwLAorICAgICAgICAweDAwLCAweDAxLCAweDMwLCAweDFELCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDI1LCAweDA0LAorICAgICAgICAweDE2LCAweDMwLCAweDE0LCAweDA2LCAweDA4LCAweDJCLCAweDA2LCAweDAxLCAweDA1LCAweDA1LAorICAgICAgICAweDA3LCAweDAzLCAweDAxLCAweDA2LCAweDA4LCAweDJCLCAweDA2LCAweDAxLCAweDA1LCAweDA1LAorICAgICAgICAweDA3LCAweDAzLCAweDAyLCAweDMwLCAweDBBLCAweDA2LCAweDA4LCAweDJBLCAweDg2LCAweDQ4LAorICAgICAgICAweENFLCAweDNELCAweDA0LCAweDAzLCAweDAyLCAweDAzLCAweDQ4LCAweDAwLCAweDMwLCAweDQ1LAorICAgICAgICAweDAyLCAweDIxLCAweDAwLCAweEFFLCAweDgwLCAweEQ3LCAweEY1LCAweDRELCAweDc2LCAweDc5LAorICAgICAgICAweDVDLCAweDAxLCAweDE0LCAweDhCLCAweEZELCAweDgwLCAweDc5LCAweEZCLCAweDlCLCAweEZFLAorICAgICAgICAweDhGLCAweDBELCAweDlDLCAweEMzLCAweDdDLCAweEU2LCAweDgwLCAweDRDLCAweEE2LCAweDU0LAorICAgICAgICAweDE2LCAweDNGLCAweEVELCAweDFELCAweDVFLCAweDAyLCAweDIwLCAweDA5LCAweDYxLCAweDJELAorICAgICAgICAweDg0LCAweEU5LCAweDA0LCAweDRGLCAweDc5LCAweDBFLCAweEU3LCAweEYwLCAweENDLCAweDUyLAorICAgICAgICAweEQzLCAweDJGLCAweEUwLCAweDg5LCAweENGLCAweEJFLCAweDlCLCAweDlGLCAweDg2LCAweDIzLAorICAgICAgICAweDJGLCAweEU0LCAweENCLCAweDQzLCAweDE2LCAweEJCLCAweDA5LCAweDhELCAweDg3Cit9Oworc3RhdGljIGNvbnN0IGludCBzaXplb2Zfc2Vydl9lY2NfY29tcF9kZXJfMjU2ID0gc2l6ZW9mKHNlcnZfZWNjX2NvbXBfZGVyXzI1Nik7CisKKy8qIC4vY2VydHMvc2VydmVyLWVjYy1yc2EuZGVyLCBFQ0MgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNlcnZfZWNjX3JzYV9kZXJfMjU2W10gPQoreworICAgICAgICAweDMwLCAweDgyLCAweDA0LCAweDFGLCAweDMwLCAweDgyLCAweDAzLCAweDA3LCAweEEwLCAweDAzLAorICAgICAgICAweDAyLCAweDAxLCAweDAyLCAweDAyLCAweDAxLCAweDAxLCAweDMwLCAweDBELCAweDA2LCAweDA5LAorICAgICAgICAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDAxLCAweDBCLCAweDA1LAorICAgICAgICAweDAwLCAweDMwLCAweDgxLCAweDk0LCAweDMxLCAweDBCLCAweDMwLCAweDA5LCAweDA2LCAweDAzLAorICAgICAgICAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLCAweDU1LCAweDUzLCAweDMxLCAweDEwLCAweDMwLAorICAgICAgICAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA4LCAweDBDLCAweDA3LCAweDRELCAweDZGLAorICAgICAgICAweDZFLCAweDc0LCAweDYxLCAweDZFLCAweDYxLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLCAweDA3LCAweDQyLCAweDZGLCAweDdBLCAweDY1LAorICAgICAgICAweDZELCAweDYxLCAweDZFLCAweDMxLCAweDExLCAweDMwLCAweDBGLCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDA0LCAweDBBLCAweDBDLCAweDA4LCAweDUzLCAweDYxLCAweDc3LCAweDc0LCAweDZGLCAweDZGLAorICAgICAgICAweDc0LCAweDY4LCAweDMxLCAweDEzLCAweDMwLCAweDExLCAweDA2LCAweDAzLCAweDU1LCAweDA0LAorICAgICAgICAweDBCLCAweDBDLCAweDBBLCAweDQzLCAweDZGLCAweDZFLCAweDczLCAweDc1LCAweDZDLCAweDc0LAorICAgICAgICAweDY5LCAweDZFLCAweDY3LCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDA0LCAweDAzLCAweDBDLCAweDBGLCAweDc3LCAweDc3LCAweDc3LCAweDJFLCAweDc3LCAweDZGLAorICAgICAgICAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMxLAorICAgICAgICAweDFGLCAweDMwLCAweDFELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LAorICAgICAgICAweDBELCAweDAxLCAweDA5LCAweDAxLCAweDE2LCAweDEwLCAweDY5LCAweDZFLCAweDY2LCAweDZGLAorICAgICAgICAweDQwLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLAorICAgICAgICAweDZGLCAweDZELCAweDMwLCAweDFFLCAweDE3LCAweDBELCAweDMyLCAweDMxLCAweDMwLCAweDMyLAorICAgICAgICAweDMxLCAweDMwLCAweDMxLCAweDM5LCAweDM0LCAweDM5LCAweDM1LCAweDMzLCAweDVBLCAweDE3LAorICAgICAgICAweDBELCAweDMyLCAweDMzLCAweDMxLCAweDMxLCAweDMwLCAweDM3LCAweDMxLCAweDM5LCAweDM0LAorICAgICAgICAweDM5LCAweDM1LCAweDMzLCAweDVBLCAweDMwLCAweDgxLCAweDlELCAweDMxLCAweDBCLCAweDMwLAorICAgICAgICAweDA5LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLCAweDU1LCAweDUzLAorICAgICAgICAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA4LCAweDBDLAorICAgICAgICAweDA3LCAweDRELCAweDZGLCAweDZFLCAweDc0LCAweDYxLCAweDZFLCAweDYxLCAweDMxLCAweDEwLAorICAgICAgICAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLCAweDA3LCAweDQyLAorICAgICAgICAweDZGLCAweDdBLCAweDY1LCAweDZELCAweDYxLCAweDZFLCAweDMxLCAweDFBLCAweDMwLCAweDE4LAorICAgICAgICAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBBLCAweDBDLCAweDExLCAweDQ1LCAweDZDLCAweDZDLAorICAgICAgICAweDY5LCAweDcwLCAweDc0LCAweDY5LCAweDYzLCAweDIwLCAweDJELCAweDIwLCAweDUyLCAweDUzLAorICAgICAgICAweDQxLCAweDczLCAweDY5LCAweDY3LCAweDMxLCAweDEzLCAweDMwLCAweDExLCAweDA2LCAweDAzLAorICAgICAgICAweDU1LCAweDA0LCAweDBCLCAweDBDLCAweDBBLCAweDQ1LCAweDQzLCAweDQzLCAweDJELCAweDUyLAorICAgICAgICAweDUzLCAweDQxLCAweDczLCAweDY5LCAweDY3LCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDAzLCAweDBDLCAweDBGLCAweDc3LCAweDc3LCAweDc3LCAweDJFLAorICAgICAgICAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLAorICAgICAgICAweDZELCAweDMxLCAweDFGLCAweDMwLCAweDFELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LAorICAgICAgICAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDA5LCAweDAxLCAweDE2LCAweDEwLCAweDY5LCAweDZFLAorICAgICAgICAweDY2LCAweDZGLCAweDQwLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLAorICAgICAgICAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMwLCAweDU5LCAweDMwLCAweDEzLCAweDA2LCAweDA3LAorICAgICAgICAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAyLCAweDAxLCAweDA2LCAweDA4LCAweDJBLAorICAgICAgICAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLCAweDA3LCAweDAzLCAweDQyLCAweDAwLAorICAgICAgICAweDA0LCAweEJCLCAweDMzLCAweEFDLCAweDRDLCAweDI3LCAweDUwLCAweDRBLCAweEM2LCAweDRBLAorICAgICAgICAweEE1LCAweDA0LCAweEMzLCAweDNDLCAweERFLCAweDlGLCAweDM2LCAweERCLCAweDcyLCAweDJELAorICAgICAgICAweENFLCAweDk0LCAweEVBLCAweDJCLCAweEZBLCAweENCLCAweDIwLCAweDA5LCAweDM5LCAweDJDLAorICAgICAgICAweDE2LCAweEU4LCAweDYxLCAweDAyLCAweEU5LCAweEFGLCAweDRELCAweEQzLCAweDAyLCAweDkzLAorICAgICAgICAweDlBLCAweDMxLCAweDVCLCAweDk3LCAweDkyLCAweDIxLCAweDdGLCAweEYwLCAweENGLCAweDE4LAorICAgICAgICAweERBLCAweDkxLCAweDExLCAweDAyLCAweDM0LCAweDg2LCAweEU4LCAweDIwLCAweDU4LCAweDMzLAorICAgICAgICAweDBCLCAweDgwLCAweDM0LCAweDg5LCAweEQ4LCAweEEzLCAweDgyLCAweDAxLCAweDNBLCAweDMwLAorICAgICAgICAweDgyLCAweDAxLCAweDM2LCAweDMwLCAweDFELCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDBFLAorICAgICAgICAweDA0LCAweDE2LCAweDA0LCAweDE0LCAweDVELCAweDVELCAweDI2LCAweEVGLCAweEFDLCAweDdFLAorICAgICAgICAweDM2LCAweEY5LCAweDlCLCAweDc2LCAweDE1LCAweDJCLCAweDRBLCAweDI1LCAweDAyLCAweDIzLAorICAgICAgICAweEVGLCAweEIyLCAweDg5LCAweDMwLCAweDMwLCAweDgxLCAweEM5LCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDFELCAweDIzLCAweDA0LCAweDgxLCAweEMxLCAweDMwLCAweDgxLCAweEJFLCAweDgwLCAweDE0LAorICAgICAgICAweDI3LCAweDhFLCAweDY3LCAweDExLCAweDc0LCAweEMzLCAweDI2LCAweDFELCAweDNGLCAweEVELAorICAgICAgICAweDMzLCAweDYzLCAweEIzLCAweEE0LCAweEQ4LCAweDFELCAweDMwLCAweEU1LCAweEU4LCAweEQ1LAorICAgICAgICAweEExLCAweDgxLCAweDlBLCAweEE0LCAweDgxLCAweDk3LCAweDMwLCAweDgxLCAweDk0LCAweDMxLAorICAgICAgICAweDBCLCAweDMwLCAweDA5LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLAorICAgICAgICAweDU1LCAweDUzLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LAorICAgICAgICAweDA4LCAweDBDLCAweDA3LCAweDRELCAweDZGLCAweDZFLCAweDc0LCAweDYxLCAweDZFLCAweDYxLAorICAgICAgICAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLAorICAgICAgICAweDA3LCAweDQyLCAweDZGLCAweDdBLCAweDY1LCAweDZELCAweDYxLCAweDZFLCAweDMxLCAweDExLAorICAgICAgICAweDMwLCAweDBGLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBBLCAweDBDLCAweDA4LCAweDUzLAorICAgICAgICAweDYxLCAweDc3LCAweDc0LCAweDZGLCAweDZGLCAweDc0LCAweDY4LCAweDMxLCAweDEzLCAweDMwLAorICAgICAgICAweDExLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBCLCAweDBDLCAweDBBLCAweDQzLCAweDZGLAorICAgICAgICAweDZFLCAweDczLCAweDc1LCAweDZDLCAweDc0LCAweDY5LCAweDZFLCAweDY3LCAweDMxLCAweDE4LAorICAgICAgICAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDAzLCAweDBDLCAweDBGLCAweDc3LAorICAgICAgICAweDc3LCAweDc3LCAweDJFLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLAorICAgICAgICAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMxLCAweDFGLCAweDMwLCAweDFELCAweDA2LCAweDA5LAorICAgICAgICAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDA5LCAweDAxLCAweDE2LAorICAgICAgICAweDEwLCAweDY5LCAweDZFLCAweDY2LCAweDZGLCAweDQwLCAweDc3LCAweDZGLCAweDZDLCAweDY2LAorICAgICAgICAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDgyLCAweDA5LCAweDAwLAorICAgICAgICAweEFBLCAweEQzLCAweDNGLCAweEFDLCAweDE4LCAweDBBLCAweDM3LCAweDRELCAweDMwLCAweDBDLAorICAgICAgICAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDEzLCAweDA0LCAweDA1LCAweDMwLCAweDAzLCAweDAxLAorICAgICAgICAweDAxLCAweEZGLCAweDMwLCAweDFDLCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDExLCAweDA0LAorICAgICAgICAweDE1LCAweDMwLCAweDEzLCAweDgyLCAweDBCLCAweDY1LCAweDc4LCAweDYxLCAweDZELCAweDcwLAorICAgICAgICAweDZDLCAweDY1LCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDg3LCAweDA0LCAweDdGLCAweDAwLAorICAgICAgICAweDAwLCAweDAxLCAweDMwLCAweDFELCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDI1LCAweDA0LAorICAgICAgICAweDE2LCAweDMwLCAweDE0LCAweDA2LCAweDA4LCAweDJCLCAweDA2LCAweDAxLCAweDA1LCAweDA1LAorICAgICAgICAweDA3LCAweDAzLCAweDAxLCAweDA2LCAweDA4LCAweDJCLCAweDA2LCAweDAxLCAweDA1LCAweDA1LAorICAgICAgICAweDA3LCAweDAzLCAweDAyLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LAorICAgICAgICAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDAxLCAweDBCLCAweDA1LCAweDAwLCAweDAzLCAweDgyLAorICAgICAgICAweDAxLCAweDAxLCAweDAwLCAweDRCLCAweENELCAweEM1LCAweDhGLCAweEZDLCAweEJCLCAweEMzLAorICAgICAgICAweDM2LCAweEM1LCAweEQ0LCAweDRELCAweDcxLCAweDA0LCAweDEzLCAweDUzLCAweEEwLCAweDNDLAorICAgICAgICAweEEzLCAweDRFLCAweDJBLCAweERELCAweDBELCAweEQzLCAweEE3LCAweDYyLCAweDMxLCAweDBELAorICAgICAgICAweEM2LCAweDMyLCAweDA3LCAweDMxLCAweEQ0LCAweDZCLCAweDBGLCAweDhCLCAweDU1LCAweEEyLAorICAgICAgICAweDJGLCAweDJDLCAweEIzLCAweEFFLCAweDQ2LCAweDkxLCAweDhBLCAweDA5LCAweEJFLCAweDdFLAorICAgICAgICAweEZGLCAweEUyLCAweDY3LCAweDQ2LCAweEYyLCAweDdFLCAweEQ0LCAweDZGLCAweEJFLCAweDVELAorICAgICAgICAweDU3LCAweDQyLCAweEZELCAweDNBLCAweDU2LCAweEIwLCAweEU4LCAweDBFLCAweDRELCAweDEyLAorICAgICAgICAweEZELCAweEY1LCAweDAwLCAweENBLCAweDZGLCAweEJELCAweDg4LCAweDBDLCAweDA0LCAweDQ3LAorICAgICAgICAweDFBLCAweEVDLCAweDVELCAweDk2LCAweDNGLCAweEI2LCAweEE1LCAweDhCLCAweDlELCAweDQ3LAorICAgICAgICAweEE2LCAweDRGLCAweDgyLCAweDA3LCAweDMzLCAweDlELCAweDExLCAweDBBLCAweDNELCAweDM4LAorICAgICAgICAweDFELCAweDIxLCAweDRGLCAweEQ0LCAweDFFLCAweDFELCAweEE2LCAweEQ3LCAweDZCLCAweDcyLAorICAgICAgICAweDFDLCAweDUxLCAweEUxLCAweDdBLCAweDdBLCAweDZDLCAweDc2LCAweDJDLCAweDk4LCAweDE0LAorICAgICAgICAweDQ4LCAweEZELCAweEYxLCAweEQxLCAweDdDLCAweDUzLCAweDg2LCAweEVELCAweDhDLCAweDVGLAorICAgICAgICAweDRGLCAweDBGLCAweDI3LCAweDVELCAweDQ1LCAweEJFLCAweEVELCAweDI2LCAweDkwLCAweEQyLAorICAgICAgICAweDUxLCAweDA0LCAweDRELCAweDA2LCAweDVCLCAweDY0LCAweDFDLCAweDVFLCAweDMxLCAweDYzLAorICAgICAgICAweENDLCAweEQ0LCAweEQ1LCAweDBCLCAweDI4LCAweENDLCAweEUyLCAweDI5LCAweDQwLCAweDc1LAorICAgICAgICAweDg3LCAweDIxLCAweDY0LCAweDhFLCAweDhCLCAweDg3LCAweEVGLCAweDkwLCAweEJCLCAweDQ2LAorICAgICAgICAweDkxLCAweDkxLCAweEY5LCAweDYzLCAweEY4LCAweEIwLCAweEE3LCAweDVFLCAweDhELCAweEU4LAorICAgICAgICAweDIwLCAweEM2LCAweEI3LCAweDVBLCAweEQ5LCAweDBFLCAweDM1LCAweEZCLCAweEJBLCAweEQxLAorICAgICAgICAweDA5LCAweEQxLCAweDk4LCAweEE2LCAweDYxLCAweDI1LCAweEUyLCAweDBELCAweDk3LCAweEM0LAorICAgICAgICAweDFCLCAweDBGLCAweEJDLCAweEI2LCAweEVDLCAweEU3LCAweDk2LCAweDgwLCAweEI4LCAweEU1LAorICAgICAgICAweDU1LCAweDAzLCAweDFFLCAweDdGLCAweEI1LCAweEZELCAweDQwLCAweDA2LCAweENDLCAweEFBLAorICAgICAgICAweDdCLCAweEYwLCAweEIzLCAweDgxLCAweDJFLCAweEUxLCAweDRFLCAweDNBLCAweDUyLCAweEUzLAorICAgICAgICAweEYzLCAweEM0LCAweEQzLCAweDhDLCAweDc4LCAweDQ5LCAweDAwLCAweDNBLCAweDU3LCAweERGLAorICAgICAgICAweDBFLCAweEFBLCAweDJGLCAweDE0LCAweDUyLCAweDNGLCAweEM4LCAweEZBLCAweDgyLCAweEI5LAorICAgICAgICAweEJGLCAweDI3LCAweEY4LCAweDlDLCAweDQyLCAweEI3LCAweDQ0LCAweDM2LCAweDY4Cit9Oworc3RhdGljIGNvbnN0IGludCBzaXplb2Zfc2Vydl9lY2NfcnNhX2Rlcl8yNTYgPSBzaXplb2Yoc2Vydl9lY2NfcnNhX2Rlcl8yNTYpOworCisvKiAuL2NlcnRzL3NlcnZlci1lY2MuZGVyLCBFQ0MgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNlcnZfZWNjX2Rlcl8yNTZbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDIsIDB4QTEsIDB4MzAsIDB4ODIsIDB4MDIsIDB4NDcsIDB4QTAsIDB4MDMsCisgICAgICAgIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDEsIDB4MDMsIDB4MzAsIDB4MEEsIDB4MDYsIDB4MDgsCisgICAgICAgIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MzAsIDB4ODEsCisgICAgICAgIDB4OTcsIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsCisgICAgICAgIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsIDB4MTMsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MEEsIDB4NTcsIDB4NjEsIDB4NzMsIDB4NjgsIDB4NjksCisgICAgICAgIDB4NkUsIDB4NjcsIDB4NzQsIDB4NkYsIDB4NkUsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDcsIDB4NTMsIDB4NjUsIDB4NjEsIDB4NzQsCisgICAgICAgIDB4NzQsIDB4NkMsIDB4NjUsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MEEsIDB4MEMsIDB4MDcsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NTMsIDB4NTMsCisgICAgICAgIDB4NEMsIDB4MzEsIDB4MTQsIDB4MzAsIDB4MTIsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsCisgICAgICAgIDB4MEMsIDB4MEIsIDB4NDQsIDB4NjUsIDB4NzYsIDB4NjUsIDB4NkMsIDB4NkYsIDB4NzAsIDB4NkQsCisgICAgICAgIDB4NjUsIDB4NkUsIDB4NzQsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsCisgICAgICAgIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsCisgICAgICAgIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsCisgICAgICAgIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsCisgICAgICAgIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsCisgICAgICAgIDB4NkYsIDB4NkQsIDB4MzAsIDB4MUUsIDB4MTcsIDB4MEQsIDB4MzIsIDB4MzEsIDB4MzAsIDB4MzIsCisgICAgICAgIDB4MzEsIDB4MzAsIDB4MzEsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsIDB4MzMsIDB4NUEsIDB4MTcsCisgICAgICAgIDB4MEQsIDB4MzIsIDB4MzMsIDB4MzEsIDB4MzEsIDB4MzAsIDB4MzcsIDB4MzEsIDB4MzksIDB4MzQsCisgICAgICAgIDB4MzksIDB4MzUsIDB4MzMsIDB4NUEsIDB4MzAsIDB4ODEsIDB4OEYsIDB4MzEsIDB4MEIsIDB4MzAsCisgICAgICAgIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsCisgICAgICAgIDB4MzEsIDB4MTMsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsCisgICAgICAgIDB4MEEsIDB4NTcsIDB4NjEsIDB4NzMsIDB4NjgsIDB4NjksIDB4NkUsIDB4NjcsIDB4NzQsIDB4NkYsCisgICAgICAgIDB4NkUsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsCisgICAgICAgIDB4MEMsIDB4MDcsIDB4NTMsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NzQsIDB4NkMsIDB4NjUsIDB4MzEsCisgICAgICAgIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MDcsCisgICAgICAgIDB4NDUsIDB4NkMsIDB4NjksIDB4NzAsIDB4NzQsIDB4NjksIDB4NjMsIDB4MzEsIDB4MEMsIDB4MzAsCisgICAgICAgIDB4MEEsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsIDB4MEMsIDB4MDMsIDB4NDUsIDB4NDMsCisgICAgICAgIDB4NDMsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDMsCisgICAgICAgIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsCisgICAgICAgIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzEsIDB4MUYsIDB4MzAsCisgICAgICAgIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsIDB4MDEsCisgICAgICAgIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsIDB4NkYsIDB4NDAsIDB4NzcsCisgICAgICAgIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsCisgICAgICAgIDB4MzAsIDB4NTksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsCisgICAgICAgIDB4M0QsIDB4MDIsIDB4MDEsIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsCisgICAgICAgIDB4MDMsIDB4MDEsIDB4MDcsIDB4MDMsIDB4NDIsIDB4MDAsIDB4MDQsIDB4QkIsIDB4MzMsIDB4QUMsCisgICAgICAgIDB4NEMsIDB4MjcsIDB4NTAsIDB4NEEsIDB4QzYsIDB4NEEsIDB4QTUsIDB4MDQsIDB4QzMsIDB4M0MsCisgICAgICAgIDB4REUsIDB4OUYsIDB4MzYsIDB4REIsIDB4NzIsIDB4MkQsIDB4Q0UsIDB4OTQsIDB4RUEsIDB4MkIsCisgICAgICAgIDB4RkEsIDB4Q0IsIDB4MjAsIDB4MDksIDB4MzksIDB4MkMsIDB4MTYsIDB4RTgsIDB4NjEsIDB4MDIsCisgICAgICAgIDB4RTksIDB4QUYsIDB4NEQsIDB4RDMsIDB4MDIsIDB4OTMsIDB4OUEsIDB4MzEsIDB4NUIsIDB4OTcsCisgICAgICAgIDB4OTIsIDB4MjEsIDB4N0YsIDB4RjAsIDB4Q0YsIDB4MTgsIDB4REEsIDB4OTEsIDB4MTEsIDB4MDIsCisgICAgICAgIDB4MzQsIDB4ODYsIDB4RTgsIDB4MjAsIDB4NTgsIDB4MzMsIDB4MEIsIDB4ODAsIDB4MzQsIDB4ODksCisgICAgICAgIDB4RDgsIDB4QTMsIDB4ODEsIDB4ODksIDB4MzAsIDB4ODEsIDB4ODYsIDB4MzAsIDB4MUQsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MUQsIDB4MEUsIDB4MDQsIDB4MTYsIDB4MDQsIDB4MTQsIDB4NUQsIDB4NUQsCisgICAgICAgIDB4MjYsIDB4RUYsIDB4QUMsIDB4N0UsIDB4MzYsIDB4RjksIDB4OUIsIDB4NzYsIDB4MTUsIDB4MkIsCisgICAgICAgIDB4NEEsIDB4MjUsIDB4MDIsIDB4MjMsIDB4RUYsIDB4QjIsIDB4ODksIDB4MzAsIDB4MzAsIDB4MUYsCisgICAgICAgIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MjMsIDB4MDQsIDB4MTgsIDB4MzAsIDB4MTYsIDB4ODAsCisgICAgICAgIDB4MTQsIDB4NTYsIDB4OEUsIDB4OUEsIDB4QzMsIDB4RjAsIDB4NDIsIDB4REUsIDB4MTgsIDB4QjksCisgICAgICAgIDB4NDUsIDB4NTUsIDB4NkUsIDB4RjksIDB4OTMsIDB4Q0YsIDB4RUEsIDB4QzMsIDB4RjMsIDB4QTUsCisgICAgICAgIDB4MjEsIDB4MzAsIDB4MEMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MTMsIDB4MDEsIDB4MDEsCisgICAgICAgIDB4RkYsIDB4MDQsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MUQsIDB4MEYsIDB4MDEsIDB4MDEsIDB4RkYsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDMsCisgICAgICAgIDB4QTgsIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MjUsIDB4MDQsIDB4MEMsCisgICAgICAgIDB4MzAsIDB4MEEsIDB4MDYsIDB4MDgsIDB4MkIsIDB4MDYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDcsCisgICAgICAgIDB4MDMsIDB4MDEsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDksIDB4NjAsIDB4ODYsIDB4NDgsIDB4MDEsCisgICAgICAgIDB4ODYsIDB4RjgsIDB4NDIsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDYsCisgICAgICAgIDB4NDAsIDB4MzAsIDB4MEEsIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsCisgICAgICAgIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDMsIDB4NDgsIDB4MDAsIDB4MzAsIDB4NDUsIDB4MDIsIDB4MjAsCisgICAgICAgIDB4NjEsIDB4NkYsIDB4RTgsIDB4QjksIDB4QUQsIDB4Q0MsIDB4QzksIDB4MUEsIDB4ODEsIDB4MTcsCisgICAgICAgIDB4MDIsIDB4NjQsIDB4MDcsIDB4QzMsIDB4MTgsIDB4NDQsIDB4MDEsIDB4ODEsIDB4NzYsIDB4MTgsCisgICAgICAgIDB4OUQsIDB4NkQsIDB4M0QsIDB4N0QsIDB4Q0IsIDB4QzEsIDB4NUEsIDB4NzYsIDB4NEEsIDB4QUQsCisgICAgICAgIDB4NzEsIDB4NTUsIDB4MDIsIDB4MjEsIDB4MDAsIDB4Q0QsIDB4MjIsIDB4MzUsIDB4MDQsIDB4MTksCisgICAgICAgIDB4QzIsIDB4MjMsIDB4MjEsIDB4MDIsIDB4ODgsIDB4NEIsIDB4NTEsIDB4REEsIDB4REIsIDB4NTEsCisgICAgICAgIDB4QUIsIDB4NTQsIDB4OEMsIDB4Q0IsIDB4MzgsIDB4QUMsIDB4OEUsIDB4QkIsIDB4RUUsIDB4MTgsCisgICAgICAgIDB4MDcsIDB4QkYsIDB4ODgsIDB4MzYsIDB4ODgsIDB4RkYsIDB4RDUKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9zZXJ2X2VjY19kZXJfMjU2ID0gc2l6ZW9mKHNlcnZfZWNjX2Rlcl8yNTYpOworCisvKiAuL2NlcnRzL2NhLWVjYy1rZXkuZGVyLCBFQ0MgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhX2VjY19rZXlfZGVyXzI1NltdID0KK3sKKyAgICAgICAgMHgzMCwgMHg3NywgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgyMCwgMHgwMiwgMHhFMSwgMHgzMywKKyAgICAgICAgMHg5OCwgMHg3NywgMHg5NywgMHhBQywgMHg0QSwgMHg1OSwgMHg2RCwgMHgyOCwgMHg5QiwgMHg2RSwKKyAgICAgICAgMHhBMCwgMHg5MywgMHg5QiwgMHgwNywgMHg3MSwgMHg4QiwgMHg0RCwgMHg2MCwgMHg2MywgMHg4NSwKKyAgICAgICAgMHg5OSwgMHhFNiwgMHhCQiwgMHgxNiwgMHg3MCwgMHhFOSwgMHgwQSwgMHhGNiwgMHg4MCwgMHhBMCwKKyAgICAgICAgMHgwQSwgMHgwNiwgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwKKyAgICAgICAgMHgwNywgMHhBMSwgMHg0NCwgMHgwMywgMHg0MiwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMywgMHhEOSwKKyAgICAgICAgMHg2RSwgMHhENiwgMHgwMSwgMHg4RSwgMHg0NSwgMHhDOCwgMHhCOSwgMHg5MCwgMHgzMSwgMHhFNSwKKyAgICAgICAgMHhDMCwgMHg0QywgMHhFMywgMHg5RSwgMHhBRCwgMHgyOSwgMHgzOCwgMHg5OCwgMHhCQSwgMHgxMCwKKyAgICAgICAgMHhENiwgMHhFOSwgMHgwOSwgMHgyQSwgMHg4MCwgMHhBOSwgMHgyRSwgMHgxNywgMHgyQSwgMHhCOSwKKyAgICAgICAgMHg4QSwgMHhCRiwgMHgzMywgMHg4MywgMHg0NiwgMHhFMywgMHg5NSwgMHgwQiwgMHhFNCwgMHg3NywKKyAgICAgICAgMHg0MCwgMHhCNSwgMHgzQiwgMHg0MywgMHg0NSwgMHgzMywgMHgwRiwgMHg2MSwgMHg1MywgMHg3QywKKyAgICAgICAgMHgzNywgMHg0NCwgMHhDMSwgMHhDQiwgMHhGQywgMHg4MCwgMHhDQSwgMHhFOCwgMHg0MywgMHhFQSwKKyAgICAgICAgMHhBNworfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NhX2VjY19rZXlfZGVyXzI1NiA9IHNpemVvZihjYV9lY2Nfa2V5X2Rlcl8yNTYpOworCisvKiAuL2NlcnRzL2NhLWVjYy1jZXJ0LmRlciwgRUNDICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYV9lY2NfY2VydF9kZXJfMjU2W10gPQoreworICAgICAgICAweDMwLCAweDgyLCAweDAyLCAweDhBLCAweDMwLCAweDgyLCAweDAyLCAweDMwLCAweEEwLCAweDAzLAorICAgICAgICAweDAyLCAweDAxLCAweDAyLCAweDAyLCAweDA5LCAweDAwLCAweDgzLCAweDQ3LCAweDdDLCAweDgxLAorICAgICAgICAweEQ2LCAweDBELCAweDFDLCAweDRFLCAweDMwLCAweDBBLCAweDA2LCAweDA4LCAweDJBLCAweDg2LAorICAgICAgICAweDQ4LCAweENFLCAweDNELCAweDA0LCAweDAzLCAweDAyLCAweDMwLCAweDgxLCAweDk3LCAweDMxLAorICAgICAgICAweDBCLCAweDMwLCAweDA5LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLAorICAgICAgICAweDU1LCAweDUzLCAweDMxLCAweDEzLCAweDMwLCAweDExLCAweDA2LCAweDAzLCAweDU1LCAweDA0LAorICAgICAgICAweDA4LCAweDBDLCAweDBBLCAweDU3LCAweDYxLCAweDczLCAweDY4LCAweDY5LCAweDZFLCAweDY3LAorICAgICAgICAweDc0LCAweDZGLCAweDZFLCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDA0LCAweDA3LCAweDBDLCAweDA3LCAweDUzLCAweDY1LCAweDYxLCAweDc0LCAweDc0LCAweDZDLAorICAgICAgICAweDY1LCAweDMxLCAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBBLAorICAgICAgICAweDBDLCAweDA3LCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDUzLCAweDUzLCAweDRDLCAweDMxLAorICAgICAgICAweDE0LCAweDMwLCAweDEyLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBCLCAweDBDLCAweDBCLAorICAgICAgICAweDQ0LCAweDY1LCAweDc2LCAweDY1LCAweDZDLCAweDZGLCAweDcwLCAweDZELCAweDY1LCAweDZFLAorICAgICAgICAweDc0LCAweDMxLCAweDE4LCAweDMwLCAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDAzLAorICAgICAgICAweDBDLCAweDBGLCAweDc3LCAweDc3LCAweDc3LCAweDJFLCAweDc3LCAweDZGLCAweDZDLCAweDY2LAorICAgICAgICAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMxLCAweDFGLCAweDMwLAorICAgICAgICAweDFELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLAorICAgICAgICAweDA5LCAweDAxLCAweDE2LCAweDEwLCAweDY5LCAweDZFLCAweDY2LCAweDZGLCAweDQwLCAweDc3LAorICAgICAgICAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELAorICAgICAgICAweDMwLCAweDFFLCAweDE3LCAweDBELCAweDMyLCAweDMxLCAweDMwLCAweDMyLCAweDMxLCAweDMwLAorICAgICAgICAweDMxLCAweDM5LCAweDM0LCAweDM5LCAweDM1LCAweDMzLCAweDVBLCAweDE3LCAweDBELCAweDMyLAorICAgICAgICAweDMzLCAweDMxLCAweDMxLCAweDMwLCAweDM3LCAweDMxLCAweDM5LCAweDM0LCAweDM5LCAweDM1LAorICAgICAgICAweDMzLCAweDVBLCAweDMwLCAweDgxLCAweDk3LCAweDMxLCAweDBCLCAweDMwLCAweDA5LCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLCAweDU1LCAweDUzLCAweDMxLCAweDEzLAorICAgICAgICAweDMwLCAweDExLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA4LCAweDBDLCAweDBBLCAweDU3LAorICAgICAgICAweDYxLCAweDczLCAweDY4LCAweDY5LCAweDZFLCAweDY3LCAweDc0LCAweDZGLCAweDZFLCAweDMxLAorICAgICAgICAweDEwLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA3LCAweDBDLCAweDA3LAorICAgICAgICAweDUzLCAweDY1LCAweDYxLCAweDc0LCAweDc0LCAweDZDLCAweDY1LCAweDMxLCAweDEwLCAweDMwLAorICAgICAgICAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBBLCAweDBDLCAweDA3LCAweDc3LCAweDZGLAorICAgICAgICAweDZDLCAweDY2LCAweDUzLCAweDUzLCAweDRDLCAweDMxLCAweDE0LCAweDMwLCAweDEyLCAweDA2LAorICAgICAgICAweDAzLCAweDU1LCAweDA0LCAweDBCLCAweDBDLCAweDBCLCAweDQ0LCAweDY1LCAweDc2LCAweDY1LAorICAgICAgICAweDZDLCAweDZGLCAweDcwLCAweDZELCAweDY1LCAweDZFLCAweDc0LCAweDMxLCAweDE4LCAweDMwLAorICAgICAgICAweDE2LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDAzLCAweDBDLCAweDBGLCAweDc3LCAweDc3LAorICAgICAgICAweDc3LCAweDJFLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLCAweDczLCAweDZDLCAweDJFLAorICAgICAgICAweDYzLCAweDZGLCAweDZELCAweDMxLCAweDFGLCAweDMwLCAweDFELCAweDA2LCAweDA5LCAweDJBLAorICAgICAgICAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELCAweDAxLCAweDA5LCAweDAxLCAweDE2LCAweDEwLAorICAgICAgICAweDY5LCAweDZFLCAweDY2LCAweDZGLCAweDQwLCAweDc3LCAweDZGLCAweDZDLCAweDY2LCAweDczLAorICAgICAgICAweDczLCAweDZDLCAweDJFLCAweDYzLCAweDZGLCAweDZELCAweDMwLCAweDU5LCAweDMwLCAweDEzLAorICAgICAgICAweDA2LCAweDA3LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAyLCAweDAxLCAweDA2LAorICAgICAgICAweDA4LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLCAweDA3LCAweDAzLAorICAgICAgICAweDQyLCAweDAwLCAweDA0LCAweDAyLCAweEQzLCAweEQ5LCAweDZFLCAweEQ2LCAweDAxLCAweDhFLAorICAgICAgICAweDQ1LCAweEM4LCAweEI5LCAweDkwLCAweDMxLCAweEU1LCAweEMwLCAweDRDLCAweEUzLCAweDlFLAorICAgICAgICAweEFELCAweDI5LCAweDM4LCAweDk4LCAweEJBLCAweDEwLCAweEQ2LCAweEU5LCAweDA5LCAweDJBLAorICAgICAgICAweDgwLCAweEE5LCAweDJFLCAweDE3LCAweDJBLCAweEI5LCAweDhBLCAweEJGLCAweDMzLCAweDgzLAorICAgICAgICAweDQ2LCAweEUzLCAweDk1LCAweDBCLCAweEU0LCAweDc3LCAweDQwLCAweEI1LCAweDNCLCAweDQzLAorICAgICAgICAweDQ1LCAweDMzLCAweDBGLCAweDYxLCAweDUzLCAweDdDLCAweDM3LCAweDQ0LCAweEMxLCAweENCLAorICAgICAgICAweEZDLCAweDgwLCAweENBLCAweEU4LCAweDQzLCAweEVBLCAweEE3LCAweEEzLCAweDYzLCAweDMwLAorICAgICAgICAweDYxLCAweDMwLCAweDFELCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDBFLCAweDA0LCAweDE2LAorICAgICAgICAweDA0LCAweDE0LCAweDU2LCAweDhFLCAweDlBLCAweEMzLCAweEYwLCAweDQyLCAweERFLCAweDE4LAorICAgICAgICAweEI5LCAweDQ1LCAweDU1LCAweDZFLCAweEY5LCAweDkzLCAweENGLCAweEVBLCAweEMzLCAweEYzLAorICAgICAgICAweEE1LCAweDIxLCAweDMwLCAweDFGLCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDIzLCAweDA0LAorICAgICAgICAweDE4LCAweDMwLCAweDE2LCAweDgwLCAweDE0LCAweDU2LCAweDhFLCAweDlBLCAweEMzLCAweEYwLAorICAgICAgICAweDQyLCAweERFLCAweDE4LCAweEI5LCAweDQ1LCAweDU1LCAweDZFLCAweEY5LCAweDkzLCAweENGLAorICAgICAgICAweEVBLCAweEMzLCAweEYzLCAweEE1LCAweDIxLCAweDMwLCAweDBGLCAweDA2LCAweDAzLCAweDU1LAorICAgICAgICAweDFELCAweDEzLCAweDAxLCAweDAxLCAweEZGLCAweDA0LCAweDA1LCAweDMwLCAweDAzLCAweDAxLAorICAgICAgICAweDAxLCAweEZGLCAweDMwLCAweDBFLCAweDA2LCAweDAzLCAweDU1LCAweDFELCAweDBGLCAweDAxLAorICAgICAgICAweDAxLCAweEZGLCAweDA0LCAweDA0LCAweDAzLCAweDAyLCAweDAxLCAweDg2LCAweDMwLCAweDBBLAorICAgICAgICAweDA2LCAweDA4LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDA0LCAweDAzLCAweDAyLAorICAgICAgICAweDAzLCAweDQ4LCAweDAwLCAweDMwLCAweDQ1LCAweDAyLCAweDIxLCAweDAwLCAweEM1LCAweDgzLAorICAgICAgICAweEZGLCAweDFFLCAweDUxLCAweEY3LCAweEExLCAweEU5LCAweEYxLCAweDQyLCAweEM0LCAweEJFLAorICAgICAgICAweEVELCAweDM4LCAweEJELCAweDM4LCAweDMyLCAweDhGLCAweEFFLCAweDNGLCAweEM3LCAweDZELAorICAgICAgICAweDExLCAweDkwLCAweEU5LCAweDk5LCAweEFCLCAweDYxLCAweEEyLCAweERCLCAweEE3LCAweDRCLAorICAgICAgICAweDAyLCAweDIwLCAweDI4LCAweDQwLCAweEQ5LCAweEJBLCAweDQ1LCAweENDLCAweEE2LCAweEVBLAorICAgICAgICAweEZBLCAweDNGLCAweDNFLCAweDcxLCAweDQ0LCAweDhFLCAweDAyLCAweDAzLCAweDJGLCAweDQxLAorICAgICAgICAweDBCLCAweDU2LCAweDc4LCAweDJELCAweEE2LCAweEU4LCAweDVFLCAweEY2LCAweEZGLCAweERBLAorICAgICAgICAweDYyLCAweDhDLCAweEY5LCAweERGCit9Oworc3RhdGljIGNvbnN0IGludCBzaXplb2ZfY2FfZWNjX2NlcnRfZGVyXzI1NiA9IHNpemVvZihjYV9lY2NfY2VydF9kZXJfMjU2KTsKKworLyogLi9jZXJ0cy9jYS1lY2MzODQta2V5LmRlciwgRUNDICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYV9lY2Nfa2V5X2Rlcl8zODRbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODEsIDB4QTQsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MzAsIDB4N0IsIDB4MTYsCisgICAgICAgIDB4RTMsIDB4RDYsIDB4RDIsIDB4ODEsIDB4OTQsIDB4NkMsIDB4OEEsIDB4REQsIDB4QTgsIDB4NzgsCisgICAgICAgIDB4RUUsIDB4QzcsIDB4N0UsIDB4QjMsIDB4QzUsIDB4RDEsIDB4REIsIDB4MkUsIDB4RjMsIDB4RUQsCisgICAgICAgIDB4MEUsIDB4NDgsIDB4ODUsIDB4QjEsIDB4RjIsIDB4RTEsIDB4N0EsIDB4MzksIDB4NTYsIDB4QzAsCisgICAgICAgIDB4RjEsIDB4NjIsIDB4MTIsIDB4MEYsIDB4MzUsIDB4QjcsIDB4MzksIDB4QkMsIDB4OUMsIDB4MjUsCisgICAgICAgIDB4QzAsIDB4NzYsIDB4RUIsIDB4RkUsIDB4NTUsIDB4NzAsIDB4QTAsIDB4MDcsIDB4MDYsIDB4MDUsCisgICAgICAgIDB4MkIsIDB4ODEsIDB4MDQsIDB4MDAsIDB4MjIsIDB4QTEsIDB4NjQsIDB4MDMsIDB4NjIsIDB4MDAsCisgICAgICAgIDB4MDQsIDB4RUUsIDB4ODIsIDB4RDQsIDB4MzksIDB4OUEsIDB4QjEsIDB4MjcsIDB4ODIsIDB4RjQsCisgICAgICAgIDB4RDcsIDB4RUEsIDB4QzYsIDB4QkMsIDB4MDMsIDB4MUQsIDB4NEQsIDB4ODMsIDB4NjEsIDB4RjQsCisgICAgICAgIDB4MDMsIDB4QUUsIDB4N0UsIDB4QkQsIDB4RDgsIDB4NUEsIDB4QTUsIDB4QjksIDB4RjAsIDB4OEUsCisgICAgICAgIDB4QTIsIDB4QTUsIDB4REEsIDB4Q0UsIDB4ODcsIDB4M0IsIDB4NUEsIDB4QUIsIDB4NDQsIDB4MTYsCisgICAgICAgIDB4OUMsIDB4RjUsIDB4OUYsIDB4NjIsIDB4REQsIDB4RjYsIDB4MjAsIDB4Q0QsIDB4OUMsIDB4NzYsCisgICAgICAgIDB4M0MsIDB4NDAsIDB4QjEsIDB4M0YsIDB4OTcsIDB4MTcsIDB4REYsIDB4NTksIDB4RjYsIDB4Q0QsCisgICAgICAgIDB4REUsIDB4Q0QsIDB4NDYsIDB4MzUsIDB4QzAsIDB4RUQsIDB4NUUsIDB4MkUsIDB4NDgsIDB4QjYsCisgICAgICAgIDB4NjYsIDB4OTEsIDB4NzEsIDB4NzQsIDB4QjcsIDB4MEMsIDB4M0YsIDB4QjksIDB4OUEsIDB4QjcsCisgICAgICAgIDB4ODMsIDB4QkQsIDB4OTMsIDB4M0YsIDB4NUYsIDB4NTAsIDB4MkQsIDB4NzAsIDB4M0YsIDB4REUsCisgICAgICAgIDB4MzUsIDB4MjUsIDB4RTEsIDB4OTAsIDB4M0IsIDB4ODYsIDB4RTAKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9jYV9lY2Nfa2V5X2Rlcl8zODQgPSBzaXplb2YoY2FfZWNjX2tleV9kZXJfMzg0KTsKKworLyogLi9jZXJ0cy9jYS1lY2MzODQtY2VydC5kZXIsIEVDQyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2FfZWNjX2NlcnRfZGVyXzM4NFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwMiwgMHhDNywgMHgzMCwgMHg4MiwgMHgwMiwgMHg0RCwgMHhBMCwgMHgwMywKKyAgICAgICAgMHgwMiwgMHgwMSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwMCwgMHhBOCwgMHg2MCwgMHhGRCwgMHg3NSwKKyAgICAgICAgMHgwNywgMHg5OCwgMHg1NSwgMHg2QSwgMHgzMCwgMHgwQSwgMHgwNiwgMHgwOCwgMHgyQSwgMHg4NiwKKyAgICAgICAgMHg0OCwgMHhDRSwgMHgzRCwgMHgwNCwgMHgwMywgMHgwMywgMHgzMCwgMHg4MSwgMHg5NywgMHgzMSwKKyAgICAgICAgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwKKyAgICAgICAgMHg1NSwgMHg1MywgMHgzMSwgMHgxMywgMHgzMCwgMHgxMSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwKKyAgICAgICAgMHgwOCwgMHgwQywgMHgwQSwgMHg1NywgMHg2MSwgMHg3MywgMHg2OCwgMHg2OSwgMHg2RSwgMHg2NywKKyAgICAgICAgMHg3NCwgMHg2RiwgMHg2RSwgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwKKyAgICAgICAgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg1MywgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NCwgMHg2QywKKyAgICAgICAgMHg2NSwgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwKKyAgICAgICAgMHgwQywgMHgwNywgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg1MywgMHg1MywgMHg0QywgMHgzMSwKKyAgICAgICAgMHgxNCwgMHgzMCwgMHgxMiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywgMHgwQiwKKyAgICAgICAgMHg0NCwgMHg2NSwgMHg3NiwgMHg2NSwgMHg2QywgMHg2RiwgMHg3MCwgMHg2RCwgMHg2NSwgMHg2RSwKKyAgICAgICAgMHg3NCwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywKKyAgICAgICAgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwKKyAgICAgICAgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwKKyAgICAgICAgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwKKyAgICAgICAgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywKKyAgICAgICAgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwKKyAgICAgICAgMHgzMCwgMHgxRSwgMHgxNywgMHgwRCwgMHgzMiwgMHgzMSwgMHgzMCwgMHgzMiwgMHgzMSwgMHgzMCwKKyAgICAgICAgMHgzMSwgMHgzOSwgMHgzNCwgMHgzOSwgMHgzNSwgMHgzMywgMHg1QSwgMHgxNywgMHgwRCwgMHgzMiwKKyAgICAgICAgMHgzMywgMHgzMSwgMHgzMSwgMHgzMCwgMHgzNywgMHgzMSwgMHgzOSwgMHgzNCwgMHgzOSwgMHgzNSwKKyAgICAgICAgMHgzMywgMHg1QSwgMHgzMCwgMHg4MSwgMHg5NywgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwgMHgxMywKKyAgICAgICAgMHgzMCwgMHgxMSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwQSwgMHg1NywKKyAgICAgICAgMHg2MSwgMHg3MywgMHg2OCwgMHg2OSwgMHg2RSwgMHg2NywgMHg3NCwgMHg2RiwgMHg2RSwgMHgzMSwKKyAgICAgICAgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywgMHgwNywKKyAgICAgICAgMHg1MywgMHg2NSwgMHg2MSwgMHg3NCwgMHg3NCwgMHg2QywgMHg2NSwgMHgzMSwgMHgxMCwgMHgzMCwKKyAgICAgICAgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwNywgMHg3NywgMHg2RiwKKyAgICAgICAgMHg2QywgMHg2NiwgMHg1MywgMHg1MywgMHg0QywgMHgzMSwgMHgxNCwgMHgzMCwgMHgxMiwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywgMHgwQiwgMHg0NCwgMHg2NSwgMHg3NiwgMHg2NSwKKyAgICAgICAgMHg2QywgMHg2RiwgMHg3MCwgMHg2RCwgMHg2NSwgMHg2RSwgMHg3NCwgMHgzMSwgMHgxOCwgMHgzMCwKKyAgICAgICAgMHgxNiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywgMHgwRiwgMHg3NywgMHg3NywKKyAgICAgICAgMHg3NywgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwKKyAgICAgICAgMHg2MywgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwKKyAgICAgICAgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwKKyAgICAgICAgMHg2OSwgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywKKyAgICAgICAgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMCwgMHg3NiwgMHgzMCwgMHgxMCwKKyAgICAgICAgMHgwNiwgMHgwNywgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMiwgMHgwMSwgMHgwNiwKKyAgICAgICAgMHgwNSwgMHgyQiwgMHg4MSwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMywgMHg2MiwgMHgwMCwgMHgwNCwKKyAgICAgICAgMHhFRSwgMHg4MiwgMHhENCwgMHgzOSwgMHg5QSwgMHhCMSwgMHgyNywgMHg4MiwgMHhGNCwgMHhENywKKyAgICAgICAgMHhFQSwgMHhDNiwgMHhCQywgMHgwMywgMHgxRCwgMHg0RCwgMHg4MywgMHg2MSwgMHhGNCwgMHgwMywKKyAgICAgICAgMHhBRSwgMHg3RSwgMHhCRCwgMHhEOCwgMHg1QSwgMHhBNSwgMHhCOSwgMHhGMCwgMHg4RSwgMHhBMiwKKyAgICAgICAgMHhBNSwgMHhEQSwgMHhDRSwgMHg4NywgMHgzQiwgMHg1QSwgMHhBQiwgMHg0NCwgMHgxNiwgMHg5QywKKyAgICAgICAgMHhGNSwgMHg5RiwgMHg2MiwgMHhERCwgMHhGNiwgMHgyMCwgMHhDRCwgMHg5QywgMHg3NiwgMHgzQywKKyAgICAgICAgMHg0MCwgMHhCMSwgMHgzRiwgMHg5NywgMHgxNywgMHhERiwgMHg1OSwgMHhGNiwgMHhDRCwgMHhERSwKKyAgICAgICAgMHhDRCwgMHg0NiwgMHgzNSwgMHhDMCwgMHhFRCwgMHg1RSwgMHgyRSwgMHg0OCwgMHhCNiwgMHg2NiwKKyAgICAgICAgMHg5MSwgMHg3MSwgMHg3NCwgMHhCNywgMHgwQywgMHgzRiwgMHhCOSwgMHg5QSwgMHhCNywgMHg4MywKKyAgICAgICAgMHhCRCwgMHg5MywgMHgzRiwgMHg1RiwgMHg1MCwgMHgyRCwgMHg3MCwgMHgzRiwgMHhERSwgMHgzNSwKKyAgICAgICAgMHgyNSwgMHhFMSwgMHg5MCwgMHgzQiwgMHg4NiwgMHhFMCwgMHhBMywgMHg2MywgMHgzMCwgMHg2MSwKKyAgICAgICAgMHgzMCwgMHgxRCwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgwRSwgMHgwNCwgMHgxNiwgMHgwNCwKKyAgICAgICAgMHgxNCwgMHhBQiwgMHhFMCwgMHhDMywgMHgyNiwgMHg0QywgMHgxOCwgMHhENCwgMHg3MiwgMHhCQiwKKyAgICAgICAgMHhEMiwgMHg4NCwgMHg4QywgMHg5QywgMHgwQSwgMHgwNSwgMHg5MiwgMHg4MCwgMHgxMiwgMHg1MywKKyAgICAgICAgMHg1MiwgMHgzMCwgMHgxRiwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgyMywgMHgwNCwgMHgxOCwKKyAgICAgICAgMHgzMCwgMHgxNiwgMHg4MCwgMHgxNCwgMHhBQiwgMHhFMCwgMHhDMywgMHgyNiwgMHg0QywgMHgxOCwKKyAgICAgICAgMHhENCwgMHg3MiwgMHhCQiwgMHhEMiwgMHg4NCwgMHg4QywgMHg5QywgMHgwQSwgMHgwNSwgMHg5MiwKKyAgICAgICAgMHg4MCwgMHgxMiwgMHg1MywgMHg1MiwgMHgzMCwgMHgwRiwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwKKyAgICAgICAgMHgxMywgMHgwMSwgMHgwMSwgMHhGRiwgMHgwNCwgMHgwNSwgMHgzMCwgMHgwMywgMHgwMSwgMHgwMSwKKyAgICAgICAgMHhGRiwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgwRiwgMHgwMSwgMHgwMSwKKyAgICAgICAgMHhGRiwgMHgwNCwgMHgwNCwgMHgwMywgMHgwMiwgMHgwMSwgMHg4NiwgMHgzMCwgMHgwQSwgMHgwNiwKKyAgICAgICAgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwNCwgMHgwMywgMHgwMywgMHgwMywKKyAgICAgICAgMHg2OCwgMHgwMCwgMHgzMCwgMHg2NSwgMHgwMiwgMHgzMCwgMHg0NywgMHhBMiwgMHgzNiwgMHgzMywKKyAgICAgICAgMHhGNCwgMHgyNywgMHhCRCwgMHhEMCwgMHg1QywgMHhFNiwgMHg4RCwgMHgzRSwgMHgzMSwgMHhBOSwKKyAgICAgICAgMHg0RSwgMHg1MSwgMHg1NywgMHhBOSwgMHg5MywgMHgyOCwgMHg3MiwgMHgwQSwgMHg3MiwgMHhBQiwKKyAgICAgICAgMHg2RSwgMHhGOSwgMHg1NiwgMHhDMCwgMHhGNSwgMHg3MCwgMHgwMiwgMHg5RiwgMHg5QywgMHhCMiwKKyAgICAgICAgMHg0QSwgMHg5QywgMHgzRSwgMHg5RiwgMHhGQiwgMHhDNSwgMHg2NCwgMHgyNiwgMHg3QSwgMHg4OCwKKyAgICAgICAgMHhEQywgMHg0QSwgMHgyQSwgMHgyNSwgMHgwMiwgMHgzMSwgMHgwMCwgMHg4OCwgMHhGOCwgMHhFMiwKKyAgICAgICAgMHhENSwgMHgyMCwgMHg4MiwgMHhGMiwgMHhERSwgMHg3QiwgMHhDQiwgMHgxMywgMHhBQywgMHhDRCwKKyAgICAgICAgMHhGRiwgMHhFOCwgMHgxRSwgMHg0RSwgMHg4NCwgMHgzRCwgMHg5QywgMHhBRiwgMHg1RCwgMHhGOSwKKyAgICAgICAgMHgwMSwgMHhFNywgMHg0RiwgMHhENCwgMHgwMywgMHgwOSwgMHg4NCwgMHgzRCwgMHg3QiwgMHgyQiwKKyAgICAgICAgMHg4MywgMHhFMiwgMHhBRSwgMHgwOCwgMHg2OCwgMHgyRSwgMHg1QiwgMHg4NSwgMHg2RiwgMHg0MywKKyAgICAgICAgMHhGNSwgMHg0MSwgMHhFMCwgMHhDNywgMHhDOQorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NhX2VjY19jZXJ0X2Rlcl8zODQgPSBzaXplb2YoY2FfZWNjX2NlcnRfZGVyXzM4NCk7CisKKyNlbmRpZiAvKiBIQVZFX0VDQyAmJiBVU0VfQ0VSVF9CVUZGRVJTXzI1NiAqLworCisvKiBkaDEwMjQgcCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGhfcFtdID0KK3sKKyAgICAweEU2LCAweDk2LCAweDlELCAweDNELCAweDQ5LCAweDVCLCAweEUzLCAweDJDLCAweDdDLCAweEYxLCAweDgwLCAweEMzLAorICAgIDB4QkQsIDB4RDQsIDB4NzksIDB4OEUsIDB4OTEsIDB4QjcsIDB4ODEsIDB4ODIsIDB4NTEsIDB4QkIsIDB4MDUsIDB4NUUsCisgICAgMHgyQSwgMHgyMCwgMHg2NCwgMHg5MCwgMHg0QSwgMHg3OSwgMHhBNywgMHg3MCwgMHhGQSwgMHgxNSwgMHhBMiwgMHg1OSwKKyAgICAweENCLCAweEQ1LCAweDIzLCAweEE2LCAweEE2LCAweEVGLCAweDA5LCAweEM0LCAweDMwLCAweDQ4LCAweEQ1LCAweEEyLAorICAgIDB4MkYsIDB4OTcsIDB4MUYsIDB4M0MsIDB4MjAsIDB4MTIsIDB4OUIsIDB4NDgsIDB4MDAsIDB4MEUsIDB4NkUsIDB4REQsCisgICAgMHgwNiwgMHgxQywgMHhCQywgMHgwNSwgMHgzRSwgMHgzNywgMHgxRCwgMHg3OSwgMHg0RSwgMHg1MywgMHgyNywgMHhERiwKKyAgICAweDYxLCAweDFFLCAweEJCLCAweEJFLCAweDFCLCAweEFDLCAweDlCLCAweDVDLCAweDYwLCAweDQ0LCAweENGLCAweDAyLAorICAgIDB4M0QsIDB4NzYsIDB4RTAsIDB4NUUsIDB4RUEsIDB4OUIsIDB4QUQsIDB4OTksIDB4MUIsIDB4MTMsIDB4QTYsIDB4M0MsCisgICAgMHg5NywgMHg0RSwgMHg5RSwgMHhGMSwgMHg4MywgMHg5RSwgMHhCNSwgMHhEQiwgMHgxMiwgMHg1MSwgMHgzNiwgMHhGNywKKyAgICAweDI2LCAweDJFLCAweDU2LCAweEE4LCAweDg3LCAweDE1LCAweDM4LCAweERGLCAweEQ4LCAweDIzLCAweEM2LCAweDUwLAorICAgIDB4NTAsIDB4ODUsIDB4RTIsIDB4MUYsIDB4MEQsIDB4RDUsIDB4QzgsIDB4NkIsCit9OworCisvKiBkaDEwMjQgZyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGhfZ1tdID0KK3sKKyAgMHgwMiwKK307CisKKyNpZiBkZWZpbmVkKEhBVkVfRUQyNTUxOSkKKworLyogLi9jZXJ0cy9lZDI1NTE5L3NlcnZlci1lZDI1NTE5LmRlciwgRUQyNTUxOSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2VydmVyX2VkMjU1MTlfY2VydFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwMiwgMHg3NSwgMHgzMCwgMHg4MiwgMHgwMiwgMHgyNywgMHhBMCwgMHgwMywKKyAgICAgICAgMHgwMiwgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgzMCwgMHgwNSwgMHgwNiwgMHgwMywKKyAgICAgICAgMHgyQiwgMHg2NSwgMHg3MCwgMHgzMCwgMHg4MSwgMHg5QiwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwKKyAgICAgICAgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywKKyAgICAgICAgMHg0RCwgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwKKyAgICAgICAgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwKKyAgICAgICAgMHg3QSwgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwRiwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwKKyAgICAgICAgMHg1MywgMHg1MywgMHg0QywgMHg1RiwgMHg2NSwgMHg2NCwgMHgzMiwgMHgzNSwgMHgzNSwgMHgzMSwKKyAgICAgICAgMHgzOSwgMHgzMSwgMHgxMywgMHgzMCwgMHgxMSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwKKyAgICAgICAgMHgwQywgMHgwQSwgMHg0MywgMHg0MSwgMHgyRCwgMHg2NSwgMHg2NCwgMHgzMiwgMHgzNSwgMHgzNSwKKyAgICAgICAgMHgzMSwgMHgzOSwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwKKyAgICAgICAgMHgwMywgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywKKyAgICAgICAgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwKKyAgICAgICAgMHgzMCwgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwKKyAgICAgICAgMHgwMSwgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwKKyAgICAgICAgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwKKyAgICAgICAgMHg2RCwgMHgzMCwgMHgxRSwgMHgxNywgMHgwRCwgMHgzMiwgMHgzMSwgMHgzMCwgMHgzMywgMHgzMSwKKyAgICAgICAgMHgzMCwgMHgzMCwgMHgzNiwgMHgzNCwgMHgzOSwgMHgzMCwgMHgzMywgMHg1QSwgMHgxNywgMHgwRCwKKyAgICAgICAgMHgzMiwgMHgzMywgMHgzMSwgMHgzMiwgMHgzMCwgMHgzNSwgMHgzMCwgMHgzNiwgMHgzNCwgMHgzOSwKKyAgICAgICAgMHgzMCwgMHgzMywgMHg1QSwgMHgzMCwgMHg4MSwgMHg5RiwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwKKyAgICAgICAgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywKKyAgICAgICAgMHg0RCwgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwKKyAgICAgICAgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwKKyAgICAgICAgMHg3QSwgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwRiwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwKKyAgICAgICAgMHg1MywgMHg1MywgMHg0QywgMHg1RiwgMHg2NSwgMHg2NCwgMHgzMiwgMHgzNSwgMHgzNSwgMHgzMSwKKyAgICAgICAgMHgzOSwgMHgzMSwgMHgxNywgMHgzMCwgMHgxNSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwKKyAgICAgICAgMHgwQywgMHgwRSwgMHg1MywgMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg3MiwgMHgyRCwgMHg2NSwKKyAgICAgICAgMHg2NCwgMHgzMiwgMHgzNSwgMHgzNSwgMHgzMSwgMHgzOSwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywKKyAgICAgICAgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywKKyAgICAgICAgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwKKyAgICAgICAgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwKKyAgICAgICAgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywKKyAgICAgICAgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMCwgMHgyQSwgMHgzMCwgMHgwNSwgMHgwNiwKKyAgICAgICAgMHgwMywgMHgyQiwgMHg2NSwgMHg3MCwgMHgwMywgMHgyMSwgMHgwMCwgMHgyMywgMHhBQSwgMHg0RCwKKyAgICAgICAgMHg2MCwgMHg1MCwgMHhFMCwgMHgxMywgMHhEMywgMHgzQSwgMHhFRCwgMHhBQiwgMHhGNiwgMHhBOSwKKyAgICAgICAgMHhDQywgMHg0QSwgMHhGRSwgMHhENywgMHg0RCwgMHgyRiwgMHhEMiwgMHg1QiwgMHgxQSwgMHgxMCwKKyAgICAgICAgMHgwNSwgMHhFRiwgMHg1QSwgMHg0MSwgMHgyNSwgMHhDRSwgMHgxQiwgMHg1MywgMHg3OCwgMHhBMywKKyAgICAgICAgMHg4MSwgMHg4OSwgMHgzMCwgMHg4MSwgMHg4NiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwMywgMHg1NSwKKyAgICAgICAgMHgxRCwgMHgwRSwgMHgwNCwgMHgxNiwgMHgwNCwgMHgxNCwgMHhBMywgMHgyOSwgMHg4MSwgMHhFNywKKyAgICAgICAgMHg5MCwgMHg2RiwgMHhCOSwgMHg2MCwgMHhGOCwgMHhBRiwgMHhDQywgMHgxNSwgMHg3QSwgMHhBRSwKKyAgICAgICAgMHhENywgMHhBMSwgMHhGNCwgMHhCNCwgMHg4NiwgMHhCQSwgMHgzMCwgMHgxRiwgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgxRCwgMHgyMywgMHgwNCwgMHgxOCwgMHgzMCwgMHgxNiwgMHg4MCwgMHgxNCwgMHg3NCwKKyAgICAgICAgMHhENSwgMHgzOCwgMHgxOSwgMHg1RSwgMHg4MywgMHhCOSwgMHgwMywgMHhGOCwgMHgwMSwgMHg4QSwKKyAgICAgICAgMHgzNSwgMHgzNSwgMHhCQiwgMHg4OSwgMHg0QywgMHg0OSwgMHhCNCwgMHgyMywgMHhFOSwgMHgzMCwKKyAgICAgICAgMHgwQywgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgxMywgMHgwMSwgMHgwMSwgMHhGRiwgMHgwNCwKKyAgICAgICAgMHgwMiwgMHgzMCwgMHgwMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgwRiwKKyAgICAgICAgMHgwMSwgMHgwMSwgMHhGRiwgMHgwNCwgMHgwNCwgMHgwMywgMHgwMiwgMHgwMywgMHhBOCwgMHgzMCwKKyAgICAgICAgMHgxMywgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgyNSwgMHgwNCwgMHgwQywgMHgzMCwgMHgwQSwKKyAgICAgICAgMHgwNiwgMHgwOCwgMHgyQiwgMHgwNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNywgMHgwMywgMHgwMSwKKyAgICAgICAgMHgzMCwgMHgxMSwgMHgwNiwgMHgwOSwgMHg2MCwgMHg4NiwgMHg0OCwgMHgwMSwgMHg4NiwgMHhGOCwKKyAgICAgICAgMHg0MiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgwNCwgMHgwMywgMHgwMiwgMHgwNiwgMHg0MCwgMHgzMCwKKyAgICAgICAgMHgwNSwgMHgwNiwgMHgwMywgMHgyQiwgMHg2NSwgMHg3MCwgMHgwMywgMHg0MSwgMHgwMCwgMHhGMywKKyAgICAgICAgMHhDMiwgMHhFRiwgMHg4QiwgMHg1NSwgMHg2NSwgMHg0RiwgMHhCQywgMHhFMywgMHhERiwgMHhGQywKKyAgICAgICAgMHhEOCwgMHhBMSwgMHhBRCwgMHg4RSwgMHg0MywgMHgwNywgMHg3MywgMHhDOCwgMHg1OCwgMHhDMywKKyAgICAgICAgMHg0NiwgMHgwQSwgMHhDMSwgMHhGMSwgMHg0RCwgMHgzRiwgMHhGQiwgMHgzRCwgMHg3OCwgMHhFNiwKKyAgICAgICAgMHg3NiwgMHg1OCwgMHgyNiwgMHhDRSwgMHhENywgMHg1OSwgMHg1NSwgMHhFQywgMHhDNSwgMHhCNSwKKyAgICAgICAgMHhCNCwgMHgwNSwgMHhFRCwgMHhGOSwgMHhENCwgMHg5NywgMHg2OSwgMHg2NiwgMHhENiwgMHgyQywKKyAgICAgICAgMHgxQiwgMHg0MywgMHg1QSwgMHg1MSwgMHg1QywgMHhCRSwgMHgxMCwgMHgyOCwgMHg5NSwgMHhDNCwKKyAgICAgICAgMHg5NiwgMHhBRiwgMHgwMAorfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX3NlcnZlcl9lZDI1NTE5X2NlcnQgPSBzaXplb2Yoc2VydmVyX2VkMjU1MTlfY2VydCk7CisKKy8qIC4vY2VydHMvZWQyNTUxOS9zZXJ2ZXItZWQyNTUxOS1rZXkuZGVyLCBFRDI1NTE5ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzZXJ2ZXJfZWQyNTUxOV9rZXlbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4MkEsIDB4MzAsIDB4MDUsIDB4MDYsIDB4MDMsIDB4MkIsIDB4NjUsIDB4NzAsIDB4MDMsCisgICAgICAgIDB4MjEsIDB4MDAsIDB4MjMsIDB4QUEsIDB4NEQsIDB4NjAsIDB4NTAsIDB4RTAsIDB4MTMsIDB4RDMsCisgICAgICAgIDB4M0EsIDB4RUQsIDB4QUIsIDB4RjYsIDB4QTksIDB4Q0MsIDB4NEEsIDB4RkUsIDB4RDcsIDB4NEQsCisgICAgICAgIDB4MkYsIDB4RDIsIDB4NUIsIDB4MUEsIDB4MTAsIDB4MDUsIDB4RUYsIDB4NUEsIDB4NDEsIDB4MjUsCisgICAgICAgIDB4Q0UsIDB4MUIsIDB4NTMsIDB4NzgKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9zZXJ2ZXJfZWQyNTUxOV9rZXkgPSBzaXplb2Yoc2VydmVyX2VkMjU1MTlfa2V5KTsKKworLyogLi9jZXJ0cy9lZDI1NTE5L2NhLWVkMjU1MTkuZGVyLCBFRDI1NTE5ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYV9lZDI1NTE5X2NlcnRbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4ODIsIDB4MDIsIDB4NEMsIDB4MzAsIDB4ODIsIDB4MDEsIDB4RkUsIDB4QTAsIDB4MDMsCisgICAgICAgIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MzAsIDB4MDUsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4MkIsIDB4NjUsIDB4NzAsIDB4MzAsIDB4ODEsIDB4OUQsIDB4MzEsIDB4MEIsIDB4MzAsIDB4MDksCisgICAgICAgIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsIDB4NTMsIDB4MzEsCisgICAgICAgIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MDcsCisgICAgICAgIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsIDB4NjEsIDB4NkUsIDB4NjEsIDB4MzEsIDB4MTAsIDB4MzAsCisgICAgICAgIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDcsIDB4NDIsIDB4NkYsCisgICAgICAgIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsIDB4NkUsIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsCisgICAgICAgIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsCisgICAgICAgIDB4NTMsIDB4NTMsIDB4NEMsIDB4NUYsIDB4NDUsIDB4NjQsIDB4MzIsIDB4MzUsIDB4MzUsIDB4MzEsCisgICAgICAgIDB4MzksIDB4MzEsIDB4MTUsIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEIsCisgICAgICAgIDB4MEMsIDB4MEMsIDB4NTIsIDB4NkYsIDB4NkYsIDB4NzQsIDB4MkQsIDB4NDUsIDB4NjQsIDB4MzIsCisgICAgICAgIDB4MzUsIDB4MzUsIDB4MzEsIDB4MzksIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsCisgICAgICAgIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsCisgICAgICAgIDB4MzEsIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsCisgICAgICAgIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsCisgICAgICAgIDB4NkYsIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsCisgICAgICAgIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzAsIDB4MUUsIDB4MTcsIDB4MEQsIDB4MzIsIDB4MzEsIDB4MzAsCisgICAgICAgIDB4MzMsIDB4MzEsIDB4MzAsIDB4MzAsIDB4MzYsIDB4MzQsIDB4MzksIDB4MzAsIDB4MzMsIDB4NUEsCisgICAgICAgIDB4MTcsIDB4MEQsIDB4MzIsIDB4MzMsIDB4MzEsIDB4MzIsIDB4MzAsIDB4MzUsIDB4MzAsIDB4MzYsCisgICAgICAgIDB4MzQsIDB4MzksIDB4MzAsIDB4MzMsIDB4NUEsIDB4MzAsIDB4ODEsIDB4OUIsIDB4MzEsIDB4MEIsCisgICAgICAgIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsIDB4MDIsIDB4NTUsCisgICAgICAgIDB4NTMsIDB4MzEsIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDgsCisgICAgICAgIDB4MEMsIDB4MDcsIDB4NEQsIDB4NkYsIDB4NkUsIDB4NzQsIDB4NjEsIDB4NkUsIDB4NjEsIDB4MzEsCisgICAgICAgIDB4MTAsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDcsIDB4MEMsIDB4MDcsCisgICAgICAgIDB4NDIsIDB4NkYsIDB4N0EsIDB4NjUsIDB4NkQsIDB4NjEsIDB4NkUsIDB4MzEsIDB4MTgsIDB4MzAsCisgICAgICAgIDB4MTYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MEEsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NkYsCisgICAgICAgIDB4NkMsIDB4NjYsIDB4NTMsIDB4NTMsIDB4NEMsIDB4NUYsIDB4NjUsIDB4NjQsIDB4MzIsIDB4MzUsCisgICAgICAgIDB4MzUsIDB4MzEsIDB4MzksIDB4MzEsIDB4MTMsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MDQsIDB4MEIsIDB4MEMsIDB4MEEsIDB4NDMsIDB4NDEsIDB4MkQsIDB4NjUsIDB4NjQsIDB4MzIsCisgICAgICAgIDB4MzUsIDB4MzUsIDB4MzEsIDB4MzksIDB4MzEsIDB4MTgsIDB4MzAsIDB4MTYsIDB4MDYsIDB4MDMsCisgICAgICAgIDB4NTUsIDB4MDQsIDB4MDMsIDB4MEMsIDB4MEYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4MkUsIDB4NzcsCisgICAgICAgIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsIDB4NjMsIDB4NkYsIDB4NkQsCisgICAgICAgIDB4MzEsIDB4MUYsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsCisgICAgICAgIDB4RjcsIDB4MEQsIDB4MDEsIDB4MDksIDB4MDEsIDB4MTYsIDB4MTAsIDB4NjksIDB4NkUsIDB4NjYsCisgICAgICAgIDB4NkYsIDB4NDAsIDB4NzcsIDB4NkYsIDB4NkMsIDB4NjYsIDB4NzMsIDB4NzMsIDB4NkMsIDB4MkUsCisgICAgICAgIDB4NjMsIDB4NkYsIDB4NkQsIDB4MzAsIDB4MkEsIDB4MzAsIDB4MDUsIDB4MDYsIDB4MDMsIDB4MkIsCisgICAgICAgIDB4NjUsIDB4NzAsIDB4MDMsIDB4MjEsIDB4MDAsIDB4NDIsIDB4M0IsIDB4N0EsIDB4RjksIDB4ODIsCisgICAgICAgIDB4Q0YsIDB4RjksIDB4REYsIDB4MTksIDB4REQsIDB4RjMsIDB4RjAsIDB4MzIsIDB4MjksIDB4NkQsCisgICAgICAgIDB4RkEsIDB4RkQsIDB4NzYsIDB4NEYsIDB4NjgsIDB4QzIsIDB4QzIsIDB4RTAsIDB4NkMsIDB4NDcsCisgICAgICAgIDB4QUUsIDB4QzIsIDB4NTUsIDB4NjgsIDB4QUMsIDB4MEQsIDB4NEQsIDB4QTMsIDB4NjMsIDB4MzAsCisgICAgICAgIDB4NjEsIDB4MzAsIDB4MUQsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MEUsIDB4MDQsIDB4MTYsCisgICAgICAgIDB4MDQsIDB4MTQsIDB4NzQsIDB4RDUsIDB4MzgsIDB4MTksIDB4NUUsIDB4ODMsIDB4QjksIDB4MDMsCisgICAgICAgIDB4RjgsIDB4MDEsIDB4OEEsIDB4MzUsIDB4MzUsIDB4QkIsIDB4ODksIDB4NEMsIDB4NDksIDB4QjQsCisgICAgICAgIDB4MjMsIDB4RTksIDB4MzAsIDB4MUYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MjMsIDB4MDQsCisgICAgICAgIDB4MTgsIDB4MzAsIDB4MTYsIDB4ODAsIDB4MTQsIDB4RkEsIDB4QkEsIDB4NUIsIDB4NzYsIDB4MUQsCisgICAgICAgIDB4RjEsIDB4MUQsIDB4MUQsIDB4NEQsIDB4NzQsIDB4NDgsIDB4RDgsIDB4OTgsIDB4M0IsIDB4NTYsCisgICAgICAgIDB4RUYsIDB4QjMsIDB4MTQsIDB4RjMsIDB4REUsIDB4MzAsIDB4MEYsIDB4MDYsIDB4MDMsIDB4NTUsCisgICAgICAgIDB4MUQsIDB4MTMsIDB4MDEsIDB4MDEsIDB4RkYsIDB4MDQsIDB4MDUsIDB4MzAsIDB4MDMsIDB4MDEsCisgICAgICAgIDB4MDEsIDB4RkYsIDB4MzAsIDB4MEUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MUQsIDB4MEYsIDB4MDEsCisgICAgICAgIDB4MDEsIDB4RkYsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDEsIDB4ODYsIDB4MzAsIDB4MDUsCisgICAgICAgIDB4MDYsIDB4MDMsIDB4MkIsIDB4NjUsIDB4NzAsIDB4MDMsIDB4NDEsIDB4MDAsIDB4REEsIDB4RkUsCisgICAgICAgIDB4NTgsIDB4NTMsIDB4ODksIDB4NDMsIDB4ODUsIDB4OTgsIDB4MzUsIDB4REMsIDB4MTMsIDB4MUMsCisgICAgICAgIDB4QTMsIDB4RjEsIDB4MUYsIDB4OEQsIDB4MjYsIDB4QkUsIDB4QjYsIDB4QTIsIDB4RkMsIDB4QjcsCisgICAgICAgIDB4RkUsIDB4OUMsIDB4QjksIDB4MzUsIDB4NjksIDB4MzEsIDB4N0UsIDB4RDQsIDB4QjksIDB4MTEsCisgICAgICAgIDB4NDUsIDB4MTYsIDB4QTIsIDB4MjksIDB4MzUsIDB4QTksIDB4NzQsIDB4QTcsIDB4OTcsIDB4REEsCisgICAgICAgIDB4N0UsIDB4NzEsIDB4NEYsIDB4QjEsIDB4NzIsIDB4NUQsIDB4NzUsIDB4MTcsIDB4QUMsIDB4RTMsCisgICAgICAgIDB4RjYsIDB4QjgsIDB4Q0UsIDB4MUUsIDB4RTQsIDB4OEEsIDB4OTUsIDB4QkEsIDB4Q0QsIDB4MUQsCisgICAgICAgIDB4Q0UsIDB4MEQKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9jYV9lZDI1NTE5X2NlcnQgPSBzaXplb2YoY2FfZWQyNTUxOV9jZXJ0KTsKKworLyogLi9jZXJ0cy9lZDI1NTE5L2NsaWVudC1lZDI1NTE5LmRlciwgRUQyNTUxOSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2xpZW50X2VkMjU1MTlfY2VydFtdID0KK3sKKyAgICAgICAgMHgzMCwgMHg4MiwgMHgwMywgMHg1NCwgMHgzMCwgMHg4MiwgMHgwMywgMHgwNiwgMHhBMCwgMHgwMywKKyAgICAgICAgMHgwMiwgMHgwMSwgMHgwMiwgMHgwMiwgMHgxNCwgMHg0MCwgMHg2NiwgMHhDNiwgMHgxMSwgMHhCQywKKyAgICAgICAgMHgwMCwgMHhGOCwgMHg1MSwgMHhGOSwgMHhFNCwgMHg0QiwgMHhCQiwgMHgwQiwgMHhBRCwgMHhDMSwKKyAgICAgICAgMHgwOSwgMHgzOCwgMHhCMCwgMHg0QSwgMHhFNCwgMHgzMCwgMHgwNSwgMHgwNiwgMHgwMywgMHgyQiwKKyAgICAgICAgMHg2NSwgMHg3MCwgMHgzMCwgMHg4MSwgMHg5RiwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwgMHgxMCwKKyAgICAgICAgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywgMHg0RCwKKyAgICAgICAgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwgMHg3QSwKKyAgICAgICAgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwRiwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg1MywKKyAgICAgICAgMHg1MywgMHg0QywgMHg1RiwgMHg2NSwgMHg2NCwgMHgzMiwgMHgzNSwgMHgzNSwgMHgzMSwgMHgzOSwKKyAgICAgICAgMHgzMSwgMHgxNywgMHgzMCwgMHgxNSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywKKyAgICAgICAgMHgwRSwgMHg0MywgMHg2QywgMHg2OSwgMHg2NSwgMHg2RSwgMHg3NCwgMHgyRCwgMHg2NSwgMHg2NCwKKyAgICAgICAgMHgzMiwgMHgzNSwgMHgzNSwgMHgzMSwgMHgzOSwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywgMHgyRSwKKyAgICAgICAgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwKKyAgICAgICAgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwKKyAgICAgICAgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwKKyAgICAgICAgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywKKyAgICAgICAgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMCwgMHgxRSwgMHgxNywgMHgwRCwgMHgzMiwgMHgzMSwKKyAgICAgICAgMHgzMCwgMHgzMywgMHgzMSwgMHgzMCwgMHgzMCwgMHgzNiwgMHgzNCwgMHgzOSwgMHgzMCwgMHgzMywKKyAgICAgICAgMHg1QSwgMHgxNywgMHgwRCwgMHgzMiwgMHgzMywgMHgzMSwgMHgzMiwgMHgzMCwgMHgzNSwgMHgzMCwKKyAgICAgICAgMHgzNiwgMHgzNCwgMHgzOSwgMHgzMCwgMHgzMywgMHg1QSwgMHgzMCwgMHg4MSwgMHg5RiwgMHgzMSwKKyAgICAgICAgMHgwQiwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwKKyAgICAgICAgMHg1NSwgMHg1MywgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwKKyAgICAgICAgMHgwOCwgMHgwQywgMHgwNywgMHg0RCwgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwgMHg2RSwgMHg2MSwKKyAgICAgICAgMHgzMSwgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywKKyAgICAgICAgMHgwNywgMHg0MiwgMHg2RiwgMHg3QSwgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwgMHgzMSwgMHgxOCwKKyAgICAgICAgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwRiwgMHg3NywKKyAgICAgICAgMHg2RiwgMHg2QywgMHg2NiwgMHg1MywgMHg1MywgMHg0QywgMHg1RiwgMHg2NSwgMHg2NCwgMHgzMiwKKyAgICAgICAgMHgzNSwgMHgzNSwgMHgzMSwgMHgzOSwgMHgzMSwgMHgxNywgMHgzMCwgMHgxNSwgMHgwNiwgMHgwMywKKyAgICAgICAgMHg1NSwgMHgwNCwgMHgwQiwgMHgwQywgMHgwRSwgMHg0MywgMHg2QywgMHg2OSwgMHg2NSwgMHg2RSwKKyAgICAgICAgMHg3NCwgMHgyRCwgMHg2NSwgMHg2NCwgMHgzMiwgMHgzNSwgMHgzNSwgMHgzMSwgMHgzOSwgMHgzMSwKKyAgICAgICAgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywgMHgwRiwKKyAgICAgICAgMHg3NywgMHg3NywgMHg3NywgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywKKyAgICAgICAgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwgMHgwNiwKKyAgICAgICAgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwgMHgwMSwKKyAgICAgICAgMHgxNiwgMHgxMCwgMHg2OSwgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwgMHg2QywKKyAgICAgICAgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHgzMCwgMHgyQSwKKyAgICAgICAgMHgzMCwgMHgwNSwgMHgwNiwgMHgwMywgMHgyQiwgMHg2NSwgMHg3MCwgMHgwMywgMHgyMSwgMHgwMCwKKyAgICAgICAgMHhFNiwgMHg1NywgMHg1QiwgMHgxMywgMHgxQiwgMHhDNywgMHg1MSwgMHgxNCwgMHg2QiwgMHhFRCwKKyAgICAgICAgMHgzQiwgMHhGNSwgMHhEMSwgMHhGQSwgMHhBQiwgMHg5RSwgMHg2QywgMHhCNiwgMHhFQiwgMHgwMiwKKyAgICAgICAgMHgwOSwgMHhBMywgMHg5OSwgMHhGNSwgMHg2RSwgMHhCRiwgMHg5RCwgMHgzQywgMHhGRSwgMHg1NCwKKyAgICAgICAgMHgzOSwgMHhFNiwgMHhBMywgMHg4MiwgMHgwMSwgMHg1MCwgMHgzMCwgMHg4MiwgMHgwMSwgMHg0QywKKyAgICAgICAgMHgzMCwgMHgxRCwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgwRSwgMHgwNCwgMHgxNiwgMHgwNCwKKyAgICAgICAgMHgxNCwgMHhGRSwgMHg0MSwgMHg1RSwgMHgzRSwgMHg4MSwgMHhFMiwgMHgyRSwgMHg0NiwgMHhCMywKKyAgICAgICAgMHgzRSwgMHg0NywgMHg4OSwgMHg5MCwgMHhENCwgMHhDMiwgMHhCNCwgMHg4RSwgMHgxMSwgMHhENiwKKyAgICAgICAgMHg4QSwgMHgzMCwgMHg4MSwgMHhERiwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgyMywgMHgwNCwKKyAgICAgICAgMHg4MSwgMHhENywgMHgzMCwgMHg4MSwgMHhENCwgMHg4MCwgMHgxNCwgMHhGRSwgMHg0MSwgMHg1RSwKKyAgICAgICAgMHgzRSwgMHg4MSwgMHhFMiwgMHgyRSwgMHg0NiwgMHhCMywgMHgzRSwgMHg0NywgMHg4OSwgMHg5MCwKKyAgICAgICAgMHhENCwgMHhDMiwgMHhCNCwgMHg4RSwgMHgxMSwgMHhENiwgMHg4QSwgMHhBMSwgMHg4MSwgMHhBNSwKKyAgICAgICAgMHhBNCwgMHg4MSwgMHhBMiwgMHgzMCwgMHg4MSwgMHg5RiwgMHgzMSwgMHgwQiwgMHgzMCwgMHgwOSwKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwgMHg1NSwgMHg1MywgMHgzMSwKKyAgICAgICAgMHgxMCwgMHgzMCwgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwOCwgMHgwQywgMHgwNywKKyAgICAgICAgMHg0RCwgMHg2RiwgMHg2RSwgMHg3NCwgMHg2MSwgMHg2RSwgMHg2MSwgMHgzMSwgMHgxMCwgMHgzMCwKKyAgICAgICAgMHgwRSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNywgMHgwQywgMHgwNywgMHg0MiwgMHg2RiwKKyAgICAgICAgMHg3QSwgMHg2NSwgMHg2RCwgMHg2MSwgMHg2RSwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgwNCwgMHgwQSwgMHgwQywgMHgwRiwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwKKyAgICAgICAgMHg1MywgMHg1MywgMHg0QywgMHg1RiwgMHg2NSwgMHg2NCwgMHgzMiwgMHgzNSwgMHgzNSwgMHgzMSwKKyAgICAgICAgMHgzOSwgMHgzMSwgMHgxNywgMHgzMCwgMHgxNSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwQiwKKyAgICAgICAgMHgwQywgMHgwRSwgMHg0MywgMHg2QywgMHg2OSwgMHg2NSwgMHg2RSwgMHg3NCwgMHgyRCwgMHg2NSwKKyAgICAgICAgMHg2NCwgMHgzMiwgMHgzNSwgMHgzNSwgMHgzMSwgMHgzOSwgMHgzMSwgMHgxOCwgMHgzMCwgMHgxNiwKKyAgICAgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywgMHgwQywgMHgwRiwgMHg3NywgMHg3NywgMHg3NywKKyAgICAgICAgMHgyRSwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywgMHg2QywgMHgyRSwgMHg2MywKKyAgICAgICAgMHg2RiwgMHg2RCwgMHgzMSwgMHgxRiwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwKKyAgICAgICAgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgxNiwgMHgxMCwgMHg2OSwKKyAgICAgICAgMHg2RSwgMHg2NiwgMHg2RiwgMHg0MCwgMHg3NywgMHg2RiwgMHg2QywgMHg2NiwgMHg3MywgMHg3MywKKyAgICAgICAgMHg2QywgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHg4MiwgMHgxNCwgMHg0MCwgMHg2NiwgMHhDNiwKKyAgICAgICAgMHgxMSwgMHhCQywgMHgwMCwgMHhGOCwgMHg1MSwgMHhGOSwgMHhFNCwgMHg0QiwgMHhCQiwgMHgwQiwKKyAgICAgICAgMHhBRCwgMHhDMSwgMHgwOSwgMHgzOCwgMHhCMCwgMHg0QSwgMHhFNCwgMHgzMCwgMHgwQywgMHgwNiwKKyAgICAgICAgMHgwMywgMHg1NSwgMHgxRCwgMHgxMywgMHgwNCwgMHgwNSwgMHgzMCwgMHgwMywgMHgwMSwgMHgwMSwKKyAgICAgICAgMHhGRiwgMHgzMCwgMHgxQywgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgxMSwgMHgwNCwgMHgxNSwKKyAgICAgICAgMHgzMCwgMHgxMywgMHg4MiwgMHgwQiwgMHg2NSwgMHg3OCwgMHg2MSwgMHg2RCwgMHg3MCwgMHg2QywKKyAgICAgICAgMHg2NSwgMHgyRSwgMHg2MywgMHg2RiwgMHg2RCwgMHg4NywgMHgwNCwgMHg3RiwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMSwgMHgzMCwgMHgxRCwgMHgwNiwgMHgwMywgMHg1NSwgMHgxRCwgMHgyNSwgMHgwNCwgMHgxNiwKKyAgICAgICAgMHgzMCwgMHgxNCwgMHgwNiwgMHgwOCwgMHgyQiwgMHgwNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNywKKyAgICAgICAgMHgwMywgMHgwMSwgMHgwNiwgMHgwOCwgMHgyQiwgMHgwNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNywKKyAgICAgICAgMHgwMywgMHgwMiwgMHgzMCwgMHgwNSwgMHgwNiwgMHgwMywgMHgyQiwgMHg2NSwgMHg3MCwgMHgwMywKKyAgICAgICAgMHg0MSwgMHgwMCwgMHhFMCwgMHg4NywgMHhFMiwgMHhDRSwgMHhEMywgMHg4NywgMHg3NywgMHg5RCwKKyAgICAgICAgMHhGNywgMHg0NCwgMHhDMCwgMHg3MywgMHgwMCwgMHhGRiwgMHgwNywgMHg2RCwgMHgyRSwgMHg5MCwKKyAgICAgICAgMHg5MCwgMHg1QywgMHhCRiwgMHgzMCwgMHg0NiwgMHg5QywgMHg3NSwgMHhBOSwgMHg0OCwgMHg1MCwKKyAgICAgICAgMHg4QSwgMHhEQSwgMHgwOSwgMHgwRiwgMHhBOCwgMHhBOCwgMHgwNCwgMHhCNCwgMHgzMywgMHhDOCwKKyAgICAgICAgMHhGNCwgMHgyOCwgMHg2MSwgMHg5RSwgMHhDMiwgMHhBNSwgMHgxOSwgMHhCNywgMHg3MCwgMHgxRSwKKyAgICAgICAgMHg2OSwgMHhDRCwgMHg0OSwgMHg1QywgMHg5QSwgMHhGMywgMHg4MSwgMHhFMCwgMHhERSwgMHgzOCwKKyAgICAgICAgMHhCMywgMHgzNywgMHhGRiwgMHgzMywgMHhCQiwgMHgwNworfTsKK3N0YXRpYyBjb25zdCBpbnQgc2l6ZW9mX2NsaWVudF9lZDI1NTE5X2NlcnQgPSBzaXplb2YoY2xpZW50X2VkMjU1MTlfY2VydCk7CisKKy8qIC4vY2VydHMvZWQyNTUxOS9jbGllbnQtZWQyNTUxOS1rZXkuZGVyLCBFRDI1NTE5ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjbGllbnRfZWQyNTUxOV9rZXlbXSA9Cit7CisgICAgICAgIDB4MzAsIDB4MkEsIDB4MzAsIDB4MDUsIDB4MDYsIDB4MDMsIDB4MkIsIDB4NjUsIDB4NzAsIDB4MDMsCisgICAgICAgIDB4MjEsIDB4MDAsIDB4RTYsIDB4NTcsIDB4NUIsIDB4MTMsIDB4MUIsIDB4QzcsIDB4NTEsIDB4MTQsCisgICAgICAgIDB4NkIsIDB4RUQsIDB4M0IsIDB4RjUsIDB4RDEsIDB4RkEsIDB4QUIsIDB4OUUsIDB4NkMsIDB4QjYsCisgICAgICAgIDB4RUIsIDB4MDIsIDB4MDksIDB4QTMsIDB4OTksIDB4RjUsIDB4NkUsIDB4QkYsIDB4OUQsIDB4M0MsCisgICAgICAgIDB4RkUsIDB4NTQsIDB4MzksIDB4RTYKK307CitzdGF0aWMgY29uc3QgaW50IHNpemVvZl9jbGllbnRfZWQyNTUxOV9rZXkgPSBzaXplb2YoY2xpZW50X2VkMjU1MTlfa2V5KTsKKworI2VuZGlmIC8qIEhBVkVfRUQyNTUxOSAqLworCisjZW5kaWYgLyogV09MRlNTTF9DRVJUU19URVNUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvY3JsLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9jcmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDhmMmE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvY3JsLmgKQEAgLTAsMCArMSw1MCBAQAorLyogY3JsLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBXT0xGU1NMX0NSTF9ICisjZGVmaW5lIFdPTEZTU0xfQ1JMX0gKKworCisjaWZkZWYgSEFWRV9DUkwKKworI2luY2x1ZGUgPHdvbGZzc2wvc3NsLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXNuLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKK1dPTEZTU0xfTE9DQUwgaW50ICBJbml0Q1JMKFdPTEZTU0xfQ1JMKiwgV09MRlNTTF9DRVJUX01BTkFHRVIqKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBGcmVlQ1JMKFdPTEZTU0xfQ1JMKiwgaW50IGR5bmFtaWMpOworCitXT0xGU1NMX0xPQ0FMIGludCAgTG9hZENSTChXT0xGU1NMX0NSTCogY3JsLCBjb25zdCBjaGFyKiBwYXRoLCBpbnQgdHlwZSwgaW50IG1vbik7CitXT0xGU1NMX0xPQ0FMIGludCAgQnVmZmVyTG9hZENSTChXT0xGU1NMX0NSTCosIGNvbnN0IGJ5dGUqLCBsb25nLCBpbnQsIGludCk7CitXT0xGU1NMX0xPQ0FMIGludCAgQ2hlY2tDZXJ0Q1JMKFdPTEZTU0xfQ1JMKiwgRGVjb2RlZENlcnQqKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIEhBVkVfQ1JMICovCisjZW5kaWYgLyogV09MRlNTTF9DUkxfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvZXJyb3Itc3NsLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9lcnJvci1zc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzMzOTlkCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvZXJyb3Itc3NsLmgKQEAgLTAsMCArMSwyMTAgQEAKKy8qIGVycm9yLXNzbC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKyNpZm5kZWYgV09MRlNTTF9FUlJPUl9ICisjZGVmaW5lIFdPTEZTU0xfRVJST1JfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZXJyb3ItY3J5cHQuaD4gICAvKiBwdWxsIGluIHdvbGZDcnlwdCBlcnJvcnMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZW51bSB3b2xmU1NMX0Vycm9yQ29kZXMgeworICAgIElOUFVUX0NBU0VfRVJST1IgICAgICAgICAgICAgPSAtMzAxLCAgIC8qIHByb2Nlc3MgaW5wdXQgc3RhdGUgZXJyb3IgKi8KKyAgICBQUkVGSVhfRVJST1IgICAgICAgICAgICAgICAgID0gLTMwMiwgICAvKiBiYWQgaW5kZXggdG8ga2V5IHJvdW5kcyAgKi8KKyAgICBNRU1PUllfRVJST1IgICAgICAgICAgICAgICAgID0gLTMwMywgICAvKiBvdXQgb2YgbWVtb3J5ICAgICAgICAgICAgKi8KKyAgICBWRVJJRllfRklOSVNIRURfRVJST1IgICAgICAgID0gLTMwNCwgICAvKiB2ZXJpZnkgcHJvYmxlbSBvbiBmaW5pc2hlZCAqLworICAgIFZFUklGWV9NQUNfRVJST1IgICAgICAgICAgICAgPSAtMzA1LCAgIC8qIHZlcmlmeSBtYWMgcHJvYmxlbSAgICAgICAqLworICAgIFBBUlNFX0VSUk9SICAgICAgICAgICAgICAgICAgPSAtMzA2LCAgIC8qIHBhcnNlIGVycm9yIG9uIGhlYWRlciAgICAqLworICAgIFVOS05PV05fSEFORFNIQUtFX1RZUEUgICAgICAgPSAtMzA3LCAgIC8qIHdlaXJkIGhhbmRzaGFrZSB0eXBlICAgICAqLworICAgIFNPQ0tFVF9FUlJPUl9FICAgICAgICAgICAgICAgPSAtMzA4LCAgIC8qIGVycm9yIHN0YXRlIG9uIHNvY2tldCAgICAqLworICAgIFNPQ0tFVF9OT0RBVEEgICAgICAgICAgICAgICAgPSAtMzA5LCAgIC8qIGV4cGVjdGVkIGRhdGEsIG5vdCB0aGVyZSAqLworICAgIElOQ09NUExFVEVfREFUQSAgICAgICAgICAgICAgPSAtMzEwLCAgIC8qIGRvbid0IGhhdmUgZW5vdWdoIGRhdGEgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSB0YXNrICAgICAgICAgICAgKi8KKyAgICBVTktOT1dOX1JFQ09SRF9UWVBFICAgICAgICAgID0gLTMxMSwgICAvKiB1bmtub3duIHR5cGUgaW4gcmVjb3JkIGhkciAqLworICAgIERFQ1JZUFRfRVJST1IgICAgICAgICAgICAgICAgPSAtMzEyLCAgIC8qIGVycm9yIGR1cmluZyBkZWNyeXB0aW9uICAqLworICAgIEZBVEFMX0VSUk9SICAgICAgICAgICAgICAgICAgPSAtMzEzLCAgIC8qIHJlY3ZkIGFsZXJ0IGZhdGFsIGVycm9yICAqLworICAgIEVOQ1JZUFRfRVJST1IgICAgICAgICAgICAgICAgPSAtMzE0LCAgIC8qIGVycm9yIGR1cmluZyBlbmNyeXB0aW9uICAqLworICAgIEZSRUFEX0VSUk9SICAgICAgICAgICAgICAgICAgPSAtMzE1LCAgIC8qIGZyZWFkIHByb2JsZW0gICAgICAgICAgICAqLworICAgIE5PX1BFRVJfS0VZICAgICAgICAgICAgICAgICAgPSAtMzE2LCAgIC8qIG5lZWQgcGVlcidzIGtleSAgICAgICAgICAqLworICAgIE5PX1BSSVZBVEVfS0VZICAgICAgICAgICAgICAgPSAtMzE3LCAgIC8qIG5lZWQgdGhlIHByaXZhdGUga2V5ICAgICAqLworICAgIFJTQV9QUklWQVRFX0VSUk9SICAgICAgICAgICAgPSAtMzE4LCAgIC8qIGVycm9yIGR1cmluZyByc2EgcHJpdiBvcCAqLworICAgIE5PX0RIX1BBUkFNUyAgICAgICAgICAgICAgICAgPSAtMzE5LCAgIC8qIHNlcnZlciBtaXNzaW5nIERIIHBhcmFtcyAqLworICAgIEJVSUxEX01TR19FUlJPUiAgICAgICAgICAgICAgPSAtMzIwLCAgIC8qIGJ1aWxkIG1lc3NhZ2UgZmFpbHVyZSAgICAqLworCisgICAgQkFEX0hFTExPICAgICAgICAgICAgICAgICAgICA9IC0zMjEsICAgLyogY2xpZW50IGhlbGxvIG1hbGZvcm1lZCAgICovCisgICAgRE9NQUlOX05BTUVfTUlTTUFUQ0ggICAgICAgICA9IC0zMjIsICAgLyogcGVlciBzdWJqZWN0IG5hbWUgbWlzbWF0Y2ggKi8KKyAgICBXQU5UX1JFQUQgICAgICAgICAgICAgICAgICAgID0gLTMyMywgICAvKiB3YW50IHJlYWQsIGNhbGwgYWdhaW4gICAgKi8KKyAgICBOT1RfUkVBRFlfRVJST1IgICAgICAgICAgICAgID0gLTMyNCwgICAvKiBoYW5kc2hha2UgbGF5ZXIgbm90IHJlYWR5ICovCisgICAgSVBBRERSX01JU01BVENIICAgICAgICAgICAgICA9IC0zMjUsICAgLyogcGVlciBpcCBhZGRyZXNzIG1pc21hdGNoICovCisgICAgVkVSU0lPTl9FUlJPUiAgICAgICAgICAgICAgICA9IC0zMjYsICAgLyogcmVjb3JkIGxheWVyIHZlcnNpb24gZXJyb3IgKi8KKyAgICBXQU5UX1dSSVRFICAgICAgICAgICAgICAgICAgID0gLTMyNywgICAvKiB3YW50IHdyaXRlLCBjYWxsIGFnYWluICAgKi8KKyAgICBCVUZGRVJfRVJST1IgICAgICAgICAgICAgICAgID0gLTMyOCwgICAvKiBtYWxmb3JtZWQgYnVmZmVyIGlucHV0ICAgKi8KKyAgICBWRVJJRllfQ0VSVF9FUlJPUiAgICAgICAgICAgID0gLTMyOSwgICAvKiB2ZXJpZnkgY2VydCBlcnJvciAgICAgICAgKi8KKyAgICBWRVJJRllfU0lHTl9FUlJPUiAgICAgICAgICAgID0gLTMzMCwgICAvKiB2ZXJpZnkgc2lnbiBlcnJvciAgICAgICAgKi8KKyAgICBDTElFTlRfSURfRVJST1IgICAgICAgICAgICAgID0gLTMzMSwgICAvKiBwc2sgY2xpZW50IGlkZW50aXR5IGVycm9yICAqLworICAgIFNFUlZFUl9ISU5UX0VSUk9SICAgICAgICAgICAgPSAtMzMyLCAgIC8qIHBzayBzZXJ2ZXIgaGludCBlcnJvciAgKi8KKyAgICBQU0tfS0VZX0VSUk9SICAgICAgICAgICAgICAgID0gLTMzMywgICAvKiBwc2sga2V5IGVycm9yICAqLworCisgICAgR0VUVElNRV9FUlJPUiAgICAgICAgICAgICAgICA9IC0zMzcsICAgLyogZ2V0dGltZW9mZGF5IGZhaWxlZCA/Pz8gKi8KKyAgICBHRVRJVElNRVJfRVJST1IgICAgICAgICAgICAgID0gLTMzOCwgICAvKiBnZXRpdGltZXIgZmFpbGVkID8/PyAqLworICAgIFNJR0FDVF9FUlJPUiAgICAgICAgICAgICAgICAgPSAtMzM5LCAgIC8qIHNpZ2FjdGlvbiBmYWlsZWQgPz8/ICovCisgICAgU0VUSVRJTUVSX0VSUk9SICAgICAgICAgICAgICA9IC0zNDAsICAgLyogc2V0aXRpbWVyIGZhaWxlZCA/Pz8gKi8KKyAgICBMRU5HVEhfRVJST1IgICAgICAgICAgICAgICAgID0gLTM0MSwgICAvKiByZWNvcmQgbGF5ZXIgbGVuZ3RoIGVycm9yICovCisgICAgUEVFUl9LRVlfRVJST1IgICAgICAgICAgICAgICA9IC0zNDIsICAgLyogY2FuJ3QgZGVjb2RlIHBlZXIga2V5ICovCisgICAgWkVST19SRVRVUk4gICAgICAgICAgICAgICAgICA9IC0zNDMsICAgLyogcGVlciBzZW50IGNsb3NlIG5vdGlmeSAqLworICAgIFNJREVfRVJST1IgICAgICAgICAgICAgICAgICAgPSAtMzQ0LCAgIC8qIHdyb25nIGNsaWVudC9zZXJ2ZXIgdHlwZSAqLworICAgIE5PX1BFRVJfQ0VSVCAgICAgICAgICAgICAgICAgPSAtMzQ1LCAgIC8qIHBlZXIgZGlkbid0IHNlbmQga2V5ICovCisgICAgTlRSVV9LRVlfRVJST1IgICAgICAgICAgICAgICA9IC0zNDYsICAgLyogTlRSVSBrZXkgZXJyb3IgICovCisgICAgTlRSVV9EUkJHX0VSUk9SICAgICAgICAgICAgICA9IC0zNDcsICAgLyogTlRSVSBkcmJnIGVycm9yICAqLworICAgIE5UUlVfRU5DUllQVF9FUlJPUiAgICAgICAgICAgPSAtMzQ4LCAgIC8qIE5UUlUgZW5jcnlwdCBlcnJvciAgKi8KKyAgICBOVFJVX0RFQ1JZUFRfRVJST1IgICAgICAgICAgID0gLTM0OSwgICAvKiBOVFJVIGRlY3J5cHQgZXJyb3IgICovCisgICAgRUNDX0NVUlZFVFlQRV9FUlJPUiAgICAgICAgICA9IC0zNTAsICAgLyogQmFkIEVDQyBDdXJ2ZSBUeXBlICovCisgICAgRUNDX0NVUlZFX0VSUk9SICAgICAgICAgICAgICA9IC0zNTEsICAgLyogQmFkIEVDQyBDdXJ2ZSAqLworICAgIEVDQ19QRUVSS0VZX0VSUk9SICAgICAgICAgICAgPSAtMzUyLCAgIC8qIEJhZCBQZWVyIEVDQyBLZXkgKi8KKyAgICBFQ0NfTUFLRUtFWV9FUlJPUiAgICAgICAgICAgID0gLTM1MywgICAvKiBCYWQgTWFrZSBFQ0MgS2V5ICovCisgICAgRUNDX0VYUE9SVF9FUlJPUiAgICAgICAgICAgICA9IC0zNTQsICAgLyogQmFkIEVDQyBFeHBvcnQgS2V5ICovCisgICAgRUNDX1NIQVJFRF9FUlJPUiAgICAgICAgICAgICA9IC0zNTUsICAgLyogQmFkIEVDQyBTaGFyZWQgU2VjcmV0ICovCisgICAgTk9UX0NBX0VSUk9SICAgICAgICAgICAgICAgICA9IC0zNTcsICAgLyogTm90IGEgQ0EgY2VydCBlcnJvciAqLworCisgICAgQkFEX0NFUlRfTUFOQUdFUl9FUlJPUiAgICAgICA9IC0zNTksICAgLyogQmFkIENlcnQgTWFuYWdlciAqLworICAgIE9DU1BfQ0VSVF9SRVZPS0VEICAgICAgICAgICAgPSAtMzYwLCAgIC8qIE9DU1AgQ2VydGlmaWNhdGUgcmV2b2tlZCAqLworICAgIENSTF9DRVJUX1JFVk9LRUQgICAgICAgICAgICAgPSAtMzYxLCAgIC8qIENSTCBDZXJ0aWZpY2F0ZSByZXZva2VkICovCisgICAgQ1JMX01JU1NJTkcgICAgICAgICAgICAgICAgICA9IC0zNjIsICAgLyogQ1JMIE5vdCBsb2FkZWQgKi8KKyAgICBNT05JVE9SX1NFVFVQX0UgICAgICAgICAgICAgID0gLTM2MywgICAvKiBDUkwgTW9uaXRvciBzZXR1cCBlcnJvciAqLworICAgIFRIUkVBRF9DUkVBVEVfRSAgICAgICAgICAgICAgPSAtMzY0LCAgIC8qIFRocmVhZCBDcmVhdGUgRXJyb3IgKi8KKyAgICBPQ1NQX05FRURfVVJMICAgICAgICAgICAgICAgID0gLTM2NSwgICAvKiBPQ1NQIG5lZWQgYW4gVVJMIGZvciBsb29rdXAgKi8KKyAgICBPQ1NQX0NFUlRfVU5LTk9XTiAgICAgICAgICAgID0gLTM2NiwgICAvKiBPQ1NQIHJlc3BvbmRlciBkb2Vzbid0IGtub3cgKi8KKyAgICBPQ1NQX0xPT0tVUF9GQUlMICAgICAgICAgICAgID0gLTM2NywgICAvKiBPQ1NQIGxvb2t1cCBub3Qgc3VjY2Vzc2Z1bCAqLworICAgIE1BWF9DSEFJTl9FUlJPUiAgICAgICAgICAgICAgPSAtMzY4LCAgIC8qIG1heCBjaGFpbiBkZXB0aCBleGNlZWRlZCAqLworICAgIENPT0tJRV9FUlJPUiAgICAgICAgICAgICAgICAgPSAtMzY5LCAgIC8qIGR0bHMgY29va2llIGVycm9yICovCisgICAgU0VRVUVOQ0VfRVJST1IgICAgICAgICAgICAgICA9IC0zNzAsICAgLyogZHRscyBzZXF1ZW5jZSBlcnJvciAqLworICAgIFNVSVRFU19FUlJPUiAgICAgICAgICAgICAgICAgPSAtMzcxLCAgIC8qIHN1aXRlcyBwb2ludGVyIGVycm9yICovCisKKyAgICBPVVRfT0ZfT1JERVJfRSAgICAgICAgICAgICAgID0gLTM3MywgICAvKiBvdXQgb2Ygb3JkZXIgbWVzc2FnZSAqLworICAgIEJBRF9LRUFfVFlQRV9FICAgICAgICAgICAgICAgPSAtMzc0LCAgIC8qIGJhZCBLRUEgdHlwZSBmb3VuZCAqLworICAgIFNBTklUWV9DSVBIRVJfRSAgICAgICAgICAgICAgPSAtMzc1LCAgIC8qIHNhbml0eSBjaGVjayBvbiBjaXBoZXIgZXJyb3IgKi8KKyAgICBSRUNWX09WRVJGTE9XX0UgICAgICAgICAgICAgID0gLTM3NiwgICAvKiBSWENCIHJldHVybmVkIG1vcmUgdGhhbiByZWFkICovCisgICAgR0VOX0NPT0tJRV9FICAgICAgICAgICAgICAgICA9IC0zNzcsICAgLyogR2VuZXJhdGUgQ29va2llIEVycm9yICovCisgICAgTk9fUEVFUl9WRVJJRlkgICAgICAgICAgICAgICA9IC0zNzgsICAgLyogTmVlZCBwZWVyIGNlcnQgdmVyaWZ5IEVycm9yICovCisgICAgRldSSVRFX0VSUk9SICAgICAgICAgICAgICAgICA9IC0zNzksICAgLyogZndyaXRlIHByb2JsZW0gKi8KKyAgICBDQUNIRV9NQVRDSF9FUlJPUiAgICAgICAgICAgID0gLTM4MCwgICAvKiBDYWNoZSBoZHIgbWF0Y2ggZXJyb3IgKi8KKyAgICBVTktOT1dOX1NOSV9IT1NUX05BTUVfRSAgICAgID0gLTM4MSwgICAvKiBVbnJlY29nbml6ZWQgaG9zdCBuYW1lIEVycm9yICovCisgICAgVU5LTk9XTl9NQVhfRlJBR19MRU5fRSAgICAgICA9IC0zODIsICAgLyogVW5yZWNvZ25pemVkIG1heCBmcmFnIGxlbiBFcnJvciAqLworICAgIEtFWVVTRV9TSUdOQVRVUkVfRSAgICAgICAgICAgPSAtMzgzLCAgIC8qIEtleVVzZSBkaWdTaWduYXR1cmUgZXJyb3IgKi8KKyAgICBLRVlVU0VfRU5DSVBIRVJfRSAgICAgICAgICAgID0gLTM4NSwgICAvKiBLZXlVc2Uga2V5RW5jaXBoZXIgZXJyb3IgKi8KKyAgICBFWFRLRVlVU0VfQVVUSF9FICAgICAgICAgICAgID0gLTM4NiwgICAvKiBFeHRLZXlVc2Ugc2VydmVyfGNsaWVudF9hdXRoICovCisgICAgU0VORF9PT0JfUkVBRF9FICAgICAgICAgICAgICA9IC0zODcsICAgLyogU2VuZCBDYiBvdXQgb2YgYm91bmRzIHJlYWQgKi8KKyAgICBTRUNVUkVfUkVORUdPVElBVElPTl9FICAgICAgID0gLTM4OCwgICAvKiBJbnZhbGlkIFJlbmVnb3RpYXRpb24gSW5mbyAqLworICAgIFNFU1NJT05fVElDS0VUX0xFTl9FICAgICAgICAgPSAtMzg5LCAgIC8qIFNlc3Npb24gVGlja2V0IHRvbyBsYXJnZSAqLworICAgIFNFU1NJT05fVElDS0VUX0VYUEVDVF9FICAgICAgPSAtMzkwLCAgIC8qIFNlc3Npb24gVGlja2V0IG1pc3NpbmcgICAqLworICAgIFNDUl9ESUZGRVJFTlRfQ0VSVF9FICAgICAgICAgPSAtMzkxLCAgIC8qIFNDUiBEaWZmZXJlbnQgY2VydCBlcnJvciAgKi8KKyAgICBTRVNTSU9OX1NFQ1JFVF9DQl9FICAgICAgICAgID0gLTM5MiwgICAvKiBTZXNzaW9uIHNlY3JldCBDYiBmY24gZmFpbHVyZSAqLworICAgIE5PX0NIQU5HRV9DSVBIRVJfRSAgICAgICAgICAgPSAtMzkzLCAgIC8qIEZpbmlzaGVkIGJlZm9yZSBjaGFuZ2UgY2lwaGVyICovCisgICAgU0FOSVRZX01TR19FICAgICAgICAgICAgICAgICA9IC0zOTQsICAgLyogU2FuaXR5IGNoZWNrIG9uIG1zZyBvcmRlciBlcnJvciAqLworICAgIERVUExJQ0FURV9NU0dfRSAgICAgICAgICAgICAgPSAtMzk1LCAgIC8qIER1cGxpY2F0ZSBtZXNzYWdlIGVycm9yICovCisgICAgU05JX1VOU1VQUE9SVEVEICAgICAgICAgICAgICA9IC0zOTYsICAgLyogU1NMIDMuMCBkb2VzIG5vdCBzdXBwb3J0IFNOSSAqLworICAgIFNPQ0tFVF9QRUVSX0NMT1NFRF9FICAgICAgICAgPSAtMzk3LCAgIC8qIFVuZGVybHlpbmcgdHJhbnNwb3J0IGNsb3NlZCAqLworICAgIEJBRF9USUNLRVRfS0VZX0NCX1NaICAgICAgICAgPSAtMzk4LCAgIC8qIEJhZCBzZXNzaW9uIHRpY2tldCBrZXkgY2Igc2l6ZSAqLworICAgIEJBRF9USUNLRVRfTVNHX1NaICAgICAgICAgICAgPSAtMzk5LCAgIC8qIEJhZCBzZXNzaW9uIHRpY2tldCBtc2cgc2l6ZSAgICAqLworICAgIEJBRF9USUNLRVRfRU5DUllQVCAgICAgICAgICAgPSAtNDAwLCAgIC8qIEJhZCB1c2VyIHRpY2tldCBlbmNyeXB0ICAgICAgICAqLworICAgIERIX0tFWV9TSVpFX0UgICAgICAgICAgICAgICAgPSAtNDAxLCAgIC8qIERIIEtleSB0b28gc21hbGwgKi8KKyAgICBTTklfQUJTRU5UX0VSUk9SICAgICAgICAgICAgID0gLTQwMiwgICAvKiBObyBTTkkgcmVxdWVzdC4gKi8KKyAgICBSU0FfU0lHTl9GQVVMVCAgICAgICAgICAgICAgID0gLTQwMywgICAvKiBSU0EgU2lnbiBmYXVsdCAqLworICAgIEhBTkRTSEFLRV9TSVpFX0VSUk9SICAgICAgICAgPSAtNDA0LCAgIC8qIEhhbmRzaGFrZSBtZXNzYWdlIHRvbyBsYXJnZSAqLworICAgIFVOS05PV05fQUxQTl9QUk9UT0NPTF9OQU1FX0UgPSAtNDA1LCAgIC8qIFVucmVjb2duaXplZCBwcm90b2NvbCBuYW1lIEVycm9yKi8KKyAgICBCQURfQ0VSVElGSUNBVEVfU1RBVFVTX0VSUk9SID0gLTQwNiwgICAvKiBCYWQgY2VydGlmaWNhdGUgc3RhdHVzIG1lc3NhZ2UgKi8KKyAgICBPQ1NQX0lOVkFMSURfU1RBVFVTICAgICAgICAgID0gLTQwNywgICAvKiBJbnZhbGlkIE9DU1AgU3RhdHVzICovCisgICAgT0NTUF9XQU5UX1JFQUQgICAgICAgICAgICAgICA9IC00MDgsICAgLyogT0NTUCBjYWxsYmFjayByZXNwb25zZSBXT0xGU1NMX0NCSU9fRVJSX1dBTlRfUkVBRCAqLworICAgIFJTQV9LRVlfU0laRV9FICAgICAgICAgICAgICAgPSAtNDA5LCAgIC8qIFJTQSBrZXkgdG9vIHNtYWxsICovCisgICAgRUNDX0tFWV9TSVpFX0UgICAgICAgICAgICAgICA9IC00MTAsICAgLyogRUNDIGtleSB0b28gc21hbGwgKi8KKyAgICBEVExTX0VYUE9SVF9WRVJfRSAgICAgICAgICAgID0gLTQxMSwgICAvKiBleHBvcnQgdmVyc2lvbiBlcnJvciAqLworICAgIElOUFVUX1NJWkVfRSAgICAgICAgICAgICAgICAgPSAtNDEyLCAgIC8qIGlucHV0IHNpemUgdG9vIGJpZyBlcnJvciAqLworICAgIENUWF9JTklUX01VVEVYX0UgICAgICAgICAgICAgPSAtNDEzLCAgIC8qIGluaXRpYWxpemUgY3R4IG11dGV4IGVycm9yICovCisgICAgRVhUX01BU1RFUl9TRUNSRVRfTkVFREVEX0UgICA9IC00MTQsICAgLyogbmVlZCBFTVMgZW5hYmxlZCB0byByZXN1bWUgKi8KKyAgICBEVExTX1BPT0xfU1pfRSAgICAgICAgICAgICAgID0gLTQxNSwgICAvKiBleGNlZWRlZCBEVExTIHBvb2wgc2l6ZSAqLworICAgIERFQ09ERV9FICAgICAgICAgICAgICAgICAgICAgPSAtNDE2LCAgIC8qIGRlY29kZSBoYW5kc2hha2UgbWVzc2FnZSBlcnJvciAqLworICAgIEhUVFBfVElNRU9VVCAgICAgICAgICAgICAgICAgPSAtNDE3LCAgIC8qIEhUVFAgdGltZW91dCBmb3IgT0NTUCBvciBDUkwgcmVxICovCisgICAgV1JJVEVfRFVQX1JFQURfRSAgICAgICAgICAgICA9IC00MTgsICAgLyogV3JpdGUgZHVwIHdyaXRlIHNpZGUgY2FuJ3QgcmVhZCAqLworICAgIFdSSVRFX0RVUF9XUklURV9FICAgICAgICAgICAgPSAtNDE5LCAgIC8qIFdyaXRlIGR1cCByZWFkIHNpZGUgY2FuJ3Qgd3JpdGUgKi8KKyAgICBJTlZBTElEX0NFUlRfQ1RYX0UgICAgICAgICAgID0gLTQyMCwgICAvKiBUTFMgY2VydCBjdHggbm90IG1hdGNoaW5nICovCisgICAgQkFEX0tFWV9TSEFSRV9EQVRBICAgICAgICAgICA9IC00MjEsICAgLyogS2V5IFNoYXJlIGRhdGEgaW52YWxpZCAqLworICAgIE1JU1NJTkdfSEFORFNIQUtFX0RBVEEgICAgICAgPSAtNDIyLCAgIC8qIEhhbmRzaGFrZSBtZXNzYWdlIG1pc3NpbmcgZGF0YSAqLworICAgIEJBRF9CSU5ERVIgICAgICAgICAgICAgICAgICAgPSAtNDIzLCAgIC8qIEJpbmRlciBkb2VzIG5vdCBtYXRjaCAqLworICAgIEVYVF9OT1RfQUxMT1dFRCAgICAgICAgICAgICAgPSAtNDI0LCAgIC8qIEV4dGVuc2lvbiBub3QgYWxsb3dlZCBpbiBtc2cgKi8KKyAgICBJTlZBTElEX1BBUkFNRVRFUiAgICAgICAgICAgID0gLTQyNSwgICAvKiBTZWN1cml0eSBwYXJhbWV0ZXIgaW52YWxpZCAqLworICAgIE1DQVNUX0hJR0hXQVRFUl9DQl9FICAgICAgICAgPSAtNDI2LCAgIC8qIE11bHRpY2FzdCBoaWdod2F0ZXIgY2IgZXJyICovCisgICAgQUxFUlRfQ09VTlRfRSAgICAgICAgICAgICAgICA9IC00MjcsICAgLyogQWxlcnQgQ291bnQgZXhjZWVkZWQgZXJyICovCisgICAgRVhUX01JU1NJTkcgICAgICAgICAgICAgICAgICA9IC00MjgsICAgLyogUmVxdWlyZWQgZXh0ZW5zaW9uIG5vdCBmb3VuZCAqLworICAgIFVOU1VQUE9SVEVEX0VYVEVOU0lPTiAgICAgICAgPSAtNDI5LCAgIC8qIFRMU1ggbm90IHJlcXVlc3RlZCBieSBjbGllbnQgKi8KKyAgICBQUkZfTUlTU0lORyAgICAgICAgICAgICAgICAgID0gLTQzMCwgICAvKiBQUkYgbm90IGNvbXBpbGVkIGluICovCisgICAgRFRMU19SRVRYX09WRVJfVFggICAgICAgICAgICA9IC00MzEsICAgLyogUmV0cmFuc21pdCBEVExTIGZsaWdodCBvdmVyICovCisgICAgREhfUEFSQU1TX05PVF9GRkRIRV9FICAgICAgICA9IC00MzIsICAgLyogREggcGFyYW1zIGZyb20gc2VydmVyIG5vdCBGRkRIRSAqLworICAgIFRDQV9JTlZBTElEX0lEX1RZUEUgICAgICAgICAgPSAtNDMzLCAgIC8qIFRMU1ggVENBIElEIHR5cGUgaW52YWxpZCAqLworICAgIFRDQV9BQlNFTlRfRVJST1IgICAgICAgICAgICAgPSAtNDM0LCAgIC8qIFRMU1ggVENBIElEIG5vIHJlc3BvbnNlICovCisgICAgVFNJUF9NQUNfRElHU1pfRSAgICAgICAgICAgICA9IC00MzUsICAgLyogSW52YWxpZCBNQUMgc2l6ZSBmb3IgVFNJUCAqLworICAgIENMSUVOVF9DRVJUX0NCX0VSUk9SICAgICAgICAgPSAtNDM2LCAgIC8qIENsaWVudCBjZXJ0IGNhbGxiYWNrIGVycm9yICovCisgICAgU1NMX1NIVVRET1dOX0FMUkVBRFlfRE9ORV9FICA9IC00MzcsICAgLyogU2h1dGRvd24gY2FsbGVkIHJlZHVuZGFudGx5ICovCisgICAgVExTMTNfU0VDUkVUX0NCX0UgICAgICAgICAgICA9IC00MzgsICAgLyogVExTMS4zIHNlY3JldCBDYiBmY24gZmFpbHVyZSAqLworICAgIERUTFNfU0laRV9FUlJPUiAgICAgICAgICAgICAgPSAtNDM5LCAgIC8qIFRyeWluZyB0byBzZW5kIHRvbyBtdWNoIGRhdGEgKi8KKyAgICBOT19DRVJUX0VSUk9SICAgICAgICAgICAgICAgID0gLTQ0MCwgICAvKiBUTFMxLjMgLSBubyBjZXJ0IHNldCBlcnJvciAqLworICAgIEFQUF9EQVRBX1JFQURZICAgICAgICAgICAgICAgPSAtNDQxLCAgIC8qIERUTFMxLjIgYXBwbGljYXRpb24gZGF0YSByZWFkeSBmb3IgcmVhZCAqLworICAgIFRPT19NVUNIX0VBUkxZX0RBVEEgICAgICAgICAgPSAtNDQyLCAgIC8qIFRvbyBtdWNoIEVhcmx5IGRhdGEgKi8KKworICAgIFNPQ0tFVF9GSUxURVJFRF9FICAgICAgICAgICAgPSAtNDQzLCAgIC8qIFNlc3Npb24gc3RvcHBlZCBieSBuZXR3b3JrIGZpbHRlciAqLworCisgICAgLyogYWRkIHN0cmluZ3MgdG8gd29sZlNTTF9FUlJfcmVhc29uX2Vycm9yX3N0cmluZyBpbiBpbnRlcm5hbC5jICEhISEhICovCisKKyAgICAvKiBiZWdpbiBuZWdvdGlhdGlvbiBwYXJhbWV0ZXIgZXJyb3JzICovCisgICAgVU5TVVBQT1JURURfU1VJVEUgICAgICAgICAgICA9IC01MDAsICAgLyogdW5zdXBwb3J0ZWQgY2lwaGVyIHN1aXRlICovCisgICAgTUFUQ0hfU1VJVEVfRVJST1IgICAgICAgICAgICA9IC01MDEsICAgLyogY2FuJ3QgbWF0Y2ggY2lwaGVyIHN1aXRlICovCisgICAgQ09NUFJFU1NJT05fRVJST1IgICAgICAgICAgICA9IC01MDIsICAgLyogY29tcHJlc3Npb24gbWlzbWF0Y2ggKi8KKyAgICBLRVlfU0hBUkVfRVJST1IgICAgICAgICAgICAgID0gLTUwMywgICAvKiBrZXkgc2hhcmUgbWlzbWF0Y2ggKi8KKyAgICBQT1NUX0hBTkRfQVVUSF9FUlJPUiAgICAgICAgID0gLTUwNCwgICAvKiBjbGllbnQgd29uJ3QgZG8gcG9zdC1oYW5kIGF1dGggKi8KKyAgICBIUlJfQ09PS0lFX0VSUk9SICAgICAgICAgICAgID0gLTUwNSAgICAvKiBIUlIgbXNnIGNvb2tpZSBtaXNtYXRjaCAqLworICAgIC8qIGVuZCBuZWdvdGlhdGlvbiBwYXJhbWV0ZXIgZXJyb3JzIG9ubHkgMTAgZm9yIG5vdyAqLworICAgIC8qIGFkZCBzdHJpbmdzIHRvIHdvbGZTU0xfRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmcgaW4gaW50ZXJuYWwuYyAhISEhISAqLworCisgICAgLyogbm8gZXJyb3Igc3RpbmdzIGdvIGRvd24gaGVyZSwgYWRkIGFib3ZlIG5lZ290aWF0aW9uIGVycm9ycyAhISEhICovCit9OworCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQ0FMTEJBQ0tTKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpCisgICAgZW51bSB7CisgICAgICAgIE1JTl9QQVJBTV9FUlIgPSBVTlNVUFBPUlRFRF9TVUlURSwKKyAgICAgICAgTUFYX1BBUkFNX0VSUiA9IE1JTl9QQVJBTV9FUlIgLSAxMAorICAgIH07CisjZW5kaWYKKworCitXT0xGU1NMX0xPQ0FMCit2b2lkIFNldEVycm9yU3RyaW5nKGludCBlcnIsIGNoYXIqIGJ1ZmYpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gIC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisKKyNlbmRpZiAvKiB3b2xmU1NMX0VSUk9SX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29jc3AuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29jc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2RhZDUxCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb2NzcC5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKiBvY3NwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworLyogd29sZlNTTCBPQ1NQIEFQSSAqLworCisjaWZuZGVmIFdPTEZTU0xfT0NTUF9ICisjZGVmaW5lIFdPTEZTU0xfT0NTUF9ICisKKyNpZmRlZiBIQVZFX09DU1AKKworI2luY2x1ZGUgPHdvbGZzc2wvc3NsLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXNuLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfT0NTUCBXT0xGU1NMX09DU1A7CisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoV09MRlNTTF9OR0lOWCkgfHxcCisgICAgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpIHx8IGRlZmluZWQoSEFWRV9MSUdIVFkpCit0eXBlZGVmIHN0cnVjdCBPY3NwUmVzcG9uc2UgV09MRlNTTF9PQ1NQX0JBU0lDUkVTUDsKKwordHlwZWRlZiBzdHJ1Y3QgT2NzcEVudHJ5IFdPTEZTU0xfT0NTUF9DRVJUSUQ7CisKK3R5cGVkZWYgc3RydWN0IE9jc3BFbnRyeSBXT0xGU1NMX09DU1BfU0lOR0xFUkVTUDsKKwordHlwZWRlZiBzdHJ1Y3QgT2NzcFJlcXVlc3QgV09MRlNTTF9PQ1NQX09ORVJFUTsKKwordHlwZWRlZiBzdHJ1Y3QgT2NzcFJlcXVlc3QgV09MRlNTTF9PQ1NQX1JFUVVFU1Q7CisjZW5kaWYKKworV09MRlNTTF9MT0NBTCBpbnQgIEluaXRPQ1NQKFdPTEZTU0xfT0NTUCosIFdPTEZTU0xfQ0VSVF9NQU5BR0VSKik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgRnJlZU9DU1AoV09MRlNTTF9PQ1NQKiwgaW50IGR5bmFtaWMpOworCitXT0xGU1NMX0xPQ0FMIGludCAgQ2hlY2tDZXJ0T0NTUChXT0xGU1NMX09DU1AqLCBEZWNvZGVkQ2VydCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9CVUZGRVJfSU5GTyogcmVzcG9uc2VCdWZmZXIpOworV09MRlNTTF9MT0NBTCBpbnQgIENoZWNrQ2VydE9DU1BfZXgoV09MRlNTTF9PQ1NQKiwgRGVjb2RlZENlcnQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0JVRkZFUl9JTkZPKiByZXNwb25zZUJ1ZmZlciwgV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfTE9DQUwgaW50ICBDaGVja09jc3BSZXF1ZXN0KFdPTEZTU0xfT0NTUCogb2NzcCwKKyAgICAgICAgICAgICAgICAgT2NzcFJlcXVlc3QqIG9jc3BSZXF1ZXN0LCBXT0xGU1NMX0JVRkZFUl9JTkZPKiByZXNwb25zZUJ1ZmZlcik7CitXT0xGU1NMX0xPQ0FMIGludCBDaGVja09jc3BSZXNwb25zZShXT0xGU1NMX09DU1AgKm9jc3AsIGJ5dGUgKnJlc3BvbnNlLCBpbnQgcmVzcG9uc2VTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQlVGRkVSX0lORk8gKnJlc3BvbnNlQnVmZmVyLCBDZXJ0U3RhdHVzICpzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPY3NwRW50cnkgKmVudHJ5LCBPY3NwUmVxdWVzdCAqb2NzcFJlcXVlc3QpOworCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX05HSU5YKSB8fCBkZWZpbmVkKFdPTEZTU0xfSEFQUk9YWSkgfHwgXAorICAgIGRlZmluZWQoV09MRlNTTF9BUEFDSEVfSFRUUEQpIHx8IGRlZmluZWQoSEFWRV9MSUdIVFkpCisKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9PQ1NQX3Jlc3BfZmluZF9zdGF0dXMoV09MRlNTTF9PQ1NQX0JBU0lDUkVTUCAqYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfT0NTUF9DRVJUSUQgKmlkLCBpbnQgKnN0YXR1cywgaW50ICpyZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQVNOMV9USU1FICoqcmV2dGltZSwgV09MRlNTTF9BU04xX1RJTUUgKip0aGlzdXBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FTTjFfVElNRSAqKm5leHR1cGQpOworV09MRlNTTF9BUEkgY29uc3QgY2hhciAqd29sZlNTTF9PQ1NQX2NlcnRfc3RhdHVzX3N0cihsb25nIHMpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfT0NTUF9jaGVja192YWxpZGl0eShXT0xGU1NMX0FTTjFfVElNRSogdGhpc3VwZCwKKyAgICBXT0xGU1NMX0FTTjFfVElNRSogbmV4dHVwZCwgbG9uZyBzZWMsIGxvbmcgbWF4c2VjKTsKKworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX09DU1BfQ0VSVElEX2ZyZWUoV09MRlNTTF9PQ1NQX0NFUlRJRCogY2VydElkKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfT0NTUF9DRVJUSUQqIHdvbGZTU0xfT0NTUF9jZXJ0X3RvX2lkKAorICAgIGNvbnN0IFdPTEZTU0xfRVZQX01EICpkZ3N0LCBjb25zdCBXT0xGU1NMX1g1MDkgKnN1YmplY3QsCisgICAgY29uc3QgV09MRlNTTF9YNTA5ICppc3N1ZXIpOworCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfT0NTUF9CQVNJQ1JFU1BfZnJlZShXT0xGU1NMX09DU1BfQkFTSUNSRVNQKiBiYXNpY1Jlc3BvbnNlKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX09DU1BfYmFzaWNfdmVyaWZ5KFdPTEZTU0xfT0NTUF9CQVNJQ1JFU1AgKmJzLAorICAgIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5KSAqY2VydHMsIFdPTEZTU0xfWDUwOV9TVE9SRSAqc3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfT0NTUF9SRVNQT05TRV9mcmVlKE9jc3BSZXNwb25zZSogcmVzcG9uc2UpOworI2lmbmRlZiBOT19CSU8KK1dPTEZTU0xfQVBJIE9jc3BSZXNwb25zZSogd29sZlNTTF9kMmlfT0NTUF9SRVNQT05TRV9iaW8oV09MRlNTTF9CSU8qIGJpbywKKyAgICBPY3NwUmVzcG9uc2UqKiByZXNwb25zZSk7CisjZW5kaWYKK1dPTEZTU0xfQVBJIE9jc3BSZXNwb25zZSogd29sZlNTTF9kMmlfT0NTUF9SRVNQT05TRShPY3NwUmVzcG9uc2UqKiByZXNwb25zZSwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiogZGF0YSwgaW50IGxlbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmRfT0NTUF9SRVNQT05TRShPY3NwUmVzcG9uc2UqIHJlc3BvbnNlLAorICAgIHVuc2lnbmVkIGNoYXIqKiBkYXRhKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX09DU1BfcmVzcG9uc2Vfc3RhdHVzKE9jc3BSZXNwb25zZSAqcmVzcG9uc2UpOworV09MRlNTTF9BUEkgY29uc3QgY2hhciAqd29sZlNTTF9PQ1NQX3Jlc3BvbnNlX3N0YXR1c19zdHIobG9uZyBzKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfT0NTUF9CQVNJQ1JFU1AqIHdvbGZTU0xfT0NTUF9yZXNwb25zZV9nZXQxX2Jhc2ljKAorICAgIE9jc3BSZXNwb25zZSogcmVzcG9uc2UpOworCitXT0xGU1NMX0FQSSBPY3NwUmVxdWVzdCogd29sZlNTTF9PQ1NQX1JFUVVFU1RfbmV3KHZvaWQpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX09DU1BfUkVRVUVTVF9mcmVlKE9jc3BSZXF1ZXN0KiByZXF1ZXN0KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX2kyZF9PQ1NQX1JFUVVFU1QoT2NzcFJlcXVlc3QqIHJlcXVlc3QsCisgICAgdW5zaWduZWQgY2hhcioqIGRhdGEpOworV09MRlNTTF9BUEkgV09MRlNTTF9PQ1NQX09ORVJFUSogd29sZlNTTF9PQ1NQX3JlcXVlc3RfYWRkMF9pZChPY3NwUmVxdWVzdCAqcmVxLAorICAgIFdPTEZTU0xfT0NTUF9DRVJUSUQgKmNpZCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX09DU1BfQ0VSVElEKiB3b2xmU1NMX09DU1BfQ0VSVElEX2R1cChXT0xGU1NMX09DU1BfQ0VSVElEKik7CisjaWZuZGVmIE5PX0JJTworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfaTJkX09DU1BfUkVRVUVTVF9iaW8oV09MRlNTTF9CSU8qIG91dCwKKyAgICBXT0xGU1NMX09DU1BfUkVRVUVTVCAqcmVxKTsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmRfT0NTUF9DRVJUSUQoV09MRlNTTF9PQ1NQX0NFUlRJRCAqLCB1bnNpZ25lZCBjaGFyICoqKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfT0NTUF9DRVJUSUQqIHdvbGZTU0xfT0NTUF9TSU5HTEVSRVNQX2dldDBfaWQoY29uc3QgV09MRlNTTF9PQ1NQX1NJTkdMRVJFU1AgKnNpbmdsZSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9PQ1NQX3NpbmdsZV9nZXQwX3N0YXR1cyhXT0xGU1NMX09DU1BfU0lOR0xFUkVTUCAqc2luZ2xlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FTTjFfVElNRSAqKnJldnRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FTTjFfVElNRSAqKnRoaXN1cGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FTTjFfVElNRSAqKm5leHR1cGQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfT0NTUF9yZXNwX2NvdW50KFdPTEZTU0xfT0NTUF9CQVNJQ1JFU1AgKmJzKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfT0NTUF9TSU5HTEVSRVNQKiB3b2xmU1NMX09DU1BfcmVzcF9nZXQwKFdPTEZTU0xfT0NTUF9CQVNJQ1JFU1AgKmJzLCBpbnQgaWR4KTsKKworI2VuZGlmCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfT0NTUF9SRVFVRVNUX2FkZF9leHQoT2NzcFJlcXVlc3QqIHJlcSwKKyAgICAgICAgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiogZXh0LCBpbnQgaWR4KTsKK1dPTEZTU0xfQVBJIE9jc3BSZXNwb25zZSogd29sZlNTTF9PQ1NQX3Jlc3BvbnNlX2NyZWF0ZShpbnQgc3RhdHVzLAorICAgIFdPTEZTU0xfT0NTUF9CQVNJQ1JFU1AqIGJzKTsKK1dPTEZTU0xfQVBJIGNvbnN0IGNoYXIqIHdvbGZTU0xfT0NTUF9jcmxfcmVhc29uX3N0cihsb25nIHMpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9PQ1NQX2lkX2dldDBfaW5mbyhXT0xGU1NMX0FTTjFfU1RSSU5HKiosCisgIFdPTEZTU0xfQVNOMV9PQkpFQ1QqKiwgV09MRlNTTF9BU04xX1NUUklORyoqLAorICBXT0xGU1NMX0FTTjFfSU5URUdFUioqLCBXT0xGU1NMX09DU1BfQ0VSVElEKik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX09DU1BfcmVxdWVzdF9hZGQxX25vbmNlKE9jc3BSZXF1ZXN0KiByZXEsCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIHZhbCwgaW50IHN6KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX09DU1BfY2hlY2tfbm9uY2UoT2NzcFJlcXVlc3QqIHJlcSwKKyAgICAgICAgV09MRlNTTF9PQ1NQX0JBU0lDUkVTUCogYnMpOworI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIEhBVkVfT0NTUCAqLworI2VuZGlmIC8qIFdPTEZTU0xfT0NTUF9IICovCisKKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9hZXMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvYWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5OTk0MwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvYWVzLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qIGFlcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKy8qICBhZXMuaCBkZWZpbmVzIG1pbmkgZGVzIG9wZW5zc2wgY29tcGF0aWJpbGl0eSBsYXllcgorICoKKyAqLworCisKKyNpZm5kZWYgV09MRlNTTF9BRVNfSF8KKyNkZWZpbmUgV09MRlNTTF9BRVNfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NldHRpbmdzLmg+CisKKyNpZm5kZWYgTk9fQUVTCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3NzbC5oPiAvKiBmb3Igc2l6ZV90ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFRoaXMgc3RydWN0dXJlIHdyYXBwZXIgaXMgZG9uZSBiZWNhdXNlIHRoZXJlIGlzIG5vIGFlc19uZXcgZnVuY3Rpb24gd2l0aAorICogT3BlblNTTCBjb21wYXRpYmlsaXR5IGxheWVyLiBUaGlzIG1ha2VzIGNvZGUgd29ya2luZyB3aXRoIGFuIEFFUyBzdHJ1Y3R1cmUKKyAqIHRvIG5lZWQgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZS4gKi8KK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQUVTX0tFWSB7CisgICAgQUxJR04xNiB2b2lkICpidWZbKHNpemVvZihBZXMpIC8gc2l6ZW9mKHZvaWQgKikpICsgMV07Cit9IFdPTEZTU0xfQUVTX0tFWTsKK3R5cGVkZWYgV09MRlNTTF9BRVNfS0VZIEFFU19LRVk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0FFU19zZXRfZW5jcnlwdF9rZXkKKyAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqLCBjb25zdCBpbnQgYml0cywgQUVTX0tFWSAqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0FFU19zZXRfZGVjcnlwdF9rZXkKKyAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqLCBjb25zdCBpbnQgYml0cywgQUVTX0tFWSAqKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9BRVNfY2JjX2VuY3J5cHQKKyAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIqIG91dCwgc2l6ZV90IGxlbiwKKyAgICAgQUVTX0tFWSAqa2V5LCB1bnNpZ25lZCBjaGFyKiBpdiwgY29uc3QgaW50IGVuYyk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQUVTX2VjYl9lbmNyeXB0CisgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyKiBvdXQsCisgICAgIEFFU19LRVkgKmtleSwgY29uc3QgaW50IGVuYyk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQUVTX2NmYjEyOF9lbmNyeXB0CisgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyKiBvdXQsIHNpemVfdCBsZW4sCisgICAgIEFFU19LRVkgKmtleSwgdW5zaWduZWQgY2hhciogaXYsIGludCogbnVtLCBjb25zdCBpbnQgZW5jKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0FFU193cmFwX2tleShBRVNfS0VZICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sZW4pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQUVTX3Vud3JhcF9rZXkoQUVTX0tFWSAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmxlbik7CisKKyNkZWZpbmUgQUVTX2NiY19lbmNyeXB0ICAgICB3b2xmU1NMX0FFU19jYmNfZW5jcnlwdAorI2RlZmluZSBBRVNfZWNiX2VuY3J5cHQgICAgIHdvbGZTU0xfQUVTX2VjYl9lbmNyeXB0CisjZGVmaW5lIEFFU19jZmIxMjhfZW5jcnlwdCAgd29sZlNTTF9BRVNfY2ZiMTI4X2VuY3J5cHQKKyNkZWZpbmUgQUVTX3NldF9lbmNyeXB0X2tleSB3b2xmU1NMX0FFU19zZXRfZW5jcnlwdF9rZXkKKyNkZWZpbmUgQUVTX3NldF9kZWNyeXB0X2tleSB3b2xmU1NMX0FFU19zZXRfZGVjcnlwdF9rZXkKKyNkZWZpbmUgQUVTX3dyYXBfa2V5ICAgICAgICB3b2xmU1NMX0FFU193cmFwX2tleQorI2RlZmluZSBBRVNfdW53cmFwX2tleSAgICAgIHdvbGZTU0xfQUVTX3Vud3JhcF9rZXkKKworI2lmZGVmIFdPTEZTU0xfQUVTX0RJUkVDVAorV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0FFU19lbmNyeXB0CisgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0LCB1bnNpZ25lZCBjaGFyKiBvdXRwdXQsIEFFU19LRVkgKik7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQUVTX2RlY3J5cHQKKyAgICAoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXQsIHVuc2lnbmVkIGNoYXIqIG91dHB1dCwgQUVTX0tFWSAqKTsKKworI2RlZmluZSBBRVNfZW5jcnlwdCAgICAgICAgIHdvbGZTU0xfQUVTX2VuY3J5cHQKKyNkZWZpbmUgQUVTX2RlY3J5cHQgICAgICAgICB3b2xmU1NMX0FFU19kZWNyeXB0CisjZW5kaWYgLyogSEFWRV9BRVNfRElSRUNUICovCisKKyNpZm5kZWYgQUVTX0VOQ1JZUFQKKyNkZWZpbmUgQUVTX0VOQ1JZUFQgQUVTX0VOQ1JZUFRJT04KKyNlbmRpZgorI2lmbmRlZiBBRVNfREVDUllQVAorI2RlZmluZSBBRVNfREVDUllQVCBBRVNfREVDUllQVElPTgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBOT19BRVMgKi8KKworI2VuZGlmIC8qIFdPTEZTU0xfQUVTX0hfICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2FzbjEuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvYXNuMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkODg1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2FzbjEuaApAQCAtMCwwICsxLDE3NCBAQAorLyogYXNuMS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogYXNuMS5oIGZvciBvcGVuc3NsICovCisKKyNpZm5kZWYgV09MRlNTTF9BU04xX0hfCisjZGVmaW5lIFdPTEZTU0xfQVNOMV9IXworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3NzbC5oPgorCisjZGVmaW5lIEFTTjFfU1RSSU5HX25ldyAgICAgIHdvbGZTU0xfQVNOMV9TVFJJTkdfbmV3CisjZGVmaW5lIEFTTjFfU1RSSU5HX3R5cGVfbmV3IHdvbGZTU0xfQVNOMV9TVFJJTkdfdHlwZV9uZXcKKyNkZWZpbmUgQVNOMV9TVFJJTkdfdHlwZSAgICAgd29sZlNTTF9BU04xX1NUUklOR190eXBlCisjZGVmaW5lIEFTTjFfU1RSSU5HX3NldCAgICAgIHdvbGZTU0xfQVNOMV9TVFJJTkdfc2V0CisjZGVmaW5lIEFTTjFfU1RSSU5HX2ZyZWUgICAgIHdvbGZTU0xfQVNOMV9TVFJJTkdfZnJlZQorCisjZGVmaW5lIEFTTjFfZ2V0X29iamVjdCAgICAgIHdvbGZTU0xfQVNOMV9nZXRfb2JqZWN0CisjZGVmaW5lIGQyaV9BU04xX09CSkVDVCAgICAgIHdvbGZTU0xfZDJpX0FTTjFfT0JKRUNUCisjZGVmaW5lIGMyaV9BU04xX09CSkVDVCAgICAgIHdvbGZTU0xfYzJpX0FTTjFfT0JKRUNUCisKKyNkZWZpbmUgVl9BU04xX0lOVEVHRVIgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBWX0FTTjFfT0NURVRfU1RSSU5HICAgICAgICAgICAgICAweDA0IC8qIHRhZyBmb3IgQVNOMV9PQ1RFVF9TVFJJTkcgKi8KKyNkZWZpbmUgVl9BU04xX05FRyAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgVl9BU04xX05FR19JTlRFR0VSICAgICAgICAgICAgICAgKDIgfCBWX0FTTjFfTkVHKQorI2RlZmluZSBWX0FTTjFfTkVHX0VOVU1FUkFURUQgICAgICAgICAgICAoMTAgfCBWX0FTTjFfTkVHKQorCisvKiBUeXBlIGZvciBBU04xX3ByaW50X2V4ICovCisjIGRlZmluZSBBU04xX1NUUkZMR1NfRVNDXzIyNTMgICAgICAgICAgIDEKKyMgZGVmaW5lIEFTTjFfU1RSRkxHU19FU0NfQ1RSTCAgICAgICAgICAgMgorIyBkZWZpbmUgQVNOMV9TVFJGTEdTX0VTQ19NU0IgICAgICAgICAgICA0CisjIGRlZmluZSBBU04xX1NUUkZMR1NfRVNDX1FVT1RFICAgICAgICAgIDgKKyMgZGVmaW5lIEFTTjFfU1RSRkxHU19VVEY4X0NPTlZFUlQgICAgICAgMHgxMAorIyBkZWZpbmUgQVNOMV9TVFJGTEdTX0lHTk9SRV9UWVBFICAgICAgICAweDIwCisjIGRlZmluZSBBU04xX1NUUkZMR1NfU0hPV19UWVBFICAgICAgICAgIDB4NDAKKyMgZGVmaW5lIEFTTjFfU1RSRkxHU19EVU1QX0FMTCAgICAgICAgICAgMHg4MAorIyBkZWZpbmUgQVNOMV9TVFJGTEdTX0RVTVBfVU5LTk9XTiAgICAgICAweDEwMAorIyBkZWZpbmUgQVNOMV9TVFJGTEdTX0RVTVBfREVSICAgICAgICAgICAweDIwMAorIyBkZWZpbmUgQVNOMV9TVFJGTEdTX1JGQzIyNTMgICAgICAgICAgICAoQVNOMV9TVFJGTEdTX0VTQ18yMjUzIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOMV9TVFJGTEdTX0VTQ19DVFJMIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOMV9TVFJGTEdTX0VTQ19NU0IgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU04xX1NUUkZMR1NfVVRGOF9DT05WRVJUIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOMV9TVFJGTEdTX0RVTVBfVU5LTk9XTiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTjFfU1RSRkxHU19EVU1QX0RFUikKKworI2RlZmluZSBNQlNUUklOR19VVEY4ICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgTUJTVFJJTkdfQVNDICAgICAgICAgICAgICAgICAgICAgMHgxMDAxCisjZGVmaW5lIE1CU1RSSU5HX0JNUCAgICAgICAgICAgICAgICAgICAgIDB4MTAwMgorI2RlZmluZSBNQlNUUklOR19VTklWICAgICAgICAgICAgICAgICAgICAweDEwMDQKKworI2RlZmluZSBBU04xX1VUQ1RJTUVfcHJpbnQgICAgICAgICAgICAgIHdvbGZTU0xfQVNOMV9VVENUSU1FX3ByaW50CisjZGVmaW5lIEFTTjFfVElNRV9jaGVjayAgICAgICAgICAgICAgICAgd29sZlNTTF9BU04xX1RJTUVfY2hlY2sKKyNkZWZpbmUgQVNOMV9USU1FX2RpZmYgICAgICAgICAgICAgICAgICB3b2xmU1NMX0FTTjFfVElNRV9kaWZmCisjZGVmaW5lIEFTTjFfVElNRV9zZXQgICAgICAgICAgICAgICAgICAgd29sZlNTTF9BU04xX1RJTUVfc2V0CisKKyNkZWZpbmUgVl9BU04xX0VPQyAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFZfQVNOMV9PQkpFQ1QgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBWX0FTTjFfVVRGOFNUUklORyAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFZfQVNOMV9TRVFVRU5DRSAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVl9BU04xX1NFVCAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBWX0FTTjFfUFJJTlRBQkxFU1RSSU5HICAgICAgICAgIDE5CisjZGVmaW5lIFZfQVNOMV9UNjFTVFJJTkcgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgVl9BU04xX0lBNVNUUklORyAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBWX0FTTjFfVVRDVElNRSAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIFZfQVNOMV9HRU5FUkFMSVpFRFRJTUUgICAgICAgICAgMjQKKyNkZWZpbmUgVl9BU04xX1VOSVZFUlNBTFNUUklORyAgICAgICAgICAyOAorI2RlZmluZSBWX0FTTjFfQk1QU1RSSU5HICAgICAgICAgICAgICAgIDMwCisKKworI2RlZmluZSBWX0FTTjFfQ09OU1RSVUNURUQgICAgICAgICAgICAgIDB4MjAKKworI2RlZmluZSBBU04xX1NUUklOR19GTEFHX0JJVFNfTEVGVCAgICAgICAweDAwOAorI2RlZmluZSBBU04xX1NUUklOR19GTEFHX05ERUYgICAgICAgICAgICAweDAxMAorI2RlZmluZSBBU04xX1NUUklOR19GTEFHX0NPTlQgICAgICAgICAgICAweDAyMAorI2RlZmluZSBBU04xX1NUUklOR19GTEFHX01TVFJJTkcgICAgICAgICAweDA0MAorI2RlZmluZSBBU04xX1NUUklOR19GTEFHX0VNQkVEICAgICAgICAgICAweDA4MAorCisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQVNOMV9JTlRFR0VSICp3b2xmU1NMX0JOX3RvX0FTTjFfSU5URUdFUigKKyAgICBjb25zdCBXT0xGU1NMX0JJR05VTSosIFdPTEZTU0xfQVNOMV9JTlRFR0VSKik7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9BU04xX1RZUEVfc2V0KFdPTEZTU0xfQVNOMV9UWVBFICphLCBpbnQgdHlwZSwgdm9pZCAqdmFsdWUpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9BU04xX2dldF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqKmluLCBsb25nICpsZW4sIGludCAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY2xzLCBsb25nIGluTGVuKTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX09CSkVDVCAqd29sZlNTTF9jMmlfQVNOMV9PQkpFQ1QoV09MRlNTTF9BU04xX09CSkVDVCAqKmEsCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwgbG9uZyBsZW4pOworCisjaWZkZWYgT1BFTlNTTF9BTEwKKy8qIElNUExFTUVOVF9BU04xX0ZVTkNUSU9OUyBpcyBzdHJpY3RseSBmb3IgZXh0ZXJuYWwgdXNlIG9ubHkuIEludGVybmFsbHkKKyAqIHdlIGRvbid0IHVzZSB0aGlzLiBTb21lIHByb2plY3RzIHVzZSBPcGVuU1NMIHRvIGltcGxlbWVudCBBU04xIHR5cGVzIGFuZAorICogdGhpcyBzZWN0aW9uIGlzIG9ubHkgdG8gcHJvdmlkZSB0aG9zZSBwcm9qZWN0cyB3aXRoIEFTTjEgZnVuY3Rpb25hbGl0eS4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBzaXplX3Qgb2Zmc2V0OyAgICAgICAgICAgICAgLyogT2Zmc2V0IG9mIHRoaXMgZmllbGQgaW4gc3RydWN0dXJlICovCisgICAgYnl0ZSB0eXBlOyAgICAgICAgICAgICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBtZW1iZXIgYXMgZGVmaW5lZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBXT0xGU1NMX0FTTjFfVFlQRVMgKi8KK30gV09MRlNTTF9BU04xX1RFTVBMQVRFOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgYnl0ZSB0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9uZSBvZiB0aGUgQVNOX1RhZ3MgdHlwZXMgKi8KKyAgICBjb25zdCBXT0xGU1NMX0FTTjFfVEVNUExBVEUgKm1lbWJlcnM7ICAgLyogSWYgU0VRVUVOQ0Ugb3IgQ0hPSUNFIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY29udGFpbnMgdGhlIGNvbnRlbnRzICovCisgICAgc2l6ZV90IG1jb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBtZW1iZXJzIGlmIFNFUVVFTkNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9yIENIT0lDRSAqLworICAgIHNpemVfdCBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJ1Y3R1cmUgc2l6ZSAqLworfSBXT0xGU1NMX0FTTjFfSVRFTTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXT0xGU1NMX1g1MDlfQUxHT1JfQVNOMSA9IDAsCisgICAgV09MRlNTTF9BU04xX0JJVF9TVFJJTkdfQVNOMSwKK30gV09MRlNTTF9BU04xX1RZUEVTOworCisjZGVmaW5lIEFTTjFfU0VRVUVOQ0UodHlwZSkgXAorICAgIHN0YXRpYyB0eXBlIF9fIyN0eXBlIyNfZHVtbXlfc3RydWN0O1wKKyAgICBzdGF0aWMgY29uc3QgV09MRlNTTF9BU04xX1RFTVBMQVRFIHR5cGUjI19tZW1iZXJfZGF0YVtdCisKKyNkZWZpbmUgQVNOMV9TSU1QTEUodHlwZSwgbWVtYmVyLCBtZW1iZXJfdHlwZSkgXAorICAgIHsgKGNoYXIqKSZfXyMjdHlwZSMjX2R1bW15X3N0cnVjdC5tZW1iZXIgLSAoY2hhciopJl9fIyN0eXBlIyNfZHVtbXlfc3RydWN0LCBcCisgICAgICAgIFdPTEZTU0xfIyNtZW1iZXJfdHlwZSMjX0FTTjEgfQorCisjZGVmaW5lIEFTTjFfU0VRVUVOQ0VfRU5EKHR5cGUpIFwKKyAgICA7IFwKKyAgICBjb25zdCBXT0xGU1NMX0FTTjFfSVRFTSB0eXBlIyNfdGVtcGxhdGVfZGF0YSA9IHsgXAorICAgICAgICAgICAgQVNOX1NFUVVFTkNFLCBcCisgICAgICAgICAgICB0eXBlIyNfbWVtYmVyX2RhdGEsIFwKKyAgICAgICAgICAgIHNpemVvZih0eXBlIyNfbWVtYmVyX2RhdGEpIC8gc2l6ZW9mKFdPTEZTU0xfQVNOMV9URU1QTEFURSksIFwKKyAgICAgICAgICAgIHNpemVvZih0eXBlKSBcCisgICAgfTsKKworV09MRlNTTF9BUEkgdm9pZCAqd29sZlNTTF9BU04xX2l0ZW1fbmV3KGNvbnN0IFdPTEZTU0xfQVNOMV9JVEVNICp0cGwpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0FTTjFfaXRlbV9mcmVlKHZvaWQgKnZhbCwgY29uc3QgV09MRlNTTF9BU04xX0lURU0gKnRwbCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9BU04xX2l0ZW1faTJkKGNvbnN0IHZvaWQgKnNyYywgYnl0ZSAqKmRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfQVNOMV9JVEVNICp0cGwpOworCisvKiBOZWVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG90aGVyd2lzZSBjb21waWxlciBjb21wbGFpbnMgKi8KKyNkZWZpbmUgSU1QTEVNRU5UX0FTTjFfRlVOQ1RJT05TKHR5cGUpIFwKKyAgICB0eXBlICp0eXBlIyNfbmV3KHZvaWQpOyBcCisgICAgdHlwZSAqdHlwZSMjX25ldyh2b2lkKXsgXAorICAgICAgICByZXR1cm4gKHR5cGUqKXdvbGZTU0xfQVNOMV9pdGVtX25ldygmdHlwZSMjX3RlbXBsYXRlX2RhdGEpOyBcCisgICAgfSBcCisgICAgdm9pZCB0eXBlIyNfZnJlZSh0eXBlICp0KTsgXAorICAgIHZvaWQgdHlwZSMjX2ZyZWUodHlwZSAqdCl7IFwKKyAgICAgICAgd29sZlNTTF9BU04xX2l0ZW1fZnJlZSh0LCAmdHlwZSMjX3RlbXBsYXRlX2RhdGEpOyBcCisgICAgfSBcCisgICAgaW50IGkyZF8jI3R5cGUodHlwZSAqc3JjLCBieXRlICoqZGVzdCk7IFwKKyAgICBpbnQgaTJkXyMjdHlwZSh0eXBlICpzcmMsIGJ5dGUgKipkZXN0KSBcCisgICAgeyBcCisgICAgICAgIHJldHVybiB3b2xmU1NMX0FTTjFfaXRlbV9pMmQoc3JjLCBkZXN0LCAmdHlwZSMjX3RlbXBsYXRlX2RhdGEpO1wKKyAgICB9CisKKyNlbmRpZiAvKiBPUEVOU1NMX0FMTCAqLworCisjZGVmaW5lIEJOX3RvX0FTTjFfSU5URUdFUiAgICAgICAgICB3b2xmU1NMX0JOX3RvX0FTTjFfSU5URUdFUgorI2RlZmluZSBBU04xX1RZUEVfc2V0ICAgICAgICAgICAgICAgd29sZlNTTF9BU04xX1RZUEVfc2V0CisKKyNlbmRpZiAvKiBXT0xGU1NMX0FTTjFfSF8gKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvYXNuMXQuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvYXNuMXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGMyNDA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9hc24xdC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qIGFzbjF0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiBhc24xdC5oIGZvciBvcGVuc3NsICovCisKKyNpZm5kZWYgV09MRlNTTF9BU04xVF9IXworI2RlZmluZSBXT0xGU1NMX0FTTjFUX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc24uaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvYXNuMS5oPgorCisjZW5kaWYgLyogV09MRlNTTF9BU04xVF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9iaW8uaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvYmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljZTQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvYmlvLmgKQEAgLTAsMCArMSwxNzUgQEAKKy8qIGJpby5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogYmlvLmggZm9yIG9wZW5zc2wgKi8KKworCisjaWZuZGVmIFdPTEZTU0xfQklPX0hfCisjZGVmaW5lIFdPTEZTU0xfQklPX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc3NsLmg+CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisjZGVmaW5lIEJJT19GTEFHU19CQVNFNjRfTk9fTkwgV09MRlNTTF9CSU9fRkxBR19CQVNFNjRfTk9fTkwKKyNkZWZpbmUgQklPX0ZMQUdTX1JFQUQgICAgICAgICBXT0xGU1NMX0JJT19GTEFHX1JFQUQKKyNkZWZpbmUgQklPX0ZMQUdTX1dSSVRFICAgICAgICBXT0xGU1NMX0JJT19GTEFHX1dSSVRFCisjZGVmaW5lIEJJT19GTEFHU19JT19TUEVDSUFMICAgV09MRlNTTF9CSU9fRkxBR19JT19TUEVDSUFMCisjZGVmaW5lIEJJT19GTEFHU19TSE9VTERfUkVUUlkgV09MRlNTTF9CSU9fRkxBR19SRVRSWQorCisjZGVmaW5lIEJJT19uZXdfZnAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fbmV3X2ZwCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgXAorICAgIHx8IGRlZmluZWQoSEFWRV9TVFVOTkVMKSBcCisgICAgfHwgZGVmaW5lZChIQVZFX0xJR0hUWSkgXAorICAgIHx8IGRlZmluZWQoV09MRlNTTF9NWVNRTF9DT01QQVRJQkxFKSBcCisgICAgfHwgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpIFwKKyAgICB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpCisjZGVmaW5lIEJJT19uZXdfZmlsZSAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fbmV3X2ZpbGUKKyNlbmRpZgorI2RlZmluZSBCSU9fbmV3X2ZwICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX25ld19mcAorI2RlZmluZSBCSU9fY3RybCAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX2N0cmwKKyNkZWZpbmUgQklPX2N0cmxfcGVuZGluZyAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19jdHJsX3BlbmRpbmcKKyNkZWZpbmUgQklPX3dwZW5kaW5nICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT193cGVuZGluZworI2RlZmluZSBCSU9fZ2V0X21lbV9wdHIgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX2dldF9tZW1fcHRyCisjZGVmaW5lIEJJT19pbnRfY3RybCAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9faW50X2N0cmwKKyNkZWZpbmUgQklPX3Jlc2V0ICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19yZXNldAorI2RlZmluZSBCSU9fc19maWxlICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3NfZmlsZQorI2RlZmluZSBCSU9fc19iaW8gICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3NfYmlvCisjZGVmaW5lIEJJT19zX3NvY2tldCAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fc19zb2NrZXQKKyNkZWZpbmUgQklPX3NldF9mZCAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19zZXRfZmQKKyNkZWZpbmUgQklPX3NldF9jbG9zZSAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19zZXRfY2xvc2UKKyNkZWZpbmUgQklPX2N0cmxfcmVzZXRfcmVhZF9yZXF1ZXN0ICAgICB3b2xmU1NMX0JJT19jdHJsX3Jlc2V0X3JlYWRfcmVxdWVzdAorI2RlZmluZSBCSU9fc2V0X3dyaXRlX2J1Zl9zaXplICAgICAgICAgIHdvbGZTU0xfQklPX3NldF93cml0ZV9idWZfc2l6ZQorI2RlZmluZSBCSU9fbWFrZV9iaW9fcGFpciAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX21ha2VfYmlvX3BhaXIKKworI2RlZmluZSBCSU9fbmV3X2ZkICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX25ld19mZAorI2RlZmluZSBCSU9fc2V0X2ZwICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3NldF9mcAorI2RlZmluZSBCSU9fZ2V0X2ZwICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX2dldF9mcAorI2RlZmluZSBCSU9fc2VlayAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3NlZWsKKyNkZWZpbmUgQklPX3RlbGwgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT190ZWxsCisjZGVmaW5lIEJJT193cml0ZV9maWxlbmFtZSAgICAgICAgICAgICAgd29sZlNTTF9CSU9fd3JpdGVfZmlsZW5hbWUKKyNkZWZpbmUgQklPX3NldF9tZW1fZW9mX3JldHVybiAgICAgICAgICB3b2xmU1NMX0JJT19zZXRfbWVtX2VvZl9yZXR1cm4KKworI2RlZmluZSBCSU9fZmluZF90eXBlIHdvbGZTU0xfQklPX2ZpbmRfdHlwZQorI2RlZmluZSBCSU9fbmV4dCAgICAgIHdvbGZTU0xfQklPX25leHQKKyNkZWZpbmUgQklPX2dldHMgICAgICB3b2xmU1NMX0JJT19nZXRzCisjZGVmaW5lIEJJT19wdXRzICAgICAgd29sZlNTTF9CSU9fcHV0cworCisjZGVmaW5lIEJJT19zaG91bGRfcmV0cnkgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fc2hvdWxkX3JldHJ5CisKKyNkZWZpbmUgQklPX1RZUEVfRklMRSBXT0xGU1NMX0JJT19GSUxFCisjZGVmaW5lIEJJT19UWVBFX0JJTyAgV09MRlNTTF9CSU9fQklPCisjZGVmaW5lIEJJT19UWVBFX01FTSAgV09MRlNTTF9CSU9fTUVNT1JZCisjZGVmaW5lIEJJT19UWVBFX0JBU0U2NCBXT0xGU1NMX0JJT19CQVNFNjQKKworI2RlZmluZSBCSU9fdnByaW50ZiB3b2xmU1NMX0JJT192cHJpbnRmCisjZGVmaW5lIEJJT19wcmludGYgIHdvbGZTU0xfQklPX3ByaW50ZgorI2RlZmluZSBCSU9fZHVtcCAgICB3b2xmU1NMX0JJT19kdW1wCisKKy8qIEJJTyBpbmZvIGNhbGxiYWNrICovCisjZGVmaW5lIEJJT19DQl9GUkVFICAgV09MRlNTTF9CSU9fQ0JfRlJFRQorI2RlZmluZSBCSU9fQ0JfUkVBRCAgIFdPTEZTU0xfQklPX0NCX1JFQUQKKyNkZWZpbmUgQklPX0NCX1dSSVRFICBXT0xGU1NMX0JJT19DQl9XUklURQorI2RlZmluZSBCSU9fQ0JfUFVUUyAgIFdPTEZTU0xfQklPX0NCX1BVVFMKKyNkZWZpbmUgQklPX0NCX0dFVFMgICBXT0xGU1NMX0JJT19DQl9HRVRTCisjZGVmaW5lIEJJT19DQl9DVFJMICAgV09MRlNTTF9CSU9fQ0JfQ1RSTAorI2RlZmluZSBCSU9fQ0JfUkVUVVJOIFdPTEZTU0xfQklPX0NCX1JFVFVSTgorCisjZGVmaW5lIEJJT19zZXRfY2FsbGJhY2sgICAgICAgICB3b2xmU1NMX0JJT19zZXRfY2FsbGJhY2sKKyNkZWZpbmUgQklPX2dldF9jYWxsYmFjayAgICAgICAgIHdvbGZTU0xfQklPX2dldF9jYWxsYmFjaworI2RlZmluZSBCSU9fc2V0X2NhbGxiYWNrX2FyZyAgICAgd29sZlNTTF9CSU9fc2V0X2NhbGxiYWNrX2FyZworI2RlZmluZSBCSU9fZ2V0X2NhbGxiYWNrX2FyZyAgICAgd29sZlNTTF9CSU9fZ2V0X2NhbGxiYWNrX2FyZworCisvKiBCSU8gZm9yIDEuMS4wIG9yIGxhdGVyICovCisjZGVmaW5lIEJJT19zZXRfaW5pdCAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3NldF9pbml0CisjZGVmaW5lIEJJT19nZXRfZGF0YSAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX2dldF9kYXRhCisjZGVmaW5lIEJJT19zZXRfZGF0YSAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3NldF9kYXRhCisjZGVmaW5lIEJJT19nZXRfc2h1dGRvd24gICAgICAgICAgIHdvbGZTU0xfQklPX2dldF9zaHV0ZG93bgorI2RlZmluZSBCSU9fc2V0X3NodXRkb3duICAgICAgICAgICB3b2xmU1NMX0JJT19zZXRfc2h1dGRvd24KKworI2RlZmluZSBCSU9fY2xlYXJfZmxhZ3MgICAgICAgICAgICB3b2xmU1NMX0JJT19jbGVhcl9mbGFncworI2RlZmluZSBCSU9fc2V0X2V4X2RhdGEgICAgICAgICAgICB3b2xmU1NMX0JJT19zZXRfZXhfZGF0YQorI2RlZmluZSBCSU9fZ2V0X2V4X2RhdGEgICAgICAgICAgICB3b2xmU1NMX0JJT19nZXRfZXhfZGF0YQorCisvKiBoZWxwZXIgdG8gc2V0IHNwZWNpZmljIHJldHJ5L3JlYWQgZmxhZ3MgKi8KKyNkZWZpbmUgQklPX3NldF9yZXRyeV9yZWFkKGJpbylcCisgICAgd29sZlNTTF9CSU9fc2V0X2ZsYWdzKChiaW8pLCBXT0xGU1NMX0JJT19GTEFHX1JFVFJZIHwgV09MRlNTTF9CSU9fRkxBR19SRUFEKQorI2RlZmluZSBCSU9fc2V0X3JldHJ5X3dyaXRlKGJpbylcCisgICAgd29sZlNTTF9CSU9fc2V0X2ZsYWdzKChiaW8pLCBXT0xGU1NMX0JJT19GTEFHX1JFVFJZIHwgV09MRlNTTF9CSU9fRkxBR19XUklURSkKKworI2RlZmluZSBCSU9fY2xlYXJfcmV0cnlfZmxhZ3MgICAgICB3b2xmU1NMX0JJT19jbGVhcl9yZXRyeV9mbGFncworCisjZGVmaW5lIEJJT19tZXRoX25ldyAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX21ldGhfbmV3CisjZGVmaW5lIEJJT19tZXRoX3NldF93cml0ZSAgICAgICAgIHdvbGZTU0xfQklPX21ldGhfc2V0X3dyaXRlCisjZGVmaW5lIEJJT19tZXRoX2ZyZWUgICAgICAgICAgICAgIHdvbGZTU0xfQklPX21ldGhfZnJlZQorI2RlZmluZSBCSU9fbWV0aF9zZXRfd3JpdGUgICAgICAgICB3b2xmU1NMX0JJT19tZXRoX3NldF93cml0ZQorI2RlZmluZSBCSU9fbWV0aF9zZXRfcmVhZCAgICAgICAgICB3b2xmU1NMX0JJT19tZXRoX3NldF9yZWFkCisjZGVmaW5lIEJJT19tZXRoX3NldF9wdXRzICAgICAgICAgIHdvbGZTU0xfQklPX21ldGhfc2V0X3B1dHMKKyNkZWZpbmUgQklPX21ldGhfc2V0X2dldHMgICAgICAgICAgd29sZlNTTF9CSU9fbWV0aF9zZXRfZ2V0cworI2RlZmluZSBCSU9fbWV0aF9zZXRfY3RybCAgICAgICAgICB3b2xmU1NMX0JJT19tZXRoX3NldF9jdHJsCisjZGVmaW5lIEJJT19tZXRoX3NldF9jcmVhdGUgICAgICAgIHdvbGZTU0xfQklPX21ldGhfc2V0X2NyZWF0ZQorI2RlZmluZSBCSU9fbWV0aF9zZXRfZGVzdHJveSAgICAgICB3b2xmU1NMX0JJT19tZXRoX3NldF9kZXN0cm95CisKKyNkZWZpbmUgQklPX3NucHJpbnRmICAgICAgICAgICAgICAgWFNOUFJJTlRGCisKKy8qIEJJTyBDVFJMICovCisjZGVmaW5lIEJJT19DVFJMX1JFU0VUICAgICAgICAgICAgIDEKKyNkZWZpbmUgQklPX0NUUkxfRU9GICAgICAgICAgICAgICAgMgorI2RlZmluZSBCSU9fQ1RSTF9JTkZPICAgICAgICAgICAgICAzCisjZGVmaW5lIEJJT19DVFJMX1BVU0ggICAgICAgICAgICAgIDYKKyNkZWZpbmUgQklPX0NUUkxfUE9QICAgICAgICAgICAgICAgNworI2RlZmluZSBCSU9fQ1RSTF9HRVRfQ0xPU0UgICAgICAgICA4CisjZGVmaW5lIEJJT19DVFJMX1NFVF9DTE9TRSAgICAgICAgIDkKKyNkZWZpbmUgQklPX0NUUkxfUEVORElORyAgICAgICAgICAgMTAKKyNkZWZpbmUgQklPX0NUUkxfRkxVU0ggICAgICAgICAgICAgMTEKKyNkZWZpbmUgQklPX0NUUkxfRFVQICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQklPX0NUUkxfV1BFTkRJTkcgICAgICAgICAgMTMKKworI2RlZmluZSBCSU9fQ19TRVRfRklMRV9QVFIgICAgICAgICAgICAgIDEwNgorI2RlZmluZSBCSU9fQ19HRVRfRklMRV9QVFIgICAgICAgICAgICAgIDEwNworI2RlZmluZSBCSU9fQ19TRVRfRklMRU5BTUUgICAgICAgICAgICAgIDEwOAorI2RlZmluZSBCSU9fQ19TRVRfQlVGX01FTSAgICAgICAgICAgICAgIDExNAorI2RlZmluZSBCSU9fQ19HRVRfQlVGX01FTV9QVFIgICAgICAgICAgIDExNQorI2RlZmluZSBCSU9fQ19GSUxFX1NFRUsgICAgICAgICAgICAgICAgIDEyOAorI2RlZmluZSBCSU9fQ19TRVRfQlVGX01FTV9FT0ZfUkVUVVJOICAgIDEzMAorI2RlZmluZSBCSU9fQ19TRVRfV1JJVEVfQlVGX1NJWkUgICAgICAgIDEzNgorI2RlZmluZSBCSU9fQ19NQUtFX0JJT19QQUlSICAgICAgICAgICAgIDEzOAorCisjZGVmaW5lIEJJT19DVFJMX0RHUkFNX1FVRVJZX01UVSAgIDQwCisKKyNkZWZpbmUgQklPX0ZQX1RFWFQgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBCSU9fTk9DTE9TRSAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEJJT19DTE9TRSAgICAgICAgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBCSU9fRlBfV1JJVEUgICAgICAgICAgICAgICAweDA0CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIFdPTEZTU0xfQklPX0hfICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvYm4uaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvYm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmMyODgwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9ibi5oCkBAIC0wLDAgKzEsMjI2IEBACisvKiBibi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogYm4uaCBmb3Igb3BlbnNzbCAqLworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL29wZW5zc2wvYm4uaAorICAgIFxicmllZiBibi5oIGZvciBvcGVuc3NsCisqLworCisKKyNpZm5kZWYgV09MRlNTTF9CTl9IXworI2RlZmluZSBXT0xGU1NMX0JOX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ludGVnZXIuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9CSUdOVU0geworICAgIGludCBuZWc7ICAgICAgICAvKiBvcGVuc3NoIGRlZmVyZW5jZSAqLworICAgIHZvaWQgKmludGVybmFsOyAvKiBvdXIgYmlnIG51bSAqLworI2lmIGRlZmluZWQoV09MRlNTTF9TUF9NQVRIKSB8fCBkZWZpbmVkKFdPTEZTU0xfU1BfTUFUSF9BTEwpCisgICAgc3BfaW50IGZwOworI2VsaWYgZGVmaW5lZChVU0VfRkFTVF9NQVRIKSAmJiAhZGVmaW5lZChIQVZFX1dPTEZfQklHSU5UKQorICAgIGZwX2ludCBmcDsKKyNlbmRpZgorfSBXT0xGU1NMX0JJR05VTTsKKworCisjZGVmaW5lIEJOX1VMT05HIFdPTEZTU0xfQk5fVUxPTkcKKyNkZWZpbmUgV09MRlNTTF9CTl9VTE9ORyB1bnNpZ25lZCBsb25nCisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQk5fQ1RYIFdPTEZTU0xfQk5fQ1RYOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9CTl9HRU5DQiBXT0xGU1NMX0JOX0dFTkNCOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0JOX0NUWCogd29sZlNTTF9CTl9DVFhfbmV3KHZvaWQpOworV09MRlNTTF9BUEkgdm9pZCAgICAgICAgICAgd29sZlNTTF9CTl9DVFhfaW5pdChXT0xGU1NMX0JOX0NUWCopOworV09MRlNTTF9BUEkgdm9pZCAgICAgICAgICAgd29sZlNTTF9CTl9DVFhfZnJlZShXT0xGU1NMX0JOX0NUWCopOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJR05VTSogd29sZlNTTF9CTl9uZXcodm9pZCk7CisjaWYgZGVmaW5lZChVU0VfRkFTVF9NQVRIKSAmJiAhZGVmaW5lZChIQVZFX1dPTEZfQklHSU5UKQorV09MRlNTTF9BUEkgdm9pZCAgICAgICAgICAgd29sZlNTTF9CTl9pbml0KFdPTEZTU0xfQklHTlVNICopOworI2VuZGlmCitXT0xGU1NMX0FQSSB2b2lkICAgICAgICAgICB3b2xmU1NMX0JOX2ZyZWUoV09MRlNTTF9CSUdOVU0qKTsKK1dPTEZTU0xfQVBJIHZvaWQgICAgICAgICAgIHdvbGZTU0xfQk5fY2xlYXJfZnJlZShXT0xGU1NMX0JJR05VTSopOworV09MRlNTTF9BUEkgdm9pZCAgICAgICAgICAgd29sZlNTTF9CTl9jbGVhcihXT0xGU1NMX0JJR05VTSopOworCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX3N1YihXT0xGU1NMX0JJR05VTSosIGNvbnN0IFdPTEZTU0xfQklHTlVNKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9CSUdOVU0qKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX21vZChXT0xGU1NMX0JJR05VTSosIGNvbnN0IFdPTEZTU0xfQklHTlVNKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9CSUdOVU0qLCBjb25zdCBXT0xGU1NMX0JOX0NUWCopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQk5fbW9kX2V4cChXT0xGU1NMX0JJR05VTSAqciwgY29uc3QgV09MRlNTTF9CSUdOVU0gKmEsCisgICAgICAgIGNvbnN0IFdPTEZTU0xfQklHTlVNICpwLCBjb25zdCBXT0xGU1NMX0JJR05VTSAqbSwgV09MRlNTTF9CTl9DVFggKmN0eCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CTl9tb2RfbXVsKFdPTEZTU0xfQklHTlVNICpyLCBjb25zdCBXT0xGU1NMX0JJR05VTSAqYSwKKyAgICAgICAgY29uc3QgV09MRlNTTF9CSUdOVU0gKmIsIGNvbnN0IFdPTEZTU0xfQklHTlVNICptLCBXT0xGU1NMX0JOX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfQklHTlVNKiB3b2xmU1NMX0JOX3ZhbHVlX29uZSh2b2lkKTsKKworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CTl9udW1fYnl0ZXMoY29uc3QgV09MRlNTTF9CSUdOVU0qKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX251bV9iaXRzKGNvbnN0IFdPTEZTU0xfQklHTlVNKik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX2lzX3plcm8oY29uc3QgV09MRlNTTF9CSUdOVU0qKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX2lzX29uZShjb25zdCBXT0xGU1NMX0JJR05VTSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQk5faXNfb2RkKGNvbnN0IFdPTEZTU0xfQklHTlVNKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CTl9pc19uZWdhdGl2ZShjb25zdCBXT0xGU1NMX0JJR05VTSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQk5faXNfd29yZChjb25zdCBXT0xGU1NMX0JJR05VTSosIFdPTEZTU0xfQk5fVUxPTkcpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CTl9jbXAoY29uc3QgV09MRlNTTF9CSUdOVU0qLCBjb25zdCBXT0xGU1NMX0JJR05VTSopOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CTl9ibjJiaW4oY29uc3QgV09MRlNTTF9CSUdOVU0qLCB1bnNpZ25lZCBjaGFyKik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJR05VTSogd29sZlNTTF9CTl9iaW4yYm4oY29uc3QgdW5zaWduZWQgY2hhciosIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQklHTlVNKiByZXQpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9tYXNrX2JpdHMoV09MRlNTTF9CSUdOVU0qLCBpbnQgbik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX3BzZXVkb19yYW5kKFdPTEZTU0xfQklHTlVNKiwgaW50IGJpdHMsIGludCB0b3AsCisgICAgICAgIGludCBib3R0b20pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQk5fcmFuZChXT0xGU1NMX0JJR05VTSosIGludCBiaXRzLCBpbnQgdG9wLCBpbnQgYm90dG9tKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX2lzX2JpdF9zZXQoY29uc3QgV09MRlNTTF9CSUdOVU0qLCBpbnQgbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CTl9oZXgyYm4oV09MRlNTTF9CSUdOVU0qKiwgY29uc3QgY2hhciogc3RyKTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9CSUdOVU0qIHdvbGZTU0xfQk5fZHVwKGNvbnN0IFdPTEZTU0xfQklHTlVNKik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJR05VTSogd29sZlNTTF9CTl9jb3B5KFdPTEZTU0xfQklHTlVNKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9CSUdOVU0qKTsKKworV09MRlNTTF9BUEkgaW50ICAgd29sZlNTTF9CTl9kZWMyYm4oV09MRlNTTF9CSUdOVU0qKiwgY29uc3QgY2hhciogc3RyKTsKK1dPTEZTU0xfQVBJIGNoYXIqIHdvbGZTU0xfQk5fYm4yZGVjKGNvbnN0IFdPTEZTU0xfQklHTlVNKik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX2xzaGlmdChXT0xGU1NMX0JJR05VTSosIGNvbnN0IFdPTEZTU0xfQklHTlVNKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX2FkZF93b3JkKFdPTEZTU0xfQklHTlVNKiwgV09MRlNTTF9CTl9VTE9ORyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CTl9zZXRfYml0KFdPTEZTU0xfQklHTlVNKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX2NsZWFyX2JpdChXT0xGU1NMX0JJR05VTSosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CTl9zZXRfd29yZChXT0xGU1NMX0JJR05VTSosIFdPTEZTU0xfQk5fVUxPTkcpOworV09MRlNTTF9BUEkgV09MRlNTTF9CTl9VTE9ORyB3b2xmU1NMX0JOX2dldF93b3JkKGNvbnN0IFdPTEZTU0xfQklHTlVNKik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JOX2FkZChXT0xGU1NMX0JJR05VTSosIFdPTEZTU0xfQklHTlVNKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0JJR05VTSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQk5fbW9kX2FkZChXT0xGU1NMX0JJR05VTSAqciwgY29uc3QgV09MRlNTTF9CSUdOVU0gKmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfQklHTlVNICpiLCBjb25zdCBXT0xGU1NMX0JJR05VTSAqbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9CTl9DVFggKmN0eCk7CitXT0xGU1NMX0FQSSBjaGFyICp3b2xmU1NMX0JOX2JuMmhleChjb25zdCBXT0xGU1NMX0JJR05VTSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQk5faXNfcHJpbWVfZXgoY29uc3QgV09MRlNTTF9CSUdOVU0qLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0JOX0NUWCosIFdPTEZTU0xfQk5fR0VOQ0IqKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQk5fVUxPTkcgd29sZlNTTF9CTl9tb2Rfd29yZChjb25zdCBXT0xGU1NMX0JJR05VTSosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9CTl9VTE9ORyk7CisjaWYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgIWRlZmluZWQoTk9fU1RESU9fRklMRVNZU1RFTSkKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CTl9wcmludF9mcChYRklMRSwgY29uc3QgV09MRlNTTF9CSUdOVU0qKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQk5fcnNoaWZ0KFdPTEZTU0xfQklHTlVNKiwgY29uc3QgV09MRlNTTF9CSUdOVU0qLCBpbnQpOworV09MRlNTTF9BUEkgV09MRlNTTF9CSUdOVU0gKndvbGZTU0xfQk5fQ1RYX2dldChXT0xGU1NMX0JOX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9CTl9DVFhfc3RhcnQoV09MRlNTTF9CTl9DVFggKmN0eCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJR05VTSAqd29sZlNTTF9CTl9tb2RfaW52ZXJzZShXT0xGU1NMX0JJR05VTSosIFdPTEZTU0xfQklHTlVNKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0JJR05VTSosIFdPTEZTU0xfQk5fQ1RYICpjdHgpOworCit0eXBlZGVmIFdPTEZTU0xfQklHTlVNIEJJR05VTTsKK3R5cGVkZWYgV09MRlNTTF9CTl9DVFggQk5fQ1RYOwordHlwZWRlZiBXT0xGU1NMX0JOX0dFTkNCIEJOX0dFTkNCOworCisjZGVmaW5lIEJOX0NUWF9uZXcgICAgICAgIHdvbGZTU0xfQk5fQ1RYX25ldworI2RlZmluZSBCTl9DVFhfaW5pdCAgICAgICB3b2xmU1NMX0JOX0NUWF9pbml0CisjZGVmaW5lIEJOX0NUWF9mcmVlICAgICAgIHdvbGZTU0xfQk5fQ1RYX2ZyZWUKKworI2RlZmluZSBCTl9uZXcgICAgICAgIHdvbGZTU0xfQk5fbmV3CisjZGVmaW5lIEJOX2luaXQgICAgICAgd29sZlNTTF9CTl9pbml0CisjZGVmaW5lIEJOX2ZyZWUgICAgICAgd29sZlNTTF9CTl9mcmVlCisjZGVmaW5lIEJOX2NsZWFyX2ZyZWUgd29sZlNTTF9CTl9jbGVhcl9mcmVlCisjZGVmaW5lIEJOX2NsZWFyICAgICAgd29sZlNTTF9CTl9jbGVhcgorCisjZGVmaW5lIEJOX251bV9ieXRlcyB3b2xmU1NMX0JOX251bV9ieXRlcworI2RlZmluZSBCTl9udW1fYml0cyAgd29sZlNTTF9CTl9udW1fYml0cworCisjZGVmaW5lIEJOX2lzX3plcm8gIHdvbGZTU0xfQk5faXNfemVybworI2RlZmluZSBCTl9pc19vbmUgICB3b2xmU1NMX0JOX2lzX29uZQorI2RlZmluZSBCTl9pc19vZGQgICB3b2xmU1NMX0JOX2lzX29kZAorI2RlZmluZSBCTl9pc19uZWdhdGl2ZSB3b2xmU1NMX0JOX2lzX25lZ2F0aXZlCisjZGVmaW5lIEJOX2lzX3dvcmQgIHdvbGZTU0xfQk5faXNfd29yZAorCisjZGVmaW5lIEJOX2NtcCAgICB3b2xmU1NMX0JOX2NtcAorCisjZGVmaW5lIEJOX2JuMmJpbiAgd29sZlNTTF9CTl9ibjJiaW4KKyNkZWZpbmUgQk5fYmluMmJuICB3b2xmU1NMX0JOX2JpbjJibgorCisjZGVmaW5lIEJOX21vZCAgICAgICB3b2xmU1NMX0JOX21vZAorI2RlZmluZSBCTl9tb2RfZXhwICAgd29sZlNTTF9CTl9tb2RfZXhwCisjZGVmaW5lIEJOX21vZF9tdWwgICB3b2xmU1NMX0JOX21vZF9tdWwKKyNkZWZpbmUgQk5fc3ViICAgICAgIHdvbGZTU0xfQk5fc3ViCisjZGVmaW5lIEJOX3ZhbHVlX29uZSB3b2xmU1NMX0JOX3ZhbHVlX29uZQorCisjZGVmaW5lIEJOX21hc2tfYml0cyB3b2xmU1NMX21hc2tfYml0cworCisjZGVmaW5lIEJOX3BzZXVkb19yYW5kIHdvbGZTU0xfQk5fcHNldWRvX3JhbmQKKyNkZWZpbmUgQk5fcmFuZCAgICAgICAgd29sZlNTTF9CTl9yYW5kCisjZGVmaW5lIEJOX2lzX2JpdF9zZXQgIHdvbGZTU0xfQk5faXNfYml0X3NldAorI2RlZmluZSBCTl9oZXgyYm4gICAgICB3b2xmU1NMX0JOX2hleDJibgorCisjZGVmaW5lIEJOX2R1cCAgd29sZlNTTF9CTl9kdXAKKyNkZWZpbmUgQk5fY29weSB3b2xmU1NMX0JOX2NvcHkKKworI2RlZmluZSBCTl9nZXRfd29yZCB3b2xmU1NMX0JOX2dldF93b3JkCisjZGVmaW5lIEJOX3NldF93b3JkIHdvbGZTU0xfQk5fc2V0X3dvcmQKKworI2RlZmluZSBCTl9kZWMyYm4gd29sZlNTTF9CTl9kZWMyYm4KKyNkZWZpbmUgQk5fYm4yZGVjIHdvbGZTU0xfQk5fYm4yZGVjCisjZGVmaW5lIEJOX2JuMmhleCB3b2xmU1NMX0JOX2JuMmhleAorCisjZGVmaW5lIEJOX2xzaGlmdCB3b2xmU1NMX0JOX2xzaGlmdAorI2RlZmluZSBCTl9hZGRfd29yZCB3b2xmU1NMX0JOX2FkZF93b3JkCisjZGVmaW5lIEJOX2FkZCB3b2xmU1NMX0JOX2FkZAorI2RlZmluZSBCTl9tb2RfYWRkIHdvbGZTU0xfQk5fbW9kX2FkZAorI2RlZmluZSBCTl9zZXRfd29yZCB3b2xmU1NMX0JOX3NldF93b3JkCisjZGVmaW5lIEJOX3NldF9iaXQgd29sZlNTTF9CTl9zZXRfYml0CisjZGVmaW5lIEJOX2NsZWFyX2JpdCB3b2xmU1NMX0JOX2NsZWFyX2JpdAorCisKKyNkZWZpbmUgQk5faXNfcHJpbWVfZXggd29sZlNTTF9CTl9pc19wcmltZV9leAorI2RlZmluZSBCTl9wcmludF9mcCB3b2xmU1NMX0JOX3ByaW50X2ZwCisjZGVmaW5lIEJOX3JzaGlmdCB3b2xmU1NMX0JOX3JzaGlmdAorI2RlZmluZSBCTl9tb2Rfd29yZCB3b2xmU1NMX0JOX21vZF93b3JkCisKKyNkZWZpbmUgQk5fQ1RYX2dldCB3b2xmU1NMX0JOX0NUWF9nZXQKKyNkZWZpbmUgQk5fQ1RYX3N0YXJ0IHdvbGZTU0xfQk5fQ1RYX3N0YXJ0CisKKyNkZWZpbmUgQk5fbW9kX2ludmVyc2Ugd29sZlNTTF9CTl9tb2RfaW52ZXJzZQorCisjZGVmaW5lIEJOX3NldF9mbGFncyh4MSwgeDIpCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIpICYmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDEwMDAwMEwKKyNkZWZpbmUgQk5fZ2V0X3JmYzI0MDlfcHJpbWVfNzY4ICAgd29sZlNTTF9ESF83NjhfcHJpbWUKKyNkZWZpbmUgQk5fZ2V0X3JmYzI0MDlfcHJpbWVfMTAyNCAgd29sZlNTTF9ESF8xMDI0X3ByaW1lCisjZGVmaW5lIEJOX2dldF9yZmMzNTI2X3ByaW1lXzE1MzYgIHdvbGZTU0xfREhfMTUzNl9wcmltZQorI2RlZmluZSBCTl9nZXRfcmZjMzUyNl9wcmltZV8yMDQ4ICB3b2xmU1NMX0RIXzIwNDhfcHJpbWUKKyNkZWZpbmUgQk5fZ2V0X3JmYzM1MjZfcHJpbWVfMzA3MiAgd29sZlNTTF9ESF8zMDcyX3ByaW1lCisjZGVmaW5lIEJOX2dldF9yZmMzNTI2X3ByaW1lXzQwOTYgIHdvbGZTU0xfREhfNDA5Nl9wcmltZQorI2RlZmluZSBCTl9nZXRfcmZjMzUyNl9wcmltZV82MTQ0ICB3b2xmU1NMX0RIXzYxNDRfcHJpbWUKKyNkZWZpbmUgQk5fZ2V0X3JmYzM1MjZfcHJpbWVfODE5MiAgd29sZlNTTF9ESF84MTkyX3ByaW1lCisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworCisjZW5kaWYgLyogV09MRlNTTF9fSF8gKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvYnVmZmVyLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmQ5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2J1ZmZlci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIGJ1ZmZlci5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaWZuZGVmIFdPTEZTU0xfQlVGRkVSX0hfCisjZGVmaW5lIFdPTEZTU0xfQlVGRkVSX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9zc2wuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0JVRl9NRU0qIHdvbGZTU0xfQlVGX01FTV9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CVUZfTUVNX2dyb3coV09MRlNTTF9CVUZfTUVNKiBidWYsIHNpemVfdCBsZW4pOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0JVRl9NRU1fZnJlZShXT0xGU1NMX0JVRl9NRU0qIGJ1Zik7CitXT0xGU1NMX0FQSSBzaXplX3Qgd29sZlNTTF9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZHN0U2l6ZSk7CitXT0xGU1NMX0FQSSBzaXplX3Qgd29sZlNTTF9zdHJsY2F0KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZHN0U2l6ZSk7CisKKworI2RlZmluZSBCVUZfTUVNX25ldyAgd29sZlNTTF9CVUZfTUVNX25ldworI2RlZmluZSBCVUZfTUVNX2dyb3cgd29sZlNTTF9CVUZfTUVNX2dyb3cKKyNkZWZpbmUgQlVGX01FTV9mcmVlIHdvbGZTU0xfQlVGX01FTV9mcmVlCisKKyNkZWZpbmUgQlVGX3N0cmR1cCBzdHJkdXAKKyNkZWZpbmUgQlVGX3N0cmxjcHkgd29sZlNTTF9zdHJsY3B5CisjZGVmaW5lIEJVRl9zdHJsY2F0IHdvbGZTU0xfc3RybGNhdAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZTU0xfQlVGRkVSX0hfICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2Ntcy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9jbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzgyYWJiCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9jbXMuaApAQCAtMCwwICsxLDI2IEBACisvKiBjbXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKyNpZm5kZWYgV09MRlNTTF9DTVNfSF8KKyNkZWZpbmUgV09MRlNTTF9DTVNfSF8KKworCisjZW5kaWYgLyogV09MRlNTTF9DTVNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvY29uZi5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9jb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxYmMwNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvY29uZi5oCkBAIC0wLDAgKzEsMTA2IEBACisvKiBjb25mLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiBjb25mLmggZm9yIG9wZW5TU0wgKi8KKworI2lmbmRlZiBXT0xGU1NMX2NvbmZfSF8KKyNkZWZpbmUgV09MRlNTTF9jb25mX0hfCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvdmVyc2lvbi5oPgorCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0NPTkZfVkFMVUUgeworICAgIGNoYXIgKnNlY3Rpb247CisgICAgY2hhciAqbmFtZTsKKyAgICBjaGFyICp2YWx1ZTsKK30gV09MRlNTTF9DT05GX1ZBTFVFOworCisvKiBzc2wuaCByZXF1aXJlcyBXT0xGU1NMX0NPTkZfVkFMVUUgKi8KKyNpbmNsdWRlIDx3b2xmc3NsL3NzbC5oPgorCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0NPTkYgeworICAgIHZvaWQgKm1ldGhfZGF0YTsKKyAgICBXT0xGX0xIQVNIX09GKFdPTEZTU0xfQ09ORl9WQUxVRSkgKmRhdGE7Cit9IFdPTEZTU0xfQ09ORjsKKwordHlwZWRlZiBXT0xGU1NMX0NPTkYgQ09ORjsKK3R5cGVkZWYgV09MRlNTTF9DT05GX1ZBTFVFIENPTkZfVkFMVUU7CisKKyNpZmRlZiBPUEVOU1NMX0VYVFJBCisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQ09ORl9WQUxVRSAqd29sZlNTTF9DT05GX1ZBTFVFX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NPTkZfYWRkX3N0cmluZyhXT0xGU1NMX0NPTkYgKmNvbmYsCisgICAgICAgIFdPTEZTU0xfQ09ORl9WQUxVRSAqc2VjdGlvbiwgV09MRlNTTF9DT05GX1ZBTFVFICp2YWx1ZSk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfWDUwOVYzX2NvbmZfZnJlZShXT0xGU1NMX0NPTkZfVkFMVUUgKnZhbCk7CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQ09ORiAqd29sZlNTTF9OQ09ORl9uZXcodm9pZCAqbWV0aCk7CitXT0xGU1NMX0FQSSBjaGFyICp3b2xmU1NMX05DT05GX2dldF9zdHJpbmcoY29uc3QgV09MRlNTTF9DT05GICpjb25mLAorICAgICAgICBjb25zdCBjaGFyICpncm91cCwgY29uc3QgY2hhciAqbmFtZSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9OQ09ORl9nZXRfbnVtYmVyKGNvbnN0IENPTkYgKmNvbmYsIGNvbnN0IGNoYXIgKmdyb3VwLAorICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBsb25nICpyZXN1bHQpOworV09MRlNTTF9BUEkgV09MRlNTTF9TVEFDSyAqd29sZlNTTF9OQ09ORl9nZXRfc2VjdGlvbigKKyAgICAgICAgY29uc3QgV09MRlNTTF9DT05GICpjb25mLCBjb25zdCBjaGFyICpzZWN0aW9uKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX05DT05GX2xvYWQoV09MRlNTTF9DT05GICpjb25mLCBjb25zdCBjaGFyICpmaWxlLCBsb25nICplbGluZSk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfTkNPTkZfZnJlZShXT0xGU1NMX0NPTkYgKmNvbmYpOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0NPTkZfVkFMVUUgKndvbGZTU0xfbGhfV09MRlNTTF9DT05GX1ZBTFVFX3JldHJpZXZlKAorICAgICAgICBXT0xGX0xIQVNIX09GKFdPTEZTU0xfQ09ORl9WQUxVRSkgKnNrLCBXT0xGU1NMX0NPTkZfVkFMVUUgKmRhdGEpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DT05GX21vZHVsZXNfbG9hZChjb25zdCBXT0xGU1NMX0NPTkYgKmNuZiwgY29uc3QgY2hhciAqYXBwbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQ09ORl9WQUxVRSAqd29sZlNTTF9DT05GX25ld19zZWN0aW9uKFdPTEZTU0xfQ09ORiAqY29uZiwKKyAgICAgICAgY29uc3QgY2hhciAqc2VjdGlvbik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0NPTkZfVkFMVUUgKndvbGZTU0xfQ09ORl9nZXRfc2VjdGlvbihXT0xGU1NMX0NPTkYgKmNvbmYsCisgICAgICAgIGNvbnN0IGNoYXIgKnNlY3Rpb24pOworCisjZGVmaW5lIHNrX0NPTkZfVkFMVUVfbmV3ICAgICAgICAgICAgICAgd29sZlNTTF9za19DT05GX1ZBTFVFX25ldworI2RlZmluZSBza19DT05GX1ZBTFVFX2ZyZWUgICAgICAgICAgICAgIHdvbGZTU0xfc2tfQ09ORl9WQUxVRV9mcmVlCisjZGVmaW5lIHNrX0NPTkZfVkFMVUVfcG9wX2ZyZWUoYSxiKSAgICAgd29sZlNTTF9za19DT05GX1ZBTFVFX2ZyZWUoYSkKKyNkZWZpbmUgc2tfQ09ORl9WQUxVRV9udW0gICAgICAgICAgICAgICB3b2xmU1NMX3NrX0NPTkZfVkFMVUVfbnVtCisjZGVmaW5lIHNrX0NPTkZfVkFMVUVfdmFsdWUgICAgICAgICAgICAgd29sZlNTTF9za19DT05GX1ZBTFVFX3ZhbHVlCisKKyNkZWZpbmUgbGhfQ09ORl9WQUxVRV9yZXRyaWV2ZSAgICAgICAgICB3b2xmU1NMX2xoX1dPTEZTU0xfQ09ORl9WQUxVRV9yZXRyaWV2ZQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX2luc2VydCAgICAgICAgICAgIHdvbGZTU0xfc2tfQ09ORl9WQUxVRV9wdXNoCisKKyNkZWZpbmUgTkNPTkZfbmV3ICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX05DT05GX25ldworI2RlZmluZSBOQ09ORl9mcmVlICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfTkNPTkZfZnJlZQorI2RlZmluZSBOQ09ORl9nZXRfc3RyaW5nICAgICAgICAgICAgICAgIHdvbGZTU0xfTkNPTkZfZ2V0X3N0cmluZworI2RlZmluZSBOQ09ORl9nZXRfc2VjdGlvbiAgICAgICAgICAgICAgIHdvbGZTU0xfTkNPTkZfZ2V0X3NlY3Rpb24KKyNkZWZpbmUgTkNPTkZfZ2V0X251bWJlciAgICAgICAgICAgICAgICB3b2xmU1NMX05DT05GX2dldF9udW1iZXIKKyNkZWZpbmUgTkNPTkZfbG9hZCAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX05DT05GX2xvYWQKKworI2RlZmluZSBDT05GX21vZHVsZXNfbG9hZCAgICAgICAgICAgICAgIHdvbGZTU0xfQ09ORl9tb2R1bGVzX2xvYWQKKyNkZWZpbmUgX0NPTkZfbmV3X3NlY3Rpb24gICAgICAgICAgICAgICB3b2xmU1NMX0NPTkZfbmV3X3NlY3Rpb24KKyNkZWZpbmUgX0NPTkZfZ2V0X3NlY3Rpb24gICAgICAgICAgICAgICB3b2xmU1NMX0NPTkZfZ2V0X3NlY3Rpb24KKworI2RlZmluZSBYNTA5VjNfY29uZl9mcmVlICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOVYzX2NvbmZfZnJlZQorCisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSAqLworCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogV09MRlNTTF9jb25mX0hfICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2NyeXB0by5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9jcnlwdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjEyOGZlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9jcnlwdG8uaApAQCAtMCwwICsxLDEyOSBAQAorLyogY3J5cHRvLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiBjcnlwdG8uaCBmb3Igb3BlblNTTCAqLworCisjaWZuZGVmIFdPTEZTU0xfQ1JZUFRPX0hfCisjZGVmaW5lIFdPTEZTU0xfQ1JZUFRPX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL29wZW5zc2x2Lmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2NvbmYuaD4KKworI2lmZGVmIFdPTEZTU0xfUFJFRklYCisjaW5jbHVkZSAicHJlZml4X2NyeXB0by5oIgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfSU5JVF9TRVRUSU5HUyB7CisgICAgY2hhciogYXBwbmFtZTsKK30gV09MRlNTTF9JTklUX1NFVFRJTkdTOworCit0eXBlZGVmIFdPTEZTU0xfSU5JVF9TRVRUSU5HUyBPUEVOU1NMX0lOSVRfU0VUVElOR1M7CisKK1dPTEZTU0xfQVBJIGNvbnN0IGNoYXIqICAgd29sZlNTTGVheV92ZXJzaW9uKGludCB0eXBlKTsKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGxvbmcgd29sZlNTTGVheSh2b2lkKTsKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGxvbmcgd29sZlNTTF9PcGVuU1NMX3ZlcnNpb25fbnVtKHZvaWQpOworCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX09QRU5TU0xfZnJlZSh2b2lkKik7CitXT0xGU1NMX0FQSSB2b2lkICp3b2xmU1NMX09QRU5TU0xfbWFsbG9jKHNpemVfdCBhKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX09QRU5TU0xfaGV4Y2hhcjJpbnQodW5zaWduZWQgY2hhciBjKTsKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGNoYXIgKndvbGZTU0xfT1BFTlNTTF9oZXhzdHIyYnVmKGNvbnN0IGNoYXIgKnN0ciwgbG9uZyAqbGVuKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfT1BFTlNTTF9pbml0X2NyeXB0byh3b3JkNjQgb3B0cywgY29uc3QgT1BFTlNTTF9JTklUX1NFVFRJTkdTICpzZXR0aW5ncyk7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9DUllQVE9fVEhSRUFESUQgeworICAgIGludCBkdW1teTsKK31XT0xGU1NMX0NSWVBUT19USFJFQURJRDsKK3R5cGVkZWYgc3RydWN0IGNyeXB0b190aHJlYWRpZF9zdCAgIENSWVBUT19USFJFQURJRDsKKworI2RlZmluZSBjcnlwdG9fdGhyZWFkaWRfc3QgICAgICAgICAgV09MRlNTTF9DUllQVE9fVEhSRUFESUQKKyNkZWZpbmUgQ1JZUFRPX1RIUkVBRElEICAgICAgICAgICAgIFdPTEZTU0xfQ1JZUFRPX1RIUkVBRElECisKKyNkZWZpbmUgU1NMZWF5X3ZlcnNpb24gd29sZlNTTGVheV92ZXJzaW9uCisjZGVmaW5lIFNTTGVheSB3b2xmU1NMZWF5CisjZGVmaW5lIE9wZW5TU0xfdmVyc2lvbl9udW0gd29sZlNTTF9PcGVuU1NMX3ZlcnNpb25fbnVtCisKKyNpZmRlZiBXT0xGU1NMX1FUCisgICAgI2RlZmluZSBTU0xFQVlfVkVSU0lPTiAweDEwMDAxMDAwTAorI2Vsc2UKKyAgICAjZGVmaW5lIFNTTEVBWV9WRVJTSU9OIDB4MDA5MDYwMGZMCisjZW5kaWYKKyNkZWZpbmUgU1NMRUFZX1ZFUlNJT05fTlVNQkVSIFNTTEVBWV9WRVJTSU9OCisjZGVmaW5lIENSWVBUT19sb2NrIHdjX0xvY2tNdXRleF9leAorCisvKiB0aGlzIGZ1bmN0aW9uIHdhcyB1c2VkIHRvIHNldCB0aGUgZGVmYXVsdCBtYWxsb2MsIGZyZWUsIGFuZCByZWFsbG9jICovCisjZGVmaW5lIENSWVBUT19tYWxsb2NfaW5pdCgpIDAgLyogQ1JZUFRPX21hbGxvY19pbml0IGlzIG5vdCBuZWVkZWQgKi8KKworI2RlZmluZSBPUEVOU1NMX2ZyZWUgd29sZlNTTF9PUEVOU1NMX2ZyZWUKKyNkZWZpbmUgT1BFTlNTTF9tYWxsb2Mgd29sZlNTTF9PUEVOU1NMX21hbGxvYworI2RlZmluZSBPUEVOU1NMX2hleGNoYXIyaW50IHdvbGZTU0xfT1BFTlNTTF9oZXhjaGFyMmludAorI2RlZmluZSBPUEVOU1NMX2hleHN0cjJidWYgd29sZlNTTF9PUEVOU1NMX2hleHN0cjJidWYKKworI2RlZmluZSBPUEVOU1NMX0lOSVRfRU5HSU5FX0FMTF9CVUlMVElOIDB4MDAwMDAwMDFMCisjZGVmaW5lIE9QRU5TU0xfSU5JVF9BRERfQUxMX0NJUEhFUlMgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgT1BFTlNTTF9JTklUX0FERF9BTExfRElHRVNUUyAgICAweDAwMDAwMDA4TAorI2RlZmluZSBPUEVOU1NMX0lOSVRfTE9BRF9DT05GSUcgICAgICAgIDB4MDAwMDAwNDBMCisKKyNkZWZpbmUgT1BFTlNTTF9pbml0X2NyeXB0byB3b2xmU1NMX09QRU5TU0xfaW5pdF9jcnlwdG8KKworI2lmZGVmIFdPTEZTU0xfT1BFTlZQTgorIyBkZWZpbmUgT1BFTlNTTF9hc3NlcnQoZSkgXAorICAgIGlmICghKGUpKSB7IFwKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCB3b2xmU1NMIGludGVybmFsIGVycm9yOiBhc3NlcnRpb24gZmFpbGVkOiAiICNlLCBcCisgICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgICAgICByYWlzZShTSUdBQlJUKTsgXAorICAgICAgICBfZXhpdCgzKTsgXAorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChIQVZFX1NUVU5ORUwpIHx8IGRlZmluZWQoV09MRlNTTF9OR0lOWCkgfHwgXAorICAgIGRlZmluZWQoV09MRlNTTF9IQVBST1hZKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoSEFWRV9FWF9EQVRBKQorI2RlZmluZSBDUllQVE9fc2V0X21lbV9leF9mdW5jdGlvbnMgICAgICB3b2xmU1NMX0NSWVBUT19zZXRfbWVtX2V4X2Z1bmN0aW9ucworI2RlZmluZSBGSVBTX21vZGUgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0ZJUFNfbW9kZQorI2RlZmluZSBGSVBTX21vZGVfc2V0ICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0ZJUFNfbW9kZV9zZXQKK3R5cGVkZWYgc3RydWN0IENSWVBUT19FWF9EQVRBICAgICAgICAgICAgQ1JZUFRPX0VYX0RBVEE7Cit0eXBlZGVmIHZvaWQgKENSWVBUT19mcmVlX2Z1bmMpKHZvaWQqcGFyZW50LCB2b2lkKnB0ciwgQ1JZUFRPX0VYX0RBVEEgKmFkLCBpbnQgaWR4LAorICAgICAgICBsb25nIGFyZ2wsIHZvaWQqIGFyZ3ApOworI2RlZmluZSBDUllQVE9fVEhSRUFESURfc2V0X2NhbGxiYWNrIHdvbGZTU0xfVEhSRUFESURfc2V0X2NhbGxiYWNrCisjZGVmaW5lIENSWVBUT19USFJFQURJRF9zZXRfbnVtZXJpYyB3b2xmU1NMX1RIUkVBRElEX3NldF9udW1lcmljCisjZGVmaW5lIENSWVBUT19USFJFQURJRF9jdXJyZW50ICAgICAgd29sZlNTTF9USFJFQURJRF9jdXJyZW50CisjZGVmaW5lIENSWVBUT19USFJFQURJRF9oYXNoICAgICAgICAgd29sZlNTTF9USFJFQURJRF9oYXNoCisKKyNkZWZpbmUgQ1JZUFRPX3JfbG9jayB3Y19Mb2NrTXV0ZXhfZXgKKyNkZWZpbmUgQ1JZUFRPX3VubG9jayB3Y19Mb2NrTXV0ZXhfZXgKKworI2RlZmluZSBDUllQVE9fVEhSRUFEX2xvY2sgd2NfTG9ja011dGV4CisjZGVmaW5lIENSWVBUT19USFJFQURfcl9sb2NrIHdjX0xvY2tNdXRleAorI2RlZmluZSBDUllQVE9fVEhSRUFEX3VubG9jayB3Y19VbkxvY2tNdXRleAorCisjZGVmaW5lIENSWVBUT19USFJFQURfbG9ja19uZXcgd2NfSW5pdEFuZEFsbG9jTXV0ZXgKKyNkZWZpbmUgQ1JZUFRPX1RIUkVBRF9yZWFkX2xvY2sgd2NfTG9ja011dGV4CisjZGVmaW5lIENSWVBUT19USFJFQURfd3JpdGVfbG9jayB3Y19Mb2NrTXV0ZXgKKyNkZWZpbmUgQ1JZUFRPX1RIUkVBRF9sb2NrX2ZyZWUgd2NfRnJlZU11dGV4CisKKyNkZWZpbmUgQ1JZUFRPX3NldF9leF9kYXRhIHdvbGZTU0xfQ1JZUFRPX3NldF9leF9kYXRhCisKKyNlbmRpZiAvKiBPUEVOU1NMX0FMTCB8fCBIQVZFX1NUVU5ORUwgfHwgV09MRlNTTF9OR0lOWCB8fCBXT0xGU1NMX0hBUFJPWFkgfHwgSEFWRV9FWF9EQVRBICovCisKKyNlbmRpZiAvKiBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvZGVzLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTZlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2Rlcy5oCkBAIC0wLDAgKzEsMTE1IEBACisvKiBkZXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisvKiAgZGVzLmggZGVmaW5lcyBtaW5pIGRlcyBvcGVuc3NsIGNvbXBhdGliaWxpdHkgbGF5ZXIKKyAqCisgKi8KKworCisjaWZuZGVmIFdPTEZTU0xfREVTX0hfCisjZGVmaW5lIFdPTEZTU0xfREVTX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaWZuZGVmIE5PX0RFUzMKKworI2lmZGVmIFdPTEZTU0xfUFJFRklYCisjaW5jbHVkZSAicHJlZml4X2Rlcy5oIgorI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFdPTEZTU0xfREVTX2NibG9ja1s4XTsKK3R5cGVkZWYgLyogY29uc3QgKi8gV09MRlNTTF9ERVNfY2Jsb2NrIFdPTEZTU0xfY29uc3RfREVTX2NibG9jazsKK3R5cGVkZWYgV09MRlNTTF9ERVNfY2Jsb2NrIFdPTEZTU0xfREVTX2tleV9zY2hlZHVsZTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IFdPTEZTU0xfREVTX0xPTkc7CisKKworZW51bSB7CisgICAgREVTX0VOQ1JZUFQgPSAxLAorICAgIERFU19ERUNSWVBUID0gMAorfTsKKworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9ERVNfaXNfd2Vha19rZXkoV09MRlNTTF9jb25zdF9ERVNfY2Jsb2NrKiBrZXkpOworV09MRlNTTF9BUEkgV09MRlNTTF9ERVNfTE9ORyB3b2xmU1NMX0RFU19jYmNfY2tzdW0oY29uc3QgdW5zaWduZWQgY2hhciogaW4sCisgICAgICAgICAgICBXT0xGU1NMX0RFU19jYmxvY2sqIG91dCwgbG9uZyBsZW5ndGgsIFdPTEZTU0xfREVTX2tleV9zY2hlZHVsZSogc2MsCisgICAgICAgICAgICBXT0xGU1NMX2NvbnN0X0RFU19jYmxvY2sqIGl2KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0RFU19zZXRfa2V5KFdPTEZTU0xfY29uc3RfREVTX2NibG9jayogbXlEZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfREVTX2tleV9zY2hlZHVsZSoga2V5KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0RFU19zZXRfa2V5X2NoZWNrZWQoV09MRlNTTF9jb25zdF9ERVNfY2Jsb2NrKiBteURlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9ERVNfa2V5X3NjaGVkdWxlKiBrZXkpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0RFU19zZXRfa2V5X3VuY2hlY2tlZChXT0xGU1NMX2NvbnN0X0RFU19jYmxvY2sqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9ERVNfa2V5X3NjaGVkdWxlKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfREVTX2tleV9zY2hlZChXT0xGU1NMX2NvbnN0X0RFU19jYmxvY2sqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0RFU19rZXlfc2NoZWR1bGUqIHNjaGVkdWxlKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9ERVNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXRwdXQsIGxvbmcgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9ERVNfa2V5X3NjaGVkdWxlKiBzY2hlZHVsZSwgV09MRlNTTF9ERVNfY2Jsb2NrKiBpdmVjLAorICAgICAgICAgICAgICAgICAgICAgaW50IGVuYyk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfREVTX2VkZTNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIG91dHB1dCwgbG9uZyBzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9ERVNfa2V5X3NjaGVkdWxlKiBrczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfREVTX2tleV9zY2hlZHVsZSoga3MyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0RFU19rZXlfc2NoZWR1bGUqIGtzMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9ERVNfY2Jsb2NrKiBpdmVjLCBpbnQgZW5jKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9ERVNfbmNiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIG91dHB1dCwgbG9uZyBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9ERVNfa2V5X3NjaGVkdWxlKiBzY2hlZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0RFU19jYmxvY2sqIGl2ZWMsIGludCBlbmMpOworCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfREVTX3NldF9vZGRfcGFyaXR5KFdPTEZTU0xfREVTX2NibG9jayopOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0RFU19lY2JfZW5jcnlwdChXT0xGU1NMX0RFU19jYmxvY2sqLCBXT0xGU1NMX0RFU19jYmxvY2sqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9ERVNfa2V5X3NjaGVkdWxlKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0RFU19jaGVja19rZXlfcGFyaXR5KFdPTEZTU0xfREVTX2NibG9jayopOworCisKK3R5cGVkZWYgV09MRlNTTF9ERVNfY2Jsb2NrIERFU19jYmxvY2s7Cit0eXBlZGVmIFdPTEZTU0xfY29uc3RfREVTX2NibG9jayBjb25zdF9ERVNfY2Jsb2NrOwordHlwZWRlZiBXT0xGU1NMX0RFU19rZXlfc2NoZWR1bGUgREVTX2tleV9zY2hlZHVsZTsKK3R5cGVkZWYgV09MRlNTTF9ERVNfTE9ORyBERVNfTE9ORzsKKworI2RlZmluZSBERVNfY2hlY2tfa2V5KHgpIC8qIERlZmluZSBXT0xGU1NMX0NIRUNLX0RFU0tFWSB0byBjaGVjayBrZXkgKi8KKyNkZWZpbmUgREVTX2lzX3dlYWtfa2V5ICAgICAgIHdvbGZTU0xfREVTX2lzX3dlYWtfa2V5CisjZGVmaW5lIERFU19zZXRfa2V5ICAgICAgICAgICB3b2xmU1NMX0RFU19zZXRfa2V5CisjZGVmaW5lIERFU19zZXRfa2V5X2NoZWNrZWQgICB3b2xmU1NMX0RFU19zZXRfa2V5X2NoZWNrZWQKKyNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkIHdvbGZTU0xfREVTX3NldF9rZXlfdW5jaGVja2VkCisjZGVmaW5lIERFU19rZXlfc2NoZWQgICAgICAgICB3b2xmU1NMX0RFU19rZXlfc2NoZWQKKyNkZWZpbmUgREVTX2NiY19lbmNyeXB0ICAgICAgIHdvbGZTU0xfREVTX2NiY19lbmNyeXB0CisjZGVmaW5lIERFU19uY2JjX2VuY3J5cHQgICAgICB3b2xmU1NMX0RFU19uY2JjX2VuY3J5cHQKKyNkZWZpbmUgREVTX3NldF9vZGRfcGFyaXR5ICAgIHdvbGZTU0xfREVTX3NldF9vZGRfcGFyaXR5CisjZGVmaW5lIERFU19lY2JfZW5jcnlwdCAgICAgICB3b2xmU1NMX0RFU19lY2JfZW5jcnlwdAorI2RlZmluZSBERVNfZWRlM19jYmNfZW5jcnlwdCAgd29sZlNTTF9ERVNfZWRlM19jYmNfZW5jcnlwdAorI2RlZmluZSBERVNfY2JjX2Nrc3VtICAgICAgICAgd29sZlNTTF9ERVNfY2JjX2Nrc3VtCisjZGVmaW5lIERFU19jaGVja19rZXlfcGFyaXR5ICB3b2xmU1NMX0RFU19jaGVja19rZXlfcGFyaXR5CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBOT19ERVMzICovCisKKyNlbmRpZiAvKiBXT0xGU1NMX0RFU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9kaC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9kaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzBmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2RoLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qIGRoLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiBkaC5oIGZvciBvcGVuU1NMICovCisKKworI2lmbmRlZiBXT0xGU1NMX0RIX0hfCisjZGVmaW5lIFdPTEZTU0xfREhfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9ibi5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9vcGVuc3Nsdi5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZuZGVmIFdPTEZTU0xfREhfVFlQRV9ERUZJTkVEIC8qIGd1YXJkIG9uIHJlZGVjbGFyYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfREggICAgICAgICAgICBXT0xGU1NMX0RIOworI2RlZmluZSBXT0xGU1NMX0RIX1RZUEVfREVGSU5FRAorI2VuZGlmCisKK3R5cGVkZWYgV09MRlNTTF9ESCAgICAgICAgICAgICAgICAgICBESDsKKworc3RydWN0IFdPTEZTU0xfREggeworICAgIFdPTEZTU0xfQklHTlVNKiBwOworICAgIFdPTEZTU0xfQklHTlVNKiBnOworICAgIFdPTEZTU0xfQklHTlVNKiBxOworICAgIFdPTEZTU0xfQklHTlVNKiBwdWJfa2V5OyAgICAgIC8qIG9wZW5zc2ggZGVmZXJlbmNlIGdeeCAqLworICAgIFdPTEZTU0xfQklHTlVNKiBwcml2X2tleTsgICAgIC8qIG9wZW5zc2ggZGVmZXJlbmNlIHggICAqLworICAgIHZvaWQqICAgICAgICAgIGludGVybmFsOyAgICAgLyogb3VyIERIICovCisgICAgY2hhciAgICAgICAgICAgaW5TZXQ7ICAgICAgICAvKiBpbnRlcm5hbCBzZXQgZnJvbSBleHRlcm5hbCA/ICovCisgICAgY2hhciAgICAgICAgICAgZXhTZXQ7ICAgICAgICAvKiBleHRlcm5hbCBzZXQgZnJvbSBpbnRlcm5hbCA/ICovCisgICAgLyphZGRlZCBmb3IgbGlnaHR0cGQgb3BlbnNzbCBjb21wYXRpYmlsaXR5LCBnbyBiYWNrIGFuZCBhZGQgYSBnZXR0ZXIgaW4KKyAgICAgKiBsaWdodHRwZCBzcmMgY29kZS4KKyAgICAgKi8KKyAgICAgaW50IGxlbmd0aDsKK307CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfREggKndvbGZTU0xfZDJpX0RIcGFyYW1zKFdPTEZTU0xfREggKipkaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLCBsb25nIGxlbmd0aCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmRfREhwYXJhbXMoY29uc3QgV09MRlNTTF9ESCAqZGgsIHVuc2lnbmVkIGNoYXIgKipvdXQpOworV09MRlNTTF9BUEkgV09MRlNTTF9ESCogd29sZlNTTF9ESF9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkICAgICAgICB3b2xmU1NMX0RIX2ZyZWUoV09MRlNTTF9ESCopOworV09MRlNTTF9BUEkgV09MRlNTTF9ESCogd29sZlNTTF9ESF9kdXAoV09MRlNTTF9ESCogZGgpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9ESF9jaGVjayhjb25zdCBXT0xGU1NMX0RIICpkaCwgaW50ICpjb2Rlcyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9ESF9zaXplKFdPTEZTU0xfREgqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0RIX2dlbmVyYXRlX2tleShXT0xGU1NMX0RIKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9ESF9jb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyKiBrZXksIFdPTEZTU0xfQklHTlVNKiBwdWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9ESCopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfREhfTG9hZERlcihXT0xGU1NMX0RIKiwgY29uc3QgdW5zaWduZWQgY2hhciosIGludCBzeik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9ESF9zZXQwX3BxZyhXT0xGU1NMX0RIKiwgV09MRlNTTF9CSUdOVU0qLAorICAgIFdPTEZTU0xfQklHTlVNKiwgV09MRlNTTF9CSUdOVU0qKTsKKyAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBESF9uZXcgIHdvbGZTU0xfREhfbmV3CisjZGVmaW5lIERIX2ZyZWUgd29sZlNTTF9ESF9mcmVlCisKKyNkZWZpbmUgZDJpX0RIcGFyYW1zICAgIHdvbGZTU0xfZDJpX0RIcGFyYW1zCisjZGVmaW5lIGkyZF9ESHBhcmFtcyAgICB3b2xmU1NMX2kyZF9ESHBhcmFtcworI2RlZmluZSBESF9jaGVjayAgICAgICAgd29sZlNTTF9ESF9jaGVjaworCisjZGVmaW5lIERIX3NpemUgICAgICAgICB3b2xmU1NMX0RIX3NpemUKKyNkZWZpbmUgREhfZ2VuZXJhdGVfa2V5IHdvbGZTU0xfREhfZ2VuZXJhdGVfa2V5CisjZGVmaW5lIERIX2NvbXB1dGVfa2V5ICB3b2xmU1NMX0RIX2NvbXB1dGVfa2V5CisjaWYgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSKSAmJiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMCisjZGVmaW5lIERIX3NldDBfcHFnICAgICB3b2xmU1NMX0RIX3NldDBfcHFnCisjZW5kaWYKKyNkZWZpbmUgREhfZ2V0MF9wcWcgICAgIHdvbGZTU0xfREhfZ2V0MF9wcWcKKyNkZWZpbmUgREhfYml0cyh4KSAgICAgIChCTl9udW1fYml0cyh4LT5wKSkKKworI2RlZmluZSBESF9HRU5FUkFUT1JfMiAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgREhfQ0hFQ0tfUF9OT1RfUFJJTUUgICAgICAgICAgICAweDAxCisjZGVmaW5lIERIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUUgICAgICAgMHgwMgorI2RlZmluZSBESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SICAgICAgIDB4MDgKKworLyogVGVtcG9yYXJ5IHZhbHVlcyBmb3Igd29sZlNTTF9ESF9DaGVjayovCisjZGVmaW5lIERIX0NIRUNLX0lOVkFMSURfUV9WQUxVRSAgICAgICAgMHgxMAorI2RlZmluZSBESF9DSEVDS19RX05PVF9QUklNRSAgICAgICAgICAgIDB4MTEKKy8qIGVuZCB0ZW1wICovCisKKy8qIGZvciBwcmUgMS4xLjAgKi8KKyNkZWZpbmUgZ2V0X3JmYzI0MDlfcHJpbWVfNzY4ICAgICAgd29sZlNTTF9ESF83NjhfcHJpbWUKKyNkZWZpbmUgZ2V0X3JmYzI0MDlfcHJpbWVfMTAyNCAgICAgd29sZlNTTF9ESF8xMDI0X3ByaW1lCisjZGVmaW5lIGdldF9yZmMzNTI2X3ByaW1lXzE1MzYgICAgIHdvbGZTU0xfREhfMTUzNl9wcmltZQorI2RlZmluZSBnZXRfcmZjMzUyNl9wcmltZV8yMDQ4ICAgICB3b2xmU1NMX0RIXzIwNDhfcHJpbWUKKyNkZWZpbmUgZ2V0X3JmYzM1MjZfcHJpbWVfMzA3MiAgICAgd29sZlNTTF9ESF8zMDcyX3ByaW1lCisjZGVmaW5lIGdldF9yZmMzNTI2X3ByaW1lXzQwOTYgICAgIHdvbGZTU0xfREhfNDA5Nl9wcmltZQorI2RlZmluZSBnZXRfcmZjMzUyNl9wcmltZV82MTQ0ICAgICB3b2xmU1NMX0RIXzYxNDRfcHJpbWUKKyNkZWZpbmUgZ2V0X3JmYzM1MjZfcHJpbWVfODE5MiAgICAgd29sZlNTTF9ESF84MTkyX3ByaW1lCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gIC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChIQVZFX1NUVU5ORUwpCisjZGVmaW5lIERIX2dlbmVyYXRlX3BhcmFtZXRlcnMgICAgd29sZlNTTF9ESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzCisjZGVmaW5lIERIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXggd29sZlNTTF9ESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4CisjZW5kaWYgLyogT1BFTlNTTF9BTEwgfHwgSEFWRV9TVFVOTkVMICovCisKKyNlbmRpZiAvKiBXT0xGU1NMX0RIX0hfICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2RzYS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9kc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDZmNTA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9kc2EuaApAQCAtMCwwICsxLDExNSBAQAorLyogZHNhLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiBkc2EuaCBmb3Igb3BlblNTTCAqLworCisKKyNpZm5kZWYgV09MRlNTTF9EU0FfSF8KKyNkZWZpbmUgV09MRlNTTF9EU0FfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9ibi5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0RTQV9TSUcgeworICAgIFdPTEZTU0xfQklHTlVNICpyOworICAgIFdPTEZTU0xfQklHTlVNICpzOworfSBXT0xGU1NMX0RTQV9TSUc7CisKKyNpZm5kZWYgV09MRlNTTF9EU0FfVFlQRV9ERUZJTkVEIC8qIGd1YXJkIG9uIHJlZGVjbGFyYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRFNBICAgICAgICAgICAgV09MRlNTTF9EU0E7CisjZGVmaW5lIFdPTEZTU0xfRFNBX1RZUEVfREVGSU5FRAorI2VuZGlmCisKK3R5cGVkZWYgV09MRlNTTF9EU0EgICAgICAgICAgICAgICAgICAgRFNBOworCitzdHJ1Y3QgV09MRlNTTF9EU0EgeworICAgIFdPTEZTU0xfQklHTlVNKiBwOworICAgIFdPTEZTU0xfQklHTlVNKiBxOworICAgIFdPTEZTU0xfQklHTlVNKiBnOworICAgIFdPTEZTU0xfQklHTlVNKiBwdWJfa2V5OyAgICAgIC8qIG91ciB5ICovCisgICAgV09MRlNTTF9CSUdOVU0qIHByaXZfa2V5OyAgICAgLyogb3VyIHggKi8KKyAgICB2b2lkKiAgICAgICAgICBpbnRlcm5hbDsgICAgIC8qIG91ciBEc2EgS2V5ICovCisgICAgY2hhciAgICAgICAgICAgaW5TZXQ7ICAgICAgICAvKiBpbnRlcm5hbCBzZXQgZnJvbSBleHRlcm5hbCA/ICovCisgICAgY2hhciAgICAgICAgICAgZXhTZXQ7ICAgICAgICAvKiBleHRlcm5hbCBzZXQgZnJvbSBpbnRlcm5hbCA/ICovCit9OworCisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRFNBKiB3b2xmU1NMX0RTQV9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfRFNBX2ZyZWUoV09MRlNTTF9EU0EqKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRFNBX2dlbmVyYXRlX2tleShXT0xGU1NMX0RTQSopOworCit0eXBlZGVmIHZvaWQgKCpXT0xGU1NMX0JOX0NCKShpbnQgaSwgaW50IGosIHZvaWQqIGV4QXJnKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRFNBKiB3b2xmU1NMX0RTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzKGludCBiaXRzLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNlZWQsIGludCBzZWVkTGVuLCBpbnQqIGNvdW50ZXJSZXQsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyogaFJldCwgV09MRlNTTF9CTl9DQiBjYiwgdm9pZCogQ0JBcmcpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoV09MRlNTTF9EU0EqLCBpbnQgYml0cywKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzZWVkLCBpbnQgc2VlZExlbiwgaW50KiBjb3VudGVyUmV0LAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcqIGhSZXQsIHZvaWQqIGNiKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRFNBX0xvYWREZXIoV09MRlNTTF9EU0EqLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgaW50IHN6KTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRFNBX0xvYWREZXJfZXgoV09MRlNTTF9EU0EqLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzeiwgaW50IG9wdCk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0RTQV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzaWdSZXQsIFdPTEZTU0xfRFNBKiBkc2EpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9EU0FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9EU0EqIGRzYSwgaW50ICpkc2FjaGVjayk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0RTQV9iaXRzKGNvbnN0IFdPTEZTU0xfRFNBICpkKTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9EU0FfU0lHKiB3b2xmU1NMX0RTQV9TSUdfbmV3KHZvaWQpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0RTQV9TSUdfZnJlZShXT0xGU1NMX0RTQV9TSUcgKnNpZyk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0RTQV9TSUcqIHdvbGZTU0xfRFNBX2RvX3NpZ25fZXgoY29uc3QgdW5zaWduZWQgY2hhciogZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvdXRMZW4sIFdPTEZTU0xfRFNBKiBkc2EpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRFNBX2RvX3ZlcmlmeV9leChjb25zdCB1bnNpZ25lZCBjaGFyKiBkaWdlc3QsIGludCBkaWdlc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0RTQV9TSUcqIHNpZywgV09MRlNTTF9EU0EqIGRzYSk7CisKKyNkZWZpbmUgV09MRlNTTF9EU0FfTE9BRF9QUklWQVRFIDEKKyNkZWZpbmUgV09MRlNTTF9EU0FfTE9BRF9QVUJMSUMgIDIKKworI2RlZmluZSBEU0FfbmV3IHdvbGZTU0xfRFNBX25ldworI2RlZmluZSBEU0FfZnJlZSB3b2xmU1NMX0RTQV9mcmVlCisKKyNkZWZpbmUgRFNBX0xvYWREZXIgICAgICAgICAgICAgICAgd29sZlNTTF9EU0FfTG9hZERlcgorI2RlZmluZSBEU0FfZ2VuZXJhdGVfa2V5ICAgICAgICAgICB3b2xmU1NMX0RTQV9nZW5lcmF0ZV9rZXkKKyNkZWZpbmUgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnMgICAgd29sZlNTTF9EU0FfZ2VuZXJhdGVfcGFyYW1ldGVycworI2RlZmluZSBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leCB3b2xmU1NMX0RTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4CisKKyNkZWZpbmUgRFNBX1NJR19uZXcgICAgICAgICAgICAgICAgd29sZlNTTF9EU0FfU0lHX25ldworI2RlZmluZSBEU0FfU0lHX2ZyZWUgICAgICAgICAgICAgICB3b2xmU1NMX0RTQV9TSUdfZnJlZQorI2RlZmluZSBEU0FfZG9fc2lnbiAgICAgICAgICAgICAgICB3b2xmU1NMX0RTQV9kb19zaWduX2V4CisjZGVmaW5lIERTQV9kb192ZXJpZnkgICAgICAgICAgICAgIHdvbGZTU0xfRFNBX2RvX3ZlcmlmeV9leAorCisKKyNkZWZpbmUgRFNBX1NJRyAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9EU0FfU0lHCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gIC8qIGV4dGVybiAiQyIgKi8gCisjZW5kaWYKKworI2VuZGlmIC8qIGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9lYy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9lYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZDg1YzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2VjLmgKQEAgLTAsMCArMSwzNjEgQEAKKy8qIGVjLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiBlYy5oIGZvciBvcGVuc3NsICovCisKKyNpZm5kZWYgV09MRlNTTF9FQ19IXworI2RlZmluZSBXT0xGU1NMX0VDX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvYm4uaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc24uaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9lY2MuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBNYXAgT3BlblNTTCBOSUQgdmFsdWUgKi8KK2VudW0geworICAgIFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCA9IDIsCisgICAgUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQgPSA0LAorCisjaWZkZWYgSEFWRV9FQ0MKKyAgICAvKiBVc2UgT3BlblNTTCBOSURzLiBOSURzIGNhbiBiZSBtYXBwZWQgdG8gZWNjX2N1cnZlX2lkIGVudW0gdmFsdWVzIGJ5CisgICAgICAgIGNhbGxpbmcgTklEVG9FY2NFbnVtKCkgaW4gc3NsLmMgKi8KKyAgICBOSURfWDlfNjJfcHJpbWUxOTJ2MSA9IDQwOSwKKyAgICBOSURfWDlfNjJfcHJpbWUxOTJ2MiA9IDQxMCwKKyAgICBOSURfWDlfNjJfcHJpbWUxOTJ2MyA9IDQxMSwKKyAgICBOSURfWDlfNjJfcHJpbWUyMzl2MSA9IDQxMiwKKyAgICBOSURfWDlfNjJfcHJpbWUyMzl2MiA9IDQxMywKKyAgICBOSURfWDlfNjJfcHJpbWUyMzl2MyA9IDQxNCwKKyAgICBOSURfWDlfNjJfcHJpbWUyNTZ2MSA9IDQxNSwKKyAgICBOSURfc2VjcDExMnIxID0gNzA0LAorICAgIE5JRF9zZWNwMTEycjIgPSA3MDUsCisgICAgTklEX3NlY3AxMjhyMSA9IDcwNiwKKyAgICBOSURfc2VjcDEyOHIyID0gNzA3LAorICAgIE5JRF9zZWNwMTYwcjEgPSA3MDksCisgICAgTklEX3NlY3AxNjByMiA9IDcxMCwKKyAgICBOSURfc2VjcDIyNHIxID0gNzEzLAorICAgIE5JRF9zZWNwMzg0cjEgPSA3MTUsCisgICAgTklEX3NlY3A1MjFyMSA9IDcxNiwKKyAgICBOSURfc2VjcDE2MGsxID0gNzA4LAorICAgIE5JRF9zZWNwMTkyazEgPSA3MTEsCisgICAgTklEX3NlY3AyMjRrMSA9IDcxMiwKKyAgICBOSURfc2VjcDI1NmsxID0gNzE0LAorICAgIE5JRF9icmFpbnBvb2xQMTYwcjEgPSA5MjEsCisgICAgTklEX2JyYWlucG9vbFAxOTJyMSA9IDkyMywKKyAgICBOSURfYnJhaW5wb29sUDIyNHIxID0gOTI1LAorICAgIE5JRF9icmFpbnBvb2xQMjU2cjEgPSA5MjcsCisgICAgTklEX2JyYWlucG9vbFAzMjByMSA9IDkyOSwKKyAgICBOSURfYnJhaW5wb29sUDM4NHIxID0gOTMxLAorICAgIE5JRF9icmFpbnBvb2xQNTEycjEgPSA5MzMsCisjZW5kaWYKKworI2lmZGVmIEhBVkVfRUQ0NDgKKyAgICBOSURfRUQ0NDggPSBFRDQ0OGssCisjZW5kaWYKKyNpZmRlZiBIQVZFX0VEMjU1MTkKKyAgICBOSURfRUQyNTUxOSA9IEVEMjU1MTlrLAorI2VuZGlmCisKKyAgICBPUEVOU1NMX0VDX05BTUVEX0NVUlZFICA9IDB4MDAxCit9OworCisjaWZuZGVmIFdPTEZTU0xfRUNfVFlQRV9ERUZJTkVEIC8qIGd1YXJkIG9uIHJlZGVjbGFyYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRUNfS0VZICAgICAgICAgV09MRlNTTF9FQ19LRVk7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0VDX1BPSU5UICAgICAgIFdPTEZTU0xfRUNfUE9JTlQ7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0VDX0dST1VQICAgICAgIFdPTEZTU0xfRUNfR1JPVVA7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0VDX0JVSUxUSU5fQ1VSVkUgV09MRlNTTF9FQ19CVUlMVElOX0NVUlZFOworLyogV09MRlNTTF9FQ19NRVRIT0QgaXMganVzdCBhbiBhbGlhcyBvZiBXT0xGU1NMX0VDX0dST1VQIGZvciBub3cgKi8KK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRUNfR1JPVVAgICAgICAgV09MRlNTTF9FQ19NRVRIT0Q7CisjZGVmaW5lIFdPTEZTU0xfRUNfVFlQRV9ERUZJTkVECisjZW5kaWYKKwordHlwZWRlZiBXT0xGU1NMX0VDX0tFWSAgICAgICAgICAgICAgICBFQ19LRVk7Cit0eXBlZGVmIFdPTEZTU0xfRUNfR1JPVVAgICAgICAgICAgICAgIEVDX0dST1VQOwordHlwZWRlZiBXT0xGU1NMX0VDX0dST1VQICAgICAgICAgICAgICBFQ19NRVRIT0Q7Cit0eXBlZGVmIFdPTEZTU0xfRUNfUE9JTlQgICAgICAgICAgICAgIEVDX1BPSU5UOwordHlwZWRlZiBXT0xGU1NMX0VDX0JVSUxUSU5fQ1VSVkUgICAgICBFQ19idWlsdGluX2N1cnZlOworCitzdHJ1Y3QgV09MRlNTTF9FQ19QT0lOVCB7CisgICAgV09MRlNTTF9CSUdOVU0gKlg7CisgICAgV09MRlNTTF9CSUdOVU0gKlk7CisgICAgV09MRlNTTF9CSUdOVU0gKlo7CisKKyAgICB2b2lkKiAgICAgICAgICBpbnRlcm5hbDsgICAgIC8qIG91ciBFQ0MgcG9pbnQgKi8KKyAgICBjaGFyICAgICAgICAgICBpblNldDsgICAgICAgIC8qIGludGVybmFsIHNldCBmcm9tIGV4dGVybmFsID8gKi8KKyAgICBjaGFyICAgICAgICAgICBleFNldDsgICAgICAgIC8qIGV4dGVybmFsIHNldCBmcm9tIGludGVybmFsID8gKi8KK307CisKK3N0cnVjdCBXT0xGU1NMX0VDX0dST1VQIHsKKyAgICBpbnQgY3VydmVfaWR4OyAvKiBpbmRleCBvZiBjdXJ2ZSwgdXNlZCBieSBXb2xmU1NMIGFzIHJlZmVyZW5jZSAqLworICAgIGludCBjdXJ2ZV9uaWQ7IC8qIE5JRCBvZiBjdXJ2ZSwgdXNlZCBieSBPcGVuU1NML09wZW5TU0ggYXMgcmVmZXJlbmNlICovCisgICAgaW50IGN1cnZlX29pZDsgLyogT0lEIG9mIGN1cnZlLCB1c2VkIGJ5IE9wZW5TU0wvT3BlblNTSCBhcyByZWZlcmVuY2UgKi8KK307CisKK3N0cnVjdCBXT0xGU1NMX0VDX0tFWSB7CisgICAgV09MRlNTTF9FQ19HUk9VUCAqZ3JvdXA7CisgICAgV09MRlNTTF9FQ19QT0lOVCAqcHViX2tleTsKKyAgICBXT0xGU1NMX0JJR05VTSAqcHJpdl9rZXk7CisKKyAgICB2b2lkKiAgICAgICAgICBpbnRlcm5hbDsgICAgIC8qIG91ciBFQ0MgS2V5ICovCisgICAgY2hhciAgICAgICAgICAgaW5TZXQ7ICAgICAgICAvKiBpbnRlcm5hbCBzZXQgZnJvbSBleHRlcm5hbCA/ICovCisgICAgY2hhciAgICAgICAgICAgZXhTZXQ7ICAgICAgICAvKiBleHRlcm5hbCBzZXQgZnJvbSBpbnRlcm5hbCA/ICovCisgICAgY2hhciAgICAgICAgICAgZm9ybTsgICAgICAgICAvKiBFaXRoZXIgUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCAqLworfTsKKworc3RydWN0IFdPTEZTU0xfRUNfQlVJTFRJTl9DVVJWRSB7CisgICAgaW50IG5pZDsKKyAgICBjb25zdCBjaGFyICpjb21tZW50OworfTsKKworI2RlZmluZSBXT0xGU1NMX0VDX0tFWV9MT0FEX1BSSVZBVEUgMQorI2RlZmluZSBXT0xGU1NMX0VDX0tFWV9MT0FEX1BVQkxJQyAgMgorCitXT0xGU1NMX0FQSQorc2l6ZV90IHdvbGZTU0xfRUNfZ2V0X2J1aWx0aW5fY3VydmVzKFdPTEZTU0xfRUNfQlVJTFRJTl9DVVJWRSAqcixzaXplX3Qgbml0ZW1zKTsKKworV09MRlNTTF9BUEkKK1dPTEZTU0xfRUNfS0VZICp3b2xmU1NMX0VDX0tFWV9kdXAoY29uc3QgV09MRlNTTF9FQ19LRVkgKnNyYyk7CisKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ1BvaW50X2kyZChjb25zdCBXT0xGU1NMX0VDX0dST1VQICpjdXJ2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRUNfUE9JTlQgKnAsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGludCAqbGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ1BvaW50X2QyaSh1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRUNfR1JPVVAgKmN1cnZlLCBXT0xGU1NMX0VDX1BPSU5UICpwKTsKK1dPTEZTU0xfQVBJCitzaXplX3Qgd29sZlNTTF9FQ19QT0lOVF9wb2ludDJvY3QoY29uc3QgV09MRlNTTF9FQ19HUk9VUCAqZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FQ19QT0lOVCAqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSAqYnVmLCBzaXplX3QgbGVuLCBXT0xGU1NMX0JOX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ19QT0lOVF9vY3QycG9pbnQoY29uc3QgV09MRlNTTF9FQ19HUk9VUCAqZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FQ19QT0lOVCAqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIFdPTEZTU0xfQk5fQ1RYICpjdHgpOworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX2kyb19FQ1B1YmxpY0tleShjb25zdCBXT0xGU1NMX0VDX0tFWSAqaW4sIHVuc2lnbmVkIGNoYXIgKipvdXQpOworV09MRlNTTF9BUEkKK1dPTEZTU0xfRUNfS0VZICp3b2xmU1NMX2QyaV9FQ1ByaXZhdGVLZXkoV09MRlNTTF9FQ19LRVkgKiprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsZW4pOworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX2kyZF9FQ1ByaXZhdGVLZXkoY29uc3QgV09MRlNTTF9FQ19LRVkgKmluLCB1bnNpZ25lZCBjaGFyICoqb3V0KTsKK1dPTEZTU0xfQVBJCit2b2lkIHdvbGZTU0xfRUNfS0VZX3NldF9jb252X2Zvcm0oV09MRlNTTF9FQ19LRVkgKmVja2V5LCBjaGFyIGZvcm0pOworV09MRlNTTF9BUEkKK1dPTEZTU0xfQklHTlVNICp3b2xmU1NMX0VDX1BPSU5UX3BvaW50MmJuKGNvbnN0IFdPTEZTU0xfRUNfR1JPVVAgKmdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FQ19QT0lOVCAqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQklHTlVNICppbiwgV09MRlNTTF9CTl9DVFggKmN0eCk7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUNfUE9JTlRfaXNfb25fY3VydmUoY29uc3QgV09MRlNTTF9FQ19HUk9VUCAqZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0VDX1BPSU5UICpwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQk5fQ1RYICpjdHgpOworCitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUNfS0VZX0xvYWREZXIoV09MRlNTTF9FQ19LRVkqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRlciwgaW50IGRlclN6KTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ19LRVlfTG9hZERlcl9leChXT0xGU1NMX0VDX0tFWSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGVyLCBpbnQgZGVyU3osIGludCBvcHQpOworV09MRlNTTF9BUEkKK3ZvaWQgd29sZlNTTF9FQ19LRVlfZnJlZShXT0xGU1NMX0VDX0tFWSAqa2V5KTsKK1dPTEZTU0xfQVBJCitXT0xGU1NMX0VDX1BPSU5UICp3b2xmU1NMX0VDX0tFWV9nZXQwX3B1YmxpY19rZXkoY29uc3QgV09MRlNTTF9FQ19LRVkgKmtleSk7CitXT0xGU1NMX0FQSQorY29uc3QgV09MRlNTTF9FQ19HUk9VUCAqd29sZlNTTF9FQ19LRVlfZ2V0MF9ncm91cChjb25zdCBXT0xGU1NMX0VDX0tFWSAqa2V5KTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ19LRVlfc2V0X3ByaXZhdGVfa2V5KFdPTEZTU0xfRUNfS0VZICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfQklHTlVNICpwcml2X2tleSk7CitXT0xGU1NMX0FQSQorV09MRlNTTF9CSUdOVU0gKndvbGZTU0xfRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXkoY29uc3QgV09MRlNTTF9FQ19LRVkgKmtleSk7CitXT0xGU1NMX0FQSQorV09MRlNTTF9FQ19LRVkgKndvbGZTU0xfRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKGludCBuaWQpOworV09MRlNTTF9BUEkgY29uc3QgY2hhciogd29sZlNTTF9FQ19jdXJ2ZV9uaWQybmlzdChpbnQgbmlkKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VDX2N1cnZlX25pc3QybmlkKGNvbnN0IGNoYXIqIG5hbWUpOworV09MRlNTTF9BUEkKK1dPTEZTU0xfRUNfS0VZICp3b2xmU1NMX0VDX0tFWV9uZXcodm9pZCk7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUNfS0VZX3NldF9ncm91cChXT0xGU1NMX0VDX0tFWSAqa2V5LCBXT0xGU1NMX0VDX0dST1VQICpncm91cCk7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUNfS0VZX2dlbmVyYXRlX2tleShXT0xGU1NMX0VDX0tFWSAqa2V5KTsKK1dPTEZTU0xfQVBJCit2b2lkIHdvbGZTU0xfRUNfS0VZX3NldF9hc24xX2ZsYWcoV09MRlNTTF9FQ19LRVkgKmtleSwgaW50IGFzbjFfZmxhZyk7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUNfS0VZX3NldF9wdWJsaWNfa2V5KFdPTEZTU0xfRUNfS0VZICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FQ19QT0lOVCAqcHViKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VDRFNBX3NpemUoY29uc3QgV09MRlNTTF9FQ19LRVkgKmtleSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FQ0RTQV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdlc3RTeiwgdW5zaWduZWQgY2hhciAqc2lnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnNpZ1N6LCBXT0xGU1NMX0VDX0tFWSAqa2V5KTsKK1dPTEZTU0xfQVBJCit2b2lkIHdvbGZTU0xfRUNfR1JPVVBfc2V0X2FzbjFfZmxhZyhXT0xGU1NMX0VDX0dST1VQICpncm91cCwgaW50IGZsYWcpOworV09MRlNTTF9BUEkKK1dPTEZTU0xfRUNfR1JPVVAgKndvbGZTU0xfRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUoaW50IG5pZCk7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUNfR1JPVVBfY21wKGNvbnN0IFdPTEZTU0xfRUNfR1JPVVAgKmEsIGNvbnN0IFdPTEZTU0xfRUNfR1JPVVAgKmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9CTl9DVFggKmN0eCk7CitXT0xGU1NMX0FQSQorV09MRlNTTF9FQ19HUk9VUCAqd29sZlNTTF9FQ19HUk9VUF9kdXAoY29uc3QgV09MRlNTTF9FQ19HUk9VUCAqc3JjKTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ19HUk9VUF9nZXRfY3VydmVfbmFtZShjb25zdCBXT0xGU1NMX0VDX0dST1VQICpncm91cCk7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUNfR1JPVVBfZ2V0X2RlZ3JlZShjb25zdCBXT0xGU1NMX0VDX0dST1VQICpncm91cCk7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUNfR1JPVVBfZ2V0X29yZGVyKGNvbnN0IFdPTEZTU0xfRUNfR1JPVVAgKmdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQklHTlVNICpvcmRlciwgV09MRlNTTF9CTl9DVFggKmN0eCk7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUNfR1JPVVBfb3JkZXJfYml0cyhjb25zdCBXT0xGU1NMX0VDX0dST1VQICpncm91cCk7CitXT0xGU1NMX0FQSQordm9pZCB3b2xmU1NMX0VDX0dST1VQX2ZyZWUoV09MRlNTTF9FQ19HUk9VUCAqZ3JvdXApOworV09MRlNTTF9BUEkKK2NvbnN0IFdPTEZTU0xfRUNfTUVUSE9EKiB3b2xmU1NMX0VDX0dST1VQX21ldGhvZF9vZigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRUNfR1JPVVAgKmdyb3VwKTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ19NRVRIT0RfZ2V0X2ZpZWxkX3R5cGUoY29uc3QgV09MRlNTTF9FQ19NRVRIT0QgKm1ldGgpOworV09MRlNTTF9BUEkKK1dPTEZTU0xfRUNfUE9JTlQgKndvbGZTU0xfRUNfUE9JTlRfbmV3KGNvbnN0IFdPTEZTU0xfRUNfR1JPVVAgKmdyb3VwKTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChjb25zdCBXT0xGU1NMX0VDX0dST1VQICpncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRUNfUE9JTlQgKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0JJR05VTSAqeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQklHTlVNICp5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9CTl9DVFggKmN0eCk7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoY29uc3QgV09MRlNTTF9FQ19HUk9VUCAqZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0VDX1BPSU5UICpwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfQklHTlVNICp4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9CSUdOVU0gKnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0JOX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ19QT0lOVF9hZGQoY29uc3QgV09MRlNTTF9FQ19HUk9VUCAqZ3JvdXAsIFdPTEZTU0xfRUNfUE9JTlQgKnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FQ19QT0lOVCAqcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FQ19QT0lOVCAqcDIsIFdPTEZTU0xfQk5fQ1RYICpjdHgpOworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX0VDX1BPSU5UX211bChjb25zdCBXT0xGU1NMX0VDX0dST1VQICpncm91cCwgV09MRlNTTF9FQ19QT0lOVCAqciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0JJR05VTSAqbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0VDX1BPSU5UICpxLCBjb25zdCBXT0xGU1NMX0JJR05VTSAqbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0JOX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ19QT0lOVF9pbnZlcnQoY29uc3QgV09MRlNTTF9FQ19HUk9VUCAqZ3JvdXAsIFdPTEZTU0xfRUNfUE9JTlQgKmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9CTl9DVFggKmN0eCk7CitXT0xGU1NMX0FQSQordm9pZCB3b2xmU1NMX0VDX1BPSU5UX2NsZWFyX2ZyZWUoV09MRlNTTF9FQ19QT0lOVCAqcG9pbnQpOworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX0VDX1BPSU5UX2NtcChjb25zdCBXT0xGU1NMX0VDX0dST1VQICpncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0VDX1BPSU5UICphLCBjb25zdCBXT0xGU1NMX0VDX1BPSU5UICpiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQk5fQ1RYICpjdHgpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRUNfUE9JTlRfY29weShXT0xGU1NMX0VDX1BPSU5UICpkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0VDX1BPSU5UICpzcmMpOworV09MRlNTTF9BUEkKK3ZvaWQgd29sZlNTTF9FQ19QT0lOVF9mcmVlKFdPTEZTU0xfRUNfUE9JTlQgKnBvaW50KTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQ19QT0lOVF9pc19hdF9pbmZpbml0eShjb25zdCBXT0xGU1NMX0VDX0dST1VQICpncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRUNfUE9JTlQgKmEpOworCisjaWZuZGVmIEhBVkVfU0VMRlRFU1QKK1dPTEZTU0xfQVBJCitjaGFyKiB3b2xmU1NMX0VDX1BPSU5UX3BvaW50MmhleChjb25zdCBXT0xGU1NMX0VDX0dST1VQKiBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRUNfUE9JTlQqIHBvaW50LCBpbnQgZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQk5fQ1RYKiBjdHgpOworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9FQ0MKKyNkZWZpbmUgT1BFTlNTTF9OT19FQworI2VuZGlmCisKKyNkZWZpbmUgRUNfS0VZX25ldyAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VDX0tFWV9uZXcKKyNkZWZpbmUgRUNfS0VZX2ZyZWUgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VDX0tFWV9mcmVlCisjZGVmaW5lIEVDX0tFWV9kdXAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FQ19LRVlfZHVwCisjZGVmaW5lIEVDX0tFWV9nZXQwX3B1YmxpY19rZXkgICAgICAgICAgd29sZlNTTF9FQ19LRVlfZ2V0MF9wdWJsaWNfa2V5CisjZGVmaW5lIEVDX0tFWV9nZXQwX2dyb3VwICAgICAgICAgICAgICAgd29sZlNTTF9FQ19LRVlfZ2V0MF9ncm91cAorI2RlZmluZSBFQ19LRVlfc2V0X3ByaXZhdGVfa2V5ICAgICAgICAgIHdvbGZTU0xfRUNfS0VZX3NldF9wcml2YXRlX2tleQorI2RlZmluZSBFQ19LRVlfZ2V0MF9wcml2YXRlX2tleSAgICAgICAgIHdvbGZTU0xfRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXkKKyNkZWZpbmUgRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lICAgICAgICB3b2xmU1NMX0VDX0tFWV9uZXdfYnlfY3VydmVfbmFtZQorI2RlZmluZSBFQ19LRVlfc2V0X2dyb3VwICAgICAgICAgICAgICAgIHdvbGZTU0xfRUNfS0VZX3NldF9ncm91cAorI2RlZmluZSBFQ19LRVlfZ2VuZXJhdGVfa2V5ICAgICAgICAgICAgIHdvbGZTU0xfRUNfS0VZX2dlbmVyYXRlX2tleQorI2RlZmluZSBFQ19LRVlfc2V0X2FzbjFfZmxhZyAgICAgICAgICAgIHdvbGZTU0xfRUNfS0VZX3NldF9hc24xX2ZsYWcKKyNkZWZpbmUgRUNfS0VZX3NldF9wdWJsaWNfa2V5ICAgICAgICAgICB3b2xmU1NMX0VDX0tFWV9zZXRfcHVibGljX2tleQorCisjZGVmaW5lIEVDRFNBX3NpemUgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FQ0RTQV9zaXplCisjZGVmaW5lIEVDRFNBX3NpZ24gICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FQ0RTQV9zaWduCisKKyNkZWZpbmUgRUNfR1JPVVBfZnJlZSAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VDX0dST1VQX2ZyZWUKKyNkZWZpbmUgRUNfR1JPVVBfc2V0X2FzbjFfZmxhZyAgICAgICAgICB3b2xmU1NMX0VDX0dST1VQX3NldF9hc24xX2ZsYWcKKyNkZWZpbmUgRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUgICAgICB3b2xmU1NMX0VDX0dST1VQX25ld19ieV9jdXJ2ZV9uYW1lCisjZGVmaW5lIEVDX0dST1VQX2NtcCAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FQ19HUk9VUF9jbXAKKyNkZWZpbmUgRUNfR1JPVVBfZHVwICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VDX0dST1VQX2R1cAorI2RlZmluZSBFQ19HUk9VUF9nZXRfY3VydmVfbmFtZSAgICAgICAgIHdvbGZTU0xfRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWUKKyNkZWZpbmUgRUNfR1JPVVBfZ2V0X2RlZ3JlZSAgICAgICAgICAgICB3b2xmU1NMX0VDX0dST1VQX2dldF9kZWdyZWUKKyNkZWZpbmUgRUNfR1JPVVBfZ2V0X29yZGVyICAgICAgICAgICAgICB3b2xmU1NMX0VDX0dST1VQX2dldF9vcmRlcgorI2RlZmluZSBFQ19HUk9VUF9vcmRlcl9iaXRzICAgICAgICAgICAgIHdvbGZTU0xfRUNfR1JPVVBfb3JkZXJfYml0cworI2RlZmluZSBFQ19HUk9VUF9tZXRob2Rfb2YgICAgICAgICAgICAgIHdvbGZTU0xfRUNfR1JPVVBfbWV0aG9kX29mCisjaWZuZGVmIE5PX1dPTEZTU0xfU1RVQgorI2RlZmluZSBFQ19HUk9VUF9zZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtKC4uLikKKyNlbmRpZgorCisjZGVmaW5lIEVDX01FVEhPRF9nZXRfZmllbGRfdHlwZSAgICAgICAgd29sZlNTTF9FQ19NRVRIT0RfZ2V0X2ZpZWxkX3R5cGUKKworI2RlZmluZSBFQ19QT0lOVF9uZXcgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRUNfUE9JTlRfbmV3CisjZGVmaW5lIEVDX1BPSU5UX2ZyZWUgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FQ19QT0lOVF9mcmVlCisjZGVmaW5lIEVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwCisjZGVmaW5lIEVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwCisjZGVmaW5lIEVDX1BPSU5UX2FkZCAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FQ19QT0lOVF9hZGQKKyNkZWZpbmUgRUNfUE9JTlRfbXVsICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VDX1BPSU5UX211bAorI2RlZmluZSBFQ19QT0lOVF9pbnZlcnQgICAgICAgICAgICAgICAgIHdvbGZTU0xfRUNfUE9JTlRfaW52ZXJ0CisjZGVmaW5lIEVDX1BPSU5UX2NsZWFyX2ZyZWUgICAgICAgICAgICAgd29sZlNTTF9FQ19QT0lOVF9jbGVhcl9mcmVlCisjZGVmaW5lIEVDX1BPSU5UX2NtcCAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FQ19QT0lOVF9jbXAKKyNkZWZpbmUgRUNfUE9JTlRfY29weSAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VDX1BPSU5UX2NvcHkKKyNkZWZpbmUgRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkgICAgICAgICB3b2xmU1NMX0VDX1BPSU5UX2lzX2F0X2luZmluaXR5CisKKyNkZWZpbmUgRUNfZ2V0X2J1aWx0aW5fY3VydmVzICAgICAgICAgICB3b2xmU1NMX0VDX2dldF9idWlsdGluX2N1cnZlcworCisjZGVmaW5lIEVDUG9pbnRfaTJkICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FQ1BvaW50X2kyZAorI2RlZmluZSBFQ1BvaW50X2QyaSAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRUNQb2ludF9kMmkKKyNkZWZpbmUgRUNfUE9JTlRfcG9pbnQyb2N0ICAgICAgICAgICAgICB3b2xmU1NMX0VDX1BPSU5UX3BvaW50Mm9jdAorI2RlZmluZSBFQ19QT0lOVF9vY3QycG9pbnQgICAgICAgICAgICAgIHdvbGZTU0xfRUNfUE9JTlRfb2N0MnBvaW50CisjZGVmaW5lIEVDX1BPSU5UX3BvaW50MmJuICAgICAgICAgICAgICAgd29sZlNTTF9FQ19QT0lOVF9wb2ludDJibgorI2RlZmluZSBFQ19QT0lOVF9pc19vbl9jdXJ2ZSAgICAgICAgICAgIHdvbGZTU0xfRUNfUE9JTlRfaXNfb25fY3VydmUKKyNkZWZpbmUgaTJvX0VDUHVibGljS2V5ICAgICAgICAgICAgICAgICB3b2xmU1NMX2kyb19FQ1B1YmxpY0tleQorI2RlZmluZSBpMmRfRUNfUFVCS0VZICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfaTJvX0VDUHVibGljS2V5CisjZGVmaW5lIGQyaV9FQ1ByaXZhdGVLZXkgICAgICAgICAgICAgICAgd29sZlNTTF9kMmlfRUNQcml2YXRlS2V5CisjZGVmaW5lIGkyZF9FQ1ByaXZhdGVLZXkgICAgICAgICAgICAgICAgd29sZlNTTF9pMmRfRUNQcml2YXRlS2V5CisjZGVmaW5lIEVDX0tFWV9zZXRfY29udl9mb3JtICAgICAgICAgICAgd29sZlNTTF9FQ19LRVlfc2V0X2NvbnZfZm9ybQorCisjaWZuZGVmIEhBVkVfU0VMRlRFU1QKKyAgICAjZGVmaW5lIEVDX1BPSU5UX3BvaW50MmhleCAgICAgICAgICB3b2xmU1NMX0VDX1BPSU5UX3BvaW50MmhleAorI2VuZGlmCisKKyNkZWZpbmUgRUNfUE9JTlRfZHVtcCAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VDX1BPSU5UX2R1bXAKKyNkZWZpbmUgRUNfZ2V0X2J1aWx0aW5fY3VydmVzICAgICAgICAgICB3b2xmU1NMX0VDX2dldF9idWlsdGluX2N1cnZlcworCisjZGVmaW5lIEVDX2N1cnZlX25pZDJuaXN0ICAgICAgICAgICAgICAgd29sZlNTTF9FQ19jdXJ2ZV9uaWQybmlzdAorI2RlZmluZSBFQ19jdXJ2ZV9uaXN0Mm5pZCAgICAgICAgICAgICAgIHdvbGZTU0xfRUNfY3VydmVfbmlzdDJuaWQKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9lYzI1NTE5LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2VjMjU1MTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNmM2M5Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9lYzI1NTE5LmgKQEAgLTAsMCArMSw0NCBAQAorLyogZWMyNTUxOS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogZWMyNTUxOS5oICovCisKKyNpZm5kZWYgV09MRlNTTF9FQzI1NTE5X0hfCisjZGVmaW5lIFdPTEZTU0xfRUMyNTUxOV9IXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQzI1NTE5X2dlbmVyYXRlX2tleSh1bnNpZ25lZCBjaGFyICpwcml2LCB1bnNpZ25lZCBpbnQgKnByaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB1YiwgdW5zaWduZWQgaW50ICpwdWJTeik7CisKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQzI1NTE5X3NoYXJlZF9rZXkodW5zaWduZWQgY2hhciAqc2hhcmVkLCB1bnNpZ25lZCBpbnQgKnNoYXJlZFN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnByaXYsIHVuc2lnbmVkIGludCBwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHViLCB1bnNpZ25lZCBpbnQgcHViU3opOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogaGVhZGVyICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2VjNDQ4LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2VjNDQ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwYjFiNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvZWM0NDguaApAQCAtMCwwICsxLDQ0IEBACisvKiBlYzQ0OC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogZWM0NDguaCAqLworCisjaWZuZGVmIFdPTEZTU0xfRUM0NDhfSF8KKyNkZWZpbmUgV09MRlNTTF9FQzQ0OF9IXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FQzQ0OF9nZW5lcmF0ZV9rZXkodW5zaWduZWQgY2hhciAqcHJpdiwgdW5zaWduZWQgaW50ICpwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHViLCB1bnNpZ25lZCBpbnQgKnB1YlN6KTsKKworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX0VDNDQ4X3NoYXJlZF9rZXkodW5zaWduZWQgY2hhciAqc2hhcmVkLCB1bnNpZ25lZCBpbnQgKnNoYXJlZFN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwcml2LCB1bnNpZ25lZCBpbnQgcHJpdlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdWIsIHVuc2lnbmVkIGludCBwdWJTeik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvZWNkaC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9lY2RoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5ZTc3MAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvZWNkaC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qIGVjZGguaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIGVjZGguaCBmb3Igb3BlbnNzbCAqLworCisjaWZuZGVmIFdPTEZTU0xfRUNESF9IXworI2RlZmluZSBXT0xGU1NMX0VDREhfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvYm4uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VDREhfY29tcHV0ZV9rZXkodm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0VDX1BPSU5UICpwdWJfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0VDX0tFWSAqZWNkaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpLREYpIChjb25zdCB2b2lkICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb3V0bGVuKSk7CisKKyNkZWZpbmUgRUNESF9jb21wdXRlX2tleSB3b2xmU1NMX0VDREhfY29tcHV0ZV9rZXkKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvKiBleHRlcm4gQyAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvZWNkc2EuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvZWNkc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTVjODczCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9lY2RzYS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qIGVjZHNhLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiBlY2RzYS5oIGZvciBvcGVuc3NsICovCisKKyNpZm5kZWYgV09MRlNTTF9FQ0RTQV9IXworI2RlZmluZSBXT0xGU1NMX0VDRFNBX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvYm4uaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZWMuaD4KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZm5kZWYgV09MRlNTTF9FQ0RTQV9UWVBFX0RFRklORUQgLyogZ3VhcmQgb24gcmVkZWNsYXJhdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9FQ0RTQV9TSUcgICAgICBXT0xGU1NMX0VDRFNBX1NJRzsKKyNkZWZpbmUgV09MRlNTTF9FQ0RTQV9UWVBFX0RFRklORUQKKyNlbmRpZgorCit0eXBlZGVmIFdPTEZTU0xfRUNEU0FfU0lHICAgICAgICAgICAgIEVDRFNBX1NJRzsKKworc3RydWN0IFdPTEZTU0xfRUNEU0FfU0lHIHsKKyAgICBXT0xGU1NMX0JJR05VTSAqcjsKKyAgICBXT0xGU1NMX0JJR05VTSAqczsKK307CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9FQ0RTQV9TSUdfZnJlZShXT0xGU1NMX0VDRFNBX1NJRyAqc2lnKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRUNEU0FfU0lHICp3b2xmU1NMX0VDRFNBX1NJR19uZXcodm9pZCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0VDRFNBX1NJRyAqd29sZlNTTF9FQ0RTQV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZ3N0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FQ19LRVkgKmVja2V5KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VDRFNBX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZ3N0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0VDRFNBX1NJRyAqc2lnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfRUNfS0VZICplY2tleSk7CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRUNEU0FfU0lHICp3b2xmU1NMX2QyaV9FQ0RTQV9TSUcoV09MRlNTTF9FQ0RTQV9TSUcgKipzaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsZW4pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfaTJkX0VDRFNBX1NJRyhjb25zdCBXT0xGU1NMX0VDRFNBX1NJRyAqc2lnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcHApOworCisjZGVmaW5lIEVDRFNBX1NJR19mcmVlICAgICAgICAgd29sZlNTTF9FQ0RTQV9TSUdfZnJlZQorI2RlZmluZSBFQ0RTQV9TSUdfbmV3ICAgICAgICAgIHdvbGZTU0xfRUNEU0FfU0lHX25ldworI2RlZmluZSBFQ0RTQV9kb19zaWduICAgICAgICAgIHdvbGZTU0xfRUNEU0FfZG9fc2lnbgorI2RlZmluZSBFQ0RTQV9kb192ZXJpZnkgICAgICAgIHdvbGZTU0xfRUNEU0FfZG9fdmVyaWZ5CisjZGVmaW5lIGQyaV9FQ0RTQV9TSUcgICAgICAgICAgd29sZlNTTF9kMmlfRUNEU0FfU0lHCisjZGVmaW5lIGkyZF9FQ0RTQV9TSUcgICAgICAgICAgd29sZlNTTF9pMmRfRUNEU0FfU0lHCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBoZWFkZXIgKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9lZDI1NTE5LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2VkMjU1MTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDY4M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9lZDI1NTE5LmgKQEAgLTAsMCArMSw0NyBAQAorLyogZWQyNTUxOS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogZWQyNTUxOS5oICovCisKKyNpZm5kZWYgV09MRlNTTF9FRDI1NTE5X0hfCisjZGVmaW5lIFdPTEZTU0xfRUQyNTUxOV9IXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FRDI1NTE5X2dlbmVyYXRlX2tleSh1bnNpZ25lZCBjaGFyICpwcml2LCB1bnNpZ25lZCBpbnQgKnByaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB1YiwgdW5zaWduZWQgaW50ICpwdWJTeik7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRUQyNTUxOV9zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgdW5zaWduZWQgaW50IG1zZ1N6LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnByaXYsIHVuc2lnbmVkIGludCBwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCB1bnNpZ25lZCBpbnQgKnNpZ1N6KTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FRDI1NTE5X3ZlcmlmeShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIHVuc2lnbmVkIGludCBtc2dTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB1YiwgdW5zaWduZWQgaW50IHB1YlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCB1bnNpZ25lZCBpbnQgc2lnU3opOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogaGVhZGVyICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2VkNDQ4LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2VkNDQ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmMTg0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvZWQ0NDguaApAQCAtMCwwICsxLDQ3IEBACisvKiBlZDQ0OC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogZWQ0NDguaCAqLworCisjaWZuZGVmIFdPTEZTU0xfRUQ0NDhfSF8KKyNkZWZpbmUgV09MRlNTTF9FRDQ0OF9IXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FRDQ0OF9nZW5lcmF0ZV9rZXkodW5zaWduZWQgY2hhciAqcHJpdiwgdW5zaWduZWQgaW50ICpwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHViLCB1bnNpZ25lZCBpbnQgKnB1YlN6KTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9FRDQ0OF9zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgdW5zaWduZWQgaW50IG1zZ1N6LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwcml2LCB1bnNpZ25lZCBpbnQgcHJpdlN6LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcsIHVuc2lnbmVkIGludCAqc2lnU3opOworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX0VENDQ4X3ZlcmlmeShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIHVuc2lnbmVkIGludCBtc2dTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdWIsIHVuc2lnbmVkIGludCBwdWJTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHVuc2lnbmVkIGludCBzaWdTeik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvZW5naW5lLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2VuZ2luZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMTQ3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2VuZ2luZS5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qIGVuZ2luZS5oIGZvciBsaWJjdXJsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZXJyLmg+CisKKyN1bmRlZiBIQVZFX09QRU5TU0xfRU5HSU5FX0gKKworLyogRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzIG5vdCBuZWVkZWQsIGFzIGFsbCBidWlsdGluIGVuZ2luZXMgYXJlIGFscmVhZHkKKyAgIGxvYWRlZCBpbnRvIG1lbW9yeSBhbmQgdXNlZCBvbiBzdGFydHVwLiAqLworI2RlZmluZSBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXMoKQorCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2Vyci5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGRmMmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9lcnIuaApAQCAtMCwwICsxLDU1IEBACisvKiBlcnIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKyNpZm5kZWYgV09MRlNTTF9PUEVOU1NMX0VSUl8KKyNkZWZpbmUgV09MRlNTTF9PUEVOU1NMX0VSUl8KKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2xvZ2dpbmcuaD4KKworLyogZXJyLmggZm9yIG9wZW5zc2wgKi8KKyNkZWZpbmUgRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MgICAgICAgICAgd29sZlNTTF9FUlJfbG9hZF9jcnlwdG9fc3RyaW5ncworI2RlZmluZSBFUlJfbG9hZF9DUllQVE9fc3RyaW5ncyAgICAgICAgICB3b2xmU1NMX0VSUl9sb2FkX2NyeXB0b19zdHJpbmdzCisjZGVmaW5lIEVSUl9wZWVrX2xhc3RfZXJyb3IgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX3BlZWtfbGFzdF9lcnJvcgorCisvKiBmYXRhbCBlcnJvciAqLworI2RlZmluZSBFUlJfUl9NQUxMT0NfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgTUVNT1JZX0UKKyNkZWZpbmUgRVJSX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSICAgICAgICAgICAgIEJBRF9GVU5DX0FSRworI2RlZmluZSBFUlJfUl9ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgTk9UX0NPTVBJTEVEX0lOCisjZGVmaW5lIEVSUl9SX1BBU1NFRF9JTlZBTElEX0FSR1VNRU5UICAgICAgICAgICBCQURfRlVOQ19BUkcKKyNkZWZpbmUgUlNBX1JfVU5LTk9XTl9QQURESU5HX1RZUEUgICAgICAgICAgICAgIFJTQV9QQURfRQorI2RlZmluZSBFQ19SX0JVRkZFUl9UT09fU01BTEwgICAgICAgICAgICAgICAgICAgQlVGRkVSX0UKKworLyogU1NMIGZ1bmN0aW9uIGNvZGVzICovCisjZGVmaW5lIFJTQV9GX1JTQV9PU1NMX1BSSVZBVEVfRU5DUllQVCAgICAgICAgICAxCisjZGVmaW5lIFNTTF9GX1NTTF9DVFhfVVNFX0NFUlRJRklDQVRFX0ZJTEUgICAgICAyCisjZGVmaW5lIFNTTF9GX1NTTF9VU0VfUFJJVkFURUtFWSAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEVDX0ZfRUNfR0ZQX1NJTVBMRV9QT0lOVDJPQ1QgICAgICAgICAgICA0CisKKy8qIHJlYXNvbnMgKi8KKyNkZWZpbmUgRVJSX1JfU1lTX0xJQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUEtDUzEyX1JfTUFDX1ZFUklGWV9GQUlMVVJFICAgICAgICAgICAgIDIKKworI2RlZmluZSBSU0FlcnIoZixyKSAgRVJSX3B1dF9lcnJvcigwLChmKSwociksX19GSUxFX18sX19MSU5FX18pCisjZGVmaW5lIFNTTGVycihmLHIpICBFUlJfcHV0X2Vycm9yKDAsKGYpLChyKSxfX0ZJTEVfXyxfX0xJTkVfXykKKyNkZWZpbmUgRUNlcnIoZixyKSAgIEVSUl9wdXRfZXJyb3IoMCwoZiksKHIpLF9fRklMRV9fLF9fTElORV9fKQorCisjZW5kaWYgLyogV09MRlNTTF9PUEVOU1NMX0VSUl8gKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9ldnAuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvZXZwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlNGMzMwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvZXZwLmgKQEAgLTAsMCArMSwxMDE5IEBACisvKiBldnAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL29wZW5zc2wvZXZwLmgKKyAgICBcYnJpZWYgZXZwLmggZGVmaW5lcyBtaW5pIGV2cCBvcGVuc3NsIGNvbXBhdGliaWxpdHkgbGF5ZXIKKyAqLworCisKKyNpZm5kZWYgV09MRlNTTF9FVlBfSF8KKyNkZWZpbmUgV09MRlNTTF9FVlBfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NldHRpbmdzLmg+CisKKyNpZmRlZiBXT0xGU1NMX1BSRUZJWAorI2luY2x1ZGUgInByZWZpeF9ldnAuaCIKKyNlbmRpZgorCisjaWZuZGVmIE5PX01ENAorICAgICNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvbWQ0Lmg+CisjZW5kaWYKKyNpZm5kZWYgTk9fTUQ1CisgICAgI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9tZDUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9zaGEuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc2hhMy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9yaXBlbWQuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2RzYS5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9lYy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9kaC5oPgorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYWVzLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZGVzMy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2FyYzQuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9obWFjLmg+CisjaWZkZWYgSEFWRV9JREVBCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2lkZWEuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3B3ZGJhc2VkLmg+CisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQkFTRTY0X0VOQ09ERSkgfHwgZGVmaW5lZChXT0xGU1NMX0JBU0U2NF9ERUNPREUpCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvY29kaW5nLmg+CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCit0eXBlZGVmIGNoYXIgV09MRlNTTF9FVlBfQ0lQSEVSOworI2lmbmRlZiBXT0xGU1NMX0VWUF9UWVBFX0RFRklORUQgLyogZ3VhcmQgb24gcmVkZWNsYXJhdGlvbiAqLwordHlwZWRlZiBjaGFyICAgV09MRlNTTF9FVlBfTUQ7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0VWUF9QS0VZICAgICBXT0xGU1NMX0VWUF9QS0VZOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9FVlBfTURfQ1RYICAgV09MRlNTTF9FVlBfTURfQ1RYOworI2RlZmluZSBXT0xGU1NMX0VWUF9UWVBFX0RFRklORUQKKyNlbmRpZgorCit0eXBlZGVmIFdPTEZTU0xfRVZQX1BLRVkgICAgICAgRVZQX1BLRVk7Cit0eXBlZGVmIFdPTEZTU0xfRVZQX1BLRVkgICAgICAgUEtDUzhfUFJJVl9LRVlfSU5GTzsKKworI2lmbmRlZiBOT19NRDQKKyAgICBXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9NRCogd29sZlNTTF9FVlBfbWQ0KHZvaWQpOworI2VuZGlmCisjaWZuZGVmIE5PX01ENQorICAgIFdPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX01EKiB3b2xmU1NMX0VWUF9tZDUodm9pZCk7CisjZW5kaWYKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9FVlBfc2V0X3B3X3Byb21wdChjb25zdCBjaGFyICopOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfTUQqIHdvbGZTU0xfRVZQX21kYzIodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9NRCogd29sZlNTTF9FVlBfc2hhMSh2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX01EKiB3b2xmU1NMX0VWUF9zaGEyMjQodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9NRCogd29sZlNTTF9FVlBfc2hhMjU2KHZvaWQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfTUQqIHdvbGZTU0xfRVZQX3NoYTM4NCh2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX01EKiB3b2xmU1NMX0VWUF9zaGE1MTIodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9NRCogd29sZlNTTF9FVlBfcmlwZW1kMTYwKHZvaWQpOworCitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9NRCogd29sZlNTTF9FVlBfc2hhM18yMjQodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9NRCogd29sZlNTTF9FVlBfc2hhM18yNTYodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9NRCogd29sZlNTTF9FVlBfc2hhM18zODQodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9NRCogd29sZlNTTF9FVlBfc2hhM181MTIodm9pZCk7CisKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfYWVzXzEyOF9lY2Iodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Flc18xOTJfZWNiKHZvaWQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiB3b2xmU1NMX0VWUF9hZXNfMjU2X2VjYih2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfYWVzXzEyOF9jYmModm9pZCk7CisjaWYgIWRlZmluZWQoTk9fQUVTKSAmJiBkZWZpbmVkKEhBVkVfQUVTX0NCQykKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfYWVzXzE5Ml9jYmModm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Flc18yNTZfY2JjKHZvaWQpOworI2VuZGlmCisjaWZuZGVmIE5PX0FFUworI2lmZGVmIFdPTEZTU0xfQUVTX0NGQgorV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiB3b2xmU1NMX0VWUF9hZXNfMTI4X2NmYjEodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Flc18xOTJfY2ZiMSh2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfYWVzXzI1Nl9jZmIxKHZvaWQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiB3b2xmU1NMX0VWUF9hZXNfMTI4X2NmYjgodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Flc18xOTJfY2ZiOCh2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfYWVzXzI1Nl9jZmI4KHZvaWQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiB3b2xmU1NMX0VWUF9hZXNfMTI4X2NmYjEyOCh2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfYWVzXzE5Ml9jZmIxMjgodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Flc18yNTZfY2ZiMTI4KHZvaWQpOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9BRVNfT0ZCCitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Flc18xMjhfb2ZiKHZvaWQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiB3b2xmU1NMX0VWUF9hZXNfMTkyX29mYih2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfYWVzXzI1Nl9vZmIodm9pZCk7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0FFU19YVFMKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfYWVzXzEyOF94dHModm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Flc18yNTZfeHRzKHZvaWQpOworI2VuZGlmCisjZW5kaWYgLyogTk9fQUVTICovCisjaWYgIWRlZmluZWQoTk9fQUVTKSAmJiBkZWZpbmVkKEhBVkVfQUVTR0NNKQorV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiB3b2xmU1NMX0VWUF9hZXNfMTI4X2djbSh2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfYWVzXzE5Ml9nY20odm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Flc18yNTZfZ2NtKHZvaWQpOworI2VuZGlmCitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Flc18xMjhfY3RyKHZvaWQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiB3b2xmU1NMX0VWUF9hZXNfMTkyX2N0cih2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfYWVzXzI1Nl9jdHIodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Rlc19lY2Iodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2Rlc19lZGUzX2VjYih2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfZGVzX2NiYyh2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfZGVzX2VkZTNfY2JjKHZvaWQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiB3b2xmU1NMX0VWUF9yYzQodm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2lkZWFfY2JjKHZvaWQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiB3b2xmU1NMX0VWUF9lbmNfbnVsbCh2b2lkKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogd29sZlNTTF9FVlBfcmMyX2NiYyh2b2lkKTsKKworCit0eXBlZGVmIHVuaW9uIHsKKyAgICAjaWZuZGVmIE5PX01ENAorICAgICAgICBXT0xGU1NMX01ENF9DVFggICAgbWQ0OworICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fTUQ1CisgICAgICAgIFdPTEZTU0xfTUQ1X0NUWCAgICBtZDU7CisgICAgI2VuZGlmCisgICAgV09MRlNTTF9TSEFfQ1RYICAgIHNoYTsKKyAgICAjaWZkZWYgV09MRlNTTF9TSEEyMjQKKyAgICAgICAgV09MRlNTTF9TSEEyMjRfQ1RYIHNoYTIyNDsKKyAgICAjZW5kaWYKKyAgICBXT0xGU1NMX1NIQTI1Nl9DVFggc2hhMjU2OworICAgICNpZmRlZiBXT0xGU1NMX1NIQTM4NAorICAgICAgICBXT0xGU1NMX1NIQTM4NF9DVFggc2hhMzg0OworICAgICNlbmRpZgorICAgICNpZmRlZiBXT0xGU1NMX1NIQTUxMgorICAgICAgICBXT0xGU1NMX1NIQTUxMl9DVFggc2hhNTEyOworICAgICNlbmRpZgorICAgICNpZmRlZiBXT0xGU1NMX1JJUEVNRAorICAgICAgICBXT0xGU1NMX1JJUEVNRF9DVFggcmlwZW1kOworICAgICNlbmRpZgorICAgICNpZm5kZWYgV09MRlNTTF9OT1NIQTNfMjI0CisgICAgICAgIFdPTEZTU0xfU0hBM18yMjRfQ1RYIHNoYTNfMjI0OworICAgICNlbmRpZgorICAgICNpZm5kZWYgV09MRlNTTF9OT1NIQTNfMjU2CisgICAgICAgIFdPTEZTU0xfU0hBM18yNTZfQ1RYIHNoYTNfMjU2OworICAgICNlbmRpZgorICAgICAgICBXT0xGU1NMX1NIQTNfMzg0X0NUWCBzaGEzXzM4NDsKKyAgICAjaWZuZGVmIFdPTEZTU0xfTk9TSEEzXzUxMgorICAgICAgICBXT0xGU1NMX1NIQTNfNTEyX0NUWCBzaGEzXzUxMjsKKyAgICAjZW5kaWYKK30gV09MRlNTTF9IYXNoZXI7CisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRVZQX1BLRVlfQ1RYIFdPTEZTU0xfRVZQX1BLRVlfQ1RYOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCBXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYOworCitzdHJ1Y3QgV09MRlNTTF9FVlBfTURfQ1RYIHsKKyAgICB1bmlvbiB7CisgICAgICAgIFdPTEZTU0xfSGFzaGVyIGRpZ2VzdDsKKyAgICAjaWZuZGVmIE5PX0hNQUMKKyAgICAgICAgSG1hYyBobWFjOworICAgICNlbmRpZgorICAgIH0gaGFzaDsKKyAgICBlbnVtIHdjX0hhc2hUeXBlIG1hY1R5cGU7CisgICAgV09MRlNTTF9FVlBfUEtFWV9DVFggKnBjdHg7CisjaWZuZGVmIE5PX0hNQUMKKyAgICB1bnNpZ25lZCBpbnQgaXNITUFDOworI2VuZGlmCit9OworCisKK3R5cGVkZWYgdW5pb24geworI2lmbmRlZiBOT19BRVMKKyAgICBBZXMgIGFlczsKKyNpZmRlZiBXT0xGU1NMX0FFU19YVFMKKyAgICBYdHNBZXMgeHRzOworI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTk9fREVTMworICAgIERlcyAgZGVzOworICAgIERlczMgZGVzMzsKKyNlbmRpZgorICAgIEFyYzQgYXJjNDsKKyNpZmRlZiBIQVZFX0lERUEKKyAgICBJZGVhIGlkZWE7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1FUCisgICAgaW50ICgqY3RybCkgKFdPTEZTU0xfRVZQX0NJUEhFUl9DVFggKiwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cik7CisjZW5kaWYKK30gV09MRlNTTF9DaXBoZXI7CisKKworZW51bSB7CisgICAgQUVTXzEyOF9DQkNfVFlQRSAgPSAxLAorICAgIEFFU18xOTJfQ0JDX1RZUEUgID0gMiwKKyAgICBBRVNfMjU2X0NCQ19UWVBFICA9IDMsCisgICAgQUVTXzEyOF9DVFJfVFlQRSAgPSA0LAorICAgIEFFU18xOTJfQ1RSX1RZUEUgID0gNSwKKyAgICBBRVNfMjU2X0NUUl9UWVBFICA9IDYsCisgICAgQUVTXzEyOF9FQ0JfVFlQRSAgPSA3LAorICAgIEFFU18xOTJfRUNCX1RZUEUgID0gOCwKKyAgICBBRVNfMjU2X0VDQl9UWVBFICA9IDksCisgICAgREVTX0NCQ19UWVBFICAgICAgPSAxMCwKKyAgICBERVNfRUNCX1RZUEUgICAgICA9IDExLAorICAgIERFU19FREUzX0NCQ19UWVBFID0gMTIsCisgICAgREVTX0VERTNfRUNCX1RZUEUgPSAxMywKKyAgICBBUkM0X1RZUEUgICAgICAgICA9IDE0LAorICAgIE5VTExfQ0lQSEVSX1RZUEUgID0gMTUsCisgICAgRVZQX1BLRVlfUlNBICAgICAgPSAxNiwKKyAgICBFVlBfUEtFWV9EU0EgICAgICA9IDE3LAorICAgIEVWUF9QS0VZX0VDICAgICAgID0gMTgsCisjaWZkZWYgSEFWRV9JREVBCisgICAgSURFQV9DQkNfVFlQRSAgICAgPSAxOSwKKyNlbmRpZgorICAgIEFFU18xMjhfR0NNX1RZUEUgID0gMjEsCisgICAgQUVTXzE5Ml9HQ01fVFlQRSAgPSAyMiwKKyAgICBBRVNfMjU2X0dDTV9UWVBFICA9IDIzLAorICAgIE5JRF9zaGExICAgICAgICAgID0gNjQsCisgICAgTklEX3NoYTIyNCAgICAgICAgPSA2NSwKKyAgICBOSURfbWQyICAgICAgICAgICA9IDc3LAorICAgIE5JRF9tZDQgICAgICAgICAgID0gMjU3LAorICAgIE5JRF9tZDUgICAgICAgICAgID0gIDQsCisgICAgTklEX2htYWMgICAgICAgICAgPSA4NTUsCisgICAgTklEX2RoS2V5QWdyZWVtZW50PSAyOCwKKyAgICBFVlBfUEtFWV9ESCAgICAgICA9IE5JRF9kaEtleUFncmVlbWVudCwKKyAgICBFVlBfUEtFWV9ITUFDICAgICA9IE5JRF9obWFjLAorICAgIEFFU18xMjhfQ0ZCMV9UWVBFID0gMjQsCisgICAgQUVTXzE5Ml9DRkIxX1RZUEUgPSAyNSwKKyAgICBBRVNfMjU2X0NGQjFfVFlQRSA9IDI2LAorICAgIEFFU18xMjhfQ0ZCOF9UWVBFID0gMjcsCisgICAgQUVTXzE5Ml9DRkI4X1RZUEUgPSAyOCwKKyAgICBBRVNfMjU2X0NGQjhfVFlQRSA9IDI5LAorICAgIEFFU18xMjhfQ0ZCMTI4X1RZUEUgPSAzMCwKKyAgICBBRVNfMTkyX0NGQjEyOF9UWVBFID0gMzEsCisgICAgQUVTXzI1Nl9DRkIxMjhfVFlQRSA9IDMyLAorICAgIEFFU18xMjhfT0ZCX1RZUEUgPSAzMywKKyAgICBBRVNfMTkyX09GQl9UWVBFID0gMzQsCisgICAgQUVTXzI1Nl9PRkJfVFlQRSA9IDM1LAorICAgIEFFU18xMjhfWFRTX1RZUEUgPSAzNiwKKyAgICBBRVNfMjU2X1hUU19UWVBFID0gMzcKK307CisKK2VudW0geworICAgIE5JRF9tZDVXaXRoUlNBICAgID0gMTA0LAorICAgIE5JRF9tZDVXaXRoUlNBRW5jcnlwdGlvbiA9IDgsCisgICAgTklEX2RzYVdpdGhTSEExICAgPSAxMTMsCisgICAgTklEX2RzYVdpdGhTSEExXzIgPSA3MCwKKyAgICBOSURfc2hhMVdpdGhSU0EgICA9IDExNSwKKyAgICBOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uID0gNjUsCisgICAgTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uID0gNjcxLAorICAgIE5JRF9zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiA9IDY2OCwKKyAgICBOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24gPSA2NjksCisgICAgTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uID0gNjcwLAorICAgIE5JRF9lY2RzYV93aXRoX1NIQTEgPSA0MTYsCisgICAgTklEX2VjZHNhX3dpdGhfU0hBMjI0ID0gNzkzLAorICAgIE5JRF9lY2RzYV93aXRoX1NIQTI1NiA9IDc5NCwKKyAgICBOSURfZWNkc2Ffd2l0aF9TSEEzODQgPSA3OTUsCisgICAgTklEX2VjZHNhX3dpdGhfU0hBNTEyID0gNzk2LAorICAgIE5JRF9kc2Ffd2l0aF9TSEEyMjQgPSA4MDIsCisgICAgTklEX2RzYV93aXRoX1NIQTI1NiA9IDgwMywKKyAgICBOSURfc2hhM18yMjQgICAgICAgID0gMTA5NiwKKyAgICBOSURfc2hhM18yNTYgICAgICAgID0gMTA5NywKKyAgICBOSURfc2hhM18zODQgICAgICAgID0gMTA5OCwKKyAgICBOSURfc2hhM181MTIgICAgICAgID0gMTA5OSwKK307CisKK2VudW0geworICAgIE5JRF9hZXNfMTI4X2NiYyA9IDQxOSwKKyAgICBOSURfYWVzXzE5Ml9jYmMgPSA0MjMsCisgICAgTklEX2Flc18yNTZfY2JjID0gNDI3LAorICAgIE5JRF9hZXNfMTI4X2djbSA9IDg5NSwKKyAgICBOSURfYWVzXzE5Ml9nY20gPSA4OTgsCisgICAgTklEX2Flc18yNTZfZ2NtID0gOTAxLAorICAgIE5JRF9hZXNfMTI4X2N0ciA9IDkwNCwKKyAgICBOSURfYWVzXzE5Ml9jdHIgPSA5MDUsCisgICAgTklEX2Flc18yNTZfY3RyID0gOTA2LAorICAgIE5JRF9hZXNfMTI4X2VjYiA9IDQxOCwKKyAgICBOSURfYWVzXzE5Ml9lY2IgPSA0MjIsCisgICAgTklEX2Flc18yNTZfZWNiID0gNDI2LAorICAgIE5JRF9kZXNfY2JjICAgICA9ICAzMSwKKyAgICBOSURfZGVzX2VjYiAgICAgPSAgMjksCisgICAgTklEX2Rlc19lZGUzX2NiYz0gIDQ0LAorICAgIE5JRF9kZXNfZWRlM19lY2I9ICAzMywKKyAgICBOSURfaWRlYV9jYmMgICAgPSAgMzQsCisgICAgTklEX2Flc18xMjhfY2ZiMT0gNjUwLAorICAgIE5JRF9hZXNfMTkyX2NmYjE9IDY1MSwKKyAgICBOSURfYWVzXzI1Nl9jZmIxPSA2NTIsCisgICAgTklEX2Flc18xMjhfY2ZiOD0gNjUzLAorICAgIE5JRF9hZXNfMTkyX2NmYjg9IDY1NCwKKyAgICBOSURfYWVzXzI1Nl9jZmI4PSA2NTUsCisgICAgTklEX2Flc18xMjhfY2ZiMTI4ID0gNDIxLAorICAgIE5JRF9hZXNfMTkyX2NmYjEyOCA9IDQyNSwKKyAgICBOSURfYWVzXzI1Nl9jZmIxMjggPSA0MjksCisgICAgTklEX2Flc18xMjhfb2ZiID0gNDIwLAorICAgIE5JRF9hZXNfMTkyX29mYiA9IDQyNCwKKyAgICBOSURfYWVzXzI1Nl9vZmIgPSA0MjgsCisgICAgTklEX2Flc18xMjhfeHRzID0gOTEzLAorICAgIE5JRF9hZXNfMjU2X3h0cyA9IDkxNAorfTsKKworI2RlZmluZSBOSURfWDlfNjJfaWRfZWNQdWJsaWNLZXkgRVZQX1BLRVlfRUMKKyNkZWZpbmUgTklEX2RoS2V5QWdyZWVtZW50ICAgICAgIEVWUF9QS0VZX0RICisjZGVmaW5lIE5JRF9yc2FFbmNyeXB0aW9uICAgICAgICBFVlBfUEtFWV9SU0EKKyNkZWZpbmUgTklEX2RzYSAgICAgICAgICAgICAgICAgIEVWUF9QS0VZX0RTQQorCisjZGVmaW5lIFdPTEZTU0xfRVZQX0JVRl9TSVpFIDE2CitzdHJ1Y3QgV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCB7CisgICAgaW50ICAgICAgICAgICAga2V5TGVuOyAgICAgICAgIC8qIHVzZXIgbWF5IHNldCBmb3IgdmFyaWFibGUgKi8KKyAgICBpbnQgICAgICAgICAgICBibG9ja19zaXplOworICAgIHVuc2lnbmVkIGxvbmcgIGZsYWdzOworICAgIHVuc2lnbmVkIGNoYXIgIGVuYzsgICAgICAgICAgICAvKiBpZiBlbmNyeXB0IHNpZGUsIHRoZW4gdHJ1ZSAqLworICAgIHVuc2lnbmVkIGNoYXIgIGNpcGhlclR5cGU7CisjaWZuZGVmIE5PX0FFUworICAgIC8qIHdvcmtpbmcgaXYgcG9pbnRlciBpbnRvIGNpcGhlciAqLworICAgIEFMSUdOMTYgdW5zaWduZWQgY2hhciAgaXZbQUVTX0JMT0NLX1NJWkVdOworI2VsaWYgIWRlZmluZWQoTk9fREVTMykKKyAgICAvKiB3b3JraW5nIGl2IHBvaW50ZXIgaW50byBjaXBoZXIgKi8KKyAgICBBTElHTjE2IHVuc2lnbmVkIGNoYXIgIGl2W0RFU19CTE9DS19TSVpFXTsKKyNlbGlmIGRlZmluZWQoSEFWRV9JREVBKQorICAgIC8qIHdvcmtpbmcgaXYgcG9pbnRlciBpbnRvIGNpcGhlciAqLworICAgIEFMSUdOMTYgdW5zaWduZWQgY2hhciAgaXZbSURFQV9CTE9DS19TSVpFXTsKKyNlbmRpZgorICAgIFdPTEZTU0xfQ2lwaGVyICBjaXBoZXI7CisgICAgQUxJR04xNiBieXRlIGJ1ZltXT0xGU1NMX0VWUF9CVUZfU0laRV07CisgICAgaW50ICBidWZVc2VkOworICAgIEFMSUdOMTYgYnl0ZSBsYXN0QmxvY2tbV09MRlNTTF9FVlBfQlVGX1NJWkVdOworICAgIGludCAgbGFzdFVzZWQ7CisjaWYgIWRlZmluZWQoTk9fQUVTKSB8fCAhZGVmaW5lZChOT19ERVMzKSB8fCBkZWZpbmVkKEhBVkVfSURFQSkgfHwgXAorICAgIGRlZmluZWQoSEFWRV9BRVNHQ00pIHx8IGRlZmluZWQgKFdPTEZTU0xfQUVTX1hUUykKKyNkZWZpbmUgSEFWRV9XT0xGU1NMX0VWUF9DSVBIRVJfQ1RYX0lWCisgICAgaW50ICAgIGl2U3o7CisjaWZkZWYgSEFWRV9BRVNHQ00KKyAgICBieXRlKiAgIGdjbUJ1ZmZlcjsKKyAgICBpbnQgICAgIGdjbUJ1ZmZlckxlbjsKKyAgICBBTElHTjE2IHVuc2lnbmVkIGNoYXIgYXV0aFRhZ1tBRVNfQkxPQ0tfU0laRV07CisgICAgaW50ICAgICBhdXRoVGFnU3o7CisgICAgYnl0ZSogICBnY21BdXRoSW47CisgICAgaW50ICAgICBnY21BdXRoSW5TejsKKyNlbmRpZgorI2VuZGlmCit9OworCitzdHJ1Y3QgV09MRlNTTF9FVlBfUEtFWV9DVFggeworICAgIFdPTEZTU0xfRVZQX1BLRVkgKnBrZXk7CisgICAgV09MRlNTTF9FVlBfUEtFWSAqcGVlcktleTsKKyAgICBpbnQgb3A7IC8qIG9wZXJhdGlvbiAqLworICAgIGludCBwYWRkaW5nOworICAgIGludCBuYml0czsKK307CisKK3R5cGVkZWYKK3N0cnVjdCBXT0xGU1NMX0FTTjFfUENUWCB7CisgICAgaW50IGR1bW15OworfSBXT0xGU1NMX0FTTjFfUENUWDsKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQkFTRTY0X0VOQ09ERSkgfHwgZGVmaW5lZChXT0xGU1NMX0JBU0U2NF9ERUNPREUpCisKKyNkZWZpbmUgICBCQVNFNjRfRU5DT0RFX0JMT0NLX1NJWkUgIDQ4CisjZGVmaW5lICAgQkFTRTY0X0VOQ09ERV9SRVNVTFRfQkxPQ0tfU0laRSA2NAorI2RlZmluZSAgIEJBU0U2NF9ERUNPREVfQkxPQ0tfU0laRSAgNAorCitzdHJ1Y3QgV09MRlNTTF9FVlBfRU5DT0RFX0NUWCB7CisgICAgdm9pZCogaGVhcDsKKyAgICBpbnQgICByZW1haW5pbmc7ICAgICAvKiBudW0gb2YgYnl0ZXMgaW4gZGF0YVtdICovCisgICAgYnl0ZSAgZGF0YVtCQVNFNjRfRU5DT0RFX0JMT0NLX1NJWkVdOy8qIHN0b3JhZ2UgZm9yIHVucHJvY2Vzc2VkIHJhdyBkYXRhICovCit9OwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9FVlBfRU5DT0RFX0NUWCBXT0xGU1NMX0VWUF9FTkNPREVfQ1RYOworCitXT0xGU1NMX0FQSSBzdHJ1Y3QgV09MRlNTTF9FVlBfRU5DT0RFX0NUWCogd29sZlNTTF9FVlBfRU5DT0RFX0NUWF9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfRVZQX0VOQ09ERV9DVFhfZnJlZShXT0xGU1NMX0VWUF9FTkNPREVfQ1RYKiBjdHgpOworI2VuZGlmIC8qIFdPTEZTU0xfQkFTRTY0X0VOQ09ERSB8fCBXT0xGU1NMX0JBU0U2NF9ERUNPREUgKi8KKworI2lmIGRlZmluZWQoV09MRlNTTF9CQVNFNjRfRU5DT0RFKQorV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0VWUF9FbmNvZGVJbml0KFdPTEZTU0xfRVZQX0VOQ09ERV9DVFgqIGN0eCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX0VuY29kZVVwZGF0ZShXT0xGU1NMX0VWUF9FTkNPREVfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqb3V0LCBpbnQgKm91dGwsIGNvbnN0IHVuc2lnbmVkIGNoYXIqaW4sIGludCBpbmwpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0VWUF9FbmNvZGVGaW5hbChXT0xGU1NMX0VWUF9FTkNPREVfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqb3V0LCBpbnQgKm91dGwpOworI2VuZGlmIC8qIFdPTEZTU0xfQkFTRTY0X0VOQ09ERSAqLworCisjaWYgZGVmaW5lZChXT0xGU1NMX0JBU0U2NF9ERUNPREUpCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfRVZQX0RlY29kZUluaXQoV09MRlNTTF9FVlBfRU5DT0RFX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfRGVjb2RlVXBkYXRlKFdPTEZTU0xfRVZQX0VOQ09ERV9DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKm91dCwgaW50ICpvdXRsLCBjb25zdCB1bnNpZ25lZCBjaGFyKmluLCBpbnQgaW5sKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9EZWNvZGVGaW5hbChXT0xGU1NMX0VWUF9FTkNPREVfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcipvdXQsIGludCAqb3V0bCk7CisjZW5kaWYgLyogV09MRlNTTF9CQVNFNjRfREVDT0RFICovCisKK3R5cGVkZWYgaW50IFdPTEZTU0xfRU5HSU5FICA7Cit0eXBlZGVmIFdPTEZTU0xfRU5HSU5FIEVOR0lORTsKK3R5cGVkZWYgV09MRlNTTF9FVlBfUEtFWV9DVFggRVZQX1BLRVlfQ1RYOworCisjZGVmaW5lIEVWUF9QS0VZX09QX1NJR04gICAgKDEgPDwgMykKKyNkZWZpbmUgRVZQX1BLRVlfT1BfRU5DUllQVCAoMSA8PCA2KQorI2RlZmluZSBFVlBfUEtFWV9PUF9ERUNSWVBUICgxIDw8IDcpCisjZGVmaW5lIEVWUF9QS0VZX09QX0RFUklWRSAgKDEgPDwgOCkKKworI2RlZmluZSBFVlBfUEtFWV9QUklOVF9JTkRFTlRfTUFYICAgIDEyOAorCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfRVZQX2luaXQodm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX01EX3NpemUoY29uc3QgV09MRlNTTF9FVlBfTUQqIG1kKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfTURfdHlwZShjb25zdCBXT0xGU1NMX0VWUF9NRCAqbWQpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9NRF9ibG9ja19zaXplKGNvbnN0IFdPTEZTU0xfRVZQX01EICptZCk7CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRVZQX01EX0NUWCAqd29sZlNTTF9FVlBfTURfQ1RYX25ldyAodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX01EX0NUWF9mcmVlKFdPTEZTU0xfRVZQX01EX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9FVlBfTURfQ1RYX2luaXQoV09MRlNTTF9FVlBfTURfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9NRF9DVFhfY2xlYW51cChXT0xGU1NMX0VWUF9NRF9DVFgqIGN0eCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX01EX0NUWF9jb3B5KFdPTEZTU0xfRVZQX01EX0NUWCAqb3V0LCBjb25zdCBXT0xGU1NMX0VWUF9NRF9DVFggKmluKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfTURfQ1RYX2NvcHlfZXgoV09MRlNTTF9FVlBfTURfQ1RYICpvdXQsIGNvbnN0IFdPTEZTU0xfRVZQX01EX0NUWCAqaW4pOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9NRF9DVFhfdHlwZShjb25zdCBXT0xGU1NMX0VWUF9NRF9DVFggKmN0eCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX01EX0NUWF9zaXplKGNvbnN0IFdPTEZTU0xfRVZQX01EX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfTURfQ1RYX2Jsb2NrX3NpemUoY29uc3QgV09MRlNTTF9FVlBfTURfQ1RYICpjdHgpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfTUQgKndvbGZTU0xfRVZQX01EX0NUWF9tZChjb25zdCBXT0xGU1NMX0VWUF9NRF9DVFggKmN0eCk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIgKndvbGZTU0xfRVZQX2dldF9jaXBoZXJieW5hbWUoY29uc3QgY2hhciAqbmFtZSk7CitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9NRCAgICAgKndvbGZTU0xfRVZQX2dldF9kaWdlc3RieW5hbWUoY29uc3QgY2hhciAqbmFtZSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfQ0lQSEVSX25pZChjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIgKmNpcGhlcik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9EaWdlc3RJbml0KFdPTEZTU0xfRVZQX01EX0NUWCogY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRVZQX01EKiB0eXBlKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9EaWdlc3RJbml0X2V4KFdPTEZTU0xfRVZQX01EX0NUWCogY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRVZQX01EKiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfRU5HSU5FICppbXBsKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9EaWdlc3RVcGRhdGUoV09MRlNTTF9FVlBfTURfQ1RYKiBjdHgsIGNvbnN0IHZvaWQqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3opOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX0RpZ2VzdEZpbmFsKFdPTEZTU0xfRVZQX01EX0NUWCogY3R4LCB1bnNpZ25lZCBjaGFyKiBtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBzKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9EaWdlc3RGaW5hbF9leChXT0xGU1NMX0VWUF9NRF9DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogbWQsIHVuc2lnbmVkIGludCogcyk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9EaWdlc3RTaWduSW5pdChXT0xGU1NMX0VWUF9NRF9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0VWUF9QS0VZX0NUWCAqKnBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FVlBfTUQgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FTkdJTkUgKmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FVlBfUEtFWSAqcGtleSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfRGlnZXN0U2lnblVwZGF0ZShXT0xGU1NMX0VWUF9NRF9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmQsIHVuc2lnbmVkIGludCBjbnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX0RpZ2VzdFNpZ25GaW5hbChXT0xGU1NMX0VWUF9NRF9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ2xlbik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9EaWdlc3RWZXJpZnlJbml0KFdPTEZTU0xfRVZQX01EX0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FVlBfUEtFWV9DVFggKipwY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FVlBfTUQgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0VOR0lORSAqZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfRVZQX1BLRVkgKnBrZXkpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX0RpZ2VzdFZlcmlmeVVwZGF0ZShXT0xGU1NMX0VWUF9NRF9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZCwgc2l6ZV90IGNudCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfRGlnZXN0VmVyaWZ5RmluYWwoV09MRlNTTF9FVlBfTURfQ1RYICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaWdsZW4pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX0RpZ2VzdChjb25zdCB1bnNpZ25lZCBjaGFyKiBpbiwgaW50IGluU3osIHVuc2lnbmVkIGNoYXIqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogb3V0U3osIGNvbnN0IFdPTEZTU0xfRVZQX01EKiBldnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0VOR0lORSogZW5nKTsKKworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfQnl0ZXNUb0tleShjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FVlBfTUQqLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBpbnQsIGludCwgdW5zaWduZWQgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKik7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9pbml0KFdPTEZTU0xfRVZQX0NJUEhFUl9DVFgqIGN0eCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX0NJUEhFUl9DVFhfY2xlYW51cChXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX2N0cmwoV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCAqY3R4LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCopOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9DSVBIRVJfaXZfbGVuZ3RoKGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX0NpcGhlcl9rZXlfbGVuZ3RoKGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogYyk7CisKKworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9DaXBoZXJJbml0KFdPTEZTU0xfRVZQX0NJUEhFUl9DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuYyk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX0NpcGhlckluaXRfZXgoV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCogY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FTkdJTkUgKmltcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmMpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9FbmNyeXB0SW5pdChXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpdik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX0VuY3J5cHRJbml0X2V4KFdPTEZTU0xfRVZQX0NJUEhFUl9DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfRU5HSU5FICppbXBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogaXYpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9EZWNyeXB0SW5pdChXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpdik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX0RlY3J5cHRJbml0X2V4KFdPTEZTU0xfRVZQX0NJUEhFUl9DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfRU5HSU5FICppbXBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogaXYpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX0NpcGhlclVwZGF0ZShXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50ICpvdXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGlubCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX0NpcGhlckZpbmFsKFdPTEZTU0xfRVZQX0NJUEhFUl9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgKm91dGwpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9DaXBoZXJGaW5hbF9leChXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50ICpvdXRsLCBpbnQgZW5jKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfRW5jcnlwdEZpbmFsKFdPTEZTU0xfRVZQX0NJUEhFUl9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgKm91dGwpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9FbmNyeXB0RmluYWxfZXgoV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIGludCAqb3V0bCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX0RlY3J5cHRGaW5hbChXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50ICpvdXRsKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfRGVjcnlwdEZpbmFsX2V4KFdPTEZTU0xfRVZQX0NJUEhFUl9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgKm91dGwpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9EZWNyeXB0RmluYWxfbGVnYWN5KFdPTEZTU0xfRVZQX0NJUEhFUl9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgKm91dGwpOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYICp3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9mcmVlKFdPTEZTU0xfRVZQX0NJUEhFUl9DVFggKmN0eCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX0NJUEhFUl9DVFhfcmVzZXQoV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoKFdPTEZTU0xfRVZQX0NJUEhFUl9DVFgqIGN0eCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfRVZQX0NJUEhFUl9DVFhfc2V0X2tleV9sZW5ndGgoV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCogY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5bGVuKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9zZXRfaXZfbGVuZ3RoKFdPTEZTU0xfRVZQX0NJUEhFUl9DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGl2TGVuKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9zZXRfaXYoV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCogY3R4LCBieXRlKiBpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGl2TGVuKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9FVlBfQ2lwaGVyKFdPTEZTU0xfRVZQX0NJUEhFUl9DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZHN0LCB1bnNpZ25lZCBjaGFyKiBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pOworCitXT0xGU1NMX0FQSSBjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIqIHdvbGZTU0xfRVZQX2dldF9jaXBoZXJieW5pZChpbnQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfTUQqIHdvbGZTU0xfRVZQX2dldF9kaWdlc3RieW5pZChpbnQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSICp3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX2NpcGhlcihjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYICpjdHgpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfUEtFWV9hc3NpZ25fUlNBKFdPTEZTU0xfRVZQX1BLRVkqIHBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfUlNBKiBrZXkpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1BLRVlfYXNzaWduX0VDX0tFWShXT0xGU1NMX0VWUF9QS0VZKiBwa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0VDX0tFWSoga2V5KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX2Fzc2lnbl9EU0EoRVZQX1BLRVkqIHBrZXksIFdPTEZTU0xfRFNBKiBrZXkpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1BLRVlfYXNzaWduX0RIKEVWUF9QS0VZKiBwa2V5LCBXT0xGU1NMX0RIKiBrZXkpOworV09MRlNTTF9BUEkgV09MRlNTTF9SU0EqIHdvbGZTU0xfRVZQX1BLRVlfZ2V0MF9SU0Eoc3RydWN0IFdPTEZTU0xfRVZQX1BLRVkgKnBrZXkpOworV09MRlNTTF9BUEkgV09MRlNTTF9EU0EqIHdvbGZTU0xfRVZQX1BLRVlfZ2V0MF9EU0Eoc3RydWN0IFdPTEZTU0xfRVZQX1BLRVkgKnBrZXkpOworV09MRlNTTF9BUEkgV09MRlNTTF9SU0EqIHdvbGZTU0xfRVZQX1BLRVlfZ2V0MV9SU0EoV09MRlNTTF9FVlBfUEtFWSopOworV09MRlNTTF9BUEkgV09MRlNTTF9EU0EqIHdvbGZTU0xfRVZQX1BLRVlfZ2V0MV9EU0EoV09MRlNTTF9FVlBfUEtFWSopOworV09MRlNTTF9BUEkgV09MRlNTTF9FQ19LRVkgKndvbGZTU0xfRVZQX1BLRVlfZ2V0MF9FQ19LRVkoV09MRlNTTF9FVlBfUEtFWSAqcGtleSk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0VDX0tFWSAqd29sZlNTTF9FVlBfUEtFWV9nZXQxX0VDX0tFWShXT0xGU1NMX0VWUF9QS0VZICprZXkpOworV09MRlNTTF9BUEkgV09MRlNTTF9ESCogd29sZlNTTF9FVlBfUEtFWV9nZXQwX0RIKFdPTEZTU0xfRVZQX1BLRVkqIGtleSk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0RIKiB3b2xmU1NMX0VWUF9QS0VZX2dldDFfREgoV09MRlNTTF9FVlBfUEtFWSoga2V5KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX3NldDFfUlNBKFdPTEZTU0xfRVZQX1BLRVkgKnBrZXksIFdPTEZTU0xfUlNBICprZXkpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1BLRVlfc2V0MV9EU0EoV09MRlNTTF9FVlBfUEtFWSAqcGtleSwgV09MRlNTTF9EU0EgKmtleSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfUEtFWV9zZXQxX0RIKFdPTEZTU0xfRVZQX1BLRVkgKnBrZXksIFdPTEZTU0xfREggKmtleSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfUEtFWV9zZXQxX0VDX0tFWShXT0xGU1NMX0VWUF9QS0VZICpwa2V5LCBXT0xGU1NMX0VDX0tFWSAqa2V5KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX2Fzc2lnbihXT0xGU1NMX0VWUF9QS0VZICpwa2V5LCBpbnQgdHlwZSwgdm9pZCAqa2V5KTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9FVlBfUEtFWSogd29sZlNTTF9FVlBfUEtFWV9uZXdfbWFjX2tleShpbnQgdHlwZSwgRU5HSU5FKiBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioga2V5LCBpbnQga2V5bGVuKTsKK1dPTEZTU0xfQVBJIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHdvbGZTU0xfRVZQX1BLRVlfZ2V0MF9obWFjKGNvbnN0IFdPTEZTU0xfRVZQX1BLRVkqIHBrZXksCisgICAgICAgIHNpemVfdCogbGVuKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX3NpZ25faW5pdChXT0xGU1NMX0VWUF9QS0VZX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX3NpZ24oV09MRlNTTF9FVlBfUEtFWV9DVFggKmN0eCwKKyAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ2xlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBzaXplX3QgdGJzbGVuKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX2tleWdlbl9pbml0KFdPTEZTU0xfRVZQX1BLRVlfQ1RYICpjdHgpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1BLRVlfa2V5Z2VuKFdPTEZTU0xfRVZQX1BLRVlfQ1RYICpjdHgsCisgIFdPTEZTU0xfRVZQX1BLRVkgKipwcGtleSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfUEtFWV9iaXRzKGNvbnN0IFdPTEZTU0xfRVZQX1BLRVkgKnBrZXkpOworI2lmIGRlZmluZWQoT1BFTlNTTF9WRVJTSU9OX05VTUJFUikgJiYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDAwTAorV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0VWUF9QS0VZX0NUWF9mcmVlKFdPTEZTU0xfRVZQX1BLRVlfQ1RYICpjdHgpOworI2Vsc2UKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX0NUWF9mcmVlKFdPTEZTU0xfRVZQX1BLRVlfQ1RYICpjdHgpOworI2VuZGlmCitXT0xGU1NMX0FQSSBXT0xGU1NMX0VWUF9QS0VZX0NUWCAqd29sZlNTTF9FVlBfUEtFWV9DVFhfbmV3KFdPTEZTU0xfRVZQX1BLRVkgKnBrZXksIFdPTEZTU0xfRU5HSU5FICplKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcoV09MRlNTTF9FVlBfUEtFWV9DVFggKmN0eCwgaW50IHBhZGRpbmcpOworV09MRlNTTF9BUEkgV09MRlNTTF9FVlBfUEtFWV9DVFggKndvbGZTU0xfRVZQX1BLRVlfQ1RYX25ld19pZChpbnQgaWQsIFdPTEZTU0xfRU5HSU5FICplKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX0NUWF9zZXRfcnNhX2tleWdlbl9iaXRzKFdPTEZTU0xfRVZQX1BLRVlfQ1RYICpjdHgsIGludCBiaXRzKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1BLRVlfZGVyaXZlX2luaXQoV09MRlNTTF9FVlBfUEtFWV9DVFggKmN0eCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfUEtFWV9kZXJpdmVfc2V0X3BlZXIoV09MRlNTTF9FVlBfUEtFWV9DVFggKmN0eCwgV09MRlNTTF9FVlBfUEtFWSAqcGVlcik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfUEtFWV9kZXJpdmUoV09MRlNTTF9FVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3QgKmtleWxlbik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX0NUWF9jdHJsX3N0cihXT0xGU1NMX0VWUF9QS0VZX0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX2RlY3J5cHQoV09MRlNTTF9FVlBfUEtFWV9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX2RlY3J5cHRfaW5pdChXT0xGU1NMX0VWUF9QS0VZX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX2VuY3J5cHQoV09MRlNTTF9FVlBfUEtFWV9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX2VuY3J5cHRfaW5pdChXT0xGU1NMX0VWUF9QS0VZX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRVZQX1BLRVkgKndvbGZTU0xfRVZQX1BLRVlfbmV3KHZvaWQpOworV09MRlNTTF9BUEkgV09MRlNTTF9FVlBfUEtFWSogd29sZlNTTF9FVlBfUEtFWV9uZXdfZXgodm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfRVZQX1BLRVlfZnJlZShXT0xGU1NMX0VWUF9QS0VZKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfUEtFWV9zaXplKFdPTEZTU0xfRVZQX1BLRVkgKnBrZXkpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1BLRVlfY29weV9wYXJhbWV0ZXJzKFdPTEZTU0xfRVZQX1BLRVkgKnRvLCBjb25zdCBXT0xGU1NMX0VWUF9QS0VZICpmcm9tKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX21pc3NpbmdfcGFyYW1ldGVycyhXT0xGU1NMX0VWUF9QS0VZICpwa2V5KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX2NtcChjb25zdCBXT0xGU1NMX0VWUF9QS0VZICphLCBjb25zdCBXT0xGU1NMX0VWUF9QS0VZICpiKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX3R5cGUoaW50IHR5cGUpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1BLRVlfaWQoY29uc3QgV09MRlNTTF9FVlBfUEtFWSAqcGtleSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfUEtFWV9iYXNlX2lkKGNvbnN0IFdPTEZTU0xfRVZQX1BLRVkgKnBrZXkpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0X25pZChXT0xGU1NMX0VWUF9QS0VZICpwa2V5LCBpbnQgKnBuaWQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1NpZ25GaW5hbChXT0xGU1NMX0VWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqc2lncmV0LAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpzaWdsZW4sIFdPTEZTU0xfRVZQX1BLRVkgKnBrZXkpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1NpZ25Jbml0KFdPTEZTU0xfRVZQX01EX0NUWCAqY3R4LCBjb25zdCBXT0xGU1NMX0VWUF9NRCAqdHlwZSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfU2lnbkluaXRfZXgoV09MRlNTTF9FVlBfTURfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FVlBfTUQqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FTkdJTkUgKmltcGwpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1NpZ25VcGRhdGUoV09MRlNTTF9FVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRVZQX1ZlcmlmeUZpbmFsKFdPTEZTU0xfRVZQX01EX0NUWCAqY3R4LAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzaWcsIHVuc2lnbmVkIGludCBzaWdfbGVuLCBXT0xGU1NMX0VWUF9QS0VZICpwa2V5KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9WZXJpZnlJbml0KFdPTEZTU0xfRVZQX01EX0NUWCAqY3R4LCBjb25zdCBXT0xGU1NMX0VWUF9NRCAqdHlwZSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfVmVyaWZ5VXBkYXRlKFdPTEZTU0xfRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKworCisvKiB0aGVzZSBuZXh0IG9uZXMgZG9uJ3QgbmVlZCByZWFsIE9wZW5TU0wgdHlwZSwgZm9yIE9wZW5TU0ggY29tcGF0IG9ubHkgKi8KK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfRVZQX1hfU1RBVEUoY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIGludCAgIHdvbGZTU0xfRVZQX1hfU1RBVEVfTEVOKGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUl9DVFgqIGN0eCk7CisKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfM2Rlc19pdihXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYKiBjdHgsIGludCBkb3NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaXYsIGludCBsZW4pOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9hZXNfY3RyX2l2KFdPTEZTU0xfRVZQX0NJUEhFUl9DVFgqIGN0eCwgaW50IGRvc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBpdiwgaW50IGxlbik7CisKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9TdG9yZUV4dGVybmFsSVYoV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9TZXRJbnRlcm5hbElWKFdPTEZTU0xfRVZQX0NJUEhFUl9DVFgqIGN0eCk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9DSVBIRVJfYmxvY2tfc2l6ZShjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIgKmNpcGhlcik7CitXT0xGU1NMX0FQSSB1bnNpZ25lZCBsb25nIFdPTEZTU0xfRVZQX0NJUEhFUl9tb2RlKGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiAqY2lwaGVyKTsKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGxvbmcgV09MRlNTTF9DSVBIRVJfbW9kZShjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIgKmNpcGhlcik7CitXT0xGU1NMX0FQSSB1bnNpZ25lZCBsb25nIHdvbGZTU0xfRVZQX0NJUEhFUl9mbGFncyhjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVIgKmNpcGhlcik7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKFdPTEZTU0xfRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IGZsYWdzKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9jbGVhcl9mbGFncyhXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYICpjdHgsIGludCBmbGFncyk7CitXT0xGU1NMX0FQSSB1bnNpZ25lZCBsb25nIHdvbGZTU0xfRVZQX0NJUEhFUl9DVFhfbW9kZShjb25zdCBXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYICpjdHgpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX3NldF9wYWRkaW5nKFdPTEZTU0xfRVZQX0NJUEhFUl9DVFggKmMsIGludCBwYWQpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9hZGRfZGlnZXN0KGNvbnN0IFdPTEZTU0xfRVZQX01EICpkaWdlc3QpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0VWUF9hZGRfY2lwaGVyKGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiAqY2lwaGVyKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9FVlBfY2xlYW51cCh2b2lkKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9hZGRfYWxsX2FsZ29yaXRobXModm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXNfY29uZih2b2lkKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9PcGVuU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19ub2NvbmYodm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfcmVhZF9wd19zdHJpbmcoY2hhciosIGludCwgY29uc3QgY2hhciosIGludCk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1BLQ1M1X1BCS0RGMl9ITUFDX1NIQTEoY29uc3QgY2hhciAqIHBhc3MsIGludCBwYXNzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNhbHRsZW4sIGludCBpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5bGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9QS0NTNV9QQktERjJfSE1BQyhjb25zdCBjaGFyICpwYXNzLCBpbnQgcGFzc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYWx0bGVuLCBpbnQgaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0VWUF9NRCAqZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCk7CisKK1dPTEZTU0xfTE9DQUwgaW50IHdvbGZTU0xfRVZQX2dldF9oYXNoaW5mbyhjb25zdCBXT0xGU1NMX0VWUF9NRCogZXZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcEhhc2gsIGludCogcEhhc2hTeik7CisKKyNkZWZpbmUgRVZQX0NJUEhfU1RSRUFNX0NJUEhFUiBXT0xGU1NMX0VWUF9DSVBIX1NUUkVBTV9DSVBIRVIKKyNkZWZpbmUgRVZQX0NJUEhfRUNCX01PREUgV09MRlNTTF9FVlBfQ0lQSF9FQ0JfTU9ERQorI2RlZmluZSBFVlBfQ0lQSF9DQkNfTU9ERSBXT0xGU1NMX0VWUF9DSVBIX0NCQ19NT0RFCisjZGVmaW5lIEVWUF9DSVBIX0NGQl9NT0RFIFdPTEZTU0xfRVZQX0NJUEhfQ0ZCX01PREUKKyNkZWZpbmUgRVZQX0NJUEhfT0ZCX01PREUgV09MRlNTTF9FVlBfQ0lQSF9PRkJfTU9ERQorI2RlZmluZSBFVlBfQ0lQSF9DVFJfTU9ERSBXT0xGU1NMX0VWUF9DSVBIX0NUUl9NT0RFCisjZGVmaW5lIEVWUF9DSVBIX0dDTV9NT0RFIFdPTEZTU0xfRVZQX0NJUEhfR0NNX01PREUKKyNkZWZpbmUgRVZQX0NJUEhfQ0NNX01PREUgV09MRlNTTF9FVlBfQ0lQSF9DQ01fTU9ERQorI2RlZmluZSBFVlBfQ0lQSF9YVFNfTU9ERSBXT0xGU1NMX0VWUF9DSVBIX1hUU19NT0RFCisKKyNkZWZpbmUgRVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUiBXT0xGU1NMX0VWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIKKworI2RlZmluZSBXT0xGU1NMX0VWUF9DSVBIX01PREUgICAgICAgICAgIDB4MDAwNworI2RlZmluZSBXT0xGU1NMX0VWUF9DSVBIX1NUUkVBTV9DSVBIRVIgICAgICAweDAKKyNkZWZpbmUgV09MRlNTTF9FVlBfQ0lQSF9FQ0JfTU9ERSAgICAgICAgICAgMHgxCisjZGVmaW5lIFdPTEZTU0xfRVZQX0NJUEhfQ0JDX01PREUgICAgICAgICAgIDB4MgorI2RlZmluZSBXT0xGU1NMX0VWUF9DSVBIX0NGQl9NT0RFICAgICAgICAgICAweDMKKyNkZWZpbmUgV09MRlNTTF9FVlBfQ0lQSF9PRkJfTU9ERSAgICAgICAgICAgMHg0CisjZGVmaW5lIFdPTEZTU0xfRVZQX0NJUEhfQ1RSX01PREUgICAgICAgICAgIDB4NQorI2RlZmluZSBXT0xGU1NMX0VWUF9DSVBIX0dDTV9NT0RFICAgICAgICAgICAweDYKKyNkZWZpbmUgV09MRlNTTF9FVlBfQ0lQSF9DQ01fTU9ERSAgICAgICAgICAgMHg3CisjZGVmaW5lIFdPTEZTU0xfRVZQX0NJUEhfWFRTX01PREUgICAgICAgICAgMHgxMAorI2RlZmluZSBXT0xGU1NMX0VWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIgIDB4MjAKKyNkZWZpbmUgV09MRlNTTF9FVlBfQ0lQSF9OT19QQURESU5HICAgICAgIDB4MTAwCisjZGVmaW5lIEVWUF9DSVBIX1ZBUklBQkxFX0xFTkdUSCAgICAgICAgICAweDIwMAorI2RlZmluZSBXT0xGU1NMX0VWUF9DSVBIX1RZUEVfSU5JVCAgICAgICAgIDB4ZmYKKworLyogZW5kIE9wZW5TU0ggY29tcGF0ICovCisKK3R5cGVkZWYgV09MRlNTTF9FVlBfTUQgICAgICAgICBFVlBfTUQ7Cit0eXBlZGVmIFdPTEZTU0xfRVZQX0NJUEhFUiAgICAgRVZQX0NJUEhFUjsKK3R5cGVkZWYgV09MRlNTTF9FVlBfTURfQ1RYICAgICBFVlBfTURfQ1RYOwordHlwZWRlZiBXT0xGU1NMX0VWUF9DSVBIRVJfQ1RYIEVWUF9DSVBIRVJfQ1RYOwordHlwZWRlZiBXT0xGU1NMX0FTTjFfUENUWCAgICAgIEFTTjFfUENUWDsKKworI2lmbmRlZiBOT19NRDQKKyAgICAjZGVmaW5lIEVWUF9tZDQgICAgICAgd29sZlNTTF9FVlBfbWQ0CisjZW5kaWYKKyNpZm5kZWYgTk9fTUQ1CisgICAgI2RlZmluZSBFVlBfbWQ1ICAgICAgIHdvbGZTU0xfRVZQX21kNQorI2VuZGlmCisjZGVmaW5lIEVWUF9zaGExICAgICAgICAgIHdvbGZTU0xfRVZQX3NoYTEKKyNkZWZpbmUgRVZQX21kYzIgICAgICAgICAgd29sZlNTTF9FVlBfbWRjMgorI2RlZmluZSBFVlBfZGRzMSAgICAgICAgICB3b2xmU1NMX0VWUF9zaGExCisjZGVmaW5lIEVWUF9zaGEyMjQgICAgICAgIHdvbGZTU0xfRVZQX3NoYTIyNAorI2RlZmluZSBFVlBfc2hhMjU2ICAgICAgICB3b2xmU1NMX0VWUF9zaGEyNTYKKyNkZWZpbmUgRVZQX3NoYTM4NCAgICAgICAgd29sZlNTTF9FVlBfc2hhMzg0CisjZGVmaW5lIEVWUF9zaGE1MTIgICAgICAgIHdvbGZTU0xfRVZQX3NoYTUxMgorI2RlZmluZSBFVlBfcmlwZW1kMTYwICAgICB3b2xmU1NMX0VWUF9yaXBlbWQxNjAKKyNkZWZpbmUgRVZQX3NldF9wd19wcm9tcHQgd29sZlNTTF9FVlBfc2V0X3B3X3Byb21wdAorCisjZGVmaW5lIEVWUF9zaGEzXzIyNCAgICB3b2xmU1NMX0VWUF9zaGEzXzIyNAorI2RlZmluZSBFVlBfc2hhM18yNTYgICAgd29sZlNTTF9FVlBfc2hhM18yNTYKKyNkZWZpbmUgRVZQX3NoYTNfMzg0ICAgIHdvbGZTU0xfRVZQX3NoYTNfMzg0CisjZGVmaW5lIEVWUF9zaGEzXzUxMiAgICB3b2xmU1NMX0VWUF9zaGEzXzUxMgorCisjZGVmaW5lIEVWUF9hZXNfMTI4X2NiYyAgICB3b2xmU1NMX0VWUF9hZXNfMTI4X2NiYworI2RlZmluZSBFVlBfYWVzXzE5Ml9jYmMgICAgd29sZlNTTF9FVlBfYWVzXzE5Ml9jYmMKKyNkZWZpbmUgRVZQX2Flc18yNTZfY2JjICAgIHdvbGZTU0xfRVZQX2Flc18yNTZfY2JjCisjZGVmaW5lIEVWUF9hZXNfMTI4X2NmYjEgICB3b2xmU1NMX0VWUF9hZXNfMTI4X2NmYjEKKyNkZWZpbmUgRVZQX2Flc18xOTJfY2ZiMSAgIHdvbGZTU0xfRVZQX2Flc18xOTJfY2ZiMQorI2RlZmluZSBFVlBfYWVzXzI1Nl9jZmIxICAgd29sZlNTTF9FVlBfYWVzXzI1Nl9jZmIxCisjZGVmaW5lIEVWUF9hZXNfMTI4X2NmYjggICB3b2xmU1NMX0VWUF9hZXNfMTI4X2NmYjgKKyNkZWZpbmUgRVZQX2Flc18xOTJfY2ZiOCAgIHdvbGZTU0xfRVZQX2Flc18xOTJfY2ZiOAorI2RlZmluZSBFVlBfYWVzXzI1Nl9jZmI4ICAgd29sZlNTTF9FVlBfYWVzXzI1Nl9jZmI4CisjZGVmaW5lIEVWUF9hZXNfMTI4X2NmYjEyOCB3b2xmU1NMX0VWUF9hZXNfMTI4X2NmYjEyOAorI2RlZmluZSBFVlBfYWVzXzE5Ml9jZmIxMjggd29sZlNTTF9FVlBfYWVzXzE5Ml9jZmIxMjgKKyNkZWZpbmUgRVZQX2Flc18yNTZfY2ZiMTI4IHdvbGZTU0xfRVZQX2Flc18yNTZfY2ZiMTI4CisjZGVmaW5lIEVWUF9hZXNfMTI4X29mYiAgICB3b2xmU1NMX0VWUF9hZXNfMTI4X29mYgorI2RlZmluZSBFVlBfYWVzXzE5Ml9vZmIgICAgd29sZlNTTF9FVlBfYWVzXzE5Ml9vZmIKKyNkZWZpbmUgRVZQX2Flc18yNTZfb2ZiICAgIHdvbGZTU0xfRVZQX2Flc18yNTZfb2ZiCisjZGVmaW5lIEVWUF9hZXNfMTI4X3h0cyAgICB3b2xmU1NMX0VWUF9hZXNfMTI4X3h0cworI2RlZmluZSBFVlBfYWVzXzI1Nl94dHMgICAgd29sZlNTTF9FVlBfYWVzXzI1Nl94dHMKKyNkZWZpbmUgRVZQX2Flc18xMjhfZ2NtICAgIHdvbGZTU0xfRVZQX2Flc18xMjhfZ2NtCisjZGVmaW5lIEVWUF9hZXNfMTkyX2djbSAgICB3b2xmU1NMX0VWUF9hZXNfMTkyX2djbQorI2RlZmluZSBFVlBfYWVzXzI1Nl9nY20gICAgd29sZlNTTF9FVlBfYWVzXzI1Nl9nY20KKyNkZWZpbmUgRVZQX2Flc18xMjhfZWNiICAgIHdvbGZTU0xfRVZQX2Flc18xMjhfZWNiCisjZGVmaW5lIEVWUF9hZXNfMTkyX2VjYiAgICB3b2xmU1NMX0VWUF9hZXNfMTkyX2VjYgorI2RlZmluZSBFVlBfYWVzXzI1Nl9lY2IgICAgd29sZlNTTF9FVlBfYWVzXzI1Nl9lY2IKKyNkZWZpbmUgRVZQX2Flc18xMjhfY3RyICAgIHdvbGZTU0xfRVZQX2Flc18xMjhfY3RyCisjZGVmaW5lIEVWUF9hZXNfMTkyX2N0ciAgICB3b2xmU1NMX0VWUF9hZXNfMTkyX2N0cgorI2RlZmluZSBFVlBfYWVzXzI1Nl9jdHIgICAgd29sZlNTTF9FVlBfYWVzXzI1Nl9jdHIKKyNkZWZpbmUgRVZQX2Rlc19jYmMgICAgICAgIHdvbGZTU0xfRVZQX2Rlc19jYmMKKyNkZWZpbmUgRVZQX2Rlc19lY2IgICAgICAgIHdvbGZTU0xfRVZQX2Rlc19lY2IKKyNkZWZpbmUgRVZQX2Rlc19lZGUzX2NiYyAgIHdvbGZTU0xfRVZQX2Rlc19lZGUzX2NiYworI2RlZmluZSBFVlBfZGVzX2VkZTNfZWNiICAgd29sZlNTTF9FVlBfZGVzX2VkZTNfZWNiCisjZGVmaW5lIEVWUF9yYzQgICAgICAgICAgICB3b2xmU1NMX0VWUF9yYzQKKyNkZWZpbmUgRVZQX2lkZWFfY2JjICAgICAgIHdvbGZTU0xfRVZQX2lkZWFfY2JjCisjZGVmaW5lIEVWUF9lbmNfbnVsbCAgICAgICB3b2xmU1NMX0VWUF9lbmNfbnVsbAorCisjZGVmaW5lIEVWUF9NRF9zaXplICAgICAgICAgICAgIHdvbGZTU0xfRVZQX01EX3NpemUKKyNkZWZpbmUgRVZQX01EX0NUWF9uZXcgICAgICAgICAgd29sZlNTTF9FVlBfTURfQ1RYX25ldworI2RlZmluZSBFVlBfTURfQ1RYX2NyZWF0ZSAgICAgICB3b2xmU1NMX0VWUF9NRF9DVFhfbmV3CisjZGVmaW5lIEVWUF9NRF9DVFhfZnJlZSAgICAgICAgIHdvbGZTU0xfRVZQX01EX0NUWF9mcmVlCisjZGVmaW5lIEVWUF9NRF9DVFhfZGVzdHJveSAgICAgIHdvbGZTU0xfRVZQX01EX0NUWF9mcmVlCisjZGVmaW5lIEVWUF9NRF9DVFhfaW5pdCAgICAgICAgIHdvbGZTU0xfRVZQX01EX0NUWF9pbml0CisjZGVmaW5lIEVWUF9NRF9DVFhfY2xlYW51cCAgICAgIHdvbGZTU0xfRVZQX01EX0NUWF9jbGVhbnVwCisjZGVmaW5lIEVWUF9NRF9DVFhfcmVzZXQgICAgICAgIHdvbGZTU0xfRVZQX01EX0NUWF9jbGVhbnVwCisjZGVmaW5lIEVWUF9NRF9DVFhfbWQgICAgICAgICAgIHdvbGZTU0xfRVZQX01EX0NUWF9tZAorI2RlZmluZSBFVlBfTURfQ1RYX3R5cGUgICAgICAgICB3b2xmU1NMX0VWUF9NRF9DVFhfdHlwZQorI2RlZmluZSBFVlBfTURfQ1RYX3NpemUgICAgICAgICB3b2xmU1NMX0VWUF9NRF9DVFhfc2l6ZQorI2RlZmluZSBFVlBfTURfQ1RYX2Jsb2NrX3NpemUgICB3b2xmU1NMX0VWUF9NRF9DVFhfYmxvY2tfc2l6ZQorI2RlZmluZSBFVlBfTURfdHlwZSAgICAgICAgICAgICB3b2xmU1NMX0VWUF9NRF90eXBlCisjaWZuZGVmIE5PX1dPTEZTU0xfU1RVQgorI2RlZmluZSBFVlBfTURfQ1RYX3NldF9mbGFncyguLi4pCisjZW5kaWYKKworI2RlZmluZSBFVlBfRGlnZXN0ICAgICAgICAgICAgIHdvbGZTU0xfRVZQX0RpZ2VzdAorI2RlZmluZSBFVlBfRGlnZXN0SW5pdCAgICAgICAgIHdvbGZTU0xfRVZQX0RpZ2VzdEluaXQKKyNkZWZpbmUgRVZQX0RpZ2VzdEluaXRfZXggICAgICB3b2xmU1NMX0VWUF9EaWdlc3RJbml0X2V4CisjZGVmaW5lIEVWUF9EaWdlc3RVcGRhdGUgICAgICAgd29sZlNTTF9FVlBfRGlnZXN0VXBkYXRlCisjZGVmaW5lIEVWUF9EaWdlc3RGaW5hbCAgICAgICAgd29sZlNTTF9FVlBfRGlnZXN0RmluYWwKKyNkZWZpbmUgRVZQX0RpZ2VzdEZpbmFsX2V4ICAgICB3b2xmU1NMX0VWUF9EaWdlc3RGaW5hbF9leAorI2RlZmluZSBFVlBfRGlnZXN0U2lnbkluaXQgICAgIHdvbGZTU0xfRVZQX0RpZ2VzdFNpZ25Jbml0CisjZGVmaW5lIEVWUF9EaWdlc3RTaWduVXBkYXRlICAgd29sZlNTTF9FVlBfRGlnZXN0U2lnblVwZGF0ZQorI2RlZmluZSBFVlBfRGlnZXN0U2lnbkZpbmFsICAgIHdvbGZTU0xfRVZQX0RpZ2VzdFNpZ25GaW5hbAorI2RlZmluZSBFVlBfRGlnZXN0VmVyaWZ5SW5pdCAgIHdvbGZTU0xfRVZQX0RpZ2VzdFZlcmlmeUluaXQKKyNkZWZpbmUgRVZQX0RpZ2VzdFZlcmlmeVVwZGF0ZSB3b2xmU1NMX0VWUF9EaWdlc3RWZXJpZnlVcGRhdGUKKyNkZWZpbmUgRVZQX0RpZ2VzdFZlcmlmeUZpbmFsICB3b2xmU1NMX0VWUF9EaWdlc3RWZXJpZnlGaW5hbAorI2RlZmluZSBFVlBfQnl0ZXNUb0tleSAgICAgICAgIHdvbGZTU0xfRVZQX0J5dGVzVG9LZXkKKworI2RlZmluZSBFVlBfZ2V0X2NpcGhlcmJ5bmFtZSB3b2xmU1NMX0VWUF9nZXRfY2lwaGVyYnluYW1lCisjZGVmaW5lIEVWUF9nZXRfZGlnZXN0YnluYW1lIHdvbGZTU0xfRVZQX2dldF9kaWdlc3RieW5hbWUKKworI2RlZmluZSBFVlBfQ0lQSEVSX0NUWF9pbml0ICAgICAgICAgICB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX2luaXQKKyNkZWZpbmUgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCAgICAgICAgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9jbGVhbnVwCisjZGVmaW5lIEVWUF9DSVBIRVJfQ1RYX2l2X2xlbmd0aCAgICAgIHdvbGZTU0xfRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoCisjZGVmaW5lIEVWUF9DSVBIRVJfQ1RYX2tleV9sZW5ndGggICAgIHdvbGZTU0xfRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aAorI2RlZmluZSBFVlBfQ0lQSEVSX0NUWF9zZXRfa2V5X2xlbmd0aCB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX3NldF9rZXlfbGVuZ3RoCisjZGVmaW5lIEVWUF9DSVBIRVJfQ1RYX21vZGUgICAgICAgICAgIHdvbGZTU0xfRVZQX0NJUEhFUl9DVFhfbW9kZQorI2RlZmluZSBFVlBfQ0lQSEVSX0NUWF9jaXBoZXIgICAgICAgICB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX2NpcGhlcgorCisjZGVmaW5lIEVWUF9DSVBIRVJfaXZfbGVuZ3RoICAgICAgICAgIHdvbGZTU0xfRVZQX0NJUEhFUl9pdl9sZW5ndGgKKyNkZWZpbmUgRVZQX0NJUEhFUl9rZXlfbGVuZ3RoICAgICAgICAgd29sZlNTTF9FVlBfQ2lwaGVyX2tleV9sZW5ndGgKKworI2RlZmluZSBFVlBfQ2lwaGVySW5pdCAgICAgICAgICAgICAgICB3b2xmU1NMX0VWUF9DaXBoZXJJbml0CisjZGVmaW5lIEVWUF9DaXBoZXJJbml0X2V4ICAgICAgICAgICAgIHdvbGZTU0xfRVZQX0NpcGhlckluaXRfZXgKKyNkZWZpbmUgRVZQX0VuY3J5cHRJbml0ICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfRW5jcnlwdEluaXQKKyNkZWZpbmUgRVZQX0VuY3J5cHRJbml0X2V4ICAgICAgICAgICAgd29sZlNTTF9FVlBfRW5jcnlwdEluaXRfZXgKKyNkZWZpbmUgRVZQX0RlY3J5cHRJbml0ICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfRGVjcnlwdEluaXQKKyNkZWZpbmUgRVZQX0RlY3J5cHRJbml0X2V4ICAgICAgICAgICAgd29sZlNTTF9FVlBfRGVjcnlwdEluaXRfZXgKKworI2RlZmluZSBFVlBfQ2lwaGVyICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VWUF9DaXBoZXIKKyNkZWZpbmUgRVZQX0NpcGhlclVwZGF0ZSAgICAgICAgICAgICAgd29sZlNTTF9FVlBfQ2lwaGVyVXBkYXRlCisjZGVmaW5lIEVWUF9FbmNyeXB0VXBkYXRlICAgICAgICAgICAgIHdvbGZTU0xfRVZQX0NpcGhlclVwZGF0ZQorI2RlZmluZSBFVlBfRGVjcnlwdFVwZGF0ZSAgICAgICAgICAgICB3b2xmU1NMX0VWUF9DaXBoZXJVcGRhdGUKKyNkZWZpbmUgRVZQX0NpcGhlckZpbmFsICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfQ2lwaGVyRmluYWwKKyNkZWZpbmUgRVZQX0NpcGhlckZpbmFsX2V4ICAgICAgICAgICAgd29sZlNTTF9FVlBfQ2lwaGVyRmluYWwKKyNkZWZpbmUgRVZQX0VuY3J5cHRGaW5hbCAgICAgICAgICAgICAgd29sZlNTTF9FVlBfQ2lwaGVyRmluYWwKKyNkZWZpbmUgRVZQX0VuY3J5cHRGaW5hbF9leCAgICAgICAgICAgd29sZlNTTF9FVlBfQ2lwaGVyRmluYWwKKyNkZWZpbmUgRVZQX0RlY3J5cHRGaW5hbCAgICAgICAgICAgICAgd29sZlNTTF9FVlBfQ2lwaGVyRmluYWwKKyNkZWZpbmUgRVZQX0RlY3J5cHRGaW5hbF9leCAgICAgICAgICAgd29sZlNTTF9FVlBfQ2lwaGVyRmluYWwKKworI2RlZmluZSBFVlBfQ0lQSEVSX0NUWF9mcmVlICAgICAgICAgICB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX2ZyZWUKKyNkZWZpbmUgRVZQX0NJUEhFUl9DVFhfcmVzZXQgICAgICAgICAgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9yZXNldAorI2RlZmluZSBFVlBfQ0lQSEVSX0NUWF9uZXcgICAgICAgICAgICB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX25ldworCisjZGVmaW5lIEVWUF9nZXRfY2lwaGVyYnluaWQgICAgICAgICAgIHdvbGZTU0xfRVZQX2dldF9jaXBoZXJieW5pZAorI2RlZmluZSBFVlBfZ2V0X2RpZ2VzdGJ5bmlkICAgICAgICAgICB3b2xmU1NMX0VWUF9nZXRfZGlnZXN0YnluaWQKKyNkZWZpbmUgRVZQX2dldF9jaXBoZXJieW5hbWUgICAgICAgICAgd29sZlNTTF9FVlBfZ2V0X2NpcGhlcmJ5bmFtZQorI2RlZmluZSBFVlBfZ2V0X2RpZ2VzdGJ5bmFtZSAgICAgICAgICB3b2xmU1NMX0VWUF9nZXRfZGlnZXN0YnluYW1lCisKKyNkZWZpbmUgRVZQX1BLRVlfYXNzaWduICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfYXNzaWduCisjZGVmaW5lIEVWUF9QS0VZX2Fzc2lnbl9SU0EgICAgICAgICAgICB3b2xmU1NMX0VWUF9QS0VZX2Fzc2lnbl9SU0EKKyNkZWZpbmUgRVZQX1BLRVlfYXNzaWduX0RTQSAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfYXNzaWduX0RTQQorI2RlZmluZSBFVlBfUEtFWV9hc3NpZ25fREggICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9hc3NpZ25fREgKKyNkZWZpbmUgRVZQX1BLRVlfYXNzaWduX0VDX0tFWSAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfYXNzaWduX0VDX0tFWQorI2RlZmluZSBFVlBfUEtFWV9nZXQxX0RTQSAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9nZXQxX0RTQQorI2RlZmluZSBFVlBfUEtFWV9zZXQxX0RTQSAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9zZXQxX0RTQQorI2RlZmluZSBFVlBfUEtFWV9nZXQwX1JTQSAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9nZXQwX1JTQQorI2RlZmluZSBFVlBfUEtFWV9nZXQxX1JTQSAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9nZXQxX1JTQQorI2RlZmluZSBFVlBfUEtFWV9zZXQxX1JTQSAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9zZXQxX1JTQQorI2RlZmluZSBFVlBfUEtFWV9zZXQxX0VDX0tFWSAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9zZXQxX0VDX0tFWQorI2RlZmluZSBFVlBfUEtFWV9nZXQxX0VDX0tFWSAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9nZXQxX0VDX0tFWQorI2RlZmluZSBFVlBfUEtFWV9zZXQxX0RIICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9zZXQxX0RICisjZGVmaW5lIEVWUF9QS0VZX2dldDBfREggICAgICAgICAgICAgICB3b2xmU1NMX0VWUF9QS0VZX2dldDBfREgKKyNkZWZpbmUgRVZQX1BLRVlfZ2V0MV9ESCAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfZ2V0MV9ESAorI2RlZmluZSBFVlBfUEtFWV9nZXQwX0VDX0tFWSAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9nZXQwX0VDX0tFWQorI2RlZmluZSBFVlBfUEtFWV9nZXQwX2htYWMgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9nZXQwX2htYWMKKyNkZWZpbmUgRVZQX1BLRVlfbmV3X21hY19rZXkgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfbmV3X21hY19rZXkKKyNkZWZpbmUgRVZQX01EX0NUWF9jb3B5ICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX01EX0NUWF9jb3B5CisjZGVmaW5lIEVWUF9NRF9DVFhfY29weV9leCAgICAgICAgICAgICB3b2xmU1NMX0VWUF9NRF9DVFhfY29weV9leAorI2RlZmluZSBFVlBfUEtFWV9zaWduX2luaXQgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9zaWduX2luaXQKKyNkZWZpbmUgRVZQX1BLRVlfc2lnbiAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfc2lnbgorI2RlZmluZSBFVlBfUEtFWV9rZXlnZW4gICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9rZXlnZW4KKyNkZWZpbmUgRVZQX1BLRVlfa2V5Z2VuX2luaXQgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfa2V5Z2VuX2luaXQKKyNkZWZpbmUgRVZQX1BLRVlfYml0cyAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfYml0cworI2RlZmluZSBFVlBfUEtFWV9DVFhfZnJlZSAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9DVFhfZnJlZQorI2RlZmluZSBFVlBfUEtFWV9DVFhfbmV3ICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9DVFhfbmV3CisjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcgICB3b2xmU1NMX0VWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcKKyNkZWZpbmUgRVZQX1BLRVlfQ1RYX25ld19pZCAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfQ1RYX25ld19pZAorI2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X3JzYV9rZXlnZW5fYml0cyB3b2xmU1NMX0VWUF9QS0VZX0NUWF9zZXRfcnNhX2tleWdlbl9iaXRzCisjZGVmaW5lIEVWUF9QS0VZX2Rlcml2ZV9pbml0ICAgICAgICAgICB3b2xmU1NMX0VWUF9QS0VZX2Rlcml2ZV9pbml0CisjZGVmaW5lIEVWUF9QS0VZX2Rlcml2ZV9zZXRfcGVlciAgICAgICB3b2xmU1NMX0VWUF9QS0VZX2Rlcml2ZV9zZXRfcGVlcgorI2RlZmluZSBFVlBfUEtFWV9kZXJpdmUgICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9kZXJpdmUKKyNkZWZpbmUgRVZQX1BLRVlfZGVjcnlwdCAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfZGVjcnlwdAorI2RlZmluZSBFVlBfUEtFWV9kZWNyeXB0X2luaXQgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9kZWNyeXB0X2luaXQKKyNkZWZpbmUgRVZQX1BLRVlfZW5jcnlwdCAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfZW5jcnlwdAorI2RlZmluZSBFVlBfUEtFWV9lbmNyeXB0X2luaXQgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9lbmNyeXB0X2luaXQKKyNkZWZpbmUgRVZQX1BLRVlfbmV3ICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfbmV3CisjZGVmaW5lIEVWUF9QS0VZX2ZyZWUgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VWUF9QS0VZX2ZyZWUKKyNkZWZpbmUgRVZQX1BLRVlfdXBfcmVmICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfdXBfcmVmCisjZGVmaW5lIEVWUF9QS0VZX3NpemUgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VWUF9QS0VZX3NpemUKKyNkZWZpbmUgRVZQX1BLRVlfY29weV9wYXJhbWV0ZXJzICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfY29weV9wYXJhbWV0ZXJzCisjZGVmaW5lIEVWUF9QS0VZX21pc3NpbmdfcGFyYW1ldGVycyAgICB3b2xmU1NMX0VWUF9QS0VZX21pc3NpbmdfcGFyYW1ldGVycworI2RlZmluZSBFVlBfUEtFWV9jbXAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9jbXAKKyNkZWZpbmUgRVZQX1BLRVlfdHlwZSAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfdHlwZQorI2RlZmluZSBFVlBfUEtFWV9iYXNlX2lkICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9iYXNlX2lkCisjZGVmaW5lIEVWUF9QS0VZX2dldF9kZWZhdWx0X2RpZ2VzdF9uaWQgd29sZlNTTF9FVlBfUEtFWV9nZXRfZGVmYXVsdF9kaWdlc3RfbmlkCisjZGVmaW5lIEVWUF9QS0VZX2lkICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VWUF9QS0VZX2lkCisjZGVmaW5lIEVWUF9QS0VZX0NUWF9jdHJsX3N0ciAgICAgICAgICB3b2xmU1NMX0VWUF9QS0VZX0NUWF9jdHJsX3N0cgorI2RlZmluZSBFVlBfU2lnbkZpbmFsICAgICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfU2lnbkZpbmFsCisjZGVmaW5lIEVWUF9TaWduSW5pdCAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VWUF9TaWduSW5pdAorI2RlZmluZSBFVlBfU2lnbkluaXRfZXggICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfU2lnbkluaXRfZXgKKyNkZWZpbmUgRVZQX1NpZ25VcGRhdGUgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1NpZ25VcGRhdGUKKyNkZWZpbmUgRVZQX1ZlcmlmeUZpbmFsICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1ZlcmlmeUZpbmFsCisjZGVmaW5lIEVWUF9WZXJpZnlJbml0ICAgICAgICAgICAgICAgICB3b2xmU1NMX0VWUF9WZXJpZnlJbml0CisjZGVmaW5lIEVWUF9WZXJpZnlVcGRhdGUgICAgICAgICAgICAgICB3b2xmU1NMX0VWUF9WZXJpZnlVcGRhdGUKKworI2RlZmluZSBFVlBfQ0lQSEVSX0NUWF9jdHJsICAgICAgICB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX2N0cmwKKyNkZWZpbmUgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZSAgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplCisjZGVmaW5lIEVWUF9DSVBIRVJfYmxvY2tfc2l6ZSAgICAgIHdvbGZTU0xfRVZQX0NJUEhFUl9ibG9ja19zaXplCisjZGVmaW5lIEVWUF9DSVBIRVJfZmxhZ3MgICAgICAgICAgIHdvbGZTU0xfRVZQX0NJUEhFUl9mbGFncworI2RlZmluZSBFVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MgICB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncworI2RlZmluZSBFVlBfQ0lQSEVSX0NUWF9jbGVhcl9mbGFncyB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdzCisjZGVmaW5lIEVWUF9DSVBIRVJfQ1RYX3NldF9wYWRkaW5nIHdvbGZTU0xfRVZQX0NJUEhFUl9DVFhfc2V0X3BhZGRpbmcKKyNkZWZpbmUgRVZQX0NJUEhFUl9DVFhfZmxhZ3MgICAgICAgd29sZlNTTF9FVlBfQ0lQSEVSX0NUWF9mbGFncworI2RlZmluZSBFVlBfQ0lQSEVSX0NUWF9zZXRfaXYgICAgICB3b2xmU1NMX0VWUF9DSVBIRVJfQ1RYX3NldF9pdgorI2RlZmluZSBFVlBfYWRkX2RpZ2VzdCAgICAgICAgICAgICB3b2xmU1NMX0VWUF9hZGRfZGlnZXN0CisjZGVmaW5lIEVWUF9hZGRfY2lwaGVyICAgICAgICAgICAgIHdvbGZTU0xfRVZQX2FkZF9jaXBoZXIKKyNkZWZpbmUgRVZQX2NsZWFudXAgICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfY2xlYW51cAorI2RlZmluZSBFVlBfcmVhZF9wd19zdHJpbmcgICAgICAgICB3b2xmU1NMX0VWUF9yZWFkX3B3X3N0cmluZworI2RlZmluZSBFVlBfcmMyX2NiYyAgICAgICAgICAgICAgICB3b2xmU1NMX0VWUF9yYzJfY2JjCisKKyNkZWZpbmUgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHMoKSAgd29sZlNTTF9FVlBfaW5pdCgpCisjZGVmaW5lIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKCkgIHdvbGZTU0xfRVZQX2luaXQoKQorI2RlZmluZSBPcGVuU1NMX2FkZF9hbGxfYWxnb3JpdGhtcyB3b2xmU1NMX2FkZF9hbGxfYWxnb3JpdGhtcworI2RlZmluZSBPcGVuU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19ub2NvbmYgd29sZlNTTF9PcGVuU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19ub2NvbmYKKyNkZWZpbmUgT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXNfY29uZiAgIHdvbGZTU0xfT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXNfY29uZgorCisjZGVmaW5lIHdvbGZTU0xfT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfbm9jb25mIHdvbGZTU0xfT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXNfbm9jb25mCisjZGVmaW5lIHdvbGZTU0xfT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfY29uZiAgIHdvbGZTU0xfT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXNfY29uZgorCisvKiBwcm92aWRlcyBvbGRlciBPcGVuU1NMIEFQSSBjb21wYXRpYmlsaXR5ICAqLworI2RlZmluZSBPUEVOU1NMX2FkZF9hbGxfYWxnb3JpdGhtcyAgICAgICAgT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXMKKyNkZWZpbmUgT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfbm9jb25mIE9wZW5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX25vY29uZgorI2RlZmluZSBPUEVOU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19jb25mICAgT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXNfY29uZgorCisjZGVmaW5lIE5PX1BBRERJTkdfQkxPQ0tfU0laRSAgICAgIDEKKworI2RlZmluZSBQS0NTNV9QQktERjJfSE1BQ19TSEExICAgICB3b2xmU1NMX1BLQ1M1X1BCS0RGMl9ITUFDX1NIQTEKKyNkZWZpbmUgUEtDUzVfUEJLREYyX0hNQUMgICAgICAgICAgd29sZlNTTF9QS0NTNV9QQktERjJfSE1BQworCisvKiBPcGVuU1NMIGNvbXBhdC4gY3RybCB2YWx1ZXMgKi8KKyNkZWZpbmUgRVZQX0NUUkxfSU5JVCAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBFVlBfQ1RSTF9TRVRfS0VZX0xFTkdUSCAgICAgICAgMHgxCisjZGVmaW5lIEVWUF9DVFJMX1NFVF9SQzJfS0VZX0JJVFMgICAgICAweDMgIC8qIG5lZWRlZCBmb3IgcXQgY29tcGlsYXRpb24gKi8KKworI2RlZmluZSBFVlBfQ1RSTF9BRUFEX1NFVF9JVkxFTiAgICAgICAgMHg5CisjZGVmaW5lIEVWUF9DVFJMX0FFQURfR0VUX1RBRyAgICAgICAgICAweDEwCisjZGVmaW5lIEVWUF9DVFJMX0FFQURfU0VUX1RBRyAgICAgICAgICAweDExCisjZGVmaW5lIEVWUF9DVFJMX0FFQURfU0VUX0lWX0ZJWEVEICAgICAweDEyCisjZGVmaW5lIEVWUF9DVFJMX0dDTV9JVl9HRU4gICAgICAgICAgICAweDEzCisjZGVmaW5lIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4gICAgICAgICBFVlBfQ1RSTF9BRUFEX1NFVF9JVkxFTgorI2RlZmluZSBFVlBfQ1RSTF9HQ01fR0VUX1RBRyAgICAgICAgICAgRVZQX0NUUkxfQUVBRF9HRVRfVEFHCisjZGVmaW5lIEVWUF9DVFJMX0dDTV9TRVRfVEFHICAgICAgICAgICBFVlBfQ1RSTF9BRUFEX1NFVF9UQUcKKyNkZWZpbmUgRVZQX0NUUkxfR0NNX1NFVF9JVl9GSVhFRCAgICAgIEVWUF9DVFJMX0FFQURfU0VUX0lWX0ZJWEVECisKKyNkZWZpbmUgRVZQX1BLRVlfcHJpbnRfcHVibGljICAgICAgICAgICB3b2xmU1NMX0VWUF9QS0VZX3ByaW50X3B1YmxpYworI2RlZmluZSBFVlBfUEtFWV9wcmludF9wcml2YXRlKGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCisKKyNpZm5kZWYgRVZQX01BWF9NRF9TSVpFCisgICAgI2RlZmluZSBFVlBfTUFYX01EX1NJWkUgICA2NCAgICAgLyogc2hhNTEyICovCisjZW5kaWYKKworI2lmbmRlZiBFVlBfTUFYX0tFWV9MRU5HVEgKKyNkZWZpbmUgRVZQX01BWF9LRVlfTEVOR1RIICAgIDY0CisjZW5kaWYKKworI2lmbmRlZiBFVlBfTUFYX0lWX0xFTkdUSAorI2RlZmluZSBFVlBfTUFYX0lWX0xFTkdUSCAgICAgMTYKKyNlbmRpZgorCisjaWZuZGVmIEVWUF9NQVhfQkxPQ0tfTEVOR1RICisgICAgI2RlZmluZSBFVlBfTUFYX0JMT0NLX0xFTkdUSCAgIDMyICAvKiAyICogYmxvY2tsZW4oQUVTKT8gKi8KKyAgICAvKiBUaGV5IGRlZmluZSB0aGlzIGFzIDMyLiBVc2luZyB0aGUgc2FtZSB2YWx1ZSBoZXJlLiAqLworI2VuZGlmCisKKyNpZm5kZWYgRVZQX01BWF9JVl9MRU5HVEgKKyAgICAjZGVmaW5lIEVWUF9NQVhfSVZfTEVOR1RIICAgICAgIDE2CisjZW5kaWYKKworCisjZGVmaW5lIEVWUF9SX0JBRF9ERUNSWVBUICAgICAgICAgICAgICAgKC1NSU5fQ09ERV9FICsgMTAwICsgMSkKKyNkZWZpbmUgRVZQX1JfQk5fREVDT0RFX0VSUk9SICAgICAgICAgICAoLU1JTl9DT0RFX0UgKyAxMDAgKyAyKQorI2RlZmluZSBFVlBfUl9ERUNPREVfRVJST1IgICAgICAgICAgICAgICgtTUlOX0NPREVfRSArIDEwMCArIDMpCisjZGVmaW5lIEVWUF9SX1BSSVZBVEVfS0VZX0RFQ09ERV9FUlJPUiAgKC1NSU5fQ09ERV9FICsgMTAwICsgNCkKKworI2RlZmluZSBFVlBfUEtFWV9OT05FICAgICAgICAgICAgICAgICAgIE5JRF91bmRlZgorI2RlZmluZSBFVlBfUEtFWV9ESCAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEVWUF9DSVBIRVJfbW9kZSAgICAgICAgICAgICAgICAgV09MRlNTTF9FVlBfQ0lQSEVSX21vZGUKKy8qIFdPTEZTU0xfRVZQX0NJUEhFUiBpcyBqdXN0IHRoZSBzdHJpbmcgbmFtZSBvZiB0aGUgY2lwaGVyICovCisjZGVmaW5lIEVWUF9DSVBIRVJfbmFtZSh4KSAgICAgICAgICAgICAgeAorI2RlZmluZSBFVlBfTURfQ1RYX3Jlc2V0ICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX01EX0NUWF9jbGVhbnVwCisvKiBXT0xGU1NMX0VWUF9NRCBpcyBqdXN0IHRoZSBzdHJpbmcgbmFtZSBvZiB0aGUgZGlnZXN0ICovCisjZGVmaW5lIEVWUF9NRF9uYW1lKHgpICAgICAgICAgICAgICAgICAgeAorI2RlZmluZSBFVlBfQ0lQSEVSX25pZCAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX0NJUEhFUl9uaWQKKworLyogQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIEFQSXMgKi8KKyNpZiBkZWZpbmVkKFdPTEZTU0xfQkFTRTY0X0VOQ09ERSkgfHwgZGVmaW5lZChXT0xGU1NMX0JBU0U2NF9ERUNPREUpCisjZGVmaW5lIEVWUF9FTkNPREVfQ1RYICAgICAgIFdPTEZTU0xfRVZQX0VOQ09ERV9DVFgKKyNkZWZpbmUgRVZQX0VOQ09ERV9DVFhfbmV3ICAgd29sZlNTTF9FVlBfRU5DT0RFX0NUWF9uZXcKKyNkZWZpbmUgRVZQX0VOQ09ERV9DVFhfZnJlZSAgd29sZlNTTF9FVlBfRU5DT0RFX0NUWF9mcmVlCisjZW5kaWYgLyogV09MRlNTTF9CQVNFNjRfRU5DT0RFIHx8IFdPTEZTU0xfQkFTRTY0X0RFQ09ERSovCisjaWYgZGVmaW5lZChXT0xGU1NMX0JBU0U2NF9FTkNPREUpCisjZGVmaW5lIEVWUF9FbmNvZGVJbml0ICAgICAgIHdvbGZTU0xfRVZQX0VuY29kZUluaXQKKyNkZWZpbmUgRVZQX0VuY29kZVVwZGF0ZSAgICAgd29sZlNTTF9FVlBfRW5jb2RlVXBkYXRlCisjZGVmaW5lIEVWUF9FbmNvZGVGaW5hbCAgICAgIHdvbGZTU0xfRVZQX0VuY29kZUZpbmFsCisjZW5kaWYgLyogV09MRlNTTF9CQVNFNjRfRU5DT0RFICovCisjaWYgZGVmaW5lZChXT0xGU1NMX0JBU0U2NF9ERUNPREUpCisjZGVmaW5lIEVWUF9EZWNvZGVJbml0ICAgICAgIHdvbGZTU0xfRVZQX0RlY29kZUluaXQKKyNkZWZpbmUgRVZQX0RlY29kZVVwZGF0ZSAgICAgd29sZlNTTF9FVlBfRGVjb2RlVXBkYXRlCisjZGVmaW5lIEVWUF9EZWNvZGVGaW5hbCAgICAgIHdvbGZTU0xfRVZQX0RlY29kZUZpbmFsCisjZW5kaWYgLyogV09MRlNTTF9CQVNFNjRfREVDT0RFICovCisKK1dPTEZTU0xfQVBJIHZvaWQgcHJpbnRQS0VZKFdPTEZTU0xfRVZQX1BLRVkgKmspOworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL29iamVjdHMuaD4KKworI2VuZGlmIC8qIFdPTEZTU0xfRVZQX0hfICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2htYWMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvaG1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNThhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2htYWMuaApAQCAtMCwwICsxLDEwMiBAQAorLyogaG1hYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKy8qICBobWFjLmggZGVmaW5lcyBtaW5pIGhhbWMgb3BlbnNzbCBjb21wYXRpYmlsaXR5IGxheWVyCisgKgorICovCisKKworI2lmbmRlZiBXT0xGU1NMX0hNQUNfSF8KKyNkZWZpbmUgV09MRlNTTF9ITUFDX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaWZkZWYgV09MRlNTTF9QUkVGSVgKKyNpbmNsdWRlICJwcmVmaXhfaG1hYy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL29wZW5zc2x2Lmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaG1hYy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGNoYXIqIHdvbGZTU0xfSE1BQyhjb25zdCBXT0xGU1NMX0VWUF9NRCogZXZwX21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGtleSwgaW50IGtleV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZCwgaW50IG4sIHVuc2lnbmVkIGNoYXIqIG1kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbWRfbGVuKTsKKworCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0hNQUNfQ1RYIHsKKyAgICBIbWFjIGhtYWM7CisgICAgaW50ICB0eXBlOworICAgIHdvcmQzMiAgc2F2ZV9pcGFkW1dDX0hNQUNfQkxPQ0tfU0laRSAgLyBzaXplb2Yod29yZDMyKV07ICAvKiBzYW1lIGJsb2NrIHNpemUgYWxsKi8KKyAgICB3b3JkMzIgIHNhdmVfb3BhZFtXQ19ITUFDX0JMT0NLX1NJWkUgIC8gc2l6ZW9mKHdvcmQzMildOworfSBXT0xGU1NMX0hNQUNfQ1RYOworCisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfSE1BQ19DVFgqIHdvbGZTU0xfSE1BQ19DVFhfbmV3KHZvaWQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfSE1BQ19DVFhfSW5pdChXT0xGU1NMX0hNQUNfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfSE1BQ19DVFhfY29weShXT0xGU1NMX0hNQUNfQ1RYKiBkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0hNQUNfQ1RYKiBzcmMpOworV09MRlNTTF9MT0NBTCBpbnQgd29sZlNTTF9IbWFjQ29weShIbWFjKiBkZXMsIEhtYWMqIHNyYyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9ITUFDX0luaXQoV09MRlNTTF9ITUFDX0NUWCogY3R4LCBjb25zdCB2b2lkKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5bGVuLCBjb25zdCBFVlBfTUQqIHR5cGUpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfSE1BQ19Jbml0X2V4KFdPTEZTU0xfSE1BQ19DVFgqIGN0eCwgY29uc3Qgdm9pZCoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5bGVuLCBjb25zdCBFVlBfTUQqIHR5cGUsIFdPTEZTU0xfRU5HSU5FKiBlKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0hNQUNfVXBkYXRlKFdPTEZTU0xfSE1BQ19DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgaW50IGxlbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9ITUFDX0ZpbmFsKFdPTEZTU0xfSE1BQ19DVFgqIGN0eCwgdW5zaWduZWQgY2hhciogaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGxlbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9ITUFDX2NsZWFudXAoV09MRlNTTF9ITUFDX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9ITUFDX0NUWF9jbGVhbnVwKFdPTEZTU0xfSE1BQ19DVFgqIGN0eCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfSE1BQ19DVFhfZnJlZShXT0xGU1NMX0hNQUNfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgc2l6ZV90IHdvbGZTU0xfSE1BQ19zaXplKGNvbnN0IFdPTEZTU0xfSE1BQ19DVFggKmN0eCk7CisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfSE1BQ19DVFggSE1BQ19DVFg7CisKKyNkZWZpbmUgSE1BQyhhLGIsYyxkLGUsZixnKSB3b2xmU1NMX0hNQUMoKGEpLChiKSwoYyksKGQpLChlKSwoZiksKGcpKQorCisjZGVmaW5lIEhNQUNfQ1RYX25ldyB3b2xmU1NMX0hNQUNfQ1RYX25ldworI2RlZmluZSBITUFDX0NUWF9pbml0IHdvbGZTU0xfSE1BQ19DVFhfSW5pdAorI2RlZmluZSBITUFDX0NUWF9jb3B5IHdvbGZTU0xfSE1BQ19DVFhfY29weQorI2RlZmluZSBITUFDX0NUWF9mcmVlIHdvbGZTU0xfSE1BQ19DVFhfZnJlZQorI2RlZmluZSBITUFDX0NUWF9jbGVhbnVwIHdvbGZTU0xfSE1BQ19DVFhfY2xlYW51cAorI2RlZmluZSBITUFDX0NUWF9yZXNldCB3b2xmU1NMX0hNQUNfY2xlYW51cAorI2RlZmluZSBITUFDX0luaXRfZXggIHdvbGZTU0xfSE1BQ19Jbml0X2V4CisjZGVmaW5lIEhNQUNfSW5pdCAgICAgd29sZlNTTF9ITUFDX0luaXQKKyNkZWZpbmUgSE1BQ19VcGRhdGUgICB3b2xmU1NMX0hNQUNfVXBkYXRlCisjZGVmaW5lIEhNQUNfRmluYWwgICAgd29sZlNTTF9ITUFDX0ZpbmFsCisjZGVmaW5lIEhNQUNfY2xlYW51cCAgd29sZlNTTF9ITUFDX2NsZWFudXAKKyNkZWZpbmUgSE1BQ19zaXplICAgICB3b2xmU1NMX0hNQUNfc2l6ZQorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIFdPTEZTU0xfSE1BQ19IXyAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9saGFzaC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9saGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjU2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL2xoYXNoLmgKQEAgLTAsMCArMSw2NCBAQAorLyogbGhhc2guaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIGxoYXNoLmggZm9yIG9wZW5TU0wgKi8KKworI2lmbmRlZiBXT0xGU1NMX2xoYXNoX0hfCisjZGVmaW5lIFdPTEZTU0xfbGhhc2hfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9zc2wuaD4KKworI2lmZGVmIE9QRU5TU0xfQUxMCisjZGVmaW5lIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKG5hbWUsIHR5cGUpIFwKKyAgICB1bnNpZ25lZCBsb25nIHdvbGZTU0xfIyNuYW1lIyNfTEhBU0hfSEFTSChjb25zdCB2b2lkICphcmcpIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY29uc3QgdHlwZSAqYSA9IGFyZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBuYW1lIyNfaGFzaChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2RlZmluZSBJTVBMRU1FTlRfTEhBU0hfQ09NUF9GTihuYW1lLCB0eXBlKSBcCisgICAgaW50IHdvbGZTU0xfIyNuYW1lIyNfTEhBU0hfQ09NUChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjb25zdCB0eXBlICpfcDEgPSBwMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNvbnN0IHR5cGUgKl9wMiA9IHAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIG5hbWUjI19jbXAoX3AxLCBfcDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBMSEFTSF9IQVNIX0ZOKG5hbWUpIHdvbGZTU0xfIyNuYW1lIyNfTEhBU0hfSEFTSAorI2RlZmluZSBMSEFTSF9DT01QX0ZOKG5hbWUpIHdvbGZTU0xfIyNuYW1lIyNfTEhBU0hfQ09NUAorCitXT0xGU1NMX0FQSSB1bnNpZ25lZCBsb25nIHdvbGZTU0xfTEhfc3RyaGFzaChjb25zdCBjaGFyICpzdHIpOworCitXT0xGU1NMX0FQSSB2b2lkICp3b2xmU1NMX2xoX3JldHJpZXZlKFdPTEZTU0xfU1RBQ0sgKnNrLCB2b2lkICpkYXRhKTsKKworI2RlZmluZSBsaF9zdHJoYXNoICAgICAgICAgIHdvbGZTU0xfTEhfc3RyaGFzaAorCisjZW5kaWYKKworCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogV09MRlNTTF9saGFzaF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9tZDQuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvbWQ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhNmQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvbWQ0LmgKQEAgLTAsMCArMSw2MiBAQAorLyogbWQ0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKyNpZm5kZWYgV09MRlNTTF9NRDRfSF8KKyNkZWZpbmUgV09MRlNTTF9NRDRfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NldHRpbmdzLmg+CisKKyNpZm5kZWYgTk9fTUQ0CisKKyNpZmRlZiBXT0xGU1NMX1BSRUZJWAorI2luY2x1ZGUgInByZWZpeF9tZDQuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfTUQ0X0NUWCB7CisgICAgaW50IGJ1ZmZlclszMl07ICAgICAgLyogYmlnIGVub3VnaCB0byBob2xkLCBjaGVjayBzaXplIGluIEluaXQgKi8KK30gV09MRlNTTF9NRDRfQ1RYOworCisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9NRDRfSW5pdChXT0xGU1NMX01ENF9DVFgqKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9NRDRfVXBkYXRlKFdPTEZTU0xfTUQ0X0NUWCosIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCBsb25nKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9NRDRfRmluYWwodW5zaWduZWQgY2hhciosIFdPTEZTU0xfTUQ0X0NUWCopOworCisKK3R5cGVkZWYgV09MRlNTTF9NRDRfQ1RYIE1ENF9DVFg7CisKKyNkZWZpbmUgTUQ0X0luaXQgICB3b2xmU1NMX01ENF9Jbml0CisjZGVmaW5lIE1ENF9VcGRhdGUgd29sZlNTTF9NRDRfVXBkYXRlCisjZGVmaW5lIE1ENF9GaW5hbCAgd29sZlNTTF9NRDRfRmluYWwKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBOT19NRDQgKi8KKworI2VuZGlmIC8qIFdPTEZTU0xfTUQ0X0hfICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvbWQ1LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYmQxY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL21kNS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qIG1kNS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogbWQ1LmggZm9yIG9wZW5zc2wgKi8KKworCisjaWZuZGVmIFdPTEZTU0xfTUQ1X0hfCisjZGVmaW5lIFdPTEZTU0xfTUQ1X0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaWZuZGVmIE5PX01ENQorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaGFzaC5oPgorCisjaWZkZWYgV09MRlNTTF9QUkVGSVgKKyNpbmNsdWRlICJwcmVmaXhfbWQ1LmgiCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX01ENV9DVFggeworICAgIC8qIGJpZyBlbm91Z2ggdG8gaG9sZCB3b2xmY3J5cHQgbWQ1LCBidXQgY2hlY2sgb24gaW5pdCAqLworI2lmZGVmIFNUTTMyX0hBU0gKKyAgICB2b2lkKiBob2xkZXJbKDExMiArIFdDX0FTWU5DX0RFVl9TSVpFICsgc2l6ZW9mKFNUTTMyX0hBU0hfQ29udGV4dCkpIC8gc2l6ZW9mKHZvaWQqKV07CisjZWxzZQorICAgIHZvaWQqIGhvbGRlclsoMTEyICsgV0NfQVNZTkNfREVWX1NJWkUpIC8gc2l6ZW9mKHZvaWQqKV07CisjZW5kaWYKK30gV09MRlNTTF9NRDVfQ1RYOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9NRDVfSW5pdChXT0xGU1NMX01ENV9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX01ENV9VcGRhdGUoV09MRlNTTF9NRDVfQ1RYKiwgY29uc3Qgdm9pZCosIHVuc2lnbmVkIGxvbmcpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIqLCBXT0xGU1NMX01ENV9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX01ENV9UcmFuc2Zvcm0oV09MRlNTTF9NRDVfQ1RYKiwgY29uc3QgdW5zaWduZWQgY2hhciopOworCit0eXBlZGVmIFdPTEZTU0xfTUQ1X0NUWCBNRDVfQ1RYOworCisjZGVmaW5lIE1ENV9Jbml0IHdvbGZTU0xfTUQ1X0luaXQKKyNkZWZpbmUgTUQ1X1VwZGF0ZSB3b2xmU1NMX01ENV9VcGRhdGUKKyNkZWZpbmUgTUQ1X0ZpbmFsIHdvbGZTU0xfTUQ1X0ZpbmFsCisjZGVmaW5lIE1ENV9UcmFuc2Zvcm0gd29sZlNTTF9NRDVfVHJhbnNmb3JtCisKKyNpZmRlZiBPUEVOU1NMX0VYVFJBX0JTRAorICAgICNkZWZpbmUgTUQ1SW5pdCB3b2xmU1NMX01ENV9Jbml0CisgICAgI2RlZmluZSBNRDVVcGRhdGUgd29sZlNTTF9NRDVfVXBkYXRlCisgICAgI2RlZmluZSBNRDVGaW5hbCB3b2xmU1NMX01ENV9GaW5hbAorI2VuZGlmCisKKyNpZm5kZWYgTUQ1CisjZGVmaW5lIE1ENShkLCBuLCBtZCkgd2NfTWQ1SGFzaCgoZCksIChuKSwgKG1kKSkKKyNlbmRpZgorCisjZGVmaW5lIE1ENV9ESUdFU1RfTEVOR1RIIE1ENV9ESUdFU1RfU0laRQorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE5PX01ENSAqLworCisjZW5kaWYgLyogV09MRlNTTF9NRDVfSF8gKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvb2JqX21hYy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9vYmpfbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0NGQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvb2JqX21hYy5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qIG9ial9tYWMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIG9ial9tYWMuaCBmb3Igb3BlblNTTCAqLworCisjaWZuZGVmIFdPTEZTU0xfT0JKX01BQ19IXworI2RlZmluZSBXT0xGU1NMX09CSl9NQUNfSF8KKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgTklEX3NlY3QxNjNrMSA3MjEKKyNkZWZpbmUgTklEX3NlY3QxNjNyMSA3MjIKKyNkZWZpbmUgTklEX3NlY3QxNjNyMiA3MjMKKyNkZWZpbmUgTklEX3NlY3QxOTNyMSA3MjQKKyNkZWZpbmUgTklEX3NlY3QxOTNyMiA3MjUKKyNkZWZpbmUgTklEX3NlY3QyMzNrMSA3MjYKKyNkZWZpbmUgTklEX3NlY3QyMzNyMSA3MjcKKyNkZWZpbmUgTklEX3NlY3QyMzlrMSA3MjgKKyNkZWZpbmUgTklEX3NlY3QyODNrMSA3MjkKKyNkZWZpbmUgTklEX3NlY3QyODNyMSA3MzAKKyNkZWZpbmUgTklEX3NlY3Q0MDlrMSA3MzEKKyNkZWZpbmUgTklEX3NlY3Q0MDlyMSA3MzIKKyNkZWZpbmUgTklEX3NlY3Q1NzFrMSA3MzMKKyNkZWZpbmUgTklEX3NlY3Q1NzFyMSA3MzQKKworLyogdGhlIGRlZmluaXRpb24gaXMgZm9yIFF0IFVuaXQgdGVzdCAqLworI2RlZmluZSBTTl9qdXJpc2RpY3Rpb25Db3VudHJ5TmFtZSAianVyaXNkaWN0aW9uQyIKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX09CSl9NQUNfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9vYmplY3RzLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL29iamVjdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk3NTQzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9vYmplY3RzLmgKQEAgLTAsMCArMSw2MyBAQAorLyogb2JqZWN0cy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaWZuZGVmIFdPTEZTU0xfT0JKRUNUU19IXworI2RlZmluZSBXT0xGU1NMX09CSkVDVFNfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NldHRpbmdzLmg+CisvLyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc3NsLmg+CisjaWZuZGVmIE9QRU5TU0xfRVhUUkFfU1NMX0dVQVJECisjZGVmaW5lIE9QRU5TU0xfRVhUUkFfU1NMX0dVQVJECisjaW5jbHVkZSA8d29sZnNzbC9zc2wuaD4KKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBX1NTTF9HVUFSRCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIE9CSl9uaWQyc24gIHdvbGZTU0xfT0JKX25pZDJzbgorI2RlZmluZSBPQkpfb2JqMm5pZCB3b2xmU1NMX09CSl9vYmoybmlkCisjZGVmaW5lIE9CSl9zbjJuaWQgIHdvbGZTU0xfT0JKX3NuMm5pZAorI2RlZmluZSBPQkpfbmlkMmxuICB3b2xmU1NMX09CSl9uaWQybG4KKyNkZWZpbmUgT0JKX2xuMm5pZCAgd29sZlNTTF9PQkpfbG4ybmlkCisjZGVmaW5lIE9CSl90eHQybmlkIHdvbGZTU0xfT0JKX3R4dDJuaWQKKyNkZWZpbmUgT0JKX3R4dDJvYmogd29sZlNTTF9PQkpfdHh0Mm9iagorI2RlZmluZSBPQkpfbmlkMm9iaiB3b2xmU1NMX09CSl9uaWQyb2JqCisjZGVmaW5lIE9CSl9vYmoydHh0IHdvbGZTU0xfT0JKX29iajJ0eHQKKyNkZWZpbmUgT0JKX2NsZWFudXAgd29sZlNTTF9PQkpfY2xlYW51cAorI2RlZmluZSBPQkpfY21wICAgICB3b2xmU1NMX09CSl9jbXAKKyNkZWZpbmUgT0JKX2NyZWF0ZSAgd29sZlNTTF9PQkpfY3JlYXRlCisjZGVmaW5lIEFTTjFfT0JKRUNUX2ZyZWUgd29sZlNTTF9BU04xX09CSkVDVF9mcmVlCisKKy8qIG5vdCByZXF1aXJlZCBmb3Igd29sZlNTTCAqLworI2RlZmluZSBPUEVOU1NMX2xvYWRfYnVpbHRpbl9tb2R1bGVzKCkKKworCisjZGVmaW5lIE5JRF9hZF9PQ1NQICAgICAgICAgICAgICAgICAgICAgMTc4CisjZGVmaW5lIE5JRF9hZF9jYV9pc3N1ZXJzICAgICAgICAgICAgICAgMTc5CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX09CSkVDVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvb2NzcC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9vY3NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3MGY3MgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvb2NzcC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qIG9jc3AuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIG9jc3AuaCBmb3IgbGliY3VybCAqLworCisjaWZuZGVmIFdPTEZTU0xfT0NTUF9IXworI2RlZmluZSBXT0xGU1NMX09DU1BfSF8KKworI2lmZGVmIEhBVkVfT0NTUAorI2luY2x1ZGUgPHdvbGZzc2wvb2NzcC5oPgorCisjZGVmaW5lIE9DU1BfUkVRVUVTVCAgICAgICAgICAgICAgT2NzcFJlcXVlc3QKKyNkZWZpbmUgT0NTUF9SRVNQT05TRSAgICAgICAgICAgICBPY3NwUmVzcG9uc2UKKyNkZWZpbmUgT0NTUF9CQVNJQ1JFU1AgICAgICAgICAgICBXT0xGU1NMX09DU1BfQkFTSUNSRVNQCisjZGVmaW5lIE9DU1BfU0lOR0xFUkVTUCAgICAgICAgICAgV09MRlNTTF9PQ1NQX1NJTkdMRVJFU1AKKyNkZWZpbmUgT0NTUF9DRVJUSUQgICAgICAgICAgICAgICBXT0xGU1NMX09DU1BfQ0VSVElECisjZGVmaW5lIE9DU1BfT05FUkVRICAgICAgICAgICAgICAgV09MRlNTTF9PQ1NQX09ORVJFUQorCisjZGVmaW5lIE9DU1BfUkVWT0tFRF9TVEFUVVNfTk9TVEFUVVMgICAgIC0xCisKKworI2RlZmluZSBPQ1NQX1JFU1BPTlNFX1NUQVRVU19TVUNDRVNTRlVMICAwCisjZGVmaW5lIE9DU1BfUkVTUE9OU0VfU1RBVFVTX1RSWUxBVEVSICAgIDMKKworI2RlZmluZSBWX09DU1BfQ0VSVFNUQVRVU19HT09EICAgICAgICAgICAwCisjZGVmaW5lIFZfT0NTUF9DRVJUU1RBVFVTX1JFVk9LRUQgICAgICAgIDEKKyNkZWZpbmUgVl9PQ1NQX0NFUlRTVEFUVVNfVU5LTk9XTiAgICAgICAgMgorCisjZGVmaW5lIE9DU1BfcmVzcF9maW5kX3N0YXR1cyAgICAgd29sZlNTTF9PQ1NQX3Jlc3BfZmluZF9zdGF0dXMKKyNkZWZpbmUgT0NTUF9jZXJ0X3N0YXR1c19zdHIgICAgICB3b2xmU1NMX09DU1BfY2VydF9zdGF0dXNfc3RyCisjZGVmaW5lIE9DU1BfY2hlY2tfdmFsaWRpdHkgICAgICAgd29sZlNTTF9PQ1NQX2NoZWNrX3ZhbGlkaXR5CisKKyNkZWZpbmUgT0NTUF9DRVJUSURfZnJlZSAgICAgICAgICB3b2xmU1NMX09DU1BfQ0VSVElEX2ZyZWUKKyNkZWZpbmUgT0NTUF9jZXJ0X3RvX2lkICAgICAgICAgICB3b2xmU1NMX09DU1BfY2VydF90b19pZAorCisjZGVmaW5lIE9DU1BfQkFTSUNSRVNQX2ZyZWUgICAgICAgd29sZlNTTF9PQ1NQX0JBU0lDUkVTUF9mcmVlCisjZGVmaW5lIE9DU1BfYmFzaWNfdmVyaWZ5ICAgICAgICAgd29sZlNTTF9PQ1NQX2Jhc2ljX3ZlcmlmeQorCisjZGVmaW5lIE9DU1BfUkVTUE9OU0VfZnJlZSAgICAgICAgd29sZlNTTF9PQ1NQX1JFU1BPTlNFX2ZyZWUKKyNkZWZpbmUgZDJpX09DU1BfUkVTUE9OU0VfYmlvICAgICB3b2xmU1NMX2QyaV9PQ1NQX1JFU1BPTlNFX2JpbworI2RlZmluZSBkMmlfT0NTUF9SRVNQT05TRSAgICAgICAgIHdvbGZTU0xfZDJpX09DU1BfUkVTUE9OU0UKKyNkZWZpbmUgaTJkX09DU1BfUkVTUE9OU0UgICAgICAgICB3b2xmU1NMX2kyZF9PQ1NQX1JFU1BPTlNFCisjZGVmaW5lIE9DU1BfcmVzcG9uc2Vfc3RhdHVzICAgICAgd29sZlNTTF9PQ1NQX3Jlc3BvbnNlX3N0YXR1cworI2RlZmluZSBPQ1NQX3Jlc3BvbnNlX3N0YXR1c19zdHIgIHdvbGZTU0xfT0NTUF9yZXNwb25zZV9zdGF0dXNfc3RyCisjZGVmaW5lIE9DU1BfcmVzcG9uc2VfZ2V0MV9iYXNpYyAgd29sZlNTTF9PQ1NQX3Jlc3BvbnNlX2dldDFfYmFzaWMKKyNkZWZpbmUgT0NTUF9yZXNwb25zZV9jcmVhdGUgICAgICB3b2xmU1NMX09DU1BfcmVzcG9uc2VfY3JlYXRlCisKKyNkZWZpbmUgT0NTUF9SRVFVRVNUX25ldyAgICAgICAgICB3b2xmU1NMX09DU1BfUkVRVUVTVF9uZXcKKyNkZWZpbmUgT0NTUF9SRVFVRVNUX2ZyZWUgICAgICAgICB3b2xmU1NMX09DU1BfUkVRVUVTVF9mcmVlCisjZGVmaW5lIGkyZF9PQ1NQX1JFUVVFU1QgICAgICAgICAgd29sZlNTTF9pMmRfT0NTUF9SRVFVRVNUCisjZGVmaW5lIE9DU1BfcmVxdWVzdF9hZGQwX2lkICAgICAgd29sZlNTTF9PQ1NQX3JlcXVlc3RfYWRkMF9pZAorI2RlZmluZSBPQ1NQX3JlcXVlc3RfYWRkMV9ub25jZSAgIHdvbGZTU0xfT0NTUF9yZXF1ZXN0X2FkZDFfbm9uY2UKKyNkZWZpbmUgT0NTUF9jaGVja19ub25jZSAgICAgICAgICB3b2xmU1NMX09DU1BfY2hlY2tfbm9uY2UKKyNkZWZpbmUgT0NTUF9pZF9nZXQwX2luZm8gICAgICAgICB3b2xmU1NMX09DU1BfaWRfZ2V0MF9pbmZvCisjZGVmaW5lIE9DU1BfY3JsX3JlYXNvbl9zdHIgICAgICAgd29sZlNTTF9PQ1NQX2NybF9yZWFzb25fc3RyCisjZGVmaW5lIE9DU1BfUkVRVUVTVF9hZGRfZXh0ICAgICAgd29sZlNTTF9PQ1NQX1JFUVVFU1RfYWRkX2V4dAorCisjZGVmaW5lIE9DU1BfQ0VSVElEX2R1cCAgICAgICAgICAgd29sZlNTTF9PQ1NQX0NFUlRJRF9kdXAKKworI2RlZmluZSBpMmRfT0NTUF9SRVFVRVNUX2JpbyAgICAgIHdvbGZTU0xfaTJkX09DU1BfUkVRVUVTVF9iaW8KKworI2RlZmluZSBpMmRfT0NTUF9DRVJUSUQgICAgICAgICAgIHdvbGZTU0xfaTJkX09DU1BfQ0VSVElECisjZGVmaW5lIE9DU1BfU0lOR0xFUkVTUF9nZXQwX2lkICAgd29sZlNTTF9PQ1NQX1NJTkdMRVJFU1BfZ2V0MF9pZAorI2RlZmluZSBPQ1NQX3NpbmdsZV9nZXQwX3N0YXR1cyAgIHdvbGZTU0xfT0NTUF9zaW5nbGVfZ2V0MF9zdGF0dXMKKyNkZWZpbmUgT0NTUF9yZXNwX2NvdW50ICAgICAgICAgICB3b2xmU1NMX09DU1BfcmVzcF9jb3VudAorI2RlZmluZSBPQ1NQX3Jlc3BfZ2V0MCAgICAgICAgICAgIHdvbGZTU0xfT0NTUF9yZXNwX2dldDAKKworI2VuZGlmIC8qIEhBVkVfT0NTUCAqLworCisjZW5kaWYgLyogV09MRlNTTF9PQ1NQX0hfICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvb3BlbnNzbGNvbmYuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvb3BlbnNzbGNvbmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzZiNTViCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9vcGVuc3NsY29uZi5oCkBAIC0wLDAgKzEsOCBAQAorLyogb3BlbnNzbGNvbmYuaCBmb3Igb3BlblNTTCAqLworCisKKyNpZm5kZWYgT1BFTlNTTF9USFJFQURTCisgICAgI2RlZmluZSBPUEVOU1NMX1RIUkVBRFMKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvb3BlbnNzbHYuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvb3BlbnNzbHYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTg5YjU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9vcGVuc3Nsdi5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qIG9wZW5zc2x2LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiBvcGVuc3Nsdi5oIGNvbXBhdGliaWxpdHkgKi8KKworI2lmbmRlZiBXT0xGU1NMX09QRU5TU0xWX0hfCisjZGVmaW5lIFdPTEZTU0xfT1BFTlNTTFZfSF8KKworCisvKiBhcGkgdmVyc2lvbiBjb21wYXRpYmlsaXR5ICovCisjaWYgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSKSAmJiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA9PSAweDAwOTA4MTBmTCkgfHxcCisgICAgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSKSAmJiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA9PSAweDEwMTAwMDAwTCkgfHxcCisgICAgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSKSAmJiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA9PSAweDEwMDAxMDQwTCkgIAorICAgICAvKiB2YWxpZCB2ZXJzaW9uICovCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfQVBBQ0hFX0hUVFBEKSB8fCBkZWZpbmVkKEhBVkVfTElCRVNUKQorICAgIC8qIEZvciBBcGFjaGUgaHR0cGQsIFVzZSAxLjEuMCBjb21wYXRpYmlsaXR5ICovCisgICAgICNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiAweDEwMTAwMDAwTAorI2VsaWYgIGRlZmluZWQoV09MRlNTTF9RVCkKKyAgICAgI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDB4MTAxMDEwMDBMCisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSB8fCBkZWZpbmVkKEhBVkVfU1RVTk5FTCkgfHwgZGVmaW5lZChIQVZFX0xJR0hUWSkgfHwgXAorICAgIGRlZmluZWQoV09MRlNTTF9OR0lOWCkgfHwgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpIHx8IFwKKyAgICBkZWZpbmVkKFdPTEZTU0xfT1BFTlNTSCkgfHwgZGVmaW5lZChXT0xGU1NMX09QRU5WUE4pCisgICAgIC8qIHZlcnNpb24gbnVtYmVyIGNhbiBiZSBpbmNyZWFzZWQgZm9yIExpZ2h0eSBhZnRlciBjb21wYXRpYmlsaXR5IGZvciBFQ0RICisgICAgICAgIGlzIGFkZGVkICovCisgICAgICNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiAweDEwMDAxMDQwTAorI2Vsc2UKKyAgICAgI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDB4MDA5MDgxMGZMCisjZW5kaWYKKworI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVCAgICAgICAgICAgICBMSUJXT0xGU1NMX1ZFUlNJT05fU1RSSU5HCisjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTiAgICAgICAgICAgICAgICAgIDAKKworI2VuZGlmIC8qIGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9vc3NsX3R5cC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9vc3NsX3R5cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMTE0MmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL29zc2xfdHlwLmgKQEAgLTAsMCArMSwzMiBAQAorLyogb3NzbF90eXAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvb3BlbnNzbC9vc3NsX3R5cC5oCisqLworCisKKyNpZm5kZWYgV09MRlNTTF9PU1NMX1RZUF9IXworI2RlZmluZSBXT0xGU1NMX09TU0xfVFlQX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc3NsLmg+CisKKyNlbmRpZiAvKiAhV09MRlNTTF9PU1NMX1RZUF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9wZW0uaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvcGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwZmQwZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvcGVtLmgKQEAgLTAsMCArMSwyNTkgQEAKKy8qIHBlbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogcGVtLmggZm9yIG9wZW5zc2wgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC9vcGVuc3NsL3BlbS5oCisqLworCisKKyNpZm5kZWYgV09MRlNTTF9QRU1fSF8KKyNkZWZpbmUgV09MRlNTTF9QRU1fSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvYmlvLmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3JzYS5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9kc2EuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3NzbC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBSU0EgKi8KK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfYmlvX1JTQVByaXZhdGVLZXkoV09MRlNTTF9CSU8qIGJpbywgV09MRlNTTF9SU0EqIHJzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfQ0lQSEVSKiBjaXBoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcGFzc3dkLCBpbnQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiogY2IsIHZvaWQqIGFyZyk7CitXT0xGU1NMX0FQSQorV09MRlNTTF9SU0EqIHdvbGZTU0xfUEVNX3JlYWRfYmlvX1JTQVByaXZhdGVLZXkoV09MRlNTTF9CSU8qIGJpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9SU0EqKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiKiBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXJnKTsKKworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX1BFTV93cml0ZV9iaW9fUlNBX1BVQktFWShXT0xGU1NMX0JJTyogYmlvLCBXT0xGU1NMX1JTQSogcnNhKTsKKworV09MRlNTTF9BUEkKK1dPTEZTU0xfUlNBICp3b2xmU1NMX1BFTV9yZWFkX2Jpb19SU0FfUFVCS0VZKFdPTEZTU0xfQklPKiBiaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1JTQSoqIHJzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiogY2IsIHZvaWQgKnUpOworCitXT0xGU1NMX0FQSQorV09MRlNTTF9FQ19HUk9VUCogd29sZlNTTF9QRU1fcmVhZF9iaW9fRUNQS1BhcmFtZXRlcnMoV09MRlNTTF9CSU8qIGJpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfRUNfR1JPVVAqKiBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiogY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwYXNzKTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfbWVtX1JTQVByaXZhdGVLZXkoUlNBKiByc2EsIGNvbnN0IEVWUF9DSVBIRVIqIGNpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBwYXNzd2QsIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBlbSwgaW50ICpwbGVuKTsKKyNpZiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKQorV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX1BFTV93cml0ZV9SU0FQcml2YXRlS2V5KFhGSUxFIGZwLCBXT0xGU1NMX1JTQSAqcnNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX0NJUEhFUiAqZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKK1dPTEZTU0xfQVBJCitXT0xGU1NMX1JTQSAqd29sZlNTTF9QRU1fcmVhZF9SU0FQdWJsaWNLZXkoWEZJTEUgZnAsIFdPTEZTU0xfUlNBICoqeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfUlNBUHVibGljS2V5KFhGSUxFIGZwLCBXT0xGU1NMX1JTQSAqeCk7CisKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfUlNBX1BVQktFWShYRklMRSBmcCwgV09MRlNTTF9SU0EgKngpOworI2VuZGlmIC8qIE5PX0ZJTEVTWVNURU0gKi8KKworLyogRFNBICovCitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfUEVNX3dyaXRlX2Jpb19EU0FQcml2YXRlS2V5KFdPTEZTU0xfQklPKiBiaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9EU0EqIGRzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfQ0lQSEVSKiBjaXBoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcGFzc3dkLCBpbnQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiogY2IsIHZvaWQqIGFyZyk7CisKK1dPTEZTU0xfQVBJCitXT0xGU1NMX0RTQSogd29sZlNTTF9QRU1fcmVhZF9iaW9fRFNBUHJpdmF0ZUtleShXT0xGU1NMX0JJTyogYmlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9EU0EqKiBkc2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IqIGNiLHZvaWQgKnBhc3MpOworCitXT0xGU1NMX0FQSQorV09MRlNTTF9EU0EgKndvbGZTU0xfUEVNX3JlYWRfYmlvX0RTQV9QVUJLRVkoV09MRlNTTF9CSU8qIGJpbyxXT0xGU1NMX0RTQSoqIGRzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiKiBjYiwgdm9pZCAqcGFzcyk7CisKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfYmlvX0RTQV9QVUJLRVkoV09MRlNTTF9CSU8qIGJpbywgV09MRlNTTF9EU0EqIGRzYSk7CisKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfbWVtX0RTQVByaXZhdGVLZXkoV09MRlNTTF9EU0EqIGRzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfQ0lQSEVSKiBjaXBoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcGFzc3dkLCBpbnQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwZW0sIGludCAqcGxlbik7CisjaWYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfRFNBUHJpdmF0ZUtleShYRklMRSBmcCwgV09MRlNTTF9EU0EgKmRzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSk7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfUEVNX3dyaXRlX0RTQV9QVUJLRVkoWEZJTEUgZnAsIFdPTEZTU0xfRFNBICp4KTsKKyNlbmRpZiAvKiBOT19GSUxFU1lTVEVNICovCisKKy8qIEVDQyAqLworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX1BFTV93cml0ZV9iaW9fRUNQcml2YXRlS2V5KFdPTEZTU0xfQklPKiBiaW8sIFdPTEZTU0xfRUNfS0VZKiBlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9DSVBIRVIqIGNpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHBhc3N3ZCwgaW50IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiogY2IsIHZvaWQqIGFyZyk7CitXT0xGU1NMX0FQSQorV09MRlNTTF9FQ19LRVkqIHdvbGZTU0xfUEVNX3JlYWRfYmlvX0VDUHJpdmF0ZUtleShXT0xGU1NMX0JJTyogYmlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0VDX0tFWSoqIGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IqIGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXNzKTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfYmlvX0VDX1BVQktFWShXT0xGU1NMX0JJTyogYmlvLCBXT0xGU1NMX0VDX0tFWSogZWMpOworCitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfUEVNX3dyaXRlX21lbV9FQ1ByaXZhdGVLZXkoV09MRlNTTF9FQ19LRVkqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9DSVBIRVIqIGNpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHBhc3N3ZCwgaW50IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwZW0sIGludCAqcGxlbik7CisjaWYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfRUNQcml2YXRlS2V5KFhGSUxFIGZwLCBXT0xGU1NMX0VDX0tFWSAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfQ0lQSEVSICplbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfRUNfUFVCS0VZKFhGSUxFIGZwLCBXT0xGU1NMX0VDX0tFWSAqa2V5KTsKKworV09MRlNTTF9BUEkKK1dPTEZTU0xfRUNfS0VZKiB3b2xmU1NMX1BFTV9yZWFkX2Jpb19FQ19QVUJLRVkoV09MRlNTTF9CSU8qIGJpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FQ19LRVkqKiBlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiKiBjYiwgdm9pZCAqcGFzcyk7CisjZW5kaWYgLyogTk9fRklMRVNZU1RFTSAqLworCisvKiBFVlBfS0VZICovCitXT0xGU1NMX0FQSQorV09MRlNTTF9FVlBfUEtFWSogd29sZlNTTF9QRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShXT0xGU1NMX0JJTyogYmlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0VWUF9QS0VZKiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiogY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFyZyk7CitXT0xGU1NMX0FQSQorV09MRlNTTF9FVlBfUEtFWSAqd29sZlNTTF9QRU1fcmVhZF9iaW9fUFVCS0VZKFdPTEZTU0xfQklPKiBiaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FVlBfUEtFWSAqKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICpwYXNzKTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkoV09MRlNTTF9CSU8qIGJpbywgV09MRlNTTF9FVlBfUEtFWSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRVZQX0NJUEhFUiogY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHBhc3N3ZCwgaW50IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IqIGNiLCB2b2lkKiBhcmcpOworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX1BFTV93cml0ZV9iaW9fUFVCS0VZKFdPTEZTU0xfQklPKiBiaW8sIFdPTEZTU0xfRVZQX1BLRVkqIGtleSk7CisKKworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX1BFTV9yZWFkX2JpbyhXT0xGU1NMX0JJTyogYmlvLCBjaGFyICoqbmFtZSwgY2hhciAqKmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgbG9uZyAqbGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9QRU1fd3JpdGVfYmlvKFdPTEZTU0xfQklPICpiaW8sIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhlYWRlciwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsZW4pOworI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pCitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfUEVNX3JlYWQoWEZJTEUgZnAsIGNoYXIgKipuYW1lLCBjaGFyICoqaGVhZGVyLCB1bnNpZ25lZCBjaGFyICoqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgKmxlbik7CitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfUEVNX3dyaXRlKFhGSUxFIGZwLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgbG9uZyBsZW4pOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKQorV09MRlNTTF9BUEkKK1dPTEZTU0xfRVZQX1BLRVkgKndvbGZTU0xfUEVNX3JlYWRfUFVCS0VZKFhGSUxFIGZwLCBFVlBfUEtFWSAqKngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKK1dPTEZTU0xfQVBJCitXT0xGU1NMX1g1MDkgKndvbGZTU0xfUEVNX3JlYWRfWDUwOShYRklMRSBmcCwgV09MRlNTTF9YNTA5ICoqeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpOworV09MRlNTTF9BUEkKK1dPTEZTU0xfRVZQX1BLRVkgKndvbGZTU0xfUEVNX3JlYWRfUHJpdmF0ZUtleShYRklMRSBmcCwgV09MRlNTTF9FVlBfUEtFWSAqKngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKKworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX1BFTV93cml0ZV9YNTA5KFhGSUxFIGZwLCBXT0xGU1NMX1g1MDkgKngpOworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX1BFTV93cml0ZV9ESHBhcmFtcyhYRklMRSBmcCwgV09MRlNTTF9ESCogZGgpOworI2VuZGlmIC8qIE5PX0ZJTEVTWVNURU0gKi8KKworI2RlZmluZSBQRU1fcmVhZCAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfUEVNX3JlYWQKKyNkZWZpbmUgUEVNX3JlYWRfYmlvICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1BFTV9yZWFkX2JpbworI2RlZmluZSBQRU1fd3JpdGUgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfUEVNX3dyaXRlCisjZGVmaW5lIFBFTV93cml0ZV9iaW8gICAgICAgICAgICAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfYmlvCisKKyNkZWZpbmUgUEVNX3JlYWRfWDUwOSAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1BFTV9yZWFkX1g1MDkKKyNkZWZpbmUgUEVNX3JlYWRfUHJpdmF0ZUtleSAgICAgICAgICAgICB3b2xmU1NMX1BFTV9yZWFkX1ByaXZhdGVLZXkKKyNkZWZpbmUgUEVNX3dyaXRlX1g1MDkgICAgICAgICAgICAgICAgICB3b2xmU1NMX1BFTV93cml0ZV9YNTA5CisjZGVmaW5lIFBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleSAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkKKyNkZWZpbmUgUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZhdGVLZXkgICB3b2xmU1NMX1BFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5CisKKy8qIERIICovCisjZGVmaW5lIFBFTV93cml0ZV9ESHBhcmFtcyAgICAgICAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfREhwYXJhbXMKKy8qIFJTQSAqLworI2RlZmluZSBQRU1fd3JpdGVfYmlvX1JTQVByaXZhdGVLZXkgICAgIHdvbGZTU0xfUEVNX3dyaXRlX2Jpb19SU0FQcml2YXRlS2V5CisjZGVmaW5lIFBFTV9yZWFkX2Jpb19SU0FQcml2YXRlS2V5ICAgICAgd29sZlNTTF9QRU1fcmVhZF9iaW9fUlNBUHJpdmF0ZUtleQorI2RlZmluZSBQRU1fd3JpdGVfYmlvX1JTQV9QVUJLRVkgICAgICAgIHdvbGZTU0xfUEVNX3dyaXRlX2Jpb19SU0FfUFVCS0VZCisjZGVmaW5lIFBFTV9yZWFkX2Jpb19SU0FfUFVCS0VZICAgICAgICAgd29sZlNTTF9QRU1fcmVhZF9iaW9fUlNBX1BVQktFWQorI2RlZmluZSBQRU1fcmVhZF9iaW9fRUNQS1BhcmFtZXRlcnMgICAgIHdvbGZTU0xfUEVNX3JlYWRfYmlvX0VDUEtQYXJhbWV0ZXJzCisjZGVmaW5lIFBFTV93cml0ZV9SU0FQcml2YXRlS2V5ICAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfUlNBUHJpdmF0ZUtleQorI2RlZmluZSBQRU1fd3JpdGVfUlNBX1BVQktFWSAgICAgICAgICAgIHdvbGZTU0xfUEVNX3dyaXRlX1JTQV9QVUJLRVkKKyNkZWZpbmUgUEVNX3dyaXRlX1JTQVB1YmxpY0tleSAgICAgICAgICB3b2xmU1NMX1BFTV93cml0ZV9SU0FQdWJsaWNLZXkKKyNkZWZpbmUgUEVNX3JlYWRfUlNBUHVibGljS2V5ICAgICAgICAgICB3b2xmU1NMX1BFTV9yZWFkX1JTQVB1YmxpY0tleQorLyogRFNBICovCisjZGVmaW5lIFBFTV93cml0ZV9iaW9fRFNBUHJpdmF0ZUtleSAgICAgd29sZlNTTF9QRU1fd3JpdGVfYmlvX0RTQVByaXZhdGVLZXkKKyNkZWZpbmUgUEVNX3dyaXRlX0RTQVByaXZhdGVLZXkgICAgICAgICB3b2xmU1NMX1BFTV93cml0ZV9EU0FQcml2YXRlS2V5CisjZGVmaW5lIFBFTV93cml0ZV9iaW9fRFNBX1BVQktFWSAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfYmlvX0RTQV9QVUJLRVkKKyNkZWZpbmUgUEVNX3dyaXRlX0RTQV9QVUJLRVkgICAgICAgICAgICB3b2xmU1NMX1BFTV93cml0ZV9EU0FfUFVCS0VZCisjZGVmaW5lIFBFTV9yZWFkX2Jpb19EU0FQcml2YXRlS2V5ICAgICAgd29sZlNTTF9QRU1fcmVhZF9iaW9fRFNBUHJpdmF0ZUtleQorI2RlZmluZSBQRU1fcmVhZF9iaW9fRFNBX1BVQktFWSAgICAgICAgIHdvbGZTU0xfUEVNX3JlYWRfYmlvX0RTQV9QVUJLRVkKKy8qIEVDQyAqLworI2RlZmluZSBQRU1fd3JpdGVfYmlvX0VDUHJpdmF0ZUtleSAgICAgIHdvbGZTU0xfUEVNX3dyaXRlX2Jpb19FQ1ByaXZhdGVLZXkKKyNkZWZpbmUgUEVNX3dyaXRlX2Jpb19FQ19QVUJLRVkgICAgICAgICB3b2xmU1NMX1BFTV93cml0ZV9iaW9fRUNfUFVCS0VZCisjZGVmaW5lIFBFTV93cml0ZV9FQ19QVUJLRVkgICAgICAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfRUNfUFVCS0VZCisjZGVmaW5lIFBFTV93cml0ZV9FQ1ByaXZhdGVLZXkgICAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfRUNQcml2YXRlS2V5CisjZGVmaW5lIFBFTV9yZWFkX2Jpb19FQ1ByaXZhdGVLZXkgICAgICAgd29sZlNTTF9QRU1fcmVhZF9iaW9fRUNQcml2YXRlS2V5CisjZGVmaW5lIFBFTV9yZWFkX2Jpb19FQ19QVUJLRVkgICAgICAgICAgd29sZlNTTF9QRU1fcmVhZF9iaW9fRUNfUFVCS0VZCisjaWZuZGVmIE5PX1dPTEZTU0xfU1RVQgorI2RlZmluZSBQRU1fd3JpdGVfYmlvX0VDUEtQYXJhbWV0ZXJzKC4uLikgMAorI2VuZGlmCisvKiBFVlBfS0VZICovCisjZGVmaW5lIFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5ICAgICAgICAgd29sZlNTTF9QRU1fcmVhZF9iaW9fUHJpdmF0ZUtleQorI2RlZmluZSBQRU1fcmVhZF9QVUJLRVkgICAgICAgICAgICAgICAgIHdvbGZTU0xfUEVNX3JlYWRfUFVCS0VZCisjZGVmaW5lIFBFTV9yZWFkX2Jpb19QVUJLRVkgICAgICAgICAgICAgd29sZlNTTF9QRU1fcmVhZF9iaW9fUFVCS0VZCisjZGVmaW5lIFBFTV93cml0ZV9iaW9fUFVCS0VZICAgICAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfYmlvX1BVQktFWQorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAvKiBleHRlcm4gIkMiICovIAorI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX1BFTV9IXyAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3BrY3MxMi5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9wa2NzMTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWIwZjNlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9wa2NzMTIuaApAQCAtMCwwICsxLDUwIEBACisvKiBwa2NzMTIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIHBrY3MxMi5oIGZvciBvcGVuc3NsICovCisKKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9wa2NzMTIuaD4KKworI2lmbmRlZiBXT0xGU1NMX1BLQ1MxMl9DT01QQVRfSF8KKyNkZWZpbmUgV09MRlNTTF9QS0NTMTJfQ09NUEFUX0hfCisKKyNkZWZpbmUgTklEX3BiZV9XaXRoU0hBMUFuZERFU19DQkMgICAgICAgICAgICAgMgorI2RlZmluZSBOSURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQyAzCisjZGVmaW5lIE5JRF9wYmVfV2l0aFNIQTFBbmQxMjhCaXRSQzQgICAgICAgICAgIDEKKworI2RlZmluZSBQS0NTMTJfREVGQVVMVF9JVEVSIFdDX1BLQ1MxMl9JVFRfREVGQVVMVAorCisvKiB3b2xmQ3J5cHQgbGV2ZWwgZG9lcyBub3QgbWFrZSB1c2Ugb2Ygc3NsLmggKi8KKyNkZWZpbmUgUEtDUzEyICAgICAgICAgV0NfUEtDUzEyCisjZGVmaW5lIFBLQ1MxMl9uZXcgICAgIHdjX1BLQ1MxMl9uZXcKKyNkZWZpbmUgUEtDUzEyX2ZyZWUgICAgd2NfUEtDUzEyX2ZyZWUKKworLyogd29sZlNTTCBsZXZlbCB1c2luZyBzdHJ1Y3RzIGZyb20gc3NsLmggYW5kIGNhbGxzIGRvd24gdG8gd29sZkNyeXB0ICovCisjZGVmaW5lIGQyaV9QS0NTMTJfYmlvIHdvbGZTU0xfZDJpX1BLQ1MxMl9iaW8KKyNkZWZpbmUgUEtDUzEyX3BhcnNlICAgd29sZlNTTF9QS0NTMTJfcGFyc2UKKyNkZWZpbmUgUEtDUzEyX3ZlcmlmeV9tYWMgd29sZlNTTF9QS0NTMTJfdmVyaWZ5X21hYworI2RlZmluZSBQS0NTMTJfY3JlYXRlICB3b2xmU1NMX1BLQ1MxMl9jcmVhdGUKKyNkZWZpbmUgUEtDUzEyX1BCRV9hZGQgd29sZlNTTF9QS0NTMTJfUEJFX2FkZAorCisjZW5kaWYgLyogV09MRlNTTF9QS0NTMTJfQ09NUEFUX0hfICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvcGtjczcuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvcGtjczcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI4YTFjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9wa2NzNy5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qIHBrY3M3LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiBwa2NzNy5oIGZvciBvcGVuU1NMICovCisKKworI2lmbmRlZiBXT0xGU1NMX1BLQ1M3X0hfCisjZGVmaW5lIFdPTEZTU0xfUEtDUzdfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9wa2NzNy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgJiYgZGVmaW5lZChIQVZFX1BLQ1M3KQorCisjZGVmaW5lIFBLQ1M3X05PSU5URVJOICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFBLQ1M3X05PVkVSSUZZICAgICAgICAgMHgwMDIwCisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfUEtDUzcKK3sKKyAgICBQS0NTNyBwa2NzNzsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhOworICAgIGludCBsZW47CisgICAgV09MRlNTTF9TVEFDSyogY2VydHM7Cit9IFdPTEZTU0xfUEtDUzc7CisKKworV09MRlNTTF9BUEkgUEtDUzcqIHdvbGZTU0xfUEtDUzdfbmV3KHZvaWQpOworV09MRlNTTF9BUEkgUEtDUzdfU0lHTkVEKiB3b2xmU1NMX1BLQ1M3X1NJR05FRF9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfUEtDUzdfZnJlZShQS0NTNyogcDcpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1BLQ1M3X1NJR05FRF9mcmVlKFBLQ1M3X1NJR05FRCogcDcpOworV09MRlNTTF9BUEkgUEtDUzcqIHdvbGZTU0xfZDJpX1BLQ1M3KFBLQ1M3KiogcDcsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKiBpbiwKKyAgICBpbnQgbGVuKTsKK1dPTEZTU0xfTE9DQUwgUEtDUzcqIHdvbGZTU0xfZDJpX1BLQ1M3X2V4KFBLQ1M3KiogcDcsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKiBpbiwKKyAgICBpbnQgbGVuLCBieXRlKiBjb250ZW50LCB3b3JkMzIgY29udGVudFN6KTsKK1dPTEZTU0xfQVBJIFBLQ1M3KiB3b2xmU1NMX2QyaV9QS0NTN19iaW8oV09MRlNTTF9CSU8qIGJpbywgUEtDUzcqKiBwNyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmRfUEtDUzdfYmlvKFdPTEZTU0xfQklPICpiaW8sIFBLQ1M3ICpwNyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9QS0NTN192ZXJpZnkoUEtDUzcqIHA3LCBXT0xGU1NMX1NUQUNLKiBjZXJ0cywKKyAgICBXT0xGU1NMX1g1MDlfU1RPUkUqIHN0b3JlLCBXT0xGU1NMX0JJTyogaW4sIFdPTEZTU0xfQklPKiBvdXQsIGludCBmbGFncyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9QS0NTN19lbmNvZGVfY2VydHMoUEtDUzcqIHA3LCBXT0xGU1NMX1NUQUNLKiBjZXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0JJTyogb3V0KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfU1RBQ0sqIHdvbGZTU0xfUEtDUzdfdG9fc3RhY2soUEtDUzcqIHBrY3M3KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfU1RBQ0sqIHdvbGZTU0xfUEtDUzdfZ2V0MF9zaWduZXJzKFBLQ1M3KiBwNywKKyAgICBXT0xGU1NMX1NUQUNLKiBjZXJ0cywgaW50IGZsYWdzKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1BFTV93cml0ZV9iaW9fUEtDUzcoV09MRlNTTF9CSU8qIGJpbywgUEtDUzcqIHA3KTsKKyNpZiBkZWZpbmVkKEhBVkVfU01JTUUpCitXT0xGU1NMX0FQSSBQS0NTNyogd29sZlNTTF9TTUlNRV9yZWFkX1BLQ1M3KFdPTEZTU0xfQklPKiBpbiwgV09MRlNTTF9CSU8qKiBiY29udCk7CisjZW5kaWYgLyogSEFWRV9TTUlNRSAqLworCisKKyNkZWZpbmUgUEtDUzdfbmV3ICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfUEtDUzdfbmV3CisjZGVmaW5lIFBLQ1M3X1NJR05FRF9uZXcgICAgICAgICAgICAgICB3b2xmU1NMX1BLQ1M3X1NJR05FRF9uZXcKKyNkZWZpbmUgUEtDUzdfZnJlZSAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfUEtDUzdfZnJlZQorI2RlZmluZSBQS0NTN19TSUdORURfZnJlZSAgICAgICAgICAgICAgd29sZlNTTF9QS0NTN19TSUdORURfZnJlZQorI2RlZmluZSBkMmlfUEtDUzcgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9kMmlfUEtDUzcKKyNkZWZpbmUgZDJpX1BLQ1M3X2JpbyAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZDJpX1BLQ1M3X2JpbworI2RlZmluZSBpMmRfUEtDUzdfYmlvICAgICAgICAgICAgICAgICAgd29sZlNTTF9pMmRfUEtDUzdfYmlvCisjZGVmaW5lIFBLQ1M3X3ZlcmlmeSAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1BLQ1M3X3ZlcmlmeQorI2RlZmluZSBQS0NTN19nZXQwX3NpZ25lcnMgICAgICAgICAgICAgd29sZlNTTF9QS0NTN19nZXQwX3NpZ25lcnMKKyNkZWZpbmUgUEVNX3dyaXRlX2Jpb19QS0NTNyAgICAgICAgICAgIHdvbGZTU0xfUEVNX3dyaXRlX2Jpb19QS0NTNworI2lmIGRlZmluZWQoSEFWRV9TTUlNRSkKKyNkZWZpbmUgU01JTUVfcmVhZF9QS0NTNyAgICAgICAgICAgICAgIHdvbGZTU0xfU01JTUVfcmVhZF9QS0NTNworI2VuZGlmIC8qIEhBVkVfU01JTUUgKi8KKworI2VuZGlmIC8qIE9QRU5TU0xfQUxMICYmIEhBVkVfUEtDUzcgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX1BLQ1M3X0hfICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvcmFuZC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9yYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhZjgxOAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvcmFuZC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qIHJhbmQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIHJhbmQuaCBmb3Igb3BlblNTTCAqLworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3JhbmRvbS5oPgorCit0eXBlZGVmIFdPTEZTU0xfUkFORF9NRVRIT0QgUkFORF9NRVRIT0Q7CisKKyNkZWZpbmUgUkFORF9zZXRfcmFuZF9tZXRob2QgICAgIHdvbGZTU0xfUkFORF9zZXRfcmFuZF9tZXRob2QKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvcmM0LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3JjNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYzNjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3JjNC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qIHJjNC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKy8qICByYzQuaCBkZWZpbmVzIG1pbmkgZGVzIG9wZW5zc2wgY29tcGF0aWJpbGl0eSBsYXllcgorICoKKyAqLworCisjaWZuZGVmIFdPTEZTU0xfUkM0X0NPTVBBVF9IXworI2RlZmluZSBXT0xGU1NMX1JDNF9DT01QQVRfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NldHRpbmdzLmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3NzbC5oPiAvKiBpbmNsdWRlZCBmb3Igc2l6ZV90ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGFwcGxpY2F0aW9ucyBpbmNsdWRpbmcgd29sZnNzbC9vcGVuc3NsL3JjNC5oIGFyZSBleHBlY3RpbmcgdG8gaGF2ZSBhY2Nlc3MgdG8KKyAqIHRoZSBzaXplIG9mIFJDNF9LRVkgc3RydWN0dXJlcy4gKi8KK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfUkM0X0tFWSB7CisgICAgLyogYmlnIGVub3VnaCBmb3IgQXJjNCBmcm9tIHdvbGZzc2wvd29sZmNyeXB0L2FyYzQuaCAqLworICAgIHZvaWQqIGhvbGRlclsoMjcyICsgV0NfQVNZTkNfREVWX1NJWkUpIC8gc2l6ZW9mKHZvaWQqKV07Cit9IFdPTEZTU0xfUkM0X0tFWTsKK3R5cGVkZWYgV09MRlNTTF9SQzRfS0VZIFJDNF9LRVk7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9SQzRfc2V0X2tleShXT0xGU1NMX1JDNF9LRVkqIGtleSwgaW50IGxlbiwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfUkM0KFdPTEZTU0xfUkM0X0tFWSoga2V5LCBzaXplX3QgbGVuLAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpbiwgdW5zaWduZWQgY2hhciogb3V0KTsKKworI2RlZmluZSBSQzQgICAgICAgICB3b2xmU1NMX1JDNAorI2RlZmluZSBSQzRfc2V0X2tleSB3b2xmU1NMX1JDNF9zZXRfa2V5CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gIC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogV09MRlNTTF9SQzRfQ09NUEFUX0hfICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvcmlwZW1kLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3JpcGVtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZGVhMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3JpcGVtZC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIHJpcGVtZC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogcmlwZW1kLmggZm9yIG9wZW5zc2wgKi8KKworCisjaWZuZGVmIFdPTEZTU0xfUklQRU1EX0hfCisjZGVmaW5lIFdPTEZTU0xfUklQRU1EX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfUklQRU1EX0NUWCB7CisgICAgaW50IGhvbGRlclszMl07ICAgLyogYmlnIGVub3VnaCB0byBob2xkIHdvbGZjcnlwdCwgYnV0IGNoZWNrIG9uIGluaXQgKi8KK30gV09MRlNTTF9SSVBFTURfQ1RYOworCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfUklQRU1EX0luaXQoV09MRlNTTF9SSVBFTURfQ1RYKik7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfUklQRU1EX1VwZGF0ZShXT0xGU1NMX1JJUEVNRF9DVFgqLCBjb25zdCB2b2lkKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9SSVBFTURfRmluYWwodW5zaWduZWQgY2hhciosIFdPTEZTU0xfUklQRU1EX0NUWCopOworCisKK3R5cGVkZWYgV09MRlNTTF9SSVBFTURfQ1RYIFJJUEVNRF9DVFg7CisKKyNkZWZpbmUgUklQRU1EX0luaXQgICB3b2xmU1NMX1JJUEVNRF9Jbml0CisjZGVmaW5lIFJJUEVNRF9VcGRhdGUgd29sZlNTTF9SSVBFTURfVXBkYXRlCisjZGVmaW5lIFJJUEVNRF9GaW5hbCAgd29sZlNTTF9SSVBFTURfRmluYWwKKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAvKiBleHRlcm4gIkMiICovIAorI2VuZGlmCisKKworI2VuZGlmIC8qIFdPTEZTU0xfTUQ1X0hfICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvcnNhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3JzYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYmFhNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3JzYS5oCkBAIC0wLDAgKzEsMjExIEBACisvKiByc2EuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIHJzYS5oIGZvciBvcGVuU1NMICovCisKKworI2lmbmRlZiBXT0xGU1NMX1JTQV9IXworI2RlZmluZSBXT0xGU1NMX1JTQV9IXworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2JuLmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2Vyci5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFBhZGRpbmcgdHlwZXMgKi8KKyNkZWZpbmUgUlNBX1BLQ1MxX1BBRERJTkcgICAgICAwCisjZGVmaW5lIFJTQV9QS0NTMV9PQUVQX1BBRERJTkcgMQorI2RlZmluZSBSU0FfUEtDUzFfUFNTX1BBRERJTkcgIDIKKyNkZWZpbmUgUlNBX05PX1BBRERJTkcgICAgICAgICAzCisKKy8qIEVtdWxhdGUgT3BlblNTTCBmbGFncyAqLworI2RlZmluZSBSU0FfTUVUSE9EX0ZMQUdfTk9fQ0hFQ0sgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQyAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBSU0FfRkxBR19CTElORElORyAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIFJTQV9GTEFHX1RIUkVBRF9TQUZFICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgUlNBX0ZMQUdfRVhUX1BLRVkgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBSU0FfRkxBR19OT19CTElORElORyAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIFJTQV9GTEFHX05PX0NPTlNUVElNRSAgICAgICAgICAgKDEgPDwgOCkKKworLyogU2FsdCBsZW5ndGggc2FtZSBhcyBkaWdlc3QgbGVuZ3RoICovCisjZGVmaW5lIFJTQV9QU1NfU0FMVExFTl9ESUdFU1QgICAtMQorLyogT2xkIG1heCBzYWx0IGxlbmd0aCAqLworI2RlZmluZSBSU0FfUFNTX1NBTFRMRU5fTUFYX1NJR04gLTIKKy8qIE1heCBzYWx0IGxlbmd0aCAqLworI2RlZmluZSBSU0FfUFNTX1NBTFRMRU5fTUFYICAgICAgLTMKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9SU0FfTUVUSE9EIHsKKyAgICBpbnQgZmxhZ3M7CisgICAgY2hhciAqbmFtZTsKK30gV09MRlNTTF9SU0FfTUVUSE9EOworCisjaWZuZGVmIFdPTEZTU0xfUlNBX1RZUEVfREVGSU5FRCAvKiBndWFyZCBvbiByZWRlY2xhcmF0aW9uICovCisjZGVmaW5lIFdPTEZTU0xfUlNBX1RZUEVfREVGSU5FRAordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9SU0EgeworI2lmZGVmIFdDX1JTQV9CTElORElORworICAgIFdDX1JORyogcm5nOyAgICAgICAgICAgICAgLyogZm9yIFByaXZhdGVEZWNyeXB0IGJsaW5kaW5nICovCisjZW5kaWYKKyAgICBXT0xGU1NMX0JJR05VTSogbjsKKyAgICBXT0xGU1NMX0JJR05VTSogZTsKKyAgICBXT0xGU1NMX0JJR05VTSogZDsKKyAgICBXT0xGU1NMX0JJR05VTSogcDsKKyAgICBXT0xGU1NMX0JJR05VTSogcTsKKyAgICBXT0xGU1NMX0JJR05VTSogZG1wMTsgICAgICAvKiBkUCAqLworICAgIFdPTEZTU0xfQklHTlVNKiBkbXExOyAgICAgIC8qIGRRICovCisgICAgV09MRlNTTF9CSUdOVU0qIGlxbXA7ICAgICAgLyogdSAqLworICAgIHZvaWQqICAgICAgICAgIGhlYXA7CisgICAgdm9pZCogICAgICAgICAgaW50ZXJuYWw7ICAvKiBvdXIgUlNBICovCisgICAgY2hhciAgICAgICAgICAgaW5TZXQ7ICAgICAvKiBpbnRlcm5hbCBzZXQgZnJvbSBleHRlcm5hbCA/ICovCisgICAgY2hhciAgICAgICAgICAgZXhTZXQ7ICAgICAvKiBleHRlcm5hbCBzZXQgZnJvbSBpbnRlcm5hbCA/ICovCisgICAgY2hhciAgICAgICAgICAgb3duUm5nOyAgICAvKiBmbGFnIGZvciBpZiB0aGUgcm5nIHNob3VsZCBiZSBmcmVlJ2QgKi8KKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpCisgICAgV09MRlNTTF9SU0FfTUVUSE9EKiBtZXRoOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0VYX0RBVEEpCisgICAgV09MRlNTTF9DUllQVE9fRVhfREFUQSBleF9kYXRhOyAgLyogZXh0ZXJuYWwgZGF0YSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKE9QRU5TU0xfQUxMKQorICAgIHdvbGZTU0xfTXV0ZXggICAgcmVmTXV0ZXg7ICAgICAgICAgICAgICAgICAgICAgICAvKiByZWYgY291bnQgbXV0ZXggKi8KKyAgICBpbnQgICAgICAgICAgICAgIHJlZkNvdW50OyAgICAgICAgICAgICAgICAgICAgICAgLyogcmVmZXJlbmNlIGNvdW50ICovCisjZW5kaWYKK30gV09MRlNTTF9SU0E7CisjZW5kaWYKKwordHlwZWRlZiBXT0xGU1NMX1JTQSAgICAgICAgICAgICAgICAgICBSU0E7Cit0eXBlZGVmIFdPTEZTU0xfUlNBX01FVEhPRCAgICAgICAgICAgIFJTQV9NRVRIT0Q7CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfUlNBKiB3b2xmU1NMX1JTQV9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkICAgICAgICB3b2xmU1NMX1JTQV9mcmVlKFdPTEZTU0xfUlNBKik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1JTQV9nZW5lcmF0ZV9rZXlfZXgoV09MRlNTTF9SU0EqLCBpbnQgYml0cywgV09MRlNTTF9CSUdOVU0qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2IpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0FfYmxpbmRpbmdfb24oV09MRlNTTF9SU0EqLCBXT0xGU1NMX0JOX0NUWCopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUlNBX3B1YmxpY19lbmNyeXB0KGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGZyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiB0bywgV09MRlNTTF9SU0EqLCBpbnQgcGFkZGluZyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0FfcHJpdmF0ZV9kZWNyeXB0KGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGZyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiB0bywgV09MRlNTTF9SU0EqLCBpbnQgcGFkZGluZyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0FfcHJpdmF0ZV9lbmNyeXB0KGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIG91dCwgV09MRlNTTF9SU0EqIHJzYSwgaW50IHBhZGRpbmcpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0Ffc2l6ZShjb25zdCBXT0xGU1NMX1JTQSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUlNBX2JpdHMoY29uc3QgV09MRlNTTF9SU0EqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1JTQV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtTGVuLCB1bnNpZ25lZCBjaGFyKiBzaWdSZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBzaWdMZW4sIFdPTEZTU0xfUlNBKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0Ffc2lnbl9leChpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciogbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbUxlbiwgdW5zaWduZWQgY2hhciogc2lnUmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogc2lnTGVuLCBXT0xGU1NMX1JTQSosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0Ffc2lnbl9nZW5lcmljX3BhZGRpbmcoaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1MZW4sIHVuc2lnbmVkIGNoYXIqIHNpZ1JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIHNpZ0xlbiwgV09MRlNTTF9SU0EqLCBpbnQsIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0FfdmVyaWZ5KGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtTGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpZ0xlbiwgV09MRlNTTF9SU0EqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1JTQV92ZXJpZnlfZXgoaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1MZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2lnTGVuLCBXT0xGU1NMX1JTQSogcnNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWRkaW5nKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1JTQV9wdWJsaWNfZGVjcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciogZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiB0bywgV09MRlNTTF9SU0EqLCBpbnQgcGFkZGluZyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0FfR2VuQWRkKFdPTEZTU0xfUlNBKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0FfTG9hZERlcihXT0xGU1NMX1JTQSosIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBpbnQgc3opOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUlNBX0xvYWREZXJfZXgoV09MRlNTTF9SU0EqLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgaW50IHN6LCBpbnQgb3B0KTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9SU0FfTUVUSE9EICp3b2xmU1NMX1JTQV9tZXRoX25ldyhjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1JTQV9tZXRoX2ZyZWUoV09MRlNTTF9SU0FfTUVUSE9EICptZXRoKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1JTQV9tZXRoX3NldChXT0xGU1NMX1JTQV9NRVRIT0QgKnJzYSwgdm9pZCogcCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0Ffc2V0X21ldGhvZChXT0xGU1NMX1JTQSAqcnNhLCBXT0xGU1NMX1JTQV9NRVRIT0QgKm1ldGgpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9SU0FfTUVUSE9EKiB3b2xmU1NMX1JTQV9nZXRfbWV0aG9kKGNvbnN0IFdPTEZTU0xfUlNBICpyc2EpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9SU0FfTUVUSE9EKiB3b2xmU1NMX1JTQV9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCk7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9SU0FfZ2V0MF9rZXkoY29uc3QgV09MRlNTTF9SU0EgKnIsIGNvbnN0IFdPTEZTU0xfQklHTlVNICoqbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9CSUdOVU0gKiplLCBjb25zdCBXT0xGU1NMX0JJR05VTSAqKmQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUlNBX3NldDBfa2V5KFdPTEZTU0xfUlNBICpyLCBXT0xGU1NMX0JJR05VTSAqbiwgV09MRlNTTF9CSUdOVU0gKmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9CSUdOVU0gKmQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUlNBX2ZsYWdzKGNvbnN0IFdPTEZTU0xfUlNBICpyKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9SU0Ffc2V0X2ZsYWdzKFdPTEZTU0xfUlNBICpyLCBpbnQgZmxhZ3MpOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX1JTQSogd29sZlNTTF9SU0FQdWJsaWNLZXlfZHVwKFdPTEZTU0xfUlNBICpyc2EpOworCitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX1JTQV9nZXRfZXhfZGF0YShjb25zdCBXT0xGU1NMX1JTQSAqcnNhLCBpbnQgaWR4KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1JTQV9zZXRfZXhfZGF0YShXT0xGU1NMX1JTQSAqcnNhLCBpbnQgaWR4LCB2b2lkICpkYXRhKTsKKyNpZmRlZiBIQVZFX0VYX0RBVEFfQ0xFQU5VUF9IT09LUworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUlNBX3NldF9leF9kYXRhX3dpdGhfY2xlYW51cCgKKyAgICBXT0xGU1NMX1JTQSAqcnNhLAorICAgIGludCBpZHgsCisgICAgdm9pZCAqZGF0YSwKKyAgICB3b2xmU1NMX2V4X2RhdGFfY2xlYW51cF9yb3V0aW5lX3QgY2xlYW51cF9yb3V0aW5lKTsKKyNlbmRpZgorCisjZGVmaW5lIFdPTEZTU0xfUlNBX0xPQURfUFJJVkFURSAxCisjZGVmaW5lIFdPTEZTU0xfUlNBX0xPQURfUFVCTElDICAyCisjZGVmaW5lIFdPTEZTU0xfUlNBX0Y0ICAgICAgICAgICAweDEwMDAxTAorCisjZGVmaW5lIFJTQV9uZXcgIHdvbGZTU0xfUlNBX25ldworI2RlZmluZSBSU0FfZnJlZSB3b2xmU1NMX1JTQV9mcmVlCisKKyNkZWZpbmUgUlNBX2dlbmVyYXRlX2tleV9leCB3b2xmU1NMX1JTQV9nZW5lcmF0ZV9rZXlfZXgKKworI2RlZmluZSBSU0FfYmxpbmRpbmdfb24gICAgIHdvbGZTU0xfUlNBX2JsaW5kaW5nX29uCisjZGVmaW5lIFJTQV9wdWJsaWNfZW5jcnlwdCAgd29sZlNTTF9SU0FfcHVibGljX2VuY3J5cHQKKyNkZWZpbmUgUlNBX3ByaXZhdGVfZGVjcnlwdCB3b2xmU1NMX1JTQV9wcml2YXRlX2RlY3J5cHQKKyNkZWZpbmUgUlNBX3ByaXZhdGVfZW5jcnlwdCB3b2xmU1NMX1JTQV9wcml2YXRlX2VuY3J5cHQKKworI2RlZmluZSBSU0Ffc2l6ZSAgICAgICAgICAgd29sZlNTTF9SU0Ffc2l6ZQorI2RlZmluZSBSU0Ffc2lnbiAgICAgICAgICAgd29sZlNTTF9SU0Ffc2lnbgorI2RlZmluZSBSU0FfdmVyaWZ5ICAgICAgICAgd29sZlNTTF9SU0FfdmVyaWZ5CisjZGVmaW5lIFJTQV9wdWJsaWNfZGVjcnlwdCB3b2xmU1NMX1JTQV9wdWJsaWNfZGVjcnlwdAorCisjZGVmaW5lIFJTQV9tZXRoX25ldyAgICAgICAgICAgIHdvbGZTU0xfUlNBX21ldGhfbmV3CisjZGVmaW5lIFJTQV9tZXRoX2ZyZWUgICAgICAgICAgIHdvbGZTU0xfUlNBX21ldGhfZnJlZQorI2RlZmluZSBSU0FfbWV0aF9zZXRfcHViX2VuYyAgICB3b2xmU1NMX1JTQV9tZXRoX3NldAorI2RlZmluZSBSU0FfbWV0aF9zZXRfcHViX2RlYyAgICB3b2xmU1NMX1JTQV9tZXRoX3NldAorI2RlZmluZSBSU0FfbWV0aF9zZXRfcHJpdl9lbmMgICB3b2xmU1NMX1JTQV9tZXRoX3NldAorI2RlZmluZSBSU0FfbWV0aF9zZXRfcHJpdl9kZWMgICB3b2xmU1NMX1JTQV9tZXRoX3NldAorI2RlZmluZSBSU0FfbWV0aF9zZXRfaW5pdCAgICAgICB3b2xmU1NMX1JTQV9tZXRoX3NldAorI2RlZmluZSBSU0FfbWV0aF9zZXRfZmluaXNoICAgICB3b2xmU1NMX1JTQV9tZXRoX3NldAorI2RlZmluZSBSU0FfbWV0aF9zZXQwX2FwcF9kYXRhICB3b2xmU1NMX1JTQV9tZXRoX3NldAorI2RlZmluZSBSU0FfZ2V0X2RlZmF1bHRfbWV0aG9kICB3b2xmU1NMX1JTQV9nZXRfZGVmYXVsdF9tZXRob2QKKyNkZWZpbmUgUlNBX2dldF9tZXRob2QgICAgICAgICAgd29sZlNTTF9SU0FfZ2V0X21ldGhvZAorI2RlZmluZSBSU0Ffc2V0X21ldGhvZCAgICAgICAgICB3b2xmU1NMX1JTQV9zZXRfbWV0aG9kCisjZGVmaW5lIFJTQV9nZXQwX2tleSAgICAgICAgICAgIHdvbGZTU0xfUlNBX2dldDBfa2V5CisjZGVmaW5lIFJTQV9zZXQwX2tleSAgICAgICAgICAgIHdvbGZTU0xfUlNBX3NldDBfa2V5CisjZGVmaW5lIFJTQV9mbGFncyAgICAgICAgICAgICAgIHdvbGZTU0xfUlNBX2ZsYWdzCisjZGVmaW5lIFJTQV9zZXRfZmxhZ3MgICAgICAgICAgIHdvbGZTU0xfUlNBX3NldF9mbGFncworCisjZGVmaW5lIFJTQVB1YmxpY0tleV9kdXAgICAgICAgIHdvbGZTU0xfUlNBUHVibGljS2V5X2R1cAorI2RlZmluZSBSU0FfZ2V0X2V4X2RhdGEgICAgICAgIHdvbGZTU0xfUlNBX2dldF9leF9kYXRhCisjZGVmaW5lIFJTQV9zZXRfZXhfZGF0YSAgICAgICAgd29sZlNTTF9SU0Ffc2V0X2V4X2RhdGEKKworI2RlZmluZSBSU0FfZ2V0MF9rZXkgICAgICAgd29sZlNTTF9SU0FfZ2V0MF9rZXkKKworI2RlZmluZSBSU0FfRjQgICAgICAgICAgICAgV09MRlNTTF9SU0FfRjQKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvc2hhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3NoYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMjBlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3NoYS5oCkBAIC0wLDAgKzEsMjI2IEBACisvKiBzaGEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIHNoYS5oIGZvciBvcGVuc3NsICovCisKKworI2lmbmRlZiBXT0xGU1NMX1NIQV9IXworI2RlZmluZSBXT0xGU1NMX1NIQV9IXworCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2V0dGluZ3MuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgV09MRlNTTF9QUkVGSVgKKyNpbmNsdWRlICJwcmVmaXhfc2hhLmgiCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1NIQV9DVFggeworICAgIC8qIGJpZyBlbm91Z2ggdG8gaG9sZCB3b2xmY3J5cHQgU2hhLCBidXQgY2hlY2sgb24gaW5pdCAqLworI2lmIGRlZmluZWQoU1RNMzJfSEFTSCkKKyAgICB2b2lkKiBob2xkZXJbKDExMiArIFdDX0FTWU5DX0RFVl9TSVpFICsgc2l6ZW9mKFNUTTMyX0hBU0hfQ29udGV4dCkpIC8gc2l6ZW9mKHZvaWQqKV07CisjZWxzZQorICAgIHZvaWQqIGhvbGRlclsoMTEyICsgV0NfQVNZTkNfREVWX1NJWkUpIC8gc2l6ZW9mKHZvaWQqKV07CisjZW5kaWYKKyAgICAjaWZkZWYgV09MRl9DUllQVE9fQ0IKKyAgICB2b2lkKiBjcnlwdG9jYl9ob2xkZXJbKHNpemVvZihpbnQpICsgc2l6ZW9mKHZvaWQqKSArIDQpIC8gc2l6ZW9mKHZvaWQqKV07CisgICAgI2VuZGlmCit9IFdPTEZTU0xfU0hBX0NUWDsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU0hBX0luaXQoV09MRlNTTF9TSEFfQ1RYKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEFfVXBkYXRlKFdPTEZTU0xfU0hBX0NUWCosIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCBsb25nKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQV9GaW5hbCh1bnNpZ25lZCBjaGFyKiwgV09MRlNTTF9TSEFfQ1RYKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEFfVHJhbnNmb3JtKFdPTEZTU0xfU0hBX0NUWCosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisvKiBTSEExIHBvaW50cyB0byBhYm92ZSwgc2hvdWxkbid0IHVzZSBTSEEwIGV2ZXIgKi8KK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTFfSW5pdChXT0xGU1NMX1NIQV9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTFfVXBkYXRlKFdPTEZTU0xfU0hBX0NUWCosIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCBsb25nKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTFfRmluYWwodW5zaWduZWQgY2hhciosIFdPTEZTU0xfU0hBX0NUWCopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU0hBMV9UcmFuc2Zvcm0oV09MRlNTTF9TSEFfQ1RYKiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKK2VudW0geworICAgIFNIQV9ESUdFU1RfTEVOR1RIID0gMjAKK307CisKKwordHlwZWRlZiBXT0xGU1NMX1NIQV9DVFggU0hBX0NUWDsKKworI2RlZmluZSBTSEFfSW5pdCB3b2xmU1NMX1NIQV9Jbml0CisjZGVmaW5lIFNIQV9VcGRhdGUgd29sZlNTTF9TSEFfVXBkYXRlCisjZGVmaW5lIFNIQV9GaW5hbCB3b2xmU1NMX1NIQV9GaW5hbAorI2RlZmluZSBTSEFfVHJhbnNmb3JtIHdvbGZTU0xfU0hBX1RyYW5zZm9ybQorCisjaWYgZGVmaW5lZChOT19PTERfU0hBX05BTUVTKSAmJiAhZGVmaW5lZChIQVZFX1NFTEZURVNUKSAmJiBcCisgICAgKCFkZWZpbmVkKEhBVkVfRklQUykgfHwgXAorICAgIChkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiBIQVZFX0ZJUFNfVkVSU0lPTiA+IDIpKQorICAgIC8qIFNIQSBpcyBvbmx5IGF2YWlsYWJsZSBpbiBub24tZmlwcyBtb2RlIG9yIGZpcHMgdmVyc2lvbiA+IDIgbW9kZSAKKyAgICAgKiBiZWNhdXNlIG9mIFNIQSBlbnVtIGluIEZJUFMgYnVpbGQuICovCisgICAgI2RlZmluZSBTSEEgd29sZlNTTF9TSEExCisjZW5kaWYKKworI2RlZmluZSBTSEExX0luaXQgd29sZlNTTF9TSEExX0luaXQKKyNkZWZpbmUgU0hBMV9VcGRhdGUgd29sZlNTTF9TSEExX1VwZGF0ZQorI2RlZmluZSBTSEExX0ZpbmFsIHdvbGZTU0xfU0hBMV9GaW5hbAorI2RlZmluZSBTSEExX1RyYW5zZm9ybSB3b2xmU1NMX1NIQTFfVHJhbnNmb3JtCisKKyNpZmRlZiBXT0xGU1NMX1NIQTIyNAorCisvKiBVc2luZyBBTElHTjE2IGJlY2F1c2Ugd2hlbiBBRVMtTkkgaXMgZW5hYmxlZCBkaWdlc3QgYW5kIGJ1ZmZlciBpbiBTaGEyNTYKKyAqIHN0cnVjdCBhcmUgMTYgYnl0ZSBhbGlnbmVkLiBBbnkgZGVyZWZlcmVuY2UgdG8gdGhvc2UgZWxlbWVudHMgYWZ0ZXIgY2FzdGluZworICogdG8gU2hhMjI0LCBpcyBleHBlY3RlZCB0byBhbHNvIGJlIDE2IGJ5dGUgYWxpZ25lZCBhZGRyZXNzZXMuICAqLwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9TSEEyMjRfQ1RYIHsKKyAgICAvKiBiaWcgZW5vdWdoIHRvIGhvbGQgd29sZmNyeXB0IFNoYTIyNCwgYnV0IGNoZWNrIG9uIGluaXQgKi8KKyAgICBBTElHTjE2IHZvaWQqIGhvbGRlclsoMjcyICsgV0NfQVNZTkNfREVWX1NJWkUpIC8gc2l6ZW9mKHZvaWQqKV07Cit9IFdPTEZTU0xfU0hBMjI0X0NUWDsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU0hBMjI0X0luaXQoV09MRlNTTF9TSEEyMjRfQ1RYKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEEyMjRfVXBkYXRlKFdPTEZTU0xfU0hBMjI0X0NUWCosIGNvbnN0IHZvaWQqLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNoYXIqLCBXT0xGU1NMX1NIQTIyNF9DVFgqKTsKKworZW51bSB7CisgICAgU0hBMjI0X0RJR0VTVF9MRU5HVEggPSAyOAorfTsKKworCit0eXBlZGVmIFdPTEZTU0xfU0hBMjI0X0NUWCBTSEEyMjRfQ1RYOworCisjZGVmaW5lIFNIQTIyNF9Jbml0ICAgd29sZlNTTF9TSEEyMjRfSW5pdAorI2RlZmluZSBTSEEyMjRfVXBkYXRlIHdvbGZTU0xfU0hBMjI0X1VwZGF0ZQorI2RlZmluZSBTSEEyMjRfRmluYWwgIHdvbGZTU0xfU0hBMjI0X0ZpbmFsCisjaWYgZGVmaW5lZChOT19PTERfU0hBX05BTUVTKSAmJiAhZGVmaW5lZChIQVZFX1NFTEZURVNUKSAmJiBcCisgICAgKCFkZWZpbmVkKEhBVkVfRklQUykgfHwgXAorICAgIChkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiBIQVZFX0ZJUFNfVkVSU0lPTiA+IDIpKQorICAgIC8qIFNIQTIyNCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBub24tZmlwcyBtb2RlIG9yIGZpcHMgdmVyc2lvbiA+IDIgbW9kZSAKKyAgICAgKiBiZWNhdXNlIG9mIFNIQTIyNCBlbnVtIGluIEZJUFMgYnVpbGQuICovCisgICAgI2RlZmluZSBTSEEyMjQgd29sZlNTTF9TSEEyMjQKKyNlbmRpZgorCisjZW5kaWYgLyogV09MRlNTTF9TSEEyMjQgKi8KKworCisvKiBVc2luZyBBTElHTjE2IGJlY2F1c2Ugd2hlbiBBRVMtTkkgaXMgZW5hYmxlZCBkaWdlc3QgYW5kIGJ1ZmZlciBpbiBTaGEyNTYKKyAqIHN0cnVjdCBhcmUgMTYgYnl0ZSBhbGlnbmVkLiBBbnkgZGVyZWZlcmVuY2UgdG8gdGhvc2UgZWxlbWVudHMgYWZ0ZXIgY2FzdGluZworICogdG8gU2hhMjU2LCBpcyBleHBlY3RlZCB0byBhbHNvIGJlIDE2IGJ5dGUgYWxpZ25lZCBhZGRyZXNzZXMuICAqLwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9TSEEyNTZfQ1RYIHsKKyAgICAvKiBiaWcgZW5vdWdoIHRvIGhvbGQgd29sZmNyeXB0IFNoYTI1NiwgYnV0IGNoZWNrIG9uIGluaXQgKi8KKyAgICBBTElHTjE2IHZvaWQqIGhvbGRlclsoMjcyICsgV0NfQVNZTkNfREVWX1NJWkUpIC8gc2l6ZW9mKHZvaWQqKV07Cit9IFdPTEZTU0xfU0hBMjU2X0NUWDsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU0hBMjU2X0luaXQoV09MRlNTTF9TSEEyNTZfQ1RYKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEEyNTZfVXBkYXRlKFdPTEZTU0xfU0hBMjU2X0NUWCosIGNvbnN0IHZvaWQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEEyNTZfRmluYWwodW5zaWduZWQgY2hhciosIFdPTEZTU0xfU0hBMjU2X0NUWCopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU0hBMjU2X1RyYW5zZm9ybShXT0xGU1NMX1NIQTI1Nl9DVFgqLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworZW51bSB7CisgICAgU0hBMjU2X0RJR0VTVF9MRU5HVEggPSAzMgorfTsKKworCit0eXBlZGVmIFdPTEZTU0xfU0hBMjU2X0NUWCBTSEEyNTZfQ1RYOworCisjZGVmaW5lIFNIQTI1Nl9Jbml0ICAgd29sZlNTTF9TSEEyNTZfSW5pdAorI2RlZmluZSBTSEEyNTZfVXBkYXRlIHdvbGZTU0xfU0hBMjU2X1VwZGF0ZQorI2RlZmluZSBTSEEyNTZfRmluYWwgIHdvbGZTU0xfU0hBMjU2X0ZpbmFsCisjZGVmaW5lIFNIQTI1Nl9UcmFuc2Zvcm0gd29sZlNTTF9TSEEyNTZfVHJhbnNmb3JtCisKKyNpZiBkZWZpbmVkKE5PX09MRF9TSEFfTkFNRVMpICYmICFkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkKKyAgICAvKiBTSEEyNTYgaXMgb25seSBhdmFpbGFibGUgaW4gbm9uLWZpcHMgbW9kZSBiZWNhdXNlIG9mIFNIQTI1NiBlbnVtIGluIEZJUFMKKyAgICAgKiBidWlsZC4gKi8KKyAgICAjZGVmaW5lIFNIQTI1NiB3b2xmU1NMX1NIQTI1NgorI2VuZGlmCisKKworI2lmZGVmIFdPTEZTU0xfU0hBMzg0CisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfU0hBMzg0X0NUWCB7CisgICAgLyogYmlnIGVub3VnaCB0byBob2xkIHdvbGZDcnlwdCBTaGEzODQsIGJ1dCBjaGVjayBvbiBpbml0ICovCisgICAgdm9pZCogaG9sZGVyWygyNTYgKyBXQ19BU1lOQ19ERVZfU0laRSkgLyBzaXplb2Yodm9pZCopXTsKK30gV09MRlNTTF9TSEEzODRfQ1RYOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEEzODRfSW5pdChXT0xGU1NMX1NIQTM4NF9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTM4NF9VcGRhdGUoV09MRlNTTF9TSEEzODRfQ1RYKiwgY29uc3Qgdm9pZCosCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEEzODRfRmluYWwodW5zaWduZWQgY2hhciosIFdPTEZTU0xfU0hBMzg0X0NUWCopOworCitlbnVtIHsKKyAgICBTSEEzODRfRElHRVNUX0xFTkdUSCA9IDQ4Cit9OworCisKK3R5cGVkZWYgV09MRlNTTF9TSEEzODRfQ1RYIFNIQTM4NF9DVFg7CisKKyNkZWZpbmUgU0hBMzg0X0luaXQgICB3b2xmU1NMX1NIQTM4NF9Jbml0CisjZGVmaW5lIFNIQTM4NF9VcGRhdGUgd29sZlNTTF9TSEEzODRfVXBkYXRlCisjZGVmaW5lIFNIQTM4NF9GaW5hbCAgd29sZlNTTF9TSEEzODRfRmluYWwKKyNpZiBkZWZpbmVkKE5PX09MRF9TSEFfTkFNRVMpICYmICFkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkKKyAgICAvKiBTSEEzODQgaXMgb25seSBhdmFpbGFibGUgaW4gbm9uLWZpcHMgbW9kZSBiZWNhdXNlIG9mIFNIQTM4NCBlbnVtIGluIEZJUFMKKyAgICAgKiBidWlsZC4gKi8KKyAgICAjZGVmaW5lIFNIQTM4NCB3b2xmU1NMX1NIQTM4NAorI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9TSEEzODQgKi8KKworI2lmZGVmIFdPTEZTU0xfU0hBNTEyCisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfU0hBNTEyX0NUWCB7CisgICAgLyogYmlnIGVub3VnaCB0byBob2xkIHdvbGZDcnlwdCBTaGEzODQsIGJ1dCBjaGVjayBvbiBpbml0ICovCisgICAgdm9pZCogaG9sZGVyWygyODggKyBXQ19BU1lOQ19ERVZfU0laRSkgLyBzaXplb2Yodm9pZCopXTsKK30gV09MRlNTTF9TSEE1MTJfQ1RYOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEE1MTJfSW5pdChXT0xGU1NMX1NIQTUxMl9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTUxMl9VcGRhdGUoV09MRlNTTF9TSEE1MTJfQ1RYKiwgY29uc3Qgdm9pZCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEE1MTJfRmluYWwodW5zaWduZWQgY2hhciosIFdPTEZTU0xfU0hBNTEyX0NUWCopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU0hBNTEyX1RyYW5zZm9ybShXT0xGU1NMX1NIQTUxMl9DVFgqLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKik7CitlbnVtIHsKKyAgICBTSEE1MTJfRElHRVNUX0xFTkdUSCA9IDY0Cit9OworCisKK3R5cGVkZWYgV09MRlNTTF9TSEE1MTJfQ1RYIFNIQTUxMl9DVFg7CisKKyNkZWZpbmUgU0hBNTEyX0luaXQgICB3b2xmU1NMX1NIQTUxMl9Jbml0CisjZGVmaW5lIFNIQTUxMl9VcGRhdGUgd29sZlNTTF9TSEE1MTJfVXBkYXRlCisjZGVmaW5lIFNIQTUxMl9GaW5hbCAgd29sZlNTTF9TSEE1MTJfRmluYWwKKyNkZWZpbmUgU0hBNTEyX1RyYW5zZm9ybSB3b2xmU1NMX1NIQTUxMl9UcmFuc2Zvcm0KKyNpZiBkZWZpbmVkKE5PX09MRF9TSEFfTkFNRVMpICYmICFkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkKKyAgICAvKiBTSEE1MTIgaXMgb25seSBhdmFpbGFibGUgaW4gbm9uLWZpcHMgbW9kZSBiZWNhdXNlIG9mIFNIQTUxMiBlbnVtIGluIEZJUFMKKyAgICAgKiBidWlsZC4gKi8KKyAgICAjZGVmaW5lIFNIQTUxMiB3b2xmU1NMX1NIQTUxMgorI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9TSEE1MTIgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIFdPTEZTU0xfU0hBX0hfICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvc2hhMy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9zaGEzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViZWQxMwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvc2hhMy5oCkBAIC0wLDAgKzEsMTUwIEBACisvKiBzaGEzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiBzaGEzLmggZm9yIG9wZW5zc2wgKi8KKworCisjaWZuZGVmIFdPTEZTU0xfU0hBM19IXworI2RlZmluZSBXT0xGU1NMX1NIQTNfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NldHRpbmdzLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIFdPTEZTU0xfUFJFRklYCisjaW5jbHVkZSAicHJlZml4X3NoYS5oIgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogVXNpbmcgQUxJR04xNiBiZWNhdXNlIHdoZW4gQUVTLU5JIGlzIGVuYWJsZWQgZGlnZXN0IGFuZCBidWZmZXIgaW4gU2hhMworICogc3RydWN0IGFyZSAxNiBieXRlIGFsaWduZWQuIEFueSBkZXJlZmVyZW5jZSB0byB0aG9zZSBlbGVtZW50cyBhZnRlciBjYXN0aW5nCisgKiB0byBTaGEzIGlzIGV4cGVjdGVkIHRvIGFsc28gYmUgMTYgYnl0ZSBhbGlnbmVkIGFkZHJlc3Nlcy4gICovCitzdHJ1Y3QgV09MRlNTTF9TSEEzX0NUWCB7CisgICAgLyogYmlnIGVub3VnaCB0byBob2xkIHdvbGZjcnlwdCBTaGEzLCBidXQgY2hlY2sgb24gaW5pdCAqLworICAgIEFMSUdOMTYgdm9pZCogaG9sZGVyWyg0MjQgKyBXQ19BU1lOQ19ERVZfU0laRSkgLyBzaXplb2Yodm9pZCopXTsKK307CisKKyNpZm5kZWYgV09MRlNTTF9OT1NIQTNfMjI0Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1NIQTNfQ1RYIFdPTEZTU0xfU0hBM18yMjRfQ1RYOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEEzXzIyNF9Jbml0KFdPTEZTU0xfU0hBM18yMjRfQ1RYKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEEzXzIyNF9VcGRhdGUoV09MRlNTTF9TSEEzXzIyNF9DVFgqLCBjb25zdCB2b2lkKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTNfMjI0X0ZpbmFsKHVuc2lnbmVkIGNoYXIqLCBXT0xGU1NMX1NIQTNfMjI0X0NUWCopOworCitlbnVtIHsKKyAgICBTSEEzXzIyNF9ESUdFU1RfTEVOR1RIID0gMjgKK307CisKK3R5cGVkZWYgV09MRlNTTF9TSEEzXzIyNF9DVFggU0hBM18yMjRfQ1RYOworCisjZGVmaW5lIFNIQTNfMjI0X0luaXQgICB3b2xmU1NMX1NIQTNfMjI0X0luaXQKKyNkZWZpbmUgU0hBM18yMjRfVXBkYXRlIHdvbGZTU0xfU0hBM18yMjRfVXBkYXRlCisjZGVmaW5lIFNIQTNfMjI0X0ZpbmFsICB3b2xmU1NMX1NIQTNfMjI0X0ZpbmFsCisjaWYgZGVmaW5lZChOT19PTERfV0NfTkFNRVMpICYmICFkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkKKyAgICAjZGVmaW5lIFNIQTNfMjI0IHdvbGZTU0xfU0hBM18yMjQKKyNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfTk9TSEEzXzIyNCAqLworCisKKyNpZm5kZWYgV09MRlNTTF9OT1NIQTNfMjU2Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1NIQTNfQ1RYIFdPTEZTU0xfU0hBM18yNTZfQ1RYOworCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTNfMjU2X0luaXQoV09MRlNTTF9TSEEzXzI1Nl9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTNfMjU2X1VwZGF0ZShXT0xGU1NMX1NIQTNfMjU2X0NUWCosIGNvbnN0IHZvaWQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU0hBM18yNTZfRmluYWwodW5zaWduZWQgY2hhciosIFdPTEZTU0xfU0hBM18yNTZfQ1RYKik7CisKK2VudW0geworICAgIFNIQTNfMjU2X0RJR0VTVF9MRU5HVEggPSAzMgorfTsKKworCit0eXBlZGVmIFdPTEZTU0xfU0hBM18yNTZfQ1RYIFNIQTNfMjU2X0NUWDsKKworI2RlZmluZSBTSEEzXzI1Nl9Jbml0ICAgd29sZlNTTF9TSEEzXzI1Nl9Jbml0CisjZGVmaW5lIFNIQTNfMjU2X1VwZGF0ZSB3b2xmU1NMX1NIQTNfMjU2X1VwZGF0ZQorI2RlZmluZSBTSEEzXzI1Nl9GaW5hbCAgd29sZlNTTF9TSEEzXzI1Nl9GaW5hbAorI2lmIGRlZmluZWQoTk9fT0xEX1dDX05BTUVTKSAmJiAhZGVmaW5lZChIQVZFX0ZJUFMpICYmICFkZWZpbmVkKEhBVkVfU0VMRlRFU1QpCisgICAgI2RlZmluZSBTSEEzXzI1NiB3b2xmU1NMX1NIQTNfMjU2CisjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX05PU0hBM18yNTYgKi8KKworCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1NIQTNfQ1RYIFdPTEZTU0xfU0hBM18zODRfQ1RYOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEEzXzM4NF9Jbml0KFdPTEZTU0xfU0hBM18zODRfQ1RYKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TSEEzXzM4NF9VcGRhdGUoV09MRlNTTF9TSEEzXzM4NF9DVFgqLCBjb25zdCB2b2lkKiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTNfMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIqLCBXT0xGU1NMX1NIQTNfMzg0X0NUWCopOworCitlbnVtIHsKKyAgICBTSEEzXzM4NF9ESUdFU1RfTEVOR1RIID0gNDgKK307CisKK3R5cGVkZWYgV09MRlNTTF9TSEEzXzM4NF9DVFggU0hBM18zODRfQ1RYOworCisjZGVmaW5lIFNIQTNfMzg0X0luaXQgICB3b2xmU1NMX1NIQTNfMzg0X0luaXQKKyNkZWZpbmUgU0hBM18zODRfVXBkYXRlIHdvbGZTU0xfU0hBM18zODRfVXBkYXRlCisjZGVmaW5lIFNIQTNfMzg0X0ZpbmFsICB3b2xmU1NMX1NIQTNfMzg0X0ZpbmFsCisjaWYgZGVmaW5lZChOT19PTERfV0NfTkFNRVMpICYmICFkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkKKyAgICAjZGVmaW5lIFNIQTNfMzg0IHdvbGZTU0xfU0hBM18zODQKKyNlbmRpZgorCisKKyNpZm5kZWYgV09MRlNTTF9OT1NIQTNfNTEyCisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfU0hBM19DVFggV09MRlNTTF9TSEEzXzUxMl9DVFg7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTNfNTEyX0luaXQoV09MRlNTTF9TSEEzXzUxMl9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NIQTNfNTEyX1VwZGF0ZShXT0xGU1NMX1NIQTNfNTEyX0NUWCosIGNvbnN0IHZvaWQqLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU0hBM181MTJfRmluYWwodW5zaWduZWQgY2hhciosIFdPTEZTU0xfU0hBM181MTJfQ1RYKik7CisKK2VudW0geworICAgIFNIQTNfNTEyX0RJR0VTVF9MRU5HVEggPSA2NAorfTsKKworCit0eXBlZGVmIFdPTEZTU0xfU0hBM181MTJfQ1RYIFNIQTNfNTEyX0NUWDsKKworI2RlZmluZSBTSEEzXzUxMl9Jbml0ICAgd29sZlNTTF9TSEEzXzUxMl9Jbml0CisjZGVmaW5lIFNIQTNfNTEyX1VwZGF0ZSB3b2xmU1NMX1NIQTNfNTEyX1VwZGF0ZQorI2RlZmluZSBTSEEzXzUxMl9GaW5hbCAgd29sZlNTTF9TSEEzXzUxMl9GaW5hbAorI2lmIGRlZmluZWQoTk9fT0xEX1dDX05BTUVTKSAmJiAhZGVmaW5lZChIQVZFX0ZJUFMpICYmICFkZWZpbmVkKEhBVkVfU0VMRlRFU1QpCisgICAgI2RlZmluZSBTSEEzXzUxMiB3b2xmU1NMX1NIQTNfNTEyCisjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX05PU0hBM181MTIgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIFdPTEZTU0xfU0hBM19IXyAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3NycC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9zcnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmFhZWMyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9zcnAuaApAQCAtMCwwICsxLDI5IEBACisvKiBzcnAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKyNpZm5kZWYgV09MRlNTTF9TUlBfSF8KKyNkZWZpbmUgV09MRlNTTF9TUlBfSF8KKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NycC5oPgorCisjZGVmaW5lIFNSUF9NSU5JTUFMX04gU1JQX01PRFVMVVNfTUlOX0JJVFMKKworI2VuZGlmIC8qIFdPTEZTU0xfU1JQX0hfICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3NzbC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9zc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWJmNmNhCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9zc2wuaApAQCAtMCwwICsxLDE0MzAgQEAKKy8qIHNzbC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKy8qICBzc2wuaCBkZWZpbmVzIHdvbGZzc2xfb3BlbnNzbCBjb21wYXRpYmlsaXR5IGxheWVyCisgKgorICovCisKKworI2lmbmRlZiBXT0xGU1NMX09QRU5TU0xfSF8KKyNkZWZpbmUgV09MRlNTTF9PUEVOU1NMX0hfCisKKy8qIHdvbGZzc2xfb3BlbnNzbCBjb21wYXRpYmlsaXR5IGxheWVyICovCisjaWZuZGVmIE9QRU5TU0xfRVhUUkFfU1NMX0dVQVJECisjZGVmaW5lIE9QRU5TU0xfRVhUUkFfU1NMX0dVQVJECisjaW5jbHVkZSA8d29sZnNzbC9zc2wuaD4KKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBX1NTTF9HVUFSRCAqLworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3RsczEuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2Jpby5oPgorI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvY3J5cHRvLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF9RVCkgfHwgZGVmaW5lZChPUEVOU1NMX0FMTCkKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvZGguaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvb2JqZWN0cy5oPgorI2VuZGlmCisKKy8qIG5lZWQgTUlOX0NPREVfRSB0byBkZXRlcm1pbmUgd29sZlNTTCBlcnJvciByYW5nZSAqLworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2Vycm9yLWNyeXB0Lmg+CisKKy8qIGFsbCBOSURfKiB2YWx1ZXMgYXJlIGluIGFzbi5oICovCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXNuLmg+CisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wveDUwOS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisgICAgLyogd2luY3J5cHQuaCBjbGFzaGVzICovCisgICAgI3VuZGVmIFg1MDlfTkFNRQorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1VUQVNLRVIKKyAgICAvKiB0Y3BpcC5oIGNsYXNoZXMgKi8KKyAgICAjdW5kZWYgQVNOMV9JTlRFR0VSCisjZW5kaWYKKworI2lmZGVmIE9QRU5TU0xfRVhUUkEKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX09QRU5TU0xfaW5pdF9zc2wod29yZDY0IG9wdHMsIGNvbnN0IE9QRU5TU0xfSU5JVF9TRVRUSU5HUyAqc2V0dGluZ3MpOworI2VuZGlmCisKK3R5cGVkZWYgV09MRlNTTCAgICAgICAgICBTU0w7Cit0eXBlZGVmIFdPTEZTU0xfU0VTU0lPTiAgU1NMX1NFU1NJT047Cit0eXBlZGVmIFdPTEZTU0xfTUVUSE9EICAgU1NMX01FVEhPRDsKK3R5cGVkZWYgV09MRlNTTF9DVFggICAgICBTU0xfQ1RYOworCit0eXBlZGVmIFdPTEZTU0xfWDUwOSAgICAgICBYNTA5OwordHlwZWRlZiBXT0xGU1NMX1g1MDkgICAgICAgWDUwOV9SRVE7Cit0eXBlZGVmIFdPTEZTU0xfWDUwOV9OQU1FICBYNTA5X05BTUU7Cit0eXBlZGVmIFdPTEZTU0xfWDUwOV9JTkZPICBYNTA5X0lORk87Cit0eXBlZGVmIFdPTEZTU0xfWDUwOV9DSEFJTiBYNTA5X0NIQUlOOworCisvKiBTVEFDS19PRihBU04xX09CSkVDVCkgKi8KK3R5cGVkZWYgV09MRlNTTF9TVEFDSyAgICAgIEVYVEVOREVEX0tFWV9VU0FHRTsKKworCisvKiByZWRlY2xhcmUgZ3VhcmQgKi8KKyNkZWZpbmUgV09MRlNTTF9UWVBFU19ERUZJTkVECisKK3R5cGVkZWYgV09MRlNTTF9CSU8gICAgICAgICAgICBCSU87Cit0eXBlZGVmIFdPTEZTU0xfQklPX01FVEhPRCAgICAgQklPX01FVEhPRDsKK3R5cGVkZWYgV09MRlNTTF9DSVBIRVIgICAgICAgICBTU0xfQ0lQSEVSOwordHlwZWRlZiBXT0xGU1NMX1g1MDlfTE9PS1VQICAgIFg1MDlfTE9PS1VQOwordHlwZWRlZiBXT0xGU1NMX1g1MDlfTE9PS1VQX01FVEhPRCBYNTA5X0xPT0tVUF9NRVRIT0Q7Cit0eXBlZGVmIFdPTEZTU0xfWDUwOV9DUkwgICAgICAgWDUwOV9DUkw7Cit0eXBlZGVmIFdPTEZTU0xfWDUwOV9FWFRFTlNJT04gWDUwOV9FWFRFTlNJT047Cit0eXBlZGVmIFdPTEZTU0xfWDUwOV9QVUJLRVkgICAgWDUwOV9QVUJLRVk7Cit0eXBlZGVmIFdPTEZTU0xfWDUwOV9BTEdPUiAgICAgWDUwOV9BTEdPUjsKK3R5cGVkZWYgV09MRlNTTF9BU04xX1RJTUUgICAgICBBU04xX1RJTUU7Cit0eXBlZGVmIFdPTEZTU0xfQVNOMV9JTlRFR0VSICAgQVNOMV9JTlRFR0VSOwordHlwZWRlZiBXT0xGU1NMX0FTTjFfT0JKRUNUICAgIEFTTjFfT0JKRUNUOwordHlwZWRlZiBXT0xGU1NMX0FTTjFfU1RSSU5HICAgIEFTTjFfU1RSSU5HOwordHlwZWRlZiBXT0xGU1NMX0FTTjFfVFlQRSAgICAgIEFTTjFfVFlQRTsKK3R5cGVkZWYgV09MRlNTTF9YNTA5X0FUVFJJQlVURSBYNTA5X0FUVFJJQlVURTsKK3R5cGVkZWYgV09MRlNTTF9BU04xX0JJVF9TVFJJTkcgQVNOMV9CSVRfU1RSSU5HOwordHlwZWRlZiBXT0xGU1NMX2R5bmxvY2tfdmFsdWUgIENSWVBUT19keW5sb2NrX3ZhbHVlOwordHlwZWRlZiBXT0xGU1NMX0JVRl9NRU0gICAgICAgIEJVRl9NRU07Cit0eXBlZGVmIFdPTEZTU0xfR0VORVJBTF9OQU1FUyAgR0VORVJBTF9OQU1FUzsKK3R5cGVkZWYgV09MRlNTTF9HRU5FUkFMX05BTUUgR0VORVJBTF9OQU1FOworCisjZGVmaW5lIFg1MDlfTF9GSUxFX0xPQUQgIFdPTEZTU0xfWDUwOV9MX0ZJTEVfTE9BRAorI2RlZmluZSBYNTA5X0xfQUREX0RJUiAgICBXT0xGU1NMX1g1MDlfTF9BRERfRElSCisjZGVmaW5lIFg1MDlfTF9BRERfU1RPUkUgIFdPTEZTU0xfWDUwOV9MX0FERF9TVE9SRQorI2RlZmluZSBYNTA5X0xfTE9BRF9TVE9SRSBXT0xGU1NMX1g1MDlfTF9MT0FEX1NUT1JFCisKKyNkZWZpbmUgQVNOMV9VVENUSU1FICAgICAgICAgV09MRlNTTF9BU04xX1RJTUUKKyNkZWZpbmUgQVNOMV9HRU5FUkFMSVpFRFRJTUUgV09MRlNTTF9BU04xX1RJTUUKKwordHlwZWRlZiBXT0xGU1NMX0NPTVBfTUVUSE9EICAgIENPTVBfTUVUSE9EOwordHlwZWRlZiBXT0xGU1NMX0NPTVAgICAgICAgICAgIFNTTF9DT01QOwordHlwZWRlZiBXT0xGU1NMX1g1MDlfUkVWT0tFRCAgIFg1MDlfUkVWT0tFRDsKK3R5cGVkZWYgV09MRlNTTF9YNTA5X09CSkVDVCAgICBYNTA5X09CSkVDVDsKK3R5cGVkZWYgV09MRlNTTF9YNTA5X1NUT1JFICAgICBYNTA5X1NUT1JFOwordHlwZWRlZiBXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYIFg1MDlfU1RPUkVfQ1RYOwordHlwZWRlZiBXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNIFg1MDlfVkVSSUZZX1BBUkFNOworCisjZGVmaW5lIEVWUF9DSVBIRVJfSU5GTyAgICAgICAgRW5jcnlwdGVkSW5mbworCisjZGVmaW5lIFNUQUNLX09GKHgpIFdPTEZTU0xfU1RBQ0sKKyNkZWZpbmUgT1BFTlNTTF9TVEFDSyBXT0xGU1NMX1NUQUNLCisjZGVmaW5lIF9TVEFDSyBPUEVOU1NMX1NUQUNLCisKKyNkZWZpbmUgQ09ORl9nZXQxX2RlZmF1bHRfY29uZmlnX2ZpbGUgICB3b2xmU1NMX0NPTkZfZ2V0MV9kZWZhdWx0X2NvbmZpZ19maWxlCit0eXBlZGVmIFNUQUNLX09GKEFDQ0VTU19ERVNDUklQVElPTikgQVVUSE9SSVRZX0lORk9fQUNDRVNTOworCisjZGVmaW5lIENSWVBUT19mcmVlICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DUllQVE9fZnJlZQorI2RlZmluZSBDUllQVE9fbWFsbG9jICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1JZUFRPX21hbGxvYworI2RlZmluZSBDUllQVE9fRVhfbmV3ICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQ1JZUFRPX0VYX25ldworI2RlZmluZSBDUllQVE9fRVhfZHVwICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQ1JZUFRPX0VYX2R1cAorI2RlZmluZSBDUllQVE9fRVhfZnJlZSAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQ1JZUFRPX0VYX2ZyZWUKKyNkZWZpbmUgQ1JZUFRPX0VYX0RBVEEgICAgICAgICAgICAgICAgICBXT0xGU1NMX0NSWVBUT19FWF9EQVRBCisKKy8qIGRlcHJlY2lhdGVkICovCisjZGVmaW5lIENSWVBUT190aHJlYWRfaWQgICAgICAgICAgICAgICAgd29sZlNTTF90aHJlYWRfaWQKKyNkZWZpbmUgQ1JZUFRPX3NldF9pZF9jYWxsYmFjayAgICAgICAgICB3b2xmU1NMX3NldF9pZF9jYWxsYmFjaworCisjZGVmaW5lIENSWVBUT19MT0NLICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQ1JZUFRPX1VOTE9DSyAgICAgICAgICAgMHgwMgorI2RlZmluZSBDUllQVE9fUkVBRCAgICAgICAgICAgICAweDA0CisjZGVmaW5lIENSWVBUT19XUklURSAgICAgICAgICAgIDB4MDgKKworI2RlZmluZSBDUllQVE9fc2V0X2xvY2tpbmdfY2FsbGJhY2sgICAgIHdvbGZTU0xfc2V0X2xvY2tpbmdfY2FsbGJhY2sKKyNkZWZpbmUgQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjayAgd29sZlNTTF9zZXRfZHlubG9ja19jcmVhdGVfY2FsbGJhY2sKKyNkZWZpbmUgQ1JZUFRPX3NldF9keW5sb2NrX2xvY2tfY2FsbGJhY2sgd29sZlNTTF9zZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrCisjZGVmaW5lIENSWVBUT19zZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrIHdvbGZTU0xfc2V0X2R5bmxvY2tfZGVzdHJveV9jYWxsYmFjaworI2RlZmluZSBDUllQVE9fbnVtX2xvY2tzICAgICAgICAgICAgICAgIHdvbGZTU0xfbnVtX2xvY2tzCisjZGVmaW5lIENSWVBUT19keW5sb2NrX3ZhbHVlICAgICAgICAgICAgV09MRlNTTF9keW5sb2NrX3ZhbHVlCisKKyNkZWZpbmUgQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEgICAgICB3b2xmU1NMX2NsZWFudXBfYWxsX2V4X2RhdGEKKyNkZWZpbmUgc2V0X2V4X2RhdGEgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NSWVBUT19zZXRfZXhfZGF0YQorI2RlZmluZSBnZXRfZXhfZGF0YSAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1JZUFRPX2dldF9leF9kYXRhCisjZGVmaW5lIENSWVBUT19tZW1jbXAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DUllQVE9fbWVtY21wCisjZGVmaW5lIENSWVBUT19nZXRfZXhfbmV3X2luZGV4ICAgICAgICAgd29sZlNTTF9DUllQVE9fZ2V0X2V4X25ld19pbmRleAorCisjZGVmaW5lIENSWVBUT19nZXRfZXhfbmV3X2luZGV4ICAgICAgICAgd29sZlNTTF9DUllQVE9fZ2V0X2V4X25ld19pbmRleAorCisvKiB0aGlzIGZ1bmN0aW9uIHdhcyB1c2VkIHRvIHNldCB0aGUgZGVmYXVsdCBtYWxsb2MsIGZyZWUsIGFuZCByZWFsbG9jICovCisjZGVmaW5lIENSWVBUT19tYWxsb2NfaW5pdCgpIDAgLyogQ1JZUFRPX21hbGxvY19pbml0IGlzIG5vdCBuZWVkZWQgKi8KKyNkZWZpbmUgT1BFTlNTTF9tYWxsb2NfaW5pdCgpIDAgLyogT1BFTlNTTF9tYWxsb2NfaW5pdCBpcyBub3QgbmVlZGVkICovCisKKyNkZWZpbmUgU1NMX2dldF9jbGllbnRfcmFuZG9tKHNzbCxvdXQsb3V0U3opIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2dldF9jbGllbnRfcmFuZG9tKChzc2wpLChvdXQpLChvdXRTeikpCisjZGVmaW5lIFNTTF9nZXRfY2lwaGVyX2xpc3QoY3R4LGkpICAgICAgICAgd29sZlNTTF9nZXRfY2lwaGVyX2xpc3RfZXgoKGN0eCksKGkpKQorI2RlZmluZSBTU0xfZ2V0X2NpcGhlcl9uYW1lKGN0eCkgICAgICAgICAgIHdvbGZTU0xfZ2V0X2NpcGhlcigoY3R4KSkKKyNkZWZpbmUgU1NMX2dldF9zaGFyZWRfY2lwaGVycyhjdHgsYnVmLGxlbikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2dldF9zaGFyZWRfY2lwaGVycygoY3R4KSwoYnVmKSwobGVuKSkKKworLyogYXQgdGhlIG1vbWVudCBvbmx5IHJldHVybnMgb2sgKi8KKyNkZWZpbmUgU1NMX2dldF92ZXJpZnlfcmVzdWx0ICAgICAgICAgICB3b2xmU1NMX2dldF92ZXJpZnlfcmVzdWx0CisjZGVmaW5lIFNTTF9nZXRfdmVyaWZ5X21vZGUgICAgICAgICAgICAgd29sZlNTTF9nZXRfdmVyaWZ5X21vZGUKKyNkZWZpbmUgU1NMX2dldF92ZXJpZnlfZGVwdGggICAgICAgICAgICB3b2xmU1NMX2dldF92ZXJpZnlfZGVwdGgKKyNkZWZpbmUgU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGUgICAgICAgICB3b2xmU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGUKKyNkZWZpbmUgU1NMX0NUWF9nZXRfdmVyaWZ5X2RlcHRoICAgICAgICB3b2xmU1NMX0NUWF9nZXRfdmVyaWZ5X2RlcHRoCisjZGVmaW5lIFNTTF9nZXRfY2VydGlmaWNhdGUgICAgICAgICAgICAgd29sZlNTTF9nZXRfY2VydGlmaWNhdGUKKyNkZWZpbmUgU1NMX0NUWF9nZXQwX2NlcnRpZmljYXRlICAgICAgICB3b2xmU1NMX0NUWF9nZXQwX2NlcnRpZmljYXRlCisjZGVmaW5lIFNTTF91c2VfY2VydGlmaWNhdGUgICAgICAgICAgICAgd29sZlNTTF91c2VfY2VydGlmaWNhdGUKKyNkZWZpbmUgU1NMX3VzZV9jZXJ0aWZpY2F0ZV9BU04xICAgICAgICB3b2xmU1NMX3VzZV9jZXJ0aWZpY2F0ZV9BU04xCisjZGVmaW5lIGQyaV9QS0NTOF9QUklWX0tFWV9JTkZPX2JpbyAgICAgd29sZlNTTF9kMmlfUEtDUzhfUEtFWV9iaW8KKyNkZWZpbmUgZDJpX1BLQ1M4UHJpdmF0ZUtleV9iaW8gICAgICAgICB3b2xmU1NMX2QyaV9QS0NTOFByaXZhdGVLZXlfYmlvCisjZGVmaW5lIGkyZF9QS0NTOFByaXZhdGVLZXlfYmlvICAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfYmlvX1BLQ1M4UHJpdmF0ZUtleQorI2RlZmluZSBQS0NTOF9QUklWX0tFWV9JTkZPX2ZyZWUgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfZnJlZQorI2RlZmluZSBkMmlfUEtDUzEyX2ZwICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZDJpX1BLQ1MxMl9mcAorI2RlZmluZSBTU0xfQ1RYX3NldF9lY2RoX2F1dG8gICAgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9lY2RoX2F1dG8KKworI2RlZmluZSBpMmRfUFVCS0VZICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfaTJkX1BVQktFWQorI2RlZmluZSBkMmlfUFVCS0VZICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZDJpX1BVQktFWQorI2RlZmluZSBkMmlfUFVCS0VZX2JpbyAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZDJpX1BVQktFWV9iaW8KKyNkZWZpbmUgZDJpX1ByaXZhdGVLZXkgICAgICAgICAgICAgICAgICB3b2xmU1NMX2QyaV9Qcml2YXRlS2V5CisjZGVmaW5lIGQyaV9BdXRvUHJpdmF0ZUtleSAgICAgICAgICAgICAgd29sZlNTTF9kMmlfQXV0b1ByaXZhdGVLZXkKKyNkZWZpbmUgU1NMX3VzZV9Qcml2YXRlS2V5ICAgICAgICAgICAgICB3b2xmU1NMX3VzZV9Qcml2YXRlS2V5CisjZGVmaW5lIFNTTF91c2VfUHJpdmF0ZUtleV9BU04xICAgICAgICAgd29sZlNTTF91c2VfUHJpdmF0ZUtleV9BU04xCisjZGVmaW5lIFNTTF91c2VfUlNBUHJpdmF0ZUtleV9BU04xICAgICAgd29sZlNTTF91c2VfUlNBUHJpdmF0ZUtleV9BU04xCisjZGVmaW5lIFNTTF9nZXRfcHJpdmF0ZWtleSAgICAgICAgICAgICAgd29sZlNTTF9nZXRfcHJpdmF0ZWtleQorI2RlZmluZSBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X0FTTjEgICAgIHdvbGZTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X0FTTjEKKworI2RlZmluZSBTU0x2MjNfbWV0aG9kICAgICAgICAgICAgICAgICAgIHdvbGZTU0x2MjNfbWV0aG9kCisjZGVmaW5lIFNTTHYyM19jbGllbnRfbWV0aG9kICAgICAgICAgICAgd29sZlNTTHYyM19jbGllbnRfbWV0aG9kCisjZGVmaW5lIFNTTHYyX2NsaWVudF9tZXRob2QgICAgICAgICAgICAgd29sZlNTTHYyX2NsaWVudF9tZXRob2QKKyNkZWZpbmUgU1NMdjJfc2VydmVyX21ldGhvZCAgICAgICAgICAgICB3b2xmU1NMdjJfc2VydmVyX21ldGhvZAorI2RlZmluZSBTU0x2M19zZXJ2ZXJfbWV0aG9kICAgICAgICAgICAgIHdvbGZTU0x2M19zZXJ2ZXJfbWV0aG9kCisjZGVmaW5lIFNTTHYzX2NsaWVudF9tZXRob2QgICAgICAgICAgICAgd29sZlNTTHYzX2NsaWVudF9tZXRob2QKKyNkZWZpbmUgVExTX2NsaWVudF9tZXRob2QgICAgICAgICAgICAgICB3b2xmVExTX2NsaWVudF9tZXRob2QKKyNkZWZpbmUgVExTX3NlcnZlcl9tZXRob2QgICAgICAgICAgICAgICB3b2xmVExTX3NlcnZlcl9tZXRob2QKKyNkZWZpbmUgVExTdjFfbWV0aG9kICAgICAgICAgICAgICAgICAgICB3b2xmVExTdjFfbWV0aG9kCisjZGVmaW5lIFRMU3YxX3NlcnZlcl9tZXRob2QgICAgICAgICAgICAgd29sZlRMU3YxX3NlcnZlcl9tZXRob2QKKyNkZWZpbmUgVExTdjFfY2xpZW50X21ldGhvZCAgICAgICAgICAgICB3b2xmVExTdjFfY2xpZW50X21ldGhvZAorI2RlZmluZSBUTFN2MV8xX21ldGhvZCAgICAgICAgICAgICAgICAgIHdvbGZUTFN2MV8xX21ldGhvZAorI2RlZmluZSBUTFN2MV8xX3NlcnZlcl9tZXRob2QgICAgICAgICAgIHdvbGZUTFN2MV8xX3NlcnZlcl9tZXRob2QKKyNkZWZpbmUgVExTdjFfMV9jbGllbnRfbWV0aG9kICAgICAgICAgICB3b2xmVExTdjFfMV9jbGllbnRfbWV0aG9kCisjZGVmaW5lIFRMU3YxXzJfbWV0aG9kICAgICAgICAgICAgICAgICAgd29sZlRMU3YxXzJfbWV0aG9kCisjZGVmaW5lIFRMU3YxXzJfc2VydmVyX21ldGhvZCAgICAgICAgICAgd29sZlRMU3YxXzJfc2VydmVyX21ldGhvZAorI2RlZmluZSBUTFN2MV8yX2NsaWVudF9tZXRob2QgICAgICAgICAgIHdvbGZUTFN2MV8yX2NsaWVudF9tZXRob2QKKyNkZWZpbmUgVExTdjFfM19tZXRob2QgICAgICAgICAgICAgICAgICB3b2xmVExTdjFfM19tZXRob2QKKyNkZWZpbmUgVExTdjFfM19zZXJ2ZXJfbWV0aG9kICAgICAgICAgICB3b2xmVExTdjFfM19zZXJ2ZXJfbWV0aG9kCisjZGVmaW5lIFRMU3YxXzNfY2xpZW50X21ldGhvZCAgICAgICAgICAgd29sZlRMU3YxXzNfY2xpZW50X21ldGhvZAorI2RlZmluZSBUTFNfbWV0aG9kICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0x2MjNfbWV0aG9kCisKKyNkZWZpbmUgWDUwOV9GSUxFVFlQRV9BU04xIFNTTF9GSUxFVFlQRV9BU04xCisKKyNkZWZpbmUgWDUwOV9GX1g1MDlfQ0hFQ0tfUFJJVkFURV9LRVkgICAxMjgKKworI2lmZGVmIFdPTEZTU0xfRFRMUworICAgICNkZWZpbmUgRFRMU3YxX2NsaWVudF9tZXRob2QgICAgICAgIHdvbGZEVExTdjFfY2xpZW50X21ldGhvZAorICAgICNkZWZpbmUgRFRMU3YxX3NlcnZlcl9tZXRob2QgICAgICAgIHdvbGZEVExTdjFfc2VydmVyX21ldGhvZAorICAgICNkZWZpbmUgRFRMU3YxXzJfY2xpZW50X21ldGhvZCAgICAgIHdvbGZEVExTdjFfMl9jbGllbnRfbWV0aG9kCisgICAgI2RlZmluZSBEVExTdjFfMl9zZXJ2ZXJfbWV0aG9kICAgICAgd29sZkRUTFN2MV8yX3NlcnZlcl9tZXRob2QKKyAgICAjZGVmaW5lIERUTFNfbWV0aG9kICAgICAgICAgICAgICAgICB3b2xmRFRMU19tZXRob2QKKyNlbmRpZgorCisKKyNpZm5kZWYgTk9fRklMRVNZU1RFTQorICAgICNkZWZpbmUgU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZSAgICAgIHdvbGZTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlCisgICAgI2RlZmluZSBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUgICAgICAgd29sZlNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZQorI2lmZGVmIFdPTEZTU0xfQVBBQ0hFX0hUVFBECisgICAgI2RlZmluZSBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjdHgsZmlsZSxwYXRoKSBcCisgICAgICAgIHdvbGZTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9uc19leChjdHgsZmlsZSxwYXRoLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfTE9BRF9GTEFHX0lHTk9SRV9FUlIpCisjZWxzZQorICAgICNkZWZpbmUgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMgICAgIHdvbGZTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucworI2VuZGlmCisgICAgI2RlZmluZSBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlIHdvbGZTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlCisgICAgI2RlZmluZSBTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGUgICAgd29sZlNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfZmlsZQorCisgICAgI2RlZmluZSBTU0xfdXNlX2NlcnRpZmljYXRlX2ZpbGUgICAgICAgICAgd29sZlNTTF91c2VfY2VydGlmaWNhdGVfZmlsZQorICAgICNkZWZpbmUgU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGUgICAgICAgICAgIHdvbGZTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZQorICAgICNkZWZpbmUgU1NMX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlICAgIHdvbGZTU0xfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUKKyAgICAjZGVmaW5lIFNTTF91c2VfUlNBUHJpdmF0ZUtleV9maWxlICAgICAgICB3b2xmU1NMX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGUKKyNlbmRpZgorCisjZGVmaW5lIFNTTF9DVFhfbmV3KG1ldGhvZCkgICAgICAgICAgICAgd29sZlNTTF9DVFhfbmV3KChXT0xGU1NMX01FVEhPRCopKG1ldGhvZCkpCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorI2RlZmluZSBTU0xfQ1RYX3VwX3JlZiAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX3VwX3JlZgorI2VuZGlmCisjZGVmaW5lIFNTTF9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9uZXcKKyNkZWZpbmUgU1NMX3NldF9mZCAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3NldF9mZAorI2RlZmluZSBTU0xfZ2V0X2ZkICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X2ZkCisjZGVmaW5lIFNTTF9jb25uZWN0ICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9jb25uZWN0CisjZGVmaW5lIFNTTF9jbGVhciAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9jbGVhcgorI2RlZmluZSBTU0xfc3RhdGUgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfc3RhdGUKKworI2RlZmluZSBTU0xfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfd3JpdGUKKyNkZWZpbmUgU1NMX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3JlYWQKKyNkZWZpbmUgU1NMX3BlZWsgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3BlZWsKKyNkZWZpbmUgU1NMX2FjY2VwdCAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2FjY2VwdAorI2RlZmluZSBTU0xfQ1RYX2ZyZWUgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUKKyNkZWZpbmUgU1NMX2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2ZyZWUKKyNkZWZpbmUgU1NMX3NodXRkb3duICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3NodXRkb3duCisjZGVmaW5lIFNTTF9zZXRfdGltZW91dCAgICAgICAgICAgICAgICAgd29sZlNTTF9zZXRfdGltZW91dAorCisjZGVmaW5lIFNTTF9DVFhfc2V0X3F1aWV0X3NodXRkb3duICAgICAgd29sZlNTTF9DVFhfc2V0X3F1aWV0X3NodXRkb3duCisjZGVmaW5lIFNTTF9zZXRfcXVpZXRfc2h1dGRvd24gICAgICAgICAgd29sZlNTTF9zZXRfcXVpZXRfc2h1dGRvd24KKyNkZWZpbmUgU1NMX2dldF9lcnJvciAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2dldF9lcnJvcgorI2RlZmluZSBTU0xfc2V0X3Nlc3Npb24gICAgICAgICAgICAgICAgIHdvbGZTU0xfc2V0X3Nlc3Npb24KKyNkZWZpbmUgU1NMX2dldF9zZXNzaW9uKHgpICAgICAgICAgICAgICB3b2xmU1NMX2dldF9zZXNzaW9uKChXT0xGU1NMKikgKHgpKQorI2RlZmluZSBTU0xfU0VTU0lPTl9nZXQwX3BlZXIgICAgICAgICAgIHdvbGZTU0xfU0VTU0lPTl9nZXQwX3BlZXIKKyNkZWZpbmUgU1NMX2ZsdXNoX3Nlc3Npb25zICAgICAgICAgICAgICB3b2xmU1NMX2ZsdXNoX3Nlc3Npb25zCisvKiBhc3N1bWUgdW5saW1pdGVkIHRlbXBvcmFyaWx5ICovCisjZGVmaW5lIFNTTF9DVFhfZ2V0X3Nlc3Npb25fY2FjaGVfbW9kZShjdHgpIDAKKworI2RlZmluZSBTU0xfQ1RYX3NldF92ZXJpZnkgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX3NldF92ZXJpZnkKKyNkZWZpbmUgU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2FsbGJhY2sgd29sZlNTTF9DVFhfc2V0X2NlcnRfdmVyaWZ5X2NhbGxiYWNrCisjZGVmaW5lIFNTTF9zZXRfdmVyaWZ5ICAgICAgICAgICAgICAgICAgd29sZlNTTF9zZXRfdmVyaWZ5CisjZGVmaW5lIFNTTF9zZXRfdmVyaWZ5X3Jlc3VsdCAgICAgICAgICAgd29sZlNTTF9zZXRfdmVyaWZ5X3Jlc3VsdAorI2RlZmluZSBTU0xfdmVyaWZ5X2NsaWVudF9wb3N0X2hhbmRzaGFrZSB3b2xmU1NMX3ZlcmlmeV9jbGllbnRfcG9zdF9oYW5kc2hha2UKKyNkZWZpbmUgU1NMX3NldF9wb3N0X2hhbmRzaGFrZV9hdXRoICAgICB3b2xmU1NMX3NldF9wb3N0X2hhbmRzaGFrZV9hdXRoCisjZGVmaW5lIFNTTF9DVFhfc2V0X3Bvc3RfaGFuZHNoYWtlX2F1dGggd29sZlNTTF9DVFhfc2V0X3Bvc3RfaGFuZHNoYWtlX2F1dGgKKyNkZWZpbmUgU1NMX3BlbmRpbmcgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3BlbmRpbmcKKyNkZWZpbmUgU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncyAgICAgICAgICB3b2xmU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncworI2RlZmluZSBTU0xfbGlicmFyeV9pbml0ICAgICAgICAgICAgICAgIHdvbGZTU0xfbGlicmFyeV9pbml0CisjZGVmaW5lIE9QRU5TU0xfaW5pdF9zc2wgICAgICAgICAgICAgICAgd29sZlNTTF9PUEVOU1NMX2luaXRfc3NsCisjZGVmaW5lIE9wZW5TU0xfYWRkX3NzbF9hbGdvcml0aG1zICAgICAgd29sZlNTTF9saWJyYXJ5X2luaXQKKyNkZWZpbmUgU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlICB3b2xmU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlCisjZGVmaW5lIFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0ICAgICAgICAgd29sZlNTTF9DVFhfc2V0X2NpcGhlcl9saXN0CisjZGVmaW5lIFNTTF9DVFhfc2V0X2NpcGhlcnN1aXRlcyAgICAgICAgd29sZlNTTF9DVFhfc2V0X2NpcGhlcl9saXN0CisjZGVmaW5lIFNTTF9zZXRfY2lwaGVyX2xpc3QgICAgICAgICAgICAgd29sZlNTTF9zZXRfY2lwaGVyX2xpc3QKKy8qIHdvbGZTU0wgZG9lcyBub3Qgc3VwcG9ydCBzZWN1cml0eSBsZXZlbHMgKi8KKyNkZWZpbmUgU1NMX0NUWF9zZXRfc2VjdXJpdHlfbGV2ZWwgICAgICB3b2xmU1NMX0NUWF9zZXRfc2VjdXJpdHlfbGV2ZWwKKyNkZWZpbmUgU1NMX0NUWF9nZXRfc2VjdXJpdHlfbGV2ZWwgICAgICB3b2xmU1NMX0NUWF9nZXRfc2VjdXJpdHlfbGV2ZWwKKy8qIHdvbGZTU0wgZG9lcyBub3Qgc3VwcG9ydCBleHBvcnRpbmcga2V5aW5nIG1hdGVyaWFsICovCisjZGVmaW5lIFNTTF9leHBvcnRfa2V5aW5nX21hdGVyaWFsICAgICAgd29sZlNTTF9leHBvcnRfa2V5aW5nX21hdGVyaWFsCisKKyNkZWZpbmUgU1NMX0NUWF9zZXQxX3NpZ2FsZ3NfbGlzdCAgICAgICB3b2xmU1NMX0NUWF9zZXQxX3NpZ2FsZ3NfbGlzdAorI2RlZmluZSBTU0xfc2V0MV9zaWdhbGdzX2xpc3QgICAgICAgICAgIHdvbGZTU0xfc2V0MV9zaWdhbGdzX2xpc3QKKyNkZWZpbmUgU1NMX2dldF9zaWduYXR1cmVfbmlkICAgICAgICAgICB3b2xmU1NMX2dldF9zaWduYXR1cmVfbmlkCisKKyNkZWZpbmUgU1NMX0NUWF9zZXQxX2dyb3VwcyAgICAgICAgICAgICB3b2xmU1NMX0NUWF9zZXQxX2dyb3VwcworI2RlZmluZSBTU0xfc2V0MV9ncm91cHMgICAgICAgICAgICAgICAgIHdvbGZTU0xfc2V0MV9ncm91cHMKKworI2RlZmluZSBTU0xfQ1RYX3NldDFfZ3JvdXBzX2xpc3QgICAgICAgIHdvbGZTU0xfQ1RYX3NldDFfZ3JvdXBzX2xpc3QKKyNkZWZpbmUgU1NMX3NldDFfZ3JvdXBzX2xpc3QgICAgICAgICAgICB3b2xmU1NMX3NldDFfZ3JvdXBzX2xpc3QKKworI2RlZmluZSBTU0xfc2V0X2V4X2RhdGEgICAgICAgICAgICAgICAgIHdvbGZTU0xfc2V0X2V4X2RhdGEKKyNkZWZpbmUgU1NMX2dldF9zaHV0ZG93biAgICAgICAgICAgICAgICB3b2xmU1NMX2dldF9zaHV0ZG93bgorI2RlZmluZSBTU0xfZ2V0X2ZpbmlzaGVkICAgICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X2ZpbmlzaGVkCisjZGVmaW5lIFNTTF9nZXRfcGVlcl9maW5pc2hlZCAgICAgICAgICAgd29sZlNTTF9nZXRfcGVlcl9maW5pc2hlZAorI2RlZmluZSBTU0xfc2V0X3JmZCAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfc2V0X3JmZAorI2RlZmluZSBTU0xfc2V0X3dmZCAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfc2V0X3dmZAorI2RlZmluZSBTU0xfc2V0X3NodXRkb3duICAgICAgICAgICAgICAgIHdvbGZTU0xfc2V0X3NodXRkb3duCisjZGVmaW5lIFNTTF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0ICAgICAgd29sZlNTTF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0CisjZGVmaW5lIFNTTF9zZXRfY29ubmVjdF9zdGF0ZSAgICAgICAgICAgd29sZlNTTF9zZXRfY29ubmVjdF9zdGF0ZQorI2RlZmluZSBTU0xfc2V0X2FjY2VwdF9zdGF0ZSAgICAgICAgICAgIHdvbGZTU0xfc2V0X2FjY2VwdF9zdGF0ZQorI2RlZmluZSBTU0xfc2Vzc2lvbl9yZXVzZWQgICAgICAgICAgICAgIHdvbGZTU0xfc2Vzc2lvbl9yZXVzZWQKKyNkZWZpbmUgU1NMX1NFU1NJT05fdXBfcmVmICAgICAgICAgICAgICB3b2xmU1NMX1NFU1NJT05fdXBfcmVmCisjZGVmaW5lIFNTTF9TRVNTSU9OX2R1cCAgICAgICAgICAgICAgICAgd29sZlNTTF9TRVNTSU9OX2R1cAorI2RlZmluZSBTU0xfU0VTU0lPTl9mcmVlICAgICAgICAgICAgICAgIHdvbGZTU0xfU0VTU0lPTl9mcmVlCisjZGVmaW5lIFNTTF9TRVNTSU9OX3NldF9jaXBoZXIgICAgICAgICAgd29sZlNTTF9TRVNTSU9OX3NldF9jaXBoZXIKKyNkZWZpbmUgU1NMX2lzX2luaXRfZmluaXNoZWQgICAgICAgICAgICB3b2xmU1NMX2lzX2luaXRfZmluaXNoZWQKKworI2RlZmluZSBTU0xfZ2V0X3ZlcnNpb24gICAgICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X3ZlcnNpb24KKyNkZWZpbmUgU1NMX2dldF9jdXJyZW50X2NpcGhlciAgICAgICAgICB3b2xmU1NMX2dldF9jdXJyZW50X2NpcGhlcgorCisvKiB1c2Ugd29sZlNTTF9nZXRfY2lwaGVyX25hbWUgZm9yIGl0cyByZXR1cm4gZm9ybWF0ICovCisjZGVmaW5lIFNTTF9nZXRfY2lwaGVyICAgICAgICAgICAgICAgICAgd29sZlNTTF9nZXRfY2lwaGVyX25hbWUKKyNkZWZpbmUgU1NMX0NJUEhFUl9kZXNjcmlwdGlvbiAgICAgICAgICB3b2xmU1NMX0NJUEhFUl9kZXNjcmlwdGlvbgorI2RlZmluZSBTU0xfQ0lQSEVSX2dldF9uYW1lICAgICAgICAgICAgIHdvbGZTU0xfQ0lQSEVSX2dldF9uYW1lCisjZGVmaW5lIFNTTF9DSVBIRVJfZ2V0X3ZlcnNpb24gICAgICAgICAgd29sZlNTTF9DSVBIRVJfZ2V0X3ZlcnNpb24KKyNkZWZpbmUgU1NMX0NJUEhFUl9nZXRfaWQgICAgICAgICAgICAgICB3b2xmU1NMX0NJUEhFUl9nZXRfaWQKKyNkZWZpbmUgU1NMX0NJUEhFUl9nZXRfcmZjX25hbWUgICAgICAgICB3b2xmU1NMX0NJUEhFUl9nZXRfbmFtZQorI2RlZmluZSBTU0xfQ0lQSEVSX3N0YW5kYXJkX25hbWUgICAgICAgIHdvbGZTU0xfQ0lQSEVSX2dldF9uYW1lCisjZGVmaW5lIFNTTF9nZXRfY2lwaGVyX2J5X3ZhbHVlICAgICAgICAgd29sZlNTTF9nZXRfY2lwaGVyX2J5X3ZhbHVlCisKKyNkZWZpbmUgU1NMX2dldDFfc2Vzc2lvbiAgICAgICAgICAgICAgICB3b2xmU1NMX2dldDFfc2Vzc2lvbgorCisjZGVmaW5lIFNTTF9nZXRfa2V5YmxvY2tfc2l6ZSAgICAgICAgICAgd29sZlNTTF9nZXRfa2V5YmxvY2tfc2l6ZQorI2RlZmluZSBTU0xfZ2V0X2tleXMgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X2tleXMKKyNkZWZpbmUgU1NMX1NFU1NJT05fZ2V0X21hc3Rlcl9rZXkgICAgICB3b2xmU1NMX1NFU1NJT05fZ2V0X21hc3Rlcl9rZXkKKyNkZWZpbmUgU1NMX1NFU1NJT05fZ2V0X21hc3Rlcl9rZXlfbGVuZ3RoIHdvbGZTU0xfU0VTU0lPTl9nZXRfbWFzdGVyX2tleV9sZW5ndGgKKworI2lmIGRlZmluZWQoV09MRlNTTF9RVCkgfHwgZGVmaW5lZChPUEVOU1NMX0FMTCkKKyAgICAjZGVmaW5lIFNTTF9NT0RFX1JFTEVBU0VfQlVGRkVSUyAgICAweDAwMDAwMDEwVQorICAgICNkZWZpbmUgQVNOMV9CT09MRUFOICAgICAgICAgICAgICAgIFdPTEZTU0xfQVNOMV9CT09MRUFOCisgICAgI2RlZmluZSBYNTA5X2dldF9leHQgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9leHQKKyAgICAjZGVmaW5lIFg1MDlfZ2V0X2V4dF9ieV9PQkogICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X2V4dF9ieV9PQkoKKyAgICAjZGVmaW5lIFg1MDlfY21wICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfY21wCisgICAgI2RlZmluZSBYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0ICAgd29sZlNTTF9YNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0CisgICAgI2RlZmluZSBYNTA5X0VYVEVOU0lPTl9nZXRfY3JpdGljYWwgd29sZlNTTF9YNTA5X0VYVEVOU0lPTl9nZXRfY3JpdGljYWwKKyAgICAjZGVmaW5lIFg1MDlfRVhURU5TSU9OX2dldF9kYXRhICAgICB3b2xmU1NMX1g1MDlfRVhURU5TSU9OX2dldF9kYXRhCisgICAgI2RlZmluZSBYNTA5X0VYVEVOU0lPTl9uZXcgICAgICAgICAgd29sZlNTTF9YNTA5X0VYVEVOU0lPTl9uZXcKKyAgICAjZGVmaW5lIFg1MDlfRVhURU5TSU9OX2ZyZWUgICAgICAgICB3b2xmU1NMX1g1MDlfRVhURU5TSU9OX2ZyZWUKKyAgICAjZGVmaW5lIFg1MDlfZ210aW1lX2FkaiAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ210aW1lX2FkagorI2VuZGlmCisKKyNkZWZpbmUgRFNBX2R1cF9ESCAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0RTQV9kdXBfREgKKy8qIHdvbGZTU0wgZG9lcyBub3Qgc3VwcG9ydCBEU0EgYXMgdGhlIGNlcnQgcHVibGljIGtleSAqLworI2RlZmluZSBFVlBfUEtFWV9nZXQwX0RTQSAgICAgICAgICAgICAgIHdvbGZTU0xfRVZQX1BLRVlfZ2V0MF9EU0EKKyNkZWZpbmUgRVZQX1BLRVlfcGFyYW1fY2hlY2sgICAgICAgICAgICB3b2xmU1NMX0VWUF9QS0VZX3BhcmFtX2NoZWNrCisjZGVmaW5lIEVWUF9QS0VZX0NUWF9mcmVlICAgICAgICAgICAgICAgd29sZlNTTF9FVlBfUEtFWV9DVFhfZnJlZQorI2RlZmluZSBEU0FfYml0cyAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRFNBX2JpdHMKKworI2RlZmluZSBpMmRfWDUwOV9iaW8gICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfaTJkX1g1MDlfYmlvCisjZGVmaW5lIGkyZF9YNTA5X1JFUV9iaW8gICAgICAgICAgICAgICAgd29sZlNTTF9pMmRfWDUwOV9SRVFfYmlvCisjZGVmaW5lIGQyaV9YNTA5X2JpbyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9kMmlfWDUwOV9iaW8KKyNkZWZpbmUgZDJpX1g1MDlfUkVRX2JpbyAgICAgICAgICAgICAgICB3b2xmU1NMX2QyaV9YNTA5X1JFUV9iaW8KKyNkZWZpbmUgZDJpX1g1MDlfZnAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2QyaV9YNTA5X2ZwCisjZGVmaW5lIGkyZF9YNTA5ICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9pMmRfWDUwOQorI2RlZmluZSBkMmlfWDUwOSAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZDJpX1g1MDkKKyNkZWZpbmUgUEVNX3JlYWRfYmlvX1g1MDkgICAgICAgICAgICAgICB3b2xmU1NMX1BFTV9yZWFkX2Jpb19YNTA5CisjZGVmaW5lIFBFTV9yZWFkX2Jpb19YNTA5X1JFUSAgICAgICAgICAgd29sZlNTTF9QRU1fcmVhZF9iaW9fWDUwOV9SRVEKKyNkZWZpbmUgUEVNX3JlYWRfYmlvX1g1MDlfQ1JMICAgICAgICAgICB3b2xmU1NMX1BFTV9yZWFkX2Jpb19YNTA5X0NSTAorI2RlZmluZSBQRU1fcmVhZF9iaW9fWDUwOV9BVVggICAgICAgICAgIHdvbGZTU0xfUEVNX3JlYWRfYmlvX1g1MDlfQVVYCisjZGVmaW5lIFBFTV9yZWFkX1g1MDkgICAgICAgICAgICAgICAgICAgd29sZlNTTF9QRU1fcmVhZF9YNTA5CisjZGVmaW5lIFBFTV9YNTA5X0lORk9fcmVhZF9iaW8gICAgICAgICAgd29sZlNTTF9QRU1fWDUwOV9JTkZPX3JlYWRfYmlvCisjZGVmaW5lIFBFTV93cml0ZV9iaW9fWDUwOSAgICAgICAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfYmlvX1g1MDkKKyNkZWZpbmUgUEVNX3dyaXRlX2Jpb19YNTA5X0FVWCAgICAgICAgICB3b2xmU1NMX1BFTV93cml0ZV9iaW9fWDUwOV9BVVgKKyNkZWZpbmUgUEVNX1g1MDlfSU5GT19yZWFkX2JpbyAgICAgICAgICB3b2xmU1NMX1BFTV9YNTA5X0lORk9fcmVhZF9iaW8KKyNkZWZpbmUgaTJkX1ByaXZhdGVLZXkgICAgICAgICAgICAgICAgICB3b2xmU1NMX2kyZF9Qcml2YXRlS2V5CisKKyNkZWZpbmUgaTJkX1g1MDlfUkVRICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2kyZF9YNTA5X1JFUQorI2RlZmluZSBkMmlfWDUwOV9SRVEgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZDJpX1g1MDlfUkVRCisjZGVmaW5lIFg1MDlfUkVRX25ldyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X1JFUV9uZXcKKyNkZWZpbmUgWDUwOV9SRVFfZnJlZSAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfUkVRX2ZyZWUKKyNkZWZpbmUgWDUwOV9SRVFfc2lnbiAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfUkVRX3NpZ24KKyNkZWZpbmUgWDUwOV9SRVFfc2lnbl9jdHggICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfUkVRX3NpZ25fY3R4CisjZGVmaW5lIFg1MDlfUkVRX2FkZF9leHRlbnNpb25zICAgICAgICAgd29sZlNTTF9YNTA5X1JFUV9hZGRfZXh0ZW5zaW9ucworI2RlZmluZSBYNTA5X1JFUV9hZGQxX2F0dHJfYnlfTklEICAgICAgIHdvbGZTU0xfWDUwOV9SRVFfYWRkMV9hdHRyX2J5X05JRAorI2RlZmluZSBYNTA5X1JFUV9hZGQxX2F0dHJfYnlfdHh0ICAgICAgIHdvbGZTU0xfWDUwOV9SRVFfYWRkMV9hdHRyX2J5X3R4dAorI2RlZmluZSBYNTA5X1JFUV9nZXRfYXR0cl9ieV9OSUQgICAgICAgIHdvbGZTU0xfWDUwOV9SRVFfZ2V0X2F0dHJfYnlfTklECisjZGVmaW5lIFg1MDlfUkVRX2dldF9hdHRyICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X1JFUV9nZXRfYXR0cgorI2RlZmluZSBYNTA5X0FUVFJJQlVURV9nZXQwX3R5cGUgICAgICAgIHdvbGZTU0xfWDUwOV9BVFRSSUJVVEVfZ2V0MF90eXBlCisjZGVmaW5lIFg1MDlfdG9fWDUwOV9SRVEgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X3RvX1g1MDlfUkVRCisjZGVmaW5lIFg1MDlfUkVRX3NldF9zdWJqZWN0X25hbWUgICAgICAgd29sZlNTTF9YNTA5X1JFUV9zZXRfc3ViamVjdF9uYW1lCisjZGVmaW5lIFg1MDlfUkVRX3NldF9wdWJrZXkgICAgICAgICAgICAgd29sZlNTTF9YNTA5X1JFUV9zZXRfcHVia2V5CisjZGVmaW5lIFBFTV93cml0ZV9iaW9fWDUwOV9SRVEgICAgICAgICAgd29sZlNTTF9QRU1fd3JpdGVfYmlvX1g1MDlfUkVRCisKKyNkZWZpbmUgWDUwOV9uZXcgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfbmV3CisjZGVmaW5lIFg1MDlfdXBfcmVmICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X3VwX3JlZgorI2RlZmluZSBYNTA5X2ZyZWUgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9mcmVlCisjZGVmaW5lIFg1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9maWxlICAgICAgd29sZlNTTF9YNTA5X2xvYWRfY2VydGlmaWNhdGVfZmlsZQorI2RlZmluZSBYNTA5X2RpZ2VzdCAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9kaWdlc3QKKyNkZWZpbmUgWDUwOV9wdWJrZXlfZGlnZXN0ICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfcHVia2V5X2RpZ2VzdAorI2RlZmluZSBYNTA5X2dldF9leHRfY291bnQgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfZXh0X2NvdW50CisjZGVmaW5lIFg1MDlfZ2V0X2V4dF9kMmkgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9leHRfZDJpCisjZGVmaW5lIFg1MDlWM19FWFRfaTJkICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5VjNfRVhUX2kyZAorI2RlZmluZSBYNTA5X2dldDBfZXh0ZW5zaW9ucyAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXQwX2V4dGVuc2lvbnMKKyNkZWZpbmUgWDUwOV9nZXRfZXh0ZW5zaW9ucyAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0MF9leHRlbnNpb25zCisjZGVmaW5lIFg1MDlfUkVRX2dldF9leHRlbnNpb25zICAgICAgICAgd29sZlNTTF9YNTA5X1JFUV9nZXRfZXh0ZW5zaW9ucworI2RlZmluZSBYNTA5X2dldF9leHQgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfZXh0CisjZGVmaW5lIFg1MDlfZ2V0X2V4dF9ieV9OSUQgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9leHRfYnlfTklECisjZGVmaW5lIFg1MDlfZ2V0X2lzc3Vlcl9uYW1lICAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9pc3N1ZXJfbmFtZQorI2RlZmluZSBYNTA5X2lzc3Vlcl9uYW1lX2hhc2ggICAgICAgICAgIHdvbGZTU0xfWDUwOV9pc3N1ZXJfbmFtZV9oYXNoCisjZGVmaW5lIFg1MDlfc3ViamVjdF9uYW1lX2hhc2ggICAgICAgICAgd29sZlNTTF9YNTA5X3N1YmplY3RfbmFtZV9oYXNoCisjZGVmaW5lIFg1MDlfZ2V0X3N1YmplY3RfbmFtZSAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9zdWJqZWN0X25hbWUKKyNkZWZpbmUgWDUwOV9SRVFfZ2V0X3N1YmplY3RfbmFtZSAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X3N1YmplY3RfbmFtZQorI2RlZmluZSBYNTA5X2dldF9wdWJrZXkgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfcHVia2V5CisjZGVmaW5lIFg1MDlfZ2V0MF9wdWJrZXkgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9wdWJrZXkKKyNkZWZpbmUgWDUwOV9SRVFfZ2V0X3B1YmtleSAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X3B1YmtleQorI2RlZmluZSBYNTA5X2dldF9ub3RCZWZvcmUgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfbm90QmVmb3JlCisjZGVmaW5lIFg1MDlfZ2V0MF9ub3RCZWZvcmUgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9ub3RCZWZvcmUKKyNkZWZpbmUgWDUwOV9nZXRtX25vdEJlZm9yZSAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X25vdEJlZm9yZQorI2RlZmluZSBYNTA5X2dldF9ub3RBZnRlciAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfbm90QWZ0ZXIKKyNkZWZpbmUgWDUwOV9nZXQwX25vdEFmdGVyICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X25vdEFmdGVyCisjZGVmaW5lIFg1MDlfZ2V0bV9ub3RBZnRlciAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9ub3RBZnRlcgorI2RlZmluZSBYNTA5X2dldF9zZXJpYWxOdW1iZXIgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfc2VyaWFsTnVtYmVyCisjZGVmaW5lIFg1MDlfZ2V0MF9wdWJrZXlfYml0c3RyICAgICAgICAgd29sZlNTTF9YNTA5X2dldDBfcHVia2V5X2JpdHN0cgorI2RlZmluZSBYNTA5X2dldF9leF9uZXdfaW5kZXggICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfZXhfbmV3X2luZGV4CisjZGVmaW5lIFg1MDlfZ2V0X2V4X2RhdGEgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9leF9kYXRhCisjZGVmaW5lIFg1MDlfc2V0X2V4X2RhdGEgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X3NldF9leF9kYXRhCisjZGVmaW5lIFg1MDlfZ2V0MV9vY3NwICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldDFfb2NzcAorI2lmbmRlZiBXT0xGU1NMX0hBUFJPWFkKKyNkZWZpbmUgWDUwOV9nZXRfdmVyc2lvbiAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X3ZlcnNpb24KKyNlbmRpZgorI2RlZmluZSBYNTA5X2dldF9zaWduYXR1cmVfbmlkICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfc2lnbmF0dXJlX25pZAorI2RlZmluZSBYNTA5X3NldF9zdWJqZWN0X25hbWUgICAgICAgICAgIHdvbGZTU0xfWDUwOV9zZXRfc3ViamVjdF9uYW1lCisjZGVmaW5lIFg1MDlfc2V0X2lzc3Vlcl9uYW1lICAgICAgICAgICAgd29sZlNTTF9YNTA5X3NldF9pc3N1ZXJfbmFtZQorI2RlZmluZSBYNTA5X3NldF9wdWJrZXkgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9zZXRfcHVia2V5CisjZGVmaW5lIFg1MDlfc2V0X25vdEFmdGVyICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X3NldF9ub3RBZnRlcgorI2RlZmluZSBYNTA5X3NldF9ub3RCZWZvcmUgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9zZXRfbm90QmVmb3JlCisjZGVmaW5lIFg1MDlfc2V0X3NlcmlhbE51bWJlciAgICAgICAgICAgd29sZlNTTF9YNTA5X3NldF9zZXJpYWxOdW1iZXIKKyNkZWZpbmUgWDUwOV9zZXRfdmVyc2lvbiAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfc2V0X3ZlcnNpb24KKyNkZWZpbmUgWDUwOV9SRVFfc2V0X3ZlcnNpb24gICAgICAgICAgICB3b2xmU1NMX1g1MDlfc2V0X3ZlcnNpb24KKyNkZWZpbmUgWDUwOV9zaWduICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfc2lnbgorI2RlZmluZSBYNTA5X3NpZ25fY3R4ICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9zaWduX2N0eAorI2RlZmluZSBYNTA5X3ByaW50ICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9wcmludAorI2RlZmluZSBYNTA5X1JFUV9wcmludCAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9wcmludAorI2RlZmluZSBYNTA5X3ByaW50X2V4ICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9wcmludF9leAorI2RlZmluZSBYNTA5X3ByaW50X2ZwICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9wcmludF9mcAorI2RlZmluZSBYNTA5X1JFUV9wcmludF9mcCAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9wcmludF9mcAorI2RlZmluZSBYNTA5X3NpZ25hdHVyZV9wcmludCAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9zaWduYXR1cmVfcHJpbnQKKyNkZWZpbmUgWDUwOV9nZXQwX3NpZ25hdHVyZSAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0MF9zaWduYXR1cmUKKyNkZWZpbmUgWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcgICB3b2xmU1NMX1g1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nCisjZGVmaW5lIFg1MDlfdmVyaWZ5X2NlcnQgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X3ZlcmlmeV9jZXJ0CisjZGVmaW5lIFg1MDlfdmVyaWZ5ICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X3ZlcmlmeQorI2RlZmluZSBYNTA5X1JFUV92ZXJpZnkgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9SRVFfdmVyaWZ5CisjZGVmaW5lIFg1MDlfY2hlY2tfcHJpdmF0ZV9rZXkgICAgICAgICAgd29sZlNTTF9YNTA5X2NoZWNrX3ByaXZhdGVfa2V5CisjZGVmaW5lIFg1MDlfUkVRX2NoZWNrX3ByaXZhdGVfa2V5ICAgICAgd29sZlNTTF9YNTA5X2NoZWNrX3ByaXZhdGVfa2V5CisjZGVmaW5lIFg1MDlfY2hlY2tfY2EgICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2NoZWNrX2NhCisjZGVmaW5lIFg1MDlfY2hlY2tfaG9zdCAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2NoZWNrX2hvc3QKKyNkZWZpbmUgWDUwOV9jaGVja19lbWFpbCAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfY2hlY2tfZW1haWwKKyNkZWZpbmUgWDUwOV9jaGVja19pcF9hc2MgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfY2hlY2tfaXBfYXNjCisjZGVmaW5lIFg1MDlfZW1haWxfZnJlZSAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2VtYWlsX2ZyZWUKKyNkZWZpbmUgWDUwOV9jaGVja19pc3N1ZWQgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfY2hlY2tfaXNzdWVkCisjZGVmaW5lIFg1MDlfZHVwICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2R1cAorI2RlZmluZSBYNTA5X2FkZF9leHQgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9hZGRfZXh0CisjZGVmaW5lIFg1MDlfZGVsZXRlX2V4dCAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2RlbGV0ZV9leHQKKworI2RlZmluZSBYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0ICAgICAgIHdvbGZTU0xfWDUwOV9FWFRFTlNJT05fZ2V0X29iamVjdAorI2RlZmluZSBYNTA5X0VYVEVOU0lPTl9nZXRfZGF0YSAgICAgICAgIHdvbGZTU0xfWDUwOV9FWFRFTlNJT05fZ2V0X2RhdGEKKworI2RlZmluZSBza19YNTA5X25ldyAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9uZXcKKyNkZWZpbmUgc2tfWDUwOV9uZXdfbnVsbCAgICAgICAgICAgICAgICB3b2xmU1NMX3NrX1g1MDlfbmV3CisjZGVmaW5lIHNrX1g1MDlfbnVtICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9za19YNTA5X251bQorI2RlZmluZSBza19YNTA5X3ZhbHVlICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV92YWx1ZQorI2RlZmluZSBza19YNTA5X3NoaWZ0ICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9zaGlmdAorI2RlZmluZSBza19YNTA5X3B1c2ggICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9wdXNoCisjZGVmaW5lIHNrX1g1MDlfcG9wICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9za19YNTA5X3BvcAorI2RlZmluZSBza19YNTA5X3BvcF9mcmVlICAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9wb3BfZnJlZQorI2RlZmluZSBza19YNTA5X2R1cCAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfZHVwCisjZGVmaW5lIHNrX1g1MDlfZnJlZSAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9za19YNTA5X2ZyZWUKKworI2RlZmluZSBza19YNTA5X0VYVEVOU0lPTl9udW0gICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9FWFRFTlNJT05fbnVtCisjZGVmaW5lIHNrX1g1MDlfRVhURU5TSU9OX3ZhbHVlICAgICAgICAgd29sZlNTTF9za19YNTA5X0VYVEVOU0lPTl92YWx1ZQorI2RlZmluZSBza19YNTA5X0VYVEVOU0lPTl9uZXdfbnVsbCAgICAgIHdvbGZTU0xfc2tfWDUwOV9FWFRFTlNJT05fbmV3X251bGwKKyNkZWZpbmUgc2tfWDUwOV9FWFRFTlNJT05fcG9wX2ZyZWUgICAgICB3b2xmU1NMX3NrX1g1MDlfRVhURU5TSU9OX3BvcF9mcmVlCisjZGVmaW5lIHNrX1g1MDlfRVhURU5TSU9OX3B1c2ggICAgICAgICAgd29sZlNTTF9za19YNTA5X0VYVEVOU0lPTl9wdXNoCisKKyNkZWZpbmUgWDUwOV9JTkZPX25ldyAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfSU5GT19uZXcKKyNkZWZpbmUgWDUwOV9JTkZPX2ZyZWUgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfSU5GT19mcmVlCisKKyNkZWZpbmUgc2tfWDUwOV9JTkZPX25ld19udWxsICAgICAgICAgICB3b2xmU1NMX3NrX1g1MDlfSU5GT19uZXdfbnVsbAorI2RlZmluZSBza19YNTA5X0lORk9fbnVtICAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9JTkZPX251bQorI2RlZmluZSBza19YNTA5X0lORk9fdmFsdWUgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9JTkZPX3ZhbHVlCisjZGVmaW5lIHNrX1g1MDlfSU5GT19wdXNoICAgICAgICAgICAgICAgd29sZlNTTF9za19YNTA5X0lORk9fcHVzaAorI2RlZmluZSBza19YNTA5X0lORk9fcG9wICAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9JTkZPX3BvcAorI2RlZmluZSBza19YNTA5X0lORk9fcG9wX2ZyZWUgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9JTkZPX3BvcF9mcmVlCisjZGVmaW5lIHNrX1g1MDlfSU5GT19mcmVlICAgICAgICAgICAgICAgd29sZlNTTF9za19YNTA5X0lORk9fZnJlZQorI2RlZmluZSBza19YNTA5X0lORk9fc2hpZnQgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9JTkZPX3BvcAorCisjZGVmaW5lIGkyZF9YNTA5X05BTUUgICAgICAgICAgICAgICAgICAgd29sZlNTTF9pMmRfWDUwOV9OQU1FCisjZGVmaW5lIGQyaV9YNTA5X05BTUUgICAgICAgICAgICAgICAgICAgd29sZlNTTF9kMmlfWDUwOV9OQU1FCisjZGVmaW5lIFg1MDlfTkFNRV9uZXcgICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X05BTUVfbmV3CisjZGVmaW5lIFg1MDlfTkFNRV9mcmVlICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X05BTUVfZnJlZQorI2RlZmluZSBYNTA5X05BTUVfZHVwICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9OQU1FX2R1cAorI2RlZmluZSBYNTA5X05BTUVfZ2V0X3RleHRfYnlfTklEICAgICAgIHdvbGZTU0xfWDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRAorI2RlZmluZSBYNTA5X05BTUVfZ2V0X2luZGV4X2J5X09CSiAgICAgIHdvbGZTU0xfWDUwOV9OQU1FX2dldF9pbmRleF9ieV9PQkoKKyNkZWZpbmUgWDUwOV9OQU1FX2NtcCAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfTkFNRV9jbXAKKyNkZWZpbmUgWDUwOV9OQU1FX0VOVFJZX25ldyAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfTkFNRV9FTlRSWV9uZXcKKyNkZWZpbmUgWDUwOV9OQU1FX0VOVFJZX2ZyZWUgICAgICAgICAgICB3b2xmU1NMX1g1MDlfTkFNRV9FTlRSWV9mcmVlCisjZGVmaW5lIFg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfTklEICAgd29sZlNTTF9YNTA5X05BTUVfRU5UUllfY3JlYXRlX2J5X05JRAorI2RlZmluZSBYNTA5X05BTUVfRU5UUllfY3JlYXRlX2J5X3R4dCAgIHdvbGZTU0xfWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV90eHQKKyNkZWZpbmUgWDUwOV9OQU1FX2FkZF9lbnRyeSAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfTkFNRV9hZGRfZW50cnkKKyNkZWZpbmUgWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV90eHQgICAgICB3b2xmU1NMX1g1MDlfTkFNRV9hZGRfZW50cnlfYnlfdHh0CisjZGVmaW5lIFg1MDlfTkFNRV9hZGRfZW50cnlfYnlfTklEICAgICAgd29sZlNTTF9YNTA5X05BTUVfYWRkX2VudHJ5X2J5X05JRAorI2RlZmluZSBYNTA5X05BTUVfZGVsZXRlX2VudHJ5ICAgICAgICAgIHdvbGZTU0xfWDUwOV9OQU1FX2RlbGV0ZV9lbnRyeQorI2RlZmluZSBYNTA5X05BTUVfb25lbGluZSAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9OQU1FX29uZWxpbmUKKyNkZWZpbmUgWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQgICAgICB3b2xmU1NMX1g1MDlfTkFNRV9nZXRfaW5kZXhfYnlfTklECisjZGVmaW5lIFg1MDlfTkFNRV9wcmludF9leCAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X05BTUVfcHJpbnRfZXgKKyNkZWZpbmUgWDUwOV9OQU1FX3ByaW50X2V4X2ZwICAgICAgICAgICB3b2xmU1NMX1g1MDlfTkFNRV9wcmludF9leF9mcAorI2RlZmluZSBYNTA5X05BTUVfZGlnZXN0ICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9OQU1FX2RpZ2VzdAorI2RlZmluZSBYNTA5X2NtcF9jdXJyZW50X3RpbWUgICAgICAgICAgIHdvbGZTU0xfWDUwOV9jbXBfY3VycmVudF90aW1lCisjZGVmaW5lIFg1MDlfY21wX3RpbWUgICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2NtcF90aW1lCisjZGVmaW5lIFg1MDlfdGltZV9hZGogICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X3RpbWVfYWRqCisjZGVmaW5lIFg1MDlfdGltZV9hZGpfZXggICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X3RpbWVfYWRqX2V4CisKKyNkZWZpbmUgc2tfQUNDRVNTX0RFU0NSSVBUSU9OX251bSAgICAgICB3b2xmU1NMX3NrX0FDQ0VTU19ERVNDUklQVElPTl9udW0KKyNkZWZpbmUgc2tfQUNDRVNTX0RFU0NSSVBUSU9OX3ZhbHVlICAgICB3b2xmU1NMX3NrX0FDQ0VTU19ERVNDUklQVElPTl92YWx1ZQorCisjZGVmaW5lIHNrX1g1MDlfTkFNRV9uZXcgICAgICAgICAgICAgICAgd29sZlNTTF9za19YNTA5X05BTUVfbmV3CisjZGVmaW5lIHNrX1g1MDlfTkFNRV9wdXNoICAgICAgICAgICAgICAgd29sZlNTTF9za19YNTA5X05BTUVfcHVzaAorI2RlZmluZSBza19YNTA5X05BTUVfZmluZCAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9OQU1FX2ZpbmQKKyNkZWZpbmUgc2tfWDUwOV9OQU1FX3NldF9jbXBfZnVuYyAgICAgICB3b2xmU1NMX3NrX1g1MDlfTkFNRV9zZXRfY21wX2Z1bmMKKyNkZWZpbmUgc2tfWDUwOV9OQU1FX251bSAgICAgICAgICAgICAgICB3b2xmU1NMX3NrX1g1MDlfTkFNRV9udW0KKyNkZWZpbmUgc2tfWDUwOV9OQU1FX3ZhbHVlICAgICAgICAgICAgICB3b2xmU1NMX3NrX1g1MDlfTkFNRV92YWx1ZQorI2RlZmluZSBza19YNTA5X05BTUVfcG9wICAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9OQU1FX3BvcAorI2RlZmluZSBza19YNTA5X05BTUVfcG9wX2ZyZWUgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9OQU1FX3BvcF9mcmVlCisjZGVmaW5lIHNrX1g1MDlfTkFNRV9mcmVlICAgICAgICAgICAgICAgd29sZlNTTF9za19YNTA5X05BTUVfZnJlZQorCit0eXBlZGVmIFdPTEZTU0xfWDUwOV9OQU1FX0VOVFJZIFg1MDlfTkFNRV9FTlRSWTsKKworI2RlZmluZSBYNTA5X05BTUVfZW50cnlfY291bnQgICAgICAgICAgIHdvbGZTU0xfWDUwOV9OQU1FX2VudHJ5X2NvdW50CisjZGVmaW5lIFg1MDlfTkFNRV9FTlRSWV9nZXRfb2JqZWN0ICAgICAgd29sZlNTTF9YNTA5X05BTUVfRU5UUllfZ2V0X29iamVjdAorI2RlZmluZSBYNTA5X05BTUVfZ2V0X2VudHJ5ICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9OQU1FX2dldF9lbnRyeQorI2RlZmluZSBYNTA5X05BTUVfRU5UUllfZ2V0X2RhdGEgICAgICAgIHdvbGZTU0xfWDUwOV9OQU1FX0VOVFJZX2dldF9kYXRhCisjZGVmaW5lIFg1MDlfTkFNRV9FTlRSWV9nZXRfb2JqZWN0ICAgICAgd29sZlNTTF9YNTA5X05BTUVfRU5UUllfZ2V0X29iamVjdAorCisjZGVmaW5lIFg1MDlfVl9GTEFHX0NSTF9DSEVDSyAgICAgV09MRlNTTF9DUkxfQ0hFQ0sKKyNkZWZpbmUgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLX0FMTCBXT0xGU1NMX0NSTF9DSEVDS0FMTAorCisjZGVmaW5lIFg1MDlfVl9GTEFHX1VTRV9DSEVDS19USU1FIFdPTEZTU0xfVVNFX0NIRUNLX1RJTUUKKyNkZWZpbmUgWDUwOV9WX0ZMQUdfTk9fQ0hFQ0tfVElNRSAgV09MRlNTTF9OT19DSEVDS19USU1FCisjZGVmaW5lIFg1MDlfQ0hFQ0tfRkxBR19OT19XSUxEQ0FSRFMgV09MRlNTTF9OT19XSUxEQ0FSRFMKKworI2RlZmluZSBYNTA5X1ZQX0ZMQUdfREVGQVVMVCAgICAgICAgV09MRlNTTF9WUEFSQU1fREVGQVVMVAorI2RlZmluZSBYNTA5X1ZQX0ZMQUdfT1ZFUldSSVRFICAgICAgV09MRlNTTF9WUEFSQU1fT1ZFUldSSVRFCisjZGVmaW5lIFg1MDlfVlBfRkxBR19SRVNFVF9GTEFHUyAgICBXT0xGU1NMX1ZQQVJBTV9SRVNFVF9GTEFHUworI2RlZmluZSBYNTA5X1ZQX0ZMQUdfTE9DS0VEICAgICAgICAgV09MRlNTTF9WUEFSQU1fTE9DS0VECisjZGVmaW5lIFg1MDlfVlBfRkxBR19PTkNFICAgICAgICAgICBXT0xGU1NMX1ZQQVJBTV9PTkNFCisKKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfZ2V0X2N1cnJlbnRfY2VydCB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQKKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfc2V0X3ZlcmlmeV9jYiAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX3NldF92ZXJpZnlfY2IKKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfbmV3ICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX25ldworI2RlZmluZSBYNTA5X1NUT1JFX0NUWF9mcmVlICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfZnJlZQorI2RlZmluZSBYNTA5X1NUT1JFX0NUWF9nZXRfY2hhaW4gICAgICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfZ2V0X2NoYWluCisjZGVmaW5lIFg1MDlfU1RPUkVfQ1RYX2dldDBfY2hhaW4gICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXRfY2hhaW4KKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbiAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2dldDFfY2hhaW4KKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJlbnRfY3R4ICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2dldDBfcGFyZW50X2N0eAorI2RlZmluZSBYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3IgICAgICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yCisjZGVmaW5lIFg1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcl9kZXB0aCAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGgKKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfaW5pdCAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2luaXQKKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfY2xlYW51cCAgICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2NsZWFudXAKKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcgorI2RlZmluZSBYNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3JfZGVwdGggIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yX2RlcHRoCisjZGVmaW5lIFg1MDlfU1RPUkVfQ1RYX2dldF9leF9kYXRhICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YQorI2RlZmluZSBYNTA5X1NUT1JFX0NUWF9zZXRfZXhfZGF0YSAgICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfc2V0X2V4X2RhdGEKKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfc2V0X2RlcHRoICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX3NldF9kZXB0aAorI2RlZmluZSBYNTA5X1NUT1JFX0NUWF92ZXJpZnlfY2IgICAgICAgIFdPTEZTU0xfWDUwOV9TVE9SRV9DVFhfdmVyaWZ5X2NiCisjZGVmaW5lIFg1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9pc3N1ZXIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9pc3N1ZXIKKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfZ2V0MF9zdG9yZSAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2dldDBfc3RvcmUKKyNkZWZpbmUgWDUwOV9TVE9SRV9DVFhfZ2V0MF9jZXJ0ICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2dldDBfY2VydAorI2RlZmluZSBYNTA5X1NUT1JFX0NUWF90cnVzdGVkX3N0YWNrICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfdHJ1c3RlZF9zdGFjaworCisjZGVmaW5lIFg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYihzLCBjKSBcCit3b2xmU1NMX1g1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYigoV09MRlNTTF9YNTA5X1NUT1JFICopKHMpLCAoV09MRlNTTF9YNTA5X1NUT1JFX0NUWF92ZXJpZnlfY2IpKGMpKQorI2RlZmluZSBYNTA5X1NUT1JFX3NldF92ZXJpZnlfY2JfZnVuYyhzLCBjKSBcCit3b2xmU1NMX1g1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYigoV09MRlNTTF9YNTA5X1NUT1JFICopKHMpLCAoV09MRlNTTF9YNTA5X1NUT1JFX0NUWF92ZXJpZnlfY2IpKGMpKQorCisKKyNkZWZpbmUgWDUwOV9TVE9SRV9uZXcgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfbmV3CisjZGVmaW5lIFg1MDlfU1RPUkVfZnJlZSAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX2ZyZWUKKyNkZWZpbmUgWDUwOV9TVE9SRV9hZGRfbG9va3VwICAgICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfYWRkX2xvb2t1cAorI2RlZmluZSBYNTA5X1NUT1JFX2FkZF9jZXJ0ICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9hZGRfY2VydAorI2RlZmluZSBYNTA5X1NUT1JFX2FkZF9jcmwgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9hZGRfY3JsCisjZGVmaW5lIFg1MDlfU1RPUkVfc2V0X2ZsYWdzICAgICAgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX3NldF9mbGFncworI2RlZmluZSBYNTA5X1NUT1JFX2dldDFfY2VydHMgICAgICAgICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9nZXQxX2NlcnRzCisjZGVmaW5lIFg1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3QgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX2dldF9ieV9zdWJqZWN0CisjZGVmaW5lIFg1MDlfU1RPUkVfc2V0X2V4X2RhdGEgICAgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX3NldF9leF9kYXRhCisjZGVmaW5lIFg1MDlfU1RPUkVfZ2V0X2V4X2RhdGEgICAgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX2dldF9leF9kYXRhCisjZGVmaW5lIFg1MDlfU1RPUkVfQ1RYX2dldDFfaXNzdWVyICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXQxX2lzc3VlcgorI2RlZmluZSBYNTA5X1NUT1JFX0NUWF9zZXRfdGltZSAgICAgICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfc2V0X3RpbWUKKyNkZWZpbmUgWDUwOV9WRVJJRllfUEFSQU1fbmV3ICAgICAgICAgICB3b2xmU1NMX1g1MDlfVkVSSUZZX1BBUkFNX25ldworI2RlZmluZSBYNTA5X1ZFUklGWV9QQVJBTV9mcmVlICAgICAgICAgIHdvbGZTU0xfWDUwOV9WRVJJRllfUEFSQU1fZnJlZQorI2RlZmluZSBYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZmxhZ3MgICAgIHdvbGZTU0xfWDUwOV9WRVJJRllfUEFSQU1fc2V0X2ZsYWdzCisjZGVmaW5lIFg1MDlfVkVSSUZZX1BBUkFNX2dldF9mbGFncyAgICAgd29sZlNTTF9YNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3MKKyNkZWZpbmUgWDUwOV9WRVJJRllfUEFSQU1fY2xlYXJfZmxhZ3MgICB3b2xmU1NMX1g1MDlfVkVSSUZZX1BBUkFNX2NsZWFyX2ZsYWdzCisjZGVmaW5lIFg1MDlfVkVSSUZZX1BBUkFNX3NldF9ob3N0ZmxhZ3Mgd29sZlNTTF9YNTA5X1ZFUklGWV9QQVJBTV9zZXRfaG9zdGZsYWdzCisjZGVmaW5lIFg1MDlfVkVSSUZZX1BBUkFNX3NldDFfaG9zdCAgICAgd29sZlNTTF9YNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2hvc3QKKyNkZWZpbmUgWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9pcF9hc2MgICB3b2xmU1NMX1g1MDlfVkVSSUZZX1BBUkFNX3NldDFfaXBfYXNjCisjZGVmaW5lIFg1MDlfVkVSSUZZX1BBUkFNX3NldDEgICAgICAgICAgd29sZlNTTF9YNTA5X1ZFUklGWV9QQVJBTV9zZXQxCisjZGVmaW5lIFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zCisKKyNkZWZpbmUgWDUwOV9MT09LVVBfYWRkX2RpciAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfTE9PS1VQX2FkZF9kaXIKKyNkZWZpbmUgWDUwOV9MT09LVVBfbG9hZF9maWxlICAgICAgICAgICB3b2xmU1NMX1g1MDlfTE9PS1VQX2xvYWRfZmlsZQorI2RlZmluZSBYNTA5X0xPT0tVUF9oYXNoX2RpciAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9MT09LVVBfaGFzaF9kaXIKKyNkZWZpbmUgWDUwOV9MT09LVVBfZmlsZSAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfTE9PS1VQX2ZpbGUKKyNkZWZpbmUgWDUwOV9MT09LVVBfY3RybCAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfTE9PS1VQX2N0cmwKKworI2RlZmluZSBkMmlfWDUwOV9DUkwgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZDJpX1g1MDlfQ1JMCisjZGVmaW5lIGQyaV9YNTA5X0NSTF9mcCAgICAgICAgICAgICAgICAgd29sZlNTTF9kMmlfWDUwOV9DUkxfZnAKKyNkZWZpbmUgUEVNX3JlYWRfWDUwOV9DUkwgICAgICAgICAgICAgICB3b2xmU1NMX1BFTV9yZWFkX1g1MDlfQ1JMCisKKyNkZWZpbmUgWDUwOV9DUkxfZnJlZSAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfQ1JMX2ZyZWUKKyNkZWZpbmUgWDUwOV9DUkxfZ2V0X2xhc3RVcGRhdGUgICAgICAgICB3b2xmU1NMX1g1MDlfQ1JMX2dldF9sYXN0VXBkYXRlCisjZGVmaW5lIFg1MDlfQ1JMX2dldF9uZXh0VXBkYXRlICAgICAgICAgd29sZlNTTF9YNTA5X0NSTF9nZXRfbmV4dFVwZGF0ZQorI2RlZmluZSBYNTA5X0NSTF92ZXJpZnkgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9DUkxfdmVyaWZ5CisjZGVmaW5lIFg1MDlfQ1JMX2dldF9SRVZPS0VEICAgICAgICAgICAgd29sZlNTTF9YNTA5X0NSTF9nZXRfUkVWT0tFRAorI2RlZmluZSBYNTA5X2xvYWRfY3JsX2ZpbGUgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9sb2FkX2NybF9maWxlCisKKyNkZWZpbmUgWDUwOV9nZXRfWDUwOV9QVUJLRVkgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X1g1MDlfUFVCS0VZCisjZGVmaW5lIFg1MDlfUkVRX2dldF9YNTA5X1BVQktFWSAgICAgICAgd29sZlNTTF9YNTA5X2dldF9YNTA5X1BVQktFWQorI2RlZmluZSBYNTA5X2dldDBfdGJzX3NpZ2FsZyAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXQwX3Ric19zaWdhbGcKKyNkZWZpbmUgWDUwOV9QVUJLRVlfZ2V0MF9wYXJhbSAgICAgICAgICB3b2xmU1NMX1g1MDlfUFVCS0VZX2dldDBfcGFyYW0KKyNkZWZpbmUgWDUwOV9QVUJLRVlfZ2V0ICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfUFVCS0VZX2dldAorI2RlZmluZSBYNTA5X1BVQktFWV9zZXQgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9QVUJLRVlfc2V0CisjZGVmaW5lIFg1MDlfQUxHT1JfZ2V0MCAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X0FMR09SX2dldDAKKyNkZWZpbmUgWDUwOV9BTEdPUl9zZXQwICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfQUxHT1Jfc2V0MAorCisjZGVmaW5lIFg1MDlfQUxHT1JfbmV3ICAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X0FMR09SX25ldworI2RlZmluZSBYNTA5X0FMR09SX2ZyZWUgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9BTEdPUl9mcmVlCisjZGVmaW5lIFg1MDlfUFVCS0VZX25ldyAgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X1BVQktFWV9uZXcKKyNkZWZpbmUgWDUwOV9QVUJLRVlfZnJlZSAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfUFVCS0VZX2ZyZWUKKworI2RlZmluZSBza19YNTA5X1JFVk9LRURfbnVtICAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9SRVZPS0VEX251bQorI2RlZmluZSBza19YNTA5X1JFVk9LRURfdmFsdWUgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9SRVZPS0VEX3ZhbHVlCisKKyNkZWZpbmUgWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cyAgICAgICB3b2xmU1NMX1g1MDlfT0JKRUNUX2ZyZWVfY29udGVudHMKKworI2RlZmluZSBYNTA5X2NoZWNrX3B1cnBvc2UoLi4uKSAgICAgICAgIDAKKworI2RlZmluZSBPQ1NQX3BhcnNlX3VybCAgICAgICAgICAgICAgICAgIHdvbGZTU0xfT0NTUF9wYXJzZV91cmwKKworI2RlZmluZSBNRDRfSW5pdCAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfTUQ0X0luaXQKKyNkZWZpbmUgTUQ0X1VwZGF0ZSAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX01ENF9VcGRhdGUKKyNkZWZpbmUgTUQ0X0ZpbmFsICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX01ENF9GaW5hbAorCisjZGVmaW5lIEJJT19uZXcgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fbmV3CisjZGVmaW5lIEJJT19mcmVlICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fZnJlZQorI2RlZmluZSBCSU9fdmZyZWUgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3ZmcmVlCisjZGVmaW5lIEJJT19mcmVlX2FsbCAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fZnJlZV9hbGwKKyNkZWZpbmUgQklPX25yZWFkMCAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19ucmVhZDAKKyNkZWZpbmUgQklPX25yZWFkICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19ucmVhZAorI2RlZmluZSBCSU9fcmVhZCAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3JlYWQKKyNkZWZpbmUgQklPX253cml0ZTAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19ud3JpdGUwCisjZGVmaW5lIEJJT19ud3JpdGUgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fbndyaXRlCisjZGVmaW5lIEJJT193cml0ZSAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fd3JpdGUKKyNkZWZpbmUgQklPX3B1c2ggICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19wdXNoCisjZGVmaW5lIEJJT19wb3AgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fcG9wCisjZGVmaW5lIEJJT19mbHVzaCAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fZmx1c2gKKyNkZWZpbmUgQklPX3BlbmRpbmcgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19wZW5kaW5nCisKKyNkZWZpbmUgQklPX2dldF9tZW1fZGF0YSAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19nZXRfbWVtX2RhdGEKKyNkZWZpbmUgQklPX25ld19tZW1fYnVmICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19uZXdfbWVtX2J1ZgorCisjZGVmaW5lIEJJT19mX2J1ZmZlciAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fZl9idWZmZXIKKyNkZWZpbmUgQklPX3NldF93cml0ZV9idWZmZXJfc2l6ZSAgICAgICB3b2xmU1NMX0JJT19zZXRfd3JpdGVfYnVmZmVyX3NpemUKKyNkZWZpbmUgQklPX2Zfc3NsICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19mX3NzbAorI2RlZmluZSBCSU9fbmV3X3NvY2tldCAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX25ld19zb2NrZXQKKyNkZWZpbmUgQklPX25ld19jb25uZWN0ICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19uZXdfY29ubmVjdAorI2RlZmluZSBCSU9fc2V0X2Nvbm5fcG9ydCAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3NldF9jb25uX3BvcnQKKyNkZWZpbmUgQklPX2RvX2Nvbm5lY3QgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19kb19jb25uZWN0CisjZGVmaW5lIEJJT19kb19oYW5kc2hha2UgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fZG9faGFuZHNoYWtlCisjZGVmaW5lIFNTTF9zZXRfYmlvICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9zZXRfYmlvCisjZGVmaW5lIEJJT19zZXRfc3NsICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fc2V0X3NzbAorI2RlZmluZSBCSU9fZW9mICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX2VvZgorI2RlZmluZSBCSU9fc2V0X3NzICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3NldF9zcworCisjZGVmaW5lIEJJT19mX21kICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fZl9tZAorI2RlZmluZSBCSU9fZ2V0X21kX2N0eCAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX2dldF9tZF9jdHgKKyNkZWZpbmUgQklPX3NfbWVtICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0JJT19zX21lbQorI2RlZmluZSBCSU9fZl9iYXNlNjQgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX2ZfYmFzZTY0CisjZGVmaW5lIEJJT19zZXRfZmxhZ3MgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fc2V0X2ZsYWdzCisjZGVmaW5lIEJJT19zZXRfbmJpbyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fc2V0X25iaW8KKworI2RlZmluZSBTU0xlYXlfYWRkX3NzbF9hbGdvcml0aG1zICAgICAgIHdvbGZTU0xfYWRkX2FsbF9hbGdvcml0aG1zCisjZGVmaW5lIFNTTGVheV9hZGRfYWxsX2FsZ29yaXRobXMgICAgICAgd29sZlNTTF9hZGRfYWxsX2FsZ29yaXRobXMKKworI2RlZmluZSBSQU5EX3NjcmVlbiAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfUkFORF9zY3JlZW4KKyNkZWZpbmUgUkFORF9maWxlX25hbWUgICAgICAgICAgICAgICAgICB3b2xmU1NMX1JBTkRfZmlsZV9uYW1lCisjZGVmaW5lIFJBTkRfd3JpdGVfZmlsZSAgICAgICAgICAgICAgICAgd29sZlNTTF9SQU5EX3dyaXRlX2ZpbGUKKyNkZWZpbmUgUkFORF9sb2FkX2ZpbGUgICAgICAgICAgICAgICAgICB3b2xmU1NMX1JBTkRfbG9hZF9maWxlCisjZGVmaW5lIFJBTkRfZWdkICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9SQU5EX2VnZAorI2RlZmluZSBSQU5EX3NlZWQgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfUkFORF9zZWVkCisjZGVmaW5lIFJBTkRfY2xlYW51cCAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9SQU5EX0NsZWFudXAKKyNkZWZpbmUgUkFORF9hZGQgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1JBTkRfYWRkCisjZGVmaW5lIFJBTkRfcG9sbCAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9SQU5EX3BvbGwKKyNkZWZpbmUgUkFORF9zdGF0dXMgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1JBTkRfc3RhdHVzCisjZGVmaW5lIFJBTkRfYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9SQU5EX2J5dGVzCisjZGVmaW5lIFJBTkRfcHNldWRvX2J5dGVzICAgICAgICAgICAgICAgd29sZlNTTF9SQU5EX3BzZXVkb19ieXRlcworCisjZGVmaW5lIENPTVBfemxpYiAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DT01QX3psaWIKKyNkZWZpbmUgQ09NUF9ybGUgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NPTVBfcmxlCisjZGVmaW5lIFNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2Qgd29sZlNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2QKKworI2RlZmluZSBTU0xfZ2V0X2V4X25ld19pbmRleCAgICAgICAgICAgIHdvbGZTU0xfZ2V0X2V4X25ld19pbmRleAorI2RlZmluZSBSU0FfZ2V0X2V4X25ld19pbmRleCAgICAgICAgICAgIHdvbGZTU0xfZ2V0X2V4X25ld19pbmRleAorCisjZGVmaW5lIEFTTjFfQklUX1NUUklOR19uZXcgICAgICAgICAgICAgd29sZlNTTF9BU04xX0JJVF9TVFJJTkdfbmV3CisjZGVmaW5lIEFTTjFfQklUX1NUUklOR19mcmVlICAgICAgICAgICAgd29sZlNTTF9BU04xX0JJVF9TVFJJTkdfZnJlZQorI2RlZmluZSBBU04xX0JJVF9TVFJJTkdfZ2V0X2JpdCAgICAgICAgIHdvbGZTU0xfQVNOMV9CSVRfU1RSSU5HX2dldF9iaXQKKyNkZWZpbmUgQVNOMV9CSVRfU1RSSU5HX3NldF9iaXQgICAgICAgICB3b2xmU1NMX0FTTjFfQklUX1NUUklOR19zZXRfYml0CisKKyNkZWZpbmUgc2tfQVNOMV9PQkpFQ1RfZnJlZSAgICAgICAgICAgICB3b2xmU1NMX3NrX0FTTjFfT0JKRUNUX2ZyZWUKKworI2RlZmluZSBBU04xX1RJTUVfbmV3ICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQVNOMV9USU1FX25ldworI2RlZmluZSBBU04xX1VUQ1RJTUVfbmV3ICAgICAgICAgICAgICAgIHdvbGZTU0xfQVNOMV9USU1FX25ldworI2RlZmluZSBBU04xX1RJTUVfZnJlZSAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQVNOMV9USU1FX2ZyZWUKKyNkZWZpbmUgQVNOMV9VVENUSU1FX2ZyZWUgICAgICAgICAgICAgICB3b2xmU1NMX0FTTjFfVElNRV9mcmVlCisjZGVmaW5lIEFTTjFfVElNRV9hZGogICAgICAgICAgICAgICAgICAgd29sZlNTTF9BU04xX1RJTUVfYWRqCisjZGVmaW5lIEFTTjFfVElNRV9wcmludCAgICAgICAgICAgICAgICAgd29sZlNTTF9BU04xX1RJTUVfcHJpbnQKKyNkZWZpbmUgQVNOMV9USU1FX3RvX2dlbmVyYWxpemVkdGltZSAgICB3b2xmU1NMX0FTTjFfVElNRV90b19nZW5lcmFsaXplZHRpbWUKKyNkZWZpbmUgQVNOMV9USU1FX3NldCAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0FTTjFfVElNRV9zZXQKKyNkZWZpbmUgQVNOMV9USU1FX3NldF9zdHJpbmcgICAgICAgICAgICB3b2xmU1NMX0FTTjFfVElNRV9zZXRfc3RyaW5nCisjZGVmaW5lIEFTTjFfVElNRV90b19zdHJpbmcgICAgICAgICAgICAgd29sZlNTTF9BU04xX1RJTUVfdG9fc3RyaW5nCisjZGVmaW5lIEFTTjFfR0VORVJBTElaRURUSU1FX3ByaW50ICAgICAgd29sZlNTTF9BU04xX0dFTkVSQUxJWkVEVElNRV9wcmludAorI2RlZmluZSBBU04xX0dFTkVSQUxJWkVEVElNRV9mcmVlICAgICAgIHdvbGZTU0xfQVNOMV9HRU5FUkFMSVpFRFRJTUVfZnJlZQorCisjZGVmaW5lIEFTTjFfdGFnMnN0ciAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9BU04xX3RhZzJzdHIKKworI2RlZmluZSBhMmlfQVNOMV9JTlRFR0VSICAgICAgICAgICAgICAgIHdvbGZTU0xfYTJpX0FTTjFfSU5URUdFUgorI2RlZmluZSBpMmFfQVNOMV9JTlRFR0VSICAgICAgICAgICAgICAgIHdvbGZTU0xfaTJhX0FTTjFfSU5URUdFUgorI2RlZmluZSBpMmNfQVNOMV9JTlRFR0VSICAgICAgICAgICAgICAgIHdvbGZTU0xfaTJjX0FTTjFfSU5URUdFUgorI2RlZmluZSBBU04xX0lOVEVHRVJfbmV3ICAgICAgICAgICAgICAgIHdvbGZTU0xfQVNOMV9JTlRFR0VSX25ldworI2RlZmluZSBBU04xX0lOVEVHRVJfZnJlZSAgICAgICAgICAgICAgIHdvbGZTU0xfQVNOMV9JTlRFR0VSX2ZyZWUKKyNkZWZpbmUgQVNOMV9JTlRFR0VSX2NtcCAgICAgICAgICAgICAgICB3b2xmU1NMX0FTTjFfSU5URUdFUl9jbXAKKyNkZWZpbmUgQVNOMV9JTlRFR0VSX2dldCAgICAgICAgICAgICAgICB3b2xmU1NMX0FTTjFfSU5URUdFUl9nZXQKKyNkZWZpbmUgQVNOMV9JTlRFR0VSX3NldCAgICAgICAgICAgICAgICB3b2xmU1NMX0FTTjFfSU5URUdFUl9zZXQKKyNkZWZpbmUgQVNOMV9JTlRFR0VSX3RvX0JOICAgICAgICAgICAgICB3b2xmU1NMX0FTTjFfSU5URUdFUl90b19CTgorCisjZGVmaW5lIGkyYV9BU04xX09CSkVDVCAgICAgICAgICAgICAgICAgd29sZlNTTF9pMmFfQVNOMV9PQkpFQ1QKKyNkZWZpbmUgaTJkX0FTTjFfT0JKRUNUICAgICAgICAgICAgICAgICB3b2xmU1NMX2kyZF9BU04xX09CSkVDVAorCisjZGVmaW5lIEFTTjFfU1RSSU5HX25ldyAgICAgICAgICAgICAgICAgd29sZlNTTF9BU04xX1NUUklOR19uZXcKKyNkZWZpbmUgQVNOMV9TVFJJTkdfZnJlZSAgICAgICAgICAgICAgICB3b2xmU1NMX0FTTjFfU1RSSU5HX2ZyZWUKKyNkZWZpbmUgQVNOMV9TVFJJTkdfY21wICAgICAgICAgICAgICAgICB3b2xmU1NMX0FTTjFfU1RSSU5HX2NtcAorI2RlZmluZSBBU04xX1NUUklOR19kYXRhICAgICAgICAgICAgICAgIHdvbGZTU0xfQVNOMV9TVFJJTkdfZGF0YQorI2RlZmluZSBBU04xX1NUUklOR19nZXQwX2RhdGEgICAgICAgICAgIHdvbGZTU0xfQVNOMV9TVFJJTkdfZ2V0MF9kYXRhCisjZGVmaW5lIEFTTjFfU1RSSU5HX2xlbmd0aCAgICAgICAgICAgICAgd29sZlNTTF9BU04xX1NUUklOR19sZW5ndGgKKyNkZWZpbmUgQVNOMV9TVFJJTkdfdG9fVVRGOCAgICAgICAgICAgICB3b2xmU1NMX0FTTjFfU1RSSU5HX3RvX1VURjgKKyNkZWZpbmUgQVNOMV9VTklWRVJTQUxTVFJJTkdfdG9fc3RyaW5nICB3b2xmU1NMX0FTTjFfVU5JVkVSU0FMU1RSSU5HX3RvX3N0cmluZworI2RlZmluZSBBU04xX1NUUklOR19wcmludF9leCAgICAgICAgICAgIHdvbGZTU0xfQVNOMV9TVFJJTkdfcHJpbnRfZXgKKyNkZWZpbmUgQVNOMV9TVFJJTkdfcHJpbnQoeCwgeSkgICAgICAgICB3b2xmU1NMX0FTTjFfU1RSSU5HX3ByaW50ICgoV09MRlNTTF9CSU8qKSh4KSwgKFdPTEZTU0xfQVNOMV9TVFJJTkcqKSh5KSkKKyNkZWZpbmUgZDJpX0RJU1BMQVlURVhUICAgICAgICAgICAgICAgICB3b2xmU1NMX2QyaV9ESVNQTEFZVEVYVAorI2lmbmRlZiBOT19XT0xGU1NMX1NUVUIKKyNkZWZpbmUgQVNOMV9TVFJJTkdfc2V0X2RlZmF1bHRfbWFza19hc2MoLi4uKSAxCisjZW5kaWYKKworI2RlZmluZSBBU04xX1BSSU5UQUJMRV90eXBlKC4uLikgICAgICAgIFZfQVNOMV9QUklOVEFCTEVTVFJJTkcKKworI2RlZmluZSBBU04xX1VUQ1RJTUVfcHIgICAgICAgICAgICAgICAgIHdvbGZTU0xfQVNOMV9VVENUSU1FX3ByCisKKyNkZWZpbmUgQVNOMV9JQTVTVFJJTkcgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FTTjFfU1RSSU5HCisKKyNkZWZpbmUgQVNOMV9PQ1RFVF9TVFJJTkcgICAgICAgICAgICAgICBXT0xGU1NMX0FTTjFfU1RSSU5HCisjZGVmaW5lIEFTTjFfQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9BU04xX0JPT0xFQU4KKworI2RlZmluZSBTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZSAgICAgICAgIHdvbGZTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZQorCisjZGVmaW5lIFNTTF9DVFhfZ2V0X2NsaWVudF9DQV9saXN0ICAgICAgd29sZlNTTF9DVFhfZ2V0X2NsaWVudF9DQV9saXN0CisjZGVmaW5lIFNTTF9DVFhfc2V0X2NsaWVudF9DQV9saXN0ICAgICAgd29sZlNTTF9DVFhfc2V0X2NsaWVudF9DQV9saXN0CisjZGVmaW5lIFNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2NiICAgICAgd29sZlNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2NiCisjZGVmaW5lIFNTTF9DVFhfc2V0X2NlcnRfc3RvcmUgICAgICAgICAgd29sZlNTTF9DVFhfc2V0X2NlcnRfc3RvcmUKKyNkZWZpbmUgU1NMX0NUWF9nZXRfY2VydF9zdG9yZSh4KSAgICAgICB3b2xmU1NMX0NUWF9nZXRfY2VydF9zdG9yZSAoKFdPTEZTU0xfQ1RYKikgKHgpKQorI2RlZmluZSBTU0xfZ2V0X2NsaWVudF9DQV9saXN0ICAgICAgICAgIHdvbGZTU0xfZ2V0X2NsaWVudF9DQV9saXN0CisjZGVmaW5lIFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHggd29sZlNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHgKKyNkZWZpbmUgU1NMX2dldF9leF9kYXRhICAgICAgICAgICAgICAgICB3b2xmU1NMX2dldF9leF9kYXRhCisKKyNkZWZpbmUgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEgd29sZlNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhCisjZGVmaW5lIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiICAgd29sZlNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiCisKKyNkZWZpbmUgU1NMX0NUWF9zZXRfdGltZW91dChjdHgsIHRvKSAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9zZXRfdGltZW91dChjdHgsICh1bnNpZ25lZCBpbnQpIHRvKQorI2RlZmluZSBTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrICAgICAgIHdvbGZTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrCisjZGVmaW5lIFNTTF9DVFhfc2V0X2FscG5fcHJvdG9zICAgICAgICAgd29sZlNTTF9DVFhfc2V0X2FscG5fcHJvdG9zCisKKyNkZWZpbmUgU1NMX0NUWF9rZXlsb2dfY2JfZnVuYyAgICAgICAgICB3b2xmU1NMX0NUWF9rZXlsb2dfY2JfZnVuYworI2RlZmluZSBTU0xfQ1RYX3NldF9rZXlsb2dfY2FsbGJhY2sgICAgIHdvbGZTU0xfQ1RYX3NldF9rZXlsb2dfY2FsbGJhY2sKKyNkZWZpbmUgU1NMX0NUWF9nZXRfa2V5bG9nX2NhbGxiYWNrICAgICB3b2xmU1NMX0NUWF9nZXRfa2V5bG9nX2NhbGxiYWNrCisKKyNkZWZpbmUgU1NMX2FsZXJ0X3R5cGVfc3RyaW5nICAgICAgICAgICB3b2xmU1NMX2FsZXJ0X3R5cGVfc3RyaW5nCisjZGVmaW5lIFNTTF9hbGVydF9kZXNjX3N0cmluZyAgICAgICAgICAgd29sZlNTTF9hbGVydF9kZXNjX3N0cmluZworI2RlZmluZSBTU0xfc3RhdGVfc3RyaW5nICAgICAgICAgICAgICAgIHdvbGZTU0xfc3RhdGVfc3RyaW5nCisKKyNkZWZpbmUgUlNBX2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1JTQV9mcmVlCisjZGVmaW5lIFJTQV9nZW5lcmF0ZV9rZXkgICAgICAgICAgICAgICAgd29sZlNTTF9SU0FfZ2VuZXJhdGVfa2V5CisjZGVmaW5lIFNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2sgICAgd29sZlNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2sKKyNkZWZpbmUgUlNBX3ByaW50ICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1JTQV9wcmludAorI2RlZmluZSBSU0FfYml0cyAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfUlNBX2JpdHMKKyNkZWZpbmUgUlNBX3VwX3JlZiAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1JTQV91cF9yZWYKKyNkZWZpbmUgUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX1BTUyAgICAgICB3b2xmU1NMX1JTQV9wYWRkaW5nX2FkZF9QS0NTMV9QU1MKKyNkZWZpbmUgUlNBX3ZlcmlmeV9QS0NTMV9QU1MgICAgICAgICAgICB3b2xmU1NMX1JTQV92ZXJpZnlfUEtDUzFfUFNTCisKKyNkZWZpbmUgUEVNX2RlZl9jYWxsYmFjayAgICAgICAgICAgICAgICB3b2xmU1NMX1BFTV9kZWZfY2FsbGJhY2sKKworI2RlZmluZSBTU0xfQ1RYX3Nlc3NfYWNjZXB0ICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX3Nlc3NfYWNjZXB0CisjZGVmaW5lIFNTTF9DVFhfc2Vzc19jb25uZWN0ICAgICAgICAgICAgd29sZlNTTF9DVFhfc2Vzc19jb25uZWN0CisjZGVmaW5lIFNTTF9DVFhfc2Vzc19hY2NlcHRfZ29vZCAgICAgICAgd29sZlNTTF9DVFhfc2Vzc19hY2NlcHRfZ29vZAorI2RlZmluZSBTU0xfQ1RYX3Nlc3NfY29ubmVjdF9nb29kICAgICAgIHdvbGZTU0xfQ1RYX3Nlc3NfY29ubmVjdF9nb29kCisjZGVmaW5lIFNTTF9DVFhfc2Vzc19hY2NlcHRfcmVuZWdvdGlhdGUgd29sZlNTTF9DVFhfc2Vzc19hY2NlcHRfcmVuZWdvdGlhdGUKKyNkZWZpbmUgU1NMX0NUWF9zZXNzX2Nvbm5lY3RfcmVuZWdvdGlhdGUgd29sZlNTTF9DVFhfc2Vzc19jb25uZWN0X3JlbmVnb3RpYXRlCisjZGVmaW5lIFNTTF9DVFhfc2Vzc19oaXRzICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfc2Vzc19oaXRzCisjZGVmaW5lIFNTTF9DVFhfc2Vzc19jYl9oaXRzICAgICAgICAgICAgd29sZlNTTF9DVFhfc2Vzc19jYl9oaXRzCisjZGVmaW5lIFNTTF9DVFhfc2Vzc19jYWNoZV9mdWxsICAgICAgICAgd29sZlNTTF9DVFhfc2Vzc19jYWNoZV9mdWxsCisjZGVmaW5lIFNTTF9DVFhfc2Vzc19taXNzZXMgICAgICAgICAgICAgd29sZlNTTF9DVFhfc2Vzc19taXNzZXMKKyNkZWZpbmUgU1NMX0NUWF9zZXNzX3RpbWVvdXRzICAgICAgICAgICB3b2xmU1NMX0NUWF9zZXNzX3RpbWVvdXRzCisjZGVmaW5lIFNTTF9DVFhfc2Vzc19udW1iZXIgICAgICAgICAgICAgd29sZlNTTF9DVFhfc2Vzc19udW1iZXIKKyNkZWZpbmUgU1NMX0NUWF9zZXNzX2dldF9jYWNoZV9zaXplICAgICB3b2xmU1NMX0NUWF9zZXNzX2dldF9jYWNoZV9zaXplCisKKworI2RlZmluZSBTU0xfREVGQVVMVF9DSVBIRVJfTElTVCBXT0xGU1NMX0RFRkFVTFRfQ0lQSEVSX0xJU1QKKworI2RlZmluZSBTU0xfQ1RYX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrIHdvbGZTU0xfQ1RYX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrCisjZGVmaW5lIFNTTF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjayAgICAgd29sZlNTTF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjaworCisjZGVmaW5lIFNTTF9nZXRfcHNrX2lkZW50aXR5X2hpbnQgICAgICAgd29sZlNTTF9nZXRfcHNrX2lkZW50aXR5X2hpbnQKKyNkZWZpbmUgU1NMX2dldF9wc2tfaWRlbnRpdHkgICAgICAgICAgICB3b2xmU1NMX2dldF9wc2tfaWRlbnRpdHkKKworI2RlZmluZSBTU0xfQ1RYX3VzZV9wc2tfaWRlbnRpdHlfaGludCAgIHdvbGZTU0xfQ1RYX3VzZV9wc2tfaWRlbnRpdHlfaGludAorI2RlZmluZSBTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50ICAgICAgIHdvbGZTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50CisKKyNkZWZpbmUgU1NMX0NUWF9zZXRfcHNrX3NlcnZlcl9jYWxsYmFjayB3b2xmU1NMX0NUWF9zZXRfcHNrX3NlcnZlcl9jYWxsYmFjaworI2RlZmluZSBTU0xfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2sgICAgIHdvbGZTU0xfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2sKKworLyogc3lzdGVtIGZpbGUgaW50cyBmb3IgRVJSX3B1dF9lcnJvciAqLworI2RlZmluZSBTWVNfRl9BQ0NFUFQgICAgICBXT0xGU1NMX1NZU19BQ0NFUFQKKyNkZWZpbmUgU1lTX0ZfQklORCAgICAgICAgV09MRlNTTF9TWVNfQklORAorI2RlZmluZSBTWVNfRl9DT05ORUNUICAgICBXT0xGU1NMX1NZU19DT05ORUNUCisjZGVmaW5lIFNZU19GX0ZPUEVOICAgICAgIFdPTEZTU0xfU1lTX0ZPUEVOCisjZGVmaW5lIFNZU19GX0ZSRUFEICAgICAgIFdPTEZTU0xfU1lTX0ZSRUFECisjZGVmaW5lIFNZU19GX0dFVEFERFJJTkZPIFdPTEZTU0xfU1lTX0dFVEFERFJJTkZPCisjZGVmaW5lIFNZU19GX0dFVFNPQ0tPUFQgIFdPTEZTU0xfU1lTX0dFVFNPQ0tPUFQKKyNkZWZpbmUgU1lTX0ZfR0VUU09DS05BTUUgV09MRlNTTF9TWVNfR0VUU09DS05BTUUKKyNkZWZpbmUgU1lTX0ZfT1BFTkRJUiAgICAgV09MRlNTTF9TWVNfT1BFTkRJUgorI2RlZmluZSBTWVNfRl9TRVRTT0NLT1BUICBXT0xGU1NMX1NZU19TRVRTT0NLT1BUCisjZGVmaW5lIFNZU19GX1NPQ0tFVCAgICAgIFdPTEZTU0xfU1lTX1NPQ0tFVAorI2RlZmluZSBTWVNfRl9HRVRIT1NUQllOQU1FICBXT0xGU1NMX1NZU19HRVRIT1NUQllOQU1FCisjZGVmaW5lIFNZU19GX0dFVE5BTUVJTkZPICAgIFdPTEZTU0xfU1lTX0dFVE5BTUVJTkZPCisjZGVmaW5lIFNZU19GX0dFVFNFUlZCWU5BTUUgIFdPTEZTU0xfU1lTX0dFVFNFUlZCWU5BTUUKKyNkZWZpbmUgU1lTX0ZfSU9DVExTT0NLRVQgICAgV09MRlNTTF9TWVNfSU9DVExTT0NLRVQKKyNkZWZpbmUgU1lTX0ZfTElTVEVOICAgICAgICAgV09MRlNTTF9TWVNfTElTVEVOCisKKyNkZWZpbmUgRVJSX0dFVF9MSUIgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9HRVRfTElCCisjZGVmaW5lIEVSUl9HRVRfUkVBU09OICAgICAgICAgICAgICAgICAgd29sZlNTTF9FUlJfR0VUX1JFQVNPTgorCisjZGVmaW5lIEVSUl9wdXRfZXJyb3IgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FUlJfcHV0X2Vycm9yCisjZGVmaW5lIEVSUl9wZWVrX2Vycm9yICAgICAgICAgICAgICAgICAgd29sZlNTTF9FUlJfcGVla19lcnJvcgorI2RlZmluZSBFUlJfcGVla19lcnJvcnNfZnAgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX3BlZWtfZXJyb3JzX2ZwCisjZGVmaW5lIEVSUl9wZWVrX2Vycm9yX2xpbmVfZGF0YSAgICAgICAgd29sZlNTTF9FUlJfcGVla19lcnJvcl9saW5lX2RhdGEKKyNkZWZpbmUgRVJSX3BlZWtfbGFzdF9lcnJvciAgICAgICAgICAgICB3b2xmU1NMX0VSUl9wZWVrX2xhc3RfZXJyb3IKKyNkZWZpbmUgRVJSX3BlZWtfbGFzdF9lcnJvcl9saW5lICAgICAgICB3b2xmU1NMX0VSUl9wZWVrX2xhc3RfZXJyb3JfbGluZQorI2RlZmluZSBFUlJfZ2V0X2Vycm9yX2xpbmUgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX2dldF9lcnJvcl9saW5lCisjZGVmaW5lIEVSUl9nZXRfZXJyb3JfbGluZV9kYXRhICAgICAgICAgd29sZlNTTF9FUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YQorI2RlZmluZSBFUlJfZ2V0X2Vycm9yICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX2dldF9lcnJvcgorI2RlZmluZSBFUlJfcHJpbnRfZXJyb3JzX2ZwKGZpbGUpICAgICAgIHdvbGZTU0xfRVJSX2R1bXBfZXJyb3JzX2ZwKChmaWxlKSkKKyNkZWZpbmUgRVJSX3ByaW50X2Vycm9yc19jYiAgICAgICAgICAgICB3b2xmU1NMX0VSUl9wcmludF9lcnJvcnNfY2IKKyNkZWZpbmUgRVJSX3ByaW50X2Vycm9ycyAgICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9wcmludF9lcnJvcnMKKyNkZWZpbmUgRVJSX2NsZWFyX2Vycm9yICAgICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9jbGVhcl9lcnJvcgorI2RlZmluZSBFUlJfZnJlZV9zdHJpbmdzICAgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX2ZyZWVfc3RyaW5ncworI2RlZmluZSBFUlJfcmVtb3ZlX3N0YXRlICAgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX3JlbW92ZV9zdGF0ZQorI2RlZmluZSBFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZSAgICAgICAgIHdvbGZTU0xfRVJSX3JlbW92ZV90aHJlYWRfc3RhdGUKKyNkZWZpbmUgRVJSX2Vycm9yX3N0cmluZyAgICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9lcnJvcl9zdHJpbmcKKyNkZWZpbmUgRVJSX2Vycm9yX3N0cmluZ19uICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9lcnJvcl9zdHJpbmdfbgorI2RlZmluZSBFUlJfcmVhc29uX2Vycm9yX3N0cmluZyAgICAgICAgIHdvbGZTU0xfRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmcKKyNkZWZpbmUgRVJSX2xvYWRfQklPX3N0cmluZ3MgICAgICAgICAgICB3b2xmU1NMX0VSUl9sb2FkX0JJT19zdHJpbmdzCisKKyNpZm5kZWYgV09MRkNSWVBUX09OTFkKKyNkZWZpbmUgUEVNZXJyKGZ1bmMsIHJlYXNvbikgICAgICAgICAgICB3b2xmU1NMX0VSUl9wdXRfZXJyb3IoRVJSX0xJQl9QRU0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuYyksIChyZWFzb24pLCBfX0ZJTEVfXywgX19MSU5FX18pCisjZWxzZQorI2RlZmluZSBQRU1lcnIoZnVuYywgcmVhc29uKSAgICAgICAgICAgIFdPTEZTU0xfRVJST1JfTElORSgocmVhc29uKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIF9fTElORV9fLCBfX0ZJTEVfXywgTlVMTCkKKyNlbmRpZgorI2lmbmRlZiBXT0xGQ1JZUFRfT05MWQorI2RlZmluZSBFVlBlcnIoZnVuYywgcmVhc29uKSAgICAgICAgICAgIHdvbGZTU0xfRVJSX3B1dF9lcnJvcihFUlJfTElCX0VWUCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jKSwgKHJlYXNvbiksIF9fRklMRV9fLCBfX0xJTkVfXykKKyNlbHNlCisjZGVmaW5lIEVWUGVycihmdW5jLCByZWFzb24pICAgICAgICAgICAgV09MRlNTTF9FUlJPUl9MSU5FKChyZWFzb24pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgX19MSU5FX18sIF9fRklMRV9fLCBOVUxMKQorI2VuZGlmCisKKyNkZWZpbmUgU1NMdjIzX3NlcnZlcl9tZXRob2QgICAgICAgICAgICB3b2xmU1NMdjIzX3NlcnZlcl9tZXRob2QKKyNkZWZpbmUgU1NMX0NUWF9zZXRfb3B0aW9ucyAgICAgICAgICAgICB3b2xmU1NMX0NUWF9zZXRfb3B0aW9ucworI2RlZmluZSBTU0xfQ1RYX2dldF9vcHRpb25zICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2dldF9vcHRpb25zCisjZGVmaW5lIFNTTF9DVFhfY2xlYXJfb3B0aW9ucyAgICAgICAgICAgd29sZlNTTF9DVFhfY2xlYXJfb3B0aW9ucworCisjZGVmaW5lIFNTTF9DVFhfY2hlY2tfcHJpdmF0ZV9rZXkgICAgICAgd29sZlNTTF9DVFhfY2hlY2tfcHJpdmF0ZV9rZXkKKyNkZWZpbmUgU1NMX2NoZWNrX3ByaXZhdGVfa2V5ICAgICAgICAgICB3b2xmU1NMX2NoZWNrX3ByaXZhdGVfa2V5CisKKyNkZWZpbmUgU1NMX0NUWF9zZXRfbW9kZSAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9zZXRfbW9kZQorI2RlZmluZSBTU0xfQ1RYX2dldF9tb2RlICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2dldF9tb2RlCisjZGVmaW5lIFNTTF9DVFhfc2V0X2RlZmF1bHRfcmVhZF9haGVhZCAgd29sZlNTTF9DVFhfc2V0X2RlZmF1bHRfcmVhZF9haGVhZAorCisjZGVmaW5lIFNTTF9DVFhfc2Vzc19zZXRfY2FjaGVfc2l6ZSAgICAgd29sZlNTTF9DVFhfc2Vzc19zZXRfY2FjaGVfc2l6ZQorI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyB3b2xmU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMKKworI2RlZmluZSBTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQgIHdvbGZTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQKKyNkZWZpbmUgU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlICAgICAgICB3b2xmU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlCisjZGVmaW5lIFNTTF9nZXRfcGVlcl9jZXJ0X2NoYWluICAgICAgICAgd29sZlNTTF9nZXRfcGVlcl9jZXJ0X2NoYWluCisKKyNkZWZpbmUgU1NMX3dhbnQgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3dhbnQKKyNkZWZpbmUgU1NMX3dhbnRfcmVhZCAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3dhbnRfcmVhZAorI2RlZmluZSBTU0xfd2FudF93cml0ZSAgICAgICAgICAgICAgICAgIHdvbGZTU0xfd2FudF93cml0ZQorCisjZGVmaW5lIEJJT19wcmYgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fcHJmCisKKyNkZWZpbmUgc2tfbnVtICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3NrX251bQorI2RlZmluZSBza19BU04xX09CSkVDVF9udW0gICAgICAgICAgICAgIHdvbGZTU0xfc2tfbnVtCisjZGVmaW5lIE9QRU5TU0xfc2tfbnVtICAgICAgICAgICAgICAgICAgd29sZlNTTF9za19udW0KKyNkZWZpbmUgc2tfdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX3NrX3ZhbHVlCisjZGVmaW5lIHNrX0FTTjFfT0JKRUNUX3ZhbHVlICAgICAgICAgICAgd29sZlNTTF9za192YWx1ZQorI2RlZmluZSBPUEVOU1NMX3NrX3ZhbHVlICAgICAgICAgICAgICAgIHdvbGZTU0xfc2tfdmFsdWUKKworI2RlZmluZSBkMmlfUEtDUzEyX2JpbyAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZDJpX1BLQ1MxMl9iaW8KKyNkZWZpbmUgZDJpX1BLQ1MxMl9mcCAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2QyaV9QS0NTMTJfZnAKKyNkZWZpbmUgaTJkX1BLQ1MxMl9iaW8gICAgICAgICAgICAgICAgICB3b2xmU1NMX2kyZF9QS0NTMTJfYmlvCisKKyNkZWZpbmUgZDJpX1JTQVB1YmxpY0tleSAgICAgICAgICAgICAgICB3b2xmU1NMX2QyaV9SU0FQdWJsaWNLZXkKKyNkZWZpbmUgZDJpX1JTQVByaXZhdGVLZXkgICAgICAgICAgICAgICB3b2xmU1NMX2QyaV9SU0FQcml2YXRlS2V5CisjZGVmaW5lIGkyZF9SU0FQcml2YXRlS2V5ICAgICAgICAgICAgICAgd29sZlNTTF9pMmRfUlNBUHJpdmF0ZUtleQorI2RlZmluZSBpMmRfUlNBUHVibGljS2V5ICAgICAgICAgICAgICAgIHdvbGZTU0xfaTJkX1JTQVB1YmxpY0tleQorCisjZGVmaW5lIFNTTF9DVFhfZ2V0X2V4X2RhdGEgICAgICAgICAgICAgd29sZlNTTF9DVFhfZ2V0X2V4X2RhdGEKKyNkZWZpbmUgU1NMX0NUWF9zZXRfZXhfZGF0YSAgICAgICAgICAgICB3b2xmU1NMX0NUWF9zZXRfZXhfZGF0YQorI2RlZmluZSBTU0xfQ1RYX3Nlc3Nfc2V0X2dldF9jYiAgICAgICAgIHdvbGZTU0xfQ1RYX3Nlc3Nfc2V0X2dldF9jYgorI2RlZmluZSBTU0xfQ1RYX3Nlc3Nfc2V0X25ld19jYiAgICAgICAgIHdvbGZTU0xfQ1RYX3Nlc3Nfc2V0X25ld19jYgorI2RlZmluZSBTU0xfQ1RYX3Nlc3Nfc2V0X3JlbW92ZV9jYiAgICAgIHdvbGZTU0xfQ1RYX3Nlc3Nfc2V0X3JlbW92ZV9jYgorCisjZGVmaW5lIGkyZF9TU0xfU0VTU0lPTiAgICAgICAgICAgICAgICAgd29sZlNTTF9pMmRfU1NMX1NFU1NJT04KKyNkZWZpbmUgZDJpX1NTTF9TRVNTSU9OICAgICAgICAgICAgICAgICB3b2xmU1NMX2QyaV9TU0xfU0VTU0lPTgorI2RlZmluZSBTU0xfU0VTU0lPTl9zZXRfdGltZW91dCAgICAgICAgIHdvbGZTU0xfU1NMX1NFU1NJT05fc2V0X3RpbWVvdXQKKyNkZWZpbmUgU1NMX1NFU1NJT05fZ2V0X3RpbWVvdXQgICAgICAgICB3b2xmU1NMX1NFU1NJT05fZ2V0X3RpbWVvdXQKKyNkZWZpbmUgU1NMX1NFU1NJT05fZ2V0X3RpbWUgICAgICAgICAgICB3b2xmU1NMX1NFU1NJT05fZ2V0X3RpbWUKKworI2RlZmluZSBTU0xfQ1RYX2dldF9leF9uZXdfaW5kZXggICAgICAgIHdvbGZTU0xfQ1RYX2dldF9leF9uZXdfaW5kZXgKKyNkZWZpbmUgUEVNX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1BFTV9yZWFkCisjZGVmaW5lIFBFTV93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9QRU1fd3JpdGUKKyNkZWZpbmUgUEVNX2dldF9FVlBfQ0lQSEVSX0lORk8gICAgICAgICB3b2xmU1NMX1BFTV9nZXRfRVZQX0NJUEhFUl9JTkZPCisjZGVmaW5lIFBFTV9kb19oZWFkZXIgICAgICAgICAgICAgICAgICAgd29sZlNTTF9QRU1fZG9faGVhZGVyCisKKy8qI2lmIE9QRU5TU0xfQVBJX0NPTVBBVCA8IDB4MTAxMDAwMDBMKi8KKyNkZWZpbmUgQ09ORl9tb2R1bGVzX2ZyZWUoKQorI2RlZmluZSBFTkdJTkVfY2xlYW51cCgpCisjZGVmaW5lIFNTTF9DVFhfbmVlZF90bXBfUlNBKGN0eCkgICAgICAgMAorI2RlZmluZSBTU0xfQ1RYX3NldF90bXBfcnNhKGN0eCxyc2EpICAgIDEKKyNkZWZpbmUgU1NMX25lZWRfdG1wX1JTQShzc2wpICAgICAgICAgICAwCisjZGVmaW5lIFNTTF9zZXRfdG1wX3JzYShzc2wscnNhKSAgICAgICAgMQorLyojZW5kaWYqLworCisjZGVmaW5lIENPTkZfbW9kdWxlc191bmxvYWQoYSkKKyNkZWZpbmUgQ09ORl9nZXQxX2RlZmF1bHRfY29uZmlnX2ZpbGUgd29sZlNTTF9DT05GX2dldDFfZGVmYXVsdF9jb25maWdfZmlsZQorCisjZGVmaW5lIFNTTF9nZXRfaGl0ICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9zZXNzaW9uX3JldXNlZAorCisvKiB5YXNzbCBoYWQgc2V0IHRoZSBkZWZhdWx0IHRvIGJlIDUwMCAqLworI2RlZmluZSBTU0xfZ2V0X2RlZmF1bHRfdGltZW91dChjdHgpICAgIDUwMAorCisjZGVmaW5lIERUTFN2MV9nZXRfdGltZW91dChzc2wsIHRpbWVsZWZ0KSAgIHdvbGZTU0xfRFRMU3YxX2dldF90aW1lb3V0KChzc2wpLCAoV09MRlNTTF9USU1FVkFMKikodGltZWxlZnQpKQorI2RlZmluZSBEVExTdjFfaGFuZGxlX3RpbWVvdXQgICAgICAgICAgICAgICB3b2xmU1NMX0RUTFN2MV9oYW5kbGVfdGltZW91dAorI2RlZmluZSBEVExTdjFfc2V0X2luaXRpYWxfdGltZW91dF9kdXJhdGlvbiB3b2xmU1NMX0RUTFN2MV9zZXRfaW5pdGlhbF90aW1lb3V0X2R1cmF0aW9uCisKKyNpZm5kZWYgTk9fV09MRlNTTF9TVFVCCisjZGVmaW5lIFNTTF9DVFhfc2V0X2N1cnJlbnRfdGltZV9jYihzc2wsIGNiKSAoeyAodm9pZClzc2w7ICh2b2lkKWNiOyB9KQorI2VuZGlmCisKKyNkZWZpbmUgU1NMX0NUWF91c2VfY2VydGlmaWNhdGUgICAgICAgICB3b2xmU1NMX0NUWF91c2VfY2VydGlmaWNhdGUKKyNkZWZpbmUgU1NMX0NUWF9hZGQxX2NoYWluX2NlcnQgICAgICAgICB3b2xmU1NMX0NUWF9hZGQxX2NoYWluX2NlcnQKKyNkZWZpbmUgU1NMX0NUWF91c2VfUHJpdmF0ZUtleSAgICAgICAgICB3b2xmU1NMX0NUWF91c2VfUHJpdmF0ZUtleQorI2RlZmluZSBCSU9fcmVhZF9maWxlbmFtZSAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3JlYWRfZmlsZW5hbWUKKyNkZWZpbmUgU1NMX0NUWF9zZXRfdmVyaWZ5X2RlcHRoICAgICAgICB3b2xmU1NMX0NUWF9zZXRfdmVyaWZ5X2RlcHRoCisjZGVmaW5lIFNTTF9zZXRfdmVyaWZ5X2RlcHRoICAgICAgICAgICAgd29sZlNTTF9zZXRfdmVyaWZ5X2RlcHRoCisjZGVmaW5lIFNTTF9nZXRfYXBwX2RhdGEgICAgICAgICAgICAgICAgd29sZlNTTF9nZXRfYXBwX2RhdGEKKyNkZWZpbmUgU1NMX3NldF9hcHBfZGF0YSAgICAgICAgICAgICAgICB3b2xmU1NMX3NldF9hcHBfZGF0YQorI2RlZmluZSBTSEExICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfU0hBMQorCisjZGVmaW5lIFNTTF9kdXBfQ0FfbGlzdCAgICAgICAgICAgICAgICAgd29sZlNTTF9kdXBfQ0FfbGlzdAorCisjZGVmaW5lIHNrX1g1MDlfTkFNRV9maW5kICAgICAgICAgICAgICAgd29sZlNTTF9za19YNTA5X05BTUVfZmluZAorCisjZGVmaW5lIERIcGFyYW1zX2R1cCAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9ESF9kdXAKKyNkZWZpbmUgUEVNX3JlYWRfYmlvX0RIcGFyYW1zICAgICAgICAgICB3b2xmU1NMX1BFTV9yZWFkX2Jpb19ESHBhcmFtcworI2RlZmluZSBQRU1fcmVhZF9iaW9fRFNBcGFyYW1zICAgICAgICAgIHdvbGZTU0xfUEVNX3JlYWRfYmlvX0RTQXBhcmFtcworCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpCisjZGVmaW5lIFNTTF9nZXRfcmJpbyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9TU0xfZ2V0X3JiaW8KKyNkZWZpbmUgU1NMX2dldF93YmlvICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1NTTF9nZXRfd2JpbworI2RlZmluZSBTU0xfZG9faGFuZHNoYWtlICAgICAgICAgICAgICAgIHdvbGZTU0xfU1NMX2RvX2hhbmRzaGFrZQorI2RlZmluZSBTU0xfZ2V0X2NpcGhlcnMoeCkgICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X2NpcGhlcnNfY29tcGF0KHgpCisjZGVmaW5lIFNTTF9TRVNTSU9OX2dldF9pZCAgICAgICAgICAgICAgd29sZlNTTF9TRVNTSU9OX2dldF9pZAorI2RlZmluZSBTU0xfZ2V0X2NpcGhlcl9iaXRzKHMsbnApICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DSVBIRVJfZ2V0X2JpdHMoU1NMX2dldF9jdXJyZW50X2NpcGhlcihzKSxucCkKKyNkZWZpbmUgc2tfU1NMX0NJUEhFUl9udW0gICAgICAgICAgICAgICB3b2xmU1NMX3NrX1NTTF9DSVBIRVJfbnVtCisjZGVmaW5lIHNrX1NTTF9DT01QX3plcm8gICAgICAgICAgICAgICAgd29sZlNTTF9za19TU0xfQ09NUF96ZXJvCisjZGVmaW5lIHNrX1NTTF9DSVBIRVJfdmFsdWUgICAgICAgICAgICAgd29sZlNTTF9za19TU0xfQ0lQSEVSX3ZhbHVlCisjZW5kaWYgLyogT1BFTlNTTF9BTEwgfHwgV09MRlNTTF9IQVBST1hZICovCisjZGVmaW5lIHNrX1NTTF9DSVBIRVJfZHVwICAgICAgICAgICAgICAgd29sZlNTTF9za19kdXAKKyNkZWZpbmUgc2tfU1NMX0NJUEhFUl9mcmVlICAgICAgICAgICAgICB3b2xmU1NMX3NrX1NTTF9DSVBIRVJfZnJlZQorI2RlZmluZSBza19TU0xfQ0lQSEVSX2ZpbmQgICAgICAgICAgICAgIHdvbGZTU0xfc2tfU1NMX0NJUEhFUl9maW5kCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSB8fCBkZWZpbmVkKFdPTEZTU0xfQVNJTykgfHwgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpIFwKKyAgICB8fCBkZWZpbmVkKFdPTEZTU0xfTkdJTlgpCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3BlbS5oPgorCisjZGVmaW5lIFNTTF9DVFJMX0NIQUlOICAgICAgIDg4CisjZGVmaW5lIEVSUl9MSUJfU1NMICAgICAgICAgIDIwCisjZGVmaW5lIFNTTF9SX1NIT1JUX1JFQUQgICAgIDEwCisjZGVmaW5lIEVSUl9SX1BFTV9MSUIgICAgICAgIDkKKyNkZWZpbmUgU1NMX0NUUkxfTU9ERSAgICAgICAgMzMKKworI2RlZmluZSBTU0xfQ1RSTF9DTEVBUl9FWFRSQV9DSEFJTl9DRVJUUyAgICAgICAgODMKKworI2RlZmluZSBTU0xfQ1RYX2NsZWFyX2NoYWluX2NlcnRzKGN0eCkgU1NMX0NUWF9zZXQwX2NoYWluKGN0eCxOVUxMKQorI2RlZmluZSBkMmlfUlNBUHJpdmF0ZUtleV9iaW8gICAgICAgICAgIHdvbGZTU0xfZDJpX1JTQVByaXZhdGVLZXlfYmlvCisjZGVmaW5lIFNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXkgICAgICAgd29sZlNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXkKKyNkZWZpbmUgZDJpX1ByaXZhdGVLZXlfYmlvICAgICAgICAgICAgICB3b2xmU1NMX2QyaV9Qcml2YXRlS2V5X2JpbworI2RlZmluZSBCSU9fbmV3X2Jpb19wYWlyICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX25ld19iaW9fcGFpcgorI2RlZmluZSBTU0xfZ2V0X3ZlcmlmeV9jYWxsYmFjayAgICAgICAgIHdvbGZTU0xfZ2V0X3ZlcmlmeV9jYWxsYmFjaworCisjZGVmaW5lIFNTTF9zZXRfbW9kZShzc2wsb3ApICAgICAgICAgd29sZlNTTF9jdHJsKChzc2wpLFNTTF9DVFJMX01PREUsKG9wKSxOVUxMKQorCisjZGVmaW5lIFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX0FTTjEgICAgd29sZlNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX0FTTjEKKyNkZWZpbmUgU1NMX0NUWF9zZXQwX2NoYWluKGN0eCxzaykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9jdHJsKGN0eCxTU0xfQ1RSTF9DSEFJTiwwLChjaGFyICopKHNrKSkKKyNkZWZpbmUgU1NMX0NUWF9nZXRfYXBwX2RhdGEoY3R4KSAgICAgICB3b2xmU1NMX0NUWF9nZXRfZXhfZGF0YShjdHgsMCkKKyNkZWZpbmUgU1NMX0NUWF9zZXRfYXBwX2RhdGEoY3R4LGFyZykgICB3b2xmU1NMX0NUWF9zZXRfZXhfZGF0YShjdHgsMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikoYXJnKSkKKyNlbmRpZiAvKiBPUEVOU1NMX0FMTCB8fCBXT0xGU1NMX0FTSU8gfHwgV09MRlNTTF9IQVBST1hZICovCisKKyNkZWZpbmUgU1NMX0NUWF9zZXRfdG1wX2RoICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9zZXRfdG1wX2RoCisKKyNkZWZpbmUgVExTRVhUX1NUQVRVU1RZUEVfb2NzcCAgMQorCisjZGVmaW5lIFNTTF9zZXRfb3B0aW9ucyAgICAgICAgICAgICAgICAgd29sZlNTTF9zZXRfb3B0aW9ucworI2RlZmluZSBTU0xfZ2V0X29wdGlvbnMgICAgICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X29wdGlvbnMKKyNkZWZpbmUgU1NMX2NsZWFyX29wdGlvbnMgICAgICAgICAgICAgICB3b2xmU1NMX2NsZWFyX29wdGlvbnMKKyNkZWZpbmUgU1NMX3NldF90bXBfZGggICAgICAgICAgICAgICAgICB3b2xmU1NMX3NldF90bXBfZGgKKyNkZWZpbmUgU1NMX2NsZWFyX251bV9yZW5lZ290aWF0aW9ucyAgICB3b2xmU1NMX2NsZWFyX251bV9yZW5lZ290aWF0aW9ucworI2RlZmluZSBTU0xfdG90YWxfcmVuZWdvdGlhdGlvbnMgICAgICAgIHdvbGZTU0xfdG90YWxfcmVuZWdvdGlhdGlvbnMKKyNkZWZpbmUgU1NMX251bV9yZW5lZ290aWF0aW9ucyAgICAgICAgICB3b2xmU1NMX251bV9yZW5lZ290aWF0aW9ucworI2RlZmluZSBTU0xfcmVuZWdvdGlhdGUgICAgICAgICAgICAgICAgIHdvbGZTU0xfUmVoYW5kc2hha2UKKyNkZWZpbmUgU1NMX2dldF9zZWN1cmVfcmVuZWdvdGlhdGlvbl9zdXBwb3J0IHdvbGZTU0xfU1NMX2dldF9zZWN1cmVfcmVuZWdvdGlhdGlvbl9zdXBwb3J0CisjZGVmaW5lIFNTTF9yZW5lZ290aWF0ZV9wZW5kaW5nICAgICAgICAgd29sZlNTTF9TU0xfcmVuZWdvdGlhdGVfcGVuZGluZworI2RlZmluZSBTU0xfc2V0X3Rsc2V4dF9kZWJ1Z19hcmcgICAgICAgIHdvbGZTU0xfc2V0X3Rsc2V4dF9kZWJ1Z19hcmcKKyNkZWZpbmUgU1NMX3NldF90bHNleHRfc3RhdHVzX3R5cGUgICAgICB3b2xmU1NMX3NldF90bHNleHRfc3RhdHVzX3R5cGUKKyNkZWZpbmUgU1NMX3NldF90bHNleHRfc3RhdHVzX2V4dHMgICAgICB3b2xmU1NMX3NldF90bHNleHRfc3RhdHVzX2V4dHMKKyNkZWZpbmUgU1NMX2dldF90bHNleHRfc3RhdHVzX2lkcyAgICAgICB3b2xmU1NMX2dldF90bHNleHRfc3RhdHVzX2lkcworI2RlZmluZSBTU0xfc2V0X3Rsc2V4dF9zdGF0dXNfaWRzICAgICAgIHdvbGZTU0xfc2V0X3Rsc2V4dF9zdGF0dXNfaWRzCisjZGVmaW5lIFNTTF9nZXRfdGxzZXh0X3N0YXR1c19vY3NwX3JlcyAgd29sZlNTTF9nZXRfdGxzZXh0X3N0YXR1c19vY3NwX3Jlc3AKKyNkZWZpbmUgU1NMX3NldF90bHNleHRfc3RhdHVzX29jc3BfcmVzICB3b2xmU1NMX3NldF90bHNleHRfc3RhdHVzX29jc3BfcmVzcAorI2RlZmluZSBTU0xfc2V0X3Rsc2V4dF9zdGF0dXNfb2NzcF9yZXNwICB3b2xmU1NMX3NldF90bHNleHRfc3RhdHVzX29jc3BfcmVzcAorI2RlZmluZSBTU0xfZ2V0X3Rsc2V4dF9zdGF0dXNfb2NzcF9yZXNwICB3b2xmU1NMX2dldF90bHNleHRfc3RhdHVzX29jc3BfcmVzcAorCisjZGVmaW5lIFNTTF9DVFhfYWRkX2V4dHJhX2NoYWluX2NlcnQgICAgd29sZlNTTF9DVFhfYWRkX2V4dHJhX2NoYWluX2NlcnQKKyNkZWZpbmUgU1NMX0NUWF9nZXRfcmVhZF9haGVhZCAgICAgICAgICB3b2xmU1NMX0NUWF9nZXRfcmVhZF9haGVhZAorI2RlZmluZSBTU0xfQ1RYX3NldF9yZWFkX2FoZWFkICAgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9yZWFkX2FoZWFkCisjZGVmaW5lIFNTTF9DVFhfc2V0X3Rsc2V4dF9zdGF0dXNfYXJnICAgd29sZlNTTF9DVFhfc2V0X3Rsc2V4dF9zdGF0dXNfYXJnCisjZGVmaW5lIFNTTF9DVFhfc2V0X3Rsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2NhbGxiYWNrX2FyZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfc2V0X3Rsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2NhbGxiYWNrX2FyZworI2RlZmluZSBTU0xfZ2V0X3NlcnZlcl9yYW5kb20gICAgICAgICAgIHdvbGZTU0xfZ2V0X3NlcnZlcl9yYW5kb20KKyNkZWZpbmUgU1NMX2dldF9zZXJ2ZXJfdG1wX2tleSAgICAgICAgICB3b2xmU1NMX2dldF9zZXJ2ZXJfdG1wX2tleQorCisjZGVmaW5lIFNTTF9DVFhfc2V0X21pbl9wcm90b192ZXJzaW9uICAgd29sZlNTTF9DVFhfc2V0X21pbl9wcm90b192ZXJzaW9uCisjZGVmaW5lIFNTTF9DVFhfc2V0X21heF9wcm90b192ZXJzaW9uICAgd29sZlNTTF9DVFhfc2V0X21heF9wcm90b192ZXJzaW9uCisjZGVmaW5lIFNTTF9DVFhfZ2V0X21pbl9wcm90b192ZXJzaW9uICAgd29sZlNTTF9DVFhfZ2V0X21pbl9wcm90b192ZXJzaW9uCisKKyNkZWZpbmUgU1NMX2dldF90bHNleHRfc3RhdHVzX2V4dHMgICAgICB3b2xmU1NMX2dldF90bHNleHRfc3RhdHVzX2V4dHMKKworI2RlZmluZSBTU0xfQ1RYX2dldF90bHNleHRfdGlja2V0X2tleXMgIHdvbGZTU0xfQ1RYX2dldF90bHNleHRfdGlja2V0X2tleXMKKyNkZWZpbmUgU1NMX0NUWF9zZXRfdGxzZXh0X3RpY2tldF9rZXlzICB3b2xmU1NMX0NUWF9zZXRfdGxzZXh0X3RpY2tldF9rZXlzCisKKyNkZWZpbmUgU1NMX0NUUkxfQ0xFQVJfTlVNX1JFTkVHT1RJQVRJT05TICAgICAgICAgMTEKKyNkZWZpbmUgU1NMX0NUUkxfR0VUX1RPVEFMX1JFTkVHT1RJQVRJT05TICAgICAgICAgMTIKKyNkZWZpbmUgU1NMX0NUUkxfU0VUX1RNUF9ESCAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBTU0xfQ1RSTF9TRVRfVE1QX0VDREggICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFNTTF9DVFJMX1NFVF9TRVNTX0NBQ0hFX01PREUgICAgICAgICAgICAgIDQ0CisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfREVCVUdfQVJHICAgICAgICAgICAgIDU3CisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfU1RBVFVTX1JFUV9UWVBFICAgICAgIDY1CisjZGVmaW5lIFNTTF9DVFJMX0dFVF9UTFNFWFRfU1RBVFVTX1JFUV9FWFRTICAgICAgIDY2CisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfU1RBVFVTX1JFUV9FWFRTICAgICAgIDY3CisjZGVmaW5lIFNTTF9DVFJMX0dFVF9UTFNFWFRfU1RBVFVTX1JFUV9JRFMgICAgICAgIDY4CisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfU1RBVFVTX1JFUV9JRFMgICAgICAgIDY5CisjZGVmaW5lIFNTTF9DVFJMX0dFVF9UTFNFWFRfU1RBVFVTX1JFUV9PQ1NQX1JFU1AgIDcwCisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfU1RBVFVTX1JFUV9PQ1NQX1JFU1AgIDcxCisjZGVmaW5lIFNTTF9DVFJMX1NFVF9HUk9VUFMgICAgICAgICAgICAgICAgICAgICAgIDkxCisjZGVmaW5lIFNTTF9DVFJMX0dFVF9QRUVSX1RNUF9LRVkgICAgICAgICAgICAgICAgIDEwOQorI2RlZmluZSBTU0xfQ1RSTF9HRVRfU0VSVkVSX1RNUF9LRVkgICAgICAgICAgICAgICBTU0xfQ1RSTF9HRVRfUEVFUl9UTVBfS0VZCisjZGVmaW5lIFNTTF9DVFJMX1NFVF9NSU5fUFJPVE9fVkVSU0lPTiAgICAgICAgICAgIDEyMworI2RlZmluZSBTU0xfQ1RSTF9TRVRfTUFYX1BST1RPX1ZFUlNJT04gICAgICAgICAgICAxMjQKKyNkZWZpbmUgU1NMX0NUUkxfU0VUX0NVUlZFUyAgICAgICAgICAgICAgICAgICAgICAgU1NMX0NUUkxfU0VUX0dST1VQUworCisjZGVmaW5lIFNTTF9DVFJMX0VYVFJBX0NIQUlOX0NFUlQgICAgICAgICAgICAgICAxNAorI2RlZmluZSBTU0xfQ1RSTF9PUFRJT05TICAgICAgICAgICAgICAgICAgICAgICAgMzIKKworI2RlZmluZSBTU0xfQ1RSTF9TRVRfU0VTU19DQUNIRV9TSVpFICAgICAgICAgICAgNDIKKyNkZWZpbmUgU1NMX0NUUkxfR0VUX1JFQURfQUhFQUQgICAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIFNTTF9DVFJMX1NFVF9SRUFEX0FIRUFEICAgICAgICAgICAgICAgICA0MQorCisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfU1RBVFVTX1JFUV9DQiAgICAgICA2MworI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTRVhUX1NUQVRVU19SRVFfQ0JfQVJHICAgNjQKKworI2RlZmluZSBTU0xfQ1RSTF9HRVRfRVhUUkFfQ0hBSU5fQ0VSVFMgICAgICAgICAgODIKKyNkZWZpbmUgU1NMX0NUUkxfR0VUX1NFU1NJT05fUkVVU0VEICAgICAgICAgICAgIDAKKworI2RlZmluZSBTU0xfY3RybCAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfY3RybAorI2RlZmluZSBTU0xfQ1RYX2N0cmwgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2N0cmwKKyNkZWZpbmUgU1NMX0NUWF9jYWxsYmFja19jdHJsICAgICAgICAgICB3b2xmU1NMX0NUWF9jYWxsYmFja19jdHJsCisKKyNkZWZpbmUgU1NMM19SQU5ET01fU0laRSAgICAgICAgICAgICAgICAzMiAvKiBzYW1lIGFzIFJBTl9MRU4gaW4gaW50ZXJuYWwuaCAqLworCisjZGVmaW5lIFNTTDJfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBTU0wzX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgVExTMV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMzAxCisjZGVmaW5lIFRMUzFfMV9WRVJTSU9OICAgICAgICAgICAgICAgICAgIDB4MDMwMgorI2RlZmluZSBUTFMxXzJfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAweDAzMDMKKyNkZWZpbmUgVExTMV8zX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgMHgwMzA0CisjZGVmaW5lIERUTFMxX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgIDB4RkVGRgorI2RlZmluZSBEVExTMV8yX1ZFUlNJT04gICAgICAgICAgICAgICAgICAweEZFRkQKKworI2RlZmluZSBPUEVOU1NMX0lOSVRfTE9BRF9TU0xfU1RSSU5HUyAgICAweDAwMjAwMDAwTAorI2RlZmluZSBPUEVOU1NMX0lOSVRfTE9BRF9DUllQVE9fU1RSSU5HUyAweDAwMDAwMDAyTAorCisjZGVmaW5lIENSWVBUT19FWF9JTkRFWF9TU0wgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVExTX0FOWV9WRVJTSU9OICAgICAgICAgICAgICAgICAgMHgxMDAwMAorI2RlZmluZSBEVExTMV8yX1ZFUlNJT04gICAgICAgICAgICAgICAgICAweEZFRkQKKyNkZWZpbmUgRFRMU19NQVhfVkVSU0lPTiAgICAgICAgICAgICAgICAgRFRMUzFfMl9WRVJTSU9OCisKKy8qIGFwYWNoZSBhbmQgbGlnaHR5IHVzZSBTU0xfQ09ORl9GTEFHX0ZJTEUgdG8gZW5hYmxlIGNvbmYgc3VwcG9ydCAqLworI2lmICFkZWZpbmVkKFdPTEZTU0xfQVBBQ0hFX0hUVFBEKSAmJiAhZGVmaW5lZChIQVZFX0xJR0hUWSkKKyNkZWZpbmUgU1NMX0NPTkZfRkxBR19DTURMSU5FICAgICAgICAgICAgV09MRlNTTF9DT05GX0ZMQUdfQ01ETElORQorI2RlZmluZSBTU0xfQ09ORl9GTEFHX0ZJTEUgICAgICAgICAgICAgICBXT0xGU1NMX0NPTkZfRkxBR19GSUxFCisjZGVmaW5lIFNTTF9DT05GX0ZMQUdfQ0VSVElGSUNBVEUgICAgICAgIFdPTEZTU0xfQ09ORl9GTEFHX0NFUlRJRklDQVRFCisjZGVmaW5lIFNTTF9DT05GX1RZUEVfU1RSSU5HICAgICAgICAgICAgIFdPTEZTU0xfQ09ORl9UWVBFX1NUUklORworI2RlZmluZSBTU0xfQ09ORl9UWVBFX0ZJTEUgICAgICAgICAgICAgICBXT0xGU1NMX0NPTkZfVFlQRV9GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TVFVOTkVMKSB8fCBkZWZpbmVkKFdPTEZTU0xfTkdJTlgpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZGVmaW5lZChPUEVOU1NMX0FMTCkKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvYXNuMS5oPgorCisjZGVmaW5lIFNTTDIzX1NUX1NSX0NMTlRfSEVMTE9fQSAgICAgICAgKDB4MjEwfDB4MjAwMCkKKyNkZWZpbmUgU1NMM19TVF9TUl9DTE5UX0hFTExPX0EgICAgICAgICAoMHgxMTB8MHgyMDAwKQorCisjZGVmaW5lIFNTTDNfQURfQkFEX0NFUlRJRklDQVRFICAgICAgICAgIGJhZF9jZXJ0aWZpY2F0ZQorI2RlZmluZSBTU0xfQURfQkFEX0NFUlRJRklDQVRFICAgICAgICAgICBTU0wzX0FEX0JBRF9DRVJUSUZJQ0FURQorI2RlZmluZSBTU0xfQURfVU5SRUNPR05JWkVEX05BTUUgICAgICAgICB1bnJlY29nbml6ZWRfbmFtZQorI2RlZmluZSBTU0xfQURfTk9fUkVORUdPVElBVElPTiAgICAgICAgICBub19yZW5lZ290aWF0aW9uCisjZGVmaW5lIFNTTF9BRF9JTlRFUk5BTF9FUlJPUiAgICAgICAgICAgIDgwCisKKyNkZWZpbmUgQVNOMV9TVFJGTEdTX0VTQ19NU0IgICAgICAgICAgICAgNAorCisjZGVmaW5lIFNTTF9NQVhfTUFTVEVSX0tFWV9MRU5HVEggICAgICAgV09MRlNTTF9NQVhfTUFTVEVSX0tFWV9MRU5HVEgKKworI2RlZmluZSBTU0xfYWxlcnRfZGVzY19zdHJpbmdfbG9uZyAgICAgIHdvbGZTU0xfYWxlcnRfZGVzY19zdHJpbmdfbG9uZworI2RlZmluZSBTU0xfYWxlcnRfdHlwZV9zdHJpbmdfbG9uZyAgICAgIHdvbGZTU0xfYWxlcnRfdHlwZV9zdHJpbmdfbG9uZworI2RlZmluZSBTU0xfQ0lQSEVSX2dldF9iaXRzICAgICAgICAgICAgIHdvbGZTU0xfQ0lQSEVSX2dldF9iaXRzCisjZGVmaW5lIHNrX0dFTkVSQUxfTkFNRV9udW0gICAgICAgICAgICAgd29sZlNTTF9za19HRU5FUkFMX05BTUVfbnVtCisjZGVmaW5lIFNTTF9DVFhfZ2V0X29wdGlvbnMgICAgICAgICAgICAgd29sZlNTTF9DVFhfZ2V0X29wdGlvbnMKKworI2RlZmluZSBTU0xfQ1RYX2ZsdXNoX3Nlc3Npb25zICAgICAgICAgIHdvbGZTU0xfZmx1c2hfc2Vzc2lvbnMKKyNkZWZpbmUgU1NMX0NUWF9hZGRfc2Vzc2lvbiAgICAgICAgICAgICB3b2xmU1NMX0NUWF9hZGRfc2Vzc2lvbgorI2RlZmluZSBTU0xfdmVyc2lvbih4KSAgICAgICAgICAgICAgICAgIHdvbGZTU0xfdmVyc2lvbiAoKFdPTEZTU0wqKSAoeCkpCisjZGVmaW5lIFNTTF9nZXRfc3RhdGUgICAgICAgICAgICAgICAgICAgd29sZlNTTF9nZXRfc3RhdGUKKyNkZWZpbmUgU1NMX3N0YXRlX3N0cmluZ19sb25nICAgICAgICAgICB3b2xmU1NMX3N0YXRlX3N0cmluZ19sb25nCisKKyNkZWZpbmUgR0VORVJBTF9OQU1FX25ldyAgICAgICAgICAgICAgICB3b2xmU1NMX0dFTkVSQUxfTkFNRV9uZXcKKyNkZWZpbmUgR0VORVJBTF9OQU1FX2ZyZWUgICAgICAgICAgICAgICB3b2xmU1NMX0dFTkVSQUxfTkFNRV9mcmVlCisjZGVmaW5lIHNrX0dFTkVSQUxfTkFNRV9wdXNoICAgICAgICAgICAgd29sZlNTTF9za19HRU5FUkFMX05BTUVfcHVzaAorI2RlZmluZSBza19HRU5FUkFMX05BTUVfdmFsdWUgICAgICAgICAgIHdvbGZTU0xfc2tfR0VORVJBTF9OQU1FX3ZhbHVlCisjZGVmaW5lIFNTTF9TRVNTSU9OX2dldF9leF9kYXRhICAgICAgICAgd29sZlNTTF9TRVNTSU9OX2dldF9leF9kYXRhCisjZGVmaW5lIFNTTF9TRVNTSU9OX3NldF9leF9kYXRhICAgICAgICAgd29sZlNTTF9TRVNTSU9OX3NldF9leF9kYXRhCisjZGVmaW5lIFNTTF9TRVNTSU9OX2dldF9leF9uZXdfaW5kZXggICAgd29sZlNTTF9TRVNTSU9OX2dldF9leF9uZXdfaW5kZXgKKyNkZWZpbmUgU1NMX1NFU1NJT05fZ2V0X2lkICAgICAgICAgICAgICB3b2xmU1NMX1NFU1NJT05fZ2V0X2lkCisjZGVmaW5lIFNTTF9TRVNTSU9OX3ByaW50ICAgICAgICAgICAgICAgd29sZlNTTF9TRVNTSU9OX3ByaW50CisjZGVmaW5lIHNrX0dFTkVSQUxfTkFNRV9wb3BfZnJlZSAgICAgICAgd29sZlNTTF9za19HRU5FUkFMX05BTUVfcG9wX2ZyZWUKKyNkZWZpbmUgc2tfR0VORVJBTF9OQU1FX2ZyZWUgICAgICAgICAgICB3b2xmU1NMX3NrX0dFTkVSQUxfTkFNRV9mcmVlCisjZGVmaW5lIHNrX0FTTjFfT0JKRUNUX3BvcF9mcmVlICAgICAgICAgd29sZlNTTF9za19BU04xX09CSkVDVF9wb3BfZnJlZQorI2RlZmluZSBHRU5FUkFMX05BTUVfZnJlZSAgICAgICAgICAgICAgIHdvbGZTU0xfR0VORVJBTF9OQU1FX2ZyZWUKKyNkZWZpbmUgR0VORVJBTF9OQU1FU19mcmVlICAgICAgICAgICAgICB3b2xmU1NMX0dFTkVSQUxfTkFNRVNfZnJlZQorCisjZGVmaW5lIEFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlICAgICAgd29sZlNTTF9BVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZQorI2RlZmluZSBza19BQ0NFU1NfREVTQ1JJUFRJT05fcG9wX2ZyZWUgIHdvbGZTU0xfc2tfQUNDRVNTX0RFU0NSSVBUSU9OX3BvcF9mcmVlCisjZGVmaW5lIHNrX0FDQ0VTU19ERVNDUklQVElPTl9mcmVlICAgICAgd29sZlNTTF9za19BQ0NFU1NfREVTQ1JJUFRJT05fZnJlZQorI2RlZmluZSBBQ0NFU1NfREVTQ1JJUFRJT05fZnJlZSAgICAgICAgIHdvbGZTU0xfQUNDRVNTX0RFU0NSSVBUSU9OX2ZyZWUKKworI2RlZmluZSBTU0wzX0FMX0ZBVEFMICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU1NMX1RMU0VYVF9FUlJfT0sgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMICAgICAgYWxlcnRfZmF0YWwKKyNkZWZpbmUgU1NMX1RMU0VYVF9FUlJfQUxFUlRfV0FSTklORyAgICBhbGVydF93YXJuaW5nCisjZGVmaW5lIFNTTF9UTFNFWFRfRVJSX05PQUNLICAgICAgICAgICAgYWxlcnRfd2FybmluZworI2RlZmluZSBUTFNFWFRfTkFNRVRZUEVfaG9zdF9uYW1lICAgICAgIFdPTEZTU0xfU05JX0hPU1RfTkFNRQorCisjZGVmaW5lIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZSAgICAgICAgd29sZlNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZQorI2RlZmluZSBTU0xfZ2V0X3NlcnZlcm5hbWUgICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X3NlcnZlcm5hbWUKKyNkZWZpbmUgU1NMX3NldF9TU0xfQ1RYICAgICAgICAgICAgICAgICB3b2xmU1NMX3NldF9TU0xfQ1RYCisjZGVmaW5lIFNTTF9DVFhfZ2V0X3ZlcmlmeV9jYWxsYmFjayAgICAgd29sZlNTTF9DVFhfZ2V0X3ZlcmlmeV9jYWxsYmFjaworI2RlZmluZSBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayB3b2xmU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2sKKyNkZWZpbmUgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfYXJnIHdvbGZTU0xfQ1RYX3NldF9zZXJ2ZXJuYW1lX2FyZworCisjZGVmaW5lIFBTS19NQVhfUFNLX0xFTiAgICAgICAgICAgICAgICAgMjU2CisjZGVmaW5lIFBTS19NQVhfSURFTlRJVFlfTEVOICAgICAgICAgICAgMTI4CisjZGVmaW5lIFNTTF9DVFhfY2xlYXJfb3B0aW9ucyAgICAgICAgICAgd29sZlNTTF9DVFhfY2xlYXJfb3B0aW9ucworCisKKyNlbmRpZiAvKiBIQVZFX1NUVU5ORUwgfHwgV09MRlNTTF9OR0lOWCAqLworCisjaWZuZGVmIE5PX1dPTEZTU0xfU1RVQgorI2RlZmluZSBiMmlfUHJpdmF0ZUtleV9iaW8oLi4uKSAgICAgICAgIE5VTEwKKyNkZWZpbmUgYjJpX1BWS19iaW8oLi4uKSAgICAgICAgICAgICAgICBOVUxMCisjZW5kaWYKKworI2RlZmluZSBTU0xfQ1RYX2dldF9kZWZhdWx0X3Bhc3N3ZF9jYiAgIHdvbGZTU0xfQ1RYX2dldF9kZWZhdWx0X3Bhc3N3ZF9jYgorI2RlZmluZSBTU0xfQ1RYX2dldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YSB3b2xmU1NMX0NUWF9nZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEKKworI2RlZmluZSBTU0xfQ1RYX3NldF9tc2dfY2FsbGJhY2sgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9tc2dfY2FsbGJhY2sKKyNkZWZpbmUgU1NMX3NldF9tc2dfY2FsbGJhY2sgICAgICAgICAgICB3b2xmU1NMX3NldF9tc2dfY2FsbGJhY2sKKyNkZWZpbmUgU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrX2FyZyAgICB3b2xmU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrX2FyZworI2RlZmluZSBTU0xfc2V0X21zZ19jYWxsYmFja19hcmcgICAgICAgIHdvbGZTU0xfc2V0X21zZ19jYWxsYmFja19hcmcKKworI2RlZmluZSBTU0xfQ1RYX2NsZWFyX2V4dHJhX2NoYWluX2NlcnRzIHdvbGZTU0xfQ1RYX2NsZWFyX2V4dHJhX2NoYWluX2NlcnRzCisKKworLyogTmdpbnggdXNlcyB0aGlzIHRvIGRldGVybWluZSBpZiByZWFjaGVkIGVuZCBvZiBjZXJ0cyBpbiBmaWxlLgorICogUEVNX3JlYWRfYmlvX1g1MDkgaXMgY2FsbGVkIGFuZCB0aGUgcmV0dXJuIGVycm9yIGlzIGxvc3QuCisgKiBUaGUgZXJyb3IgdGhhdCBuZWVkcyB0byBiZSBkZXRlY3RlZCBpczogU1NMX05PX1BFTV9IRUFERVIuCisgKi8KKyNkZWZpbmUgRVJSX0dFVF9GVU5DKGwpIChpbnQpKCgoKHVuc2lnbmVkIGxvbmcpbCkgPj4gMTJMKSAmIDB4ZmZmTCkKKworI2RlZmluZSBQRU1fRl9QRU1fREVGX0NBTExCQUNLICAxMDAKKworLyogQXZvaWQgd29sZlNTTCBlcnJvciBjb2RlIHJhbmdlICovCisjZGVmaW5lIFBFTV9SX05PX1NUQVJUX0xJTkUgICAgICAgICAgICAgKC1NSU5fQ09ERV9FICsgMSkKKyNkZWZpbmUgUEVNX1JfUFJPQkxFTVNfR0VUVElOR19QQVNTV09SRCAoLU1JTl9DT0RFX0UgKyAyKQorI2RlZmluZSBQRU1fUl9CQURfUEFTU1dPUkRfUkVBRCAgICAgICAgICgtTUlOX0NPREVfRSArIDMpCisjZGVmaW5lIFBFTV9SX0JBRF9ERUNSWVBUICAgICAgICAgICAgICAgKC1NSU5fQ09ERV9FICsgNCkKKworI2RlZmluZSBFUlJfTElCX1BFTSAgICAgICAgICAgICA5CisjZGVmaW5lIEVSUl9MSUJfWDUwOSAgICAgICAgICAgIDEwCisjZGVmaW5lIEVSUl9MSUJfRVZQICAgICAgICAgICAgIDExCisjZGVmaW5lIEVSUl9MSUJfQVNOMSAgICAgICAgICAgIDEyCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfTkdJTlgpIHx8IGRlZmluZWQoV09MRlNTTF9IQVBST1hZKSB8fCBcCisgICAgZGVmaW5lZChXT0xGU1NMX01ZU1FMX0NPTVBBVElCTEUpIHx8IGRlZmluZWQoT1BFTlNTTF9BTEwpIHx8IFwKKyAgICBkZWZpbmVkKEhBVkVfTElHSFRZKSB8fCBkZWZpbmVkKEhBVkVfU1RVTk5FTCkKKworI2luY2x1ZGUgPHdvbGZzc2wvZXJyb3Itc3NsLmg+CisKKyNkZWZpbmUgT1BFTlNTTF9TVFJJTkcgICAgV09MRlNTTF9TVFJJTkcKKyNkZWZpbmUgT1BFTlNTTF9DU1RSSU5HICAgV09MRlNTTF9TVFJJTkcKKworI2RlZmluZSBUTFNFWFRfVFlQRV9hcHBsaWNhdGlvbl9sYXllcl9wcm90b2NvbF9uZWdvdGlhdGlvbiAgICAxNgorCisjZGVmaW5lIE9QRU5TU0xfTlBOX1VOU1VQUE9SVEVEIDAKKyNkZWZpbmUgT1BFTlNTTF9OUE5fTkVHT1RJQVRFRCAgMQorI2RlZmluZSBPUEVOU1NMX05QTl9OT19PVkVSTEFQICAyCisKKy8qIE5naW54IGNoZWNrcyB0aGVzZSB0byBzZWUgaWYgdGhlIGVycm9yIHdhcyBhIGhhbmRzaGFrZSBlcnJvci4gKi8KKyNkZWZpbmUgU1NMX1JfQkFEX0NIQU5HRV9DSVBIRVJfU1BFQyAgICAgICAgICAgICAgIExFTkdUSF9FUlJPUgorI2RlZmluZSBTU0xfUl9CTE9DS19DSVBIRVJfUEFEX0lTX1dST05HICAgICAgICAgICAgQlVGRkVSX0UKKyNkZWZpbmUgU1NMX1JfRElHRVNUX0NIRUNLX0ZBSUxFRCAgICAgICAgICAgICAgICAgIFZFUklGWV9NQUNfRVJST1IKKyNkZWZpbmUgU1NMX1JfRVJST1JfSU5fUkVDRUlWRURfQ0lQSEVSX0xJU1QgICAgICAgIFNVSVRFU19FUlJPUgorI2RlZmluZSBTU0xfUl9FWENFU1NJVkVfTUVTU0FHRV9TSVpFICAgICAgICAgICAgICAgQlVGRkVSX0VSUk9SCisjZGVmaW5lIFNTTF9SX0xFTkdUSF9NSVNNQVRDSCAgICAgICAgICAgICAgICAgICAgICBMRU5HVEhfRVJST1IKKyNkZWZpbmUgU1NMX1JfTk9fQ0lQSEVSU19TUEVDSUZJRUQgICAgICAgICAgICAgICAgIFNVSVRFU19FUlJPUgorI2RlZmluZSBTU0xfUl9OT19DT01QUkVTU0lPTl9TUEVDSUZJRUQgICAgICAgICAgICAgQ09NUFJFU1NJT05fRVJST1IKKyNkZWZpbmUgU1NMX1JfTk9fU0hBUkVEX0NJUEhFUiAgICAgICAgICAgICAgICAgICAgIE1BVENIX1NVSVRFX0VSUk9SCisjZGVmaW5lIFNTTF9SX1JFQ09SRF9MRU5HVEhfTUlTTUFUQ0ggICAgICAgICAgICAgICBIQU5EU0hBS0VfU0laRV9FUlJPUgorI2RlZmluZSBTU0xfUl9VTkVYUEVDVEVEX01FU1NBR0UgICAgICAgICAgICAgICAgICAgT1VUX09GX09SREVSX0UKKyNkZWZpbmUgU1NMX1JfVU5FWFBFQ1RFRF9SRUNPUkQgICAgICAgICAgICAgICAgICAgIFNBTklUWV9NU0dfRQorI2RlZmluZSBTU0xfUl9VTktOT1dOX0FMRVJUX1RZUEUgICAgICAgICAgICAgICAgICAgQlVGRkVSX0VSUk9SCisjZGVmaW5lIFNTTF9SX1VOS05PV05fUFJPVE9DT0wgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX0VSUk9SCisjZGVmaW5lIFNTTF9SX1dST05HX1ZFUlNJT05fTlVNQkVSICAgICAgICAgICAgICAgICBWRVJTSU9OX0VSUk9SCisjZGVmaW5lIFNTTF9SX0RFQ1JZUFRJT05fRkFJTEVEX09SX0JBRF9SRUNPUkRfTUFDICBFTkNSWVBUX0VSUk9SCisjZGVmaW5lIFNTTF9SX0hUVFBTX1BST1hZX1JFUVVFU1QgICAgICAgICAgICAgICAgICBQQVJTRV9FUlJPUgorI2RlZmluZSBTU0xfUl9IVFRQX1JFUVVFU1QgICAgICAgICAgICAgICAgICAgICAgICAgUEFSU0VfRVJST1IKKyNkZWZpbmUgU1NMX1JfVU5TVVBQT1JURURfUFJPVE9DT0wgICAgICAgICAgICAgICAgIFZFUlNJT05fRVJST1IKKyNkZWZpbmUgU1NMX1JfQ0VSVElGSUNBVEVfVkVSSUZZX0ZBSUxFRCAgICAgICAgICAgIFZFUklGWV9DRVJUX0VSUk9SCisKKworI2lmZGVmIEhBVkVfU0VTU0lPTl9USUNLRVQKKyNkZWZpbmUgU1NMX09QX05PX1RJQ0tFVCAgICAgICAgICAgICAgICAgIFNTTF9PUF9OT19USUNLRVQKKyNkZWZpbmUgU1NMX0NUUkxfU0VUX1RMU0VYVF9USUNLRVRfS0VZX0NCIDcyCisjZW5kaWYKKworI2RlZmluZSBPUEVOU1NMX2NvbmZpZwkgICAgICAgICAgICAgICAgd29sZlNTTF9PUEVOU1NMX2NvbmZpZworI2RlZmluZSBPUEVOU1NMX21lbWR1cCAgICAgICAgICAgICAgICAgIHdvbGZTU0xfT1BFTlNTTF9tZW1kdXAKKyNkZWZpbmUgT1BFTlNTTF9jbGVhbnNlICAgICAgICAgICAgICAgICB3b2xmU1NMX09QRU5TU0xfY2xlYW5zZQorI2RlZmluZSBTU0xfQ1RYX2dldF90aW1lb3V0ICAgICAgICAgICAgIHdvbGZTU0xfU1NMX0NUWF9nZXRfdGltZW91dAorI2RlZmluZSBTU0xfQ1RYX3NldF90bXBfZWNkaCAgICAgICAgICAgIHdvbGZTU0xfU1NMX0NUWF9zZXRfdG1wX2VjZGgKKyNkZWZpbmUgU1NMX0NUWF9yZW1vdmVfc2Vzc2lvbiAgICAgICAgICB3b2xmU1NMX1NTTF9DVFhfcmVtb3ZlX3Nlc3Npb24KKyNkZWZpbmUgU1NMX2dldF9yYmlvICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1NTTF9nZXRfcmJpbworI2RlZmluZSBTU0xfZ2V0X3diaW8gICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfU1NMX2dldF93YmlvCisjZGVmaW5lIFNTTF9kb19oYW5kc2hha2UgICAgICAgICAgICAgICAgd29sZlNTTF9TU0xfZG9faGFuZHNoYWtlCisjZGVmaW5lIFNTTF9pbl9pbml0ICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9TU0xfaW5faW5pdAorI2RlZmluZSBTU0xfaW5fY29ubmVjdF9pbml0ICAgICAgICAgICAgIHdvbGZTU0xfU1NMX2luX2Nvbm5lY3RfaW5pdAorI2RlZmluZSBTU0xfZ2V0MF9zZXNzaW9uICAgICAgICAgICAgICAgIHdvbGZTU0xfU1NMX2dldDBfc2Vzc2lvbgorI2RlZmluZSBTU0xfQ1RYX3NldF90bHNleHRfdGlja2V0X2tleV9jYiB3b2xmU1NMX0NUWF9zZXRfdGxzZXh0X3RpY2tldF9rZXlfY2IKKyNkZWZpbmUgU1NMX0NUWF9zZXRfdGxzZXh0X3N0YXR1c19jYiAgICB3b2xmU1NMX0NUWF9zZXRfdGxzZXh0X3N0YXR1c19jYgorI2RlZmluZSBTU0xfQ1RYX2dldF9leHRyYV9jaGFpbl9jZXJ0cyAgIHdvbGZTU0xfQ1RYX2dldF9leHRyYV9jaGFpbl9jZXJ0cworI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19udW0gICAgICAgICAgIHdvbGZTU0xfc2tfV09MRlNTTF9TVFJJTkdfbnVtCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlICAgICAgICAgd29sZlNTTF9za19XT0xGU1NMX1NUUklOR192YWx1ZQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbnVtICAgICAgICAgIHdvbGZTU0xfc2tfV09MRlNTTF9TVFJJTkdfbnVtCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR192YWx1ZSAgICAgICAgKFdPTEZTU0xfU1RSSU5HKil3b2xmU1NMX3NrX1dPTEZTU0xfU1RSSU5HX3ZhbHVlCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX2ZyZWUgICAgICAgICAgd29sZlNTTF9za19mcmVlCisjZGVmaW5lIFNTTF9nZXQwX2FscG5fc2VsZWN0ZWQgICAgICAgICAgd29sZlNTTF9nZXQwX2FscG5fc2VsZWN0ZWQKKyNkZWZpbmUgU1NMX3NlbGVjdF9uZXh0X3Byb3RvICAgICAgICAgICB3b2xmU1NMX3NlbGVjdF9uZXh0X3Byb3RvCisjZGVmaW5lIFNTTF9DVFhfc2V0X2FscG5fc2VsZWN0X2NiICAgICAgd29sZlNTTF9DVFhfc2V0X2FscG5fc2VsZWN0X2NiCisjZGVmaW5lIFNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2FkdmVydGlzZWRfY2IgIHdvbGZTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZlcnRpc2VkX2NiCisjZGVmaW5lIFNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiIHdvbGZTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYgorI2RlZmluZSBTU0xfc2V0X2FscG5fcHJvdG9zICAgICAgICAgICAgIHdvbGZTU0xfc2V0X2FscG5fcHJvdG9zCisjZGVmaW5lIFNTTF9nZXQwX25leHRfcHJvdG9fbmVnb3RpYXRlZCAgd29sZlNTTF9nZXQwX25leHRfcHJvdG9fbmVnb3RpYXRlZAorI2RlZmluZSBTU0xfaXNfc2VydmVyICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfaXNfc2VydmVyCisKKyNlbmRpZiAvKiBXT0xGU1NMX05HSU5YIHx8IFdPTEZTU0xfSEFQUk9YWSB8fCBXT0xGU1NMX01ZU1FMX0NPTVBBVElCTEUgfHwKKyAgICAgICAgICBPUEVOU1NMX0FMTCB8fCBIQVZFX0xJR0hUWSAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSAmJiBkZWZpbmVkKEhBVkVfRUNDKQorI2RlZmluZSBTU0xfQ1RYX3NldDFfY3VydmVzX2xpc3QgICAgICAgIHdvbGZTU0xfQ1RYX3NldDFfY3VydmVzX2xpc3QKKyNkZWZpbmUgU1NMX3NldDFfY3VydmVzX2xpc3QgICAgICAgICAgICB3b2xmU1NMX3NldDFfY3VydmVzX2xpc3QKKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorI2RlZmluZSBTU0xfQ1RYX2FkZF9jbGllbnRfQ0EgICAgICAgICAgIHdvbGZTU0xfQ1RYX2FkZF9jbGllbnRfQ0EKKyNkZWZpbmUgU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkICAgICAgICB3b2xmU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkCisjZGVmaW5lIFNTTF9DVFhfc2V0X3NycF91c2VybmFtZSAgICAgICAgd29sZlNTTF9DVFhfc2V0X3NycF91c2VybmFtZQorI2RlZmluZSBTU0xfQ1RYX3NldF9zcnBfc3RyZW5ndGggICAgICAgIHdvbGZTU0xfQ1RYX3NldF9zcnBfc3RyZW5ndGgKKyNkZWZpbmUgU1NMX2dldF9TU0xfQ1RYICAgICAgICAgICAgICAgICB3b2xmU1NMX2dldF9TU0xfQ1RYCisjZGVmaW5lIFNTTF9nZXQwX3BhcmFtICAgICAgICAgICAgICAgICAgd29sZlNTTF9nZXQwX3BhcmFtCisjZGVmaW5lIFNTTF9DVFhfZ2V0MF9wYXJhbSAgICAgICAgICAgICAgd29sZlNTTF9DVFhfZ2V0MF9wYXJhbQorI2RlZmluZSBTU0xfQ1RYX3NldDFfcGFyYW0gICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX3NldDFfcGFyYW0KKyNkZWZpbmUgU1NMX2dldF9zcnBfdXNlcm5hbWUgICAgICAgICAgICB3b2xmU1NMX2dldF9zcnBfdXNlcm5hbWUKKworI2RlZmluZSBFUlJfTlVNX0VSUk9SUyAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFNOX3BrY3M5X2VtYWlsQWRkcmVzcyAgICAgICAgICAgIkVtYWlsIgorI2RlZmluZSBMTl9wa2NzOV9lbWFpbEFkZHJlc3MgICAgICAgICAgICJlbWFpbEFkZHJlc3MiCisjZGVmaW5lIE5JRF9wa2NzOV9lbWFpbEFkZHJlc3MgICAgICAgICAgNDgKKyNkZWZpbmUgT0JKX3BrY3M5X2VtYWlsQWRkcmVzcyAgICAgICAgICAxTCwyTCw4NDBMLDExMzUzOUwsMUwsOUwsMUwKKworI2RlZmluZSBTU0xfZ2V0X3JiaW8gICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfU1NMX2dldF9yYmlvCisjZGVmaW5lIFNTTF9nZXRfd2JpbyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9TU0xfZ2V0X3diaW8KKyNkZWZpbmUgU1NMX2RvX2hhbmRzaGFrZSAgICAgICAgICAgICAgICB3b2xmU1NMX1NTTF9kb19oYW5kc2hha2UKKworI2lmIGRlZmluZWQoV09MRlNTTF9FQVJMWV9EQVRBKQorI2RlZmluZSBTU0xfZ2V0X2Vhcmx5X2RhdGFfc3RhdHVzICAgICAgIHdvbGZTU0xfZ2V0X2Vhcmx5X2RhdGFfc3RhdHVzCisjZW5kaWYKKworI2VuZGlmICAvKiBPUEVOU1NMX0VYVFJBICovCisKKy8qIGNpcGhlciBzdWl0ZXMgZm9yIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVExTMV9DS19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgICAgICAgICAgICAoMHhjMDEzKQorI2RlZmluZSBUTFMxX0NLX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSAgICAgICAgICAgICgweGMwMTQpCisjZGVmaW5lIFRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ICAgICAgICAgKDB4YzAyZikKKyNkZWZpbmUgVExTMV9DS19FQ0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYgICAoMHhjY2E4KQorI2RlZmluZSBUTFMxX0NLX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgICAgICgweGMwMDkpCisjZGVmaW5lIFRMUzFfQ0tfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgICAgKDB4YzAwYSkKKyNkZWZpbmUgVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgICAgICAoMHhjMDJiKQorI2RlZmluZSBUTFMxX0NLX0VDREhFX0VDRFNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2ICgweGNjYTkpCisKKyNkZWZpbmUgWDUwOV9TVE9SRV9nZXQwX29iamVjdHMgICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfZ2V0MF9vYmplY3RzCisjZGVmaW5lIHNrX1g1MDlfT0JKRUNUX251bSAgICAgICAgICAgICAgd29sZlNTTF9za19YNTA5X09CSkVDVF9udW0KKyNkZWZpbmUgc2tfWDUwOV9PQkpFQ1RfdmFsdWUgICAgICAgICAgICB3b2xmU1NMX3NrX1g1MDlfT0JKRUNUX3ZhbHVlCisjZGVmaW5lIHNrX1g1MDlfT0JKRUNUX2RlbGV0ZSAgICAgICAgICAgd29sZlNTTF9za19YNTA5X09CSkVDVF9kZWxldGUKKyNkZWZpbmUgWDUwOV9PQkpFQ1RfZnJlZSAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfT0JKRUNUX2ZyZWUKKyNkZWZpbmUgWDUwOV9PQkpFQ1RfZ2V0X3R5cGUoeCkgICAgICAgICAwCisjaWYgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSKSAmJiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMCisjZGVmaW5lIE9wZW5TU0xfdmVyc2lvbih4KSAgICAgICAgICAgICAgd29sZlNTTF9PcGVuU1NMX3ZlcnNpb24oeCkKKyNlbHNlCisjZGVmaW5lIE9wZW5TU0xfdmVyc2lvbih4KSAgICAgICAgICAgICAgd29sZlNTTF9PcGVuU1NMX3ZlcnNpb24oKQorI2VuZGlmCisKKyNpZm5kZWYgTk9fV09MRlNTTF9TVFVCCisjZGVmaW5lIE9CSl9jcmVhdGVfb2JqZWN0cyguLi4pCisjZW5kaWYKKworI2RlZmluZSBTU0xfc2V0X3Bza191c2Vfc2Vzc2lvbl9jYWxsYmFjayAgICB3b2xmU1NMX3NldF9wc2tfdXNlX3Nlc3Npb25fY2FsbGJhY2sKKyNkZWZpbmUgU1NMX1NFU1NJT05faXNfcmVzdW1hYmxlICAgIHdvbGZTU0xfU0VTU0lPTl9pc19yZXN1bWFibGUKK3R5cGVkZWYgV09MRlNTTF9DT05GX0NUWCBTU0xfQ09ORl9DVFg7CisKKyNkZWZpbmUgU1NMX0NPTkZfQ1RYX25ldyAgICAgICAgICAgICAgICB3b2xmU1NMX0NPTkZfQ1RYX25ldworI2RlZmluZSBTU0xfQ09ORl9DVFhfZnJlZSAgICAgICAgICAgICAgIHdvbGZTU0xfQ09ORl9DVFhfZnJlZQorI2RlZmluZSBTU0xfQ09ORl9DVFhfc2V0X3NzbF9jdHggICAgICAgIHdvbGZTU0xfQ09ORl9DVFhfc2V0X3NzbF9jdHgKKyNkZWZpbmUgU1NMX0NPTkZfQ1RYX3NldF9mbGFncyAgICAgICAgICB3b2xmU1NMX0NPTkZfQ1RYX3NldF9mbGFncworI2RlZmluZSBTU0xfQ09ORl9DVFhfZmluaXNoICAgICAgICAgICAgIHdvbGZTU0xfQ09ORl9DVFhfZmluaXNoCisjZGVmaW5lIFNTTF9DT05GX2NtZCAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DT05GX2NtZAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogd29sZlNTTF9vcGVuc3NsX2hfXyAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9zc2wyMy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9zc2wyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjM2RkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3NzbDIzLmgKQEAgLTAsMCArMSBAQAorLyogc3NsMjMuaCBmb3Igb3BlbnNzbCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9zdGFjay5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC9zdGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDA1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3N0YWNrLmgKQEAgLTAsMCArMSw1OCBAQAorLyogc3RhY2suaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIHN0YWNrLmggZm9yIG9wZW5TU0wgKi8KKworI2lmbmRlZiBXT0xGU1NMX1NUQUNLX0hfCisjZGVmaW5lIFdPTEZTU0xfU1RBQ0tfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiB2b2lkICgqd29sZlNTTF9za19mcmVlZnVuYykodm9pZCAqKTsKKworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NrX0dFTkVSSUNfcG9wX2ZyZWUoV09MRlNTTF9TVEFDSyogc2ssIHdvbGZTU0xfc2tfZnJlZWZ1bmMpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NrX0dFTkVSSUNfZnJlZShXT0xGU1NMX1NUQUNLICopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2tfR0VORVJJQ19wdXNoKFdPTEZTU0xfU1RBQ0sgKnNrLCB2b2lkICpkYXRhKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9za19wb3BfZnJlZShXT0xGU1NMX1NUQUNLICpzdCwgdm9pZCAoKmZ1bmMpICh2b2lkICopKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfU1RBQ0sgKndvbGZTU0xfc2tfbmV3X251bGwodm9pZCk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NrX0NJUEhFUl9wdXNoKFdPTEZTU0xfU1RBQ0sgKnN0LFdPTEZTU0xfQ0lQSEVSICpjaXBoZXIpOworV09MRlNTTF9BUEkgV09MRlNTTF9DSVBIRVIqIHdvbGZTU0xfc2tfQ0lQSEVSX3BvcChXT0xGX1NUQUNLX09GKFdPTEZTU0xfQ0lQSEVSKSogc2spOworV09MRlNTTF9BUEkgV09MRlNTTF9TVEFDSyogd29sZlNTTF9za19uZXdfY2lwaGVyKHZvaWQpOworCisjZGVmaW5lIE9QRU5TU0xfc2tfZnJlZSAgICAgICB3b2xmU1NMX3NrX2ZyZWUKKyNkZWZpbmUgT1BFTlNTTF9za19wb3BfZnJlZSAgIHdvbGZTU0xfc2tfcG9wX2ZyZWUKKyNkZWZpbmUgT1BFTlNTTF9za19uZXdfbnVsbCAgIHdvbGZTU0xfc2tfbmV3X251bGwKKyNkZWZpbmUgT1BFTlNTTF9za19wdXNoICAgICAgIHdvbGZTU0xfc2tfcHVzaAorCisvKiBwcm92aWRlcyBvbGRlciBPcGVuU1NMIEFQSSBjb21wYXRpYmlsaXR5ICAqLworI2RlZmluZSBza19mcmVlICAgICAgICAgT1BFTlNTTF9za19mcmVlCisjZGVmaW5lIHNrX3BvcF9mcmVlICAgICBPUEVOU1NMX3NrX3BvcF9mcmVlCisjZGVmaW5lIHNrX25ld19udWxsICAgICBPUEVOU1NMX3NrX25ld19udWxsCisjZGVmaW5lIHNrX3B1c2ggICAgICAgICBPUEVOU1NMX3NrX3B1c2gKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC90bHMxLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3RsczEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTkyM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC90bHMxLmgKQEAgLTAsMCArMSw0NiBAQAorLyogdGxzMS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaWZuZGVmIFdPTEZTU0xfT1BFTlNTTF9UTFMxX0hfCisjZGVmaW5lIFdPTEZTU0xfT1BFTlNTTF9UTFMxX0hfCisKKyNpZm5kZWYgVExTMV9WRVJTSU9OCisjZGVmaW5lIFRMUzFfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgMHgwMzAxCisjZW5kaWYKKworI2lmbmRlZiBUTFMxXzFfVkVSU0lPTgorI2RlZmluZSBUTFMxXzFfVkVSU0lPTiAgICAgICAgICAgICAgICAgIDB4MDMwMgorI2VuZGlmCisKKyNpZm5kZWYgVExTMV8yX1ZFUlNJT04KKyNkZWZpbmUgVExTMV8yX1ZFUlNJT04gICAgICAgICAgICAgICAgICAweDAzMDMKKyNlbmRpZgorCisjaWZuZGVmIFRMUzFfM19WRVJTSU9OCisjZGVmaW5lIFRMUzFfM19WRVJTSU9OICAgICAgICAgICAgICAgICAgMHgwMzA0CisjZW5kaWYKKworI2lmbmRlZiBUTFNfTUFYX1ZFUlNJT04KKyNkZWZpbmUgVExTX01BWF9WRVJTSU9OICAgICAgICAgICAgICAgICBUTFMxXzNfVkVSU0lPTgorI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX09QRU5TU0xfVExTMV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC90eHRfZGIuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvdHh0X2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0NTk1OAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvdHh0X2RiLmgKQEAgLTAsMCArMSw1OSBAQAorLyogdHh0X2RiLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisjaWZuZGVmIFdPTEZTU0xfVFhUX0RCX0hfCisjZGVmaW5lIFdPTEZTU0xfVFhUX0RCX0hfCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc3NsLmg+CisKKyNkZWZpbmUgV09MRlNTTF9UWFRfREJfTUFYX0ZJRUxEUyAxMAorCitzdHJ1Y3QgV09MRlNTTF9UWFRfREIgeworICAgIGludCBudW1fZmllbGRzOworICAgIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9TVFJJTkcpICpkYXRhOworICAgIGxvbmcgZXJyb3I7CisgICAgbG9uZyBhcmcxOworICAgIGxvbmcgYXJnMjsKKyAgICB3b2xmX3NrX2NvbXBhcmVfY2IgY29tcFtXT0xGU1NMX1RYVF9EQl9NQVhfRklFTERTXTsKKyAgICB3b2xmX3NrX2hhc2hfY2IgaGFzaF9mbltXT0xGU1NMX1RYVF9EQl9NQVhfRklFTERTXTsKK307CisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfVFhUX0RCIFdPTEZTU0xfVFhUX0RCOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX1RYVF9EQiAqd29sZlNTTF9UWFRfREJfcmVhZChXT0xGU1NMX0JJTyAqaW4sIGludCBudW0pOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX1RYVF9EQl93cml0ZShXT0xGU1NMX0JJTyAgKm91dCwgV09MRlNTTF9UWFRfREIgKmRiKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1RYVF9EQl9pbnNlcnQoV09MRlNTTF9UWFRfREIgKmRiLCBXT0xGU1NMX1NUUklORyAqcm93KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9UWFRfREJfZnJlZShXT0xGU1NMX1RYVF9EQiAqZGIpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfVFhUX0RCX2NyZWF0ZV9pbmRleChXT0xGU1NMX1RYVF9EQiAqZGIsIGludCBmaWVsZCwKKyAgICAgICAgdm9pZCogcXVhbCwgd29sZl9za19oYXNoX2NiIGhhc2gsIHdvbGZfc2tfY29tcGFyZV9jYiBjbXApOworV09MRlNTTF9BUEkgV09MRlNTTF9TVFJJTkcgKndvbGZTU0xfVFhUX0RCX2dldF9ieV9pbmRleChXT0xGU1NMX1RYVF9EQiAqZGIsCisgICAgICAgIGludCBpZHgsIFdPTEZTU0xfU1RSSU5HICp2YWx1ZSk7CisKKyNkZWZpbmUgVFhUX0RCICAgICAgICAgICAgICAgICAgV09MRlNTTF9UWFRfREIKKworI2RlZmluZSBUWFRfREJfcmVhZCAgICAgICAgICAgICB3b2xmU1NMX1RYVF9EQl9yZWFkCisjZGVmaW5lIFRYVF9EQl93cml0ZSAgICAgICAgICAgIHdvbGZTU0xfVFhUX0RCX3dyaXRlCisjZGVmaW5lIFRYVF9EQl9pbnNlcnQgICAgICAgICAgIHdvbGZTU0xfVFhUX0RCX2luc2VydAorI2RlZmluZSBUWFRfREJfZnJlZSAgICAgICAgICAgICB3b2xmU1NMX1RYVF9EQl9mcmVlCisjZGVmaW5lIFRYVF9EQl9jcmVhdGVfaW5kZXggICAgIHdvbGZTU0xfVFhUX0RCX2NyZWF0ZV9pbmRleAorI2RlZmluZSBUWFRfREJfZ2V0X2J5X2luZGV4ICAgICB3b2xmU1NMX1RYVF9EQl9nZXRfYnlfaW5kZXgKKworI2VuZGlmIC8qIFdPTEZTU0xfVFhUX0RCX0hfICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3VpLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3VpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1MzkzMAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wvdWkuaApAQCAtMCwwICsxLDIgQEAKKy8qIHVpLmggZm9yIG9wZW5zc2wgKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC94NTA5LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3g1MDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjdhZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC94NTA5LmgKQEAgLTAsMCArMSw0NCBAQAorLyogeDUwOS5oIGZvciBvcGVuc3NsICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2NyeXB0by5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9kaC5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9lYy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9lY2RzYS5oPgorI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9wa2NzNy5oPgorCisvKiB3b2xmU1NMX1g1MDlfcHJpbnRfZXggZmxhZ3MgKi8KKyNkZWZpbmUgWDUwOV9GTEFHX0NPTVBBVCAgICAgICAgKDBVTCkKKyNkZWZpbmUgWDUwOV9GTEFHX05PX0hFQURFUiAgICAgKDFVTCA8PCAwKQorI2RlZmluZSBYNTA5X0ZMQUdfTk9fVkVSU0lPTiAgICAoMVVMIDw8IDEpCisjZGVmaW5lIFg1MDlfRkxBR19OT19TRVJJQUwgICAgICgxVUwgPDwgMikKKyNkZWZpbmUgWDUwOV9GTEFHX05PX1NJR05BTUUgICAgKDFVTCA8PCAzKQorI2RlZmluZSBYNTA5X0ZMQUdfTk9fSVNTVUVSICAgICAoMVVMIDw8IDQpCisjZGVmaW5lIFg1MDlfRkxBR19OT19WQUxJRElUWSAgICgxVUwgPDwgNSkKKyNkZWZpbmUgWDUwOV9GTEFHX05PX1NVQkpFQ1QgICAgKDFVTCA8PCA2KQorI2RlZmluZSBYNTA5X0ZMQUdfTk9fUFVCS0VZICAgICAoMVVMIDw8IDcpCisjZGVmaW5lIFg1MDlfRkxBR19OT19FWFRFTlNJT05TICgxVUwgPDwgOCkKKyNkZWZpbmUgWDUwOV9GTEFHX05PX1NJR0RVTVAgICAgKDFVTCA8PCA5KQorI2RlZmluZSBYNTA5X0ZMQUdfTk9fQVVYICAgICAgICAoMVVMIDw8IDEwKQorI2RlZmluZSBYNTA5X0ZMQUdfTk9fQVRUUklCVVRFUyAoMVVMIDw8IDExKQorI2RlZmluZSBYNTA5X0ZMQUdfTk9fSURTICAgICAgICAoMVVMIDw8IDEyKQorCisjZGVmaW5lIFhOX0ZMQUdfRk5fU04gICAgICAgICAgIDAKKyNkZWZpbmUgWE5fRkxBR19PTkVMSU5FICAgICAgICAgMAorI2RlZmluZSBYTl9GTEFHX0NPTVBBVCAgICAgICAgICAwCisjZGVmaW5lIFhOX0ZMQUdfUkZDMjI1MyAgICAgICAgIDEKKyNkZWZpbmUgWE5fRkxBR19TRVBfQ09NTUFfUExVUyAgKDEgPDwgMTYpCisjZGVmaW5lIFhOX0ZMQUdfU0VQX0NQTFVTX1NQQyAgICgyIDw8IDE2KQorI2RlZmluZSBYTl9GTEFHX1NFUF9TUExVU19TUEMgICAoMyA8PCAxNikKKyNkZWZpbmUgWE5fRkxBR19TRVBfTVVMVElMSU5FICAgKDQgPDwgMTYpCisjZGVmaW5lIFhOX0ZMQUdfU0VQX01BU0sgICAgICAgICgweEYgPDwgMTYpCisjZGVmaW5lIFhOX0ZMQUdfRE5fUkVWICAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBYTl9GTEFHX0ZOX0xOICAgICAgICAgICAoMSA8PCAyMSkKKyNkZWZpbmUgWE5fRkxBR19GTl9PSUQgICAgICAgICAgKDIgPDwgMjEpCisjZGVmaW5lIFhOX0ZMQUdfRk5fTk9ORSAgICAgICAgICgzIDw8IDIxKQorI2RlZmluZSBYTl9GTEFHX0ZOX01BU0sgICAgICAgICAoMyA8PCAyMSkKKyNkZWZpbmUgWE5fRkxBR19TUENfRVEgICAgICAgICAgKDEgPDwgMjMpCisjZGVmaW5lIFhOX0ZMQUdfRFVNUF9VTktOT1dOX0ZJRUxEUyAoMSA8PCAyNCkKKyNkZWZpbmUgWE5fRkxBR19GTl9BTElHTiAgICAgICAgKDEgPDwgMjUpCisKKyNkZWZpbmUgWE5fRkxBR19NVUxUSUxJTkUgICAgICAgMHhGRkZGCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3g1MDlfdmZ5LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3g1MDlfdmZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2MWJhMAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wZW5zc2wveDUwOV92ZnkuaApAQCAtMCwwICsxLDQ1IEBACisvKiB4NTA5X3ZmeS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogeDUwOV92ZnkuaCBmb3Igb3BlblNTTCAqLworCisjaWZuZGVmIFdPTEZTU0xfeDUwOV92ZnlfSF8KKyNkZWZpbmUgV09MRlNTTF94NTA5X3ZmeV9IXworCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3g1MDl2My5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX1FUKSB8fCBkZWZpbmVkKE9QRU5TU0xfQUxMKQorICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX3NldF9wdXJwb3NlKFdPTEZTU0xfWDUwOV9TVE9SRV9DVFggKmN0eCwgaW50IHB1cnBvc2UpOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1FUCisgICAgI2RlZmluZSBYNTA5X1NUT1JFX0NUWF9zZXRfcHVycG9zZSAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9zZXRfcHVycG9zZQorI2VuZGlmCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX3g1MDlfdmZ5X0hfICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9vcGVuc3NsL3g1MDl2My5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC94NTA5djMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQ3MWRkCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3BlbnNzbC94NTA5djMuaApAQCAtMCwwICsxLDEzMyBAQAorLyogeDUwOXYzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiB4NTA5djMuaCBmb3Igb3BlblNTTCAqLworCisjaWZuZGVmIFdPTEZTU0xfeDUwOXYzX0gKKyNkZWZpbmUgV09MRlNTTF94NTA5djNfSAorCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2NvbmYuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvYmlvLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgWDUwOV9QVVJQT1NFX1NTTF9DTElFTlQgICAgICAgMAorI2RlZmluZSBYNTA5X1BVUlBPU0VfU1NMX1NFUlZFUiAgICAgICAxCisKKyNkZWZpbmUgTlNfU1NMX0NMSUVOVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBOU19TU0xfU0VSVkVSICAgICAgICAgICAgICAgICAxCisKKy8qIEZvcndhcmQgcmVmZXJlbmNlICovCisKK3R5cGVkZWYgdm9pZCAqKCpYNTA5VjNfRVhUX0QySSkodm9pZCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqLCBsb25nKTsKK3R5cGVkZWYgaW50ICgqWDUwOVYzX0VYVF9JMkQpICh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiopOwordHlwZWRlZiBTVEFDS19PRihDT05GX1ZBTFVFKSAqKCpYNTA5VjNfRVhUX0kyVikgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgV09MRlNTTF92M19leHRfbWV0aG9kICptZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmV4dCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmV4dGxpc3QpOwordHlwZWRlZiBjaGFyICooKlg1MDlWM19FWFRfSTJTKShzdHJ1Y3QgV09MRlNTTF92M19leHRfbWV0aG9kICptZXRob2QsIHZvaWQgKmV4dCk7Cit0eXBlZGVmIGludCAoKlg1MDlWM19FWFRfSTJSKSAoc3RydWN0IFdPTEZTU0xfdjNfZXh0X21ldGhvZCAqbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmV4dCwgQklPICpvdXQsIGludCBpbmRlbnQpOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF92M19leHRfbWV0aG9kIFg1MDlWM19FWFRfTUVUSE9EOworCitzdHJ1Y3QgV09MRlNTTF92M19leHRfbWV0aG9kIHsKKyAgICBpbnQgZXh0X25pZDsKKyAgICBpbnQgZXh0X2ZsYWdzOworICAgIHZvaWQgKnVzcl9kYXRhOworICAgIFg1MDlWM19FWFRfRDJJIGQyaTsKKyAgICBYNTA5VjNfRVhUX0kyRCBpMmQ7CisgICAgWDUwOVYzX0VYVF9JMlYgaTJ2OworICAgIFg1MDlWM19FWFRfSTJTIGkyczsKKyAgICBYNTA5VjNfRVhUX0kyUiBpMnI7Cit9OworCitzdHJ1Y3QgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiB7CisgICAgV09MRlNTTF9BU04xX09CSkVDVCAqb2JqOworICAgIFdPTEZTU0xfQVNOMV9CT09MRUFOIGNyaXQ7CisgICAgQVNOMV9PQ1RFVF9TVFJJTkcgdmFsdWU7IC8qIERFUiBmb3JtYXQgb2YgZXh0ZW5zaW9uICovCisgICAgV09MRlNTTF92M19leHRfbWV0aG9kIGV4dF9tZXRob2Q7CisgICAgV09MRlNTTF9TVEFDSyogZXh0X3NrOyAvKiBGb3IgZXh0ZW5zaW9uIHNwZWNpZmljIGRhdGEgKi8KK307CisKKyNkZWZpbmUgV09MRlNTTF9BU04xX0JPT0xFQU4gaW50CisjZGVmaW5lIEdFTl9PVEhFUk5BTUUgICAwCisjZGVmaW5lIEdFTl9FTUFJTCAgICAgICAxCisjZGVmaW5lIEdFTl9ETlMgICAgICAgICAyCisjZGVmaW5lIEdFTl9YNDAwICAgICAgICAzCisjZGVmaW5lIEdFTl9ESVJOQU1FICAgICA0CisjZGVmaW5lIEdFTl9FRElQQVJUWSAgICA1CisjZGVmaW5lIEdFTl9VUkkgICAgICAgICA2CisjZGVmaW5lIEdFTl9JUEFERCAgICAgICA3CisjZGVmaW5lIEdFTl9SSUQgICAgICAgICA4CisKKyNkZWZpbmUgR0VORVJBTF9OQU1FICAgICAgIFdPTEZTU0xfR0VORVJBTF9OQU1FCisKKyNkZWZpbmUgWDUwOVYzX0NUWCAgICAgICAgIFdPTEZTU0xfWDUwOVYzX0NUWAorCisjZGVmaW5lIENUWF9URVNUICAgICAgICAgICAweDEKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9BVVRIT1JJVFlfS0VZSUQgQVVUSE9SSVRZX0tFWUlEOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9CQVNJQ19DT05TVFJBSU5UUyBCQVNJQ19DT05TVFJBSU5UUzsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQUNDRVNTX0RFU0NSSVBUSU9OIEFDQ0VTU19ERVNDUklQVElPTjsKK3R5cGVkZWYgV09MRl9TVEFDS19PRihXT0xGU1NMX0FDQ0VTU19ERVNDUklQVElPTikgV09MRlNTTF9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQkFTSUNfQ09OU1RSQUlOVFMqIHdvbGZTU0xfQkFTSUNfQ09OU1RSQUlOVFNfbmV3KHZvaWQpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0JBU0lDX0NPTlNUUkFJTlRTX2ZyZWUoV09MRlNTTF9CQVNJQ19DT05TVFJBSU5UUyAqYmMpOworV09MRlNTTF9BUEkgV09MRlNTTF9BVVRIT1JJVFlfS0VZSUQqIHdvbGZTU0xfQVVUSE9SSVRZX0tFWUlEX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9BVVRIT1JJVFlfS0VZSURfZnJlZShXT0xGU1NMX0FVVEhPUklUWV9LRVlJRCAqaWQpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF92M19leHRfbWV0aG9kKiB3b2xmU1NMX1g1MDlWM19FWFRfZ2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9FWFRFTlNJT04qIGV4KTsKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfWDUwOVYzX0VYVF9kMmkoV09MRlNTTF9YNTA5X0VYVEVOU0lPTiogZXgpOworV09MRlNTTF9BUEkgY2hhciogd29sZlNTTF9pMnNfQVNOMV9TVFJJTkcoV09MRlNTTF92M19leHRfbWV0aG9kICptZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0FTTjFfU1RSSU5HICpzKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlWM19FWFRfcHJpbnQoV09MRlNTTF9CSU8gKm91dCwKKyAgICAgICAgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiAqZXh0LCB1bnNpZ25lZCBsb25nIGZsYWcsIGludCBpbmRlbnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOVYzX0VYVF9hZGRfbmNvbmYoV09MRlNTTF9DT05GICpjb25mLCBXT0xGU1NMX1g1MDlWM19DVFggKmN0eCwKKyAgICAgICAgY29uc3QgY2hhciAqc2VjdGlvbiwgV09MRlNTTF9YNTA5ICpjZXJ0KTsKKworI2RlZmluZSBCQVNJQ19DT05TVFJBSU5UU19mcmVlICAgIHdvbGZTU0xfQkFTSUNfQ09OU1RSQUlOVFNfZnJlZQorI2RlZmluZSBBVVRIT1JJVFlfS0VZSURfZnJlZSAgICAgIHdvbGZTU0xfQVVUSE9SSVRZX0tFWUlEX2ZyZWUKKyNkZWZpbmUgU1NMX0NUWF9nZXRfY2VydF9zdG9yZSh4KSB3b2xmU1NMX0NUWF9nZXRfY2VydF9zdG9yZSAoKFdPTEZTU0xfQ1RYKikgKHgpKQorI2RlZmluZSBBU04xX0lOVEVHRVIgICAgICAgICAgICAgIFdPTEZTU0xfQVNOMV9JTlRFR0VSCisjZGVmaW5lIEFTTjFfT0NURVRfU1RSSU5HICAgICAgICAgV09MRlNTTF9BU04xX1NUUklORworI2RlZmluZSBYNTA5VjNfRVhUX2dldCAgICAgICAgICAgIHdvbGZTU0xfWDUwOVYzX0VYVF9nZXQKKyNkZWZpbmUgWDUwOVYzX0VYVF9kMmkgICAgICAgICAgICB3b2xmU1NMX1g1MDlWM19FWFRfZDJpCisjZGVmaW5lIFg1MDlWM19FWFRfYWRkX25jb25mICAgICAgd29sZlNTTF9YNTA5VjNfRVhUX2FkZF9uY29uZgorI2lmbmRlZiBOT19XT0xGU1NMX1NUVUIKKyNkZWZpbmUgWDUwOVYzX3BhcnNlX2xpc3QoLi4uKSAgICBOVUxMCisjZW5kaWYKKyNkZWZpbmUgaTJzX0FTTjFfT0NURVRfU1RSSU5HICAgICB3b2xmU1NMX2kyc19BU04xX1NUUklORworI2RlZmluZSBYNTA5VjNfRVhUX3ByaW50ICAgICAgICAgIHdvbGZTU0xfWDUwOVYzX0VYVF9wcmludAorI2RlZmluZSBYNTA5VjNfRVhUX2NvbmZfbmlkICAgICAgIHdvbGZTU0xfWDUwOVYzX0VYVF9jb25mX25pZAorI2RlZmluZSBYNTA5VjNfc2V0X2N0eCAgICAgICAgICAgIHdvbGZTU0xfWDUwOVYzX3NldF9jdHgKKyNpZm5kZWYgTk9fV09MRlNTTF9TVFVCCisjZGVmaW5lIFg1MDlWM19zZXRfbmNvbmYoLi4uKQorI2VuZGlmCisjZGVmaW5lIFg1MDlWM19zZXRfY3R4X3Rlc3QoY3R4KSAgd29sZlNTTF9YNTA5VjNfc2V0X2N0eChjdHgsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIENUWF9URVNUKQorI2RlZmluZSBYNTA5VjNfc2V0X2N0eF9ub2RiICAgICAgIHdvbGZTU0xfWDUwOVYzX3NldF9jdHhfbm9kYgorI2RlZmluZSBYNTA5djNfZ2V0X2V4dF9jb3VudCAgICAgIHdvbGZTU0xfc2tfbnVtCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wdGlvbnMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL29wdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWQwOGJmCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvb3B0aW9ucy5oCkBAIC0wLDAgKzEsMzc1IEBACisvKiB3b2xmc3NsIG9wdGlvbnMuaAorICogZ2VuZXJhdGVkIGZyb20gY29uZmlndXJlIG9wdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLiAoZm9ybWVybHkga25vd24gYXMgQ3lhU1NMKQorICoKKyAqLworCisjaWZuZGVmIFdPTEZTU0xfT1BUSU9OU19ICisjZGVmaW5lIFdPTEZTU0xfT1BUSU9OU19ICisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjdW5kZWYgIFdPTEZTU0xfVExTMTMKKyNkZWZpbmUgV09MRlNTTF9UTFMxMworCisjdW5kZWYgIEhBVkVfVExTX0VYVEVOU0lPTlMKKyNkZWZpbmUgSEFWRV9UTFNfRVhURU5TSU9OUworCisjdW5kZWYgIEhBVkVfU1VQUE9SVEVEX0NVUlZFUworI2RlZmluZSBIQVZFX1NVUFBPUlRFRF9DVVJWRVMKKworI3VuZGVmICBIQVZFX0ZGREhFXzIwNDgKKyNkZWZpbmUgSEFWRV9GRkRIRV8yMDQ4CisKKyN1bmRlZiAgSEFWRV9FWFRfQ0FDSEUKKyNkZWZpbmUgSEFWRV9FWFRfQ0FDSEUKKworI3VuZGVmICBXT0xGU1NMX1ZFUklGWV9DQl9BTExfQ0VSVFMKKyNkZWZpbmUgV09MRlNTTF9WRVJJRllfQ0JfQUxMX0NFUlRTCisKKyN1bmRlZiAgV09MRlNTTF9FWFRSQV9BTEVSVFMKKyNkZWZpbmUgV09MRlNTTF9FWFRSQV9BTEVSVFMKKworI3VuZGVmICBPUEVOU1NMX0VYVFJBCisjZGVmaW5lIE9QRU5TU0xfRVhUUkEKKworI3VuZGVmICBXT0xGU1NMX0FMV0FZU19WRVJJRllfQ0IKKyNkZWZpbmUgV09MRlNTTF9BTFdBWVNfVkVSSUZZX0NCCisKKyN1bmRlZiAgT1BFTlNTTF9BTEwKKyNkZWZpbmUgT1BFTlNTTF9BTEwKKworI3VuZGVmICBXT0xGU1NMX0VJVEhFUl9TSURFCisjZGVmaW5lIFdPTEZTU0xfRUlUSEVSX1NJREUKKworI3VuZGVmICBXQ19SU0FfTk9fUEFERElORworI2RlZmluZSBXQ19SU0FfTk9fUEFERElORworCisjdW5kZWYgIFdDX1JTQV9QU1MKKyNkZWZpbmUgV0NfUlNBX1BTUworCisjdW5kZWYgIFdPTEZTU0xfUFNTX0xPTkdfU0FMVAorI2RlZmluZSBXT0xGU1NMX1BTU19MT05HX1NBTFQKKworI2lmbmRlZiBXT0xGU1NMX09QVElPTlNfSUdOT1JFX1NZUworI3VuZGVmICBfUE9TSVhfVEhSRUFEUworI2RlZmluZSBfUE9TSVhfVEhSRUFEUworI2VuZGlmCisKKyN1bmRlZiAgSEFWRV9USFJFQURfTFMKKyNkZWZpbmUgSEFWRV9USFJFQURfTFMKKworI3VuZGVmICBURk1fVElNSU5HX1JFU0lTVEFOVAorI2RlZmluZSBURk1fVElNSU5HX1JFU0lTVEFOVAorCisjdW5kZWYgIEVDQ19USU1JTkdfUkVTSVNUQU5UCisjZGVmaW5lIEVDQ19USU1JTkdfUkVTSVNUQU5UCisKKyN1bmRlZiAgV0NfUlNBX0JMSU5ESU5HCisjZGVmaW5lIFdDX1JTQV9CTElORElORworCisjdW5kZWYgIFRFU1RfSVBWNgorI2RlZmluZSBURVNUX0lQVjYKKworI3VuZGVmICBXT0xGU1NMX0lQVjYKKyNkZWZpbmUgV09MRlNTTF9JUFY2CisKKyN1bmRlZiAgV09MRlNTTF9XUEFTCisjZGVmaW5lIFdPTEZTU0xfV1BBUworCisjdW5kZWYgIEhBVkVfU0VDUkVUX0NBTExCQUNLCisjZGVmaW5lIEhBVkVfU0VDUkVUX0NBTExCQUNLCisKKyN1bmRlZiAgV09MRlNTTF9QVUJMSUNfRUNDX0FERF9EQkwKKyNkZWZpbmUgV09MRlNTTF9QVUJMSUNfRUNDX0FERF9EQkwKKworI3VuZGVmICBXT0xGU1NMX0FMV0FZU19WRVJJRllfQ0IKKyNkZWZpbmUgV09MRlNTTF9BTFdBWVNfVkVSSUZZX0NCCisKKyN1bmRlZiAgV09MRlNTTF9BTFdBWVNfS0VFUF9TTkkKKyNkZWZpbmUgV09MRlNTTF9BTFdBWVNfS0VFUF9TTkkKKworI3VuZGVmICBIQVZFX0VYX0RBVEEKKyNkZWZpbmUgSEFWRV9FWF9EQVRBCisKKyN1bmRlZiAgSEFWRV9FWFRfQ0FDSEUKKyNkZWZpbmUgSEFWRV9FWFRfQ0FDSEUKKworI3VuZGVmICBXT0xGU1NMX0VJVEhFUl9TSURFCisjZGVmaW5lIFdPTEZTU0xfRUlUSEVSX1NJREUKKworI3VuZGVmICBPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwKKyNkZWZpbmUgT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMCisKKyN1bmRlZiAgV09MRlNTTF9QVUJMSUNfTVAKKyNkZWZpbmUgV09MRlNTTF9QVUJMSUNfTVAKKworI3VuZGVmICBXT0xGU1NMX0RFUl9MT0FECisjZGVmaW5lIFdPTEZTU0xfREVSX0xPQUQKKworI3VuZGVmICBBVE9NSUNfVVNFUgorI2RlZmluZSBBVE9NSUNfVVNFUgorCisjdW5kZWYgIFdPTEZTU0xfS0VZX0dFTgorI2RlZmluZSBXT0xGU1NMX0tFWV9HRU4KKworI3VuZGVmICBXT0xGU1NMX0RFU19FQ0IKKyNkZWZpbmUgV09MRlNTTF9ERVNfRUNCCisKKyN1bmRlZiAgRk9SVFJFU1MKKyNkZWZpbmUgRk9SVFJFU1MKKworI3VuZGVmICBXT0xGU1NMX0FMV0FZU19WRVJJRllfQ0IKKyNkZWZpbmUgV09MRlNTTF9BTFdBWVNfVkVSSUZZX0NCCisKKyN1bmRlZiAgV09MRlNTTF9BRVNfQ09VTlRFUgorI2RlZmluZSBXT0xGU1NMX0FFU19DT1VOVEVSCisKKyN1bmRlZiAgV09MRlNTTF9BRVNfRElSRUNUCisjZGVmaW5lIFdPTEZTU0xfQUVTX0RJUkVDVAorCisjdW5kZWYgIFdPTEZTU0xfREVSX0xPQUQKKyNkZWZpbmUgV09MRlNTTF9ERVJfTE9BRAorCisjdW5kZWYgIFdPTEZTU0xfS0VZX0dFTgorI2RlZmluZSBXT0xGU1NMX0tFWV9HRU4KKworI3VuZGVmICBIQVZFX0FFU0NDTQorI2RlZmluZSBIQVZFX0FFU0NDTQorCisjdW5kZWYgIFdPTEZTU0xfVVNFX0FMSUdOCisjZGVmaW5lIFdPTEZTU0xfVVNFX0FMSUdOCisKKyN1bmRlZiAgV09MRlNTTF9TSEE1MTIKKyNkZWZpbmUgV09MRlNTTF9TSEE1MTIKKworI3VuZGVmICBXT0xGU1NMX1NIQTM4NAorI2RlZmluZSBXT0xGU1NMX1NIQTM4NAorCisjdW5kZWYgIFNFU1NJT05fQ0VSVFMKKyNkZWZpbmUgU0VTU0lPTl9DRVJUUworCisjdW5kZWYgIFdPTEZTU0xfQ0VSVF9HRU4KKyNkZWZpbmUgV09MRlNTTF9DRVJUX0dFTgorCisjdW5kZWYgIEhBVkVfSEtERgorI2RlZmluZSBIQVZFX0hLREYKKworI3VuZGVmICBIQVZFX0VDQworI2RlZmluZSBIQVZFX0VDQworCisjdW5kZWYgIFRGTV9FQ0MyNTYKKyNkZWZpbmUgVEZNX0VDQzI1NgorCisjdW5kZWYgIEVDQ19TSEFNSVIKKyNkZWZpbmUgRUNDX1NIQU1JUgorCisjdW5kZWYgIEhBVkVfQ09NUF9LRVkKKyNkZWZpbmUgSEFWRV9DT01QX0tFWQorCisjdW5kZWYgIFdPTEZTU0xfQUxMT1dfVExTVjEwCisjZGVmaW5lIFdPTEZTU0xfQUxMT1dfVExTVjEwCisKKyN1bmRlZiAgV0NfUlNBX1BTUworI2RlZmluZSBXQ19SU0FfUFNTCisKKyN1bmRlZiAgSEFWRV9BTk9OCisjZGVmaW5lIEhBVkVfQU5PTgorCisjdW5kZWYgIFdPTEZTU0xfQ01BQworI2RlZmluZSBXT0xGU1NMX0NNQUMKKworI3VuZGVmICBXT0xGU1NMX0FFU19ESVJFQ1QKKyNkZWZpbmUgV09MRlNTTF9BRVNfRElSRUNUCisKKyN1bmRlZiAgTk9fSEMxMjgKKyNkZWZpbmUgTk9fSEMxMjgKKworI3VuZGVmICBOT19SQUJCSVQKKyNkZWZpbmUgTk9fUkFCQklUCisKKyN1bmRlZiAgSEFWRV9QT0xZMTMwNQorI2RlZmluZSBIQVZFX1BPTFkxMzA1CisKKyN1bmRlZiAgSEFWRV9PTkVfVElNRV9BVVRICisjZGVmaW5lIEhBVkVfT05FX1RJTUVfQVVUSAorCisjdW5kZWYgIEhBVkVfQ0hBQ0hBCisjZGVmaW5lIEhBVkVfQ0hBQ0hBCisKKyN1bmRlZiAgSEFWRV9IQVNIRFJCRworI2RlZmluZSBIQVZFX0hBU0hEUkJHCisKKyN1bmRlZiAgSEFWRV9PQ1NQCisjZGVmaW5lIEhBVkVfT0NTUAorCisjdW5kZWYgIEhBVkVfT1BFTlNTTF9DTUQKKyNkZWZpbmUgSEFWRV9PUEVOU1NMX0NNRAorCisjdW5kZWYgIEhBVkVfVExTX0VYVEVOU0lPTlMKKyNkZWZpbmUgSEFWRV9UTFNfRVhURU5TSU9OUworCisjdW5kZWYgIEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1QKKyNkZWZpbmUgSEFWRV9DRVJUSUZJQ0FURV9TVEFUVVNfUkVRVUVTVAorCisjdW5kZWYgIEhBVkVfVExTX0VYVEVOU0lPTlMKKyNkZWZpbmUgSEFWRV9UTFNfRVhURU5TSU9OUworCisjdW5kZWYgIEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1RfVjIKKyNkZWZpbmUgSEFWRV9DRVJUSUZJQ0FURV9TVEFUVVNfUkVRVUVTVF9WMgorCisjdW5kZWYgIEhBVkVfQ1JMCisjZGVmaW5lIEhBVkVfQ1JMCisKKyN1bmRlZiAgSEFWRV9UTFNfRVhURU5TSU9OUworI2RlZmluZSBIQVZFX1RMU19FWFRFTlNJT05TCisKKyN1bmRlZiAgSEFWRV9TTkkKKyNkZWZpbmUgSEFWRV9TTkkKKworI3VuZGVmICBIQVZFX1RMU19FWFRFTlNJT05TCisjZGVmaW5lIEhBVkVfVExTX0VYVEVOU0lPTlMKKworI3VuZGVmICBIQVZFX1NVUFBPUlRFRF9DVVJWRVMKKyNkZWZpbmUgSEFWRV9TVVBQT1JURURfQ1VSVkVTCisKKyN1bmRlZiAgSEFWRV9UTFNfRVhURU5TSU9OUworI2RlZmluZSBIQVZFX1RMU19FWFRFTlNJT05TCisKKyN1bmRlZiAgSEFWRV9TRVNTSU9OX1RJQ0tFVAorI2RlZmluZSBIQVZFX1NFU1NJT05fVElDS0VUCisKKyN1bmRlZiAgSEFWRV9FWFRFTkRFRF9NQVNURVIKKyNkZWZpbmUgSEFWRV9FWFRFTkRFRF9NQVNURVIKKworI3VuZGVmICBIQVZFX1RMU19FWFRFTlNJT05TCisjZGVmaW5lIEhBVkVfVExTX0VYVEVOU0lPTlMKKworI3VuZGVmICBIQVZFX1NOSQorI2RlZmluZSBIQVZFX1NOSQorCisjdW5kZWYgIEhBVkVfTUFYX0ZSQUdNRU5UCisjZGVmaW5lIEhBVkVfTUFYX0ZSQUdNRU5UCisKKyN1bmRlZiAgSEFWRV9UUlVOQ0FURURfSE1BQworI2RlZmluZSBIQVZFX1RSVU5DQVRFRF9ITUFDCisKKyN1bmRlZiAgSEFWRV9BTFBOCisjZGVmaW5lIEhBVkVfQUxQTgorCisjdW5kZWYgIEhBVkVfVFJVU1RFRF9DQQorI2RlZmluZSBIQVZFX1RSVVNURURfQ0EKKworI3VuZGVmICBIQVZFX1NVUFBPUlRFRF9DVVJWRVMKKyNkZWZpbmUgSEFWRV9TVVBQT1JURURfQ1VSVkVTCisKKyN1bmRlZiAgSEFWRV9MSUdIVFkKKyNkZWZpbmUgSEFWRV9MSUdIVFkKKworI3VuZGVmICBIQVZFX1dPTEZTU0xfU1NMX0gKKyNkZWZpbmUgSEFWRV9XT0xGU1NMX1NTTF9IIDEKKworI3VuZGVmICBIQVZFX0VYX0RBVEEKKyNkZWZpbmUgSEFWRV9FWF9EQVRBCisKKyN1bmRlZiAgT1BFTlNTTF9BTEwKKyNkZWZpbmUgT1BFTlNTTF9BTEwKKworI3VuZGVmICBPUEVOU1NMX05PX1NTTDIKKyNkZWZpbmUgT1BFTlNTTF9OT19TU0wyCisKKyN1bmRlZiAgT1BFTlNTTF9OT19DT01QCisjZGVmaW5lIE9QRU5TU0xfTk9fQ09NUAorCisjdW5kZWYgIE9QRU5TU0xfTk9fU1NMMworI2RlZmluZSBPUEVOU1NMX05PX1NTTDMKKworI3VuZGVmICBTSU5HTEVfVEhSRUFERUQKKyNkZWZpbmUgU0lOR0xFX1RIUkVBREVECisKKyN1bmRlZiAgV09MRlNTTF9BTFdBWVNfVkVSSUZZX0NCCisjZGVmaW5lIFdPTEZTU0xfQUxXQVlTX1ZFUklGWV9DQgorCisjdW5kZWYgIFdPTEZTU0xfQUxXQVlTX0tFRVBfU05JCisjZGVmaW5lIFdPTEZTU0xfQUxXQVlTX0tFRVBfU05JCisKKyN1bmRlZiAgS0VFUF9PVVJfQ0VSVAorI2RlZmluZSBLRUVQX09VUl9DRVJUCisKKyN1bmRlZiAgS0VFUF9QRUVSX0NFUlQKKyNkZWZpbmUgS0VFUF9QRUVSX0NFUlQKKworI3VuZGVmICBIQVZFX0VYVF9DQUNIRQorI2RlZmluZSBIQVZFX0VYVF9DQUNIRQorCisjdW5kZWYgIEhBVkVfRVhfREFUQQorI2RlZmluZSBIQVZFX0VYX0RBVEEKKworI3VuZGVmICBXT0xGU1NMX0NFUlRfR0VOCisjZGVmaW5lIFdPTEZTU0xfQ0VSVF9HRU4KKworI3VuZGVmICBIQVZFX0VOQ1JZUFRfVEhFTl9NQUMKKyNkZWZpbmUgSEFWRV9FTkNSWVBUX1RIRU5fTUFDCisKKyN1bmRlZiAgV09MRlNTTF9DRVJUX0VYVAorI2RlZmluZSBXT0xGU1NMX0NFUlRfRVhUCisKKyN1bmRlZiAgSEFWRV9TVFVOTkVMCisjZGVmaW5lIEhBVkVfU1RVTk5FTAorCisjdW5kZWYgIFdPTEZTU0xfQUxXQVlTX1ZFUklGWV9DQgorI2RlZmluZSBXT0xGU1NMX0FMV0FZU19WRVJJRllfQ0IKKworI3VuZGVmICBXT0xGU1NMX0FMV0FZU19LRUVQX1NOSQorI2RlZmluZSBXT0xGU1NMX0FMV0FZU19LRUVQX1NOSQorCisjdW5kZWYgIEhBVkVfRVhfREFUQQorI2RlZmluZSBIQVZFX0VYX0RBVEEKKworI3VuZGVmICBXT0xGU1NMX0RFU19FQ0IKKyNkZWZpbmUgV09MRlNTTF9ERVNfRUNCCisKKyN1bmRlZiAgV09MRlNTTF9TSUdORVJfREVSX0NFUlQKKyNkZWZpbmUgV09MRlNTTF9TSUdORVJfREVSX0NFUlQKKworI3VuZGVmICBXT0xGU1NMX0VOQ1JZUFRFRF9LRVlTCisjZGVmaW5lIFdPTEZTU0xfRU5DUllQVEVEX0tFWVMKKworI3VuZGVmICBVU0VfRkFTVF9NQVRICisjZGVmaW5lIFVTRV9GQVNUX01BVEgKKworI3VuZGVmICBXQ19OT19BU1lOQ19USFJFQURJTkcKKyNkZWZpbmUgV0NfTk9fQVNZTkNfVEhSRUFESU5HCisKKyN1bmRlZiAgSEFWRV9BRVNfS0VZV1JBUAorI2RlZmluZSBIQVZFX0FFU19LRVlXUkFQCisKKyN1bmRlZiAgV09MRlNTTF9BRVNfRElSRUNUCisjZGVmaW5lIFdPTEZTU0xfQUVTX0RJUkVDVAorCisjdW5kZWYgIEhBVkVfREhfREVGQVVMVF9QQVJBTVMKKyNkZWZpbmUgSEFWRV9ESF9ERUZBVUxUX1BBUkFNUworCisjdW5kZWYgIEdDTV9UQUJMRV80QklUCisjZGVmaW5lIEdDTV9UQUJMRV80QklUCisKKyN1bmRlZiAgSEFWRV9BRVNHQ00KKyNkZWZpbmUgSEFWRV9BRVNHQ00KKworI3VuZGVmICBIQVZFX1dDX0lOVFJPU1BFQ1RJT04KKyNkZWZpbmUgSEFWRV9XQ19JTlRST1NQRUNUSU9OCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogV09MRlNTTF9PUFRJT05TX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvc25pZmZlci5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvc25pZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNDg0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9zbmlmZmVyLmgKQEAgLTAsMCArMSwyNTggQEAKKy8qIHNuaWZmZXIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisjaWZuZGVmIFdPTEZTU0xfU05JRkZFUl9ICisjZGVmaW5lIFdPTEZTU0xfU05JRkZFUl9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaWZkZWYgX1dJTjMyCisgICAgI2lmZGVmIFNTTF9TTklGRkVSX0VYUE9SVFMKKyAgICAgICAgI2RlZmluZSBTU0xfU05JRkZFUl9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBTU0xfU05JRkZFUl9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisgICAgI2VuZGlmCisjZWxzZQorICAgICNkZWZpbmUgU1NMX1NOSUZGRVJfQVBJCisjZW5kaWYgLyogX1dJTjMyICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogQHBhcmFtIHR5cGVLOiAoZm9ybWVybHkga2V5VHlwZSkgd2FzIHNoYWRvd2luZyBhIGdsb2JhbCBkZWNsYXJhdGlvbiBpbgorICogICAgICAgICAgICAgICAgd29sZnNzbC93b2xmY3J5cHQvYXNuLmggbGluZSAxNzUKKyAqLworV09MRlNTTF9BUEkKK1NTTF9TTklGRkVSX0FQSSBpbnQgc3NsX1NldFByaXZhdGVLZXkoY29uc3QgY2hhciogYWRkcmVzcywgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGtleUZpbGUsIGludCB0eXBlSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGFzc3dvcmQsIGNoYXIqIGVycm9yKTsKKworV09MRlNTTF9BUEkKK1NTTF9TTklGRkVSX0FQSSBpbnQgc3NsX1NldFByaXZhdGVLZXlCdWZmZXIoY29uc3QgY2hhciogYWRkcmVzcywgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGtleUJ1ZiwgaW50IGtleVN6LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGVLLCBjb25zdCBjaGFyKiBwYXNzd29yZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGVycm9yKTsKKworCitXT0xGU1NMX0FQSQorU1NMX1NOSUZGRVJfQVBJIGludCBzc2xfU2V0TmFtZWRQcml2YXRlS2V5KGNvbnN0IGNoYXIqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYWRkcmVzcywgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioga2V5RmlsZSwgaW50IHR5cGVLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkLCBjaGFyKiBlcnJvcik7CisKK1dPTEZTU0xfQVBJCitTU0xfU05JRkZFUl9BUEkgaW50IHNzbF9TZXROYW1lZFByaXZhdGVLZXlCdWZmZXIoY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhZGRyZXNzLCBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBrZXlCdWYsIGludCBrZXlTeiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGVLLCBjb25zdCBjaGFyKiBwYXNzd29yZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogZXJyb3IpOworCitXT0xGU1NMX0FQSSAKK1NTTF9TTklGRkVSX0FQSSBpbnQgc3NsX1NldEVwaGVtZXJhbEtleShjb25zdCBjaGFyKiBhZGRyZXNzLCBpbnQgcG9ydCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioga2V5RmlsZSwgaW50IHR5cGVLZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkLCBjaGFyKiBlcnJvcik7CisKK1dPTEZTU0xfQVBJIAorU1NMX1NOSUZGRVJfQVBJIGludCBzc2xfU2V0RXBoZW1lcmFsS2V5QnVmZmVyKGNvbnN0IGNoYXIqIGFkZHJlc3MsIGludCBwb3J0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBrZXlCdWYsIGludCBrZXlTeiwgaW50IHR5cGVLZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkLCBjaGFyKiBlcnJvcik7CisKKworV09MRlNTTF9BUEkgCitTU0xfU05JRkZFUl9BUEkgaW50IHNzbF9TZXROYW1lZEVwaGVtZXJhbEtleShjb25zdCBjaGFyKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYWRkcmVzcywgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBrZXlGaWxlLCBpbnQgdHlwZUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkLCBjaGFyKiBlcnJvcik7CisKK1dPTEZTU0xfQVBJIAorU1NMX1NOSUZGRVJfQVBJIGludCBzc2xfU2V0TmFtZWRFcGhlbWVyYWxLZXlCdWZmZXIoY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFkZHJlc3MsIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioga2V5QnVmLCBpbnQga2V5U3osIGludCB0eXBlS2V5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkLCBjaGFyKiBlcnJvcik7CisKK1dPTEZTU0xfQVBJCitTU0xfU05JRkZFUl9BUEkgaW50IHNzbF9EZWNvZGVQYWNrZXQoY29uc3QgdW5zaWduZWQgY2hhciogcGFja2V0LCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqKiBkYXRhLCBjaGFyKiBlcnJvcik7CisKK1dPTEZTU0xfQVBJCitTU0xfU05JRkZFUl9BUEkgaW50IHNzbF9GcmVlRGVjb2RlQnVmZmVyKHVuc2lnbmVkIGNoYXIqKiBkYXRhLCBjaGFyKiBlcnJvcik7CisKK1dPTEZTU0xfQVBJCitTU0xfU05JRkZFUl9BUEkgaW50IHNzbF9GcmVlWmVyb0RlY29kZUJ1ZmZlcih1bnNpZ25lZCBjaGFyKiogZGF0YSwgaW50IHN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogZXJyb3IpOworCitXT0xGU1NMX0FQSQorU1NMX1NOSUZGRVJfQVBJIGludCBzc2xfVHJhY2UoY29uc3QgY2hhciogdHJhY2VGaWxlLCBjaGFyKiBlcnJvcik7CisKK1dPTEZTU0xfQVBJCitTU0xfU05JRkZFUl9BUEkgaW50IHNzbF9FbmFibGVSZWNvdmVyeShpbnQgb25PZmYsIGludCBtYXhNZW1vcnksIGNoYXIqIGVycm9yKTsKKworV09MRlNTTF9BUEkKK1NTTF9TTklGRkVSX0FQSSBpbnQgc3NsX0dldFNlc3Npb25TdGF0cyh1bnNpZ25lZCBpbnQqIGFjdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIHRvdGFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogcGVhaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG1heFNlc3Npb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbWlzc2VkRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIHJlYXNzZW1ibHlNZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogZXJyb3IpOworCitXT0xGU1NMX0FQSSB2b2lkIHNzbF9Jbml0U25pZmZlcih2b2lkKTsKKworV09MRlNTTF9BUEkgdm9pZCBzc2xfRnJlZVNuaWZmZXIodm9pZCk7CisKKworLyogc3NsX1NldFByaXZhdGVLZXkgdHlwZUtzICovCitlbnVtIHsKKyAgICBGSUxFVFlQRV9QRU0gPSAxLAorICAgIEZJTEVUWVBFX0RFUiA9IDIsCit9OworCisKKy8qCisgKiBOZXcgU25pZmZlciBBUEkgdGhhdCBwcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBUTFMgYW5kIGNpcGhlcgorICogaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBTU0wgc2Vzc2lvbi4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBTU0xJbmZvCit7CisgICAgdW5zaWduZWQgY2hhciAgaXNWYWxpZDsKKyAgICAgICAgICAgIC8qIGluZGljYXRlcyBpZiB0aGUgaW5mbyBpbiB0aGlzIHN0cnVjdCBpcyB2YWxpZDogMCA9IG5vLCAxID0geWVzICovCisgICAgdW5zaWduZWQgY2hhciAgcHJvdG9jb2xWZXJzaW9uTWFqb3I7ICAgIC8qIFNTTCBWZXJzaW9uOiBtYWpvciAqLworICAgIHVuc2lnbmVkIGNoYXIgIHByb3RvY29sVmVyc2lvbk1pbm9yOyAgICAvKiBTU0wgVmVyc2lvbjogbWlub3IgKi8KKyAgICB1bnNpZ25lZCBjaGFyICBzZXJ2ZXJDaXBoZXJTdWl0ZTA7ICAgICAgLyogZmlyc3QgYnl0ZSwgbm9ybWFsbHkgMCAqLworICAgIHVuc2lnbmVkIGNoYXIgIHNlcnZlckNpcGhlclN1aXRlOyAgICAgICAvKiBzZWNvbmQgYnl0ZSwgYWN0dWFsIHN1aXRlICovCisgICAgdW5zaWduZWQgY2hhciAgc2VydmVyQ2lwaGVyU3VpdGVOYW1lWzI1Nl07CisgICAgICAgICAgICAvKiBjaXBoZXIgbmFtZSwgZS5nLiwgIlRMU19SU0FfLi4uIiAqLworICAgIHVuc2lnbmVkIGNoYXIgIHNlcnZlck5hbWVJbmRpY2F0aW9uWzEyOF07CisgICAgdW5zaWduZWQgaW50ICAga2V5U2l6ZTsKK30gU1NMSW5mbzsKKworCitXT0xGU1NMX0FQSQorU1NMX1NOSUZGRVJfQVBJIGludCBzc2xfRGVjb2RlUGFja2V0V2l0aFNlc3Npb25JbmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcGFja2V0LCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcioqIGRhdGEsIFNTTEluZm8qIHNzbEluZm8sIGNoYXIqIGVycm9yKTsKKwordHlwZWRlZiB2b2lkICgqU1NMQ29ubkNiKShjb25zdCB2b2lkKiBzZXNzaW9uLCBTU0xJbmZvKiBpbmZvLCB2b2lkKiBjdHgpOworCitXT0xGU1NMX0FQSQorU1NMX1NOSUZGRVJfQVBJIGludCBzc2xfU2V0Q29ubmVjdGlvbkNiKFNTTENvbm5DYiBjYik7CisKK1dPTEZTU0xfQVBJCitTU0xfU05JRkZFUl9BUEkgaW50IHNzbF9TZXRDb25uZWN0aW9uQ3R4KHZvaWQqIGN0eCk7CisKKwordHlwZWRlZiBzdHJ1Y3QgU1NMU3RhdHMKK3sKKyAgICB1bnNpZ25lZCBsb25nIGludCBzc2xTdGFuZGFyZENvbm5zOworICAgIHVuc2lnbmVkIGxvbmcgaW50IHNzbENsaWVudEF1dGhDb25uczsKKyAgICB1bnNpZ25lZCBsb25nIGludCBzc2xSZXN1bWVkQ29ubnM7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3NsRXBoZW1lcmFsTWlzc2VzOworICAgIHVuc2lnbmVkIGxvbmcgaW50IHNzbFJlc3VtZU1pc3NlczsKKyAgICB1bnNpZ25lZCBsb25nIGludCBzc2xDaXBoZXJzVW5zdXBwb3J0ZWQ7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3NsS2V5c1VubWF0Y2hlZDsKKyAgICB1bnNpZ25lZCBsb25nIGludCBzc2xLZXlGYWlsczsKKyAgICB1bnNpZ25lZCBsb25nIGludCBzc2xEZWNvZGVGYWlsczsKKyAgICB1bnNpZ25lZCBsb25nIGludCBzc2xBbGVydHM7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3NsRGVjcnlwdGVkQnl0ZXM7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3NsRW5jcnlwdGVkQnl0ZXM7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3NsRW5jcnlwdGVkUGFja2V0czsKKyAgICB1bnNpZ25lZCBsb25nIGludCBzc2xEZWNyeXB0ZWRQYWNrZXRzOworICAgIHVuc2lnbmVkIGxvbmcgaW50IHNzbEtleU1hdGNoZXM7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3NsRW5jcnlwdGVkQ29ubnM7CisKKyAgICB1bnNpZ25lZCBsb25nIGludCBzc2xSZXN1bXB0aW9uVmFsaWQ7CisgICAgdW5zaWduZWQgbG9uZyBpbnQgc3NsUmVzdW1wdGlvbkluc2VydHM7Cit9IFNTTFN0YXRzOworCisKK1dPTEZTU0xfQVBJCitTU0xfU05JRkZFUl9BUEkgaW50IHNzbF9SZXNldFN0YXRpc3RpY3Modm9pZCk7CisKKworV09MRlNTTF9BUEkKK1NTTF9TTklGRkVSX0FQSSBpbnQgc3NsX1JlYWRTdGF0aXN0aWNzKFNTTFN0YXRzKiBzdGF0cyk7CisKKworV09MRlNTTF9BUEkKK1NTTF9TTklGRkVSX0FQSSBpbnQgc3NsX1JlYWRSZXNldFN0YXRpc3RpY3MoU1NMU3RhdHMqIHN0YXRzKTsKKworCit0eXBlZGVmIGludCAoKlNTTFdhdGNoQ2IpKHZvaWQqIHZTbmlmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogY2VydEhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2VydEhhc2hTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNlcnRDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjZXJ0Q2hhaW5TeiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGN0eCwgY2hhciogZXJyb3IpOworCitXT0xGU1NMX0FQSQorU1NMX1NOSUZGRVJfQVBJIGludCBzc2xfU2V0V2F0Y2hLZXlDYWxsYmFjayhTU0xXYXRjaENiIGNiLCBjaGFyKiBlcnJvcik7CisKK1dPTEZTU0xfQVBJCitTU0xfU05JRkZFUl9BUEkgaW50IHNzbF9TZXRXYXRjaEtleUNhbGxiYWNrX2V4KFNTTFdhdGNoQ2IgY2IsIGludCBkZXZJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGVycm9yKTsKKworV09MRlNTTF9BUEkKK1NTTF9TTklGRkVSX0FQSSBpbnQgc3NsX1NldFdhdGNoS2V5Q3R4KHZvaWQqIGN0eCwgY2hhciogZXJyb3IpOworCitXT0xGU1NMX0FQSQorU1NMX1NOSUZGRVJfQVBJIGludCBzc2xfU2V0V2F0Y2hLZXlfYnVmZmVyKHZvaWQqIHZTbmlmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioga2V5LCB1bnNpZ25lZCBpbnQga2V5U3osCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5VHlwZSwgY2hhciogZXJyb3IpOworCitXT0xGU1NMX0FQSQorU1NMX1NOSUZGRVJfQVBJIGludCBzc2xfU2V0V2F0Y2hLZXlfZmlsZSh2b2lkKiB2U25pZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGtleUZpbGUsIGludCBrZXlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGFzc3dvcmQsIGNoYXIqIGVycm9yKTsKKworCit0eXBlZGVmIGludCAoKlNTTFN0b3JlRGF0YUNiKShjb25zdCB1bnNpZ25lZCBjaGFyKiBkZWNyeXB0QnVmLAorICAgICAgICB1bnNpZ25lZCBpbnQgZGVjcnlwdEJ1ZlN6LCB1bnNpZ25lZCBpbnQgZGVjcnlwdEJ1Zk9mZnNldCwgdm9pZCogY3R4KTsKKworV09MRlNTTF9BUEkKK1NTTF9TTklGRkVSX0FQSSBpbnQgc3NsX1NldFN0b3JlRGF0YUNhbGxiYWNrKFNTTFN0b3JlRGF0YUNiIGNiKTsKKworV09MRlNTTF9BUEkKK1NTTF9TTklGRkVSX0FQSSBpbnQgc3NsX0RlY29kZVBhY2tldFdpdGhTZXNzaW9uSW5mb1N0b3JlRGF0YSgKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcGFja2V0LCBpbnQgbGVuZ3RoLCB2b2lkKiBjdHgsCisgICAgICAgIFNTTEluZm8qIHNzbEluZm8sIGNoYXIqIGVycm9yKTsKKworCitXT0xGU1NMX0FQSQorU1NMX1NOSUZGRVJfQVBJIGludCBzc2xfRGVjb2RlUGFja2V0V2l0aENoYWluKHZvaWQqIHZDaGFpbiwKKyAgICAgICAgdW5zaWduZWQgaW50IGNoYWluU3osIHVuc2lnbmVkIGNoYXIqKiBkYXRhLCBjaGFyKiBlcnJvcik7CisKKworV09MRlNTTF9BUEkKK1NTTF9TTklGRkVSX0FQSSBpbnQgc3NsX0RlY29kZVBhY2tldFdpdGhDaGFpblNlc3Npb25JbmZvU3RvcmVEYXRhKAorICAgICAgICB2b2lkKiB2Q2hhaW4sIHVuc2lnbmVkIGludCBjaGFpblN6LCB2b2lkKiBjdHgsIFNTTEluZm8qIHNzbEluZm8sCisgICAgICAgIGNoYXIqIGVycm9yKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiB3b2xmU1NMX1NOSUZGRVJfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9zbmlmZmVyX2Vycm9yLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9zbmlmZmVyX2Vycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA3ODhmOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3NuaWZmZXJfZXJyb3IuaApAQCAtMCwwICsxLDE0NSBAQAorLyogc25pZmZlcl9lcnJvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKyNpZm5kZWYgV09MRlNTTF9TTklGRkVSX0VSUk9SX0gKKyNkZWZpbmUgV09MRlNTTF9TTklGRkVSX0VSUk9SX0gKKworCisvKiBHZW5lcmFsIFNuaWZmZXIgRXJyb3IgKi8KKyNkZWZpbmUgV09MRlNTTF9TTklGRkVSX0VSUk9SIC0xCisKKy8qIFNuaWZmZXIgZmFpbGVkIGFuZCBpcyBpbiBGYXRhbCBzdGF0ZSAqLworI2RlZmluZSBXT0xGU1NMX1NOSUZGRVJfRkFUQUxfRVJST1IgLTIKKworLyogbmVlZCB0byBoYXZlIGVycm9ycyBhcyAjZGVmaW5lcyBzaW5jZSAucmMgZmlsZXMgY2FuJ3QgaGFuZGxlIGVudW1zICovCisvKiBuZWVkIHRvIHN0YXJ0IGF0IDEgYW5kIGdvIGluIG9yZGVyIGZvciBzYW1lIHJlYXNvbiAqLworCisjZGVmaW5lIE1FTU9SWV9TVFIgMQorI2RlZmluZSBORVdfU0VSVkVSX1NUUiAyCisjZGVmaW5lIElQX0NIRUNLX1NUUiAzCisjZGVmaW5lIFNFUlZFUl9OT1RfUkVHX1NUUiA0CisjZGVmaW5lIFRDUF9DSEVDS19TVFIgNQorI2RlZmluZSBTRVJWRVJfUE9SVF9OT1RfUkVHX1NUUiA2CisjZGVmaW5lIFJTQV9ERUNSWVBUX1NUUiA3CisjZGVmaW5lIFJTQV9ERUNPREVfU1RSIDgKKyNkZWZpbmUgQkFEX0NJUEhFUl9TUEVDX1NUUiA5CisjZGVmaW5lIFNFUlZFUl9IRUxMT19JTlBVVF9TVFIgMTAKKworI2RlZmluZSBCQURfU0VTU0lPTl9SRVNVTUVfU1RSIDExCisjZGVmaW5lIFNFUlZFUl9ESURfUkVTVU1QVElPTl9TVFIgMTIKKyNkZWZpbmUgQ0xJRU5UX0hFTExPX0lOUFVUX1NUUiAxMworI2RlZmluZSBDTElFTlRfUkVTVU1FX1RSWV9TVFIgMTQKKyNkZWZpbmUgSEFORFNIQUtFX0lOUFVUX1NUUiAxNQorI2RlZmluZSBHT1RfSEVMTE9fVkVSSUZZX1NUUiAxNgorI2RlZmluZSBHT1RfU0VSVkVSX0hFTExPX1NUUiAxNworI2RlZmluZSBHT1RfQ0VSVF9SRVFfU1RSIDE4CisjZGVmaW5lIEdPVF9TRVJWRVJfS0VZX0VYX1NUUiAxOQorI2RlZmluZSBHT1RfQ0VSVF9TVFIgMjAKKworI2RlZmluZSBHT1RfU0VSVkVSX0hFTExPX0RPTkVfU1RSIDIxCisjZGVmaW5lIEdPVF9GSU5JU0hFRF9TVFIgMjIKKyNkZWZpbmUgR09UX0NMSUVOVF9IRUxMT19TVFIgMjMKKyNkZWZpbmUgR09UX0NMSUVOVF9LRVlfRVhfU1RSIDI0CisjZGVmaW5lIEdPVF9DRVJUX1ZFUl9TVFIgMjUKKyNkZWZpbmUgR09UX1VOS05PV05fSEFORFNIQUtFX1NUUiAyNgorI2RlZmluZSBORVdfU0VTU0lPTl9TVFIgMjcKKyNkZWZpbmUgQkFEX05FV19TU0xfU1RSIDI4CisjZGVmaW5lIEdPVF9QQUNLRVRfU1RSIDI5CisjZGVmaW5lIE5PX0RBVEFfU1RSIDMwCisKKyNkZWZpbmUgQkFEX1NFU1NJT05fU1RSIDMxCisjZGVmaW5lIEdPVF9PTERfQ0xJRU5UX0hFTExPX1NUUiAzMgorI2RlZmluZSBPTERfQ0xJRU5UX0lOUFVUX1NUUiAzMworI2RlZmluZSBPTERfQ0xJRU5UX09LX1NUUiAzNAorI2RlZmluZSBCQURfT0xEX0NMSUVOVF9TVFIgMzUKKyNkZWZpbmUgQkFEX1JFQ09SRF9IRFJfU1RSIDM2CisjZGVmaW5lIFJFQ09SRF9JTlBVVF9TVFIgMzcKKyNkZWZpbmUgR09UX0hBTkRTSEFLRV9TVFIgMzgKKyNkZWZpbmUgQkFEX0hBTkRTSEFLRV9TVFIgMzkKKyNkZWZpbmUgR09UX0NIQU5HRV9DSVBIRVJfU1RSIDQwCisKKyNkZWZpbmUgR09UX0FQUF9EQVRBX1NUUiA0MQorI2RlZmluZSBCQURfQVBQX0RBVEFfU1RSIDQyCisjZGVmaW5lIEdPVF9BTEVSVF9TVFIgNDMKKyNkZWZpbmUgQU5PVEhFUl9NU0dfU1RSIDQ0CisjZGVmaW5lIFJFTU9WRV9TRVNTSU9OX1NUUiA0NQorI2RlZmluZSBLRVlfRklMRV9TVFIgNDYKKyNkZWZpbmUgQkFEX0lQVkVSX1NUUiA0NworI2RlZmluZSBCQURfUFJPVE9fU1RSIDQ4CisjZGVmaW5lIFBBQ0tFVF9IRFJfU0hPUlRfU1RSIDQ5CisjZGVmaW5lIEdPVF9VTktOT1dOX1JFQ09SRF9TVFIgNTAKKworI2RlZmluZSBCQURfVFJBQ0VfRklMRV9TVFIgNTEKKyNkZWZpbmUgRkFUQUxfRVJST1JfU1RSIDUyCisjZGVmaW5lIFBBUlRJQUxfSU5QVVRfU1RSIDUzCisjZGVmaW5lIEJVRkZFUl9FUlJPUl9TVFIgNTQKKyNkZWZpbmUgUEFSVElBTF9BRERfU1RSIDU1CisjZGVmaW5lIERVUExJQ0FURV9TVFIgNTYKKyNkZWZpbmUgT1VUX09GX09SREVSX1NUUiA1NworI2RlZmluZSBPVkVSTEFQX0RVUExJQ0FURV9TVFIgNTgKKyNkZWZpbmUgT1ZFUkxBUF9SRUFTU0VNQkxZX0JFR0lOX1NUUiA1OQorI2RlZmluZSBPVkVSTEFQX1JFQVNTRU1CTFlfRU5EX1NUUiA2MAorCisjZGVmaW5lIE1JU1NFRF9DTElFTlRfSEVMTE9fU1RSIDYxCisjZGVmaW5lIEdPVF9IRUxMT19SRVFVRVNUX1NUUiA2MgorI2RlZmluZSBHT1RfU0VTU0lPTl9USUNLRVRfU1RSIDYzCisjZGVmaW5lIEJBRF9JTlBVVF9TVFIgNjQKKyNkZWZpbmUgQkFEX0RFQ1JZUFRfVFlQRSA2NQorI2RlZmluZSBCQURfRklOSVNIRURfTVNHIDY2CisjZGVmaW5lIEJBRF9DT01QUkVTU0lPTl9TVFIgNjcKKyNkZWZpbmUgQkFEX0RFUklWRV9TVFIgNjgKKyNkZWZpbmUgQUNLX01JU1NFRF9TVFIgNjkKKyNkZWZpbmUgQkFEX0RFQ1JZUFQgICAgNzAKKworI2RlZmluZSBERUNSWVBUX0tFWVNfTk9UX1NFVFVQIDcxCisjZGVmaW5lIENMSUVOVF9IRUxMT19MQVRFX0tFWV9TVFIgNzIKKyNkZWZpbmUgR09UX0NFUlRfU1RBVFVTX1NUUiA3MworI2RlZmluZSBSU0FfS0VZX01JU1NJTkdfU1RSIDc0CisjZGVmaW5lIE5PX1NFQ1VSRV9SRU5FR09USUFUSU9OIDc1CisjZGVmaW5lIEJBRF9TRVNTSU9OX1NUQVRTIDc2CisjZGVmaW5lIFJFQVNTRU1CTFlfTUFYX1NUUiA3NworI2RlZmluZSBEUk9QUElOR19MT1NUX0ZSQUdfU1RSIDc4CisjZGVmaW5lIERST1BQSU5HX1BBUlRJQUxfUkVDT1JEIDc5CisjZGVmaW5lIENMRUFSX0FDS19GQVVMVCA4MAorCisjZGVmaW5lIEJBRF9ERUNSWVBUX1NJWkUgODEKKyNkZWZpbmUgRVhURU5ERURfTUFTVEVSX0hBU0hfU1RSIDgyCisjZGVmaW5lIFNQTElUX0hBTkRTSEFLRV9NU0dfU1RSIDgzCisjZGVmaW5lIEVDQ19ERUNPREVfU1RSIDg0CisjZGVmaW5lIEVDQ19QVUJfREVDT0RFX1NUUiA4NQorI2RlZmluZSBXQVRDSF9DQl9NSVNTSU5HX1NUUiA4NgorI2RlZmluZSBXQVRDSF9IQVNIX1NUUiA4NworI2RlZmluZSBXQVRDSF9GQUlMX1NUUiA4OAorI2RlZmluZSBCQURfQ0VSVF9NU0dfU1RSIDg5CisjZGVmaW5lIFNUT1JFX0RBVEFfQ0JfTUlTU0lOR19TVFIgOTAKKworI2RlZmluZSBOT19EQVRBX0RFU1RfU1RSIDkxCisjZGVmaW5lIFNUT1JFX0RBVEFfRkFJTF9TVFIgOTIKKyNkZWZpbmUgQ0hBSU5fSU5QVVRfU1RSIDkzCisjZGVmaW5lIEdPVF9FTkNfRVhUX1NUUiA5NAorI2RlZmluZSBHT1RfSEVMTE9fUkVUUllfUkVRX1NUUiA5NQorLyogISEhISBhbHNvIGFkZCB0byBtc2dUYWJsZSBpbiBzbmlmZmVyLmMgYW5kIC5yYyBmaWxlICEhISEgKi8KKworCisjZW5kaWYgLyogd29sZlNTTF9TTklGRkVSX0VSUk9SX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvc3NsLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC9zc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDdmYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvc3NsLmgKQEAgLTAsMCArMSw0NDgxIEBACisvKiBzc2wuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisvKiEKKyAgICBcZmlsZSAuLi93b2xmc3NsL3NzbC5oCisgICAgXGJyaWVmIEhlYWRlciBmaWxlIGNvbnRhaW5pbmcga2V5IHdvbGZTU0wgQVBJCisqLworCisvKiB3b2xmU1NMIEFQSSAqLworCisjaWZuZGVmIFdPTEZTU0xfU1NMX0gKKyNkZWZpbmUgV09MRlNTTF9TU0xfSAorCisKKy8qIGZvciB1c2VycyBub3QgdXNpbmcgcHJlcHJvY2Vzc29yIGZsYWdzKi8KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvdmVyc2lvbi5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc25fcHVibGljLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIEhBVkVfV09MRl9FVkVOVAorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC93b2xmZXZlbnQuaD4KKyNlbmRpZgorCisgI2lmZGVmIFdPTEZfQ1JZUFRPX0NCCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2NyeXB0b2NiLmg+CisjZW5kaWYKKworLyogdXNlZCBpbnRlcm5hbGx5IGJ5IHdvbGZTU0wgd2hpbGUgT3BlblNTTCB0eXBlcyBhcmVuJ3QgKi8KKyNpbmNsdWRlIDx3b2xmc3NsL2NhbGxiYWNrcy5oPgorCisjaWZkZWYgV09MRlNTTF9QUkVGSVgKKyAgICAjaW5jbHVkZSAicHJlZml4X3NzbC5oIgorI2VuZGlmCisKKyNpZmRlZiBMSUJXT0xGU1NMX1ZFUlNJT05fU1RSSU5HCisgICAgI2RlZmluZSBXT0xGU1NMX1ZFUlNJT04gTElCV09MRlNTTF9WRVJTSU9OX1NUUklORworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyAgICAvKiB3aW5jcnlwdC5oIGNsYXNoZXMgKi8KKyAgICAjdW5kZWYgT0NTUF9SRVFVRVNUCisgICAgI3VuZGVmIE9DU1BfUkVTUE9OU0UKKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9DT0VYSVNUCisgICAgLyogbW9kZSB0byBhbGxvdyB3b2xmU1NMIGFuZCBPcGVuU1NMIHRvIGV4aXN0IHRvZ2V0aGVyICovCisgICAgI2lmZGVmIFRFU1RfT1BFTlNTTF9DT0VYSVNUCisgICAgICAgIC8qCisgICAgICAgIC4vY29uZmlndXJlIC0tZW5hYmxlLW9wZW5zc2xjb2V4aXN0IFwKKyAgICAgICAgICAgIENGTEFHUz0iLUkvdXNyL2xvY2FsL29wdC9vcGVuc3NsL2luY2x1ZGUgLURURVNUX09QRU5TU0xfQ09FWElTVCIgXAorICAgICAgICAgICAgTERGTEFHUz0iLUwvdXNyL2xvY2FsL29wdC9vcGVuc3NsL2xpYiAtbGNyeXB0byIKKyAgICAgICAgKi8KKyAgICAgICAgI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisgICAgICAgICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAgICAgICAgI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisgICAgICAgICNpbmNsdWRlIDxvcGVuc3NsL2VjLmg+CisgICAgICAgICNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKyAgICAgICAgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAgICAjZW5kaWYKKworICAgIC8qIG1ha2Ugc3VyZSBvbGQgbmFtZXMgYXJlIGRpc2FibGVkICovCisgICAgI2lmbmRlZiBOT19PTERfU1NMX05BTUVTCisgICAgICAgICNkZWZpbmUgTk9fT0xEX1NTTF9OQU1FUworICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fT0xEX1dDX05BTUVTCisgICAgICAgICNkZWZpbmUgTk9fT0xEX1dDX05BTUVTCisgICAgI2VuZGlmCisKKyNlbGlmIChkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMKSkKKyAgICAjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL2JuLmg+CisgICAgI2luY2x1ZGUgPHdvbGZzc2wvb3BlbnNzbC9obWFjLmg+CisKKyAgICAvKiBXZSBuZWVkIHRoZSBvbGQgU1NMIG5hbWVzICovCisgICAgI2lmZGVmIE5PX09MRF9TU0xfTkFNRVMKKyAgICAgICAgI3VuZGVmIE5PX09MRF9TU0xfTkFNRVMKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgTk9fT0xEX1dDX05BTUVTCisgICAgICAgICN1bmRlZiBOT19PTERfV0NfTkFNRVMKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBMSEFTSCBpcyBpbXBsZW1lbnRlZCBhcyBhIHN0YWNrICovCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1NUQUNLIFdPTEZTU0xfTEhBU0g7CisjaWZuZGVmIFdPTEZfTEhBU0hfT0YKKyAgICAjZGVmaW5lIFdPTEZfTEhBU0hfT0YoeCkgV09MRlNTTF9MSEFTSAorI2VuZGlmCisKKyNpZm5kZWYgV09MRl9TVEFDS19PRgorICAgICNkZWZpbmUgV09MRl9TVEFDS19PRih4KSBXT0xGU1NMX1NUQUNLCisjZW5kaWYKKyNpZm5kZWYgREVDTEFSRV9TVEFDS19PRgorICAgICNkZWZpbmUgREVDTEFSRV9TVEFDS19PRih4KSBXT0xGX1NUQUNLX09GKHgpOworI2VuZGlmCisKKyNpZm5kZWYgV09MRlNTTF9XT0xGU1NMX1RZUEVfREVGSU5FRAorI2RlZmluZSBXT0xGU1NMX1dPTEZTU0xfVFlQRV9ERUZJTkVECit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMICAgICAgICAgIFdPTEZTU0w7CisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfU0VTU0lPTiAgV09MRlNTTF9TRVNTSU9OOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9NRVRIT0QgICBXT0xGU1NMX01FVEhPRDsKKyNpZm5kZWYgV09MRlNTTF9XT0xGU1NMX0NUWF9UWVBFX0RFRklORUQKKyNkZWZpbmUgV09MRlNTTF9XT0xGU1NMX0NUWF9UWVBFX0RFRklORUQKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQ1RYICAgICAgV09MRlNTTF9DVFg7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9TVEFDSyAgICAgIFdPTEZTU0xfU1RBQ0s7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1g1MDkgICAgICAgV09MRlNTTF9YNTA5OwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9YNTA5X05BTUUgIFdPTEZTU0xfWDUwOV9OQU1FOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9YNTA5X05BTUVfRU5UUlkgIFdPTEZTU0xfWDUwOV9OQU1FX0VOVFJZOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9YNTA5X1BVQktFWSBXT0xGU1NMX1g1MDlfUFVCS0VZOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9YNTA5X0FMR09SIFdPTEZTU0xfWDUwOV9BTEdPUjsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfWDUwOV9DSEFJTiBXT0xGU1NMX1g1MDlfQ0hBSU47Cit0eXBlZGVmIHN0cnVjdCBXQ19QS0NTMTIgICAgICAgICAgV09MRlNTTF9YNTA5X1BLQ1MxMjsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfWDUwOV9JTkZPICBXT0xGU1NMX1g1MDlfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9DRVJUX01BTkFHRVIgV09MRlNTTF9DRVJUX01BTkFHRVI7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1NPQ0tBRERSICAgICBXT0xGU1NMX1NPQ0tBRERSOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9DUkwgICAgICAgICAgV09MRlNTTF9DUkw7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYIFdPTEZTU0xfWDUwOV9TVE9SRV9DVFg7CisKK3R5cGVkZWYgaW50ICgqV09MRlNTTF9YNTA5X1NUT1JFX0NUWF92ZXJpZnlfY2IpKGludCwgV09MRlNTTF9YNTA5X1NUT1JFX0NUWCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9CWV9ESVJfSEFTSCAgV09MRlNTTF9CWV9ESVJfSEFTSDsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQllfRElSX2VudHJ5IFdPTEZTU0xfQllfRElSX2VudHJ5OwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9CWV9ESVIgICAgICAgV09MRlNTTF9CWV9ESVI7CisKKy8qIHJlZGVjbGFyZSBndWFyZCAqLworI2RlZmluZSBXT0xGU1NMX1RZUEVTX0RFRklORUQKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmlvLmg+CisKKworI2lmbmRlZiBXT0xGU1NMX1JTQV9UWVBFX0RFRklORUQgLyogZ3VhcmQgb24gcmVkZWNsYXJhdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9SU0EgICAgICAgICAgICBXT0xGU1NMX1JTQTsKKyNkZWZpbmUgV09MRlNTTF9SU0FfVFlQRV9ERUZJTkVECisjZW5kaWYKKworI2lmbmRlZiBXQ19STkdfVFlQRV9ERUZJTkVEIC8qIGd1YXJkIG9uIHJlZGVjbGFyYXRpb24gKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBXQ19STkcgV0NfUk5HOworICAgICNkZWZpbmUgV0NfUk5HX1RZUEVfREVGSU5FRAorI2VuZGlmCisKKyNpZm5kZWYgV09MRlNTTF9EU0FfVFlQRV9ERUZJTkVEIC8qIGd1YXJkIG9uIHJlZGVjbGFyYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRFNBICAgICAgICAgICAgV09MRlNTTF9EU0E7CisjZGVmaW5lIFdPTEZTU0xfRFNBX1RZUEVfREVGSU5FRAorI2VuZGlmCisKKyNpZm5kZWYgV09MRlNTTF9FQ19UWVBFX0RFRklORUQgLyogZ3VhcmQgb24gcmVkZWNsYXJhdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9FQ19LRVkgICAgICAgICBXT0xGU1NMX0VDX0tFWTsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRUNfUE9JTlQgICAgICAgV09MRlNTTF9FQ19QT0lOVDsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRUNfR1JPVVAgICAgICAgV09MRlNTTF9FQ19HUk9VUDsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRUNfQlVJTFRJTl9DVVJWRSBXT0xGU1NMX0VDX0JVSUxUSU5fQ1VSVkU7CisvKiBXT0xGU1NMX0VDX01FVEhPRCBpcyBqdXN0IGFuIGFsaWFzIG9mIFdPTEZTU0xfRUNfR1JPVVAgZm9yIG5vdyAqLwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9FQ19HUk9VUCAgICAgICBXT0xGU1NMX0VDX01FVEhPRDsKKyNkZWZpbmUgV09MRlNTTF9FQ19UWVBFX0RFRklORUQKKyNlbmRpZgorCisjaWZuZGVmIFdPTEZTU0xfRUNEU0FfVFlQRV9ERUZJTkVEIC8qIGd1YXJkIG9uIHJlZGVjbGFyYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRUNEU0FfU0lHICAgICAgV09MRlNTTF9FQ0RTQV9TSUc7CisjZGVmaW5lIFdPTEZTU0xfRUNEU0FfVFlQRV9ERUZJTkVECisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9DSVBIRVIgICAgICAgICBXT0xGU1NMX0NJUEhFUjsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfWDUwOV9MT09LVVAgICAgV09MRlNTTF9YNTA5X0xPT0tVUDsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfWDUwOV9MT09LVVBfTUVUSE9EIFdPTEZTU0xfWDUwOV9MT09LVVBfTUVUSE9EOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9DUkwgICAgICAgICAgICBXT0xGU1NMX1g1MDlfQ1JMOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9YNTA5X1NUT1JFICAgICBXT0xGU1NMX1g1MDlfU1RPUkU7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNIFdPTEZTU0xfWDUwOV9WRVJJRllfUEFSQU07Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0JJTyAgICAgICAgICAgIFdPTEZTU0xfQklPOwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9CSU9fTUVUSE9EICAgICBXT0xGU1NMX0JJT19NRVRIT0Q7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1g1MDlfRVhURU5TSU9OIFdPTEZTU0xfWDUwOV9FWFRFTlNJT047Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0FTTjFfT0JKRUNUICAgIFdPTEZTU0xfQVNOMV9PQkpFQ1Q7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0FTTjFfT1RIRVJOQU1FIFdPTEZTU0xfQVNOMV9PVEhFUk5BTUU7Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1g1MDlWM19DVFggICAgIFdPTEZTU0xfWDUwOVYzX0NUWDsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfdjNfZXh0X21ldGhvZCAgV09MRlNTTF92M19leHRfbWV0aG9kOworCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0FTTjFfU1RSSU5HICAgICAgV09MRlNTTF9BU04xX1NUUklORzsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfZHlubG9ja192YWx1ZSAgICBXT0xGU1NMX2R5bmxvY2tfdmFsdWU7CisjaWZuZGVmIFdPTEZTU0xfREhfVFlQRV9ERUZJTkVEIC8qIGd1YXJkIG9uIHJlZGVjbGFyYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfREggICAgICAgICAgICAgICBXT0xGU1NMX0RIOworI2RlZmluZSBXT0xGU1NMX0RIX1RZUEVfREVGSU5FRCAvKiBndWFyZCBvbiByZWRlY2xhcmF0aW9uICovCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQVNOMV9CSVRfU1RSSU5HICBXT0xGU1NMX0FTTjFfQklUX1NUUklORzsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQVNOMV9UWVBFICAgICAgICBXT0xGU1NMX0FTTjFfVFlQRTsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfWDUwOV9BVFRSSUJVVEUgICBXT0xGU1NMX1g1MDlfQVRUUklCVVRFOworCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0dFTkVSQUxfTkFNRSBXT0xGU1NMX0dFTkVSQUxfTkFNRTsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQVVUSE9SSVRZX0tFWUlEICBXT0xGU1NMX0FVVEhPUklUWV9LRVlJRDsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQkFTSUNfQ09OU1RSQUlOVFMgV09MRlNTTF9CQVNJQ19DT05TVFJBSU5UUzsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQUNDRVNTX0RFU0NSSVBUSU9OIFdPTEZTU0xfQUNDRVNTX0RFU0NSSVBUSU9OOworCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0NPTkZfQ1RYICAgICBXT0xGU1NMX0NPTkZfQ1RYOworCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFdPTEZTU0xfV1BBU19TTUFMTCkKKworc3RydWN0IFdPTEZTU0xfQVVUSE9SSVRZX0tFWUlEIHsKKyAgICBXT0xGU1NMX0FTTjFfU1RSSU5HICprZXlpZDsKKyAgICBXT0xGU1NMX0FTTjFfT0JKRUNUICppc3N1ZXI7CisgICAgV09MRlNTTF9BU04xX0lOVEVHRVIgKnNlcmlhbDsKK307CisKK3N0cnVjdCBXT0xGU1NMX0JBU0lDX0NPTlNUUkFJTlRTIHsKKyAgICBpbnQgY2E7CisgICAgV09MRlNTTF9BU04xX0lOVEVHRVIgKnBhdGhsZW47Cit9OworCisjZW5kaWYgLyogT1BFTlNTTF9BTEwgfHwgT1BFTlNTTF9FWFRSQSovCisKKyNkZWZpbmUgV09MRlNTTF9BU04xX1VUQ1RJTUUgICAgICAgICAgV09MRlNTTF9BU04xX1RJTUUKKyNkZWZpbmUgV09MRlNTTF9BU04xX0dFTkVSQUxJWkVEVElNRSAgV09MRlNTTF9BU04xX1RJTUUKKworc3RydWN0IFdPTEZTU0xfQVNOMV9TVFJJTkcgeworICAgIGNoYXIgc3RyRGF0YVtDVENfTkFNRV9TSVpFXTsKKyAgICBpbnQgbGVuZ3RoOworICAgIGludCB0eXBlOyAvKiB0eXBlIG9mIHN0cmluZyBpLmUuIENUQ19VVEY4ICovCisgICAgY2hhciogZGF0YTsKKyAgICBsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGludCAgIGlzRHluYW1pYzoxOyAvKiBmbGFnIGZvciBpZiBkYXRhIHBvaW50ZXIgZHluYW1pYyAoMSBpcyB5ZXMgMCBpcyBubykgKi8KK307CisKKyNkZWZpbmUgV09MRlNTTF9NQVhfU05BTUUgNDAKKworCisjZGVmaW5lIFdPTEZTU0xfQVNOMV9EWU5BTUlDIDB4MQorI2RlZmluZSBXT0xGU1NMX0FTTjFfRFlOQU1JQ19EQVRBIDB4MgorCitzdHJ1Y3QgV09MRlNTTF9BU04xX09USEVSTkFNRSB7CisgICAgV09MRlNTTF9BU04xX09CSkVDVCogdHlwZV9pZDsKKyAgICBXT0xGU1NMX0FTTjFfVFlQRSogICB2YWx1ZTsKK307CisKK3N0cnVjdCBXT0xGU1NMX0dFTkVSQUxfTkFNRSB7CisgICAgaW50IHR5cGU7CisgICAgdW5pb24geworICAgICAgICBjaGFyKiBwdHI7CisgICAgICAgIFdPTEZTU0xfQVNOMV9PVEhFUk5BTUUqIG90aGVyTmFtZTsKKyAgICAgICAgV09MRlNTTF9BU04xX1NUUklORyogcmZjODIyTmFtZTsKKyAgICAgICAgV09MRlNTTF9BU04xX1NUUklORyogZE5TTmFtZTsKKyAgICAgICAgV09MRlNTTF9BU04xX1RZUEUqIHg0MDBBZGRyZXNzOworICAgICAgICBXT0xGU1NMX1g1MDlfTkFNRSogZGlyZWN0b3J5TmFtZTsKKyAgICAgICAgV09MRlNTTF9BU04xX1NUUklORyogdW5pZm9ybVJlc291cmNlSWRlbnRpZmllcjsKKyAgICAgICAgV09MRlNTTF9BU04xX1NUUklORyogaVBBZGRyZXNzOworICAgICAgICBXT0xGU1NMX0FTTjFfT0JKRUNUKiByZWdpc3RlcmVkSUQ7CisKKyAgICAgICAgV09MRlNTTF9BU04xX1NUUklORyogaXA7CisgICAgICAgIFdPTEZTU0xfWDUwOV9OQU1FKiBkaXJuOworICAgICAgICBXT0xGU1NMX0FTTjFfU1RSSU5HKiBpYTU7CisgICAgICAgIFdPTEZTU0xfQVNOMV9PQkpFQ1QqIHJpZDsKKyAgICAgICAgV09MRlNTTF9BU04xX1RZUEUqIG90aGVyOworICAgIH0gZDsgLyogZGVyZWZlcmVuY2UgKi8KK307CisKK3N0cnVjdCBXT0xGU1NMX0FDQ0VTU19ERVNDUklQVElPTiB7CisgICAgV09MRlNTTF9BU04xX09CSkVDVCogIG1ldGhvZDsKKyAgICBXT0xGU1NMX0dFTkVSQUxfTkFNRSogbG9jYXRpb247Cit9OworCitzdHJ1Y3QgV09MRlNTTF9YNTA5VjNfQ1RYIHsKKyAgICBXT0xGU1NMX1g1MDkqIHg1MDk7Cit9OworCitzdHJ1Y3QgV09MRlNTTF9BU04xX09CSkVDVCB7CisgICAgdm9pZCogIGhlYXA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogb2JqOworICAgIC8qIHNOYW1lIGlzIHNob3J0IG5hbWUgaS5lIHNoYTI1NiByYXRoZXIgdGhhbiBvaWQgKG51bGwgdGVybWluYXRlZCkgKi8KKyAgICBjaGFyICAgc05hbWVbV09MRlNTTF9NQVhfU05BTUVdOworICAgIGludCAgICB0eXBlOyAvKiBvaWQgKi8KKyAgICBpbnQgICAgZ3JwOyAgLyogdHlwZSBvZiBPSUQsIGkuZS4gb2lkQ2VydFBvbGljeVR5cGUgKi8KKyAgICBpbnQgICAgbmlkOworICAgIHVuc2lnbmVkIGludCAgb2JqU3o7CisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX1FUKSB8fCBkZWZpbmVkKFdPTEZTU0xfQVBBQ0hFX0hUVFBEKQorICAgIGludCBjYTsKKyAgICBXT0xGU1NMX0FTTjFfSU5URUdFUiAqcGF0aGxlbjsKKyNlbmRpZgorICAgIHVuc2lnbmVkIGNoYXIgZHluYW1pYzsgLyogVXNlIFdPTEZTU0xfQVNOMV9EWU5BTUlDIGFuZCBXT0xGU1NMX0FTTjFfRFlOQU1JQ19EQVRBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0byBkZXRlcm1pbmUgd2hhdCBuZWVkcyB0byBiZSBmcmVlZC4gKi8KKworI2lmIGRlZmluZWQoV09MRlNTTF9BUEFDSEVfSFRUUEQpCisgICAgV09MRlNTTF9HRU5FUkFMX05BTUUqIGduOworI2VuZGlmCisKKyAgICBzdHJ1Y3QgZCB7IC8qIGRlcmVmcmVuY2VkICovCisgICAgICAgIFdPTEZTU0xfQVNOMV9TVFJJTkcqIGROU05hbWU7CisgICAgICAgIFdPTEZTU0xfQVNOMV9TVFJJTkcgIGlhNV9pbnRlcm5hbDsKKyAgICAgICAgV09MRlNTTF9BU04xX1NUUklORyogaWE1OyAvKiBwb2ludHMgdG8gaWE1X2ludGVybmFsICovCisjaWYgZGVmaW5lZChXT0xGU1NMX1FUKSB8fCBkZWZpbmVkKE9QRU5TU0xfQUxMKQorICAgICAgICBXT0xGU1NMX0FTTjFfU1RSSU5HKiB1bmlmb3JtUmVzb3VyY2VJZGVudGlmaWVyOworICAgICAgICBXT0xGU1NMX0FTTjFfU1RSSU5HICBpUEFkZHJlc3NfaW50ZXJuYWw7CisgICAgICAgIFdPTEZTU0xfQVNOMV9PVEhFUk5BTUUqIG90aGVyTmFtZTsgLyogYWRkZWQgZm9yIEFwYWNoZSBodHRwZCAqLworI2VuZGlmCisgICAgICAgIFdPTEZTU0xfQVNOMV9TVFJJTkcqIGlQQWRkcmVzczsgLyogcG9pbnRzIHRvIGlQQWRkcmVzc19pbnRlcm5hbCAqLworICAgIH0gZDsKK307CisKKy8qIHdyYXAgQVNOMSB0eXBlcyAqLworc3RydWN0IFdPTEZTU0xfQVNOMV9UWVBFIHsKKyAgICBpbnQgdHlwZTsKKyAgICB1bmlvbiB7CisgICAgICAgIGNoYXIgKnB0cjsKKyAgICAgICAgV09MRlNTTF9BU04xX1NUUklORyogICAgIGFzbjFfc3RyaW5nOworICAgICAgICBXT0xGU1NMX0FTTjFfT0JKRUNUKiAgICAgb2JqZWN0OworICAgICAgICBXT0xGU1NMX0FTTjFfSU5URUdFUiogICAgaW50ZWdlcjsKKyAgICAgICAgV09MRlNTTF9BU04xX0JJVF9TVFJJTkcqIGJpdF9zdHJpbmc7CisgICAgICAgIFdPTEZTU0xfQVNOMV9TVFJJTkcqICAgICBvY3RldF9zdHJpbmc7CisgICAgICAgIFdPTEZTU0xfQVNOMV9TVFJJTkcqICAgICBwcmludGFibGVzdHJpbmc7CisgICAgICAgIFdPTEZTU0xfQVNOMV9TVFJJTkcqICAgICBpYTVzdHJpbmc7CisgICAgICAgIFdPTEZTU0xfQVNOMV9VVENUSU1FKiAgICB1dGN0aW1lOworICAgICAgICBXT0xGU1NMX0FTTjFfR0VORVJBTElaRURUSU1FKiBnZW5lcmFsaXplZHRpbWU7CisgICAgICAgIFdPTEZTU0xfQVNOMV9TVFJJTkcqICAgICB1dGY4c3RyaW5nOworICAgICAgICBXT0xGU1NMX0FTTjFfU1RSSU5HKiAgICAgc2V0OworICAgICAgICBXT0xGU1NMX0FTTjFfU1RSSU5HKiAgICAgc2VxdWVuY2U7CisgICAgfSB2YWx1ZTsKK307CisKK3N0cnVjdCBXT0xGU1NMX1g1MDlfQVRUUklCVVRFIHsKKyAgICBXT0xGU1NMX0FTTjFfT0JKRUNUICpvYmplY3Q7CisgICAgV09MRlNTTF9BU04xX1RZUEUgKnZhbHVlOworICAgIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9BU04xX1RZUEUpICpzZXQ7Cit9OworCitzdHJ1Y3QgV09MRlNTTF9FVlBfUEtFWSB7CisgICAgdm9pZCogaGVhcDsKKyAgICBpbnQgdHlwZTsgICAgICAgICAvKiBvcGVuc3NoIGRlcmVmZXJlbmNlICovCisgICAgaW50IHNhdmVfdHlwZTsgICAgLyogb3BlbnNzaCBkZXJlZmVyZW5jZSAqLworICAgIGludCBwa2V5X3N6OworICAgIGludCByZWZlcmVuY2VzOyAgLypudW1iZXIgb2YgdGltZXMgZnJlZSBzaG91bGQgYmUgY2FsbGVkIGZvciBjb21wbGV0ZSBmcmVlKi8KKyAgICB3b2xmU1NMX011dGV4ICAgIHJlZk11dGV4OyAvKiByZWYgY291bnQgbXV0ZXggKi8KKworICAgIHVuaW9uIHsKKyAgICAgICAgY2hhciogcHRyOyAvKiBkZXIgZm9ybWF0IG9mIGtleSAvIG9yIHJhdyBmb3IgTlRSVSAqLworICAgIH0gcGtleTsKKyAgICAjaWYgKGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpKQorICAgICNpZm5kZWYgTk9fUlNBCisgICAgICAgIFdPTEZTU0xfUlNBKiByc2E7CisgICAgICAgIGJ5dGUgICAgICBvd25Sc2E7IC8qIGlmIHN0cnVjdCBvd25zIFJTQSBhbmQgc2hvdWxkIGZyZWUgaXQgKi8KKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0RTQQorICAgICAgICBXT0xGU1NMX0RTQSogZHNhOworICAgICAgICBieXRlICAgICAgb3duRHNhOyAvKiBpZiBzdHJ1Y3Qgb3ducyBEU0EgYW5kIHNob3VsZCBmcmVlIGl0ICovCisgICAgI2VuZGlmCisgICAgI2lmZGVmIEhBVkVfRUNDCisgICAgICAgIFdPTEZTU0xfRUNfS0VZKiBlY2M7CisgICAgICAgIGJ5dGUgICAgICBvd25FY2M7IC8qIGlmIHN0cnVjdCBvd25zIEVDQyBhbmQgc2hvdWxkIGZyZWUgaXQgKi8KKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0RICisgICAgICAgIFdPTEZTU0xfREgqIGRoOworICAgICAgICBieXRlICAgICAgb3duRGg7IC8qIGlmIHN0cnVjdCBvd25zIERIIGFuZCBzaG91bGQgZnJlZSBpdCAqLworICAgICNlbmRpZgorICAgIFdDX1JORyBybmc7CisgICAgI2VuZGlmIC8qIE9QRU5TU0xfRVhUUkEgfHwgT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMICovCisgICAgI2lmZGVmIEhBVkVfRUNDCisgICAgICAgIGludCBwa2V5X2N1cnZlOworICAgICNlbmRpZgorfTsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRVZQX1BLRVkgV09MRlNTTF9QS0NTOF9QUklWX0tFWV9JTkZPOworI2lmbmRlZiBXT0xGU1NMX0VWUF9UWVBFX0RFRklORUQgLyogZ3VhcmQgb24gcmVkZWNsYXJhdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9FVlBfUEtFWSAgICAgV09MRlNTTF9FVlBfUEtFWTsKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfRVZQX01EX0NUWCAgIFdPTEZTU0xfRVZQX01EX0NUWDsKK3R5cGVkZWYgY2hhciAgIFdPTEZTU0xfRVZQX01EOworI2RlZmluZSBXT0xGU1NMX0VWUF9UWVBFX0RFRklORUQKKyNlbmRpZgorCitzdHJ1Y3QgV09MRlNTTF9YNTA5X1BLRVkgeworICAgIFdPTEZTU0xfRVZQX1BLRVkqIGRlY19wa2V5OyAvKiBkZXJlZmVyZW5jZWQgYnkgQXBhY2hlICovCisgICAgdm9pZCogaGVhcDsKK307Cit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX1g1MDlfUEtFWSBXT0xGU1NMX1g1MDlfUEtFWTsKKworc3RydWN0IFdPTEZTU0xfWDUwOV9JTkZPIHsKKyAgICBXT0xGU1NMX1g1MDkgICAgICAqeDUwOTsKKyAgICBXT0xGU1NMX1g1MDlfQ1JMICAqY3JsOworICAgIFdPTEZTU0xfWDUwOV9QS0VZICAqeF9wa2V5OyAvKiBkZXJlZmVyZW5jZWQgYnkgQXBhY2hlICovCisgICAgRW5jcnlwdGVkSW5mbyAgICAgZW5jX2NpcGhlcjsKKyAgICBpbnQgICAgICAgICAgICAgICBlbmNfbGVuOworICAgIGNoYXIgICAgICAgICAgICAgICplbmNfZGF0YTsKKyAgICBpbnQgICAgICAgICAgICAgICBudW07Cit9OworCisjZGVmaW5lIFdPTEZTU0xfRVZQX1BLRVlfREVGQVVMVCBFVlBfUEtFWV9SU0EgLyogZGVmYXVsdCBrZXkgdHlwZSAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX1FUKQorICAgICNkZWZpbmUgd29sZlNTTF9TU0xfTU9ERV9SRUxFQVNFX0JVRkZFUlMgICAgMHgwMDAwMDAxMFUKKyAgICAjZGVmaW5lIHdvbGZTU0xfU1NMX0NUUkxfU0VUX1RNUF9FQ0RIICAgICAgIDQKKyNlbmRpZgorCitzdHJ1Y3QgV09MRlNTTF9YNTA5X0FMR09SIHsKKyAgICBXT0xGU1NMX0FTTjFfT0JKRUNUKiBhbGdvcml0aG07CisgICAgV09MRlNTTF9BU04xX1RZUEUqIHBhcmFtZXRlcjsKK307CisKK3N0cnVjdCBXT0xGU1NMX1g1MDlfUFVCS0VZIHsKKyAgICBXT0xGU1NMX1g1MDlfQUxHT1IqIGFsZ29yOworICAgIFdPTEZTU0xfRVZQX1BLRVkqIHBrZXk7CisgICAgaW50IHB1YktleU9JRDsKK307CisKKworZW51bSBCSU9fVFlQRSB7CisgICAgV09MRlNTTF9CSU9fQlVGRkVSID0gMSwKKyAgICBXT0xGU1NMX0JJT19TT0NLRVQgPSAyLAorICAgIFdPTEZTU0xfQklPX1NTTCAgICA9IDMsCisgICAgV09MRlNTTF9CSU9fTUVNT1JZID0gNCwKKyAgICBXT0xGU1NMX0JJT19CSU8gICAgPSA1LAorICAgIFdPTEZTU0xfQklPX0ZJTEUgICA9IDYsCisgICAgV09MRlNTTF9CSU9fQkFTRTY0ID0gNywKKyAgICBXT0xGU1NMX0JJT19NRCAgICAgPSA4Cit9OworCitlbnVtIEJJT19GTEFHUyB7CisgICAgV09MRlNTTF9CSU9fRkxBR19CQVNFNjRfTk9fTkwgPSAweDAxLAorICAgIFdPTEZTU0xfQklPX0ZMQUdfUkVBRCAgICAgICAgID0gMHgwMiwKKyAgICBXT0xGU1NMX0JJT19GTEFHX1dSSVRFICAgICAgICA9IDB4MDQsCisgICAgV09MRlNTTF9CSU9fRkxBR19JT19TUEVDSUFMICAgPSAweDA4LAorICAgIFdPTEZTU0xfQklPX0ZMQUdfUkVUUlkgICAgICAgID0gMHgxMAorfTsKKworZW51bSBCSU9fQ0JfT1BTIHsKKyAgICBXT0xGU1NMX0JJT19DQl9GUkVFICAgPSAweDAxLAorICAgIFdPTEZTU0xfQklPX0NCX1JFQUQgICA9IDB4MDIsCisgICAgV09MRlNTTF9CSU9fQ0JfV1JJVEUgID0gMHgwMywKKyAgICBXT0xGU1NMX0JJT19DQl9QVVRTICAgPSAweDA0LAorICAgIFdPTEZTU0xfQklPX0NCX0dFVFMgICA9IDB4MDUsCisgICAgV09MRlNTTF9CSU9fQ0JfQ1RSTCAgID0gMHgwNiwKKyAgICBXT0xGU1NMX0JJT19DQl9SRVRVUk4gPSAweDgwCit9OworCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0JVRl9NRU0geworICAgIGNoYXIqICBkYXRhOyAgIC8qIGRlcmVmZXJlbmNlZCAqLworICAgIHNpemVfdCBsZW5ndGg7IC8qIGN1cnJlbnQgbGVuZ3RoICovCisgICAgc2l6ZV90IG1heDsgICAgLyogbWF4aW11bSBsZW5ndGggKi8KK30gV09MRlNTTF9CVUZfTUVNOworCisvKiBjdXN0b20gbWV0aG9kIHdpdGggdXNlciBzZXQgY2FsbGJhY2tzICovCit0eXBlZGVmIGludCAgKCp3b2xmU1NMX0JJT19tZXRoX3dyaXRlX2NiKShXT0xGU1NMX0JJTyosIGNvbnN0IGNoYXIqLCBpbnQpOwordHlwZWRlZiBpbnQgICgqd29sZlNTTF9CSU9fbWV0aF9yZWFkX2NiKShXT0xGU1NMX0JJTyAqLCBjaGFyICosIGludCk7Cit0eXBlZGVmIGludCAgKCp3b2xmU1NMX0JJT19tZXRoX3B1dHNfY2IpKFdPTEZTU0xfQklPKiwgY29uc3QgY2hhciopOwordHlwZWRlZiBpbnQgICgqd29sZlNTTF9CSU9fbWV0aF9nZXRzX2NiKShXT0xGU1NMX0JJTyosIGNoYXIqLCBpbnQpOwordHlwZWRlZiBsb25nICgqd29sZlNTTF9CSU9fbWV0aF9jdHJsX2dldF9jYikoV09MRlNTTF9CSU8qLCBpbnQsIGxvbmcsIHZvaWQqKTsKK3R5cGVkZWYgaW50ICAoKndvbGZTU0xfQklPX21ldGhfY3JlYXRlX2NiKShXT0xGU1NMX0JJTyopOwordHlwZWRlZiBpbnQgICgqd29sZlNTTF9CSU9fbWV0aF9kZXN0cm95X2NiKShXT0xGU1NMX0JJTyopOworCit0eXBlZGVmIGludCB3b2xmU1NMX0JJT19pbmZvX2NiKFdPTEZTU0xfQklPICosIGludCwgaW50KTsKK3R5cGVkZWYgbG9uZyAoKndvbGZzc2xfQklPX21ldGhfY3RybF9pbmZvX2NiKShXT0xGU1NMX0JJTyosIGludCwgd29sZlNTTF9CSU9faW5mb19jYiopOworCisvKiB3b2xmU1NMIEJJT19NRVRIT0QgdHlwZSAqLworI2lmbmRlZiBNQVhfQklPX01FVEhPRF9OQU1FCisjZGVmaW5lIE1BWF9CSU9fTUVUSE9EX05BTUUgMjU2CisjZW5kaWYKK3N0cnVjdCBXT0xGU1NMX0JJT19NRVRIT0QgeworICAgIGJ5dGUgdHlwZTsgICAgICAgICAgICAgICAvKiBtZXRob2QgdHlwZSAqLworICAgIGNoYXIgbmFtZVtNQVhfQklPX01FVEhPRF9OQU1FXTsKKyAgICB3b2xmU1NMX0JJT19tZXRoX3dyaXRlX2NiIHdyaXRlQ2I7CisgICAgd29sZlNTTF9CSU9fbWV0aF9yZWFkX2NiIHJlYWRDYjsKKyAgICB3b2xmU1NMX0JJT19tZXRoX3B1dHNfY2IgcHV0c0NiOworICAgIHdvbGZTU0xfQklPX21ldGhfZ2V0c19jYiBnZXRzQ2I7CisgICAgd29sZlNTTF9CSU9fbWV0aF9jdHJsX2dldF9jYiBjdHJsQ2I7CisgICAgd29sZlNTTF9CSU9fbWV0aF9jcmVhdGVfY2IgY3JlYXRlQ2I7CisgICAgd29sZlNTTF9CSU9fbWV0aF9kZXN0cm95X2NiIGZyZWVDYjsKKyAgICB3b2xmc3NsX0JJT19tZXRoX2N0cmxfaW5mb19jYiBjdHJsSW5mb0NiOworfTsKKworLyogd29sZlNTTCBCSU8gdHlwZSAqLwordHlwZWRlZiBsb25nICgqd29sZl9iaW9faW5mb19jYikoV09MRlNTTF9CSU8gKmJpbywgaW50IGV2ZW50LCBjb25zdCBjaGFyICpwYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlhcmcsIGxvbmcgbGFyZywgbG9uZyByZXR1cm5fdmFsdWUpOworCitzdHJ1Y3QgV09MRlNTTF9CSU8geworICAgIFdPTEZTU0xfQlVGX01FTSogbWVtX2J1ZjsKKyAgICBXT0xGU1NMX0JJT19NRVRIT0QqIG1ldGhvZDsKKyAgICBXT0xGU1NMX0JJTyogcHJldjsgICAgICAgICAgLyogcHJldmlvdXMgaW4gY2hhaW4gKi8KKyAgICBXT0xGU1NMX0JJTyogbmV4dDsgICAgICAgICAgLyogbmV4dCBpbiBjaGFpbiAqLworICAgIFdPTEZTU0xfQklPKiBwYWlyOyAgICAgICAgICAvKiBCSU8gcGFpcmVkIHdpdGggKi8KKyAgICB2b2lkKiAgICAgICAgaGVhcDsgICAgICAgICAgLyogdXNlciBoZWFwIGhpbnQgKi8KKyAgICB2b2lkKiAgICAgICAgcHRyOyAgICAgICAgICAgLyogV09MRlNTTCwgZmlsZSBkZXNjcmlwdG9yLCBNRCwgb3IgbWVtIGJ1ZiAqLworICAgIHZvaWQqICAgICAgICB1c3JDdHg7ICAgICAgICAvKiB1c2VyIHNldCBwb2ludGVyICovCisgICAgY29uc3QgY2hhciogIGlwOyAgICAgICAgICAgIC8qIElQIGFkZHJlc3MgZm9yIHdvbGZJT19UY3BDb25uZWN0ICovCisgICAgd29yZDE2ICAgICAgIHBvcnQ7ICAgICAgICAgIC8qIFBvcnQgZm9yIHdvbGZJT19UY3BDb25uZWN0ICovCisgICAgY2hhciogICAgICAgIGluZm9Bcmc7ICAgICAgIC8qIEJJTyBjYWxsYmFjayBhcmd1bWVudCAqLworICAgIHdvbGZfYmlvX2luZm9fY2IgaW5mb0NiOyAgICAvKiBCSU8gY2FsbGJhY2sgKi8KKyAgICBpbnQgICAgICAgICAgd3JTejsgICAgICAgICAgLyogd3JpdGUgYnVmZmVyIHNpemUgKG1lbSkgKi8KKyAgICBpbnQgICAgICAgICAgd3JJZHg7ICAgICAgICAgLyogY3VycmVudCBpbmRleCBmb3Igd3JpdGUgYnVmZmVyICovCisgICAgaW50ICAgICAgICAgIHJkSWR4OyAgICAgICAgIC8qIGN1cnJlbnQgcmVhZCBpbmRleCAqLworICAgIGludCAgICAgICAgICByZWFkUnE7ICAgICAgICAvKiByZWFkIHJlcXVlc3QgKi8KKyAgICBpbnQgICAgICAgICAgbnVtOyAgICAgICAgICAgLyogc29ja2V0IG51bSBvciBsZW5ndGggKi8KKyAgICBpbnQgICAgICAgICAgZW9mOyAgICAgICAgICAgLyogZW9mIGZsYWcgKi8KKyAgICBpbnQgICAgICAgICAgZmxhZ3M7CisgICAgYnl0ZSAgICAgICAgIHR5cGU7ICAgICAgICAgIC8qIG1ldGhvZCB0eXBlICovCisgICAgYnl0ZSAgICAgICAgIGluaXQ6MTsgICAgICAgIC8qIGJpbyBoYXMgYmVlbiBpbml0aWFsaXplZCAqLworICAgIGJ5dGUgICAgICAgICBzaHV0ZG93bjoxOyAgICAvKiBjbG9zZSBmbGFnICovCisjaWZkZWYgSEFWRV9FWF9EQVRBCisgICAgV09MRlNTTF9DUllQVE9fRVhfREFUQSBleF9kYXRhOworI2VuZGlmCit9OworCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0NPTVBfTUVUSE9EIHsKKyAgICBpbnQgdHlwZTsgICAgICAgICAgICAvKiBzdHVubmVsIGRlcmVmZXJlbmNlICovCit9IFdPTEZTU0xfQ09NUF9NRVRIT0Q7CisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQ09NUCB7CisgICAgaW50IGlkOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgV09MRlNTTF9DT01QX01FVEhPRCAqbWV0aG9kOworfSBXT0xGU1NMX0NPTVA7CisKKyNkZWZpbmUgV09MRlNTTF9YNTA5X0xfRklMRV9MT0FEICAweDEKKyNkZWZpbmUgV09MRlNTTF9YNTA5X0xfQUREX0RJUiAgICAweDIKKyNkZWZpbmUgV09MRlNTTF9YNTA5X0xfQUREX1NUT1JFICAweDMKKyNkZWZpbmUgV09MRlNTTF9YNTA5X0xfTE9BRF9TVE9SRSAweDQKKworc3RydWN0IFdPTEZTU0xfWDUwOV9MT09LVVBfTUVUSE9EIHsKKyAgICBpbnQgdHlwZTsKK307CisKK3N0cnVjdCBXT0xGU1NMX1g1MDlfTE9PS1VQIHsKKyAgICBXT0xGU1NMX1g1MDlfU1RPUkUgKnN0b3JlOworICAgIGludCB0eXBlOworICAgIFdPTEZTU0xfQllfRElSKiBkaXJzOworfTsKKworc3RydWN0IFdPTEZTU0xfWDUwOV9TVE9SRSB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgIGNhY2hlOyAgICAgICAgICAvKiBzdHVubmVsIGRlcmVmZXJlbmNlICovCisgICAgV09MRlNTTF9DRVJUX01BTkFHRVIqIGNtOworICAgIFdPTEZTU0xfWDUwOV9MT09LVVAgICBsb29rdXA7CisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFdPTEZTU0xfV1BBU19TTUFMTCkKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgaXNEeW5hbWljOworICAgIFdPTEZTU0xfWDUwOV9WRVJJRllfUEFSQU0qIHBhcmFtOyAgICAvKiBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIHBhcmFtZXRlciAqLworI2VuZGlmCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX1FUKQorICAgIFdPTEZTU0xfWDUwOV9TVE9SRV9DVFhfdmVyaWZ5X2NiIHZlcmlmeV9jYjsKKyNlbmRpZgorI2lmZGVmIEhBVkVfRVhfREFUQQorICAgIFdPTEZTU0xfQ1JZUFRPX0VYX0RBVEEgZXhfZGF0YTsKKyNlbmRpZgorI2lmIChkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoV09MRlNTTF9XUEFTX1NNQUxMKSkgJiYgZGVmaW5lZChIQVZFX0NSTCkKKyAgICBXT0xGU1NMX1g1MDlfQ1JMICpjcmw7IC8qIHBvaW50cyB0byBjbS0+Y3JsICovCisjZW5kaWYKK307CisKKyNkZWZpbmUgV09MRlNTTF9OT19XSUxEQ0FSRFMgICAweDQKKworI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgXAorICAgIGRlZmluZWQoV09MRlNTTF9XUEFTX1NNQUxMKSB8fCBkZWZpbmVkKFdPTEZTU0xfSVBfQUxUX05BTUUpCisgICAgI2RlZmluZSBXT0xGU1NMX01BWF9JUFNUUiA0NiAvKiBtYXggaXAgc2l6ZSBJUHY0IG1hcHBlZCBJUHY2ICovCisjZW5kaWYgLyogT1BFTlNTTF9BTEwgfHwgV09MRlNTTF9JUF9BTFRfTkFNRSAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFdPTEZTU0xfV1BBU19TTUFMTCkKKyNkZWZpbmUgV09MRlNTTF9VU0VfQ0hFQ0tfVElNRSAweDIKKyNkZWZpbmUgV09MRlNTTF9OT19DSEVDS19USU1FICAweDIwMDAwMAorI2RlZmluZSBXT0xGU1NMX0hPU1RfTkFNRV9NQVggIDI1NgorCisjZGVmaW5lIFdPTEZTU0xfVlBBUkFNX0RFRkFVTFQgICAgICAgICAgMHgxCisjZGVmaW5lIFdPTEZTU0xfVlBBUkFNX09WRVJXUklURSAgICAgICAgMHgyCisjZGVmaW5lIFdPTEZTU0xfVlBBUkFNX1JFU0VUX0ZMQUdTICAgICAgMHg0CisjZGVmaW5lIFdPTEZTU0xfVlBBUkFNX0xPQ0tFRCAgICAgICAgICAgMHg4CisjZGVmaW5lIFdPTEZTU0xfVlBBUkFNX09OQ0UgICAgICAgICAgICAgMHgxMAorCitzdHJ1Y3QgV09MRlNTTF9YNTA5X1ZFUklGWV9QQVJBTSB7CisgICAgdGltZV90ICAgICAgICAgY2hlY2tfdGltZTsKKyAgICB1bnNpZ25lZCBpbnQgICBpbmhlcml0X2ZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgIGZsYWdzOworICAgIGNoYXIgICAgICAgICAgIGhvc3ROYW1lW1dPTEZTU0xfSE9TVF9OQU1FX01BWF07CisgICAgdW5zaWduZWQgaW50ICBob3N0RmxhZ3M7CisgICAgY2hhciBpcGFzY1tXT0xGU1NMX01BWF9JUFNUUl07Cit9OworI2VuZGlmIC8qIE9QRU5TU0xfRVhUUkEgfHwgV09MRlNTTF9XUEFTX1NNQUxMICovCisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQUxFUlQgeworICAgIGludCBjb2RlOworICAgIGludCBsZXZlbDsKK30gV09MRlNTTF9BTEVSVDsKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9BTEVSVF9ISVNUT1JZIHsKKyAgICBXT0xGU1NMX0FMRVJUIGxhc3Rfcng7CisgICAgV09MRlNTTF9BTEVSVCBsYXN0X3R4OworfSBXT0xGU1NMX0FMRVJUX0hJU1RPUlk7CisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfWDUwOV9SRVZPS0VEIHsKKyAgICBXT0xGU1NMX0FTTjFfSU5URUdFUiogc2VyaWFsTnVtYmVyOyAgICAgICAgICAvKiBzdHVubmVsIGRlcmVmZXJlbmNlICovCit9IFdPTEZTU0xfWDUwOV9SRVZPS0VEOworCisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfWDUwOV9PQkpFQ1QgeworICAgIHVuaW9uIHsKKyAgICAgICAgY2hhciogcHRyOworICAgICAgICBXT0xGU1NMX1g1MDkgKng1MDk7CisgICAgICAgIFdPTEZTU0xfWDUwOV9DUkwqIGNybDsgICAgICAgICAgIC8qIHN0dW5uZWwgZGVyZWZlcmVuY2UgKi8KKyAgICB9IGRhdGE7Cit9IFdPTEZTU0xfWDUwOV9PQkpFQ1Q7CisKKyNkZWZpbmUgV09MRlNTTF9BU04xX0JPT0xFQU4gICAgICAgICAgICAgICAgaW50CisKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfQlVGRkVSX0lORk8geworICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworfSBXT0xGU1NMX0JVRkZFUl9JTkZPOworCitzdHJ1Y3QgV09MRlNTTF9YNTA5X1NUT1JFX0NUWCB7CisgICAgV09MRlNTTF9YNTA5X1NUT1JFKiBzdG9yZTsgICAgLyogU3RvcmUgZnVsbCBvZiBhIENBIGNlcnQgY2hhaW4gKi8KKyAgICBXT0xGU1NMX1g1MDkqIGN1cnJlbnRfY2VydDsgICAvKiBjdXJyZW50IFg1MDkgKE9QRU5TU0xfRVhUUkEpICovCisjaWZkZWYgV09MRlNTTF9BU0lPCisgICAgV09MRlNTTF9YNTA5KiBjdXJyZW50X2lzc3VlcjsgLyogYXNpbyBkZXJlZmVyZW5jZSAqLworI2VuZGlmCisgICAgV09MRlNTTF9YNTA5X0NIQUlOKiBzZXNDaGFpbjsgLyogcG9pbnRlciB0byBXT0xGU1NMX1NFU1NJT04gcGVlciBjaGFpbiAqLworICAgIFdPTEZTU0xfU1RBQ0sqIGNoYWluOworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgICBXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNKiBwYXJhbTsgLyogY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBwYXJhbWV0ZXIgKi8KKyNlbmRpZgorICAgIGNoYXIqIGRvbWFpbjsgICAgICAgICAgICAgICAgLyogc3ViamVjdCBDTiBkb21haW4gbmFtZSAqLworI2lmIGRlZmluZWQoSEFWRV9FWF9EQVRBKSB8fCBkZWZpbmVkKEZPUlRSRVNTKQorICAgIFdPTEZTU0xfQ1JZUFRPX0VYX0RBVEEgZXhfZGF0YTsgIC8qIGV4dGVybmFsIGRhdGEgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9BUEFDSEVfSFRUUEQpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQSkKKyAgICBpbnQgZGVwdGg7ICAgICAgICAgICAgICAgICAgIC8qIHVzZWQgaW4gWDUwOV9TVE9SRV9DVFhfKl9kZXB0aCAqLworI2VuZGlmCisgICAgdm9pZCogdXNlckN0eDsgICAgICAgICAgICAgICAvKiB1c2VyIGN0eCAqLworICAgIGludCAgIGVycm9yOyAgICAgICAgICAgICAgICAgLyogY3VycmVudCBlcnJvciAqLworICAgIGludCAgIGVycm9yX2RlcHRoOyAgICAgICAgICAgLyogaW5kZXggb2YgY2VydCBkZXB0aCBmb3IgdGhpcyBlcnJvciAqLworICAgIGludCAgIGRpc2NhcmRTZXNzaW9uQ2VydHM7ICAgLyogc28gdmVyaWZ5IGNhbGxiYWNrIGNhbiBmbGFnIGZvciBkaXNjYXJkICovCisgICAgaW50ICAgdG90YWxDZXJ0czsgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGVlciBjZXJ0IGJ1ZmZlcnMgKi8KKyAgICBXT0xGU1NMX0JVRkZFUl9JTkZPKiBjZXJ0czsgIC8qIHBlZXIgY2VydHMgKi8KKyAgICBXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYX3ZlcmlmeV9jYiB2ZXJpZnlfY2I7IC8qIHZlcmlmeSBjYWxsYmFjayAqLworfTsKKwordHlwZWRlZiBjaGFyKiBXT0xGU1NMX1NUUklORzsKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9SQU5EX01FVEhPRCB7CisgICAgLyogc2VlZCA9IERhdGEgdG8gbWl4IGludG8gdGhlIHJhbmRvbSBnZW5lcmF0b3IuCisgICAgICogbGVuID0gTnVtYmVyIG9mIGJ5dGVzIHRvIG1peCBmcm9tIHNlZWQuICovCisgICAgaW50ICAoKnNlZWQpKGNvbnN0IHZvaWQqIHNlZWQsIGludCBsZW4pOworICAgIC8qIGJ1ZiA9IEJ1ZmZlciB0byBzdG9yZSByYW5kb20gYnl0ZXMgaW4uCisgICAgKiBsZW4gPSBOdW1iZXIgb2YgYnl0ZXMgdG8gc3RvcmUgaW4gYnVmLiAqLworICAgIGludCAgKCpieXRlcykodW5zaWduZWQgY2hhciogYnVmLCBpbnQgbGVuKTsKKyAgICB2b2lkICgqY2xlYW51cCkodm9pZCk7CisgICAgLyogYWRkID0gRGF0YSB0byBtaXggaW50byB0aGUgcmFuZG9tIGdlbmVyYXRvci4KKyAgICAgKiBsZW4gPSBOdW1iZXIgb2YgYnl0ZXMgdG8gbWl4IGZyb20gYWRkLgorICAgICAqIGVudHJvcHkgPSBFc3RpbWF0ZSBvZiByYW5kb21uZXNzIGNvbnRhaW5lZCBpbiBzZWVkLgorICAgICAqICAgICAgICAgICBTaG91bGQgYmUgYmV0d2VlbiAwIGFuZCBsZW4uICovCisgICAgaW50ICAoKmFkZCkoY29uc3Qgdm9pZCogYWRkLCBpbnQgbGVuLCBkb3VibGUgZW50cm9weSk7CisgICAgLyogYnVmID0gQnVmZmVyIHRvIHN0b3JlIHBzZXVkb3JhbmRvbSBieXRlcyBpbi4KKyAgICAgKiBsZW4gPSBOdW1iZXIgb2YgYnl0ZXMgdG8gc3RvcmUgaW4gYnVmLiAqLworICAgIGludCAgKCpwc2V1ZG9yYW5kKSh1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pOworICAgIGludCAgKCpzdGF0dXMpKHZvaWQpOworfSBXT0xGU1NMX1JBTkRfTUVUSE9EOworCisvKiBWYWxpZCBBbGVydCB0eXBlcyBmcm9tIHBhZ2UgMTYvMTcKKyAqIEFkZCBhbGVydCBzdHJpbmcgdG8gdGhlIGZ1bmN0aW9uIHdvbGZTU0xfYWxlcnRfdHlwZV9zdHJpbmdfbG9uZyBpbiBzcmMvc3NsLmMKKyAqLworZW51bSBBbGVydERlc2NyaXB0aW9uIHsKKyAgICBjbG9zZV9ub3RpZnkgICAgICAgICAgICAgICAgICAgID0gICAwLAorICAgIHVuZXhwZWN0ZWRfbWVzc2FnZSAgICAgICAgICAgICAgPSAgMTAsCisgICAgYmFkX3JlY29yZF9tYWMgICAgICAgICAgICAgICAgICA9ICAyMCwKKyAgICByZWNvcmRfb3ZlcmZsb3cgICAgICAgICAgICAgICAgID0gIDIyLAorICAgIGRlY29tcHJlc3Npb25fZmFpbHVyZSAgICAgICAgICAgPSAgMzAsCisgICAgaGFuZHNoYWtlX2ZhaWx1cmUgICAgICAgICAgICAgICA9ICA0MCwKKyAgICBub19jZXJ0aWZpY2F0ZSAgICAgICAgICAgICAgICAgID0gIDQxLAorICAgIGJhZF9jZXJ0aWZpY2F0ZSAgICAgICAgICAgICAgICAgPSAgNDIsCisgICAgdW5zdXBwb3J0ZWRfY2VydGlmaWNhdGUgICAgICAgICA9ICA0MywKKyAgICBjZXJ0aWZpY2F0ZV9yZXZva2VkICAgICAgICAgICAgID0gIDQ0LAorICAgIGNlcnRpZmljYXRlX2V4cGlyZWQgICAgICAgICAgICAgPSAgNDUsCisgICAgY2VydGlmaWNhdGVfdW5rbm93biAgICAgICAgICAgICA9ICA0NiwKKyAgICBpbGxlZ2FsX3BhcmFtZXRlciAgICAgICAgICAgICAgID0gIDQ3LAorICAgIHVua25vd25fY2EgICAgICAgICAgICAgICAgICAgICAgPSAgNDgsCisgICAgZGVjb2RlX2Vycm9yICAgICAgICAgICAgICAgICAgICA9ICA1MCwKKyAgICBkZWNyeXB0X2Vycm9yICAgICAgICAgICAgICAgICAgID0gIDUxLAorICAgICNpZmRlZiBXT0xGU1NMX01ZU1FMX0NPTVBBVElCTEUKKyAgICAvKiBjYXRjaCBuYW1lIGNvbmZsaWN0IGZvciBlbnVtIHByb3RvY29sIHdpdGggTVlTUUwgYnVpbGQgKi8KKyAgICB3Y19wcm90b2NvbF92ZXJzaW9uICAgICAgICAgICAgID0gIDcwLAorICAgICNlbHNlCisgICAgcHJvdG9jb2xfdmVyc2lvbiAgICAgICAgICAgICAgICA9ICA3MCwKKyAgICAjZW5kaWYKKyAgICBpbmFwcHJvcHJpYXRlX2ZhbGxiYWNrICAgICAgICAgID0gIDg2LAorICAgIG5vX3JlbmVnb3RpYXRpb24gICAgICAgICAgICAgICAgPSAxMDAsCisgICAgbWlzc2luZ19leHRlbnNpb24gICAgICAgICAgICAgICA9IDEwOSwKKyAgICB1bnN1cHBvcnRlZF9leHRlbnNpb24gICAgICAgICAgID0gMTEwLCAvKio8IFJGQyA1MjQ2LCBzZWN0aW9uIDcuMi4yICovCisgICAgdW5yZWNvZ25pemVkX25hbWUgICAgICAgICAgICAgICA9IDExMiwgLyoqPCBSRkMgNjA2Niwgc2VjdGlvbiAzICovCisgICAgYmFkX2NlcnRpZmljYXRlX3N0YXR1c19yZXNwb25zZSA9IDExMywgLyoqPCBSRkMgNjA2Niwgc2VjdGlvbiA4ICovCisgICAgdW5rbm93bl9wc2tfaWRlbnRpdHkgICAgICAgICAgICA9IDExNSwgLyoqPCBSRkMgNDI3OSwgc2VjdGlvbiAyICovCisgICAgY2VydGlmaWNhdGVfcmVxdWlyZWQgICAgICAgICAgICA9IDExNiwgLyoqPCBSRkMgODQ0Niwgc2VjdGlvbiA4LjIgKi8KKyAgICBub19hcHBsaWNhdGlvbl9wcm90b2NvbCAgICAgICAgID0gMTIwCit9OworCisKK2VudW0gQWxlcnRMZXZlbCB7CisgICAgYWxlcnRfd2FybmluZyA9IDEsCisgICAgYWxlcnRfZmF0YWwgICA9IDIKK307CisKKy8qIFdTX1JFVFVSTl9DT0RFIG1hY3JvCisgKiBTb21lIE9wZW5TU0wgQVBJcyBzcGVjaWZ5ICIwIiBhcyB0aGUgcmV0dXJuIHZhbHVlIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgorICogSG93ZXZlciwgc29tZSBjb3JyZXNwb25kaW5nIHdvbGZTU0wgQVBJc+OAgHJldHVybiBuZWdhdGl2ZSB2YWx1ZXMuIFN1Y2gKKyAqIGZ1bmN0aW9ucyBzaG91bGQgdXNlIHRoaXMgbWFjcm8gdG8gZmlsbCB0aGlzIGdhcC4gVXNlcnMgd2hvIHdhbnQgdGhlbQorICogdG8gcmV0dXJuIHRoZSBzYW1lIHJldHVybiB2YWx1ZSBhcyBPcGVuU1NMIGNhbiBkZWZpbmUKKyAqIFdPTEZTU0xfRVJSX0NPREVfT1BFTlNTTC4KKyAqIEdpdmUgaXRlbTEgYSB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIHRoZSBwb3RlbnRpYWxseSBuZWdhdGl2ZQorICogd29sZlNTTC1kZWZpbmVkIHJldHVybiB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIGl0c2VsZiwgYW5kCisgKiBnaXZlIGl0ZW0yIHRoZSBvcGVuU1NMLWRlZmluZWQgcmV0dXJuIHZhbHVlLgorICogTm90ZSB0aGF0IHRoaXMgbWFjcm8gcmVwbGFjZXMgb25seSBuZWdhdGl2ZSByZXR1cm4gdmFsdWVzIHdpdGggdGhlCisgKiBzcGVjaWZpZWQgdmFsdWUuCisgKiBTaW5jZSB3b2xmU1NMIDQuNy4wLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB1c2UgdGhpcyBtYWNybzoKKyAqIC0gd29sZlNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zCisgKiAtIHdvbGZTU0xfWDUwOV9MT09LVVBfbG9hZF9maWxlCisgKiAtIHdvbGZTU0xfRVZQX1BLRVlfY21wCisgKi8KKyNpZiBkZWZpbmVkKFdPTEZTU0xfRVJST1JfQ09ERV9PUEVOU1NMKQorICAgICNkZWZpbmUgV1NfUkVUVVJOX0NPREUoaXRlbTEsaXRlbTIpIFwKKyAgICAgICgoaXRlbTEgPCAwKSA/IGl0ZW0yIDogaXRlbTEpCisjZWxzZQorICAgICNkZWZpbmUgV1NfUkVUVVJOX0NPREUoaXRlbTEsaXRlbTIpICAoaXRlbTEpCisjZW5kaWYKKworLyogTWF4aW11bSBtYXN0ZXIga2V5IGxlbmd0aCAoU0VDUkVUX0xFTikgKi8KKyNkZWZpbmUgV09MRlNTTF9NQVhfTUFTVEVSX0tFWV9MRU5HVEggNDgKKy8qIE1heGltdW0gbnVtYmVyIG9mIGdyb3VwcyB0aGF0IGNhbiBiZSBzZXQgKi8KKyNkZWZpbmUgV09MRlNTTF9NQVhfR1JPVVBfQ09VTlQgICAgICAgMTAKKworI2lmIGRlZmluZWQoSEFWRV9TRUNSRVRfQ0FMTEJBQ0spICYmIGRlZmluZWQoV09MRlNTTF9UTFMxMykKK2VudW0gVGxzMTNTZWNyZXQgeworICAgIENMSUVOVF9FQVJMWV9UUkFGRklDX1NFQ1JFVCwKKyAgICBDTElFTlRfSEFORFNIQUtFX1RSQUZGSUNfU0VDUkVULAorICAgIFNFUlZFUl9IQU5EU0hBS0VfVFJBRkZJQ19TRUNSRVQsCisgICAgQ0xJRU5UX1RSQUZGSUNfU0VDUkVULAorICAgIFNFUlZFUl9UUkFGRklDX1NFQ1JFVCwKKyAgICBFQVJMWV9FWFBPUlRFUl9TRUNSRVQsCisgICAgRVhQT1JURVJfU0VDUkVUCit9OworI2VuZGlmCisKKwordHlwZWRlZiBXT0xGU1NMX01FVEhPRCogKCp3b2xmU1NMX21ldGhvZF9mdW5jKSh2b2lkKiBoZWFwKTsKKworLyogQ1RYIE1ldGhvZCBFWCBDb25zdHJ1Y3RvciBGdW5jdGlvbnMgKi8KK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmVExTX2NsaWVudF9tZXRob2RfZXgodm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZlRMU19zZXJ2ZXJfbWV0aG9kX2V4KHZvaWQqIGhlYXApOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZTU0x2M19tZXRob2RfZXgodm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZlNTTHYzX3NlcnZlcl9tZXRob2RfZXgodm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZlNTTHYzX2NsaWVudF9tZXRob2RfZXgodm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZlRMU3YxX21ldGhvZF9leCh2b2lkKiBoZWFwKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmVExTdjFfc2VydmVyX21ldGhvZF9leCh2b2lkKiBoZWFwKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmVExTdjFfY2xpZW50X21ldGhvZF9leCh2b2lkKiBoZWFwKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmVExTdjFfMV9tZXRob2RfZXgodm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZlRMU3YxXzFfc2VydmVyX21ldGhvZF9leCh2b2lkKiBoZWFwKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmVExTdjFfMV9jbGllbnRfbWV0aG9kX2V4KHZvaWQqIGhlYXApOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFN2MV8yX21ldGhvZF9leCh2b2lkKiBoZWFwKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmVExTdjFfMl9zZXJ2ZXJfbWV0aG9kX2V4KHZvaWQqIGhlYXApOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFN2MV8yX2NsaWVudF9tZXRob2RfZXgodm9pZCogaGVhcCk7CisjaWZkZWYgV09MRlNTTF9UTFMxMworICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmVExTdjFfM19tZXRob2RfZXgodm9pZCogaGVhcCk7CisgICAgV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFN2MV8zX3NlcnZlcl9tZXRob2RfZXgodm9pZCogaGVhcCk7CisgICAgV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFN2MV8zX2NsaWVudF9tZXRob2RfZXgodm9pZCogaGVhcCk7CisjZW5kaWYKKworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZTU0x2MjNfbWV0aG9kX2V4KHZvaWQqIGhlYXApOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZTU0x2MjNfc2VydmVyX21ldGhvZF9leCh2b2lkKiBoZWFwKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmU1NMdjIzX2NsaWVudF9tZXRob2RfZXgodm9pZCogaGVhcCk7CisKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICBXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZkRUTFNfbWV0aG9kX2V4KHZvaWQqIGhlYXApOworICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmRFRMU19jbGllbnRfbWV0aG9kX2V4KHZvaWQqIGhlYXApOworICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmRFRMU19zZXJ2ZXJfbWV0aG9kX2V4KHZvaWQqIGhlYXApOworICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmRFRMU3YxX21ldGhvZF9leCh2b2lkKiBoZWFwKTsKKyAgICBXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZkRUTFN2MV9jbGllbnRfbWV0aG9kX2V4KHZvaWQqIGhlYXApOworICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmRFRMU3YxX3NlcnZlcl9tZXRob2RfZXgodm9pZCogaGVhcCk7CisgICAgV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZEVExTdjFfMl9tZXRob2RfZXgodm9pZCogaGVhcCk7CisgICAgV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZEVExTdjFfMl9jbGllbnRfbWV0aG9kX2V4KHZvaWQqIGhlYXApOworICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmRFRMU3YxXzJfc2VydmVyX21ldGhvZF9leCh2b2lkKiBoZWFwKTsKKyNlbmRpZgorCisvKiBDVFggTWV0aG9kIENvbnN0cnVjdG9yIEZ1bmN0aW9ucyAqLworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFNfY2xpZW50X21ldGhvZCh2b2lkKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmVExTX3NlcnZlcl9tZXRob2Qodm9pZCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZlNTTHYzX21ldGhvZCh2b2lkKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmU1NMdjIzX21ldGhvZCh2b2lkKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmU1NMdjNfc2VydmVyX21ldGhvZCh2b2lkKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmU1NMdjNfY2xpZW50X21ldGhvZCh2b2lkKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmVExTdjFfbWV0aG9kKHZvaWQpOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFN2MV9zZXJ2ZXJfbWV0aG9kKHZvaWQpOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFN2MV9jbGllbnRfbWV0aG9kKHZvaWQpOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFN2MV8xX21ldGhvZCh2b2lkKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmVExTdjFfMV9zZXJ2ZXJfbWV0aG9kKHZvaWQpOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFN2MV8xX2NsaWVudF9tZXRob2Qodm9pZCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZlRMU3YxXzJfbWV0aG9kKHZvaWQpOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFN2MV8yX3NlcnZlcl9tZXRob2Qodm9pZCk7CitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZlRMU3YxXzJfY2xpZW50X21ldGhvZCh2b2lkKTsKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZUTFN2MV8zX21ldGhvZCh2b2lkKTsKKyAgICBXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZlRMU3YxXzNfc2VydmVyX21ldGhvZCh2b2lkKTsKKyAgICBXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZlRMU3YxXzNfY2xpZW50X21ldGhvZCh2b2lkKTsKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9EVExTCisgICAgV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZEVExTX21ldGhvZCh2b2lkKTsKKyAgICBXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZkRUTFNfc2VydmVyX21ldGhvZCh2b2lkKTsKKyAgICBXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZkRUTFNfY2xpZW50X21ldGhvZCh2b2lkKTsKKyAgICBXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZkRUTFN2MV9tZXRob2Qodm9pZCk7CisgICAgV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZEVExTdjFfY2xpZW50X21ldGhvZCh2b2lkKTsKKyAgICBXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZkRUTFN2MV9zZXJ2ZXJfbWV0aG9kKHZvaWQpOworICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmRFRMU3YxXzJfbWV0aG9kKHZvaWQpOworICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfTUVUSE9EICp3b2xmRFRMU3YxXzJfY2xpZW50X21ldGhvZCh2b2lkKTsKKyAgICBXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCAqd29sZkRUTFN2MV8yX3NlcnZlcl9tZXRob2Qodm9pZCk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUE9MWTEzMDUKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF91c2Vfb2xkX3BvbHkoV09MRlNTTCosIGludCk7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfU0VTU0lPTl9FWFBPUlQKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKworI2lmbmRlZiBXT0xGU1NMX0RUTFNfRVhQT1JUX1RZUEVTCit0eXBlZGVmIGludCAoKndjX2R0bHNfZXhwb3J0KShXT0xGU1NMKiBzc2wsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZXhwb3J0QnVmZmVyLCB1bnNpZ25lZCBpbnQgc3osIHZvaWQqIHVzZXJDdHgpOworI2RlZmluZSBXT0xGU1NMX0RUTFNfRVhQT1JUX1RZUEVTCisjZW5kaWYgLyogV09MRlNTTF9EVExTX0VYUE9SVF9UWVBFUyAqLworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9kdGxzX2ltcG9ydChXT0xGU1NMKiBzc2wsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzeik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfZHRsc19zZXRfZXhwb3J0KFdPTEZTU0xfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjX2R0bHNfZXhwb3J0IGZ1bmMpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfZHRsc19zZXRfZXhwb3J0KFdPTEZTU0wqIHNzbCwgd2NfZHRsc19leHBvcnQgZnVuYyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9kdGxzX2V4cG9ydChXT0xGU1NMKiBzc2wsIHVuc2lnbmVkIGNoYXIqIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBzeik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9kdGxzX2V4cG9ydF9zdGF0ZV9vbmx5KFdPTEZTU0wqIHNzbCwgdW5zaWduZWQgY2hhciogYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIHN6KTsKKyNlbmRpZiAvKiBXT0xGU1NMX0RUTFMgKi8KKyNlbmRpZiAvKiBXT0xGU1NMX1NFU1NJT05fRVhQT1JUICovCisKKyNpZmRlZiBXT0xGU1NMX1NUQVRJQ19NRU1PUlkKKyNpZm5kZWYgV09MRlNTTF9NRU1fR1VBUkQKKyNkZWZpbmUgV09MRlNTTF9NRU1fR1VBUkQKKyAgICB0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX01FTV9TVEFUUyAgICAgIFdPTEZTU0xfTUVNX1NUQVRTOworICAgIHR5cGVkZWYgc3RydWN0IFdPTEZTU0xfTUVNX0NPTk5fU1RBVFMgV09MRlNTTF9NRU1fQ09OTl9TVEFUUzsKKyNlbmRpZgorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX2xvYWRfc3RhdGljX21lbW9yeShXT0xGU1NMX0NUWCoqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9tZXRob2RfZnVuYyBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQgaW50IHN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZywgaW50IG1heCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfaXNfc3RhdGljX21lbW9yeShXT0xGU1NMX0NUWCogY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfTUVNX1NUQVRTKiBtZW1fc3RhdHMpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfaXNfc3RhdGljX21lbW9yeShXT0xGU1NMKiBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfTUVNX0NPTk5fU1RBVFMqIG1lbV9zdGF0cyk7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKE5PX0NFUlRTKQorCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiwgaW50KTsKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciosIGludCk7CisKKyNlbmRpZgorCisjaWZuZGVmIE5PX0NFUlRTCisjZGVmaW5lIFdPTEZTU0xfTE9BRF9GTEFHX05PTkUgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBXT0xGU1NMX0xPQURfRkxBR19JR05PUkVfRVJSICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgV09MRlNTTF9MT0FEX0ZMQUdfREFURV9FUlJfT0tBWSAweDAwMDAwMDAyCisjZGVmaW5lIFdPTEZTU0xfTE9BRF9GTEFHX1BFTV9DQV9PTkxZICAgMHgwMDAwMDAwNAorI2lmIGRlZmluZWQoV09MRlNTTF9RVCkKKyNkZWZpbmUgV09MRlNTTF9MT0FEX0ZMQUdfSUdOT1JFX0JBRF9QQVRIX0VSUiAweDAwMDAwMDA4CisjZGVmaW5lIFdPTEZTU0xfTE9BRF9GTEFHX0lHTk9SRV9aRVJPRklMRSAgICAgMHgwMDAwMDAxMAorI2VuZGlmCisKKyNpZm5kZWYgV09MRlNTTF9MT0FEX1ZFUklGWV9ERUZBVUxUX0ZMQUdTCisjZGVmaW5lIFdPTEZTU0xfTE9BRF9WRVJJRllfREVGQVVMVF9GTEFHUyBXT0xGU1NMX0xPQURfRkxBR19OT05FCisjZW5kaWYKKworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX2dldF92ZXJpZnlfZGVwdGgoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfZ2V0X3ZlcmlmeV9kZXB0aChXT0xGU1NMX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X3ZlcmlmeV9kZXB0aChXT0xGU1NMX0NUWCAqY3R4LGludCBkZXB0aCk7CisjZW5kaWYgLyogIU5PX0NFUlRTICovCisKKyNkZWZpbmUgV09MRlNTTF9DSVBIRVJfU1VJVEVfRkxBR19OT05FICAgICAgICAgIDB4MAorI2RlZmluZSBXT0xGU1NMX0NJUEhFUl9TVUlURV9GTEFHX05BTUVBTElBUyAgICAgMHgxCisKKyNpZiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19DRVJUUykKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9uc19leChXT0xGU1NMX0NUWCosIGNvbnN0IGNoYXIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciosIHVuc2lnbmVkIGludCk7CitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CisjaWZkZWYgV09MRlNTTF9UUlVTVF9QRUVSX0NFUlQKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF90cnVzdF9wZWVyX2NlcnQoV09MRlNTTF9DVFgqLCBjb25zdCBjaGFyKiwgaW50KTsKKyNlbmRpZgorV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0NUWCosIGNvbnN0IGNoYXIqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZV9mb3JtYXQoV09MRlNTTF9DVFggKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGZvcm1hdCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfZmlsZShXT0xGU1NMX0NUWCosIGNvbnN0IGNoYXIqLCBpbnQpOworCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF91c2VfY2VydGlmaWNhdGVfZmlsZShXT0xGU1NMKiwgY29uc3QgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZShXT0xGU1NMKiwgY29uc3QgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoV09MRlNTTCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGVfZm9ybWF0KFdPTEZTU0wqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgZm9ybWF0KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGUoV09MRlNTTCosIGNvbnN0IGNoYXIqLCBpbnQpOworCisjaWZkZWYgV09MRlNTTF9ERVJfTE9BRAorICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9kZXJfbG9hZF92ZXJpZnlfbG9jYXRpb25zKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiwgaW50KTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9OVFJVCisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3VzZV9OVFJVUHJpdmF0ZUtleV9maWxlKFdPTEZTU0xfQ1RYKiwgY29uc3QgY2hhciopOworICAgIC8qIGxvYWQgTlRSVSBwcml2YXRlIGtleSBibG9iICovCisjZW5kaWYKKworI2VuZGlmIC8qICFOT19GSUxFU1lTVEVNICYmICFOT19DRVJUUyAqLworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0NUWCogd29sZlNTTF9DVFhfbmV3X2V4KFdPTEZTU0xfTUVUSE9EKiBtZXRob2QsIHZvaWQqIGhlYXApOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgV09MRlNTTF9DVFgqIHdvbGZTU0xfQ1RYX25ldyhXT0xGU1NMX01FVEhPRCopOworI2lmZGVmIE9QRU5TU0xfRVhUUkEKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF91cF9yZWYoV09MRlNTTF9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9zZXRfZWNkaF9hdXRvKFdPTEZTU0xfQ1RYKiBjdHgsIGludCBvbm9mZik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9nZXRfc2lnbmF0dXJlX25pZChXT0xGU1NMKiBzc2wsIGludCogbmlkKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfc2V0MV9zaWdhbGdzX2xpc3QoV09MRlNTTF9DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbGlzdCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2V0MV9zaWdhbGdzX2xpc3QoV09MRlNTTCogc3NsLCBjb25zdCBjaGFyKiBsaXN0KTsKKyNlbmRpZgorV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgV09MRlNTTCogd29sZlNTTF9uZXcoV09MRlNTTF9DVFgqKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQ1RYKiB3b2xmU1NMX2dldF9TU0xfQ1RYKFdPTEZTU0wqIHNzbCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNKiB3b2xmU1NMX0NUWF9nZXQwX3BhcmFtKFdPTEZTU0xfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X1ZFUklGWV9QQVJBTSogd29sZlNTTF9nZXQwX3BhcmFtKFdPTEZTU0wqIHNzbCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfc2V0MV9wYXJhbShXT0xGU1NMX0NUWCogY3R4LCBXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNICp2cG0pOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2lzX3NlcnZlcihXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBXT0xGU1NMKiB3b2xmU1NMX3dyaXRlX2R1cChXT0xGU1NMKik7CitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2V0X2ZkIChXT0xGU1NMKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zZXRfd3JpdGVfZmQgKFdPTEZTU0wqLCBpbnQpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX3NldF9yZWFkX2ZkIChXT0xGU1NMKiwgaW50KTsKK1dPTEZTU0xfQVBJIGNoYXIqIHdvbGZTU0xfZ2V0X2NpcGhlcl9saXN0KGludCBwcmlvcml0eSk7CitXT0xGU1NMX0FQSSBjaGFyKiB3b2xmU1NMX2dldF9jaXBoZXJfbGlzdF9leChXT0xGU1NMKiBzc2wsIGludCBwcmlvcml0eSk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfZ2V0X2NpcGhlcnMoY2hhciosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9nZXRfY2lwaGVyc19pYW5hKGNoYXIqLCBpbnQpOworV09MRlNTTF9BUEkgY29uc3QgY2hhciogd29sZlNTTF9nZXRfY2lwaGVyX25hbWUoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGNvbnN0IGNoYXIqIHdvbGZTU0xfZ2V0X2NpcGhlcl9uYW1lX2Zyb21fc3VpdGUoY29uc3QgdW5zaWduZWQgY2hhciwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKTsKK1dPTEZTU0xfQVBJIGNvbnN0IGNoYXIqIHdvbGZTU0xfZ2V0X2NpcGhlcl9uYW1lX2lhbmFfZnJvbV9zdWl0ZSgKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyLCBjb25zdCB1bnNpZ25lZCBjaGFyKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX2dldF9jaXBoZXJfc3VpdGVfZnJvbV9uYW1lKGNvbnN0IGNoYXIqIG5hbWUsCisgICAgYnl0ZSogY2lwaGVyU3VpdGUwLCBieXRlKiBjaXBoZXJTdWl0ZSwgaW50KiBmbGFncyk7CitXT0xGU1NMX0FQSSBjb25zdCBjaGFyKiB3b2xmU1NMX2dldF9zaGFyZWRfY2lwaGVycyhXT0xGU1NMKiBzc2wsIGNoYXIqIGJ1ZiwKKyAgICBpbnQgbGVuKTsKK1dPTEZTU0xfQVBJIGNvbnN0IGNoYXIqIHdvbGZTU0xfZ2V0X2N1cnZlX25hbWUoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9nZXRfZmQoY29uc3QgV09MRlNTTCopOworLyogcGxlYXNlIHNlZSBub3RlIGF0IHRvcCBvZiBSRUFETUUgaWYgeW91IGdldCBhbiBlcnJvciBmcm9tIGNvbm5lY3QgKi8KK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCAgd29sZlNTTF9jb25uZWN0KFdPTEZTU0wqKTsKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCAgd29sZlNTTF93cml0ZShXT0xGU1NMKiwgY29uc3Qgdm9pZCosIGludCk7CitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfcmVhZChXT0xGU1NMKiwgdm9pZCosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfcGVlayhXT0xGU1NMKiwgdm9pZCosIGludCk7CitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfYWNjZXB0KFdPTEZTU0wqKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfbXV0dWFsX2F1dGgoV09MRlNTTF9DVFgqIGN0eCwgaW50IHJlcSk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfbXV0dWFsX2F1dGgoV09MRlNTTCogc3NsLCBpbnQgcmVxKTsKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2VuZF9ocnJfY29va2llKFdPTEZTU0wqIHNzbCwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzZWNyZXQsIHVuc2lnbmVkIGludCBzZWNyZXRTeik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX25vX3RpY2tldF9UTFN2MTMoV09MRlNTTF9DVFgqIGN0eCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfbm9fdGlja2V0X1RMU3YxMyhXT0xGU1NMKiBzc2wpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0NUWF9ub19kaGVfcHNrKFdPTEZTU0xfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX25vX2RoZV9wc2soV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF91cGRhdGVfa2V5cyhXT0xGU1NMKiBzc2wpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2tleV91cGRhdGVfcmVzcG9uc2UoV09MRlNTTCogc3NsLCBpbnQqIHJlcXVpcmVkKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfYWxsb3dfcG9zdF9oYW5kc2hha2VfYXV0aChXT0xGU1NMX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9hbGxvd19wb3N0X2hhbmRzaGFrZV9hdXRoKFdPTEZTU0wqIHNzbCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfcmVxdWVzdF9jZXJ0aWZpY2F0ZShXT0xGU1NMKiBzc2wpOworCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX3NldDFfZ3JvdXBzX2xpc3QoV09MRlNTTF9DVFggKmN0eCwgY2hhciAqbGlzdCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2V0MV9ncm91cHNfbGlzdChXT0xGU1NMICpzc2wsIGNoYXIgKmxpc3QpOworCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfcHJlZmVycmVkX2dyb3VwKFdPTEZTU0wqIHNzbCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX3NldF9ncm91cHMoV09MRlNTTF9DVFgqIGN0eCwgaW50KiBncm91cHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zZXRfZ3JvdXBzKFdPTEZTU0wqIHNzbCwgaW50KiBncm91cHMsIGludCBjb3VudCk7CisKKyNpZmRlZiBPUEVOU1NMX0VYVFJBCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX3NldDFfZ3JvdXBzKFdPTEZTU0xfQ1RYKiBjdHgsIGludCogZ3JvdXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2V0MV9ncm91cHMoV09MRlNTTCogc3NsLCBpbnQqIGdyb3VwcywgaW50IGNvdW50KTsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfY29ubmVjdF9UTFN2MTMoV09MRlNTTCopOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2FjY2VwdF9UTFN2MTMoV09MRlNTTCopOworCisjaWZkZWYgV09MRlNTTF9FQVJMWV9EQVRBCisKKyNkZWZpbmUgV09MRlNTTF9FQVJMWV9EQVRBX05PVF9TRU5UICAgIDAKKyNkZWZpbmUgV09MRlNTTF9FQVJMWV9EQVRBX1JFSkVDVEVEICAgIDEKKyNkZWZpbmUgV09MRlNTTF9FQVJMWV9EQVRBX0FDQ0VQVEVEICAgIDIKKworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0NUWF9zZXRfbWF4X2Vhcmx5X2RhdGEoV09MRlNTTF9DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzeik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2V0X21heF9lYXJseV9kYXRhKFdPTEZTU0wqIHNzbCwgdW5zaWduZWQgaW50IHN6KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF93cml0ZV9lYXJseV9kYXRhKFdPTEZTU0wqIHNzbCwgY29uc3Qgdm9pZCogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzeiwgaW50KiBvdXRTeik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfcmVhZF9lYXJseV9kYXRhKFdPTEZTU0wqIHNzbCwgdm9pZCogZGF0YSwgaW50IHN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG91dFN6KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9nZXRfZWFybHlfZGF0YV9zdGF0dXMoY29uc3QgV09MRlNTTCogc3NsKTsKKyNlbmRpZiAvKiBXT0xGU1NMX0VBUkxZX0RBVEEgKi8KKyNlbmRpZiAvKiBXT0xGU1NMX1RMUzEzICovCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX2ZyZWUoV09MRlNTTF9DVFgqKTsKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9mcmVlKFdPTEZTU0wqKTsKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zaHV0ZG93bihXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2VuZChXT0xGU1NMKiwgY29uc3Qgdm9pZCosIGludCBzeiwgaW50IGZsYWdzKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9yZWN2KFdPTEZTU0wqLCB2b2lkKiwgaW50IHN6LCBpbnQgZmxhZ3MpOworCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX3NldF9xdWlldF9zaHV0ZG93bihXT0xGU1NMX0NUWCosIGludCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2V0X3F1aWV0X3NodXRkb3duKFdPTEZTU0wqLCBpbnQpOworCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfZ2V0X2Vycm9yKFdPTEZTU0wqLCBpbnQpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2dldF9hbGVydF9oaXN0b3J5KFdPTEZTU0wqLCBXT0xGU1NMX0FMRVJUX0hJU1RPUlkgKik7CisKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zZXRfc2Vzc2lvbihXT0xGU1NMKiwgV09MRlNTTF9TRVNTSU9OKik7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfU1NMX1NFU1NJT05fc2V0X3RpbWVvdXQoV09MRlNTTF9TRVNTSU9OKiwgbG9uZyk7CitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBXT0xGU1NMX1NFU1NJT04qIHdvbGZTU0xfZ2V0X3Nlc3Npb24oV09MRlNTTCopOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX2ZsdXNoX3Nlc3Npb25zKFdPTEZTU0xfQ1RYKiwgbG9uZyk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfU2V0U2VydmVySUQoV09MRlNTTCosIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBpbnQsIGludCk7CisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSB8fCBkZWZpbmVkKFdPTEZTU0xfQVNJTykgfHwgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpIFwKKyAgICB8fCBkZWZpbmVkKFdPTEZTU0xfTkdJTlgpCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQklPX25ld19iaW9fcGFpcihXT0xGU1NMX0JJTyoqLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0JJTyoqLCBzaXplX3QpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTKFdPTEZTU0xfUlNBICpyc2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKkVNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptSGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FVlBfTUQgKmhhc2hBbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYWx0TGVuKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1JTQV92ZXJpZnlfUEtDUzFfUFNTKFdPTEZTU0xfUlNBICpyc2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1IYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FVlBfTUQgKmhhc2hBbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpFTSwgaW50IHNhbHRMZW4pOworV09MRlNTTF9BUEkgV09MRlNTTF9SU0EqIHdvbGZTU0xfZDJpX1JTQVByaXZhdGVLZXlfYmlvKFdPTEZTU0xfQklPKiwgV09MRlNTTF9SU0EqKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX0FTTjEoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgY29uc3QgdW5zaWduZWQgY2hhciopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5KFdPTEZTU0xfQ1RYKiwgV09MRlNTTF9SU0EqKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRVZQX1BLRVkqIHdvbGZTU0xfZDJpX1ByaXZhdGVLZXlfYmlvKFdPTEZTU0xfQklPKiwgV09MRlNTTF9FVlBfUEtFWSoqKTsKKyNlbmRpZiAvKiBPUEVOU1NMX0FMTCB8fCBXT0xGU1NMX0FTSU8gKi8KKworI2lmZGVmIFNFU1NJT05fSU5ERVgKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0dldFNlc3Npb25JbmRleChXT0xGU1NMKiBzc2wpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfR2V0U2Vzc2lvbkF0SW5kZXgoaW50IGluZGV4LCBXT0xGU1NMX1NFU1NJT04qIHNlc3Npb24pOworI2VuZGlmIC8qIFNFU1NJT05fSU5ERVggKi8KKworI2lmIGRlZmluZWQoU0VTU0lPTl9DRVJUUykKK1dPTEZTU0xfQVBJCisgICAgV09MRlNTTF9YNTA5X0NIQUlOKiB3b2xmU1NMX1NFU1NJT05fZ2V0X3BlZXJfY2hhaW4oV09MRlNTTF9TRVNTSU9OKiBzZXNzaW9uKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOSogd29sZlNTTF9TRVNTSU9OX2dldDBfcGVlcihXT0xGU1NMX1NFU1NJT04qIHNlc3Npb24pOworI2VuZGlmIC8qIFNFU1NJT05fSU5ERVggJiYgU0VTU0lPTl9DRVJUUyAqLworCit0eXBlZGVmIGludCAoKlZlcmlmeUNhbGxiYWNrKShpbnQsIFdPTEZTU0xfWDUwOV9TVE9SRV9DVFgqKTsKK3R5cGVkZWYgdm9pZCAoQ2FsbGJhY2tJbmZvU3RhdGUpKGNvbnN0IFdPTEZTU0wqLCBpbnQsIGludCk7CisKKy8qIGNsYXNzIGluZGV4IGZvciB3b2xmU1NMX0NSWVBUT19nZXRfZXhfbmV3X2luZGV4ICovCisjZGVmaW5lIENSWVBUT19FWF9JTkRFWF9TU0wgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fRVhfSU5ERVhfU1NMX0NUWCAgICAgICAgIDEKKyNkZWZpbmUgQ1JZUFRPX0VYX0lOREVYX1NTTF9TRVNTSU9OICAgICAyCisjZGVmaW5lIENSWVBUT19FWF9JTkRFWF9YNTA5ICAgICAgICAgICAgMworI2RlZmluZSBDUllQVE9fRVhfSU5ERVhfWDUwOV9TVE9SRSAgICAgIDQKKyNkZWZpbmUgQ1JZUFRPX0VYX0lOREVYX1g1MDlfU1RPUkVfQ1RYICA1CisjZGVmaW5lIENSWVBUT19FWF9JTkRFWF9ESCAgICAgICAgICAgICAgNgorI2RlZmluZSBDUllQVE9fRVhfSU5ERVhfRFNBICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1JZUFRPX0VYX0lOREVYX0VDX0tFWSAgICAgICAgICA4CisjZGVmaW5lIENSWVBUT19FWF9JTkRFWF9SU0EgICAgICAgICAgICAgOQorI2RlZmluZSBDUllQVE9fRVhfSU5ERVhfRU5HSU5FICAgICAgICAgIDEwCisjZGVmaW5lIENSWVBUT19FWF9JTkRFWF9VSSAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ1JZUFRPX0VYX0lOREVYX0JJTyAgICAgICAgICAgICAxMgorI2RlZmluZSBDUllQVE9fRVhfSU5ERVhfQVBQICAgICAgICAgICAgIDEzCisjZGVmaW5lIENSWVBUT19FWF9JTkRFWF9VSV9NRVRIT0QgICAgICAgMTQKKyNkZWZpbmUgQ1JZUFRPX0VYX0lOREVYX0RSQkcgICAgICAgICAgICAxNQorI2RlZmluZSBDUllQVE9fRVhfSU5ERVhfX0NPVU5UICAgICAgICAgIDE2CisKKyNpZiBkZWZpbmVkKEhBVkVfRVhfREFUQSkgfHwgZGVmaW5lZChGT1JUUkVTUykKK3R5cGVkZWYgaW50ICAoV09MRlNTTF9DUllQVE9fRVhfbmV3KSh2b2lkKiBwLCB2b2lkKiBwdHIsCisgICAgICAgIFdPTEZTU0xfQ1JZUFRPX0VYX0RBVEEqIGEsIGludCBpZHgsIGxvbmcgYXJnVmFsdWUsIHZvaWQqIGFyZyk7Cit0eXBlZGVmIGludCAgKFdPTEZTU0xfQ1JZUFRPX0VYX2R1cCkoV09MRlNTTF9DUllQVE9fRVhfREFUQSogb3V0LAorICAgICAgICBXT0xGU1NMX0NSWVBUT19FWF9EQVRBKiBpbiwgdm9pZCogaW5QdHIsIGludCBpZHgsIGxvbmcgYXJnViwgdm9pZCogYXJnKTsKK3R5cGVkZWYgdm9pZCAoV09MRlNTTF9DUllQVE9fRVhfZnJlZSkodm9pZCogcCwgdm9pZCogcHRyLAorICAgICAgICBXT0xGU1NMX0NSWVBUT19FWF9EQVRBKiBhLCBpbnQgaWR4LCBsb25nIGFyZ1ZhbHVlLCB2b2lkKiBhcmcpOworCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfZ2V0X2V4X25ld19pbmRleChsb25nIGFyZ1ZhbHVlLCB2b2lkKiBhcmcsCisgICAgICAgIFdPTEZTU0xfQ1JZUFRPX0VYX25ldyogYSwgV09MRlNTTF9DUllQVE9fRVhfZHVwKiBiLAorICAgICAgICBXT0xGU1NMX0NSWVBUT19FWF9mcmVlKiBjKTsKKworI2VuZGlmCisKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X3ZlcmlmeShXT0xGU1NMX0NUWCosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyaWZ5Q2FsbGJhY2sgdmVyaWZ5X2NhbGxiYWNrKTsKKworI2lmZGVmIE9QRU5TU0xfQUxMCit0eXBlZGVmIGludCAoKkNlcnRWZXJpZnlDYWxsYmFjaykoV09MRlNTTF9YNTA5X1NUT1JFX0NUWCogc3RvcmUsIHZvaWQqIGFyZyk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjayhXT0xGU1NMX0NUWCogY3R4LAorICAgIENlcnRWZXJpZnlDYWxsYmFjayBjYiwgdm9pZCogYXJnKTsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2V0X3ZlcmlmeShXT0xGU1NMKiwgaW50LCBWZXJpZnlDYWxsYmFjayB2ZXJpZnlfY2FsbGJhY2spOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NldF92ZXJpZnlfcmVzdWx0KFdPTEZTU0wqLCBsb25nKTsKKworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgJiYgIWRlZmluZWQoTk9fQ0VSVFMpICYmIFwKKyAgICBkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIGRlZmluZWQoV09MRlNTTF9QT1NUX0hBTkRTSEFLRV9BVVRIKQorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfdmVyaWZ5X2NsaWVudF9wb3N0X2hhbmRzaGFrZShXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfc2V0X3Bvc3RfaGFuZHNoYWtlX2F1dGgoV09MRlNTTF9DVFgqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2V0X3Bvc3RfaGFuZHNoYWtlX2F1dGgoV09MRlNTTCosIGludCk7CisjZW5kaWYKKworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1NldENlcnRDYkN0eChXT0xGU1NMKiwgdm9pZCopOworCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfcGVuZGluZyhXT0xGU1NMKik7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9sb2FkX2Vycm9yX3N0cmluZ3Modm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfbGlicmFyeV9pbml0KHZvaWQpOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyk7CisKKyNpZmRlZiBIQVZFX1NFQ1JFVF9DQUxMQkFDSwordHlwZWRlZiBpbnQgKCpTZXNzaW9uU2VjcmV0Q2IpKFdPTEZTU0wqIHNzbCwgdm9pZCogc2VjcmV0LCBpbnQqIHNlY3JldFN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGN0eCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2V0X3Nlc3Npb25fc2VjcmV0X2NiKFdPTEZTU0wqLCBTZXNzaW9uU2VjcmV0Q2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKTsKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCit0eXBlZGVmIGludCAoKlRsczEzU2VjcmV0Q2IpKFdPTEZTU0wqIHNzbCwgaW50IGlkLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzZWNyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZWNyZXRTeiwgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zZXRfdGxzMTNfc2VjcmV0X2NiKFdPTEZTU0wqLCBUbHMxM1NlY3JldENiLCB2b2lkKik7CisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1NFQ1JFVF9DQUxMQkFDSyAqLworCisvKiBzZXNzaW9uIGNhY2hlIHBlcnNpc3RlbmNlICovCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2F2ZV9zZXNzaW9uX2NhY2hlKGNvbnN0IGNoYXIqKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9yZXN0b3JlX3Nlc3Npb25fY2FjaGUoY29uc3QgY2hhciopOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX21lbXNhdmVfc2Vzc2lvbl9jYWNoZSh2b2lkKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9tZW1yZXN0b3JlX3Nlc3Npb25fY2FjaGUoY29uc3Qgdm9pZCosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfZ2V0X3Nlc3Npb25fY2FjaGVfbWVtc2l6ZSh2b2lkKTsKKworLyogY2VydGlmaWNhdGUgY2FjaGUgcGVyc2lzdGVuY2UsIHVzZXMgY3R4IHNpbmNlIGNlcnRzIGFyZSBwZXIgY3R4ICovCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX3NhdmVfY2VydF9jYWNoZShXT0xGU1NMX0NUWCosIGNvbnN0IGNoYXIqKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfcmVzdG9yZV9jZXJ0X2NhY2hlKFdPTEZTU0xfQ1RYKiwgY29uc3QgY2hhciopOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0NUWF9tZW1zYXZlX2NlcnRfY2FjaGUoV09MRlNTTF9DVFgqLCB2b2lkKiwgaW50LCBpbnQqKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfbWVtcmVzdG9yZV9jZXJ0X2NhY2hlKFdPTEZTU0xfQ1RYKiwgY29uc3Qgdm9pZCosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX2dldF9jZXJ0X2NhY2hlX21lbXNpemUoV09MRlNTTF9DVFgqKTsKKworLyogb25seSBzdXBwb3J0cyBmdWxsIG5hbWUgZnJvbSBjaXBoZXJfbmFtZVtdIGRlbGltaXRlZCBieSA6ICovCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChXT0xGU1NMX0NUWCosIGNvbnN0IGNoYXIqKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zZXRfY2lwaGVyX2xpc3QoV09MRlNTTCosIGNvbnN0IGNoYXIqKTsKKworI2lmZGVmIEhBVkVfS0VZSU5HX01BVEVSSUFMCisvKiBLZXlpbmcgTWF0ZXJpYWwgRXhwb3J0ZXIgZm9yIFRMUyAqLworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfZXhwb3J0X2tleWluZ19tYXRlcmlhbChXT0xGU1NMICpzc2wsCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dExlbiwKKyAgICAgICAgY29uc3QgY2hhciAqbGFiZWwsIHNpemVfdCBsYWJlbExlbiwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29udGV4dCwgc2l6ZV90IGNvbnRleHRMZW4sCisgICAgICAgIGludCB1c2VfY29udGV4dCk7CisjZW5kaWYgLyogSEFWRV9LRVlJTkdfTUFURVJJQUwgKi8KKworI2lmZGVmIFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUworCit0eXBlZGVmIGVudW0geworICAgIFdPTEZTU0xfTkVURklMVEVSX1BBU1MgPSAwLAorICAgIFdPTEZTU0xfTkVURklMVEVSX0FDQ0VQVCA9IDEsCisgICAgV09MRlNTTF9ORVRGSUxURVJfUkVKRUNUID0gMgorfSB3b2xmU1NMX25ldGZpbHRlcl9kZWNpc2lvbl90OworCit0eXBlZGVmIGludCAoKk5ldHdvcmtGaWx0ZXJDYWxsYmFja190KSgKKyAgICBXT0xGU1NMICpzc2wsCisgICAgdm9pZCAqQWNjZXB0RmlsdGVyX2FyZywKKyAgICB3b2xmU1NMX25ldGZpbHRlcl9kZWNpc2lvbl90ICpkZWNpc2lvbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfc2V0X0FjY2VwdEZpbHRlcigKKyAgICBXT0xGU1NMX0NUWCAqY3R4LAorICAgIE5ldHdvcmtGaWx0ZXJDYWxsYmFja190IEFjY2VwdEZpbHRlciwKKyAgICB2b2lkICpBY2NlcHRGaWx0ZXJfYXJnKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NldF9BY2NlcHRGaWx0ZXIoCisgICAgV09MRlNTTCAqc3NsLAorICAgIE5ldHdvcmtGaWx0ZXJDYWxsYmFja190IEFjY2VwdEZpbHRlciwKKyAgICB2b2lkICpBY2NlcHRGaWx0ZXJfYXJnKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9zZXRfQ29ubmVjdEZpbHRlcigKKyAgICBXT0xGU1NMX0NUWCAqY3R4LAorICAgIE5ldHdvcmtGaWx0ZXJDYWxsYmFja190IENvbm5lY3RGaWx0ZXIsCisgICAgdm9pZCAqQ29ubmVjdEZpbHRlcl9hcmcpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2V0X0Nvbm5lY3RGaWx0ZXIoCisgICAgV09MRlNTTCAqc3NsLAorICAgIE5ldHdvcmtGaWx0ZXJDYWxsYmFja190IENvbm5lY3RGaWx0ZXIsCisgICAgdm9pZCAqQ29ubmVjdEZpbHRlcl9hcmcpOworCisjZW5kaWYgLyogV09MRlNTTF9XT0xGU0VOVFJZX0hPT0tTICovCisKKy8qIE5vbmJsb2NraW5nIERUTFMgaGVscGVyIGZ1bmN0aW9ucyAqLworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX2R0bHNfc2V0X3VzaW5nX25vbmJsb2NrKFdPTEZTU0wqLCBpbnQpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2R0bHNfZ2V0X3VzaW5nX25vbmJsb2NrKFdPTEZTU0wqKTsKKyNkZWZpbmUgd29sZlNTTF9zZXRfdXNpbmdfbm9uYmxvY2sgd29sZlNTTF9kdGxzX3NldF91c2luZ19ub25ibG9jaworI2RlZmluZSB3b2xmU1NMX2dldF91c2luZ19ub25ibG9jayB3b2xmU1NMX2R0bHNfZ2V0X3VzaW5nX25vbmJsb2NrCisgICAgLyogVGhlIG9sZCBuYW1lcyBhcmUgZGVwcmVjYXRlZC4gKi8KK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9kdGxzX2dldF9jdXJyZW50X3RpbWVvdXQoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9EVExTdjFfZ2V0X3RpbWVvdXQoV09MRlNTTCogc3NsLAorICAgICAgICBXT0xGU1NMX1RJTUVWQUwqIHRpbWVsZWZ0KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9EVExTdjFfc2V0X2luaXRpYWxfdGltZW91dF9kdXJhdGlvbihXT0xGU1NMKiBzc2wsCisgICAgd29yZDMyIGR1cmF0aW9uX21zKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9EVExTdjFfaGFuZGxlX3RpbWVvdXQoV09MRlNTTCogc3NsKTsKKworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2R0bHNfc2V0X3RpbWVvdXRfaW5pdChXT0xGU1NMKiBzc2wsIGludCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfZHRsc19zZXRfdGltZW91dF9tYXgoV09MRlNTTCogc3NsLCBpbnQpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2R0bHNfZ290X3RpbWVvdXQoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9kdGxzX3JldHJhbnNtaXQoV09MRlNTTCopOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2R0bHMoV09MRlNTTCogc3NsKTsKKworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2R0bHNfc2V0X3BlZXIoV09MRlNTTCosIHZvaWQqLCB1bnNpZ25lZCBpbnQpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2R0bHNfZ2V0X3BlZXIoV09MRlNTTCosIHZvaWQqLCB1bnNpZ25lZCBpbnQqKTsKKworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0NUWF9kdGxzX3NldF9zY3RwKFdPTEZTU0xfQ1RYKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfZHRsc19zZXRfc2N0cChXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX2R0bHNfc2V0X210dShXT0xGU1NMX0NUWCosIHVuc2lnbmVkIHNob3J0KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9kdGxzX3NldF9tdHUoV09MRlNTTCosIHVuc2lnbmVkIHNob3J0KTsKKworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2R0bHNfZ2V0X2Ryb3Bfc3RhdHMoV09MRlNTTCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqLCB1bnNpZ25lZCBpbnQqKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfbWNhc3Rfc2V0X21lbWJlcl9pZChXT0xGU1NMX0NUWCosIHVuc2lnbmVkIHNob3J0KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zZXRfc2VjcmV0KFdPTEZTU0wqLCB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiwgY29uc3QgdW5zaWduZWQgY2hhciosCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfbWNhc3RfcmVhZChXT0xGU1NMKiwgdW5zaWduZWQgc2hvcnQqLCB2b2lkKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9tY2FzdF9wZWVyX2FkZChXT0xGU1NMKiwgdW5zaWduZWQgc2hvcnQsIGludCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfbWNhc3RfcGVlcl9rbm93bihXT0xGU1NMKiwgdW5zaWduZWQgc2hvcnQpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX21jYXN0X2dldF9tYXhfcGVlcnModm9pZCk7Cit0eXBlZGVmIGludCAoKkNhbGxiYWNrTWNhc3RIaWdod2F0ZXIpKHVuc2lnbmVkIHNob3J0IHBlZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heFNlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGN1clNlcSwgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfbWNhc3Rfc2V0X2hpZ2h3YXRlcl9jYihXT0xGU1NMX0NUWCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGJhY2tNY2FzdEhpZ2h3YXRlcik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfbWNhc3Rfc2V0X2hpZ2h3YXRlcl9jdHgoV09MRlNTTCosIHZvaWQqKTsKKworV09MRlNTTF9BUEkgaW50ICAgd29sZlNTTF9FUlJfR0VUX0xJQih1bnNpZ25lZCBsb25nIGVycik7CitXT0xGU1NMX0FQSSBpbnQgICB3b2xmU1NMX0VSUl9HRVRfUkVBU09OKHVuc2lnbmVkIGxvbmcgZXJyKTsKK1dPTEZTU0xfQVBJIGNoYXIqIHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZyh1bnNpZ25lZCBsb25nLGNoYXIqKTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZ19uKHVuc2lnbmVkIGxvbmcgZSwgY2hhciogYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3opOworV09MRlNTTF9BUEkgY29uc3QgY2hhciogd29sZlNTTF9FUlJfcmVhc29uX2Vycm9yX3N0cmluZyh1bnNpZ25lZCBsb25nKTsKKworLyogZXh0cmFzICovCisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfU1RBQ0sqIHdvbGZTU0xfc2tfbmV3X25vZGUodm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2tfZnJlZShXT0xGU1NMX1NUQUNLKiBzayk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2tfZnJlZV9ub2RlKFdPTEZTU0xfU1RBQ0sqIGluKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfU1RBQ0sqIHdvbGZTU0xfc2tfZHVwKFdPTEZTU0xfU1RBQ0sqIHNrKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NrX3B1c2hfbm9kZShXT0xGU1NMX1NUQUNLKiogc3RhY2ssIFdPTEZTU0xfU1RBQ0sqIGluKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfU1RBQ0sqIHdvbGZTU0xfc2tfZ2V0X25vZGUoV09MRlNTTF9TVEFDSyogc2ssIGludCBpZHgpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2tfcHVzaChXT0xGU1NMX1NUQUNLICpzdCwgY29uc3Qgdm9pZCAqZGF0YSk7CisKKyNpZiBkZWZpbmVkKEhBVkVfT0NTUCkKKyNpbmNsdWRlICJ3b2xmc3NsL29jc3AuaCIKKyNpbmNsdWRlICJ3b2xmc3NsL3dvbGZjcnlwdC9hc24uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX1FUKQorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2tfQUNDRVNTX0RFU0NSSVBUSU9OX3B1c2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGX1NUQUNLX09GKEFDQ0VTU19ERVNDUklQVElPTikqIHNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9BQ0NFU1NfREVTQ1JJUFRJT04qIGFjY2Vzcyk7CisjZW5kaWYgLyogZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX1FUKSAqLworCit0eXBlZGVmIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9HRU5FUkFMX05BTUUpIFdPTEZTU0xfR0VORVJBTF9OQU1FUzsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2tfWDUwOV9wdXNoKFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X05BTUUpKiBzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOSogeDUwOSk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkqIHdvbGZTU0xfc2tfWDUwOV9wb3AoV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfTkFNRSkqIHNrKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9za19YNTA5X2ZyZWUoV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfTkFNRSkqIHNrKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfR0VORVJBTF9OQU1FKiB3b2xmU1NMX0dFTkVSQUxfTkFNRV9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfR0VORVJBTF9OQU1FX2ZyZWUoV09MRlNTTF9HRU5FUkFMX05BTUUqIGduKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfR0VORVJBTF9OQU1FUyogd29sZlNTTF9HRU5FUkFMX05BTUVTX2R1cCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfR0VORVJBTF9OQU1FUyogZ25zKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NrX0dFTkVSQUxfTkFNRV9wdXNoKFdPTEZTU0xfR0VORVJBTF9OQU1FUyogc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0dFTkVSQUxfTkFNRSogZ24pOworV09MRlNTTF9BUEkgV09MRlNTTF9HRU5FUkFMX05BTUUqIHdvbGZTU0xfc2tfR0VORVJBTF9OQU1FX3ZhbHVlKAorICAgICAgICBXT0xGU1NMX1NUQUNLKiBzaywgaW50IGkpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2tfR0VORVJBTF9OQU1FX251bShXT0xGU1NMX1NUQUNLKiBzayk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2tfR0VORVJBTF9OQU1FX3BvcF9mcmVlKFdPTEZTU0xfU1RBQ0sqIHNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmYpIChXT0xGU1NMX0dFTkVSQUxfTkFNRSopKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9za19HRU5FUkFMX05BTUVfZnJlZShXT0xGU1NMX1NUQUNLKiBzayk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfR0VORVJBTF9OQU1FU19mcmVlKFdPTEZTU0xfR0VORVJBTF9OQU1FUyogbmFtZSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19BQ0NFU1NfREVTQ1JJUFRJT05fbnVtKFdPTEZTU0xfU1RBQ0sqIHNrKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9BVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZSgKKyAgICAgICAgV09MRl9TVEFDS19PRihXT0xGU1NMX0FDQ0VTU19ERVNDUklQVElPTikqIHNrKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQUNDRVNTX0RFU0NSSVBUSU9OKiB3b2xmU1NMX3NrX0FDQ0VTU19ERVNDUklQVElPTl92YWx1ZSgKKyAgICAgICAgV09MRlNTTF9TVEFDSyogc2ssIGludCBpZHgpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NrX0FDQ0VTU19ERVNDUklQVElPTl9mcmVlKFdPTEZTU0xfU1RBQ0sqIHNrKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9za19BQ0NFU1NfREVTQ1JJUFRJT05fcG9wX2ZyZWUoV09MRlNTTF9TVEFDSyogc2ssCisgICAgICAgIHZvaWQgKCpmKSAoV09MRlNTTF9BQ0NFU1NfREVTQ1JJUFRJT04qKSk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQUNDRVNTX0RFU0NSSVBUSU9OX2ZyZWUoV09MRlNTTF9BQ0NFU1NfREVTQ1JJUFRJT04qIGFjY2Vzcyk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2tfWDUwOV9FWFRFTlNJT05fcG9wX2ZyZWUoCisgICAgICAgIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X0VYVEVOU0lPTikqIHNrLAorICAgICAgICB2b2lkICgqZikgKFdPTEZTU0xfWDUwOV9FWFRFTlNJT04qKSk7CitXT0xGU1NMX0FQSSBXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOV9FWFRFTlNJT04pKiB3b2xmU1NMX3NrX1g1MDlfRVhURU5TSU9OX25ld19udWxsKHZvaWQpOworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX09CSkVDVCogd29sZlNTTF9BU04xX09CSkVDVF9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfT0JKRUNUKiB3b2xmU1NMX0FTTjFfT0JKRUNUX2R1cChXT0xGU1NMX0FTTjFfT0JKRUNUKiBvYmopOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0FTTjFfT0JKRUNUX2ZyZWUoV09MRlNTTF9BU04xX09CSkVDVCogb2JqKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfU1RBQ0sqIHdvbGZTU0xfc2tfbmV3X2FzbjFfb2JqKHZvaWQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2tfQVNOMV9PQkpFQ1RfcHVzaChXT0xGX1NUQUNLX09GKFdPTEZTU0xfQVNOMV9PQkpFWFQpKiBzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQVNOMV9PQkpFQ1QqIG9iaik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfT0JKRUNUKiB3b2xmU1NMX3NrX0FTTjFfT0JKRUNUX3BvcCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRl9TVEFDS19PRihXT0xGU1NMX0FTTjFfT0JKRUNUKSogc2spOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NrX0FTTjFfT0JKRUNUX2ZyZWUoV09MRl9TVEFDS19PRihXT0xGU1NMX0FTTjFfT0JKRUNUKSogc2spOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NrX0FTTjFfT0JKRUNUX3BvcF9mcmVlKAorICAgICAgICAgICAgICAgIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9BU04xX09CSkVDVCkqIHNrLAorICAgICAgICAgICAgICAgIHZvaWQgKCpmKShXT0xGU1NMX0FTTjFfT0JKRUNUKikpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQVNOMV9TVFJJTkdfdG9fVVRGOCh1bnNpZ25lZCBjaGFyICoqb3V0LCBXT0xGU1NMX0FTTjFfU1RSSU5HICppbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9BU04xX1VOSVZFUlNBTFNUUklOR190b19zdHJpbmcoV09MRlNTTF9BU04xX1NUUklORyAqcyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19YNTA5X0VYVEVOU0lPTl9udW0oV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfRVhURU5TSU9OKSogc2spOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiogd29sZlNTTF9za19YNTA5X0VYVEVOU0lPTl92YWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOV9FWFRFTlNJT04pKiBzaywgaW50IGlkeCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2V0X2V4X2RhdGEoV09MRlNTTCosIGludCwgdm9pZCopOworI2lmZGVmIEhBVkVfRVhfREFUQV9DTEVBTlVQX0hPT0tTCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9zZXRfZXhfZGF0YV93aXRoX2NsZWFudXAoCisgICAgV09MRlNTTCogc3NsLAorICAgIGludCBpZHgsCisgICAgdm9pZCogZGF0YSwKKyAgICB3b2xmU1NMX2V4X2RhdGFfY2xlYW51cF9yb3V0aW5lX3QgY2xlYW51cF9yb3V0aW5lKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2dldF9zaHV0ZG93bihjb25zdCBXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfc2V0X3JmZChXT0xGU1NMKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zZXRfd2ZkKFdPTEZTU0wqLCBpbnQpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NldF9zaHV0ZG93bihXT0xGU1NMKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0KFdPTEZTU0wqLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NldF9jb25uZWN0X3N0YXRlKFdPTEZTU0wqKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9zZXRfYWNjZXB0X3N0YXRlKFdPTEZTU0wqKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zZXNzaW9uX3JldXNlZChXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TRVNTSU9OX3VwX3JlZihXT0xGU1NMX1NFU1NJT04qIHNlc3Npb24pOworV09MRlNTTF9BUEkgV09MRlNTTF9TRVNTSU9OKiB3b2xmU1NMX1NFU1NJT05fZHVwKFdPTEZTU0xfU0VTU0lPTiogc2Vzc2lvbik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1NFU1NJT04qIHdvbGZTU0xfU0VTU0lPTl9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfU0VTU0lPTl9mcmVlKFdPTEZTU0xfU0VTU0lPTiogc2Vzc2lvbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TRVNTSU9OX3NldF9jaXBoZXIoV09MRlNTTF9TRVNTSU9OKiBzZXNzaW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0NJUEhFUiogY2lwaGVyKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9pc19pbml0X2ZpbmlzaGVkKFdPTEZTU0wqKTsKKworV09MRlNTTF9BUEkgY29uc3QgY2hhciogIHdvbGZTU0xfZ2V0X3ZlcnNpb24oY29uc3QgV09MRlNTTCopOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2dldF9jdXJyZW50X2NpcGhlcl9zdWl0ZShXT0xGU1NMKiBzc2wpOworV09MRlNTTF9BUEkgV09MRlNTTF9DSVBIRVIqICB3b2xmU1NMX2dldF9jdXJyZW50X2NpcGhlcihXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBjaGFyKiB3b2xmU1NMX0NJUEhFUl9kZXNjcmlwdGlvbihjb25zdCBXT0xGU1NMX0NJUEhFUiosIGNoYXIqLCBpbnQpOworV09MRlNTTF9BUEkgY29uc3QgY2hhciogIHdvbGZTU0xfQ0lQSEVSX2dldF9uYW1lKGNvbnN0IFdPTEZTU0xfQ0lQSEVSKiBjaXBoZXIpOworV09MRlNTTF9BUEkgY29uc3QgY2hhciogIHdvbGZTU0xfQ0lQSEVSX2dldF92ZXJzaW9uKGNvbnN0IFdPTEZTU0xfQ0lQSEVSKiBjaXBoZXIpOworV09MRlNTTF9BUEkgd29yZDMyICAgICAgIHdvbGZTU0xfQ0lQSEVSX2dldF9pZChjb25zdCBXT0xGU1NMX0NJUEhFUiogY2lwaGVyKTsKK1dPTEZTU0xfQVBJIGNvbnN0IFdPTEZTU0xfQ0lQSEVSKiB3b2xmU1NMX2dldF9jaXBoZXJfYnlfdmFsdWUod29yZDE2IHZhbHVlKTsKK1dPTEZTU0xfQVBJIGNvbnN0IGNoYXIqICB3b2xmU1NMX1NFU1NJT05fQ0lQSEVSX2dldF9uYW1lKFdPTEZTU0xfU0VTU0lPTiogc2Vzc2lvbik7CitXT0xGU1NMX0FQSSBjb25zdCBjaGFyKiAgd29sZlNTTF9nZXRfY2lwaGVyKFdPTEZTU0wqKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9za19DSVBIRVJfZnJlZShXT0xGX1NUQUNLX09GKFdPTEZTU0xfQ0lQSEVSKSogc2spOworV09MRlNTTF9BUEkgV09MRlNTTF9TRVNTSU9OKiB3b2xmU1NMX2dldDFfc2Vzc2lvbihXT0xGU1NMKiBzc2wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2hhdCdzIHJlZiBjb3VudCAqLworCitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkqIHdvbGZTU0xfWDUwOV9uZXcodm9pZCk7CisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpIHx8IGRlZmluZWQoT1BFTlNTTF9BTEwpCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0FfdXBfcmVmKFdPTEZTU0xfUlNBKiByc2EpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV91cF9yZWYoV09MRlNTTF9YNTA5KiB4NTA5KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX3VwX3JlZihXT0xGU1NMX0VWUF9QS0VZKiBwa2V5KTsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9PQ1NQX3BhcnNlX3VybChjaGFyKiB1cmwsIGNoYXIqKiBob3N0LCBjaGFyKiogcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiogcGF0aCwgaW50KiBzc2wpOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX01FVEhPRCogd29sZlNTTHYyM19jbGllbnRfbWV0aG9kKHZvaWQpOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QqIHdvbGZTU0x2Ml9jbGllbnRfbWV0aG9kKHZvaWQpOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QqIHdvbGZTU0x2Ml9zZXJ2ZXJfbWV0aG9kKHZvaWQpOworCisjaWYgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSKSAmJiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMCitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJTyogd29sZlNTTF9CSU9fbmV3KGNvbnN0IFdPTEZTU0xfQklPX01FVEhPRCopOworI2Vsc2UKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklPKiB3b2xmU1NMX0JJT19uZXcoV09MRlNTTF9CSU9fTUVUSE9EKik7CisjZW5kaWYKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9CSU9fZnJlZShXT0xGU1NMX0JJTyopOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0JJT192ZnJlZShXT0xGU1NMX0JJTyopOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0JJT19mcmVlX2FsbChXT0xGU1NMX0JJTyopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQklPX2dldHMoV09MRlNTTF9CSU8qIGJpbywgY2hhciogYnVmLCBpbnQgc3opOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQklPX3B1dHMoV09MRlNTTF9CSU8qIGJpbywgY29uc3QgY2hhciogYnVmKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklPKiB3b2xmU1NMX0JJT19uZXh0KFdPTEZTU0xfQklPKiBiaW8pOworV09MRlNTTF9BUEkgV09MRlNTTF9CSU8qIHdvbGZTU0xfQklPX2ZpbmRfdHlwZShXT0xGU1NMX0JJTyogYmlvLCBpbnQgdHlwZSk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQklPX3JlYWQoV09MRlNTTF9CSU8qLCB2b2lkKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9CSU9fd3JpdGUoV09MRlNTTF9CSU8qLCBjb25zdCB2b2lkKiwgaW50KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklPKiB3b2xmU1NMX0JJT19wdXNoKFdPTEZTU0xfQklPKiwgV09MRlNTTF9CSU8qIGFwcGVuZCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJTyogd29sZlNTTF9CSU9fcG9wKFdPTEZTU0xfQklPKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQklPX2ZsdXNoKFdPTEZTU0xfQklPKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQklPX3BlbmRpbmcoV09MRlNTTF9CSU8qKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9CSU9fc2V0X2NhbGxiYWNrKFdPTEZTU0xfQklPICpiaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmX2Jpb19pbmZvX2NiIGNhbGxiYWNrX2Z1bmMpOworV09MRlNTTF9BUEkgd29sZl9iaW9faW5mb19jYiB3b2xmU1NMX0JJT19nZXRfY2FsbGJhY2soV09MRlNTTF9CSU8gKmJpbyk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0JJT19zZXRfY2FsbGJhY2tfYXJnKFdPTEZTU0xfQklPICpiaW8sIGNoYXIgKmFyZyk7CitXT0xGU1NMX0FQSSBjaGFyKiB3b2xmU1NMX0JJT19nZXRfY2FsbGJhY2tfYXJnKGNvbnN0IFdPTEZTU0xfQklPICpiaW8pOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJT19NRVRIT0QqIHdvbGZTU0xfQklPX2ZfbWQodm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CSU9fZ2V0X21kX2N0eChXT0xGU1NMX0JJTyAqYmlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FVlBfTURfQ1RYICoqbWRjcCk7CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklPX01FVEhPRCogd29sZlNTTF9CSU9fZl9idWZmZXIodm9pZCk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQklPX3NldF93cml0ZV9idWZmZXJfc2l6ZShXT0xGU1NMX0JJTyosIGxvbmcgc2l6ZSk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJT19NRVRIT0QqIHdvbGZTU0xfQklPX2Zfc3NsKHZvaWQpOworV09MRlNTTF9BUEkgV09MRlNTTF9CSU8qICAgICAgICB3b2xmU1NMX0JJT19uZXdfc29ja2V0KGludCBzZmQsIGludCBmbGFnKTsKK1dPTEZTU0xfQVBJIGludCAgICAgICAgIHdvbGZTU0xfQklPX2VvZihXT0xGU1NMX0JJTyopOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJT19NRVRIT0QqIHdvbGZTU0xfQklPX3NfbWVtKHZvaWQpOworV09MRlNTTF9BUEkgV09MRlNTTF9CSU9fTUVUSE9EKiB3b2xmU1NMX0JJT19mX2Jhc2U2NCh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9CSU9fc2V0X2ZsYWdzKFdPTEZTU0xfQklPKiwgaW50KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9CSU9fY2xlYXJfZmxhZ3MoV09MRlNTTF9CSU8gKmJpbywgaW50IGZsYWdzKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19zZXRfZXhfZGF0YShXT0xGU1NMX0JJTyAqYmlvLCBpbnQgaWR4LCB2b2lkICpkYXRhKTsKKyNpZmRlZiBIQVZFX0VYX0RBVEFfQ0xFQU5VUF9IT09LUworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQklPX3NldF9leF9kYXRhX3dpdGhfY2xlYW51cCgKKyAgICBXT0xGU1NMX0JJTyAqYmlvLAorICAgIGludCBpZHgsCisgICAgdm9pZCAqZGF0YSwKKyAgICB3b2xmU1NMX2V4X2RhdGFfY2xlYW51cF9yb3V0aW5lX3QgY2xlYW51cF9yb3V0aW5lKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgdm9pZCAqd29sZlNTTF9CSU9fZ2V0X2V4X2RhdGEoV09MRlNTTF9CSU8gKmJpbywgaW50IGlkeCk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQklPX3NldF9uYmlvKFdPTEZTU0xfQklPKiwgbG9uZyk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19nZXRfbWVtX2RhdGEoV09MRlNTTF9CSU8qIGJpbyx2b2lkKiBwKTsKKworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0JJT19zZXRfaW5pdChXT0xGU1NMX0JJTyosIGludCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQklPX3NldF9kYXRhKFdPTEZTU0xfQklPKiwgdm9pZCopOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9CSU9fZ2V0X2RhdGEoV09MRlNTTF9CSU8qKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9CSU9fc2V0X3NodXRkb3duKFdPTEZTU0xfQklPKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19nZXRfc2h1dGRvd24oV09MRlNTTF9CSU8qKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9CSU9fY2xlYXJfcmV0cnlfZmxhZ3MoV09MRlNTTF9CSU8qKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19zaG91bGRfcmV0cnkoV09MRlNTTF9CSU8gKmJpbyk7CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklPX01FVEhPRCAqd29sZlNTTF9CSU9fbWV0aF9uZXcoaW50LCBjb25zdCBjaGFyKik7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQklPX21ldGhfZnJlZShXT0xGU1NMX0JJT19NRVRIT0QqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19tZXRoX3NldF93cml0ZShXT0xGU1NMX0JJT19NRVRIT0QqLCB3b2xmU1NMX0JJT19tZXRoX3dyaXRlX2NiKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19tZXRoX3NldF9yZWFkKFdPTEZTU0xfQklPX01FVEhPRCosIHdvbGZTU0xfQklPX21ldGhfcmVhZF9jYik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CSU9fbWV0aF9zZXRfcHV0cyhXT0xGU1NMX0JJT19NRVRIT0QqLCB3b2xmU1NMX0JJT19tZXRoX3B1dHNfY2IpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQklPX21ldGhfc2V0X2dldHMoV09MRlNTTF9CSU9fTUVUSE9EKiwgd29sZlNTTF9CSU9fbWV0aF9nZXRzX2NiKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19tZXRoX3NldF9jdHJsKFdPTEZTU0xfQklPX01FVEhPRCosIHdvbGZTU0xfQklPX21ldGhfY3RybF9nZXRfY2IpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQklPX21ldGhfc2V0X2NyZWF0ZShXT0xGU1NMX0JJT19NRVRIT0QqLCB3b2xmU1NMX0JJT19tZXRoX2NyZWF0ZV9jYik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9CSU9fbWV0aF9zZXRfZGVzdHJveShXT0xGU1NMX0JJT19NRVRIT0QqLCB3b2xmU1NMX0JJT19tZXRoX2Rlc3Ryb3lfY2IpOworV09MRlNTTF9BUEkgV09MRlNTTF9CSU8qIHdvbGZTU0xfQklPX25ld19tZW1fYnVmKGNvbnN0IHZvaWQqIGJ1ZiwgaW50IGxlbik7CisKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9CSU9fc2V0X3NzbChXT0xGU1NMX0JJTyosIFdPTEZTU0wqLCBpbnQgZmxhZyk7CisjaWZuZGVmIE5PX0ZJTEVTWVNURU0KK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9CSU9fc2V0X2ZkKFdPTEZTU0xfQklPKiBiLCBpbnQgZmQsIGludCBmbGFnKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQklPX3NldF9jbG9zZShXT0xGU1NMX0JJTyAqYiwgbG9uZyBmbGFnKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9zZXRfYmlvKFdPTEZTU0wqLCBXT0xGU1NMX0JJTyogcmQsIFdPTEZTU0xfQklPKiB3cik7CisKKyNpZm5kZWYgTk9fRklMRVNZU1RFTQorV09MRlNTTF9BUEkgV09MRlNTTF9CSU9fTUVUSE9EICp3b2xmU1NMX0JJT19zX2ZpbGUodm9pZCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJTyAqd29sZlNTTF9CSU9fbmV3X2ZkKGludCBmZCwgaW50IGNsb3NlX2ZsYWcpOworI2VuZGlmCisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklPX01FVEhPRCAqd29sZlNTTF9CSU9fc19iaW8odm9pZCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJT19NRVRIT0QgKndvbGZTU0xfQklPX3Nfc29ja2V0KHZvaWQpOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJTyAqd29sZlNTTF9CSU9fbmV3X2Nvbm5lY3QoY29uc3QgY2hhciAqc3RyKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9CSU9fc2V0X2Nvbm5fcG9ydChXT0xGU1NMX0JJTyAqYiwgY2hhciogcG9ydCk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQklPX2RvX2Nvbm5lY3QoV09MRlNTTF9CSU8gKmIpOworCitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQklPX2RvX2hhbmRzaGFrZShXT0xGU1NMX0JJTyAqYik7CisKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9CSU9fY3RybChXT0xGU1NMX0JJTyAqYnAsIGludCBjbWQsIGxvbmcgbGFyZywgdm9pZCAqcGFyZyk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQklPX2ludF9jdHJsKFdPTEZTU0xfQklPICpicCwgaW50IGNtZCwgbG9uZyBsYXJnLCBpbnQgaWFyZyk7CisKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9CSU9fc2V0X3dyaXRlX2J1Zl9zaXplKFdPTEZTU0xfQklPICpiLCBsb25nIHNpemUpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0JJT19tYWtlX2Jpb19wYWlyKFdPTEZTU0xfQklPICpiMSwgV09MRlNTTF9CSU8gKmIyKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9CSU9fY3RybF9yZXNldF9yZWFkX3JlcXVlc3QoV09MRlNTTF9CSU8gKmIpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0JJT19ucmVhZDAoV09MRlNTTF9CSU8gKmJpbywgY2hhciAqKmJ1Zik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQklPX25yZWFkKFdPTEZTU0xfQklPICpiaW8sIGNoYXIgKipidWYsIGludCBudW0pOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0JJT19ud3JpdGUoV09MRlNTTF9CSU8gKmJpbywgY2hhciAqKmJ1ZiwgaW50IG51bSk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQklPX3Jlc2V0KFdPTEZTU0xfQklPICpiaW8pOworCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQklPX3NlZWsoV09MRlNTTF9CSU8gKmJpbywgaW50IG9mcyk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQklPX3RlbGwoV09MRlNTTF9CSU8qIGJpbyk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQklPX3dyaXRlX2ZpbGVuYW1lKFdPTEZTU0xfQklPICpiaW8sIGNoYXIgKm5hbWUpOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0JJT19zZXRfbWVtX2VvZl9yZXR1cm4oV09MRlNTTF9CSU8gKmJpbywgaW50IHYpOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0JJT19nZXRfbWVtX3B0cihXT0xGU1NMX0JJTyAqYmlvLCBXT0xGU1NMX0JVRl9NRU0gKiptKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19nZXRfbGVuKFdPTEZTU0xfQklPICpiaW8pOworCitXT0xGU1NMX0FQSSB2b2lkICAgICAgICB3b2xmU1NMX1JBTkRfc2NyZWVuKHZvaWQpOworV09MRlNTTF9BUEkgY29uc3QgY2hhciogd29sZlNTTF9SQU5EX2ZpbGVfbmFtZShjaGFyKiwgdW5zaWduZWQgbG9uZyk7CitXT0xGU1NMX0FQSSBpbnQgICAgICAgICB3b2xmU1NMX1JBTkRfd3JpdGVfZmlsZShjb25zdCBjaGFyKik7CitXT0xGU1NMX0FQSSBpbnQgICAgICAgICB3b2xmU1NMX1JBTkRfbG9hZF9maWxlKGNvbnN0IGNoYXIqLCBsb25nKTsKK1dPTEZTU0xfQVBJIGludCAgICAgICAgIHdvbGZTU0xfUkFORF9lZ2QoY29uc3QgY2hhciopOworV09MRlNTTF9BUEkgaW50ICAgICAgICAgd29sZlNTTF9SQU5EX3NlZWQoY29uc3Qgdm9pZCosIGludCk7CitXT0xGU1NMX0FQSSB2b2lkICAgICAgICB3b2xmU1NMX1JBTkRfQ2xlYW51cCh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgICAgICAgIHdvbGZTU0xfUkFORF9hZGQoY29uc3Qgdm9pZCosIGludCwgZG91YmxlKTsKK1dPTEZTU0xfQVBJIGludCAgICAgICAgIHdvbGZTU0xfUkFORF9wb2xsKHZvaWQpOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0NPTVBfTUVUSE9EKiB3b2xmU1NMX0NPTVBfemxpYih2b2lkKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQ09NUF9NRVRIT0QqIHdvbGZTU0xfQ09NUF9ybGUodm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2QoaW50LCB2b2lkKik7CisKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGxvbmcgd29sZlNTTF90aHJlYWRfaWQodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2V0X2lkX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgKCpmKSh2b2lkKSk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2V0X2xvY2tpbmdfY2FsbGJhY2sodm9pZCAoKmYpKGludCwgaW50LCBjb25zdCBjaGFyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCkpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjayhXT0xGU1NMX2R5bmxvY2tfdmFsdWUqICgqZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyKiwgaW50KSk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjayh2b2lkICgqZikoaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX2R5bmxvY2tfdmFsdWUqLCBjb25zdCBjaGFyKiwgaW50KSk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2V0X2R5bmxvY2tfZGVzdHJveV9jYWxsYmFjayh2b2lkICgqZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV09MRlNTTF9keW5sb2NrX3ZhbHVlKiwgY29uc3QgY2hhciosIGludCkpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX251bV9sb2Nrcyh2b2lkKTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5KiB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9TVE9SRV9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCAgIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yKFdPTEZTU0xfWDUwOV9TVE9SRV9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCAgIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yX2RlcHRoKFdPTEZTU0xfWDUwOV9TVE9SRV9DVFgqKTsKKworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9zZXRfdmVyaWZ5X2NiKFdPTEZTU0xfWDUwOV9TVE9SRV9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYX3ZlcmlmeV9jYiB2ZXJpZnlfY2IpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1g1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYihXT0xGU1NMX1g1MDlfU1RPUkUgKnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X1NUT1JFX0NUWF92ZXJpZnlfY2IgdmVyaWZ5X2NiKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX2kyZF9YNTA5X05BTUUoV09MRlNTTF9YNTA5X05BTUUqIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqKiBvdXQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfaTJkX1g1MDlfTkFNRV9jYW5vbihXT0xGU1NMX1g1MDlfTkFNRSogbmFtZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcioqIG91dCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfTkFNRSAqd29sZlNTTF9kMmlfWDUwOV9OQU1FKFdPTEZTU0xfWDUwOV9OQU1FICoqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuZ3RoKTsKKyNpZm5kZWYgTk9fUlNBCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SU0FfcHJpbnQoV09MRlNTTF9CSU8qIGJpbywgV09MRlNTTF9SU0EqIHJzYSwgaW50IG9mZnNldCk7CisjZW5kaWYKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfcHJpbnRfZXgoV09MRlNTTF9CSU8qIGJpbywgV09MRlNTTF9YNTA5KiB4NTA5LAorICAgIHVuc2lnbmVkIGxvbmcgbm1mbGFncywgdW5zaWduZWQgbG9uZyBjZmxhZyk7CisjaWZuZGVmIE5PX0ZJTEVTWVNURU0KK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfcHJpbnRfZnAoWEZJTEUgZnAsIFdPTEZTU0xfWDUwOSAqeDUwOSk7CisjZW5kaWYKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfc2lnbmF0dXJlX3ByaW50KFdPTEZTU0xfQklPICpicCwKKyAgICAgICAgY29uc3QgV09MRlNTTF9YNTA5X0FMR09SICpzaWdhbGcsIGNvbnN0IFdPTEZTU0xfQVNOMV9TVFJJTkcgKnNpZyk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfWDUwOV9nZXQwX3NpZ25hdHVyZShjb25zdCBXT0xGU1NMX0FTTjFfQklUX1NUUklORyAqKnBzaWcsCisgICAgICAgIGNvbnN0IFdPTEZTU0xfWDUwOV9BTEdPUiAqKnBhbGcsIGNvbnN0IFdPTEZTU0xfWDUwOSAqeDUwOSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X3ByaW50KFdPTEZTU0xfQklPKiBiaW8sIFdPTEZTU0xfWDUwOSogeDUwOSk7CitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBjaGFyKiB3b2xmU1NMX1g1MDlfTkFNRV9vbmVsaW5lKFdPTEZTU0xfWDUwOV9OQU1FKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciosIGludCk7CisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSAmJiBkZWZpbmVkKFhTTlBSSU5URikKK1dPTEZTU0xfQVBJIGNoYXIqIHdvbGZTU0xfWDUwOV9nZXRfbmFtZV9vbmVsaW5lKFdPTEZTU0xfWDUwOV9OQU1FKiwgY2hhciosIGludCk7CisjZW5kaWYKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9OQU1FKiB3b2xmU1NMX1g1MDlfZ2V0X2lzc3Vlcl9uYW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1g1MDkqKTsKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGxvbmcgIHdvbGZTU0xfWDUwOV9pc3N1ZXJfbmFtZV9oYXNoKGNvbnN0IFdPTEZTU0xfWDUwOSogeDUwOSk7CitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfTkFNRSogd29sZlNTTF9YNTA5X2dldF9zdWJqZWN0X25hbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOSopOworV09MRlNTTF9BUEkgdW5zaWduZWQgbG9uZyAgd29sZlNTTF9YNTA5X3N1YmplY3RfbmFtZV9oYXNoKGNvbnN0IFdPTEZTU0xfWDUwOSogeDUwOSk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfWDUwOV9leHRfaXNTZXRfYnlfTklEKFdPTEZTU0xfWDUwOSosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfWDUwOV9leHRfZ2V0X2NyaXRpY2FsX2J5X05JRChXT0xGU1NMX1g1MDkqLCBpbnQpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX1g1MDlfZ2V0X2lzQ0EoV09MRlNTTF9YNTA5Kik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfWDUwOV9nZXRfaXNTZXRfcGF0aExlbmd0aChXT0xGU1NMX1g1MDkqKTsKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGludCB3b2xmU1NMX1g1MDlfZ2V0X3BhdGhMZW5ndGgoV09MRlNTTF9YNTA5Kik7CitXT0xGU1NMX0FQSSB1bnNpZ25lZCBpbnQgd29sZlNTTF9YNTA5X2dldF9rZXlVc2FnZShXT0xGU1NMX1g1MDkqKTsKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGNoYXIqIHdvbGZTU0xfWDUwOV9nZXRfYXV0aG9yaXR5S2V5SUQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOSosIHVuc2lnbmVkIGNoYXIqLCBpbnQqKTsKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGNoYXIqIHdvbGZTU0xfWDUwOV9nZXRfc3ViamVjdEtleUlEKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1g1MDkqLCB1bnNpZ25lZCBjaGFyKiwgaW50Kik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfdmVyaWZ5KFdPTEZTU0xfWDUwOSogeDUwOSwgV09MRlNTTF9FVlBfUEtFWSogcGtleSk7CisjaWZkZWYgV09MRlNTTF9DRVJUX1JFUQorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9SRVFfdmVyaWZ5KFdPTEZTU0xfWDUwOSogeDUwOSwgV09MRlNTTF9FVlBfUEtFWSogcGtleSk7CisjZW5kaWYKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfc2V0X3N1YmplY3RfbmFtZShXT0xGU1NMX1g1MDkqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9OQU1FKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X3NldF9pc3N1ZXJfbmFtZShXT0xGU1NMX1g1MDkqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9OQU1FKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X3NldF9wdWJrZXkoV09MRlNTTF9YNTA5KiwgV09MRlNTTF9FVlBfUEtFWSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9zZXRfbm90QWZ0ZXIoV09MRlNTTF9YNTA5KiB4NTA5LAorICAgICAgICBjb25zdCBXT0xGU1NMX0FTTjFfVElNRSogdCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X3NldF9ub3RCZWZvcmUoV09MRlNTTF9YNTA5KiB4NTA5LAorICAgICAgICBjb25zdCBXT0xGU1NMX0FTTjFfVElNRSogdCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfVElNRSogd29sZlNTTF9YNTA5X2dldF9ub3RCZWZvcmUoY29uc3QgV09MRlNTTF9YNTA5KiB4NTA5KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQVNOMV9USU1FKiB3b2xmU1NMX1g1MDlfZ2V0X25vdEFmdGVyKGNvbnN0IFdPTEZTU0xfWDUwOSogeDUwOSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X3NldF9zZXJpYWxOdW1iZXIoV09MRlNTTF9YNTA5KiB4NTA5LAorICAgICAgICBXT0xGU1NMX0FTTjFfSU5URUdFUiogcyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X3NldF92ZXJzaW9uKFdPTEZTU0xfWDUwOSogeDUwOSwgbG9uZyB2KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfc2lnbihXT0xGU1NMX1g1MDkqIHg1MDksIFdPTEZTU0xfRVZQX1BLRVkqIHBrZXksCisgICAgICAgIGNvbnN0IFdPTEZTU0xfRVZQX01EKiBtZCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X3NpZ25fY3R4KFdPTEZTU0xfWDUwOSAqeDUwOSwgV09MRlNTTF9FVlBfTURfQ1RYICpjdHgpOworCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfTkFNRV9lbnRyeV9jb3VudChXT0xGU1NMX1g1MDlfTkFNRSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X05BTUUqLCBpbnQsIGNoYXIqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X05BTUUqLCBpbnQsIGludCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfU1RSSU5HKiB3b2xmU1NMX1g1MDlfTkFNRV9FTlRSWV9nZXRfZGF0YShXT0xGU1NMX1g1MDlfTkFNRV9FTlRSWSopOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfU1RSSU5HKiB3b2xmU1NMX0FTTjFfU1RSSU5HX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQVNOMV9TVFJJTkcqIHdvbGZTU0xfQVNOMV9TVFJJTkdfZHVwKFdPTEZTU0xfQVNOMV9TVFJJTkcqIGFzbjEpOworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX1NUUklORyogd29sZlNTTF9BU04xX1NUUklOR190eXBlX25ldyhpbnQgdHlwZSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9BU04xX1NUUklOR190eXBlKGNvbnN0IFdPTEZTU0xfQVNOMV9TVFJJTkcqIGFzbjEpOworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX1NUUklORyogd29sZlNTTF9kMmlfRElTUExBWVRFWFQoV09MRlNTTF9BU04xX1NUUklORyAqKmFzbiwgY29uc3QgdW5zaWduZWQgY2hhciAqKmluLCBsb25nIGxlbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9BU04xX1NUUklOR19jbXAoY29uc3QgV09MRlNTTF9BU04xX1NUUklORyAqYSwgY29uc3QgV09MRlNTTF9BU04xX1NUUklORyAqYik7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQVNOMV9TVFJJTkdfZnJlZShXT0xGU1NMX0FTTjFfU1RSSU5HKiBhc24xKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0FTTjFfU1RSSU5HX3NldChXT0xGU1NMX0FTTjFfU1RSSU5HKiBhc24xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBkYXRhLCBpbnQgZGF0YVN6KTsKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGNoYXIqIHdvbGZTU0xfQVNOMV9TVFJJTkdfZGF0YShXT0xGU1NMX0FTTjFfU1RSSU5HKik7CitXT0xGU1NMX0FQSSBjb25zdCB1bnNpZ25lZCBjaGFyKiB3b2xmU1NMX0FTTjFfU1RSSU5HX2dldDBfZGF0YSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9BU04xX1NUUklORyopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQVNOMV9TVFJJTkdfbGVuZ3RoKFdPTEZTU0xfQVNOMV9TVFJJTkcqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0FTTjFfU1RSSU5HX2NvcHkoV09MRlNTTF9BU04xX1NUUklORyogZHN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfQVNOMV9TVFJJTkcqIHNyYyk7CitXT0xGU1NMX0FQSSBpbnQgICAgICAgICB3b2xmU1NMX1g1MDlfdmVyaWZ5X2NlcnQoV09MRlNTTF9YNTA5X1NUT1JFX0NUWCopOworV09MRlNTTF9BUEkgY29uc3QgY2hhciogd29sZlNTTF9YNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhsb25nKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfZ2V0X3NpZ25hdHVyZV90eXBlKFdPTEZTU0xfWDUwOSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9nZXRfc2lnbmF0dXJlKFdPTEZTU0xfWDUwOSosIHVuc2lnbmVkIGNoYXIqLCBpbnQqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfZ2V0X3B1YmtleV9idWZmZXIoV09MRlNTTF9YNTA5KiwgdW5zaWduZWQgY2hhciosCisgICAgICAgIGludCopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9nZXRfcHVia2V5X3R5cGUoV09MRlNTTF9YNTA5KiB4NTA5KTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9MT09LVVBfYWRkX2RpcihXT0xGU1NMX1g1MDlfTE9PS1VQKixjb25zdCBjaGFyKixsb25nKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfTE9PS1VQX2xvYWRfZmlsZShXT0xGU1NMX1g1MDlfTE9PS1VQKiwgY29uc3QgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcpOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X0xPT0tVUF9NRVRIT0QqIHdvbGZTU0xfWDUwOV9MT09LVVBfaGFzaF9kaXIodm9pZCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfTE9PS1VQX01FVEhPRCogd29sZlNTTF9YNTA5X0xPT0tVUF9maWxlKHZvaWQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9MT09LVVBfY3RybChXT0xGU1NMX1g1MDlfTE9PS1VQICpjdHgsIGludCBjbWQsCisgICAgICAgIGNvbnN0IGNoYXIgKmFyZ2MsIGxvbmcgYXJnbCwgY2hhciAqKnJldCk7CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9MT09LVVAqIHdvbGZTU0xfWDUwOV9TVE9SRV9hZGRfbG9va3VwKFdPTEZTU0xfWDUwOV9TVE9SRSosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X0xPT0tVUF9NRVRIT0QqKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9TVE9SRSogIHdvbGZTU0xfWDUwOV9TVE9SRV9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkICAgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX2ZyZWUoV09MRlNTTF9YNTA5X1NUT1JFKik7CitXT0xGU1NMX0FQSSBpbnQgICAgICAgICAgd29sZlNTTF9YNTA5X1NUT1JFX2FkZF9jZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9TVE9SRSosIFdPTEZTU0xfWDUwOSopOworV09MRlNTTF9BUEkgV09MRlNTTF9TVEFDSyogd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXRfY2hhaW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgV09MRlNTTF9TVEFDSyogd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXQxX2NoYWluKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X1NUT1JFX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9TVE9SRV9DVFggKndvbGZTU0xfWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJlbnRfY3R4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X1NUT1JFX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfU1RPUkVfc2V0X2ZsYWdzKFdPTEZTU0xfWDUwOV9TVE9SRSogc3RvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWcpOworV09MRlNTTF9BUEkgaW50ICAgICAgICAgIHdvbGZTU0xfWDUwOV9TVE9SRV9zZXRfZGVmYXVsdF9wYXRocyhXT0xGU1NMX1g1MDlfU1RPUkUqKTsKK1dPTEZTU0xfQVBJIGludCAgICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3QoV09MRlNTTF9YNTA5X1NUT1JFX0NUWCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgV09MRlNTTF9YNTA5X05BTUUqLCBXT0xGU1NMX1g1MDlfT0JKRUNUKik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYKiB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9pbml0KFdPTEZTU0xfWDUwOV9TVE9SRV9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9TVE9SRSosIFdPTEZTU0xfWDUwOSosIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5KSopOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2ZyZWUoV09MRlNTTF9YNTA5X1NUT1JFX0NUWCopOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2NsZWFudXAoV09MRlNTTF9YNTA5X1NUT1JFX0NUWCopOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX3RydXN0ZWRfc3RhY2soV09MRlNTTF9YNTA5X1NUT1JFX0NUWCAqY3R4LAorICAgICAgICBXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOSkgKnNrKTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX1RJTUUqIHdvbGZTU0xfWDUwOV9DUkxfZ2V0X2xhc3RVcGRhdGUoV09MRlNTTF9YNTA5X0NSTCopOworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX1RJTUUqIHdvbGZTU0xfWDUwOV9DUkxfZ2V0X25leHRVcGRhdGUoV09MRlNTTF9YNTA5X0NSTCopOworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX1RJTUUqIHdvbGZTU0xfWDUwOV9nbXRpbWVfYWRqKFdPTEZTU0xfQVNOMV9USU1FICpzLCBsb25nIGFkaik7CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRVZQX1BLRVkqIHdvbGZTU0xfWDUwOV9nZXRfcHVia2V5KFdPTEZTU0xfWDUwOSopOworV09MRlNTTF9BUEkgaW50ICAgICAgIHdvbGZTU0xfWDUwOV9DUkxfdmVyaWZ5KFdPTEZTU0xfWDUwOV9DUkwqLCBXT0xGU1NMX0VWUF9QS0VZKik7CitXT0xGU1NMX0FQSSB2b2lkICAgICAgd29sZlNTTF9YNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRzKFdPTEZTU0xfWDUwOV9PQkpFQ1QqKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfUEtDUzhfUFJJVl9LRVlfSU5GTyogd29sZlNTTF9kMmlfUEtDUzhfUEtFWV9iaW8oCisgICAgICAgIFdPTEZTU0xfQklPKiBiaW8sIFdPTEZTU0xfUEtDUzhfUFJJVl9LRVlfSU5GTyoqIHBrZXkpOworV09MRlNTTF9BUEkgV09MRlNTTF9FVlBfUEtFWSogd29sZlNTTF9kMmlfUFVCS0VZX2JpbyhXT0xGU1NMX0JJTyogYmlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0VWUF9QS0VZKiogb3V0KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRVZQX1BLRVkqIHdvbGZTU0xfZDJpX1BVQktFWShXT0xGU1NMX0VWUF9QS0VZKioga2V5LAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiogaW4sIGxvbmcgaW5Teik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmRfUFVCS0VZKGNvbnN0IFdPTEZTU0xfRVZQX1BLRVkgKmtleSwgdW5zaWduZWQgY2hhciAqKmRlcik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0VWUF9QS0VZKiB3b2xmU1NMX2QyaV9Qcml2YXRlS2V5KGludCB0eXBlLAorICAgICAgICBXT0xGU1NMX0VWUF9QS0VZKiogb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgaW5Teik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0VWUF9QS0VZKiB3b2xmU1NMX2QyaV9Qcml2YXRlS2V5X0VWUChXT0xGU1NMX0VWUF9QS0VZKioga2V5LAorICAgICAgICB1bnNpZ25lZCBjaGFyKiogaW4sIGxvbmcgaW5Teik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmRfUHJpdmF0ZUtleShjb25zdCBXT0xGU1NMX0VWUF9QS0VZKiBrZXksCisgICAgICAgIHVuc2lnbmVkIGNoYXIqKiBkZXIpOworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0VWUF9QS0VZX3ByaW50X3B1YmxpYyhXT0xGU1NMX0JJTyogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FVlBfUEtFWSogcGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRlbnQsIFdPTEZTU0xfQVNOMV9QQ1RYKiBwY3R4KTsKKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBICovCitXT0xGU1NMX0FQSSBpbnQgICAgICAgd29sZlNTTF9YNTA5X2NtcF9jdXJyZW50X3RpbWUoY29uc3QgV09MRlNTTF9BU04xX1RJTUUqKTsKKyNpZmRlZiBPUEVOU1NMX0VYVFJBCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X2NtcF90aW1lKGNvbnN0IFdPTEZTU0xfQVNOMV9USU1FKiBhc25UaW1lLAorICAgICAgICB0aW1lX3QgKmNtcFRpbWUpOworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX1RJTUUgKndvbGZTU0xfWDUwOV90aW1lX2Fkal9leChXT0xGU1NMX0FTTjFfVElNRSAqYXNuVGltZSwKKyAgICBpbnQgb2Zmc2V0X2RheSwgbG9uZyBvZmZzZXRfc2VjLCB0aW1lX3QgKmluX3RtKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQVNOMV9USU1FICp3b2xmU1NMX1g1MDlfdGltZV9hZGooV09MRlNTTF9BU04xX1RJTUUgKmFzblRpbWUsCisgICAgbG9uZyBvZmZzZXRfc2VjLCB0aW1lX3QgKmluX3RtKTsKK1dPTEZTU0xfQVBJIGludCAgICAgICB3b2xmU1NMX3NrX1g1MDlfUkVWT0tFRF9udW0oV09MRlNTTF9YNTA5X1JFVk9LRUQqKTsKK1dPTEZTU0xfQVBJIHZvaWQgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX3NldF90aW1lKFdPTEZTU0xfWDUwOV9TVE9SRV9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfdCB0KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9WRVJJRllfUEFSQU0qIHdvbGZTU0xfWDUwOV9WRVJJRllfUEFSQU1fbmV3KHZvaWQpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1g1MDlfVkVSSUZZX1BBUkFNX2ZyZWUoV09MRlNTTF9YNTA5X1ZFUklGWV9QQVJBTSAqcGFyYW0pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9WRVJJRllfUEFSQU1fc2V0X2ZsYWdzKFdPTEZTU0xfWDUwOV9WRVJJRllfUEFSQU0gKnBhcmFtLAorICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfVkVSSUZZX1BBUkFNX2dldF9mbGFncyhXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNICpwYXJhbSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X1ZFUklGWV9QQVJBTV9jbGVhcl9mbGFncyhXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNICpwYXJhbSwKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfWDUwOV9WRVJJRllfUEFSQU1fc2V0X2hvc3RmbGFncygKKyAgICAgICAgICAgICAgICBXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNKiBwYXJhbSwgdW5zaWduZWQgaW50IGZsYWdzKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfVkVSSUZZX1BBUkFNX3NldDFfaG9zdChXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNKiBwUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmFtZVN6KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfVkVSSUZZX1BBUkFNX3NldDFfaXBfYXNjKAorICAgICAgICBXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNICpwYXJhbSwgY29uc3QgY2hhciAqaXBhc2MpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9WRVJJRllfUEFSQU1fc2V0MShXT0xGU1NMX1g1MDlfVkVSSUZZX1BBUkFNKiB0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfWDUwOV9WRVJJRllfUEFSQU0qIGZyb20pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9sb2FkX2NybF9maWxlKFdPTEZTU0xfWDUwOV9MT09LVVAgKmN0eCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IHR5cGUpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9sb2FkX2NlcnRfY3JsX2ZpbGUoV09MRlNTTF9YNTA5X0xPT0tVUCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCB0eXBlKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X1JFVk9LRUQqIHdvbGZTU0xfWDUwOV9DUkxfZ2V0X1JFVk9LRUQoV09MRlNTTF9YNTA5X0NSTCopOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X1JFVk9LRUQqIHdvbGZTU0xfc2tfWDUwOV9SRVZPS0VEX3ZhbHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X1JFVk9LRUQqLGludCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfSU5URUdFUiogd29sZlNTTF9YNTA5X2dldF9zZXJpYWxOdW1iZXIoV09MRlNTTF9YNTA5Kik7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQVNOMV9JTlRFR0VSX2ZyZWUoV09MRlNTTF9BU04xX0lOVEVHRVIqKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQVNOMV9JTlRFR0VSKiB3b2xmU1NMX0FTTjFfSU5URUdFUl9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfSU5URUdFUiogd29sZlNTTF9BU04xX0lOVEVHRVJfZHVwKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfQVNOMV9JTlRFR0VSKiBzcmMpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQVNOMV9JTlRFR0VSX3NldChXT0xGU1NMX0FTTjFfSU5URUdFUiAqYSwgbG9uZyB2KTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQVNOMV9USU1FX3ByaW50KFdPTEZTU0xfQklPKiwgY29uc3QgV09MRlNTTF9BU04xX1RJTUUqKTsKKworV09MRlNTTF9BUEkgY2hhciogd29sZlNTTF9BU04xX1RJTUVfdG9fc3RyaW5nKFdPTEZTU0xfQVNOMV9USU1FKiB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogYnVmLCBpbnQgbGVuKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9BU04xX0lOVEVHRVJfY21wKGNvbnN0IFdPTEZTU0xfQVNOMV9JTlRFR0VSKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfQVNOMV9JTlRFR0VSKik7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQVNOMV9JTlRFR0VSX2dldChjb25zdCBXT0xGU1NMX0FTTjFfSU5URUdFUiopOworCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorV09MRlNTTF9BUEkgV09MRlNTTF9CSUdOVU0gKndvbGZTU0xfQVNOMV9JTlRFR0VSX3RvX0JOKGNvbnN0IFdPTEZTU0xfQVNOMV9JTlRFR0VSICphaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQklHTlVNICpibik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfVElNRSogd29sZlNTTF9BU04xX1RJTUVfYWRqKFdPTEZTU0xfQVNOMV9USU1FKiwgdGltZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGxvbmcpOworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX1RJTUUqIHdvbGZTU0xfQVNOMV9USU1FX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9BU04xX1RJTUVfZnJlZShXT0xGU1NMX0FTTjFfVElNRSogdCk7CisjZW5kaWYKKworV09MRlNTTF9BUEkgV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfTkFNRSkqIHdvbGZTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZShjb25zdCBjaGFyKik7CitXT0xGU1NMX0FQSSBXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOV9OQU1FKSogd29sZlNTTF9DVFhfZ2V0X2NsaWVudF9DQV9saXN0KAorICAgICAgICBjb25zdCBXT0xGU1NMX0NUWCAqcyk7CisvKiBkZXByZWNhdGVkIGZ1bmN0aW9uIG5hbWUgKi8KKyNkZWZpbmUgd29sZlNTTF9TU0xfQ1RYX2dldF9jbGllbnRfQ0FfbGlzdCB3b2xmU1NMX0NUWF9nZXRfY2xpZW50X0NBX2xpc3QKKworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9DVFhfc2V0X2NsaWVudF9DQV9saXN0KFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfTkFNRSkqKTsKK1dPTEZTU0xfQVBJIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X05BTUUpKiB3b2xmU1NMX2dldF9jbGllbnRfQ0FfbGlzdCgKKyAgICAgICAgICAgIGNvbnN0IFdPTEZTU0wqIHNzbCk7CisKK3R5cGVkZWYgaW50ICgqY2xpZW50X2NlcnRfY2IpKFdPTEZTU0wgKnNzbCwgV09MRlNTTF9YNTA5ICoqeDUwOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfRVZQX1BLRVkgKipwa2V5KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2NiKFdPTEZTU0xfQ1RYICpjdHgsIGNsaWVudF9jZXJ0X2NiKTsKKworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YSgKKyAgICAgICAgV09MRlNTTF9YNTA5X1NUT1JFX0NUWCogY3R4LCBpbnQgaWR4KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9zZXRfZXhfZGF0YShXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYKiBjdHgsCisgICAgICAgIGludCBpZHgsIHZvaWQgKmRhdGEpOworI2lmZGVmIEhBVkVfRVhfREFUQV9DTEVBTlVQX0hPT0tTCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9zZXRfZXhfZGF0YV93aXRoX2NsZWFudXAoCisgICAgV09MRlNTTF9YNTA5X1NUT1JFX0NUWCogY3R4LAorICAgIGludCBpZHgsCisgICAgdm9pZCAqZGF0YSwKKyAgICB3b2xmU1NMX2V4X2RhdGFfY2xlYW51cF9yb3V0aW5lX3QgY2xlYW51cF9yb3V0aW5lKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9YNTA5X1NUT1JFX2dldF9leF9kYXRhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9TVE9SRSogc3RvcmUsIGludCBpZHgpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX1g1MDlfU1RPUkVfc2V0X2V4X2RhdGEoV09MRlNTTF9YNTA5X1NUT1JFKiBzdG9yZSwKKyAgICAgICAgaW50IGlkeCwgdm9pZCAqZGF0YSk7CisjaWZkZWYgSEFWRV9FWF9EQVRBX0NMRUFOVVBfSE9PS1MKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9YNTA5X1NUT1JFX3NldF9leF9kYXRhX3dpdGhfY2xlYW51cCgKKyAgICBXT0xGU1NMX1g1MDlfU1RPUkUqIHN0b3JlLAorICAgIGludCBpZHgsCisgICAgdm9pZCAqZGF0YSwKKyAgICB3b2xmU1NMX2V4X2RhdGFfY2xlYW51cF9yb3V0aW5lX3QgY2xlYW51cF9yb3V0aW5lKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX3NldF9kZXB0aChXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYKiBjdHgsCisgICAgICAgIGludCBkZXB0aCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkqIHdvbGZTU0xfWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJyZW50X2lzc3VlcigKKyAgICAgICAgV09MRlNTTF9YNTA5X1NUT1JFX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9TVE9SRSogd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9nZXQwX3N0b3JlKAorICAgICAgICBXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5KiB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2dldDBfY2VydCgKKyAgICAgICAgV09MRlNTTF9YNTA5X1NUT1JFX0NUWCopOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeCh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9YNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X1NUT1JFX0NUWCogY3R4LCBpbnQgZXIpOwordm9pZCB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcl9kZXB0aChXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVwdGgpOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9nZXRfZXhfZGF0YShjb25zdCBXT0xGU1NMKiwgaW50KTsKKworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHVzZXJkYXRhKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiopOworV09MRlNTTF9BUEkgcGVtX3Bhc3N3b3JkX2NiKiB3b2xmU1NMX0NUWF9nZXRfZGVmYXVsdF9wYXNzd2RfY2IoV09MRlNTTF9DVFggKmN0eCk7CitXT0xGU1NMX0FQSSB2b2lkICp3b2xmU1NMX0NUWF9nZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEoV09MRlNTTF9DVFggKmN0eCk7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X2luZm9fY2FsbGJhY2soV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqKShjb25zdCBXT0xGU1NMKiBzc2wsIGludCB0eXBlLCBpbnQgdmFsKSk7CisKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGxvbmcgd29sZlNTTF9FUlJfcGVla19lcnJvcih2b2lkKTsKK1dPTEZTU0xfQVBJIGludCAgICAgICAgICAgd29sZlNTTF9HRVRfUkVBU09OKGludCk7CisKK1dPTEZTU0xfQVBJIGNvbnN0IGNoYXIqIHdvbGZTU0xfYWxlcnRfdHlwZV9zdHJpbmdfbG9uZyhpbnQpOworV09MRlNTTF9BUEkgY29uc3QgY2hhciogd29sZlNTTF9hbGVydF9kZXNjX3N0cmluZ19sb25nKGludCk7CitXT0xGU1NMX0FQSSBjb25zdCBjaGFyKiB3b2xmU1NMX3N0YXRlX3N0cmluZ19sb25nKGNvbnN0IFdPTEZTU0wqKTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9SU0EqIHdvbGZTU0xfUlNBX2dlbmVyYXRlX2tleShpbnQsIHVuc2lnbmVkIGxvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQoKikoaW50LCBpbnQsIHZvaWQqKSwgdm9pZCopOworV09MRlNTTF9BUEkgV09MRlNTTF9SU0EgKndvbGZTU0xfZDJpX1JTQVB1YmxpY0tleShXT0xGU1NMX1JTQSAqKnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwgbG9uZyBsZW4pOworV09MRlNTTF9BUEkgV09MRlNTTF9SU0EgKndvbGZTU0xfZDJpX1JTQVByaXZhdGVLZXkoV09MRlNTTF9SU0EqKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioqLCBsb25nKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX2kyZF9SU0FQdWJsaWNLZXkoV09MRlNTTF9SU0EgKnIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmRfUlNBUHJpdmF0ZUtleShXT0xGU1NMX1JTQSAqciwgdW5zaWduZWQgY2hhciAqKnBwKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2soV09MRlNTTF9DVFggKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1JTQSAqKCopKFdPTEZTU0wgKiwgaW50LCBpbnQpKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUEVNX2RlZl9jYWxsYmFjayhjaGFyKiwgaW50IG51bSwgaW50IHcsIHZvaWQqIGtleSk7CisKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfc2Vzc19hY2NlcHQoV09MRlNTTF9DVFgqKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfc2Vzc19jb25uZWN0KFdPTEZTU0xfQ1RYKik7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQ1RYX3Nlc3NfYWNjZXB0X2dvb2QoV09MRlNTTF9DVFgqKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfc2Vzc19jb25uZWN0X2dvb2QoV09MRlNTTF9DVFgqKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfc2Vzc19hY2NlcHRfcmVuZWdvdGlhdGUoV09MRlNTTF9DVFgqKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfc2Vzc19jb25uZWN0X3JlbmVnb3RpYXRlKFdPTEZTU0xfQ1RYKik7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQ1RYX3Nlc3NfaGl0cyhXT0xGU1NMX0NUWCopOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0NUWF9zZXNzX2NiX2hpdHMoV09MRlNTTF9DVFgqKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfc2Vzc19jYWNoZV9mdWxsKFdPTEZTU0xfQ1RYKik7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQ1RYX3Nlc3NfbWlzc2VzKFdPTEZTU0xfQ1RYKik7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQ1RYX3Nlc3NfdGltZW91dHMoV09MRlNTTF9DVFgqKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfc2Vzc19udW1iZXIoV09MRlNTTF9DVFgqKTsKKworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0NUWF9hZGRfZXh0cmFfY2hhaW5fY2VydChXT0xGU1NMX0NUWCosIFdPTEZTU0xfWDUwOSopOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0NUWF9zZXNzX3NldF9jYWNoZV9zaXplKFdPTEZTU0xfQ1RYKiwgbG9uZyk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQ1RYX3Nlc3NfZ2V0X2NhY2hlX3NpemUoV09MRlNTTF9DVFgqKTsKKworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0NUWF9nZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKFdPTEZTU0xfQ1RYKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX2dldF9yZWFkX2FoZWFkKFdPTEZTU0xfQ1RYKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX3NldF9yZWFkX2FoZWFkKFdPTEZTU0xfQ1RYKiwgaW50IHYpOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0NUWF9zZXRfdGxzZXh0X3N0YXR1c19hcmcoV09MRlNTTF9DVFgqLCB2b2lkKiBhcmcpOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0NUWF9zZXRfdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2tfYXJnKAorICAgICAgICBXT0xGU1NMX0NUWCosIHZvaWQqIGFyZyk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX2FkZF9jbGllbnRfQ0EoV09MRlNTTF9DVFgqLCBXT0xGU1NMX1g1MDkqKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfc2V0X3NycF9wYXNzd29yZChXT0xGU1NMX0NUWCosIGNoYXIqKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfc2V0X3NycF91c2VybmFtZShXT0xGU1NMX0NUWCosIGNoYXIqKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfc2V0X3NycF9zdHJlbmd0aChXT0xGU1NMX0NUWCAqY3R4LCBpbnQgc3RyZW5ndGgpOworCitXT0xGU1NMX0FQSSBjaGFyKiB3b2xmU1NMX2dldF9zcnBfdXNlcm5hbWUoV09MRlNTTCAqc3NsKTsKKworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX3NldF9vcHRpb25zKFdPTEZTU0wgKnMsIGxvbmcgb3ApOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX2dldF9vcHRpb25zKGNvbnN0IFdPTEZTU0wgKnMpOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX2NsZWFyX29wdGlvbnMoV09MRlNTTCAqcywgIGxvbmcgb3ApOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX2NsZWFyX251bV9yZW5lZ290aWF0aW9ucyhXT0xGU1NMICpzKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF90b3RhbF9yZW5lZ290aWF0aW9ucyhXT0xGU1NMICpzKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9udW1fcmVuZWdvdGlhdGlvbnMoV09MRlNTTCogcyk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfU1NMX3JlbmVnb3RpYXRlX3BlbmRpbmcoV09MRlNTTCAqcyk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfc2V0X3RtcF9kaChXT0xGU1NMICpzLCBXT0xGU1NMX0RIICpkaCk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfc2V0X3Rsc2V4dF9kZWJ1Z19hcmcoV09MRlNTTCAqcywgdm9pZCAqYXJnKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9zZXRfdGxzZXh0X3N0YXR1c190eXBlKFdPTEZTU0wgKnMsIGludCB0eXBlKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9zZXRfdGxzZXh0X3N0YXR1c19leHRzKFdPTEZTU0wgKnMsIHZvaWQgKmFyZyk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfZ2V0X3Rsc2V4dF9zdGF0dXNfaWRzKFdPTEZTU0wgKnMsIHZvaWQgKmFyZyk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfc2V0X3Rsc2V4dF9zdGF0dXNfaWRzKFdPTEZTU0wgKnMsIHZvaWQgKmFyZyk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfZ2V0X3Rsc2V4dF9zdGF0dXNfb2NzcF9yZXNwKFdPTEZTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKipyZXNwKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9zZXRfdGxzZXh0X3N0YXR1c19vY3NwX3Jlc3AoV09MRlNTTCAqcywgdW5zaWduZWQgY2hhciAqcmVzcCwgaW50IGxlbik7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DT05GX21vZHVsZXNfdW5sb2FkKGludCBhbGwpOworV09MRlNTTF9BUEkgY2hhciogd29sZlNTTF9DT05GX2dldDFfZGVmYXVsdF9jb25maWdfZmlsZSh2b2lkKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9nZXRfdGxzZXh0X3N0YXR1c19leHRzKFdPTEZTU0wgKnMsIHZvaWQgKmFyZyk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQoY29uc3QgV09MRlNTTCAqc3NsKTsKKworI2RlZmluZSBXT0xGU1NMX0RFRkFVTFRfQ0lQSEVSX0xJU1QgIiIgICAvKiBkZWZhdWx0IGFsbCAqLworCisvKiBUaGVzZSBhcmUgYml0LW1hc2tzICovCitlbnVtIHsKKyAgICBXT0xGU1NMX09DU1BfVVJMX09WRVJSSURFID0gMSwKKyAgICBXT0xGU1NMX09DU1BfTk9fTk9OQ0UgICAgID0gMiwKKyAgICBXT0xGU1NMX09DU1BfQ0hFQ0tBTEwgICAgID0gNCwKKworICAgIFdPTEZTU0xfQ1JMX0NIRUNLQUxMID0gMSwKKyAgICBXT0xGU1NMX0NSTF9DSEVDSyAgICA9IDIsCit9OworCisvKiBTZXBhcmF0ZWQgb3V0IGZyb20gb3RoZXIgZW51bXMgYmVjYXVzZSBvZiBzaXplICovCitlbnVtIHsKKyAgICBTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAxLAorICAgIFNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDIsCisgICAgU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHICAgICAgID0gMHgwMDAwMDAwNCwKKyAgICBTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHICAgICAgICAgICAgPSAweDAwMDAwMDA4LAorICAgIFNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUiAgICAgICAgICAgICA9IDB4MDAwMDAwMTAsCisgICAgU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkcgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAyMCwKKyAgICBTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHICAgICAgICAgICAgICAgPSAweDAwMDAwMDQwLAorICAgIFNTTF9PUF9UTFNfRDVfQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwODAsCisgICAgU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVRyAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDEwMCwKKyAgICBTU0xfT1BfVExTX1JPTExCQUNLX0JVRyAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMjAwLAorICAgIFNTTF9PUF9FUEhFTUVSQUxfUlNBICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDA4MDAsCisgICAgV09MRlNTTF9PUF9OT19TU0x2MyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMTAwMCwKKyAgICBXT0xGU1NMX09QX05PX1RMU3YxICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAyMDAwLAorICAgIFNTTF9PUF9QS0NTMV9DSEVDS18xICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDAsCisgICAgU1NMX09QX1BLQ1MxX0NIRUNLXzIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwODAwMCwKKyAgICBTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDAwLAorICAgIFNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHICAgICAgICA9IDB4MDAwMjAwMDAsCisgICAgU1NMX09QX1NJTkdMRV9ESF9VU0UgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0MDAwMCwKKyAgICBTU0xfT1BfTk9fVElDS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDgwMDAwLAorICAgIFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMgICAgICAgICAgICA9IDB4MDAxMDAwMDAsCisgICAgU1NMX09QX05PX1FVRVJZX01UVSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDIwMDAwMCwKKyAgICBTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwNDAwMDAwLAorICAgIFNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiA9IDB4MDA4MDAwMDAsCisgICAgU1NMX09QX1NJTkdMRV9FQ0RIX1VTRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMTAwMDAwMCwKKyAgICBTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFICAgICAgICAgICAgICAgPSAweDAyMDAwMDAwLAorICAgIFdPTEZTU0xfT1BfTk9fVExTdjFfMSAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwMDAwMDAsCisgICAgV09MRlNTTF9PUF9OT19UTFN2MV8yICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwODAwMDAwMCwKKyAgICBTU0xfT1BfTk9fQ09NUFJFU1NJT04gICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEwMDAwMDAwLAorICAgIFdPTEZTU0xfT1BfTk9fVExTdjFfMyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjAwMDAwMDAsCisgICAgV09MRlNTTF9PUF9OT19TU0x2MiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0MDAwMDAwMCwKKyAgICBTU0xfT1BfQUxMICAgPQorICAgICAgICAgICAgICAgICAgICAoU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRworICAgICAgICAgICAgICAgICAgfCBTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRworICAgICAgICAgICAgICAgICAgfCBTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUcKKyAgICAgICAgICAgICAgICAgIHwgU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRworICAgICAgICAgICAgICAgICAgfCBTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIKKyAgICAgICAgICAgICAgICAgIHwgU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkcKKyAgICAgICAgICAgICAgICAgIHwgU1NMX09QX1NTTEVBWV8wODBfQ0xJRU5UX0RIX0JVRworICAgICAgICAgICAgICAgICAgfCBTU0xfT1BfVExTX0Q1X0JVRworICAgICAgICAgICAgICAgICAgfCBTU0xfT1BfVExTX0JMT0NLX1BBRERJTkdfQlVHCisgICAgICAgICAgICAgICAgICB8IFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMKKyAgICAgICAgICAgICAgICAgIHwgU1NMX09QX1RMU19ST0xMQkFDS19CVUcpLAorfTsKKworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpIHx8IFwKKyAgICBkZWZpbmVkKEhBVkVfV0VCU0VSVkVSKQorLyogZm9yIGNvbXBhdGliaWxpdHkgdGhlc2UgbXVzdCBiZSBtYWNyb3MgKi8KKyNkZWZpbmUgU1NMX09QX05PX1NTTHYyICAgV09MRlNTTF9PUF9OT19TU0x2MgorI2RlZmluZSBTU0xfT1BfTk9fU1NMdjMgICBXT0xGU1NMX09QX05PX1NTTHYzCisjZGVmaW5lIFNTTF9PUF9OT19UTFN2MSAgIFdPTEZTU0xfT1BfTk9fVExTdjEKKyNkZWZpbmUgU1NMX09QX05PX1RMU3YxXzEgV09MRlNTTF9PUF9OT19UTFN2MV8xCisjZGVmaW5lIFNTTF9PUF9OT19UTFN2MV8yIFdPTEZTU0xfT1BfTk9fVExTdjFfMgorI2lmICEoIWRlZmluZWQoV09MRlNTTF9UTFMxMykgJiYgZGVmaW5lZChXT0xGU1NMX0FQQUNIRV9IVFRQRCkpIC8qIGFwYWNoZSB1c2VzIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIFRMUyAxLjMgaXMgZW5hYmxlZCAqLworI2RlZmluZSBTU0xfT1BfTk9fVExTdjFfMyBXT0xGU1NMX09QX05PX1RMU3YxXzMKKyNlbmRpZgorCisjZGVmaW5lIFNTTF9PUF9OT19TU0xfTUFTSyAoU1NMX09QX05PX1NTTHYzIHwgU1NMX09QX05PX1RMU3YxIHwgXAorICAgIFNTTF9PUF9OT19UTFN2MV8xIHwgU1NMX09QX05PX1RMU3YxXzIgfCBTU0xfT1BfTk9fVExTdjFfMykKKworI2RlZmluZSBTU0xfTk9USElORyAxCisjZGVmaW5lIFNTTF9XUklUSU5HIDIKKyNkZWZpbmUgU1NMX1JFQURJTkcgMworCitlbnVtIHsKKyNpZmRlZiBIQVZFX09DU1AKKyAgICAvKiBPQ1NQIEZsYWdzICovCisgICAgT0NTUF9OT0NFUlRTICAgICA9IDEsCisgICAgT0NTUF9OT0lOVEVSTiAgICA9IDIsCisgICAgT0NTUF9OT1NJR1MgICAgICA9IDQsCisgICAgT0NTUF9OT0NIQUlOICAgICA9IDgsCisgICAgT0NTUF9OT1ZFUklGWSAgICA9IDE2LAorICAgIE9DU1BfTk9FWFBMSUNJVCAgPSAzMiwKKyAgICBPQ1NQX05PQ0FTSUdOICAgID0gNjQsCisgICAgT0NTUF9OT0RFTEVHQVRFRCA9IDEyOCwKKyAgICBPQ1NQX05PQ0hFQ0tTICAgID0gMjU2LAorICAgIE9DU1BfVFJVU1RPVEhFUiAgPSA1MTIsCisgICAgT0NTUF9SRVNQSURfS0VZICA9IDEwMjQsCisgICAgT0NTUF9OT1RJTUUgICAgICA9IDIwNDgsCisKKyAgICAvKiBPQ1NQIFR5cGVzICovCisgICAgT0NTUF9DRVJUSUQgICA9IDIsCisgICAgT0NTUF9SRVFVRVNUICA9IDQsCisgICAgT0NTUF9SRVNQT05TRSA9IDgsCisgICAgT0NTUF9CQVNJQ1JFU1AgPSAxNiwKKyNlbmRpZgorCisgICAgQVNOMV9HRU5FUkFMSVpFRFRJTUUgPSA0LAorICAgIFNTTF9NQVhfU1NMX1NFU1NJT05fSURfTEVOR1RIID0gMzIsCisKKyAgICBTU0xfU1RfQ09OTkVDVCA9IDB4MTAwMCwKKyAgICBTU0xfU1RfQUNDRVBUICA9IDB4MjAwMCwKKyAgICBTU0xfU1RfTUFTSyAgICA9IDB4MEZGRiwKKworICAgIFNTTF9DQl9MT09QID0gMHgwMSwKKyAgICBTU0xfQ0JfRVhJVCA9IDB4MDIsCisgICAgU1NMX0NCX1JFQUQgPSAweDA0LAorICAgIFNTTF9DQl9XUklURSA9IDB4MDgsCisgICAgU1NMX0NCX0hBTkRTSEFLRV9TVEFSVCA9IDB4MTAsCisgICAgU1NMX0NCX0hBTkRTSEFLRV9ET05FID0gMHgyMCwKKyAgICBTU0xfQ0JfQUxFUlQgPSAweDQwMDAsCisgICAgU1NMX0NCX1JFQURfQUxFUlQgPSAoU1NMX0NCX0FMRVJUIHwgU1NMX0NCX1JFQUQpLAorICAgIFNTTF9DQl9XUklURV9BTEVSVCA9IChTU0xfQ0JfQUxFUlQgfCBTU0xfQ0JfV1JJVEUpLAorICAgIFNTTF9DQl9BQ0NFUFRfTE9PUCA9IChTU0xfU1RfQUNDRVBUIHwgU1NMX0NCX0xPT1ApLAorICAgIFNTTF9DQl9BQ0NFUFRfRVhJVCA9IChTU0xfU1RfQUNDRVBUIHwgU1NMX0NCX0VYSVQpLAorICAgIFNTTF9DQl9DT05ORUNUX0xPT1AgPSAoU1NMX1NUX0NPTk5FQ1QgfCBTU0xfQ0JfTE9PUCksCisgICAgU1NMX0NCX0NPTk5FQ1RfRVhJVCA9IChTU0xfU1RfQ09OTkVDVCB8IFNTTF9DQl9FWElUKSwKKyAgICBTU0xfQ0JfTU9ERV9SRUFEID0gMSwKKyAgICBTU0xfQ0JfTU9ERV9XUklURSA9IDIsCisKKyAgICBTU0xfTU9ERV9FTkFCTEVfUEFSVElBTF9XUklURSA9IDIsCisgICAgU1NMX01PREVfQVVUT19SRVRSWSA9IDMsIC8qIHdvbGZTU0wgZGVmYXVsdCBpcyB0byBibG9jayB3aXRoIGJsb2NraW5nIGlvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFuZCBhdXRvIHJldHJ5ICovCisgICAgU1NMX01PREVfUkVMRUFTRV9CVUZGRVJTID0gLTEsIC8qIEZvciBsaWJ3ZWJzb2NrZXRzIGJ1aWxkLiBObyBjdXJyZW50IHVzZS4gKi8KKworICAgIEJJT19DTE9TRSAgID0gMSwKKyAgICBCSU9fTk9DTE9TRSA9IDAsCisKKyAgICBYNTA5X0ZJTEVUWVBFX1BFTSA9IDgsCisgICAgWDUwOV9MVV9YNTA5ICAgICAgPSA5LAorICAgIFg1MDlfTFVfQ1JMICAgICAgID0gMTIsCisKKyAgICBYNTA5X1ZfT0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgWDUwOV9WX0VSUl9DUkxfU0lHTkFUVVJFX0ZBSUxVUkUgICAgICAgICAgICAgPSAxMywKKyAgICBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NSTF9ORVhUX1VQREFURV9GSUVMRCAgICA9IDE0LAorICAgIFg1MDlfVl9FUlJfQ1JMX0hBU19FWFBJUkVEICAgICAgICAgICAgICAgICAgID0gMTUsCisgICAgWDUwOV9WX0VSUl9DRVJUX1JFVk9LRUQgICAgICAgICAgICAgICAgICAgICAgPSAxNiwKKyAgICBYNTA5X1ZfRVJSX0NFUlRfQ0hBSU5fVE9PX0xPTkcgICAgICAgICAgICAgICA9IDE3LAorICAgIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVCAgICAgICAgID0gMTgsCisgICAgWDUwOV9WX0VSUl9DRVJUX05PVF9ZRVRfVkFMSUQgICAgICAgICAgICAgICAgPSAxOSwKKyAgICBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NFUlRfTk9UX0JFRk9SRV9GSUVMRCAgICA9IDIwLAorICAgIFg1MDlfVl9FUlJfQ0VSVF9IQVNfRVhQSVJFRCAgICAgICAgICAgICAgICAgID0gMjEsCisgICAgWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJUX05PVF9BRlRFUl9GSUVMRCAgICAgPSAyMiwKKyAgICBYNTA5X1ZfRVJSX0NFUlRfUkVKRUNURUQgICAgICAgICAgICAgICAgICAgICA9IDIzLAorICAgIC8qIFJlcXVpcmVkIGZvciBOZ2lueCAgKi8KKyAgICBYNTA5X1ZfRVJSX0RFUFRIX1pFUk9fU0VMRl9TSUdORURfQ0VSVCAgICAgICA9IDI0LAorICAgIFg1MDlfVl9FUlJfU0VMRl9TSUdORURfQ0VSVF9JTl9DSEFJTiAgICAgICAgID0gMjUsCisgICAgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUX0xPQ0FMTFkgPSAyNiwKKyAgICBYNTA5X1ZfRVJSX0NFUlRfVU5UUlVTVEVEICAgICAgICAgICAgICAgICAgICA9IDI3LAorICAgIFg1MDlfVl9FUlJfVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRSAgID0gMjgsCisgICAgWDUwOV9WX0VSUl9TVUJKRUNUX0lTU1VFUl9NSVNNQVRDSCAgICAgICAgICAgPSAyOSwKKyAgICAvKiBhZGRpdGlvbmFsIFg1MDlfVl9FUlJfKiBlbnVtcyBub3QgdXNlZCBpbiB3b2xmU1NMICovCisgICAgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0NSTCwKKyAgICBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NFUlRfU0lHTkFUVVJFLAorICAgIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ1JZUFRfQ1JMX1NJR05BVFVSRSwKKyAgICBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNPREVfSVNTVUVSX1BVQkxJQ19LRVksCisgICAgWDUwOV9WX0VSUl9DRVJUX1NJR05BVFVSRV9GQUlMVVJFLAorICAgIFg1MDlfVl9FUlJfQ1JMX05PVF9ZRVRfVkFMSUQsCisgICAgWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTEFTVF9VUERBVEVfRklFTEQsCisgICAgWDUwOV9WX0VSUl9PVVRfT0ZfTUVNLAorICAgIFg1MDlfVl9FUlJfSU5WQUxJRF9DQSwKKyAgICBYNTA5X1ZfRVJSX1BBVEhfTEVOR1RIX0VYQ0VFREVELAorICAgIFg1MDlfVl9FUlJfSU5WQUxJRF9QVVJQT1NFLAorICAgIFg1MDlfVl9FUlJfQUtJRF9TS0lEX01JU01BVENILAorICAgIFg1MDlfVl9FUlJfQUtJRF9JU1NVRVJfU0VSSUFMX01JU01BVENILAorICAgIFg1MDlfVl9FUlJfS0VZVVNBR0VfTk9fQ0VSVFNJR04sCisgICAgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0NSTF9JU1NVRVIsCisgICAgWDUwOV9WX0VSUl9VTkhBTkRMRURfQ1JJVElDQUxfRVhURU5TSU9OLAorICAgIFg1MDlfVl9FUlJfS0VZVVNBR0VfTk9fQ1JMX1NJR04sCisgICAgWDUwOV9WX0VSUl9VTkhBTkRMRURfQ1JJVElDQUxfQ1JMX0VYVEVOU0lPTiwKKyAgICBYNTA5X1ZfRVJSX0lOVkFMSURfTk9OX0NBLAorICAgIFg1MDlfVl9FUlJfUFJPWFlfUEFUSF9MRU5HVEhfRVhDRUVERUQsCisgICAgWDUwOV9WX0VSUl9LRVlVU0FHRV9OT19ESUdJVEFMX1NJR05BVFVSRSwKKyAgICBYNTA5X1ZfRVJSX1BST1hZX0NFUlRJRklDQVRFU19OT1RfQUxMT1dFRCwKKyAgICBYNTA5X1ZfRVJSX0lOVkFMSURfRVhURU5TSU9OLAorICAgIFg1MDlfVl9FUlJfSU5WQUxJRF9QT0xJQ1lfRVhURU5TSU9OLAorICAgIFg1MDlfVl9FUlJfTk9fRVhQTElDSVRfUE9MSUNZLAorICAgIFg1MDlfVl9FUlJfVU5ORVNURURfUkVTT1VSQ0UsCisgICAgWDUwOV9WX0VSUl9BUFBMSUNBVElPTl9WRVJJRklDQVRJT04sCisKKyAgICBYNTA5X1JfQ0VSVF9BTFJFQURZX0lOX0hBU0hfVEFCTEUsCisKKyAgICBDUllQVE9fTE9DSyA9IDEsCisgICAgQ1JZUFRPX05VTV9MT0NLUyA9IDEwLAorCisgICAgQVNOMV9TVFJGTEdTX0VTQ19NU0IgPSA0Cit9OworI2VuZGlmCisKKy8qIGV4dHJhcyBlbmQgKi8KKworI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKE5PX1NURElPX0ZJTEVTWVNURU0pCisvKiB3b2xmU1NMIGV4dGVuc2lvbiwgcHJvdmlkZSBsYXN0IGVycm9yIGZyb20gU1NMX2dldF9lcnJvcgorICAgc2luY2Ugbm90IHVzaW5nIHRocmVhZCBzdG9yYWdlIGVycm9yIHF1ZXVlICovCisjaWZkZWYgRlVTSU9OX1JUT1MKKyAgICAjaW5jbHVkZSA8ZmNsc3RkaW8uaD4KKyNlbHNlCisgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfRVJSX3ByaW50X2Vycm9yc19mcChYRklMRSwgaW50IGVycik7CisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKERFQlVHX1dPTEZTU0xfVkVSQk9TRSkKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9FUlJfZHVtcF9lcnJvcnNfZnAoWEZJTEUgZnApOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0VSUl9wcmludF9lcnJvcnNfY2IoaW50ICgqY2IpKGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIHZvaWQgKnUpLCB2b2lkICp1KTsKKyNlbmRpZgorI2VuZGlmCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfRVJSX3ByaW50X2Vycm9ycyhXT0xGU1NMX0JJTyAqYmlvKTsKKworCisjaWZuZGVmIE5PX09MRF9TU0xfTkFNRVMKKyAgICAjZGVmaW5lIFNTTF9FUlJPUl9OT05FIFdPTEZTU0xfRVJST1JfTk9ORQorICAgICNkZWZpbmUgU1NMX0ZBSUxVUkUgV09MRlNTTF9GQUlMVVJFCisgICAgI2RlZmluZSBTU0xfU1VDQ0VTUyBXT0xGU1NMX1NVQ0NFU1MKKyAgICAjZGVmaW5lIFNTTF9TSFVURE9XTl9OT1RfRE9ORSBXT0xGU1NMX1NIVVRET1dOX05PVF9ET05FCisKKyAgICAjZGVmaW5lIFNTTF9BTFBOX05PVF9GT1VORCBXT0xGU1NMX0FMUE5fTk9UX0ZPVU5ECisgICAgI2RlZmluZSBTU0xfQkFEX0NFUlRUWVBFIFdPTEZTU0xfQkFEX0NFUlRUWVBFCisgICAgI2RlZmluZSBTU0xfQkFEX1NUQVQgV09MRlNTTF9CQURfU1RBVAorICAgICNkZWZpbmUgU1NMX0JBRF9QQVRIIFdPTEZTU0xfQkFEX1BBVEgKKyAgICAjZGVmaW5lIFNTTF9CQURfRklMRVRZUEUgV09MRlNTTF9CQURfRklMRVRZUEUKKyAgICAjZGVmaW5lIFNTTF9CQURfRklMRSBXT0xGU1NMX0JBRF9GSUxFCisgICAgI2RlZmluZSBTU0xfTk9UX0lNUExFTUVOVEVEIFdPTEZTU0xfTk9UX0lNUExFTUVOVEVECisgICAgI2RlZmluZSBTU0xfVU5LTk9XTiBXT0xGU1NMX1VOS05PV04KKyAgICAjZGVmaW5lIFNTTF9GQVRBTF9FUlJPUiBXT0xGU1NMX0ZBVEFMX0VSUk9SCisKKyAgICAjZGVmaW5lIFNTTF9GSUxFVFlQRV9BU04xIFdPTEZTU0xfRklMRVRZUEVfQVNOMQorICAgICNkZWZpbmUgU1NMX0ZJTEVUWVBFX1BFTSBXT0xGU1NMX0ZJTEVUWVBFX1BFTQorICAgICNkZWZpbmUgU1NMX0ZJTEVUWVBFX0RFRkFVTFQgV09MRlNTTF9GSUxFVFlQRV9ERUZBVUxUCisgICAgI2RlZmluZSBTU0xfRklMRVRZUEVfUkFXIFdPTEZTU0xfRklMRVRZUEVfUkFXCisKKyAgICAjZGVmaW5lIFNTTF9WRVJJRllfTk9ORSBXT0xGU1NMX1ZFUklGWV9OT05FCisgICAgI2RlZmluZSBTU0xfVkVSSUZZX1BFRVIgV09MRlNTTF9WRVJJRllfUEVFUgorICAgICNkZWZpbmUgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCBXT0xGU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVAorICAgICNkZWZpbmUgU1NMX1ZFUklGWV9DTElFTlRfT05DRSBXT0xGU1NMX1ZFUklGWV9DTElFTlRfT05DRQorICAgICNkZWZpbmUgU1NMX1ZFUklGWV9GQUlMX0VYQ0VQVF9QU0sgV09MRlNTTF9WRVJJRllfRkFJTF9FWENFUFRfUFNLCisKKyAgICAjZGVmaW5lIFNTTF9TRVNTX0NBQ0hFX09GRiBXT0xGU1NMX1NFU1NfQ0FDSEVfT0ZGCisgICAgI2RlZmluZSBTU0xfU0VTU19DQUNIRV9DTElFTlQgV09MRlNTTF9TRVNTX0NBQ0hFX0NMSUVOVAorICAgICNkZWZpbmUgU1NMX1NFU1NfQ0FDSEVfU0VSVkVSIFdPTEZTU0xfU0VTU19DQUNIRV9TRVJWRVIKKyAgICAjZGVmaW5lIFNTTF9TRVNTX0NBQ0hFX0JPVEggV09MRlNTTF9TRVNTX0NBQ0hFX0JPVEgKKyAgICAjZGVmaW5lIFNTTF9TRVNTX0NBQ0hFX05PX0FVVE9fQ0xFQVIgV09MRlNTTF9TRVNTX0NBQ0hFX05PX0FVVE9fQ0xFQVIKKyAgICAjZGVmaW5lIFNTTF9TRVNTX0NBQ0hFX05PX0lOVEVSTkFMX0xPT0tVUCBXT0xGU1NMX1NFU1NfQ0FDSEVfTk9fSU5URVJOQUxfTE9PS1VQCisgICAgI2RlZmluZSBTU0xfU0VTU19DQUNIRV9OT19JTlRFUk5BTF9TVE9SRSBXT0xGU1NMX1NFU1NfQ0FDSEVfTk9fSU5URVJOQUxfU1RPUkUKKyAgICAjZGVmaW5lIFNTTF9TRVNTX0NBQ0hFX05PX0lOVEVSTkFMIFdPTEZTU0xfU0VTU19DQUNIRV9OT19JTlRFUk5BTAorCisgICAgI2RlZmluZSBTU0xfRVJST1JfV0FOVF9SRUFEIFdPTEZTU0xfRVJST1JfV0FOVF9SRUFECisgICAgI2RlZmluZSBTU0xfRVJST1JfV0FOVF9XUklURSBXT0xGU1NMX0VSUk9SX1dBTlRfV1JJVEUKKyAgICAjZGVmaW5lIFNTTF9FUlJPUl9XQU5UX0NPTk5FQ1QgV09MRlNTTF9FUlJPUl9XQU5UX0NPTk5FQ1QKKyAgICAjZGVmaW5lIFNTTF9FUlJPUl9XQU5UX0FDQ0VQVCBXT0xGU1NMX0VSUk9SX1dBTlRfQUNDRVBUCisgICAgI2RlZmluZSBTU0xfRVJST1JfU1lTQ0FMTCBXT0xGU1NMX0VSUk9SX1NZU0NBTEwKKyAgICAjZGVmaW5lIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQIFdPTEZTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUAorICAgICNkZWZpbmUgU1NMX0VSUk9SX1pFUk9fUkVUVVJOIFdPTEZTU0xfRVJST1JfWkVST19SRVRVUk4KKyAgICAjZGVmaW5lIFNTTF9FUlJPUl9TU0wgV09MRlNTTF9FUlJPUl9TU0wKKworICAgICNkZWZpbmUgU1NMX1NFTlRfU0hVVERPV04gV09MRlNTTF9TRU5UX1NIVVRET1dOCisgICAgI2RlZmluZSBTU0xfUkVDRUlWRURfU0hVVERPV04gV09MRlNTTF9SRUNFSVZFRF9TSFVURE9XTgorICAgICNkZWZpbmUgU1NMX01PREVfQUNDRVBUX01PVklOR19XUklURV9CVUZGRVIgV09MRlNTTF9NT0RFX0FDQ0VQVF9NT1ZJTkdfV1JJVEVfQlVGRkVSCisKKyAgICAjZGVmaW5lIFNTTF9SX1NTTF9IQU5EU0hBS0VfRkFJTFVSRSBXT0xGU1NMX1JfU1NMX0hBTkRTSEFLRV9GQUlMVVJFCisgICAgI2RlZmluZSBTU0xfUl9UTFNWMV9BTEVSVF9VTktOT1dOX0NBIFdPTEZTU0xfUl9UTFNWMV9BTEVSVF9VTktOT1dOX0NBCisgICAgI2RlZmluZSBTU0xfUl9TU0xWM19BTEVSVF9DRVJUSUZJQ0FURV9VTktOT1dOIFdPTEZTU0xfUl9TU0xWM19BTEVSVF9DRVJUSUZJQ0FURV9VTktOT1dOCisgICAgI2RlZmluZSBTU0xfUl9TU0xWM19BTEVSVF9CQURfQ0VSVElGSUNBVEUgV09MRlNTTF9SX1NTTFYzX0FMRVJUX0JBRF9DRVJUSUZJQ0FURQorCisgICAgI2RlZmluZSBQRU1fQlVGU0laRSBXT0xGX1BFTV9CVUZTSVpFCisjZW5kaWYKKworZW51bSB7IC8qIHNzbCBDb25zdGFudHMgKi8KKyAgICBXT0xGU1NMX0VSUk9SX05PTkUgICAgICA9ICAwLCAgIC8qIGZvciBtb3N0IGZ1bmN0aW9ucyAqLworICAgIFdPTEZTU0xfRkFJTFVSRSAgICAgICAgID0gIDAsICAgLyogZm9yIHNvbWUgZnVuY3Rpb25zICovCisgICAgV09MRlNTTF9TVUNDRVNTICAgICAgICAgPSAgMSwKKyAgICBXT0xGU1NMX1NIVVRET1dOX05PVF9ET05FID0gIDIsICAvKiBjYWxsIHdvbGZTU0xfc2h1dGRvd24gYWdhaW4gdG8gY29tcGxldGUgKi8KKworICAgIFdPTEZTU0xfQUxQTl9OT1RfRk9VTkQgID0gLTksCisgICAgV09MRlNTTF9CQURfQ0VSVFRZUEUgICAgPSAtOCwKKyAgICBXT0xGU1NMX0JBRF9TVEFUICAgICAgICA9IC03LAorICAgIFdPTEZTU0xfQkFEX1BBVEggICAgICAgID0gLTYsCisgICAgV09MRlNTTF9CQURfRklMRVRZUEUgICAgPSAtNSwKKyAgICBXT0xGU1NMX0JBRF9GSUxFICAgICAgICA9IC00LAorICAgIFdPTEZTU0xfTk9UX0lNUExFTUVOVEVEID0gLTMsCisgICAgV09MRlNTTF9VTktOT1dOICAgICAgICAgPSAtMiwKKyAgICBXT0xGU1NMX0ZBVEFMX0VSUk9SICAgICA9IC0xLAorCisgICAgV09MRlNTTF9GSUxFVFlQRV9BU04xICAgID0gMiwKKyAgICBXT0xGU1NMX0ZJTEVUWVBFX1BFTSAgICAgPSAxLAorICAgIFdPTEZTU0xfRklMRVRZUEVfREVGQVVMVCA9IDIsIC8qIEFTTjEgKi8KKyAgICBXT0xGU1NMX0ZJTEVUWVBFX1JBVyAgICAgPSAzLCAvKiBOVFJVIHJhdyBrZXkgYmxvYiAqLworCisgICAgV09MRlNTTF9WRVJJRllfTk9ORSAgICAgICAgICAgICAgICAgPSAwLAorICAgIFdPTEZTU0xfVkVSSUZZX1BFRVIgICAgICAgICAgICAgICAgID0gMSwKKyAgICBXT0xGU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCA9IDIsCisgICAgV09MRlNTTF9WRVJJRllfQ0xJRU5UX09OQ0UgICAgICAgICAgPSA0LAorICAgIFdPTEZTU0xfVkVSSUZZX0ZBSUxfRVhDRVBUX1BTSyAgICAgID0gOCwKKworICAgIFdPTEZTU0xfU0VTU19DQUNIRV9PRkYgICAgICAgICAgICAgICAgPSAweDAwMDAsCisgICAgV09MRlNTTF9TRVNTX0NBQ0hFX0NMSUVOVCAgICAgICAgICAgICA9IDB4MDAwMSwKKyAgICBXT0xGU1NMX1NFU1NfQ0FDSEVfU0VSVkVSICAgICAgICAgICAgID0gMHgwMDAyLAorICAgIFdPTEZTU0xfU0VTU19DQUNIRV9CT1RIICAgICAgICAgICAgICAgPSAweDAwMDMsCisgICAgV09MRlNTTF9TRVNTX0NBQ0hFX05PX0FVVE9fQ0xFQVIgICAgICA9IDB4MDAwOCwKKyAgICBXT0xGU1NMX1NFU1NfQ0FDSEVfTk9fSU5URVJOQUxfTE9PS1VQID0gMHgwMTAwLAorICAgIFdPTEZTU0xfU0VTU19DQUNIRV9OT19JTlRFUk5BTF9TVE9SRSAgPSAweDAyMDAsCisgICAgV09MRlNTTF9TRVNTX0NBQ0hFX05PX0lOVEVSTkFMICAgICAgICA9IDB4MDMwMCwKKworICAgIFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEICAgICAgICA9ICAyLAorICAgIFdPTEZTU0xfRVJST1JfV0FOVF9XUklURSAgICAgICA9ICAzLAorICAgIFdPTEZTU0xfRVJST1JfV0FOVF9DT05ORUNUICAgICA9ICA3LAorICAgIFdPTEZTU0xfRVJST1JfV0FOVF9BQ0NFUFQgICAgICA9ICA4LAorICAgIFdPTEZTU0xfRVJST1JfU1lTQ0FMTCAgICAgICAgICA9ICA1LAorICAgIFdPTEZTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUCA9IDgzLAorICAgIFdPTEZTU0xfRVJST1JfWkVST19SRVRVUk4gICAgICA9ICA2LAorICAgIFdPTEZTU0xfRVJST1JfU1NMICAgICAgICAgICAgICA9IDg1LAorCisgICAgV09MRlNTTF9TRU5UX1NIVVRET1dOICAgICA9IDEsCisgICAgV09MRlNTTF9SRUNFSVZFRF9TSFVURE9XTiA9IDIsCisgICAgV09MRlNTTF9NT0RFX0FDQ0VQVF9NT1ZJTkdfV1JJVEVfQlVGRkVSID0gNCwKKworICAgIFdPTEZTU0xfUl9TU0xfSEFORFNIQUtFX0ZBSUxVUkUgICAgICAgICAgID0gMTAxLAorICAgIFdPTEZTU0xfUl9UTFNWMV9BTEVSVF9VTktOT1dOX0NBICAgICAgICAgID0gMTAyLAorICAgIFdPTEZTU0xfUl9TU0xWM19BTEVSVF9DRVJUSUZJQ0FURV9VTktOT1dOID0gMTAzLAorICAgIFdPTEZTU0xfUl9TU0xWM19BTEVSVF9CQURfQ0VSVElGSUNBVEUgICAgID0gMTA0LAorCisgICAgV09MRl9QRU1fQlVGU0laRSA9IDEwMjQKK307CisKKyNpZm5kZWYgTk9fUFNLCisgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgKCp3Y19wc2tfY2xpZW50X2NhbGxiYWNrKShXT0xGU1NMKiwgY29uc3QgY2hhciosIGNoYXIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQgaW50KTsKKyAgICBXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NfcHNrX2NsaWVudF9jYWxsYmFjayk7CisgICAgV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrKFdPTEZTU0wqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y19wc2tfY2xpZW50X2NhbGxiYWNrKTsKKyAgICAjaWZkZWYgT1BFTlNTTF9FWFRSQQorICAgIHR5cGVkZWYgaW50ICgqd2NfcHNrX3VzZV9zZXNzaW9uX2NiX2Z1bmMpKFdPTEZTU0wqIHNzbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FVlBfTUQqIG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiBpZGxlbiwgIFdPTEZTU0xfU0VTU0lPTiAqKnNlc3MpOworICAgIFdPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9zZXRfcHNrX3VzZV9zZXNzaW9uX2NhbGxiYWNrKFdPTEZTU0wqIHNzbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjX3Bza191c2Vfc2Vzc2lvbl9jYl9mdW5jIGNiKTsKKyAgICAjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgKCp3Y19wc2tfY2xpZW50X2NzX2NhbGxiYWNrKShXT0xGU1NMKiwgY29uc3QgY2hhciosCisgICAgICAgIGNoYXIqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIqKTsKKyAgICBXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX3NldF9wc2tfY2xpZW50X2NzX2NhbGxiYWNrKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgd2NfcHNrX2NsaWVudF9jc19jYWxsYmFjayk7CisgICAgV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NldF9wc2tfY2xpZW50X2NzX2NhbGxiYWNrKFdPTEZTU0wqLAorICAgICAgICB3Y19wc2tfY2xpZW50X2NzX2NhbGxiYWNrKTsKKworICAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICgqd2NfcHNrX2NsaWVudF90bHMxM19jYWxsYmFjaykoV09MRlNTTCosIGNvbnN0IGNoYXIqLAorICAgICAgICBjaGFyKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQgaW50LCBjb25zdCBjaGFyKiopOworICAgIFdPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X3Bza19jbGllbnRfdGxzMTNfY2FsbGJhY2soV09MRlNTTF9DVFgqLAorICAgICAgICB3Y19wc2tfY2xpZW50X3RsczEzX2NhbGxiYWNrKTsKKyAgICBXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2V0X3Bza19jbGllbnRfdGxzMTNfY2FsbGJhY2soV09MRlNTTCosCisgICAgICAgIHdjX3Bza19jbGllbnRfdGxzMTNfY2FsbGJhY2spOworI2VuZGlmCisKKyAgICBXT0xGU1NMX0FQSSBjb25zdCBjaGFyKiB3b2xmU1NMX2dldF9wc2tfaWRlbnRpdHlfaGludChjb25zdCBXT0xGU1NMKik7CisgICAgV09MRlNTTF9BUEkgY29uc3QgY2hhciogd29sZlNTTF9nZXRfcHNrX2lkZW50aXR5KGNvbnN0IFdPTEZTU0wqKTsKKworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF91c2VfcHNrX2lkZW50aXR5X2hpbnQoV09MRlNTTF9DVFgqLCBjb25zdCBjaGFyKik7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50KFdPTEZTU0wqLCBjb25zdCBjaGFyKik7CisKKyAgICB0eXBlZGVmIHVuc2lnbmVkIGludCAoKndjX3Bza19zZXJ2ZXJfY2FsbGJhY2spKFdPTEZTU0wqLCBjb25zdCBjaGFyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciosIHVuc2lnbmVkIGludCk7CisgICAgV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0NUWF9zZXRfcHNrX3NlcnZlcl9jYWxsYmFjayhXT0xGU1NMX0NUWCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjX3Bza19zZXJ2ZXJfY2FsbGJhY2spOworICAgIFdPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9zZXRfcHNrX3NlcnZlcl9jYWxsYmFjayhXT0xGU1NMKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NfcHNrX3NlcnZlcl9jYWxsYmFjayk7CisjaWZkZWYgV09MRlNTTF9UTFMxMworICAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICgqd2NfcHNrX3NlcnZlcl90bHMxM19jYWxsYmFjaykoV09MRlNTTCosIGNvbnN0IGNoYXIqLAorICAgICAgICB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQgaW50LCBjb25zdCBjaGFyKiopOworICAgIFdPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfdGxzMTNfY2FsbGJhY2soV09MRlNTTF9DVFgqLAorICAgICAgICB3Y19wc2tfc2VydmVyX3RsczEzX2NhbGxiYWNrKTsKKyAgICBXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2V0X3Bza19zZXJ2ZXJfdGxzMTNfY2FsbGJhY2soV09MRlNTTCosCisgICAgICAgIHdjX3Bza19zZXJ2ZXJfdGxzMTNfY2FsbGJhY2spOworI2VuZGlmCisgICAgV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9nZXRfcHNrX2NhbGxiYWNrX2N0eChXT0xGU1NMKik7CisgICAgV09MRlNTTF9BUEkgaW50ICAgd29sZlNTTF9zZXRfcHNrX2NhbGxiYWNrX2N0eChXT0xGU1NMKiwgdm9pZCopOworCisgICAgV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9DVFhfZ2V0X3Bza19jYWxsYmFja19jdHgoV09MRlNTTF9DVFgqKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgICB3b2xmU1NMX0NUWF9zZXRfcHNrX2NhbGxiYWNrX2N0eChXT0xGU1NMX0NUWCosIHZvaWQqKTsKKworICAgICNkZWZpbmUgUFNLX1RZUEVTX0RFRklORUQKKworI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICBXT0xGU1NMX0FQSSBjb25zdCBjaGFyKiB3b2xmU1NMX2dldF9jaXBoZXJfbmFtZV9ieV9oYXNoKFdPTEZTU0wqIHNzbCwKKyAgICAgICAgY29uc3QgY2hhciogaGFzaCk7CisjZW5kaWYKKyNlbmRpZiAvKiBOT19QU0sgKi8KKworCisjaWZkZWYgSEFWRV9BTk9OCisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX2FsbG93X2Fub25fY2lwaGVyKFdPTEZTU0xfQ1RYKik7CisjZW5kaWYgLyogSEFWRV9BTk9OICovCisKKworLyogZXh0cmEgYmVnaW5zICovCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorZW51bSB7ICAvKiBFUlIgQ29uc3RhbnRzICovCisgICAgRVJSX1RYVF9TVFJJTkcgPSAxCit9OworCisvKiBiaW8gbWlzYyAqLworZW51bSB7CisgICAgV09MRlNTTF9CSU9fRVJST1IgPSAtMSwKKyAgICBXT0xGU1NMX0JJT19VTlNFVCA9IC0yLAorICAgIFdPTEZTU0xfQklPX1NJWkUgID0gMTcwMDAgLyogZGVmYXVsdCBCSU8gd3JpdGUgc2l6ZSBpZiBub3Qgc2V0ICovCit9OworI2VuZGlmCisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9FUlJfcHV0X2Vycm9yKGludCBsaWIsIGludCBmdW4sIGludCBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSk7CitXT0xGU1NMX0FQSSB1bnNpZ25lZCBsb25nIHdvbGZTU0xfRVJSX2dldF9lcnJvcl9saW5lKGNvbnN0IGNoYXIqKiwgaW50Kik7CitXT0xGU1NMX0FQSSB1bnNpZ25lZCBsb25nIHdvbGZTU0xfRVJSX2dldF9lcnJvcl9saW5lX2RhdGEoY29uc3QgY2hhcioqLCBpbnQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiwgaW50ICopOworCitXT0xGU1NMX0FQSSB1bnNpZ25lZCBsb25nIHdvbGZTU0xfRVJSX2dldF9lcnJvcih2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgICAgICAgICAgd29sZlNTTF9FUlJfY2xlYXJfZXJyb3Iodm9pZCk7CisKKworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX1JBTkRfc3RhdHVzKHZvaWQpOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX1JBTkRfcHNldWRvX2J5dGVzKHVuc2lnbmVkIGNoYXIqIGJ1ZiwgaW50IG51bSk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfUkFORF9ieXRlcyh1bnNpZ25lZCBjaGFyKiBidWYsIGludCBudW0pOworV09MRlNTTF9BUEkgV09MRlNTTF9NRVRIT0QgKndvbGZTU0x2MjNfc2VydmVyX21ldGhvZCh2b2lkKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfc2V0X29wdGlvbnMoV09MRlNTTF9DVFgqLCBsb25nKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfZ2V0X29wdGlvbnMoV09MRlNTTF9DVFgqIGN0eCk7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQ1RYX2NsZWFyX29wdGlvbnMoV09MRlNTTF9DVFgqLCBsb25nKTsKKworI2lmICFkZWZpbmVkKE5PX0NIRUNLX1BSSVZBVEVfS0VZKQorICBXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5KGNvbnN0IFdPTEZTU0xfQ1RYKik7CisjZW5kaWYKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9FUlJfZnJlZV9zdHJpbmdzKHZvaWQpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0VSUl9yZW1vdmVfc3RhdGUodW5zaWduZWQgbG9uZyk7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfY2xlYXIoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9zdGF0ZShXT0xGU1NMKiBzc2wpOworCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfY2xlYW51cF9hbGxfZXhfZGF0YSh2b2lkKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfc2V0X21vZGUoV09MRlNTTF9DVFgqIGN0eCwgbG9uZyBtb2RlKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfZ2V0X21vZGUoV09MRlNTTF9DVFgqIGN0eCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX3NldF9kZWZhdWx0X3JlYWRfYWhlYWQoV09MRlNTTF9DVFgqIGN0eCwgaW50IG0pOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX1NTTF9nZXRfbW9kZShXT0xGU1NMKiBzc2wpOworCisKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKFdPTEZTU0xfQ1RYKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQgaW50KTsKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOSogd29sZlNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShXT0xGU1NMKik7CisjaWZkZWYgT1BFTlNTTF9FWFRSQQorV09MRlNTTF9BUEkgV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDkpKiB3b2xmU1NMX2dldF9wZWVyX2NlcnRfY2hhaW4oY29uc3QgV09MRlNTTCopOworV09MRlNTTF9BUEkgV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDkpKiB3b2xmU1NMX3NldF9wZWVyX2NlcnRfY2hhaW4oV09MRlNTTCogc3NsKTsKKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfd2FudChXT0xGU1NMKik7CisjZW5kaWYKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3dhbnRfcmVhZChXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF93YW50X3dyaXRlKFdPTEZTU0wqKTsKKworI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmIGRlZmluZWQgKE9QRU5TU0xfRVhUUkEpCisjaW5jbHVkZSA8c3RkYXJnLmg+IC8qIHZhcl9hcmcgKi8KK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT192cHJpbnRmKFdPTEZTU0xfQklPKiBiaW8sIGNvbnN0IGNoYXIqIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncyk7CisjZW5kaWYKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19wcmludGYoV09MRlNTTF9CSU8qLCBjb25zdCBjaGFyKiwgLi4uKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19kdW1wKFdPTEZTU0xfQklPICpiaW8sIGNvbnN0IGNoYXIqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQVNOMV9VVENUSU1FX3ByaW50KFdPTEZTU0xfQklPKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9BU04xX1VUQ1RJTUUqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0FTTjFfR0VORVJBTElaRURUSU1FX3ByaW50KFdPTEZTU0xfQklPKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9BU04xX0dFTkVSQUxJWkVEVElNRSopOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0FTTjFfR0VORVJBTElaRURUSU1FX2ZyZWUoV09MRlNTTF9BU04xX0dFTkVSQUxJWkVEVElNRSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQVNOMV9USU1FX2NoZWNrKGNvbnN0IFdPTEZTU0xfQVNOMV9USU1FKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9BU04xX1RJTUVfZGlmZihpbnQgKnBkYXksIGludCAqcHNlYywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0FTTjFfVElNRSAqZnJvbSwgY29uc3QgV09MRlNTTF9BU04xX1RJTUUgKnRvKTsKKyNpZmRlZiBPUEVOU1NMX0VYVFJBCitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfVElNRSAqd29sZlNTTF9BU04xX1RJTUVfc2V0KFdPTEZTU0xfQVNOMV9USU1FICpzLCB0aW1lX3QgdCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9BU04xX1RJTUVfc2V0X3N0cmluZyhXT0xGU1NMX0FTTjFfVElNRSAqcywgY29uc3QgY2hhciAqc3RyKTsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19udW0oY29uc3QgV09MRlNTTF9TVEFDSyogc2spOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9za192YWx1ZShjb25zdCBXT0xGU1NMX1NUQUNLKiBzaywgaW50IGkpOworCisjaWYgZGVmaW5lZChIQVZFX0VYX0RBVEEpIHx8IGRlZmluZWQoRk9SVFJFU1MpIHx8IGRlZmluZWQoV09MRlNTTF9XUEFTX1NNQUxMKQorCitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX0NSWVBUT19nZXRfZXhfZGF0YShjb25zdCBXT0xGU1NMX0NSWVBUT19FWF9EQVRBKiBleF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWR4KTsKKyNpZmRlZiBIQVZFX0VYX0RBVEFfQ0xFQU5VUF9IT09LUworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1JZUFRPX3NldF9leF9kYXRhX3dpdGhfY2xlYW51cCgKKyAgICBXT0xGU1NMX0NSWVBUT19FWF9EQVRBKiBleF9kYXRhLAorICAgIGludCBpZHgsCisgICAgdm9pZCAqZGF0YSwKKyAgICB3b2xmU1NMX2V4X2RhdGFfY2xlYW51cF9yb3V0aW5lX3QgY2xlYW51cF9yb3V0aW5lKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1JZUFRPX3NldF9leF9kYXRhKFdPTEZTU0xfQ1JZUFRPX0VYX0RBVEEqIGV4X2RhdGEsIGludCBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOworI2VuZGlmCisKKy8qIHN0dW5uZWwgNC4yOCBuZWVkcyAqLworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9DVFhfZ2V0X2V4X2RhdGEoY29uc3QgV09MRlNTTF9DVFgqLCBpbnQpOworV09MRlNTTF9BUEkgaW50ICAgd29sZlNTTF9DVFhfc2V0X2V4X2RhdGEoV09MRlNTTF9DVFgqLCBpbnQsIHZvaWQqKTsKKyNpZmRlZiBIQVZFX0VYX0RBVEFfQ0xFQU5VUF9IT09LUworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3NldF9leF9kYXRhX3dpdGhfY2xlYW51cCgKKyAgICBXT0xGU1NMX0NUWCogY3R4LAorICAgIGludCBpZHgsCisgICAgdm9pZCogZGF0YSwKKyAgICB3b2xmU1NMX2V4X2RhdGFfY2xlYW51cF9yb3V0aW5lX3QgY2xlYW51cF9yb3V0aW5lKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9DVFhfc2Vzc19zZXRfZ2V0X2NiKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9TRVNTSU9OKigqZikoV09MRlNTTCosIHVuc2lnbmVkIGNoYXIqLCBpbnQsIGludCopKTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX3Nlc3Nfc2V0X25ld19jYihXT0xGU1NMX0NUWCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmYpKFdPTEZTU0wqLCBXT0xGU1NMX1NFU1NJT04qKSk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0NUWF9zZXNzX3NldF9yZW1vdmVfY2IoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmYpKFdPTEZTU0xfQ1RYKiwgV09MRlNTTF9TRVNTSU9OKikpOworCitXT0xGU1NMX0FQSSBpbnQgICAgICAgICAgd29sZlNTTF9pMmRfU1NMX1NFU1NJT04oV09MRlNTTF9TRVNTSU9OKix1bnNpZ25lZCBjaGFyKiopOworV09MRlNTTF9BUEkgV09MRlNTTF9TRVNTSU9OKiB3b2xmU1NMX2QyaV9TU0xfU0VTU0lPTihXT0xGU1NMX1NFU1NJT04qKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqKiwgbG9uZyk7CisKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9TRVNTSU9OX2dldF90aW1lb3V0KGNvbnN0IFdPTEZTU0xfU0VTU0lPTiopOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX1NFU1NJT05fZ2V0X3RpbWUoY29uc3QgV09MRlNTTF9TRVNTSU9OKik7CitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfQ1RYX2dldF9leF9uZXdfaW5kZXgobG9uZywgdm9pZCosIHZvaWQqLCB2b2lkKiwgdm9pZCopOworCisKKy8qIGV4dHJhIGVuZHMgKi8KKworCisvKiB3b2xmU1NMIGV4dGVuc2lvbnMgKi8KKworLyogY2FsbCBiZWZvcmUgU1NMX2Nvbm5lY3QsIGlmIHZlcmlmeWluZyB3aWxsIGFkZCBuYW1lIGNoZWNrIHRvCisgICBkYXRlIGNoZWNrIGFuZCBzaWduYXR1cmUgY2hlY2sgKi8KK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX2NoZWNrX2RvbWFpbl9uYW1lKFdPTEZTU0wqLCBjb25zdCBjaGFyKik7CisKKy8qIG5lZWQgdG8gY2FsbCBvbmNlIHRvIGxvYWQgbGlicmFyeSAoc2Vzc2lvbiBjYWNoZSkgKi8KK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0luaXQodm9pZCk7CisvKiBjYWxsIHdoZW4gZG9uZSB0byBjbGVhbnVwL2ZyZWUgc2Vzc2lvbiBjYWNoZSBtdXRleCAvIHJlc291cmNlcyAgKi8KK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NsZWFudXAodm9pZCk7CisKKy8qIHdoaWNoIGxpYnJhcnkgdmVyc2lvbiBkbyB3ZSBoYXZlICovCitXT0xGU1NMX0FQSSBjb25zdCBjaGFyKiB3b2xmU1NMX2xpYl92ZXJzaW9uKHZvaWQpOworI2lmIGRlZmluZWQoT1BFTlNTTF9WRVJTSU9OX05VTUJFUikgJiYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDAwTAorV09MRlNTTF9BUEkgY29uc3QgY2hhciogd29sZlNTTF9PcGVuU1NMX3ZlcnNpb24oaW50IGEpOworI2Vsc2UKK1dPTEZTU0xfQVBJIGNvbnN0IGNoYXIqIHdvbGZTU0xfT3BlblNTTF92ZXJzaW9uKHZvaWQpOworI2VuZGlmCisvKiB3aGljaCBsaWJyYXJ5IHZlcnNpb24gZG8gd2UgaGF2ZSBpbiBoZXggKi8KK1dPTEZTU0xfQVBJIHdvcmQzMiB3b2xmU1NMX2xpYl92ZXJzaW9uX2hleCh2b2lkKTsKKworLyogZG8gYWNjZXB0IG9yIGNvbm5lY3QgZGVwZWRuaW5nIG9uIHNpZGUgKi8KK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX25lZ290aWF0ZShXT0xGU1NMKiBzc2wpOworLyogdHVybiBvbiB3b2xmU1NMIGRhdGEgY29tcHJlc3Npb24gKi8KK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NldF9jb21wcmVzc2lvbihXT0xGU1NMKiBzc2wpOworCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9zZXRfdGltZW91dChXT0xGU1NMKiwgdW5zaWduZWQgaW50KTsKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9zZXRfdGltZW91dChXT0xGU1NMX0NUWCosIHVuc2lnbmVkIGludCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX3NldF9jdXJyZW50X3RpbWVfY2IoV09MRlNTTF9DVFgqIGN0eCwKKyAgICB2b2lkICgqY2IpKGNvbnN0IFdPTEZTU0wqIHNzbCwgV09MRlNTTF9USU1FVkFMKiBvdXRfY2xvY2spKTsKKworLyogZ2V0IHdvbGZTU0wgcGVlciBYNTA5X0NIQUlOICovCitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfQ0hBSU4qIHdvbGZTU0xfZ2V0X3BlZXJfY2hhaW4oV09MRlNTTCogc3NsKTsKKyNpZmRlZiBXT0xGU1NMX0FMVF9DRVJUX0NIQUlOUworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfaXNfcGVlcl9hbHRfY2VydF9jaGFpbihjb25zdCBXT0xGU1NMKiBzc2wpOworLyogZ2V0IHdvbGZTU0wgYWx0ZXJuYXRlIHBlZXIgWDUwOV9DSEFJTiAqLworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X0NIQUlOKiB3b2xmU1NMX2dldF9wZWVyX2FsdF9jaGFpbihXT0xGU1NMKiBzc2wpOworI2VuZGlmCisvKiBwZWVyIGNoYWluIGNvdW50ICovCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfZ2V0X2NoYWluX2NvdW50KFdPTEZTU0xfWDUwOV9DSEFJTiogY2hhaW4pOworLyogaW5kZXggY2VydCBsZW5ndGggKi8KK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9nZXRfY2hhaW5fbGVuZ3RoKFdPTEZTU0xfWDUwOV9DSEFJTiosIGludCBpZHgpOworLyogaW5kZXggY2VydCAqLworV09MRlNTTF9BUEkgdW5zaWduZWQgY2hhciogd29sZlNTTF9nZXRfY2hhaW5fY2VydChXT0xGU1NMX1g1MDlfQ0hBSU4qLCBpbnQgaWR4KTsKKy8qIGluZGV4IGNlcnQgaW4gWDUwOSAqLworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5KiB3b2xmU1NMX2dldF9jaGFpbl9YNTA5KFdPTEZTU0xfWDUwOV9DSEFJTiosIGludCBpZHgpOworLyogZnJlZSBYNTA5ICovCisjZGVmaW5lIHdvbGZTU0xfRnJlZVg1MDkoeDUwOSkgd29sZlNTTF9YNTA5X2ZyZWUoKHg1MDkpKQorV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1g1MDlfZnJlZShXT0xGU1NMX1g1MDkqKTsKKy8qIGdldCBpbmRleCBjZXJ0IGluIFBFTSAqLworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX2dldF9jaGFpbl9jZXJ0X3BlbShXT0xGU1NMX1g1MDlfQ0hBSU4qLCBpbnQgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBidWYsIGludCBpbkxlbiwgaW50KiBvdXRMZW4pOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgY29uc3QgdW5zaWduZWQgY2hhciogd29sZlNTTF9nZXRfc2Vzc2lvbklEKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9TRVNTSU9OKiBzKTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9YNTA5X2dldF9zZXJpYWxfbnVtYmVyKFdPTEZTU0xfWDUwOSosdW5zaWduZWQgY2hhciosaW50Kik7CitXT0xGU1NMX0FQSSBjaGFyKiAgd29sZlNTTF9YNTA5X2dldF9zdWJqZWN0Q04oV09MRlNTTF9YNTA5Kik7CitXT0xGU1NMX0FQSSBjb25zdCB1bnNpZ25lZCBjaGFyKiB3b2xmU1NMX1g1MDlfZ2V0X2RlcihXT0xGU1NMX1g1MDkqLCBpbnQqKTsKK1dPTEZTU0xfQVBJIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHdvbGZTU0xfWDUwOV9nZXRfdGJzKFdPTEZTU0xfWDUwOSosIGludCopOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgY29uc3QgYnl0ZSogd29sZlNTTF9YNTA5X25vdEJlZm9yZShXT0xGU1NMX1g1MDkqKTsKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGNvbnN0IGJ5dGUqIHdvbGZTU0xfWDUwOV9ub3RBZnRlcihXT0xGU1NMX1g1MDkqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfdmVyc2lvbihXT0xGU1NMX1g1MDkqKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfY21wX3BlZXJfY2VydF90b19maWxlKFdPTEZTU0wqLCBjb25zdCBjaGFyKik7CisKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGNoYXIqIHdvbGZTU0xfWDUwOV9nZXRfbmV4dF9hbHRuYW1lKFdPTEZTU0xfWDUwOSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9hZGRfYWx0bmFtZV9leChXT0xGU1NMX1g1MDkqLCBjb25zdCBjaGFyKiwgd29yZDMyLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9hZGRfYWx0bmFtZShXT0xGU1NMX1g1MDkqLCBjb25zdCBjaGFyKiwgaW50KTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5KiB3b2xmU1NMX2QyaV9YNTA5KFdPTEZTU0xfWDUwOSoqIHg1MDksCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqKiBpbiwgaW50IGxlbik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkqCisgICAgd29sZlNTTF9YNTA5X2QyaShXT0xGU1NMX1g1MDkqKiB4NTA5LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBpbiwgaW50IGxlbik7CisjaWZkZWYgV09MRlNTTF9DRVJUX1JFUQorV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5KgorICAgIHdvbGZTU0xfWDUwOV9SRVFfZDJpKFdPTEZTU0xfWDUwOSoqIHg1MDksIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluLCBpbnQgbGVuKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfaTJkX1g1MDkoV09MRlNTTF9YNTA5KiB4NTA5LCB1bnNpZ25lZCBjaGFyKiogb3V0KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9DUkwgKndvbGZTU0xfZDJpX1g1MDlfQ1JMKFdPTEZTU0xfWDUwOV9DUkwgKipjcmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGxlbik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfQ1JMICp3b2xmU1NMX2QyaV9YNTA5X0NSTF9iaW8oV09MRlNTTF9CSU8gKmJwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1g1MDlfQ1JMICoqY3JsKTsKKyNpZiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19TVERJT19GSUxFU1lTVEVNKQorV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X0NSTCAqd29sZlNTTF9kMmlfWDUwOV9DUkxfZnAoWEZJTEUgZmlsZSwgV09MRlNTTF9YNTA5X0NSTCAqKmNybCk7CisjZW5kaWYKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9YNTA5X0NSTF9mcmVlKFdPTEZTU0xfWDUwOV9DUkwgKmNybCk7CisKKyNpZm5kZWYgTk9fRklMRVNZU1RFTQorICAgICNpZm5kZWYgTk9fU1RESU9fRklMRVNZU1RFTQorICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOSoKKyAgICAgICAgd29sZlNTTF9YNTA5X2QyaV9mcChXT0xGU1NMX1g1MDkqKiB4NTA5LCBYRklMRSBmaWxlKTsKKyAgICAjZW5kaWYKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOSoKKyAgICB3b2xmU1NMX1g1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9maWxlKGNvbnN0IGNoYXIqIGZuYW1lLCBpbnQgZm9ybWF0KTsKKyNlbmRpZgorV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5KiB3b2xmU1NMX1g1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9idWZmZXIoCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogYnVmLCBpbnQgc3osIGludCBmb3JtYXQpOworI2lmZGVmIFdPTEZTU0xfQ0VSVF9SRVEKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOSogd29sZlNTTF9YNTA5X1JFUV9sb2FkX2NlcnRpZmljYXRlX2J1ZmZlcigKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYsIGludCBzeiwgaW50IGZvcm1hdCk7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfU0VQCisgICAgV09MRlNTTF9BUEkgdW5zaWduZWQgY2hhcioKKyAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9kZXZpY2VfdHlwZShXT0xGU1NMX1g1MDkqLCB1bnNpZ25lZCBjaGFyKiwgaW50Kik7CisgICAgV09MRlNTTF9BUEkgdW5zaWduZWQgY2hhcioKKyAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9od190eXBlKFdPTEZTU0xfWDUwOSosIHVuc2lnbmVkIGNoYXIqLCBpbnQqKTsKKyAgICBXT0xGU1NMX0FQSSB1bnNpZ25lZCBjaGFyKgorICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X2h3X3NlcmlhbF9udW1iZXIoV09MRlNTTF9YNTA5KiwgdW5zaWduZWQgY2hhciosIGludCopOworI2VuZGlmCisKKy8qIGNvbm5lY3QgZW5vdWdoIHRvIGdldCBwZWVyIGNlcnQgKi8KK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9jb25uZWN0X2NlcnQoV09MRlNTTCogc3NsKTsKKworCisKKy8qIFBLQ1MxMiBjb21wYXRpYmlsaXR5ICovCit0eXBlZGVmIHN0cnVjdCBXQ19QS0NTMTIgV0NfUEtDUzEyOworV09MRlNTTF9BUEkgV0NfUEtDUzEyKiB3b2xmU1NMX2QyaV9QS0NTMTJfYmlvKFdPTEZTU0xfQklPKiBiaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQ19QS0NTMTIqKiBwa2NzMTIpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfaTJkX1BLQ1MxMl9iaW8oV09MRlNTTF9CSU8gKmJpbywgV0NfUEtDUzEyICpwa2NzMTIpOworI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKE5PX1NURElPX0ZJTEVTWVNURU0pCitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfUEtDUzEyKiB3b2xmU1NMX2QyaV9QS0NTMTJfZnAoWEZJTEUgZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1g1MDlfUEtDUzEyKiogcGtjczEyKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUEtDUzEyX3BhcnNlKFdDX1BLQ1MxMiogcGtjczEyLCBjb25zdCBjaGFyKiBwc3csCisgICAgIFdPTEZTU0xfRVZQX1BLRVkqKiBwa2V5LCBXT0xGU1NMX1g1MDkqKiBjZXJ0LAorICAgICBXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOSkqKiBjYSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9QS0NTMTJfdmVyaWZ5X21hYyhXQ19QS0NTMTIgKnBrY3MxMiwgY29uc3QgY2hhciAqcHN3LAorICAgICAgICBpbnQgcHN3TGVuKTsKK1dPTEZTU0xfQVBJIFdDX1BLQ1MxMiogd29sZlNTTF9QS0NTMTJfY3JlYXRlKGNoYXIqIHBhc3MsIGNoYXIqIG5hbWUsCisgICAgICAgIFdPTEZTU0xfRVZQX1BLRVkqIHBrZXksIFdPTEZTU0xfWDUwOSogY2VydCwKKyAgICAgICAgV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDkpKiBjYSwKKyAgICAgICAgaW50IGtleU5JRCwgaW50IGNlcnROSUQsIGludCBpdHQsIGludCBtYWNJdHQsIGludCBrZXl0eXBlKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9QS0NTMTJfUEJFX2FkZCh2b2lkKTsKKworCisKKyNpZm5kZWYgTk9fREgKKy8qIHNlcnZlciBEaWZmaWUtSGVsbG1hbiBwYXJhbWV0ZXJzICovCitXT0xGU1NMX0FQSSBpbnQgIHdvbGZTU0xfU2V0VG1wREgoV09MRlNTTCosIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHAsIGludCBwU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGcsIGludCBnU3opOworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX1NldFRtcERIX2J1ZmZlcihXT0xGU1NMKiwgY29uc3QgdW5zaWduZWQgY2hhciogYiwgbG9uZyBzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JtYXQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU2V0RW5hYmxlRGhLZXlUZXN0KFdPTEZTU0wqLCBpbnQpOworI2lmbmRlZiBOT19GSUxFU1lTVEVNCisgICAgV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX1NldFRtcERIX2ZpbGUoV09MRlNTTCosIGNvbnN0IGNoYXIqIGYsIGludCBmb3JtYXQpOworI2VuZGlmCisKKy8qIHNlcnZlciBjdHggRGlmZmllLUhlbGxtYW4gcGFyYW1ldGVycyAqLworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0NUWF9TZXRUbXBESChXT0xGU1NMX0NUWCosIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcFN6LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBnLCBpbnQgZ1N6KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfU2V0VG1wREhfYnVmZmVyKFdPTEZTU0xfQ1RYKiwgY29uc3QgdW5zaWduZWQgY2hhciogYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN6LCBpbnQgZm9ybWF0KTsKKworI2lmbmRlZiBOT19GSUxFU1lTVEVNCisgICAgV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0NUWF9TZXRUbXBESF9maWxlKFdPTEZTU0xfQ1RYKiwgY29uc3QgY2hhciogZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JtYXQpOworI2VuZGlmCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9TZXRNaW5EaEtleV9TeihXT0xGU1NMX0NUWCosIHdvcmQxNik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZXRNaW5EaEtleV9TeihXT0xGU1NMKiwgd29yZDE2KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9TZXRNYXhEaEtleV9TeihXT0xGU1NMX0NUWCosIHdvcmQxNik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZXRNYXhEaEtleV9TeihXT0xGU1NMKiwgd29yZDE2KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0dldERoS2V5X1N6KFdPTEZTU0wqKTsKKyNlbmRpZiAvKiBOT19ESCAqLworCisjaWZuZGVmIE5PX1JTQQorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX1NldE1pblJzYUtleV9TeihXT0xGU1NMX0NUWCosIHNob3J0KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NldE1pblJzYUtleV9TeihXT0xGU1NMKiwgc2hvcnQpOworI2VuZGlmIC8qIE5PX1JTQSAqLworCisjaWZkZWYgSEFWRV9FQ0MKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9TZXRNaW5FY2NLZXlfU3ooV09MRlNTTF9DVFgqLCBzaG9ydCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZXRNaW5FY2NLZXlfU3ooV09MRlNTTCosIHNob3J0KTsKKyNlbmRpZiAvKiBOT19SU0EgKi8KKworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX1NldFRtcEVDX0RIRV9TeihXT0xGU1NMKiwgd29yZDE2KTsKK1dPTEZTU0xfQVBJIGludCAgd29sZlNTTF9DVFhfU2V0VG1wRUNfREhFX1N6KFdPTEZTU0xfQ1RYKiwgd29yZDE2KTsKKworLyoga2V5YmxvY2sgc2l6ZSBpbiBieXRlcyBvciAtMSAqLworLyogbmVlZCB0byBjYWxsIHdvbGZTU0xfS2VlcEFycmF5cyBiZWZvcmUgaGFuZHNoYWtlIHRvIHNhdmUga2V5cyAqLworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfZ2V0X2tleWJsb2NrX3NpemUoV09MRlNTTCopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfZ2V0X2tleXMoV09MRlNTTCosdW5zaWduZWQgY2hhcioqIG1zLCB1bnNpZ25lZCBpbnQqIG1zTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcioqIHNyLCB1bnNpZ25lZCBpbnQqIHNyTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcioqIGNyLCB1bnNpZ25lZCBpbnQqIGNyTGVuKTsKKworLyogQ29tcHV0ZXMgRUFQLVRMUyBhbmQgRUFQLVRUTFMga2V5aW5nIG1hdGVyaWFsIGZyb20gdGhlIG1hc3Rlcl9zZWNyZXQuICovCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9tYWtlX2VhcF9rZXlzKFdPTEZTU0wqLCB2b2lkKiBrZXksIHVuc2lnbmVkIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbGFiZWwpOworCisKKyNpZm5kZWYgX1dJTjMyCisgICAgI2lmbmRlZiBOT19XUklURVYKKyAgICAgICAgI2lmZGVmIF9fUFBVCisgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICAgICAjZWxpZiAhZGVmaW5lZChXT0xGU1NMX01ES19BUk0pICYmICFkZWZpbmVkKFdPTEZTU0xfSUFSX0FSTSkgJiYgXAorICAgICAgICAgICAgICAhZGVmaW5lZChXT0xGU1NMX1BJQ09UQ1ApICYmICFkZWZpbmVkKFdPTEZTU0xfUk9XTEVZX0FSTSkgJiYgXAorICAgICAgICAgICAgICAhZGVmaW5lZChXT0xGU1NMX0VNQk9TKSAmJiAhZGVmaW5lZChXT0xGU1NMX0ZST1NURUQpICYmIFwKKyAgICAgICAgICAgICAgIWRlZmluZWQoV09MRlNTTF9DSElCSU9TKSAmJiAhZGVmaW5lZChXT0xGU1NMX0NPTlRJS0kpICYmIFwKKyAgICAgICAgICAgICAgIWRlZmluZWQoV09MRlNTTF9aRVBIWVIpCisgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3Vpby5oPgorICAgICAgICAjZW5kaWYKKyAgICAgICAgLyogYWxsb3cgd3JpdGV2IHN0eWxlIHdyaXRpbmcgKi8KKyAgICAgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfd3JpdGV2KFdPTEZTU0wqIHNzbCwgY29uc3Qgc3RydWN0IGlvdmVjKiBpb3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlvdmNudCk7CisgICAgI2VuZGlmCisjZW5kaWYKKworCisjaWZuZGVmIE5PX0NFUlRTCisgICAgLyogU1NMX0NUWCB2ZXJzaW9ucyAqLworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9VbmxvYWRDQXMoV09MRlNTTF9DVFgqKTsKKyNpZmRlZiBXT0xGU1NMX1RSVVNUX1BFRVJfQ0VSVAorICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9VbmxvYWRfdHJ1c3RfcGVlcnMoV09MRlNTTF9DVFgqKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfdHJ1c3RfcGVlcl9idWZmZXIoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiwgbG9uZywgaW50KTsKKyNlbmRpZgorICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9sb2FkX3ZlcmlmeV9idWZmZXJfZXgoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiwgbG9uZywgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIHdvcmQzMik7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX2xvYWRfdmVyaWZ5X2J1ZmZlcihXT0xGU1NMX0NUWCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBsb25nLCBpbnQpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9sb2FkX3ZlcmlmeV9jaGFpbl9idWZmZXJfZm9ybWF0KFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciosIGxvbmcsIGludCk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9idWZmZXIoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiwgbG9uZywgaW50KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfYnVmZmVyKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciosIGxvbmcsIGludCk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2lkKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciosIGxvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgbG9uZyk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X0lkKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciosIGxvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X0xhYmVsKFdPTEZTU0xfQ1RYKiwgY29uc3QgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9idWZmZXJfZm9ybWF0KFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciosIGxvbmcsIGludCk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9idWZmZXIoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBsb25nKTsKKworICAgIC8qIFNTTCB2ZXJzaW9ucyAqLworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX3VzZV9jZXJ0aWZpY2F0ZV9idWZmZXIoV09MRlNTTCosIGNvbnN0IHVuc2lnbmVkIGNoYXIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nLCBpbnQpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX3VzZV9jZXJ0aWZpY2F0ZV9BU04xKFdPTEZTU0wqIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkZXIsIGludCBkZXJTeik7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfdXNlX1ByaXZhdGVLZXlfYnVmZmVyKFdPTEZTU0wqLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZywgaW50KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF91c2VfUHJpdmF0ZUtleV9pZChXT0xGU1NMKiwgY29uc3QgdW5zaWduZWQgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZywgaW50LCBsb25nKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF91c2VfUHJpdmF0ZUtleV9JZChXT0xGU1NMKiwgY29uc3QgdW5zaWduZWQgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZywgaW50KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF91c2VfUHJpdmF0ZUtleV9MYWJlbChXT0xGU1NMKiwgY29uc3QgY2hhciosIGludCk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfdXNlX2NlcnRpZmljYXRlX2NoYWluX2J1ZmZlcl9mb3JtYXQoV09MRlNTTCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBsb25nLCBpbnQpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9idWZmZXIoV09MRlNTTCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBsb25nKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9VbmxvYWRDZXJ0c0tleXMoV09MRlNTTCopOworCisgICAgI2lmIChkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMKSkgJiYgXAorICAgICAgICBkZWZpbmVkKEtFRVBfT1VSX0NFUlQpCisgICAgICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOSogd29sZlNTTF9nZXRfY2VydGlmaWNhdGUoV09MRlNTTCogc3NsKTsKKyAgICAgICAgV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5KiB3b2xmU1NMX0NUWF9nZXQwX2NlcnRpZmljYXRlKFdPTEZTU0xfQ1RYKiBjdHgpOworICAgICNlbmRpZgorI2VuZGlmCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9zZXRfZ3JvdXBfbWVzc2FnZXMoV09MRlNTTF9DVFgqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NldF9ncm91cF9tZXNzYWdlcyhXT0xGU1NMKik7CisKKworI2lmZGVmIEhBVkVfRlVaWkVSCitlbnVtIGZ1enplcl90eXBlIHsKKyAgICBGVVpaX0hNQUMgICAgICA9IDAsCisgICAgRlVaWl9FTkNSWVBUICAgPSAxLAorICAgIEZVWlpfU0lHTkFUVVJFID0gMiwKKyAgICBGVVpaX0hBU0ggICAgICA9IDMsCisgICAgRlVaWl9IRUFEICAgICAgPSA0Cit9OworCit0eXBlZGVmIGludCAoKkNhbGxiYWNrRnV6emVyKShXT0xGU1NMKiBzc2wsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZiwgaW50IHN6LAorICAgICAgICBpbnQgdHlwZSwgdm9pZCogZnV6ekN0eCk7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9TZXRGdXp6ZXJDYihXT0xGU1NMKiBzc2wsIENhbGxiYWNrRnV6emVyIGNiZiwgdm9pZCogZkN0eCk7CisjZW5kaWYKKworCitXT0xGU1NMX0FQSSBpbnQgICB3b2xmU1NMX0RUTFNfU2V0Q29va2llU2VjcmV0KFdPTEZTU0wqLCBjb25zdCBieXRlKiwgd29yZDMyKTsKKworCisvKiBJL08gQ2FsbGJhY2sgZGVmYXVsdCBlcnJvcnMgKi8KK2VudW0gSU9lcnJvcnMgeworICAgIFdPTEZTU0xfQ0JJT19FUlJfR0VORVJBTCAgICA9IC0xLCAgICAgLyogZ2VuZXJhbCB1bmV4cGVjdGVkIGVyciAqLworICAgIFdPTEZTU0xfQ0JJT19FUlJfV0FOVF9SRUFEICA9IC0yLCAgICAgLyogbmVlZCB0byBjYWxsIHJlYWQgIGFnYWluICovCisgICAgV09MRlNTTF9DQklPX0VSUl9XQU5UX1dSSVRFID0gLTIsICAgICAvKiBuZWVkIHRvIGNhbGwgd3JpdGUgYWdhaW4gKi8KKyAgICBXT0xGU1NMX0NCSU9fRVJSX0NPTk5fUlNUICAgPSAtMywgICAgIC8qIGNvbm5lY3Rpb24gcmVzZXQgKi8KKyAgICBXT0xGU1NMX0NCSU9fRVJSX0lTUiAgICAgICAgPSAtNCwgICAgIC8qIGludGVycnVwdCAqLworICAgIFdPTEZTU0xfQ0JJT19FUlJfQ09OTl9DTE9TRSA9IC01LCAgICAgLyogY29ubmVjdGlvbiBjbG9zZWQgb3IgZXBpcGUgKi8KKyAgICBXT0xGU1NMX0NCSU9fRVJSX1RJTUVPVVQgICAgPSAtNiAgICAgIC8qIHNvY2tldCB0aW1lb3V0ICovCit9OworCisKKy8qIENBIGNhY2hlIGNhbGxiYWNrcyAqLworZW51bSB7CisgICAgV09MRlNTTF9TU0xWMyAgICA9IDAsCisgICAgV09MRlNTTF9UTFNWMSAgICA9IDEsCisgICAgV09MRlNTTF9UTFNWMV8xICA9IDIsCisgICAgV09MRlNTTF9UTFNWMV8yICA9IDMsCisgICAgV09MRlNTTF9UTFNWMV8zICA9IDQsCisgICAgV09MRlNTTF9VU0VSX0NBICA9IDEsICAgICAgICAgIC8qIHVzZXIgYWRkZWQgYXMgdHJ1c3RlZCAqLworICAgIFdPTEZTU0xfQ0hBSU5fQ0EgPSAyICAgICAgICAgICAvKiBhZGRlZCB0byBjYWNoZSBmcm9tIHRydXN0ZWQgY2hhaW4gKi8KK307CisKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIFdDX1JORyogd29sZlNTTF9HZXRSTkcoV09MRlNTTCopOworCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihXT0xGU1NMX0NUWCosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZXRNaW5WZXJzaW9uKFdPTEZTU0wqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfR2V0T2JqZWN0U2l6ZSh2b2lkKTsgIC8qIG9iamVjdCBzaXplIGJhc2VkIG9uIGJ1aWxkICovCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfR2V0T2JqZWN0U2l6ZSh2b2lkKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX01FVEhPRF9HZXRPYmplY3RTaXplKHZvaWQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfR2V0T3V0cHV0U2l6ZShXT0xGU1NMKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0dldE1heE91dHB1dFNpemUoV09MRlNTTCopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfR2V0VmVyc2lvbihjb25zdCBXT0xGU1NMKiBzc2wpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU2V0VmVyc2lvbihXT0xGU1NMKiBzc2wsIGludCB2ZXJzaW9uKTsKKworLyogbW92ZWQgdG8gYXNuLmMsIG9sZCBuYW1lcyBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSB3b2xmU1NMX0tleVBlbVRvRGVyICAgIHdjX0tleVBlbVRvRGVyCisjZGVmaW5lIHdvbGZTU0xfQ2VydFBlbVRvRGVyICAgd2NfQ2VydFBlbVRvRGVyCisjZGVmaW5lIHdvbGZTU0xfUGVtUHViS2V5VG9EZXIgd2NfUGVtUHViS2V5VG9EZXIKKyNkZWZpbmUgd29sZlNTTF9QdWJLZXlQZW1Ub0RlciB3Y19QdWJLZXlQZW1Ub0RlcgorI2RlZmluZSB3b2xmU1NMX1BlbUNlcnRUb0RlciAgIHdjX1BlbUNlcnRUb0RlcgorCisKK3R5cGVkZWYgdm9pZCAoKkNhbGxiYWNrQ0FDYWNoZSkodW5zaWduZWQgY2hhciogZGVyLCBpbnQgc3osIGludCB0eXBlKTsKK3R5cGVkZWYgdm9pZCAoKkNiTWlzc2luZ0NSTCkoY29uc3QgY2hhciogdXJsKTsKK3R5cGVkZWYgaW50ICAoKkNiT0NTUElPKSh2b2lkKiwgY29uc3QgY2hhciosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciosIGludCwgdW5zaWduZWQgY2hhcioqKTsKK3R5cGVkZWYgdm9pZCAoKkNiT0NTUFJlc3BGcmVlKSh2b2lkKix1bnNpZ25lZCBjaGFyKik7CisKKyNpZmRlZiBIQVZFX0NSTF9JTwordHlwZWRlZiBpbnQgICgqQ2JDcmxJTykoV09MRlNTTF9DUkwqIGNybCwgY29uc3QgY2hhciogdXJsLCBpbnQgdXJsU3opOworI2VuZGlmCisKKy8qIFVzZXIgQXRvbWljIFJlY29yZCBMYXllciBDYWxsQmFja3MgKi8KK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tNYWNFbmNyeXB0KShXT0xGU1NMKiBzc2wsIHVuc2lnbmVkIGNoYXIqIG1hY091dCwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtYWNJbiwgdW5zaWduZWQgaW50IG1hY0luU3osIGludCBtYWNDb250ZW50LAorICAgICAgIGludCBtYWNWZXJpZnksIHVuc2lnbmVkIGNoYXIqIGVuY091dCwgY29uc3QgdW5zaWduZWQgY2hhciogZW5jSW4sCisgICAgICAgdW5zaWduZWQgaW50IGVuY1N6LCB2b2lkKiBjdHgpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9DVFhfU2V0TWFjRW5jcnlwdENiKFdPTEZTU0xfQ1RYKiwgQ2FsbGJhY2tNYWNFbmNyeXB0KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfU2V0TWFjRW5jcnlwdEN0eChXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX0dldE1hY0VuY3J5cHRDdHgoV09MRlNTTCogc3NsKTsKKwordHlwZWRlZiBpbnQgKCpDYWxsYmFja0RlY3J5cHRWZXJpZnkpKFdPTEZTU0wqIHNzbCwKKyAgICAgICB1bnNpZ25lZCBjaGFyKiBkZWNPdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRlY0luLAorICAgICAgIHVuc2lnbmVkIGludCBkZWNTeiwgaW50IGNvbnRlbnQsIGludCB2ZXJpZnksIHVuc2lnbmVkIGludCogcGFkU3osCisgICAgICAgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldERlY3J5cHRWZXJpZnlDYihXT0xGU1NMX0NUWCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGJhY2tEZWNyeXB0VmVyaWZ5KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfU2V0RGVjcnlwdFZlcmlmeUN0eChXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX0dldERlY3J5cHRWZXJpZnlDdHgoV09MRlNTTCogc3NsKTsKKwordHlwZWRlZiBpbnQgKCpDYWxsYmFja0VuY3J5cHRNYWMpKFdPTEZTU0wqIHNzbCwgdW5zaWduZWQgY2hhciogbWFjT3V0LAorICAgICAgIGludCBjb250ZW50LCBpbnQgbWFjVmVyaWZ5LCB1bnNpZ25lZCBjaGFyKiBlbmNPdXQsCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZW5jSW4sIHVuc2lnbmVkIGludCBlbmNTeiwgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldEVuY3J5cHRNYWNDYihXT0xGU1NMX0NUWCosIENhbGxiYWNrRW5jcnlwdE1hYyk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX1NldEVuY3J5cHRNYWNDdHgoV09MRlNTTCogc3NsLCB2b2lkICpjdHgpOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9HZXRFbmNyeXB0TWFjQ3R4KFdPTEZTU0wqIHNzbCk7CisKK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tWZXJpZnlEZWNyeXB0KShXT0xGU1NMKiBzc2wsCisgICAgICAgdW5zaWduZWQgY2hhciogZGVjT3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkZWNJbiwKKyAgICAgICB1bnNpZ25lZCBpbnQgZGVjU3osIGludCBjb250ZW50LCBpbnQgdmVyaWZ5LCB1bnNpZ25lZCBpbnQqIHBhZFN6LAorICAgICAgIHZvaWQqIGN0eCk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0NUWF9TZXRWZXJpZnlEZWNyeXB0Q2IoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrVmVyaWZ5RGVjcnlwdCk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX1NldFZlcmlmeURlY3J5cHRDdHgoV09MRlNTTCogc3NsLCB2b2lkICpjdHgpOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9HZXRWZXJpZnlEZWNyeXB0Q3R4KFdPTEZTU0wqIHNzbCk7CisKK1dPTEZTU0xfQVBJIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHdvbGZTU0xfR2V0TWFjU2VjcmV0KFdPTEZTU0wqLCBpbnQpOworV09MRlNTTF9BUEkgY29uc3QgdW5zaWduZWQgY2hhciogd29sZlNTTF9HZXREdGxzTWFjU2VjcmV0KFdPTEZTU0wqLCBpbnQsIGludCk7CitXT0xGU1NMX0FQSSBjb25zdCB1bnNpZ25lZCBjaGFyKiB3b2xmU1NMX0dldENsaWVudFdyaXRlS2V5KFdPTEZTU0wqKTsKK1dPTEZTU0xfQVBJIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHdvbGZTU0xfR2V0Q2xpZW50V3JpdGVJVihXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBjb25zdCB1bnNpZ25lZCBjaGFyKiB3b2xmU1NMX0dldFNlcnZlcldyaXRlS2V5KFdPTEZTU0wqKTsKK1dPTEZTU0xfQVBJIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHdvbGZTU0xfR2V0U2VydmVyV3JpdGVJVihXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBpbnQgICAgICAgICAgICAgICAgICB3b2xmU1NMX0dldEtleVNpemUoV09MRlNTTCopOworV09MRlNTTF9BUEkgaW50ICAgICAgICAgICAgICAgICAgd29sZlNTTF9HZXRJVlNpemUoV09MRlNTTCopOworV09MRlNTTF9BUEkgaW50ICAgICAgICAgICAgICAgICAgd29sZlNTTF9HZXRTaWRlKFdPTEZTU0wqKTsKK1dPTEZTU0xfQVBJIGludCAgICAgICAgICAgICAgICAgIHdvbGZTU0xfSXNUTFN2MV8xKFdPTEZTU0wqKTsKK1dPTEZTU0xfQVBJIGludCAgICAgICAgICAgICAgICAgIHdvbGZTU0xfR2V0QnVsa0NpcGhlcihXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBpbnQgICAgICAgICAgICAgICAgICB3b2xmU1NMX0dldENpcGhlckJsb2NrU2l6ZShXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBpbnQgICAgICAgICAgICAgICAgICB3b2xmU1NMX0dldEFlYWRNYWNTaXplKFdPTEZTU0wqKTsKK1dPTEZTU0xfQVBJIGludCAgICAgICAgICAgICAgICAgIHdvbGZTU0xfR2V0SG1hY1NpemUoV09MRlNTTCopOworV09MRlNTTF9BUEkgaW50ICAgICAgICAgICAgICAgICAgd29sZlNTTF9HZXRIbWFjVHlwZShXT0xGU1NMKik7CitXT0xGU1NMX0FQSSBpbnQgICAgICAgICAgICAgICAgICB3b2xmU1NMX0dldENpcGhlclR5cGUoV09MRlNTTCopOworV09MRlNTTF9BUEkgaW50ICAgICAgICAgICAgICAgICAgd29sZlNTTF9TZXRUbHNIbWFjSW5uZXIoV09MRlNTTCosIHVuc2lnbmVkIGNoYXIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiwgaW50LCBpbnQpOworCisvKiBBdG9taWMgVXNlciBOZWVkcyAqLworZW51bSB7CisgICAgV09MRlNTTF9TRVJWRVJfRU5EID0gMCwKKyAgICBXT0xGU1NMX0NMSUVOVF9FTkQgPSAxLAorICAgIFdPTEZTU0xfTkVJVEhFUl9FTkQgPSAzLAorICAgIFdPTEZTU0xfQkxPQ0tfVFlQRSA9IDIsCisgICAgV09MRlNTTF9TVFJFQU1fVFlQRSA9IDMsCisgICAgV09MRlNTTF9BRUFEX1RZUEUgPSA0LAorICAgIFdPTEZTU0xfVExTX0hNQUNfSU5ORVJfU1ogPSAxMyAgICAgIC8qIFNFUV9TWiArIEVOVU0gKyBWRVJTSU9OX1NaICsgTEVOX1NaICovCit9OworCisvKiBmb3IgR2V0QnVsa0NpcGhlciBhbmQgaW50ZXJuYWwgdXNlICovCitlbnVtIEJ1bGtDaXBoZXJBbGdvcml0aG0geworICAgIHdvbGZzc2xfY2lwaGVyX251bGwsCisgICAgd29sZnNzbF9yYzQsCisgICAgd29sZnNzbF9yYzIsCisgICAgd29sZnNzbF9kZXMsCisgICAgd29sZnNzbF90cmlwbGVfZGVzLCAgICAgICAgICAgICAvKiBsZWFkaW5nIDMgKDNkZXMpIG5vdCB2YWxpZCBpZGVudGlmaWVyICovCisgICAgd29sZnNzbF9kZXM0MCwKKyNpZmRlZiBIQVZFX0lERUEKKyAgICB3b2xmc3NsX2lkZWEsCisjZW5kaWYKKyAgICB3b2xmc3NsX2FlcywKKyAgICB3b2xmc3NsX2Flc19nY20sCisgICAgd29sZnNzbF9hZXNfY2NtLAorICAgIHdvbGZzc2xfY2hhY2hhLAorICAgIHdvbGZzc2xfY2FtZWxsaWEsCisgICAgd29sZnNzbF9oYzEyOCwgICAgICAgICAgICAgICAgICAvKiB3b2xmU1NMIGV4dGVuc2lvbnMgKi8KKyAgICB3b2xmc3NsX3JhYmJpdAorfTsKKworCisvKiBmb3IgS0RGIFRMUyAxLjIgbWFjIHR5cGVzICovCitlbnVtIEtERl9NYWNBbGdvcml0aG0geworICAgIHdvbGZzc2xfc2hhMjU2ID0gNCwgICAgIC8qIG5lZWRzIHRvIG1hdGNoIGhhc2guaCB3Y19NQUNBbGdvcml0aG0gKi8KKyAgICB3b2xmc3NsX3NoYTM4NCwKKyAgICB3b2xmc3NsX3NoYTUxMgorfTsKKworCisvKiBQdWJsaWMgS2V5IENhbGxiYWNrIHN1cHBvcnQgKi8KKyNpZmRlZiBIQVZFX1BLX0NBTExCQUNLUworI2lmZGVmIEhBVkVfRUNDCisKK3N0cnVjdCBlY2Nfa2V5OworCit0eXBlZGVmIGludCAoKkNhbGxiYWNrRWNjS2V5R2VuKShXT0xGU1NMKiBzc2wsIHN0cnVjdCBlY2Nfa2V5KiBrZXksCisgICAgdW5zaWduZWQgaW50IGtleVN6LCBpbnQgZWNjX2N1cnZlLCB2b2lkKiBjdHgpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9DVFhfU2V0RWNjS2V5R2VuQ2IoV09MRlNTTF9DVFgqLCBDYWxsYmFja0VjY0tleUdlbik7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX1NldEVjY0tleUdlbkN0eChXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX0dldEVjY0tleUdlbkN0eChXT0xGU1NMKiBzc2wpOworCit0eXBlZGVmIGludCAoKkNhbGxiYWNrRWNjU2lnbikoV09MRlNTTCogc3NsLAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluLCB1bnNpZ25lZCBpbnQgaW5TeiwKKyAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXQsIHdvcmQzMiogb3V0U3osCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioga2V5RGVyLCB1bnNpZ25lZCBpbnQga2V5U3osCisgICAgICAgdm9pZCogY3R4KTsKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldEVjY1NpZ25DYihXT0xGU1NMX0NUWCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsYmFja0VjY1NpZ24pOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9TZXRFY2NTaWduQ3R4KFdPTEZTU0wqIHNzbCwgdm9pZCAqY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfR2V0RWNjU2lnbkN0eChXT0xGU1NMKiBzc2wpOworCit0eXBlZGVmIGludCAoKkNhbGxiYWNrRWNjVmVyaWZ5KShXT0xGU1NMKiBzc2wsCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogc2lnLCB1bnNpZ25lZCBpbnQgc2lnU3osCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogaGFzaCwgdW5zaWduZWQgaW50IGhhc2hTeiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXlEZXIsIHVuc2lnbmVkIGludCBrZXlTeiwKKyAgICAgICBpbnQqIHJlc3VsdCwgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldEVjY1ZlcmlmeUNiKFdPTEZTU0xfQ1RYKiwgQ2FsbGJhY2tFY2NWZXJpZnkpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9TZXRFY2NWZXJpZnlDdHgoV09MRlNTTCogc3NsLCB2b2lkICpjdHgpOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9HZXRFY2NWZXJpZnlDdHgoV09MRlNTTCogc3NsKTsKKwordHlwZWRlZiBpbnQgKCpDYWxsYmFja0VjY1NoYXJlZFNlY3JldCkoV09MRlNTTCogc3NsLCBzdHJ1Y3QgZWNjX2tleSogb3RoZXJLZXksCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIHB1YktleURlciwgd29yZDMyKiBwdWJLZXlTeiwKKyAgICAgICAgdW5zaWduZWQgY2hhciogb3V0LCB3b3JkMzIqIG91dGxlbiwKKyAgICAgICAgaW50IHNpZGUsIHZvaWQqIGN0eCk7IC8qIHNpZGUgaXMgV09MRlNTTF9DTElFTlRfRU5EIG9yIFdPTEZTU0xfU0VSVkVSX0VORCAqLworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9DVFhfU2V0RWNjU2hhcmVkU2VjcmV0Q2IoV09MRlNTTF9DVFgqLCBDYWxsYmFja0VjY1NoYXJlZFNlY3JldCk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX1NldEVjY1NoYXJlZFNlY3JldEN0eChXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX0dldEVjY1NoYXJlZFNlY3JldEN0eChXT0xGU1NMKiBzc2wpOworI2VuZGlmCisKKyNpZm5kZWYgTk9fREgKKy8qIFB1YmxpYyBESCBLZXkgQ2FsbGJhY2sgc3VwcG9ydCAqLworc3RydWN0IERoS2V5OwordHlwZWRlZiBpbnQgKCpDYWxsYmFja0RoQWdyZWUpKFdPTEZTU0wqIHNzbCwgc3RydWN0IERoS2V5KiBrZXksCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHByaXYsIHVuc2lnbmVkIGludCBwcml2U3osCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG90aGVyUHViS2V5RGVyLCB1bnNpZ25lZCBpbnQgb3RoZXJQdWJLZXlTeiwKKyAgICAgICAgdW5zaWduZWQgY2hhciogb3V0LCB3b3JkMzIqIG91dGxlbiwKKyAgICAgICAgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldERoQWdyZWVDYihXT0xGU1NMX0NUWCosIENhbGxiYWNrRGhBZ3JlZSk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX1NldERoQWdyZWVDdHgoV09MRlNTTCogc3NsLCB2b2lkICpjdHgpOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9HZXREaEFncmVlQ3R4KFdPTEZTU0wqIHNzbCk7CisjZW5kaWYgLyogIU5PX0RIICovCisKKyNpZmRlZiBIQVZFX0VEMjU1MTkKK3N0cnVjdCBlZDI1NTE5X2tleTsKK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tFZDI1NTE5U2lnbikoV09MRlNTTCogc3NsLAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluLCB1bnNpZ25lZCBpbnQgaW5TeiwKKyAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXQsIHVuc2lnbmVkIGludCogb3V0U3osCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioga2V5RGVyLCB1bnNpZ25lZCBpbnQga2V5U3osCisgICAgICAgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldEVkMjU1MTlTaWduQ2IoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsYmFja0VkMjU1MTlTaWduKTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfU2V0RWQyNTUxOVNpZ25DdHgoV09MRlNTTCogc3NsLCB2b2lkICpjdHgpOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9HZXRFZDI1NTE5U2lnbkN0eChXT0xGU1NMKiBzc2wpOworCit0eXBlZGVmIGludCAoKkNhbGxiYWNrRWQyNTUxOVZlcmlmeSkoV09MRlNTTCogc3NsLAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNpZywgdW5zaWduZWQgaW50IHNpZ1N6LAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgdW5zaWduZWQgaW50IG1zZ1N6LAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGtleURlciwgdW5zaWduZWQgaW50IGtleVN6LAorICAgICAgIGludCogcmVzdWx0LCB2b2lkKiBjdHgpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9DVFhfU2V0RWQyNTUxOVZlcmlmeUNiKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsYmFja0VkMjU1MTlWZXJpZnkpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9TZXRFZDI1NTE5VmVyaWZ5Q3R4KFdPTEZTU0wqIHNzbCwgdm9pZCAqY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfR2V0RWQyNTUxOVZlcmlmeUN0eChXT0xGU1NMKiBzc2wpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0NVUlZFMjU1MTkKK3N0cnVjdCBjdXJ2ZTI1NTE5X2tleTsKKwordHlwZWRlZiBpbnQgKCpDYWxsYmFja1gyNTUxOUtleUdlbikoV09MRlNTTCogc3NsLCBzdHJ1Y3QgY3VydmUyNTUxOV9rZXkqIGtleSwKKyAgICB1bnNpZ25lZCBpbnQga2V5U3osIHZvaWQqIGN0eCk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0NUWF9TZXRYMjU1MTlLZXlHZW5DYihXT0xGU1NMX0NUWCosIENhbGxiYWNrWDI1NTE5S2V5R2VuKTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfU2V0WDI1NTE5S2V5R2VuQ3R4KFdPTEZTU0wqIHNzbCwgdm9pZCAqY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfR2V0WDI1NTE5S2V5R2VuQ3R4KFdPTEZTU0wqIHNzbCk7CisKK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tYMjU1MTlTaGFyZWRTZWNyZXQpKFdPTEZTU0wqIHNzbCwKKyAgICAgICAgc3RydWN0IGN1cnZlMjU1MTlfa2V5KiBvdGhlcktleSwKKyAgICAgICAgdW5zaWduZWQgY2hhciogcHViS2V5RGVyLCB1bnNpZ25lZCBpbnQqIHB1YktleVN6LAorICAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXQsIHVuc2lnbmVkIGludCogb3V0bGVuLAorICAgICAgICBpbnQgc2lkZSwgdm9pZCogY3R4KTsKKyAgICAgICAgLyogc2lkZSBpcyBXT0xGU1NMX0NMSUVOVF9FTkQgb3IgV09MRlNTTF9TRVJWRVJfRU5EICovCitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0NUWF9TZXRYMjU1MTlTaGFyZWRTZWNyZXRDYihXT0xGU1NMX0NUWCosCisgICAgICAgIENhbGxiYWNrWDI1NTE5U2hhcmVkU2VjcmV0KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfU2V0WDI1NTE5U2hhcmVkU2VjcmV0Q3R4KFdPTEZTU0wqIHNzbCwgdm9pZCAqY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfR2V0WDI1NTE5U2hhcmVkU2VjcmV0Q3R4KFdPTEZTU0wqIHNzbCk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfRUQ0NDgKK3N0cnVjdCBlZDQ0OF9rZXk7Cit0eXBlZGVmIGludCAoKkNhbGxiYWNrRWQ0NDhTaWduKShXT0xGU1NMKiBzc2wsCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogaW4sIHVuc2lnbmVkIGludCBpblN6LAorICAgICAgIHVuc2lnbmVkIGNoYXIqIG91dCwgdW5zaWduZWQgaW50KiBvdXRTeiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXlEZXIsIHVuc2lnbmVkIGludCBrZXlTeiwKKyAgICAgICB2b2lkKiBjdHgpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9DVFhfU2V0RWQ0NDhTaWduQ2IoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsYmFja0VkNDQ4U2lnbik7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX1NldEVkNDQ4U2lnbkN0eChXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX0dldEVkNDQ4U2lnbkN0eChXT0xGU1NMKiBzc2wpOworCit0eXBlZGVmIGludCAoKkNhbGxiYWNrRWQ0NDhWZXJpZnkpKFdPTEZTU0wqIHNzbCwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzaWcsIHVuc2lnbmVkIGludCBzaWdTeiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHVuc2lnbmVkIGludCBtc2dTeiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXlEZXIsIHVuc2lnbmVkIGludCBrZXlTeiwKKyAgICAgICBpbnQqIHJlc3VsdCwgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldEVkNDQ4VmVyaWZ5Q2IoV09MRlNTTF9DVFgqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrRWQ0NDhWZXJpZnkpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9TZXRFZDQ0OFZlcmlmeUN0eChXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX0dldEVkNDQ4VmVyaWZ5Q3R4KFdPTEZTU0wqIHNzbCk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQ1VSVkU0NDgKK3N0cnVjdCBjdXJ2ZTQ0OF9rZXk7CisKK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tYNDQ4S2V5R2VuKShXT0xGU1NMKiBzc2wsIHN0cnVjdCBjdXJ2ZTQ0OF9rZXkqIGtleSwKKyAgICB1bnNpZ25lZCBpbnQga2V5U3osIHZvaWQqIGN0eCk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0NUWF9TZXRYNDQ4S2V5R2VuQ2IoV09MRlNTTF9DVFgqLCBDYWxsYmFja1g0NDhLZXlHZW4pOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9TZXRYNDQ4S2V5R2VuQ3R4KFdPTEZTU0wqIHNzbCwgdm9pZCAqY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfR2V0WDQ0OEtleUdlbkN0eChXT0xGU1NMKiBzc2wpOworCit0eXBlZGVmIGludCAoKkNhbGxiYWNrWDQ0OFNoYXJlZFNlY3JldCkoV09MRlNTTCogc3NsLAorICAgICAgICBzdHJ1Y3QgY3VydmU0NDhfa2V5KiBvdGhlcktleSwKKyAgICAgICAgdW5zaWduZWQgY2hhciogcHViS2V5RGVyLCB1bnNpZ25lZCBpbnQqIHB1YktleVN6LAorICAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXQsIHVuc2lnbmVkIGludCogb3V0bGVuLAorICAgICAgICBpbnQgc2lkZSwgdm9pZCogY3R4KTsKKyAgICAgICAgLyogc2lkZSBpcyBXT0xGU1NMX0NMSUVOVF9FTkQgb3IgV09MRlNTTF9TRVJWRVJfRU5EICovCitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0NUWF9TZXRYNDQ4U2hhcmVkU2VjcmV0Q2IoV09MRlNTTF9DVFgqLAorICAgICAgICBDYWxsYmFja1g0NDhTaGFyZWRTZWNyZXQpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9TZXRYNDQ4U2hhcmVkU2VjcmV0Q3R4KFdPTEZTU0wqIHNzbCwgdm9pZCAqY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfR2V0WDQ0OFNoYXJlZFNlY3JldEN0eChXT0xGU1NMKiBzc2wpOworI2VuZGlmCisKKyNpZm5kZWYgTk9fUlNBCit0eXBlZGVmIGludCAoKkNhbGxiYWNrUnNhU2lnbikoV09MRlNTTCogc3NsLAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluLCB1bnNpZ25lZCBpbnQgaW5TeiwKKyAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXQsIHdvcmQzMiogb3V0U3osCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioga2V5RGVyLCB1bnNpZ25lZCBpbnQga2V5U3osCisgICAgICAgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldFJzYVNpZ25DYihXT0xGU1NMX0NUWCosIENhbGxiYWNrUnNhU2lnbik7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX1NldFJzYVNpZ25DdHgoV09MRlNTTCogc3NsLCB2b2lkICpjdHgpOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9HZXRSc2FTaWduQ3R4KFdPTEZTU0wqIHNzbCk7CisKK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tSc2FWZXJpZnkpKFdPTEZTU0wqIHNzbCwKKyAgICAgICB1bnNpZ25lZCBjaGFyKiBzaWcsIHVuc2lnbmVkIGludCBzaWdTeiwKKyAgICAgICB1bnNpZ25lZCBjaGFyKiogb3V0LAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGtleURlciwgdW5zaWduZWQgaW50IGtleVN6LAorICAgICAgIHZvaWQqIGN0eCk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0NUWF9TZXRSc2FWZXJpZnlDYihXT0xGU1NMX0NUWCosIENhbGxiYWNrUnNhVmVyaWZ5KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldFJzYVNpZ25DaGVja0NiKFdPTEZTU0xfQ1RYKiwgQ2FsbGJhY2tSc2FWZXJpZnkpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9TZXRSc2FWZXJpZnlDdHgoV09MRlNTTCogc3NsLCB2b2lkICpjdHgpOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9HZXRSc2FWZXJpZnlDdHgoV09MRlNTTCogc3NsKTsKKworI2lmZGVmIFdDX1JTQV9QU1MKK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tSc2FQc3NTaWduKShXT0xGU1NMKiBzc2wsCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogaW4sIHVuc2lnbmVkIGludCBpblN6LAorICAgICAgIHVuc2lnbmVkIGNoYXIqIG91dCwgdW5zaWduZWQgaW50KiBvdXRTeiwKKyAgICAgICBpbnQgaGFzaCwgaW50IG1nZiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXlEZXIsIHVuc2lnbmVkIGludCBrZXlTeiwKKyAgICAgICB2b2lkKiBjdHgpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9DVFhfU2V0UnNhUHNzU2lnbkNiKFdPTEZTU0xfQ1RYKiwgQ2FsbGJhY2tSc2FQc3NTaWduKTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfU2V0UnNhUHNzU2lnbkN0eChXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX0dldFJzYVBzc1NpZ25DdHgoV09MRlNTTCogc3NsKTsKKwordHlwZWRlZiBpbnQgKCpDYWxsYmFja1JzYVBzc1ZlcmlmeSkoV09MRlNTTCogc3NsLAorICAgICAgIHVuc2lnbmVkIGNoYXIqIHNpZywgdW5zaWduZWQgaW50IHNpZ1N6LAorICAgICAgIHVuc2lnbmVkIGNoYXIqKiBvdXQsCisgICAgICAgaW50IGhhc2gsIGludCBtZ2YsCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioga2V5RGVyLCB1bnNpZ25lZCBpbnQga2V5U3osCisgICAgICAgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldFJzYVBzc1ZlcmlmeUNiKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrUnNhUHNzVmVyaWZ5KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldFJzYVBzc1NpZ25DaGVja0NiKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsYmFja1JzYVBzc1ZlcmlmeSk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX1NldFJzYVBzc1ZlcmlmeUN0eChXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX0dldFJzYVBzc1ZlcmlmeUN0eChXT0xGU1NMKiBzc2wpOworI2VuZGlmCisKKy8qIFJTQSBQdWJsaWMgRW5jcnlwdCBjYiAqLwordHlwZWRlZiBpbnQgKCpDYWxsYmFja1JzYUVuYykoV09MRlNTTCogc3NsLAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluLCB1bnNpZ25lZCBpbnQgaW5TeiwKKyAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXQsIHdvcmQzMiogb3V0U3osCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioga2V5RGVyLCB1bnNpZ25lZCBpbnQga2V5U3osCisgICAgICAgdm9pZCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldFJzYUVuY0NiKFdPTEZTU0xfQ1RYKiwgQ2FsbGJhY2tSc2FFbmMpOworV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9TZXRSc2FFbmNDdHgoV09MRlNTTCogc3NsLCB2b2lkICpjdHgpOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9HZXRSc2FFbmNDdHgoV09MRlNTTCogc3NsKTsKKworLyogUlNBIFByaXZhdGUgRGVjcnlwdCBjYiAqLwordHlwZWRlZiBpbnQgKCpDYWxsYmFja1JzYURlYykoV09MRlNTTCogc3NsLAorICAgICAgIHVuc2lnbmVkIGNoYXIqIGluLCB1bnNpZ25lZCBpbnQgaW5TeiwKKyAgICAgICB1bnNpZ25lZCBjaGFyKiogb3V0LAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGtleURlciwgdW5zaWduZWQgaW50IGtleVN6LAorICAgICAgIHZvaWQqIGN0eCk7CitXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0NUWF9TZXRSc2FEZWNDYihXT0xGU1NMX0NUWCosIENhbGxiYWNrUnNhRGVjKTsKK1dPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfU2V0UnNhRGVjQ3R4KFdPTEZTU0wqIHNzbCwgdm9pZCAqY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfR2V0UnNhRGVjQ3R4KFdPTEZTU0wqIHNzbCk7CisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1BLX0NBTExCQUNLUyAqLworCisjaWZuZGVmIE5PX0NFUlRTCisgICAgV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0NUWF9TZXRDQUNiKFdPTEZTU0xfQ1RYKiwgQ2FsbGJhY2tDQUNhY2hlKTsKKworICAgIFdPTEZTU0xfQVBJIFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiB3b2xmU1NMX0NUWF9HZXRDZXJ0TWFuYWdlcihXT0xGU1NMX0NUWCopOworCisgICAgV09MRlNTTF9BUEkgV09MRlNTTF9DRVJUX01BTkFHRVIqIHdvbGZTU0xfQ2VydE1hbmFnZXJOZXdfZXgodm9pZCogaGVhcCk7CisgICAgV09MRlNTTF9BUEkgV09MRlNTTF9DRVJUX01BTkFHRVIqIHdvbGZTU0xfQ2VydE1hbmFnZXJOZXcodm9pZCk7CisgICAgV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0NlcnRNYW5hZ2VyRnJlZShXT0xGU1NMX0NFUlRfTUFOQUdFUiopOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NlcnRNYW5hZ2VyX3VwX3JlZihXT0xGU1NMX0NFUlRfTUFOQUdFUiopOworCisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ2VydE1hbmFnZXJMb2FkQ0EoV09MRlNTTF9DRVJUX01BTkFHRVIqLCBjb25zdCBjaGFyKiBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DZXJ0TWFuYWdlckxvYWRDQUJ1ZmZlcihXT0xGU1NMX0NFUlRfTUFOQUdFUiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogaW4sIGxvbmcgc3osIGludCBmb3JtYXQpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NlcnRNYW5hZ2VyVW5sb2FkQ0FzKFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiBjbSk7CisjaWZkZWYgV09MRlNTTF9UUlVTVF9QRUVSX0NFUlQKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DZXJ0TWFuYWdlclVubG9hZF90cnVzdF9wZWVycyhXT0xGU1NMX0NFUlRfTUFOQUdFUiogY20pOworI2VuZGlmCisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ2VydE1hbmFnZXJWZXJpZnkoV09MRlNTTF9DRVJUX01BTkFHRVIqLCBjb25zdCBjaGFyKiBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9ybWF0KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DZXJ0TWFuYWdlclZlcmlmeUJ1ZmZlcihXT0xGU1NMX0NFUlRfTUFOQUdFUiogY20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZmYsIGxvbmcgc3osIGludCBmb3JtYXQpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NlcnRNYW5hZ2VyQ2hlY2tDUkwoV09MRlNTTF9DRVJUX01BTkFHRVIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiwgaW50IHN6KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DZXJ0TWFuYWdlckVuYWJsZUNSTChXT0xGU1NMX0NFUlRfTUFOQUdFUiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbnMpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NlcnRNYW5hZ2VyRGlzYWJsZUNSTChXT0xGU1NMX0NFUlRfTUFOQUdFUiopOworICAgIFdPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DZXJ0TWFuYWdlclNldFZlcmlmeShXT0xGU1NMX0NFUlRfTUFOQUdFUiogY20sCisgICAgICAgICAgICBWZXJpZnlDYWxsYmFjayB2Yyk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ2VydE1hbmFnZXJMb2FkQ1JMKFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqLCBpbnQsIGludCk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ2VydE1hbmFnZXJMb2FkQ1JMQnVmZmVyKFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciosIGxvbmcgc3osIGludCk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ2VydE1hbmFnZXJTZXRDUkxfQ2IoV09MRlNTTF9DRVJUX01BTkFHRVIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2JNaXNzaW5nQ1JMKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DZXJ0TWFuYWdlckZyZWVDUkwoV09MRlNTTF9DRVJUX01BTkFHRVIgKik7CisjaWZkZWYgSEFWRV9DUkxfSU8KKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DZXJ0TWFuYWdlclNldENSTF9JT0NiKFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2JDcmxJTyk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfT0NTUCkKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DZXJ0TWFuYWdlckNoZWNrT0NTUFJlc3BvbnNlKFdPTEZTU0xfQ0VSVF9NQU5BR0VSICosCisgICAgICAgIGJ5dGUgKnJlc3BvbnNlLCBpbnQgcmVzcG9uc2VTeiwgV09MRlNTTF9CVUZGRVJfSU5GTyAqcmVzcG9uc2VCdWZmZXIsCisgICAgICAgIENlcnRTdGF0dXMgKnN0YXR1cywgT2NzcEVudHJ5ICplbnRyeSwgT2NzcFJlcXVlc3QgKm9jc3BSZXF1ZXN0KTsKKyNlbmRpZgorICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NlcnRNYW5hZ2VyQ2hlY2tPQ1NQKFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciosIGludCBzeik7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ2VydE1hbmFnZXJFbmFibGVPQ1NQKFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9ucyk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ2VydE1hbmFnZXJEaXNhYmxlT0NTUChXT0xGU1NMX0NFUlRfTUFOQUdFUiopOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NlcnRNYW5hZ2VyU2V0T0NTUE92ZXJyaWRlVVJMKFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKik7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ2VydE1hbmFnZXJTZXRPQ1NQX0NiKFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2JPQ1NQSU8sIENiT0NTUFJlc3BGcmVlLCB2b2lkKik7CisKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DZXJ0TWFuYWdlckVuYWJsZU9DU1BTdGFwbGluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiBjbSk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ2VydE1hbmFnZXJEaXNhYmxlT0NTUFN0YXBsaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9DRVJUX01BTkFHRVIqIGNtKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DZXJ0TWFuYWdlckVuYWJsZU9DU1BNdXN0U3RhcGxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9DRVJUX01BTkFHRVIqIGNtKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DZXJ0TWFuYWdlckRpc2FibGVPQ1NQTXVzdFN0YXBsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQ0VSVF9NQU5BR0VSKiBjbSk7CisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSAmJiBkZWZpbmVkKFdPTEZTU0xfU0lHTkVSX0RFUl9DRVJUKSAmJiBcCisgICAgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkKK1dPTEZTU0xfQVBJIFdPTEZTU0xfU1RBQ0sqIHdvbGZTU0xfQ2VydE1hbmFnZXJHZXRDZXJ0cyhXT0xGU1NMX0NFUlRfTUFOQUdFUiogY20pOworV09MRlNTTF9BUEkgV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDkpKiB3b2xmU1NMX1g1MDlfU1RPUkVfZ2V0MV9jZXJ0cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYKiwgV09MRlNTTF9YNTA5X05BTUUqKTsKKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBICYmIFdPTEZTU0xfU0lHTkVSX0RFUl9DRVJUICYmICFOT19GSUxFU1lTVEVNICovCisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRW5hYmxlQ1JMKFdPTEZTU0wqIHNzbCwgaW50IG9wdGlvbnMpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0Rpc2FibGVDUkwoV09MRlNTTCogc3NsKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9Mb2FkQ1JMKFdPTEZTU0wqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0xvYWRDUkxCdWZmZXIoV09MRlNTTCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiwgbG9uZyBzeiwgaW50KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZXRDUkxfQ2IoV09MRlNTTCosIENiTWlzc2luZ0NSTCk7CisjaWZkZWYgSEFWRV9DUkxfSU8KKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZXRDUkxfSU9DYihXT0xGU1NMKiBzc2wsIENiQ3JsSU8gY2IpOworI2VuZGlmCisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRW5hYmxlT0NTUChXT0xGU1NMKiwgaW50IG9wdGlvbnMpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0Rpc2FibGVPQ1NQKFdPTEZTU0wqKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZXRPQ1NQX092ZXJyaWRlVVJMKFdPTEZTU0wqLCBjb25zdCBjaGFyKik7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU2V0T0NTUF9DYihXT0xGU1NMKiwgQ2JPQ1NQSU8sIENiT0NTUFJlc3BGcmVlLCB2b2lkKik7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRW5hYmxlT0NTUFN0YXBsaW5nKFdPTEZTU0wqKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9EaXNhYmxlT0NTUFN0YXBsaW5nKFdPTEZTU0wqKTsKKworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9FbmFibGVDUkwoV09MRlNTTF9DVFgqIGN0eCwgaW50IG9wdGlvbnMpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9EaXNhYmxlQ1JMKFdPTEZTU0xfQ1RYKiBjdHgpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9Mb2FkQ1JMKFdPTEZTU0xfQ1RYKiwgY29uc3QgY2hhciosIGludCwgaW50KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfTG9hZENSTEJ1ZmZlcihXT0xGU1NMX0NUWCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBsb25nIHN6LCBpbnQpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9TZXRDUkxfQ2IoV09MRlNTTF9DVFgqLCBDYk1pc3NpbmdDUkwpOworI2lmZGVmIEhBVkVfQ1JMX0lPCisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX1NldENSTF9JT0NiKFdPTEZTU0xfQ1RYKiwgQ2JDcmxJTyk7CisjZW5kaWYKKworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9FbmFibGVPQ1NQKFdPTEZTU0xfQ1RYKiwgaW50IG9wdGlvbnMpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9EaXNhYmxlT0NTUChXT0xGU1NMX0NUWCopOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9TZXRPQ1NQX092ZXJyaWRlVVJMKFdPTEZTU0xfQ1RYKiwgY29uc3QgY2hhciopOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9TZXRPQ1NQX0NiKFdPTEZTU0xfQ1RYKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2JPQ1NQSU8sIENiT0NTUFJlc3BGcmVlLCB2b2lkKik7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX0VuYWJsZU9DU1BTdGFwbGluZyhXT0xGU1NMX0NUWCopOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9EaXNhYmxlT0NTUFN0YXBsaW5nKFdPTEZTU0xfQ1RYKik7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX0VuYWJsZU9DU1BNdXN0U3RhcGxlKFdPTEZTU0xfQ1RYKik7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX0Rpc2FibGVPQ1NQTXVzdFN0YXBsZShXT0xGU1NMX0NUWCopOworI2VuZGlmIC8qICFOT19DRVJUUyAqLworCisKKyNpZmRlZiBTSU5HTEVfVEhSRUFERUQKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfbmV3X3JuZyhXT0xGU1NMX0NUWCopOworI2VuZGlmCisKKy8qIGVuZCBvZiBoYW5kc2hha2UgZnJlZXMgdGVtcG9yYXJ5IGFycmF5cywgaWYgdXNlciBuZWVkcyBmb3IgZ2V0X2tleXMgb3IKKyAgIHBzayBoaW50cywgY2FsbCBLZWVwQXJyYXlzIGJlZm9yZSBoYW5kc2hha2UgYW5kIHRoZW4gRnJlZUFycmF5cyB3aGVuIGRvbmUKKyAgIGlmIGRvbid0IHdhbnQgdG8gd2FpdCBmb3Igb2JqZWN0IGZyZWUgKi8KK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9LZWVwQXJyYXlzKFdPTEZTU0wqKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9GcmVlQXJyYXlzKFdPTEZTU0wqKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfS2VlcEhhbmRzaGFrZVJlc291cmNlcyhXT0xGU1NMKiBzc2wpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfRnJlZUhhbmRzaGFrZVJlc291cmNlcyhXT0xGU1NMKiBzc2wpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfVXNlQ2xpZW50U3VpdGVzKFdPTEZTU0xfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfVXNlQ2xpZW50U3VpdGVzKFdPTEZTU0wqIHNzbCk7CisKKy8qIGFzeW5jIGFkZGl0aW9ucyAqLworI2RlZmluZSB3b2xmU1NMX1VzZUFzeW5jIHdvbGZTU0xfU2V0RGV2SWQKKyNkZWZpbmUgd29sZlNTTF9DVFhfVXNlQXN5bmMgd29sZlNTTF9DVFhfU2V0RGV2SWQKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NldERldklkKFdPTEZTU0wqLCBpbnQgZGV2SWQpOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX1NldERldklkKFdPTEZTU0xfQ1RYKiwgaW50IGRldklkKTsKKworLyogaGVscGVycyB0byBnZXQgZGV2aWNlIGlkIGFuZCBoZWFwICovCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfR2V0RGV2SWQoV09MRlNTTF9DVFgqLCBXT0xGU1NMKik7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX0NUWF9HZXRIZWFwKFdPTEZTU0xfQ1RYKiBjdHgsIFdPTEZTU0wqIHNzbCk7CisKKy8qIFRMUyBFeHRlbnNpb25zICovCisKKy8qIFNlcnZlciBOYW1lIEluZGljYXRpb24gKi8KKyNpZmRlZiBIQVZFX1NOSQorCisvKiBTTkkgdHlwZXMgKi8KK2VudW0geworICAgIFdPTEZTU0xfU05JX0hPU1RfTkFNRSA9IDAKK307CisKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX1VzZVNOSShXT0xGU1NMKiwgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCBzaG9ydCk7CitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfVXNlU05JKFdPTEZTU0xfQ1RYKiwgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCBzaG9ydCk7CisKKyNpZm5kZWYgTk9fV09MRlNTTF9TRVJWRVIKKworLyogU05JIG9wdGlvbnMgKi8KK2VudW0geworICAgIC8qIERvIG5vdCBhYm9ydCB0aGUgaGFuZHNoYWtlIGlmIHRoZSByZXF1ZXN0ZWQgU05JIGRpZG4ndCBtYXRjaC4gKi8KKyAgICBXT0xGU1NMX1NOSV9DT05USU5VRV9PTl9NSVNNQVRDSCA9IDB4MDEsCisKKyAgICAvKiBCZWhhdmUgYXMgaWYgdGhlIHJlcXVlc3RlZCBTTkkgbWF0Y2hlZCBpbiBhIGNhc2Ugb2YgbWlzbWF0Y2guICAqLworICAgIC8qIEluIHRoaXMgY2FzZSwgdGhlIHN0YXR1cyB3aWxsIGJlIHNldCB0byBXT0xGU1NMX1NOSV9GQUtFX01BVENILiAqLworICAgIFdPTEZTU0xfU05JX0FOU1dFUl9PTl9NSVNNQVRDSCAgID0gMHgwMiwKKworICAgIC8qIEFib3J0IHRoZSBoYW5kc2hha2UgaWYgdGhlIGNsaWVudCBkaWRuJ3Qgc2VuZCBhIFNOSSByZXF1ZXN0LiAqLworICAgIFdPTEZTU0xfU05JX0FCT1JUX09OX0FCU0VOQ0UgICAgID0gMHgwNCwKK307CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9TTklfU2V0T3B0aW9ucyhXT0xGU1NMKiBzc2wsIHVuc2lnbmVkIGNoYXIgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3B0aW9ucyk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX1NOSV9TZXRPcHRpb25zKFdPTEZTU0xfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0eXBlLCB1bnNpZ25lZCBjaGFyIG9wdGlvbnMpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU05JX0dldEZyb21CdWZmZXIoCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNsaWVudEhlbGxvLCB1bnNpZ25lZCBpbnQgaGVsbG9TeiwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0eXBlLCB1bnNpZ25lZCBjaGFyKiBzbmksIHVuc2lnbmVkIGludCogaW5PdXRTeik7CisKKyNlbmRpZiAvKiBOT19XT0xGU1NMX1NFUlZFUiAqLworCisvKiBTTkkgc3RhdHVzICovCitlbnVtIHsKKyAgICBXT0xGU1NMX1NOSV9OT19NQVRDSCAgID0gMCwKKyAgICBXT0xGU1NMX1NOSV9GQUtFX01BVENIID0gMSwgLyoqPCBAc2VlIFdPTEZTU0xfU05JX0FOU1dFUl9PTl9NSVNNQVRDSCAqLworICAgIFdPTEZTU0xfU05JX1JFQUxfTUFUQ0ggPSAyLAorICAgIFdPTEZTU0xfU05JX0ZPUkNFX0tFRVAgPSAzICAvKiogVXNlZCB3aXRoIC1EV09MRlNTTF9BTFdBWVNfS0VFUF9TTkkgKi8KK307CisKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGNoYXIgd29sZlNTTF9TTklfU3RhdHVzKFdPTEZTU0wqIHNzbCwgdW5zaWduZWQgY2hhciB0eXBlKTsKKworV09MRlNTTF9BUEkgdW5zaWduZWQgc2hvcnQgd29sZlNTTF9TTklfR2V0UmVxdWVzdChXT0xGU1NMICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZSwgdm9pZCoqIGRhdGEpOworCisjZW5kaWYgLyogSEFWRV9TTkkgKi8KKworLyogVHJ1c3RlZCBDQSBLZXkgSW5kaWNhdGlvbiAtIFJGQyA2MDY2IChTZWN0aW9uIDYpICovCisjaWZkZWYgSEFWRV9UUlVTVEVEX0NBCisKKy8qIFRDQSBJZGVudGlmaWVyIFR5cGUgKi8KK2VudW0geworICAgIFdPTEZTU0xfVFJVU1RFRF9DQV9QUkVfQUdSRUVEID0gMCwKKyAgICBXT0xGU1NMX1RSVVNURURfQ0FfS0VZX1NIQTEgPSAxLAorICAgIFdPTEZTU0xfVFJVU1RFRF9DQV9YNTA5X05BTUUgPSAyLAorICAgIFdPTEZTU0xfVFJVU1RFRF9DQV9DRVJUX1NIQTEgPSAzCit9OworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9Vc2VUcnVzdGVkQ0EoV09MRlNTTCogc3NsLCB1bnNpZ25lZCBjaGFyIHR5cGUsCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjZXJ0SWQsIHVuc2lnbmVkIGludCBjZXJ0SWRTeik7CisjZW5kaWYgLyogSEFWRV9UUlVTVEVEX0NBICovCisKKy8qIEFwcGxpY2F0aW9uLUxheWVyIFByb3RvY29sIE5lZ290aWF0aW9uICovCisjaWZkZWYgSEFWRV9BTFBOCisKKy8qIEFMUE4gc3RhdHVzIGNvZGUgKi8KK2VudW0geworICAgIFdPTEZTU0xfQUxQTl9OT19NQVRDSCA9IDAsCisgICAgV09MRlNTTF9BTFBOX01BVENIICAgID0gMSwKKyAgICBXT0xGU1NMX0FMUE5fQ09OVElOVUVfT05fTUlTTUFUQ0ggPSAyLAorICAgIFdPTEZTU0xfQUxQTl9GQUlMRURfT05fTUlTTUFUQ0ggPSA0LAorfTsKKworZW51bSB7CisgICAgV09MRlNTTF9NQVhfQUxQTl9QUk9UT19OQU1FX0xFTiA9IDI1NSwKKyAgICBXT0xGU1NMX01BWF9BTFBOX05VTUJFUiA9IDI1NworfTsKKworI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpIHx8IGRlZmluZWQoV09MRlNTTF9OR0lOWCkgfHwgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpIHx8IGRlZmluZWQoSEFWRV9MSUdIVFkpCit0eXBlZGVmIGludCAoKkNhbGxiYWNrQUxQTlNlbGVjdCkoV09MRlNTTCogc3NsLCBjb25zdCB1bnNpZ25lZCBjaGFyKiogb3V0LAorICAgIHVuc2lnbmVkIGNoYXIqIG91dExlbiwgY29uc3QgdW5zaWduZWQgY2hhciogaW4sIHVuc2lnbmVkIGludCBpbkxlbiwKKyAgICB2b2lkICphcmcpOworI2VuZGlmCisKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX1VzZUFMUE4oV09MRlNTTCogc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwcm90b2NvbF9uYW1lX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm90b2NvbF9uYW1lX2xpc3RTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvcHRpb25zKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQUxQTl9HZXRQcm90b2NvbChXT0xGU1NMKiBzc2wsIGNoYXIgKipwcm90b2NvbF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqc2l6ZSk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0FMUE5fR2V0UGVlclByb3RvY29sKFdPTEZTU0wqIHNzbCwgY2hhciAqKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqbGlzdFN6KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0FMUE5fRnJlZVBlZXJQcm90b2NvbChXT0xGU1NMKiBzc2wsIGNoYXIgKipsaXN0KTsKKyNlbmRpZiAvKiBIQVZFX0FMUE4gKi8KKworLyogTWF4aW11bSBGcmFnbWVudCBMZW5ndGggKi8KKyNpZmRlZiBIQVZFX01BWF9GUkFHTUVOVAorCisvKiBGcmFnbWVudCBsZW5ndGhzICovCitlbnVtIHsKKyAgICBXT0xGU1NMX01GTF8yXzkgID0gMSwgLyogIDUxMiBieXRlcyAqLworICAgIFdPTEZTU0xfTUZMXzJfMTAgPSAyLCAvKiAxMDI0IGJ5dGVzICovCisgICAgV09MRlNTTF9NRkxfMl8xMSA9IDMsIC8qIDIwNDggYnl0ZXMgKi8KKyAgICBXT0xGU1NMX01GTF8yXzEyID0gNCwgLyogNDA5NiBieXRlcyAqLworICAgIFdPTEZTU0xfTUZMXzJfMTMgPSA1LCAvKiA4MTkyIGJ5dGVzICovLyogd29sZlNTTCBPTkxZISEhICovCisgICAgV09MRlNTTF9NRkxfMl84ICA9IDYsIC8qICAyNTYgYnl0ZXMgKi8vKiB3b2xmU1NMIE9OTFkhISEgKi8KKyAgICBXT0xGU1NMX01GTF9NSU4gID0gV09MRlNTTF9NRkxfMl85LAorICAgIFdPTEZTU0xfTUZMX01BWCAgPSBXT0xGU1NMX01GTF8yXzgsCit9OworCisjaWZuZGVmIE5PX1dPTEZTU0xfQ0xJRU5UCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1VzZU1heEZyYWdtZW50KFdPTEZTU0wqIHNzbCwgdW5zaWduZWQgY2hhciBtZmwpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX1VzZU1heEZyYWdtZW50KFdPTEZTU0xfQ1RYKiBjdHgsIHVuc2lnbmVkIGNoYXIgbWZsKTsKKworI2VuZGlmCisjZW5kaWYgLyogSEFWRV9NQVhfRlJBR01FTlQgKi8KKworLyogVHJ1bmNhdGVkIEhNQUMgKi8KKyNpZmRlZiBIQVZFX1RSVU5DQVRFRF9ITUFDCisjaWZuZGVmIE5PX1dPTEZTU0xfQ0xJRU5UCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1VzZVRydW5jYXRlZEhNQUMoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9Vc2VUcnVuY2F0ZWRITUFDKFdPTEZTU0xfQ1RYKiBjdHgpOworCisjZW5kaWYKKyNlbmRpZgorCisvKiBDZXJ0aWZpY2F0ZSBTdGF0dXMgUmVxdWVzdCAqLworLyogQ2VydGlmaWNhdGUgU3RhdHVzIFR5cGUgKi8KK2VudW0geworICAgIFdPTEZTU0xfQ1NSX09DU1AgPSAxCit9OworCisvKiBDZXJ0aWZpY2F0ZSBTdGF0dXMgT3B0aW9ucyAoZmxhZ3MpICovCitlbnVtIHsKKyAgICBXT0xGU1NMX0NTUl9PQ1NQX1VTRV9OT05DRSA9IDB4MDEKK307CisKKyNpZmRlZiBIQVZFX0NFUlRJRklDQVRFX1NUQVRVU19SRVFVRVNUCisjaWZuZGVmIE5PX1dPTEZTU0xfQ0xJRU5UCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1VzZU9DU1BTdGFwbGluZyhXT0xGU1NMKiBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHN0YXR1c190eXBlLCB1bnNpZ25lZCBjaGFyIG9wdGlvbnMpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfVXNlT0NTUFN0YXBsaW5nKFdPTEZTU0xfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHN0YXR1c190eXBlLCB1bnNpZ25lZCBjaGFyIG9wdGlvbnMpOworCisjZW5kaWYKKyNlbmRpZgorCisvKiBDZXJ0aWZpY2F0ZSBTdGF0dXMgUmVxdWVzdCB2MiAqLworLyogQ2VydGlmaWNhdGUgU3RhdHVzIFR5cGUgKi8KK2VudW0geworICAgIFdPTEZTU0xfQ1NSMl9PQ1NQID0gMSwKKyAgICBXT0xGU1NMX0NTUjJfT0NTUF9NVUxUSSA9IDIKK307CisKKy8qIENlcnRpZmljYXRlIFN0YXR1cyB2MiBPcHRpb25zIChmbGFncykgKi8KK2VudW0geworICAgIFdPTEZTU0xfQ1NSMl9PQ1NQX1VTRV9OT05DRSA9IDB4MDEKK307CisKKyNpZmRlZiBIQVZFX0NFUlRJRklDQVRFX1NUQVRVU19SRVFVRVNUX1YyCisjaWZuZGVmIE5PX1dPTEZTU0xfQ0xJRU5UCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1VzZU9DU1BTdGFwbGluZ1YyKFdPTEZTU0wqIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzX3R5cGUsIHVuc2lnbmVkIGNoYXIgb3B0aW9ucyk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9Vc2VPQ1NQU3RhcGxpbmdWMihXT0xGU1NMX0NUWCogY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBzdGF0dXNfdHlwZSwgdW5zaWduZWQgY2hhciBvcHRpb25zKTsKKworI2VuZGlmCisjZW5kaWYKKworLyogTmFtZWQgR3JvdXBzICovCitlbnVtIHsKKyNpZiAwIC8qIE5vdCBTdXBwb3J0ZWQgKi8KKyAgICBXT0xGU1NMX0VDQ19TRUNUMTYzSzEgPSAxLAorICAgIFdPTEZTU0xfRUNDX1NFQ1QxNjNSMSA9IDIsCisgICAgV09MRlNTTF9FQ0NfU0VDVDE2M1IyID0gMywKKyAgICBXT0xGU1NMX0VDQ19TRUNUMTkzUjEgPSA0LAorICAgIFdPTEZTU0xfRUNDX1NFQ1QxOTNSMiA9IDUsCisgICAgV09MRlNTTF9FQ0NfU0VDVDIzM0sxID0gNiwKKyAgICBXT0xGU1NMX0VDQ19TRUNUMjMzUjEgPSA3LAorICAgIFdPTEZTU0xfRUNDX1NFQ1QyMzlLMSA9IDgsCisgICAgV09MRlNTTF9FQ0NfU0VDVDI4M0sxID0gOSwKKyAgICBXT0xGU1NMX0VDQ19TRUNUMjgzUjEgPSAxMCwKKyAgICBXT0xGU1NMX0VDQ19TRUNUNDA5SzEgPSAxMSwKKyAgICBXT0xGU1NMX0VDQ19TRUNUNDA5UjEgPSAxMiwKKyAgICBXT0xGU1NMX0VDQ19TRUNUNTcxSzEgPSAxMywKKyAgICBXT0xGU1NMX0VDQ19TRUNUNTcxUjEgPSAxNCwKKyNlbmRpZgorICAgIFdPTEZTU0xfRUNDX1NFQ1AxNjBLMSA9IDE1LAorICAgIFdPTEZTU0xfRUNDX1NFQ1AxNjBSMSA9IDE2LAorICAgIFdPTEZTU0xfRUNDX1NFQ1AxNjBSMiA9IDE3LAorICAgIFdPTEZTU0xfRUNDX1NFQ1AxOTJLMSA9IDE4LAorICAgIFdPTEZTU0xfRUNDX1NFQ1AxOTJSMSA9IDE5LAorICAgIFdPTEZTU0xfRUNDX1NFQ1AyMjRLMSA9IDIwLAorICAgIFdPTEZTU0xfRUNDX1NFQ1AyMjRSMSA9IDIxLAorICAgIFdPTEZTU0xfRUNDX1NFQ1AyNTZLMSA9IDIyLAorICAgIFdPTEZTU0xfRUNDX1NFQ1AyNTZSMSA9IDIzLAorICAgIFdPTEZTU0xfRUNDX1NFQ1AzODRSMSA9IDI0LAorICAgIFdPTEZTU0xfRUNDX1NFQ1A1MjFSMSA9IDI1LAorICAgIFdPTEZTU0xfRUNDX0JSQUlOUE9PTFAyNTZSMSA9IDI2LAorICAgIFdPTEZTU0xfRUNDX0JSQUlOUE9PTFAzODRSMSA9IDI3LAorICAgIFdPTEZTU0xfRUNDX0JSQUlOUE9PTFA1MTJSMSA9IDI4LAorICAgIFdPTEZTU0xfRUNDX1gyNTUxOSAgICA9IDI5LAorICAgIFdPTEZTU0xfRUNDX1g0NDggICAgICA9IDMwLAorICAgIFdPTEZTU0xfRUNDX01BWCAgICAgICA9IDMwLAorCisgICAgV09MRlNTTF9GRkRIRV8yMDQ4ICAgID0gMjU2LAorICAgIFdPTEZTU0xfRkZESEVfMzA3MiAgICA9IDI1NywKKyAgICBXT0xGU1NMX0ZGREhFXzQwOTYgICAgPSAyNTgsCisgICAgV09MRlNTTF9GRkRIRV82MTQ0ICAgID0gMjU5LAorICAgIFdPTEZTU0xfRkZESEVfODE5MiAgICA9IDI2MCwKK307CisKK2VudW0geworICAgIFdPTEZTU0xfRUNfUEZfVU5DT01QUkVTU0VEID0gMCwKKyNpZiAwIC8qIE5vdCBTdXBwb3J0ZWQgKi8KKyAgICBXT0xGU1NMX0VDX1BGX1g5NjJfQ09NUF9QUklNRSA9IDEsCisgICAgV09MRlNTTF9FQ19QRl9YOTYyX0NPTVBfQ0hBUjIgPSAyLAorI2VuZGlmCit9OworCisjaWZkZWYgSEFWRV9TVVBQT1JURURfQ1VSVkVTCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9Vc2VTdXBwb3J0ZWRDdXJ2ZShXT0xGU1NMKiBzc2wsIHdvcmQxNiBuYW1lKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9Vc2VTdXBwb3J0ZWRDdXJ2ZShXT0xGU1NMX0NUWCogY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMTYgbmFtZSk7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfVExTMTMKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1VzZUtleVNoYXJlKFdPTEZTU0wqIHNzbCwgd29yZDE2IGdyb3VwKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX05vS2V5U2hhcmVzKFdPTEZTU0wqIHNzbCk7CisjZW5kaWYKKworCisvKiBTZWN1cmUgUmVuZWdvdGlhdGlvbiAqLworI2lmZGVmIEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04KKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfVXNlU2VjdXJlUmVuZWdvdGlhdGlvbihXT0xGU1NMKiBzc2wpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX1VzZVNlY3VyZVJlbmVnb3RpYXRpb24oV09MRlNTTF9DVFgqIGN0eCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TdGFydFNlY3VyZVJlbmVnb3RpYXRpb24oV09MRlNTTCogc3NsLCBpbnQgcmVzdW1lKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1JlaGFuZHNoYWtlKFdPTEZTU0wqIHNzbCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZWN1cmVSZXN1bWUoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9TU0xfZ2V0X3NlY3VyZV9yZW5lZ290aWF0aW9uX3N1cHBvcnQoV09MRlNTTCogc3NsKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VMRlRFU1QpICYmIFwKKyAgICAoIWRlZmluZWQoSEFWRV9TRUxGVEVTVF9WRVJTSU9OKSB8fCAoSEFWRV9TRUxGVEVTVF9WRVJTSU9OIDwgMikpCisKKyAgICAvKiBOZWVkZWQgYnkgc2Vzc2lvbiB0aWNrZXQgc3R1ZmYgYmVsb3cgKi8KKyAgICAjaWZuZGVmIFdPTEZTU0xfQUVTX0tFWV9TSVpFX0VOVU0KKyAgICAjZGVmaW5lIFdPTEZTU0xfQUVTX0tFWV9TSVpFX0VOVU0KKyAgICBlbnVtIFNTTF9NaXNjIHsKKyAgICAgICAgQUVTX0lWX1NJWkUgICAgICAgICA9IDE2LAorICAgICAgICBBRVNfMTI4X0tFWV9TSVpFICAgID0gMTYsCisgICAgICAgIEFFU18xOTJfS0VZX1NJWkUgICAgPSAyNCwKKyAgICAgICAgQUVTXzI1Nl9LRVlfU0laRSAgICA9IDMyCisgICAgfTsKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvKiBTZXNzaW9uIFRpY2tldCAqLworI2lmZGVmIEhBVkVfU0VTU0lPTl9USUNLRVQKKworI2lmICFkZWZpbmVkKFdPTEZTU0xfTk9fREVGX1RJQ0tFVF9FTkNfQ0IpICYmICFkZWZpbmVkKFdPTEZTU0xfTk9fU0VSVkVSKQorICAgICNpZiBkZWZpbmVkKEhBVkVfQ0hBQ0hBKSAmJiBkZWZpbmVkKEhBVkVfUE9MWTEzMDUpICYmIFwKKyAgICAgICAgIWRlZmluZWQoV09MRlNTTF9USUNLRVRfRU5DX0FFUzEyOF9HQ00pICYmIFwKKyAgICAgICAgIWRlZmluZWQoV09MRlNTTF9USUNLRVRfRU5DX0FFUzI1Nl9HQ00pCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9USUNLRVRfS0VZX1NaICAgICAgIENIQUNIQTIwX1BPTFkxMzA1X0FFQURfS0VZU0laRQorICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9USUNLRVRfRU5DX0FFUzI1Nl9HQ00pCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9USUNLRVRfS0VZX1NaICAgICAgIEFFU18yNTZfS0VZX1NJWkUKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfVElDS0VUX0tFWV9TWiAgICAgICBBRVNfMTI4X0tFWV9TSVpFCisgICAgI2VuZGlmCisKKyAgICAjZGVmaW5lIFdPTEZTU0xfVElDS0VUX0tFWVNfU1ogICAgIChXT0xGU1NMX1RJQ0tFVF9OQU1FX1NaICsgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKiBXT0xGU1NMX1RJQ0tFVF9LRVlfU1ogKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHdvcmQzMikgKiAyKQorI2VuZGlmCisKKyNpZm5kZWYgTk9fV09MRlNTTF9DTElFTlQKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1VzZVNlc3Npb25UaWNrZXQoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9Vc2VTZXNzaW9uVGlja2V0KFdPTEZTU0xfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfZ2V0X1Nlc3Npb25UaWNrZXQoV09MRlNTTCosIHVuc2lnbmVkIGNoYXIqLCB3b3JkMzIqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NldF9TZXNzaW9uVGlja2V0KFdPTEZTU0wqLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgd29yZDMyKTsKK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tTZXNzaW9uVGlja2V0KShXT0xGU1NMKiwgY29uc3QgdW5zaWduZWQgY2hhciosIGludCwgdm9pZCopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2V0X1Nlc3Npb25UaWNrZXRfY2IoV09MRlNTTCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrU2Vzc2lvblRpY2tldCwgdm9pZCopOworI2VuZGlmIC8qIE5PX1dPTEZTU0xfQ0xJRU5UICovCisKKworI2RlZmluZSBXT0xGU1NMX1RJQ0tFVF9OQU1FX1NaIDE2CisjZGVmaW5lIFdPTEZTU0xfVElDS0VUX0lWX1NaICAgMTYKKyNkZWZpbmUgV09MRlNTTF9USUNLRVRfTUFDX1NaICAzMgorCitlbnVtIFRpY2tldEVuY1JldCB7CisgICAgV09MRlNTTF9USUNLRVRfUkVUX0ZBVEFMICA9IC0xLCAgLyogZmF0YWwgZXJyb3IsIGRvbid0IHVzZSB0aWNrZXQgKi8KKyAgICBXT0xGU1NMX1RJQ0tFVF9SRVRfT0sgICAgID0gIDAsICAvKiBvaywgdXNlIHRpY2tldCAqLworICAgIFdPTEZTU0xfVElDS0VUX1JFVF9SRUpFQ1QsICAgICAgIC8qIGRvbid0IHVzZSB0aWNrZXQsIGJ1dCBub3QgZmF0YWwgKi8KKyAgICBXT0xGU1NMX1RJQ0tFVF9SRVRfQ1JFQVRFICAgICAgICAvKiBleGlzdGluZyB0aWNrZXQgb2sgYW5kIGNyZWF0ZSBuZXcgb25lICovCit9OworCisjaWZuZGVmIE5PX1dPTEZTU0xfU0VSVkVSCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9Ob1RpY2tldFRMU3YxMihXT0xGU1NMX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX05vVGlja2V0VExTdjEyKFdPTEZTU0wqIHNzbCk7CisKK3R5cGVkZWYgaW50ICgqU2Vzc2lvblRpY2tldEVuY0NiKShXT0xGU1NMKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5X25hbWVbV09MRlNTTF9USUNLRVRfTkFNRV9TWl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2W1dPTEZTU0xfVElDS0VUX0lWX1NaXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbWFjW1dPTEZTU0xfVElDS0VUX01BQ19TWl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5jLCB1bnNpZ25lZCBjaGFyKiwgaW50LCBpbnQqLCB2b2lkKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfc2V0X1RpY2tldEVuY0NiKFdPTEZTU0xfQ1RYKiBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlc3Npb25UaWNrZXRFbmNDYik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfc2V0X1RpY2tldEhpbnQoV09MRlNTTF9DVFgqIGN0eCwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9zZXRfVGlja2V0RW5jQ3R4KFdPTEZTU0xfQ1RYKiBjdHgsIHZvaWQqKTsKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfQ1RYX2dldF9UaWNrZXRFbmNDdHgoV09MRlNTTF9DVFgqIGN0eCk7CisKKyNlbmRpZiAvKiBOT19XT0xGU1NMX1NFUlZFUiAqLworCisjZW5kaWYgLyogSEFWRV9TRVNTSU9OX1RJQ0tFVCAqLworCisjaWZkZWYgSEFWRV9RU0gKKy8qIFF1YW50dW0tc2FmZSBDcnlwdG8gU2NoZW1lcyAqLworZW51bSB7CisgICAgV09MRlNTTF9OVFJVX0VFU1M0MzkgPSAweDAxMDEsIC8qIG1heCBwbGFpbnRleHQgbGVuZ3RoIG9mIDY1ICAqLworICAgIFdPTEZTU0xfTlRSVV9FRVNTNTkzID0gMHgwMTAyLCAvKiBtYXggcGxhaW50ZXh0IGxlbmd0aCBvZiA4NiAgKi8KKyAgICBXT0xGU1NMX05UUlVfRUVTUzc0MyA9IDB4MDEwMywgLyogbWF4IHBsYWludGV4dCBsZW5ndGggb2YgMTA2ICovCisgICAgV09MRlNTTF9MV0VfWFhYICA9IDB4MDIwMSwgICAgIC8qIExlYXJuaW5nIFdpdGggRXJyb3IgZW5jcnlwdGlvbiBzY2hlbWUgKi8KKyAgICBXT0xGU1NMX0hGRV9YWFggID0gMHgwMzAxLCAgICAgLyogSGlkZGVuIEZpZWxkIEVxdWF0aW9uIHNjaGVtZSAqLworICAgIFdPTEZTU0xfTlVMTF9RU0ggPSAweEZGRkYgICAgICAvKiBRU0hTY2hlbWUgaXMgbm90IHVzZWQgKi8KK307CisKKworLyogdGVzdCBpZiB0aGUgY29ubmVjdGlvbiBpcyB1c2luZyBhIFFTSCBzZWN1cmUgY29ubmVjdGlvbiByZXR1cm4gMSBpZiBzbyAqLworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfaXNRU0goV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1VzZVN1cHBvcnRlZFFTSChXT0xGU1NMKiBzc2wsIHVuc2lnbmVkIHNob3J0IG5hbWUpOworI2lmbmRlZiBOT19XT0xGU1NMX0NMSUVOVAorICAgIC8qIHVzZXIgY29udHJvbCBvdmVyIHNlbmRpbmcgY2xpZW50IHB1YmxpYyBrZXkgaW4gaGVsbG8KKyAgICAgICB3aGVuIGZsYWcgPSAxIHdpbGwgc2VuZCBrZXlzIGlmIGZsYWcgaXMgMCBvciBmdW5jdGlvbiBpcyBub3QgY2FsbGVkCisgICAgICAgdGhlbiB3aWxsIG5vdCBzZW5kIGtleXMgaW4gdGhlIGhlbGxvIGV4dGVuc2lvbiAqLworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX1VzZUNsaWVudFFTSEtleXMoV09MRlNTTCogc3NsLCB1bnNpZ25lZCBjaGFyIGZsYWcpOworI2VuZGlmCisKKyNlbmRpZiAvKiBRU0ggKi8KKworLyogVExTIEV4dGVuZGVkIE1hc3RlciBTZWNyZXQgRXh0ZW5zaW9uICovCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9EaXNhYmxlRXh0ZW5kZWRNYXN0ZXJTZWNyZXQoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9EaXNhYmxlRXh0ZW5kZWRNYXN0ZXJTZWNyZXQoV09MRlNTTF9DVFgqIGN0eCk7CisKKworI2RlZmluZSBXT0xGU1NMX0NSTF9NT05JVE9SICAgMHgwMSAgIC8qIG1vbml0b3IgdGhpcyBkaXIgZmxhZyAqLworI2RlZmluZSBXT0xGU1NMX0NSTF9TVEFSVF9NT04gMHgwMiAgIC8qIHN0YXJ0IG1vbml0b3JpbmcgZmxhZyAqLworCisKKy8qIG5vdGlmeSB1c2VyIHRoZSBoYW5kc2hha2UgaXMgZG9uZSAqLwordHlwZWRlZiBpbnQgKCpIYW5kU2hha2VEb25lQ2IpKFdPTEZTU0wqLCB2b2lkKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZXRIc0RvbmVDYihXT0xGU1NMKiwgSGFuZFNoYWtlRG9uZUNiLCB2b2lkKik7CisKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUHJpbnRTZXNzaW9uU3RhdHModm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9nZXRfc2Vzc2lvbl9zdGF0cyh1bnNpZ25lZCBpbnQqIGFjdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogdG90YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIHBlYWssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG1heFNlc3Npb25zKTsKKy8qIEV4dGVybmFsIGZhY2luZyBLREYgKi8KK1dPTEZTU0xfQVBJCitpbnQgd29sZlNTTF9NYWtlVGxzTWFzdGVyU2VjcmV0KHVuc2lnbmVkIGNoYXIqIG1zLCB3b3JkMzIgbXNMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcG1zLCB3b3JkMzIgcG1zTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNyLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGxzMV8yLCBpbnQgaGFzaF90eXBlKTsKKworV09MRlNTTF9BUEkKK2ludCB3b2xmU1NMX01ha2VUbHNFeHRlbmRlZE1hc3RlclNlY3JldCh1bnNpZ25lZCBjaGFyKiBtcywgd29yZDMyIG1zTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcG1zLCB3b3JkMzIgcG1zTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogc0hhc2gsIHdvcmQzMiBzSGFzaExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0bHMxXzIsIGludCBoYXNoX3R5cGUpOworCitXT0xGU1NMX0FQSQoraW50IHdvbGZTU0xfRGVyaXZlVGxzS2V5cyh1bnNpZ25lZCBjaGFyKiBrZXlfZGF0YSwgd29yZDMyIGtleUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtcywgd29yZDMyIG1zTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBjciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGxzMV8yLCBpbnQgaGFzaF90eXBlKTsKKworI2lmZGVmIFdPTEZTU0xfQ0FMTEJBQ0tTCisKK3R5cGVkZWYgaW50ICgqSGFuZFNoYWtlQ2FsbEJhY2spKEhhbmRTaGFrZUluZm8qKTsKK3R5cGVkZWYgaW50ICgqVGltZW91dENhbGxCYWNrKShUaW1lb3V0SW5mbyopOworCisvKiB3b2xmU1NMIGNvbm5lY3QgZXh0ZW5zaW9uIGFsbG93aW5nIEhhbmRTaGFrZUNhbGxCYWNrIGFuZC9vciBUaW1lb3V0Q2FsbEJhY2sKKyAgIGZvciBkaWFnbm9zdGljcyAqLworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfY29ubmVjdF9leChXT0xGU1NMKiwgSGFuZFNoYWtlQ2FsbEJhY2ssIFRpbWVvdXRDYWxsQmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfVElNRVZBTCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9hY2NlcHRfZXgoV09MRlNTTCosIEhhbmRTaGFrZUNhbGxCYWNrLCBUaW1lb3V0Q2FsbEJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfVElNRVZBTCk7CisKKyNlbmRpZiAvKiBXT0xGU1NMX0NBTExCQUNLUyAqLworCisKKyNpZmRlZiBXT0xGU1NMX0hBVkVfV09MRlNDRVAKKyAgICBXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfd29sZlNDRVAodm9pZCk7CisjZW5kaWYgLyogV09MRlNTTF9IQVZFX1dPTEZTQ0VQICovCisKKyNpZmRlZiBXT0xGU1NMX0hBVkVfQ0VSVF9TRVJWSUNFCisgICAgV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX2NlcnRfc2VydmljZSh2b2lkKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkFfWDUwOV9TTUFMTCkKKy8qIFNtYWxsZXIgc3Vic2V0IG9mIFg1MDkgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMuIEF2b2lkIGluY3JlYXNpbmcgdGhlIHNpemUgb2YKKyAqIHRoaXMgc3Vic2V0IGFuZCBpdHMgbWVtb3J5IHVzYWdlICovCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvYXNuMS5oPgorc3RydWN0IFdPTEZTU0xfWDUwOV9OQU1FX0VOVFJZIHsKKyAgICBXT0xGU1NMX0FTTjFfT0JKRUNUKiBvYmplY3Q7ICAvKiBzdGF0aWMgb2JqZWN0IGp1c3QgZm9yIGtlZXBpbmcgZ3JwLCB0eXBlICovCisgICAgV09MRlNTTF9BU04xX1NUUklORyogdmFsdWU7ICAvKiBwb2ludHMgdG8gZGF0YSwgZm9yIGxpZ2h0dHBkIHBvcnQgKi8KKyAgICBpbnQgbmlkOyAvKiBpLmUuIEFTTl9DT01NT05fTkFNRSAqLworICAgIGludCBzZXQ7CisgICAgaW50IHNpemU7Cit9OworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X05BTUVfZ2V0X2luZGV4X2J5X09CSihXT0xGU1NMX1g1MDlfTkFNRSAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfQVNOMV9PQkpFQ1QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZHgpOworCisKKworZW51bSB7CisgICAgV09MRlNTTF9TWVNfQUNDRVBUID0gMCwKKyAgICBXT0xGU1NMX1NZU19CSU5ELAorICAgIFdPTEZTU0xfU1lTX0NPTk5FQ1QsCisgICAgV09MRlNTTF9TWVNfRk9QRU4sCisgICAgV09MRlNTTF9TWVNfRlJFQUQsCisgICAgV09MRlNTTF9TWVNfR0VUQUREUklORk8sCisgICAgV09MRlNTTF9TWVNfR0VUU09DS09QVCwKKyAgICBXT0xGU1NMX1NZU19HRVRTT0NLTkFNRSwKKyAgICBXT0xGU1NMX1NZU19HRVRIT1NUQllOQU1FLAorICAgIFdPTEZTU0xfU1lTX0dFVE5BTUVJTkZPLAorICAgIFdPTEZTU0xfU1lTX0dFVFNFUlZCWU5BTUUsCisgICAgV09MRlNTTF9TWVNfSU9DVExTT0NLRVQsCisgICAgV09MRlNTTF9TWVNfTElTVEVOLAorICAgIFdPTEZTU0xfU1lTX09QRU5ESVIsCisgICAgV09MRlNTTF9TWVNfU0VUU09DS09QVCwKKyAgICBXT0xGU1NMX1NZU19TT0NLRVQKK307CisKKy8qIE9iamVjdCBmdW5jdGlvbnMgKi8KK1dPTEZTU0xfQVBJIGNvbnN0IGNoYXIqIHdvbGZTU0xfT0JKX25pZDJzbihpbnQgbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9PQkpfb2JqMm5pZChjb25zdCBXT0xGU1NMX0FTTjFfT0JKRUNUICpvKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX09CSl9nZXRfdHlwZShjb25zdCBXT0xGU1NMX0FTTjFfT0JKRUNUICpvKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX09CSl9zbjJuaWQoY29uc3QgY2hhciAqc24pOworCitXT0xGU1NMX0FQSSBjb25zdCBjaGFyKiB3b2xmU1NMX09CSl9uaWQybG4oaW50IG4pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfT0JKX2xuMm5pZChjb25zdCBjaGFyICpsbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9PQkpfY21wKGNvbnN0IFdPTEZTU0xfQVNOMV9PQkpFQ1QqIGEsCisgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0FTTjFfT0JKRUNUKiBiKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX09CSl90eHQybmlkKGNvbnN0IGNoYXIgKnNuKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQVNOMV9PQkpFQ1QqIHdvbGZTU0xfT0JKX3R4dDJvYmooY29uc3QgY2hhciogcywgaW50IG5vX25hbWUpOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfT0JKRUNUKiB3b2xmU1NMX09CSl9uaWQyb2JqKGludCBuKTsKK1dPTEZTU0xfTE9DQUwgV09MRlNTTF9BU04xX09CSkVDVCogd29sZlNTTF9PQkpfbmlkMm9ial9leChpbnQgbiwgV09MRlNTTF9BU04xX09CSkVDVCAqYXJnX29iaik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9PQkpfb2JqMnR4dChjaGFyICpidWYsIGludCBidWZfbGVuLCBXT0xGU1NMX0FTTjFfT0JKRUNUICphLCBpbnQgbm9fbmFtZSk7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9PQkpfY2xlYW51cCh2b2lkKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX09CSl9jcmVhdGUoY29uc3QgY2hhciAqb2lkLCBjb25zdCBjaGFyICpzbiwgY29uc3QgY2hhciAqbG4pOworI2lmZGVmIEhBVkVfRUNDCitXT0xGU1NMX0xPQ0FMIGludCBOSURUb0VjY0VudW0oaW50IG4pOworI2VuZGlmCisvKiBlbmQgb2Ygb2JqZWN0IGZ1bmN0aW9ucyAqLworCitXT0xGU1NMX0FQSSB1bnNpZ25lZCBsb25nIHdvbGZTU0xfRVJSX3BlZWtfbGFzdF9lcnJvcl9saW5lKGNvbnN0IGNoYXIgKipmaWxlLCBpbnQgKmxpbmUpOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0NUWF9jdHJsKFdPTEZTU0xfQ1RYKiBjdHgsIGludCBjbWQsIGxvbmcgb3B0LHZvaWQqIHB0KTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfY2FsbGJhY2tfY3RybChXT0xGU1NMX0NUWCogY3R4LCBpbnQgY21kLCB2b2lkICgqZnApKHZvaWQpKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9DVFhfY2xlYXJfZXh0cmFfY2hhaW5fY2VydHMoV09MRlNTTF9DVFgqIGN0eCk7CisKKyNpZm5kZWYgTk9fQ0VSVFMKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9OQU1FX0VOVFJZKiB3b2xmU1NMX1g1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfTklEKAorICAgICAgICAgICAgV09MRlNTTF9YNTA5X05BTUVfRU5UUlkqKiBvdXQsIGludCBuaWQsIGludCB0eXBlLAorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgaW50IGRhdGFTeik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfTkFNRV9FTlRSWSogd29sZlNTTF9YNTA5X05BTUVfRU5UUllfY3JlYXRlX2J5X3R4dCgKKyAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9OQU1FX0VOVFJZICoqbmVJbiwgY29uc3QgY2hhciAqdHh0LCBpbnQgZm9ybWF0LAorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGRhdGFTeik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X05BTUVfYWRkX2VudHJ5KFdPTEZTU0xfWDUwOV9OQU1FKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X05BTUVfRU5UUlkqIGVudHJ5LCBpbnQgaWR4LCBpbnQgc2V0KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfTkFNRV9hZGRfZW50cnlfYnlfdHh0KFdPTEZTU0xfWDUwOV9OQU1FICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKmZpZWxkLCBpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIGludCBsZW4sIGludCBsb2MsCisgICAgaW50IHNldCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X05BTUVfYWRkX2VudHJ5X2J5X05JRChXT0xGU1NMX1g1MDlfTkFNRSAqbmFtZSwgaW50IG5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgaW50IGxvYywgaW50IHNldCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfTkFNRV9FTlRSWSAqd29sZlNTTF9YNTA5X05BTUVfZGVsZXRlX2VudHJ5KAorICAgICAgICBXT0xGU1NMX1g1MDlfTkFNRSAqbmFtZSwgaW50IGxvYyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X05BTUVfY21wKGNvbnN0IFdPTEZTU0xfWDUwOV9OQU1FKiB4LAorICAgICAgICAgICAgY29uc3QgV09MRlNTTF9YNTA5X05BTUUqIHkpOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X05BTUUqIHdvbGZTU0xfWDUwOV9OQU1FX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOSogd29sZlNTTF9YNTA5X2R1cChXT0xGU1NMX1g1MDkqKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9OQU1FKiB3b2xmU1NMX1g1MDlfTkFNRV9kdXAoV09MRlNTTF9YNTA5X05BTUUqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfTkFNRV9jb3B5KFdPTEZTU0xfWDUwOV9OQU1FKiwgV09MRlNTTF9YNTA5X05BTUUqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX2NoZWNrX3ByaXZhdGVfa2V5KGNvbnN0IFdPTEZTU0wqIHNzbCk7CisjZW5kaWYgLyogIU5PX0NFUlRTICovCisjZW5kaWYgLyogT1BFTlNTTF9BTEwgfHwgT1BFTlNTTF9FWFRSQSB8fCBPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwgKi8KKworI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpIHx8IGRlZmluZWQoV09MRlNTTF9BU0lPKSB8fCBkZWZpbmVkKFdPTEZTU0xfSEFQUk9YWSkgXAorICAgIHx8IGRlZmluZWQoV09MRlNTTF9OR0lOWCkgfHwgZGVmaW5lZChXT0xGU1NMX1FUKQorV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX2N0cmwoV09MRlNTTCogc3NsLCBpbnQgY21kLCBsb25nIG9wdCwgdm9pZCogcHQpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoV09MRlNTTF9XUEFTX1NNQUxMKQorV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9YNTA5X2dldF9leHRfZDJpKGNvbnN0IFdPTEZTU0xfWDUwOSogeDUwOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5pZCwgaW50KiBjLCBpbnQqIGlkeCk7CisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSB8fCBXT0xGU1NMX1dQQVNfU01BTEwgKi8KKworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0FMTCkKKyNpZm5kZWYgTk9fQ0VSVFMKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfZ2V0X2V4dF9jb3VudChjb25zdCBXT0xGU1NMX1g1MDkqIHBhc3NlZENlcnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9nZXRfZXh0X2J5X05JRChjb25zdCBXT0xGU1NMX1g1MDkgKngsIGludCBuaWQsIGludCBsYXN0cG9zKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfYWRkX2V4dChXT0xGU1NMX1g1MDkgKngsIFdPTEZTU0xfWDUwOV9FWFRFTlNJT04gKmV4LCBpbnQgbG9jKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9FWFRFTlNJT04gKndvbGZTU0xfWDUwOVYzX0VYVF9pMmQoaW50IG5pZCwgaW50IGNyaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiAqd29sZlNTTF9YNTA5X2RlbGV0ZV9leHQoV09MRlNTTF9YNTA5ICp4NTA5LCBpbnQgbG9jKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9FWFRFTlNJT04qIHdvbGZTU0xfWDUwOVYzX0VYVF9jb25mX25pZCgKKyAgICAgICAgV09MRl9MSEFTSF9PRihDT05GX1ZBTFVFKSogY29uZiwgV09MRlNTTF9YNTA5VjNfQ1RYKiBjdHgsIGludCBuaWQsCisgICAgICAgIGNoYXIqIHZhbHVlKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9YNTA5VjNfc2V0X2N0eChXT0xGU1NMX1g1MDlWM19DVFgqIGN0eCwKKyAgICAgICAgV09MRlNTTF9YNTA5KiBpc3N1ZXIsIFdPTEZTU0xfWDUwOSogc3ViamVjdCwgV09MRlNTTF9YNTA5KiByZXEsCisgICAgICAgIFdPTEZTU0xfWDUwOV9DUkwqIGNybCwgaW50IGZsYWcpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1g1MDlWM19zZXRfY3R4X25vZGIoV09MRlNTTF9YNTA5VjNfQ1RYKiBjdHgpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9kaWdlc3QoY29uc3QgV09MRlNTTF9YNTA5KiB4NTA5LAorICAgICAgICBjb25zdCBXT0xGU1NMX0VWUF9NRCogZGlnZXN0LCB1bnNpZ25lZCBjaGFyKiBidWYsIHVuc2lnbmVkIGludCogbGVuKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfcHVia2V5X2RpZ2VzdChjb25zdCBXT0xGU1NMX1g1MDkgKng1MDksCisgICAgICAgIGNvbnN0IFdPTEZTU0xfRVZQX01EICpkaWdlc3QsIHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQgaW50KiBsZW4pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfdXNlX2NlcnRpZmljYXRlKFdPTEZTU0wqIHNzbCwgV09MRlNTTF9YNTA5KiB4NTA5KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3VzZV9Qcml2YXRlS2V5KFdPTEZTU0wqIHNzbCwgV09MRlNTTF9FVlBfUEtFWSogcGtleSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF91c2VfUHJpdmF0ZUtleV9BU04xKGludCBwcmksIFdPTEZTU0wqIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGVyLCBsb25nIGRlclN6KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRVZQX1BLRVkgKndvbGZTU0xfZ2V0X3ByaXZhdGVrZXkoY29uc3QgV09MRlNTTCAqc3NsKTsKKyNpZm5kZWYgTk9fUlNBCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF91c2VfUlNBUHJpdmF0ZUtleV9BU04xKFdPTEZTU0wqIHNzbCwgdW5zaWduZWQgY2hhciogZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGVyU3opOworI2VuZGlmCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfQVNOMShpbnQgcHJpLCBXT0xGU1NMX0NUWCogY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXIsIGxvbmcgZGVyU3opOworCisjaWYgZGVmaW5lZChXT0xGU1NMX1FUKSB8fCBkZWZpbmVkKE9QRU5TU0xfQUxMKQorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9jbXAoY29uc3QgV09MRlNTTF9YNTA5KiBhLCBjb25zdCBXT0xGU1NMX1g1MDkqIGIpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9TVEFDSyAqd29sZlNTTF9YNTA5X2dldDBfZXh0ZW5zaW9ucyhjb25zdCBXT0xGU1NMX1g1MDkgKngpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9TVEFDSyAqd29sZlNTTF9YNTA5X1JFUV9nZXRfZXh0ZW5zaW9ucyhjb25zdCBXT0xGU1NMX1g1MDkgKngpOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiogd29sZlNTTF9YNTA5X2dldF9leHQoY29uc3QgV09MRlNTTF9YNTA5KiB4LCBpbnQgbG9jKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfZ2V0X2V4dF9ieV9PQkooY29uc3QgV09MRlNTTF9YNTA5ICp4LAorICAgICAgICBjb25zdCBXT0xGU1NMX0FTTjFfT0JKRUNUICpvYmosIGludCBsYXN0cG9zKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9FWFRFTlNJT04qIHdvbGZTU0xfWDUwOV9zZXRfZXh0KFdPTEZTU0xfWDUwOSogeCwgaW50IGxvYyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X0VYVEVOU0lPTl9nZXRfY3JpdGljYWwoY29uc3QgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiogZXgpOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiogd29sZlNTTF9YNTA5X0VYVEVOU0lPTl9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19YNTA5X0VYVEVOU0lPTl9wdXNoKFdPTEZTU0xfU1RBQ0sqIHNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiogZXh0KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9za19YNTA5X0VYVEVOU0lPTl9mcmVlKFdPTEZTU0xfU1RBQ0sqIHNrKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9YNTA5X0VYVEVOU0lPTl9mcmVlKFdPTEZTU0xfWDUwOV9FWFRFTlNJT04qIGV4dF90b19mcmVlKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfU1RBQ0sqIHdvbGZTU0xfc2tfbmV3X3g1MDlfZXh0KHZvaWQpOworI2VuZGlmCisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQVNOMV9PQkpFQ1QqIHdvbGZTU0xfWDUwOV9FWFRFTlNJT05fZ2V0X29iamVjdChXT0xGU1NMX1g1MDlfRVhURU5TSU9OKiBleHQpOworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX1NUUklORyogd29sZlNTTF9YNTA5X0VYVEVOU0lPTl9nZXRfZGF0YShXT0xGU1NMX1g1MDlfRVhURU5TSU9OKiBleHQpOworI2VuZGlmIC8qICFOT19DRVJUUyAqLworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0RIICp3b2xmU1NMX0RTQV9kdXBfREgoY29uc3QgV09MRlNTTF9EU0EgKnIpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TRVNTSU9OX2dldF9tYXN0ZXJfa2V5KGNvbnN0IFdPTEZTU0xfU0VTU0lPTiogc2VzLAorICAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXQsIGludCBvdXRTeik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TRVNTSU9OX2dldF9tYXN0ZXJfa2V5X2xlbmd0aChjb25zdCBXT0xGU1NMX1NFU1NJT04qIHNlcyk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX2kyZF9YNTA5X2JpbyhXT0xGU1NMX0JJTyogYmlvLCBXT0xGU1NMX1g1MDkqIHg1MDkpOworI2lmZGVmIFdPTEZTU0xfQ0VSVF9SRVEKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX2kyZF9YNTA5X1JFUV9iaW8oV09MRlNTTF9CSU8qIGJpbywgV09MRlNTTF9YNTA5KiB4NTA5KTsKKyNlbmRpZgorI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pCitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkqIHdvbGZTU0xfZDJpX1g1MDlfZnAoWEZJTEUgZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOSoqIHg1MDkpOworV09MRlNTTF9BUEkgV09MRlNTTF9TVEFDSyogd29sZlNTTF9YNTA5X1NUT1JFX0dldENlcnRzKFdPTEZTU0xfWDUwOV9TVE9SRV9DVFgqIHMpOworI2VuZGlmCitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkqIHdvbGZTU0xfZDJpX1g1MDlfYmlvKFdPTEZTU0xfQklPKiBiaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOSoqIHg1MDkpOworI2lmZGVmIFdPTEZTU0xfQ0VSVF9SRVEKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOSogd29sZlNTTF9kMmlfWDUwOV9SRVFfYmlvKFdPTEZTU0xfQklPKiBiaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfWDUwOSoqIHg1MDkpOworI2VuZGlmCisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSB8fCBPUEVOU1NMX0FMTCAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFdPTEZTU0xfV1BBU19TTUFMTCkKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X2NlcnRfc3RvcmUoV09MRlNTTF9DVFgqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1g1MDlfU1RPUkUqIHN0cik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfU1RPUkUqIHdvbGZTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKFdPTEZTU0xfQ1RYKiBjdHgpOworI2VuZGlmIC8qIE9QRU5TU0xfRVhUUkEgfHwgV09MRlNTTF9XUEFTX1NNQUxMICovCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFdPTEZTU0xfV1BBU19TTUFMTCkgfHwgXAorICAgIGRlZmluZWQoSEFWRV9TRUNSRVRfQ0FMTEJBQ0spCitXT0xGU1NMX0FQSSBzaXplX3Qgd29sZlNTTF9nZXRfc2VydmVyX3JhbmRvbShjb25zdCBXT0xGU1NMICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4pOworV09MRlNTTF9BUEkgc2l6ZV90IHdvbGZTU0xfZ2V0X2NsaWVudF9yYW5kb20oY29uc3QgV09MRlNTTCogc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIG91dCwgc2l6ZV90IG91dFN6KTsKKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBIHx8IFdPTEZTU0xfV1BBU19TTUFMTCB8fCBIQVZFX1NFQ1JFVF9DQUxMQkFDSyAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKE9QRU5TU0xfQUxMKQorV09MRlNTTF9BUEkgc2l6ZV90IHdvbGZTU0xfQklPX3dwZW5kaW5nKGNvbnN0IFdPTEZTU0xfQklPICpiaW8pOworLyogbm9uLXN0YW5kYXJkIEFQSSB0byBkZXRlcm1pbmUgaWYgQklPIHN1cHBvcnRzICJwZW5kaW5nIiAqLworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQklPX3N1cHBvcnRzX3BlbmRpbmcoY29uc3QgV09MRlNTTF9CSU8gKmJpbyk7CitXT0xGU1NMX0FQSSBzaXplX3Qgd29sZlNTTF9CSU9fY3RybF9wZW5kaW5nKFdPTEZTU0xfQklPICpiKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfZ2V0X3NlcnZlcl90bXBfa2V5KGNvbnN0IFdPTEZTU0wqLCBXT0xGU1NMX0VWUF9QS0VZKiopOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfc2V0X21pbl9wcm90b192ZXJzaW9uKFdPTEZTU0xfQ1RYKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9zZXRfbWF4X3Byb3RvX3ZlcnNpb24oV09MRlNTTF9DVFgqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX2dldF9taW5fcHJvdG9fdmVyc2lvbihXT0xGU1NMX0NUWCopOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfdXNlX1ByaXZhdGVLZXkoV09MRlNTTF9DVFggKmN0eCwgV09MRlNTTF9FVlBfUEtFWSAqcGtleSk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkgKndvbGZTU0xfUEVNX3JlYWRfYmlvX1g1MDkoV09MRlNTTF9CSU8gKmJwLCBXT0xGU1NMX1g1MDkgKip4LCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKKyNpZmRlZiBXT0xGU1NMX0NFUlRfUkVRCitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkgKndvbGZTU0xfUEVNX3JlYWRfYmlvX1g1MDlfUkVRKFdPTEZTU0xfQklPICpicCwgV09MRlNTTF9YNTA5ICoqeCwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSk7CisjZW5kaWYKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9DUkwgKndvbGZTU0xfUEVNX3JlYWRfYmlvX1g1MDlfQ1JMKFdPTEZTU0xfQklPICpicCwKKyAgICAgICAgV09MRlNTTF9YNTA5X0NSTCAqKngsIHBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5ICp3b2xmU1NMX1BFTV9yZWFkX2Jpb19YNTA5X0FVWAorICAgICAgICAoV09MRlNTTF9CSU8gKmJwLCBXT0xGU1NMX1g1MDkgKip4LCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKK1dPTEZTU0xfQVBJIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X0lORk8pKiB3b2xmU1NMX1BFTV9YNTA5X0lORk9fcmVhZF9iaW8oCisgICAgICAgIFdPTEZTU0xfQklPKiBiaW8sIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X0lORk8pKiBzaywKKyAgICAgICAgcGVtX3Bhc3N3b3JkX2NiKiBjYiwgdm9pZCogdSk7CisjaWZuZGVmIE5PX0ZJTEVTWVNURU0KK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9DUkwgKndvbGZTU0xfUEVNX3JlYWRfWDUwOV9DUkwoWEZJTEUgZnAsCisgICAgICAgIFdPTEZTU0xfWDUwOV9DUkwgKip4LCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKKyNlbmRpZgorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUEVNX2dldF9FVlBfQ0lQSEVSX0lORk8oY29uc3QgY2hhciogaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5jcnlwdGVkSW5mbyogY2lwaGVyKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1BFTV9kb19oZWFkZXIoRW5jcnlwdGVkSW5mbyogY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhLCBsb25nKiBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiogY2FsbGJhY2ssIHZvaWQqIGN0eCk7CisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSB8fCBPUEVOU1NMX0FMTCAqLworCisvKmxpZ2h0dHAgY29tcGF0aWJpbGl0eSAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFdPTEZTU0xfV1BBU19TTUFMTCkgfHwgXAorICAgIGRlZmluZWQoT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMKQorc3RydWN0IFdPTEZTU0xfQVNOMV9CSVRfU1RSSU5HIHsKKyAgICBpbnQgbGVuZ3RoOworICAgIGludCB0eXBlOworICAgIGJ5dGUqIGRhdGE7CisgICAgbG9uZyBmbGFnczsKK307CisKK3N0cnVjdCBXT0xGU1NMX0NPTkZfQ1RYIHsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgICAgV09MRlNTTF9DVFgqIGN0eDsKKyAgICBXT0xGU1NMKiBzc2w7Cit9OworCitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfTkFNRV9FTlRSWSAqd29sZlNTTF9YNTA5X05BTUVfZ2V0X2VudHJ5KFdPTEZTU0xfWDUwOV9OQU1FICpuYW1lLCBpbnQgbG9jKTsKKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBIHx8IFdPTEZTU0xfV1BBU19TTUFMTCAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKE9QRU5TU0xfQUxMKXx8IFwKKyAgICBkZWZpbmVkKE9QRU5TU0xfRVhUUkFfWDUwOV9TTUFMTCkKKworI2lmICAgIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgXAorICAgIHx8IGRlZmluZWQoT1BFTlNTTF9BTEwpIFwKKyAgICB8fCBkZWZpbmVkKEhBVkVfTElHSFRZKSBcCisgICAgfHwgZGVmaW5lZChXT0xGU1NMX01ZU1FMX0NPTVBBVElCTEUpIFwKKyAgICB8fCBkZWZpbmVkKEhBVkVfU1RVTk5FTCkgXAorICAgIHx8IGRlZmluZWQoV09MRlNTTF9OR0lOWCkgXAorICAgIHx8IGRlZmluZWQoV09MRlNTTF9IQVBST1hZKSBcCisgICAgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfWDUwOV9OQU1FX0VOVFJZX2ZyZWUoV09MRlNTTF9YNTA5X05BTUVfRU5UUlkqIG5lKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9OQU1FX0VOVFJZKiB3b2xmU1NMX1g1MDlfTkFNRV9FTlRSWV9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfWDUwOV9OQU1FX2ZyZWUoV09MRlNTTF9YNTA5X05BTUUqIG5hbWUpOworV09MRlNTTF9BUEkgY2hhciB3b2xmU1NMX0NUWF91c2VfY2VydGlmaWNhdGUoV09MRlNTTF9DVFgqLCBXT0xGU1NMX1g1MDkqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9hZGQxX2NoYWluX2NlcnQoV09MRlNTTF9DVFgqLCBXT0xGU1NMX1g1MDkqKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0JJT19yZWFkX2ZpbGVuYW1lKFdPTEZTU0xfQklPICpiLCBjb25zdCBjaGFyICpuYW1lKTsKKy8qIFRoZXNlIGFyZSB0byBiZSBtZXJnZWQgc2hvcnRseSAqLworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NldF92ZXJpZnlfZGVwdGgoV09MRlNTTCAqc3NsLGludCBkZXB0aCk7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX2dldF9hcHBfZGF0YSggY29uc3QgV09MRlNTTCAqc3NsKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NldF9hcHBfZGF0YShXT0xGU1NMICpzc2wsIHZvaWQgKmFyZyk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfT0JKRUNUICogd29sZlNTTF9YNTA5X05BTUVfRU5UUllfZ2V0X29iamVjdChXT0xGU1NMX1g1MDlfTkFNRV9FTlRSWSAqbmUpOworV09MRlNTTF9BUEkgdW5zaWduZWQgY2hhciAqd29sZlNTTF9TSEExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLCB1bnNpZ25lZCBjaGFyICptZCk7CitXT0xGU1NMX0FQSSB1bnNpZ25lZCBjaGFyICp3b2xmU1NMX1NIQTIyNChjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3QgbiwgdW5zaWduZWQgY2hhciAqbWQpOworV09MRlNTTF9BUEkgdW5zaWduZWQgY2hhciAqd29sZlNTTF9TSEEyNTYoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sIHVuc2lnbmVkIGNoYXIgKm1kKTsKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGNoYXIgKndvbGZTU0xfU0hBMzg0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLCB1bnNpZ25lZCBjaGFyICptZCk7CitXT0xGU1NMX0FQSSB1bnNpZ25lZCBjaGFyICp3b2xmU1NMX1NIQTUxMihjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3QgbiwgdW5zaWduZWQgY2hhciAqbWQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9jaGVja19wcml2YXRlX2tleShXT0xGU1NMX1g1MDkqLCBXT0xGU1NMX0VWUF9QS0VZKik7CitXT0xGU1NMX0FQSSBXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOV9OQU1FKSAqd29sZlNTTF9kdXBfQ0FfbGlzdCggV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfTkFNRSkgKnNrICk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X2NoZWNrX2NhKFdPTEZTU0xfWDUwOSAqeDUwOSk7CisKKyNpZm5kZWYgTk9fRklMRVNZU1RFTQorV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0JJT19zZXRfZnAoV09MRlNTTF9CSU8gKmJpbywgWEZJTEUgZnAsIGludCBjKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9CSU9fZ2V0X2ZwKFdPTEZTU0xfQklPICpiaW8sIFhGSUxFKiBmcCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJTyogd29sZlNTTF9CSU9fbmV3X2ZwKFhGSUxFIGZwLCBpbnQgYyk7CisjZW5kaWYKKworI2VuZGlmIC8qIE9QRU5TU0xfRVhUUkEgfHwgT1BFTlNTTF9BTEwgfHwgSEFWRV9MSUdIVFkgfHwgV09MRlNTTF9NWVNRTF9DT01QQVRJQkxFIHx8IEhBVkVfU1RVTk5FTCB8fCBXT0xGU1NMX05HSU5YIHx8IFdPTEZTU0xfSEFQUk9YWSAqLworCisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSB8fCBPUEVOU1NMX0FMTCAqLworCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSBcCisgICAgfHwgZGVmaW5lZChIQVZFX1NUVU5ORUwpIFwKKyAgICB8fCBkZWZpbmVkKEhBVkVfTElHSFRZKSBcCisgICAgfHwgZGVmaW5lZChXT0xGU1NMX01ZU1FMX0NPTVBBVElCTEUpIFwKKyAgICB8fCBkZWZpbmVkKFdPTEZTU0xfSEFQUk9YWSkgXAorICAgIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQSkKKyNkZWZpbmUgWDUwOV9CVUZGRVJfU1ogODE5MgorCitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJTyogd29sZlNTTF9CSU9fbmV3X2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOworV09MRlNTTF9BUEkgbG9uZyB3b2xmU1NMX0NUWF9zZXRfdG1wX2RoKFdPTEZTU0xfQ1RYKiwgV09MRlNTTF9ESCopOworV09MRlNTTF9BUEkgV09MRlNTTF9ESCAqd29sZlNTTF9QRU1fcmVhZF9iaW9fREhwYXJhbXMoV09MRlNTTF9CSU8gKmJwLAorICAgIFdPTEZTU0xfREggKip4LCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfRFNBICp3b2xmU1NMX1BFTV9yZWFkX2Jpb19EU0FwYXJhbXMoV09MRlNTTF9CSU8gKmJwLAorICAgIFdPTEZTU0xfRFNBICoqeCwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9QRU1fd3JpdGVfYmlvX1g1MDlfUkVRKFdPTEZTU0xfQklPICpicCxXT0xGU1NMX1g1MDkgKngpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfUEVNX3dyaXRlX2Jpb19YNTA5X0FVWChXT0xGU1NMX0JJTyAqYnAsV09MRlNTTF9YNTA5ICp4KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1BFTV93cml0ZV9iaW9fWDUwOShXT0xGU1NMX0JJTyAqYnAsIFdPTEZTU0xfWDUwOSAqeCk7CisjZW5kaWYgLyogSEFWRV9TVFVOTkVMIHx8IEhBVkVfTElHSFRZICovCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpICYmICFkZWZpbmVkKE5PX0NFUlRTKSAmJiBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9HRU4pICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9SRVEpCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmRfWDUwOV9SRVEoV09MRlNTTF9YNTA5KiByZXEsIHVuc2lnbmVkIGNoYXIqKiBvdXQpOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5KiB3b2xmU1NMX1g1MDlfUkVRX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9YNTA5X1JFUV9mcmVlKFdPTEZTU0xfWDUwOSogcmVxKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfUkVRX3NpZ24oV09MRlNTTF9YNTA5ICpyZXEsIFdPTEZTU0xfRVZQX1BLRVkgKnBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPTEZTU0xfRVZQX01EICptZCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X1JFUV9zaWduX2N0eChXT0xGU1NMX1g1MDkgKnJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfRVZQX01EX0NUWCogbWRfY3R4KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfUkVRX2FkZF9leHRlbnNpb25zKFdPTEZTU0xfWDUwOSogcmVxLAorICAgICAgICBXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOV9FWFRFTlNJT04pKiBleHRfc2spOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9SRVFfc2V0X3N1YmplY3RfbmFtZShXT0xGU1NMX1g1MDkgKnJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9YNTA5X05BTUUgKm5hbWUpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9SRVFfc2V0X3B1YmtleShXT0xGU1NMX1g1MDkgKnJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9FVlBfUEtFWSAqcGtleSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X1JFUV9hZGQxX2F0dHJfYnlfTklEKFdPTEZTU0xfWDUwOSAqcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmlkLCBpbnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9SRVFfZ2V0X2F0dHJfYnlfTklEKGNvbnN0IFdPTEZTU0xfWDUwOSAqcmVxLAorICAgICAgICBpbnQgbmlkLCBpbnQgbGFzdHBvcyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X1JFUV9hZGQxX2F0dHJfYnlfdHh0KFdPTEZTU0xfWDUwOSAqcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXR0cm5hbWUsIGludCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIGludCBsZW4pOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X0FUVFJJQlVURSAqd29sZlNTTF9YNTA5X1JFUV9nZXRfYXR0cigKKyAgICAgICAgY29uc3QgV09MRlNTTF9YNTA5ICpyZXEsIGludCBsb2MpOworV09MRlNTTF9BUEkgV09MRlNTTF9YNTA5X0FUVFJJQlVURSogd29sZlNTTF9YNTA5X0FUVFJJQlVURV9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfWDUwOV9BVFRSSUJVVEVfZnJlZShXT0xGU1NMX1g1MDlfQVRUUklCVVRFKiBhdHRyKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQVNOMV9UWVBFICp3b2xmU1NMX1g1MDlfQVRUUklCVVRFX2dldDBfdHlwZSgKKyAgICAgICAgV09MRlNTTF9YNTA5X0FUVFJJQlVURSAqYXR0ciwgaW50IGlkeCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkgKndvbGZTU0xfWDUwOV90b19YNTA5X1JFUShXT0xGU1NMX1g1MDkgKngsCisgICAgICAgIFdPTEZTU0xfRVZQX1BLRVkgKnBrZXksIGNvbnN0IFdPTEZTU0xfRVZQX01EICptZCk7CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChIQVZFX1NUVU5ORUwpIHx8IGRlZmluZWQoV09MRlNTTF9OR0lOWCkgXAorICAgIHx8IGRlZmluZWQoV09MRlNTTF9IQVBST1hZKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoSEFWRV9MSUdIVFkpCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvY3J5cHRvLmg+CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NSWVBUT19zZXRfbWVtX2V4X2Z1bmN0aW9ucyh2b2lkICooKm0pIChzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50KSwKKyAgICB2b2lkICooKnIpICh2b2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBpbnQpLCB2b2lkICgqZikgKHZvaWQgKikpOworCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEodm9pZCk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NSWVBUT19tZW1jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgc2l6ZV90IHNpemUpOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0JJR05VTSogd29sZlNTTF9ESF83NjhfcHJpbWUoV09MRlNTTF9CSUdOVU0qIGJuKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklHTlVNKiB3b2xmU1NMX0RIXzEwMjRfcHJpbWUoV09MRlNTTF9CSUdOVU0qIGJuKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklHTlVNKiB3b2xmU1NMX0RIXzE1MzZfcHJpbWUoV09MRlNTTF9CSUdOVU0qIGJuKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklHTlVNKiB3b2xmU1NMX0RIXzIwNDhfcHJpbWUoV09MRlNTTF9CSUdOVU0qIGJuKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklHTlVNKiB3b2xmU1NMX0RIXzMwNzJfcHJpbWUoV09MRlNTTF9CSUdOVU0qIGJuKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklHTlVNKiB3b2xmU1NMX0RIXzQwOTZfcHJpbWUoV09MRlNTTF9CSUdOVU0qIGJuKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklHTlVNKiB3b2xmU1NMX0RIXzYxNDRfcHJpbWUoV09MRlNTTF9CSUdOVU0qIGJuKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQklHTlVNKiB3b2xmU1NMX0RIXzgxOTJfcHJpbWUoV09MRlNTTF9CSUdOVU0qIGJuKTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9ESCAqd29sZlNTTF9ESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzKGludCBwcmltZV9sZW4sIGludCBnZW5lcmF0b3IsCisgICAgdm9pZCAoKmNhbGxiYWNrKSAoaW50LCBpbnQsIHZvaWQgKiksIHZvaWQgKmNiX2FyZyk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0RIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoV09MRlNTTF9ESCosIGludCwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAoaW50LCBpbnQsIHZvaWQgKikpOworCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3Modm9pZCk7CisKK1dPTEZTU0xfQVBJIHVuc2lnbmVkIGxvbmcgd29sZlNTTF9FUlJfcGVla19sYXN0X2Vycm9yKHZvaWQpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9GSVBTX21vZGUodm9pZCk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0ZJUFNfbW9kZV9zZXQoaW50IHIpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9SQU5EX3NldF9yYW5kX21ldGhvZChjb25zdCBXT0xGU1NMX1JBTkRfTUVUSE9EICptZXRob2RzKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ0lQSEVSX2dldF9iaXRzKGNvbnN0IFdPTEZTU0xfQ0lQSEVSICpjLCBpbnQgKmFsZ19iaXRzKTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9TVEFDSyogd29sZlNTTF9za19YNTA5X25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NrX1g1MDlfbnVtKGNvbnN0IFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5KSAqcyk7CisKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9JTkZPICp3b2xmU1NMX1g1MDlfSU5GT19uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfWDUwOV9JTkZPX2ZyZWUoV09MRlNTTF9YNTA5X0lORk8qIGluZm8pOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX1NUQUNLKiB3b2xmU1NMX3NrX1g1MDlfSU5GT19uZXdfbnVsbCh2b2lkKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NrX1g1MDlfSU5GT19udW0oY29uc3QgV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfSU5GTykqKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9JTkZPKiB3b2xmU1NMX3NrX1g1MDlfSU5GT192YWx1ZSgKKyAgICBjb25zdCBXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOV9JTkZPKSosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19YNTA5X0lORk9fcHVzaChXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOV9JTkZPKSosCisgICAgV09MRlNTTF9YNTA5X0lORk8qKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9JTkZPKiB3b2xmU1NMX3NrX1g1MDlfSU5GT19wb3AoV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfSU5GTykqKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9za19YNTA5X0lORk9fcG9wX2ZyZWUoV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfSU5GTykqLAorICAgIHZvaWQgKCpmKSAoV09MRlNTTF9YNTA5X0lORk8qKSk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2tfWDUwOV9JTkZPX2ZyZWUoV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfSU5GTykqKTsKKwordHlwZWRlZiBpbnQgKCp3b2xmX3NrX2NvbXBhcmVfY2IpKGNvbnN0IHZvaWQqIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogYik7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgKCp3b2xmX3NrX2hhc2hfY2IpIChjb25zdCB2b2lkICp2KTsKK1dPTEZTU0xfQVBJIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X05BTUUpKiB3b2xmU1NMX3NrX1g1MDlfTkFNRV9uZXcoCisgICAgd29sZl9za19jb21wYXJlX2NiKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NrX1g1MDlfTkFNRV9wdXNoKFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X05BTUUpKiwKKyAgICBXT0xGU1NMX1g1MDlfTkFNRSopOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2tfWDUwOV9OQU1FX2ZpbmQoY29uc3QgV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfTkFNRSkqLAorICAgIFdPTEZTU0xfWDUwOV9OQU1FKik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19YNTA5X05BTUVfc2V0X2NtcF9mdW5jKAorICAgIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X05BTUUpKiwgd29sZl9za19jb21wYXJlX2NiKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9OQU1FKiB3b2xmU1NMX3NrX1g1MDlfTkFNRV92YWx1ZShjb25zdCBXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOV9OQU1FKSosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19YNTA5X05BTUVfbnVtKGNvbnN0IFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X05BTUUpKik7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfTkFNRSogd29sZlNTTF9za19YNTA5X05BTUVfcG9wKFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X05BTUUpKik7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2tfWDUwOV9OQU1FX3BvcF9mcmVlKFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X05BTUUpKiwKKyAgICB2b2lkICgqZikgKFdPTEZTU0xfWDUwOV9OQU1FKikpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX3NrX1g1MDlfTkFNRV9mcmVlKFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X05BTUUpICopOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19YNTA5X09CSkVDVF9udW0oY29uc3QgV09MRl9TVEFDS19PRihXT0xGU1NMX1g1MDlfT0JKRUNUKSAqcyk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfTkFNRV9wcmludF9leChXT0xGU1NMX0JJTyosV09MRlNTTF9YNTA5X05BTUUqLGludCwKKyAgICAgICAgdW5zaWduZWQgbG9uZyk7CisjaWZuZGVmIE5PX0ZJTEVTWVNURU0KK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfTkFNRV9wcmludF9leF9mcChYRklMRSxXT0xGU1NMX1g1MDlfTkFNRSosaW50LAorICAgICAgICB1bnNpZ25lZCBsb25nKTsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSBXT0xGU1NMX1NUQUNLICp3b2xmU1NMX3NrX0NPTkZfVkFMVUVfbmV3KHdvbGZfc2tfY29tcGFyZV9jYiBjb21wRnVuYyk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2tfQ09ORl9WQUxVRV9mcmVlKHN0cnVjdCBXT0xGU1NMX1NUQUNLICpzayk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19DT05GX1ZBTFVFX251bShjb25zdCBXT0xGU1NMX1NUQUNLICpzayk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0NPTkZfVkFMVUUgKndvbGZTU0xfc2tfQ09ORl9WQUxVRV92YWx1ZSgKKyAgICAgICAgY29uc3Qgc3RydWN0IFdPTEZTU0xfU1RBQ0sgKnNrLCBpbnQgaSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19DT05GX1ZBTFVFX3B1c2goV09MRl9TVEFDS19PRihXT0xGU1NMX0NPTkZfVkFMVUUpKiBzaywKKyAgICAgICAgV09MRlNTTF9DT05GX1ZBTFVFKiB2YWwpOworI2VuZGlmIC8qIE9QRU5TU0xfQUxMIHx8IEhBVkVfU1RVTk5FTCB8fCBXT0xGU1NMX05HSU5YIHx8IFdPTEZTU0xfSEFQUk9YWSB8fCBPUEVOU1NMX0VYVFJBIHx8IEhBVkVfTElHSFRZICovCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoV09MRlNTTF9XUEFTX1NNQUxMKQorV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX0JJVF9TVFJJTkcqIHdvbGZTU0xfQVNOMV9CSVRfU1RSSU5HX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9BU04xX0JJVF9TVFJJTkdfZnJlZShXT0xGU1NMX0FTTjFfQklUX1NUUklORyopOworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX0JJVF9TVFJJTkcqIHdvbGZTU0xfWDUwOV9nZXQwX3B1YmtleV9iaXRzdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09MRlNTTF9YNTA5Kik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9BU04xX0JJVF9TVFJJTkdfZ2V0X2JpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0FTTjFfQklUX1NUUklORyosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9BU04xX0JJVF9TVFJJTkdfc2V0X2JpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FTTjFfQklUX1NUUklORyosIGludCwgaW50KTsKKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBIHx8IFdPTEZTU0xfV1BBU19TTUFMTCAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChIQVZFX1NUVU5ORUwpIHx8IGRlZmluZWQoV09MRlNTTF9OR0lOWCkgXAorICAgIHx8IGRlZmluZWQoV09MRlNTTF9IQVBST1hZKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoSEFWRV9MSUdIVFkpCisKK1dPTEZTU0xfQVBJIGludCAgICAgICAgd29sZlNTTF9DVFhfYWRkX3Nlc3Npb24oV09MRlNTTF9DVFgqLCBXT0xGU1NMX1NFU1NJT04qKTsKKworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX3ZlcnNpb24oV09MRlNTTCopOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9nZXRfc3RhdGUoY29uc3QgV09MRlNTTCopOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkqIHdvbGZTU0xfc2tfWDUwOV92YWx1ZShXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOSkqLCBpbnQpOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDkqIHdvbGZTU0xfc2tfWDUwOV9zaGlmdChXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOSkqKTsKKworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9za19YNTA5X09CSkVDVF92YWx1ZShXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOV9PQkpFQ1QpKiwgaW50KTsKKyNlbmRpZiAvKiBPUEVOU1NMX0FMTCB8fCBIQVZFX1NUVU5ORUwgfHwgV09MRlNTTF9OR0lOWCB8fCBXT0xGU1NMX0hBUFJPWFkgfHwgT1BFTlNTTF9FWFRSQSB8fCBIQVZFX0xJR0hUWSAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFdPTEZTU0xfV1BBU19TTUFMTCkKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfU0VTU0lPTl9nZXRfZXhfZGF0YShjb25zdCBXT0xGU1NMX1NFU1NJT04qLCBpbnQpOworCitXT0xGU1NMX0FQSSBpbnQgICB3b2xmU1NMX1NFU1NJT05fc2V0X2V4X2RhdGEoV09MRlNTTF9TRVNTSU9OKiwgaW50LCB2b2lkKik7CisjaWZkZWYgSEFWRV9FWF9EQVRBX0NMRUFOVVBfSE9PS1MKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NFU1NJT05fc2V0X2V4X2RhdGFfd2l0aF9jbGVhbnVwKAorICAgIFdPTEZTU0xfU0VTU0lPTiogc2Vzc2lvbiwKKyAgICBpbnQgaWR4LAorICAgIHZvaWQqIGRhdGEsCisgICAgd29sZlNTTF9leF9kYXRhX2NsZWFudXBfcm91dGluZV90IGNsZWFudXBfcm91dGluZSk7CisjZW5kaWYKKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBIHx8IFdPTEZTU0xfV1BBU19TTUFMTCAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChIQVZFX1NUVU5ORUwpIHx8IGRlZmluZWQoV09MRlNTTF9OR0lOWCkgXAorICAgIHx8IGRlZmluZWQoV09MRlNTTF9IQVBST1hZKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoSEFWRV9MSUdIVFkpCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NFU1NJT05fZ2V0X2V4X25ld19pbmRleChsb25nLHZvaWQqLHZvaWQqLHZvaWQqLAorICAgICAgICBDUllQVE9fZnJlZV9mdW5jKik7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfTkFNRV9nZXRfc3ooV09MRlNTTF9YNTA5X05BTUUqKTsKKworV09MRlNTTF9BUEkgY29uc3QgdW5zaWduZWQgY2hhciogd29sZlNTTF9TRVNTSU9OX2dldF9pZChXT0xGU1NMX1NFU1NJT04qLAorICAgICAgICB1bnNpZ25lZCBpbnQqKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU0VTU0lPTl9wcmludChXT0xGU1NMX0JJTyosIGNvbnN0IFdPTEZTU0xfU0VTU0lPTiopOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShXT0xGU1NMICosIGNvbnN0IGNoYXIgKik7CisKK1dPTEZTU0xfQVBJIGNvbnN0IGNoYXIqIHdvbGZTU0xfZ2V0X3NlcnZlcm5hbWUoV09MRlNTTCAqLCB1bnNpZ25lZCBjaGFyKTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9DVFgqIHdvbGZTU0xfc2V0X1NTTF9DVFgoV09MRlNTTCosV09MRlNTTF9DVFgqKTsKKworV09MRlNTTF9BUEkgVmVyaWZ5Q2FsbGJhY2sgd29sZlNTTF9DVFhfZ2V0X3ZlcmlmeV9jYWxsYmFjayhXT0xGU1NMX0NUWCopOworCitXT0xGU1NMX0FQSSBWZXJpZnlDYWxsYmFjayB3b2xmU1NMX2dldF92ZXJpZnlfY2FsbGJhY2soV09MRlNTTCopOworCisjZW5kaWYgLyogT1BFTlNTTF9BTEwgfHwgSEFWRV9TVFVOTkVMIHx8IFdPTEZTU0xfTkdJTlggfHwgV09MRlNTTF9IQVBST1hZIHx8IEhBVkVfTElHSFRZICovCisKKyNpZmRlZiBIQVZFX1NOSQorLyogU05JIHJlY2VpdmVkIGNhbGxiYWNrIHR5cGUgKi8KK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tTbmlSZWN2KShXT0xGU1NMICpzc2wsIGludCAqcmV0LCB2b2lkKiBleEFyZyk7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soV09MRlNTTF9DVFggKiwKKyAgICAgICAgQ2FsbGJhY2tTbmlSZWN2KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2soV09MRlNTTF9DVFggKiwKKyAgICAgICAgQ2FsbGJhY2tTbmlSZWN2KTsKKworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0NUWF9zZXRfc2VydmVybmFtZV9hcmcoV09MRlNTTF9DVFggKiwgdm9pZCopOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSB8fCBkZWZpbmVkKEhBVkVfU1RVTk5FTCkgfHwgZGVmaW5lZChXT0xGU1NMX05HSU5YKSBcCisgICAgfHwgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChIQVZFX0xJR0hUWSkKKworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0VSUl9yZW1vdmVfdGhyZWFkX3N0YXRlKHZvaWQqKTsKKworLyogc3VwcG9ydCBmb3IgZGVwcmVjYXRlZCBvbGQgbmFtZSAqLworI2RlZmluZSBXT0xGU1NMX0VSUl9yZW1vdmVfdGhyZWFkX3N0YXRlIHdvbGZTU0xfRVJSX3JlbW92ZV90aHJlYWRfc3RhdGUKKworI2lmbmRlZiBOT19GSUxFU1lTVEVNCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfcHJpbnRfYWxsX2Vycm9yc19mcChYRklMRSBmcCk7CisjZW5kaWYKKworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1RIUkVBRElEX3NldF9jYWxsYmFjayh2b2lkICgqdGhyZWFkaWRfZnVuYykodm9pZCopKTsKKworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1RIUkVBRElEX3NldF9udW1lcmljKHZvaWQqIGlkLCB1bnNpZ25lZCBsb25nIHZhbCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfVEhSRUFESURfY3VycmVudChXT0xGU1NMX0NSWVBUT19USFJFQURJRCogaWQpOworV09MRlNTTF9BUEkgdW5zaWduZWQgbG9uZyB3b2xmU1NMX1RIUkVBRElEX2hhc2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT0xGU1NMX0NSWVBUT19USFJFQURJRCogaWQpOworCitXT0xGU1NMX0FQSSBXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOV9PQkpFQ1QpKgorICAgICAgICB3b2xmU1NMX1g1MDlfU1RPUkVfZ2V0MF9vYmplY3RzKFdPTEZTU0xfWDUwOV9TVE9SRSAqKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9PQkpFQ1QqCisgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9PQkpFQ1RfZGVsZXRlKFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9YNTA5X09CSkVDVCkqIHNrLCBpbnQgaSk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfWDUwOV9PQkpFQ1RfZnJlZShXT0xGU1NMX1g1MDlfT0JKRUNUICphKTsKKyNlbmRpZiAvKiBPUEVOU1NMX0FMTCB8fCBIQVZFX1NUVU5ORUwgfHwgV09MRlNTTF9OR0lOWCB8fCBXT0xGU1NMX0hBUFJPWFkgfHwgSEFWRV9MSUdIVFkgKi8KKworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChXT0xGU1NMX1dQQVNfU01BTEwpCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3N0YWNrLmg+CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2tfWDUwOV9wb3BfZnJlZShXT0xGX1NUQUNLX09GKFdPTEZTU0xfWDUwOSkqIHNrLCB2b2lkICgqZikgKFdPTEZTU0xfWDUwOSopKTsKKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBIHx8IFdPTEZTU0xfV1BBU19TTUFMTCAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSAmJiBkZWZpbmVkKEhBVkVfRUNDKQorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3NldDFfY3VydmVzX2xpc3QoV09MRlNTTF9DVFgqIGN0eCwgY29uc3QgY2hhciogbmFtZXMpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2V0MV9jdXJ2ZXNfbGlzdChXT0xGU1NMKiBzc2wsIGNvbnN0IGNoYXIqIG5hbWVzKTsKKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBICYmIEhBVkVfRUNDICovCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSB8fCBcCisgICAgZGVmaW5lZChIQVZFX1NUVU5ORUwpIHx8IGRlZmluZWQoV09MRlNTTF9NWVNRTF9DT01QQVRJQkxFKSB8fCBcCisgICAgZGVmaW5lZChXT0xGU1NMX05HSU5YKSB8fCBkZWZpbmVkKFdPTEZTU0xfSEFQUk9YWSkKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfZ2V0X3ZlcmlmeV9tb2RlKGNvbnN0IFdPTEZTU0wqIHNzbCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfZ2V0X3ZlcmlmeV9tb2RlKGNvbnN0IFdPTEZTU0xfQ1RYKiBjdHgpOworCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfSk5JCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9zZXRfam9iamVjdChXT0xGU1NMKiBzc2wsIHZvaWQqIG9ialB0cik7CitXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX2dldF9qb2JqZWN0KFdPTEZTU0wqIHNzbCk7CisjZW5kaWYgLyogV09MRlNTTF9KTkkgKi8KKworCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQXN5bmNQb2xsKFdPTEZTU0wqIHNzbCwgV09MRl9FVkVOVF9GTEFHIGZsYWdzKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9Bc3luY1BvbGwoV09MRlNTTF9DVFgqIGN0eCwgV09MRl9FVkVOVCoqIGV2ZW50cywgaW50IG1heEV2ZW50cywKKyAgICBXT0xGX0VWRU5UX0ZMQUcgZmxhZ3MsIGludCogZXZlbnRDb3VudCk7CisjZW5kaWYgLyogV09MRlNTTF9BU1lOQ19DUllQVCAqLworCisjaWZkZWYgT1BFTlNTTF9FWFRSQQordHlwZWRlZiB2b2lkICgqU1NMX01zZ19DYikoaW50IHdyaXRlX3AsIGludCB2ZXJzaW9uLCBpbnQgY29udGVudF90eXBlLAorICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgV09MRlNTTCAqc3NsLCB2b2lkICphcmcpOworCisjaWYgZGVmaW5lZChIQVZFX1NFQ1JFVF9DQUxMQkFDSykKK3R5cGVkZWYgdm9pZCAoKndvbGZTU0xfQ1RYX2tleWxvZ19jYl9mdW5jKQorICAgICAgICAgICAgKGNvbnN0IFdPTEZTU0wqIHNzbCwgY29uc3QgY2hhciogbGluZSk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX3NldF9rZXlsb2dfY2FsbGJhY2soV09MRlNTTF9DVFgqIGN0eCwKKyAgICB3b2xmU1NMX0NUWF9rZXlsb2dfY2JfZnVuYyBjYik7CitXT0xGU1NMX0FQSSB3b2xmU1NMX0NUWF9rZXlsb2dfY2JfZnVuYyB3b2xmU1NMX0NUWF9nZXRfa2V5bG9nX2NhbGxiYWNrKAorICAgIGNvbnN0IFdPTEZTU0xfQ1RYKiBjdHgpOworI2VuZGlmIC8qIEhBVkVfU0VDUkVUX0NBTExCQUNLICovCisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrKFdPTEZTU0xfQ1RYICpjdHgsIFNTTF9Nc2dfQ2IgY2IpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2V0X21zZ19jYWxsYmFjayhXT0xGU1NMICpzc2wsIFNTTF9Nc2dfQ2IgY2IpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3NldF9tc2dfY2FsbGJhY2tfYXJnKFdPTEZTU0xfQ1RYICpjdHgsIHZvaWQqIGFyZyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9zZXRfbXNnX2NhbGxiYWNrX2FyZyhXT0xGU1NMICpzc2wsIHZvaWQqIGFyZyk7CitXT0xGU1NMX0FQSSB1bnNpZ25lZCBsb25nIHdvbGZTU0xfRVJSX3BlZWtfZXJyb3JfbGluZV9kYXRhKGNvbnN0IGNoYXIgKipmaWxlLAorICAgIGludCAqbGluZSwgY29uc3QgY2hhciAqKmRhdGEsIGludCAqZmxhZ3MpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3NldF9hbHBuX3Byb3RvcyhXT0xGU1NMX0NUWCAqY3R4LAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnByb3RvcywgdW5zaWduZWQgaW50IHByb3Rvc19sZW4pOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2V0X2FscG5fcHJvdG9zKFdPTEZTU0wqIHNzbCwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcHJvdG9zLCB1bnNpZ25lZCBpbnQgcHJvdG9zX2xlbik7CitXT0xGU1NMX0FQSSB2b2lkICp3b2xmU1NMX09QRU5TU0xfbWVtZHVwKGNvbnN0IHZvaWQgKmRhdGEsCisgICAgc2l6ZV90IHNpeiwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX09QRU5TU0xfY2xlYW5zZSh2b2lkICpwdHIsIHNpemVfdCBsZW4pOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0VSUl9sb2FkX0JJT19zdHJpbmdzKHZvaWQpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0RIX2dldDBfcHFnKGNvbnN0IFdPTEZTU0xfREgqIGRoLAorY29uc3QgV09MRlNTTF9CSUdOVU0qKiBwLCBjb25zdCBXT0xGU1NMX0JJR05VTSoqIHEsIGNvbnN0IFdPTEZTU0xfQklHTlVNKiogZyk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9PQ1NQKSAmJiAhZGVmaW5lZChOT19BU05fVElNRSkKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9nZXRfb2NzcF9wcm9kdWNlZERhdGUoCisgICAgICAgIFdPTEZTU0wgKnNzbCwKKyAgICAgICAgYnl0ZSAqcHJvZHVjZWREYXRlLAorICAgICAgICBzaXplX3QgcHJvZHVjZWREYXRlX3NwYWNlLAorICAgICAgICBpbnQgKnByb2R1Y2VkRGF0ZUZvcm1hdCk7CisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfZ2V0X29jc3BfcHJvZHVjZWREYXRlX3RtKFdPTEZTU0wgKnNzbCwKKyAgICAgICAgc3RydWN0IHRtICpwcm9kdWNlZF90bSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpIFwKKyAgICB8fCBkZWZpbmVkKFdPTEZTU0xfTkdJTlgpIFwKKyAgICB8fCBkZWZpbmVkKFdPTEZTU0xfSEFQUk9YWSkgXAorICAgIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgXAorICAgIHx8IGRlZmluZWQoSEFWRV9TVFVOTkVMKQorV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX09QRU5TU0xfY29uZmlnKGNoYXIgKmNvbmZpZ19uYW1lKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX05HSU5YKSB8fCBkZWZpbmVkKFdPTEZTU0xfSEFQUk9YWSkKKy8qIE5vdCBhbiBPcGVuU1NMIEFQSS4gKi8KK1dPTEZTU0xfTE9DQUwgaW50IHdvbGZTU0xfZ2V0X29jc3BfcmVzcG9uc2UoV09MRlNTTCogc3NsLCBieXRlKiogcmVzcG9uc2UpOworLyogTm90IGFuIE9wZW5TU0wgQVBJLiAqLworV09MRlNTTF9MT0NBTCBjaGFyKiB3b2xmU1NMX2dldF9vY3NwX3VybChXT0xGU1NMKiBzc2wpOworLyogTm90IGFuIE9wZW5TU0wgQVBJLiAqLworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2V0X29jc3BfdXJsKFdPTEZTU0wqIHNzbCwgY2hhciogdXJsKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkFfWDUwOV9TTUFMTCkgXAorICAgIHx8IGRlZmluZWQoV09MRlNTTF9XUEFTX1NNQUxMKQorV09MRlNTTF9BUEkgdm9pZCAqd29sZlNTTF9YNTA5X2dldF9leF9kYXRhKFdPTEZTU0xfWDUwOSAqeDUwOSwgaW50IGlkeCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X3NldF9leF9kYXRhKFdPTEZTU0xfWDUwOSAqeDUwOSwgaW50IGlkeCwKKyAgICB2b2lkICpkYXRhKTsKKyNpZmRlZiBIQVZFX0VYX0RBVEFfQ0xFQU5VUF9IT09LUworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9zZXRfZXhfZGF0YV93aXRoX2NsZWFudXAoCisgICAgWDUwOSAqeDUwOSwKKyAgICBpbnQgaWR4LAorICAgIHZvaWQgKmRhdGEsCisgICAgd29sZlNTTF9leF9kYXRhX2NsZWFudXBfcm91dGluZV90IGNsZWFudXBfcm91dGluZSk7CisjZW5kaWYKKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBIHx8IE9QRU5TU0xfRVhUUkFfWDUwOV9TTUFMTCB8fCBXT0xGU1NMX1dQQVNfU01BTEwgKi8KKworI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpIHx8IGRlZmluZWQoV09MRlNTTF9OR0lOWCkgfHwgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpIFwKKyAgICB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoSEFWRV9MSUdIVFkpCitXT0xGU1NMX0FQSSBXT0xGX1NUQUNLX09GKFdPTEZTU0xfQ0lQSEVSKSAqd29sZlNTTF9nZXRfY2lwaGVyc19jb21wYXQoY29uc3QgV09MRlNTTCAqc3NsKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfZ2V0X2V4X25ld19pbmRleChpbnQgaWR4LCB2b2lkICphcmcsIHZvaWQgKmEsCisgICAgdm9pZCAqYiwgdm9pZCAqYyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X05BTUVfZGlnZXN0KGNvbnN0IFdPTEZTU0xfWDUwOV9OQU1FICpkYXRhLAorICAgIGNvbnN0IFdPTEZTU0xfRVZQX01EICp0eXBlLCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpsZW4pOworCitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfU1NMX0NUWF9nZXRfdGltZW91dChjb25zdCBXT0xGU1NMX0NUWCAqY3R4KTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9nZXRfdGltZW91dChXT0xGU1NMKiBzc2wpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU1NMX0NUWF9zZXRfdG1wX2VjZGgoV09MRlNTTF9DVFggKmN0eCwKKyAgICBXT0xGU1NMX0VDX0tFWSAqZWNkaCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TU0xfQ1RYX3JlbW92ZV9zZXNzaW9uKFdPTEZTU0xfQ1RYICosCisgICAgV09MRlNTTF9TRVNTSU9OICpjKTsKKworV09MRlNTTF9BUEkgV09MRlNTTF9CSU8gKndvbGZTU0xfU1NMX2dldF9yYmlvKGNvbnN0IFdPTEZTU0wgKnMpOworV09MRlNTTF9BUEkgV09MRlNTTF9CSU8gKndvbGZTU0xfU1NMX2dldF93YmlvKGNvbnN0IFdPTEZTU0wgKnMpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfU1NMX2RvX2hhbmRzaGFrZShXT0xGU1NMICpzKTsKKyNpZiBkZWZpbmVkKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIpICYmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDEwMDAwMEwKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NTTF9pbl9pbml0KGNvbnN0IFdPTEZTU0wqKTsKKyNlbHNlCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TU0xfaW5faW5pdChXT0xGU1NMKik7CisjZW5kaWYKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NTTF9pbl9jb25uZWN0X2luaXQoV09MRlNTTCopOworCisjaWZuZGVmIE5PX1NFU1NJT05fQ0FDSEUKKyAgICBXT0xGU1NMX0FQSSBXT0xGU1NMX1NFU1NJT04gKndvbGZTU0xfU1NMX2dldDBfc2Vzc2lvbihjb25zdCBXT0xGU1NMICpzKTsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmFfQVNOMV9JTlRFR0VSKFdPTEZTU0xfQklPICpicCwKKyAgICBjb25zdCBXT0xGU1NMX0FTTjFfSU5URUdFUiAqYSk7CisKKyNpZmRlZiBIQVZFX1NFU1NJT05fVElDS0VUCit0eXBlZGVmIGludCAoKnRpY2tldENvbXBhdENiKShXT0xGU1NMICpzc2wsIHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgIFdPTEZTU0xfRVZQX0NJUEhFUl9DVFggKmVjdHgsIFdPTEZTU0xfSE1BQ19DVFggKmhjdHgsIGludCBlbmMpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX3NldF90bHNleHRfdGlja2V0X2tleV9jYihXT0xGU1NMX0NUWCAqLCB0aWNrZXRDb21wYXRDYik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9PQ1NQKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoT1BFTlNTTF9BTEwpIHx8IFwKKyAgICBkZWZpbmVkKFdPTEZTU0xfTkdJTlgpIHx8IGRlZmluZWQoV09MRlNTTF9IQVBST1hZKQorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX2dldF9leHRyYV9jaGFpbl9jZXJ0cyhXT0xGU1NMX0NUWCogY3R4LAorICAgIFdPTEZfU1RBQ0tfT0YoWDUwOSkqKiBjaGFpbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfc2V0X3Rsc2V4dF9zdGF0dXNfY2IoV09MRlNTTF9DVFgqIGN0eCwKKyAgICBpbnQoKikoV09MRlNTTCosIHZvaWQqKSk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfU1RPUkVfQ1RYX2dldDFfaXNzdWVyKFdPTEZTU0xfWDUwOSAqKmlzc3VlciwKKyAgICBXT0xGU1NMX1g1MDlfU1RPUkVfQ1RYICpjdHgsIFdPTEZTU0xfWDUwOSAqeCk7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9YNTA5X2VtYWlsX2ZyZWUoV09MRl9TVEFDS19PRihXT0xGU1NMX1NUUklORykgKnNrKTsKK1dPTEZTU0xfQVBJIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9TVFJJTkcpICp3b2xmU1NMX1g1MDlfZ2V0MV9vY3NwKFdPTEZTU0xfWDUwOSAqeCk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfY2hlY2tfaXNzdWVkKFdPTEZTU0xfWDUwOSAqaXNzdWVyLAorICAgIFdPTEZTU0xfWDUwOSAqc3ViamVjdCk7CisKK1dPTEZTU0xfQVBJIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9TVFJJTkcpKiB3b2xmU1NMX3NrX1dPTEZTU0xfU1RSSU5HX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9za19XT0xGU1NMX1NUUklOR19mcmVlKFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9TVFJJTkcpKiBzayk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1NUUklORyB3b2xmU1NMX3NrX1dPTEZTU0xfU1RSSU5HX3ZhbHVlKAorICAgIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9TVFJJTkcpKiBzdHJpbmdzLCBpbnQgaWR4KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NrX1dPTEZTU0xfU1RSSU5HX251bSgKKyAgICBXT0xGX1NUQUNLX09GKFdPTEZTU0xfU1RSSU5HKSogc3RyaW5ncyk7CisjZW5kaWYgLyogSEFWRV9PQ1NQIHx8IE9QRU5TU0xfRVhUUkEgfHwgT1BFTlNTTF9BTEwgfHwgV09MRlNTTF9OR0lOWCB8fCBXT0xGU1NMX0hBUFJPWFkgKi8KKworV09MRlNTTF9BUEkgaW50IFBFTV93cml0ZV9iaW9fV09MRlNTTF9YNTA5KFdPTEZTU0xfQklPICpiaW8sCisgICAgV09MRlNTTF9YNTA5ICpjZXJ0KTsKKworI2VuZGlmIC8qIE9QRU5TU0xfQUxMIHx8IFdPTEZTU0xfTkdJTlggfHwgV09MRlNTTF9IQVBST1hZIHx8CisgICAgT1BFTlNTTF9FWFRSQSB8fCBIQVZFX0xJR0hUWSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NFU1NJT05fVElDS0VUKSAmJiAhZGVmaW5lZChXT0xGU1NMX05PX0RFRl9USUNLRVRfRU5DX0NCKSAmJiBcCisgICAgIWRlZmluZWQoTk9fV09MRlNTTF9TRVJWRVIpCitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQ1RYX2dldF90bHNleHRfdGlja2V0X2tleXMoV09MRlNTTF9DVFggKmN0eCwKKyAgICAgdW5zaWduZWQgY2hhciAqa2V5cywgaW50IGtleWxlbik7CitXT0xGU1NMX0FQSSBsb25nIHdvbGZTU0xfQ1RYX3NldF90bHNleHRfdGlja2V0X2tleXMoV09MRlNTTF9DVFggKmN0eCwKKyAgICAgdW5zaWduZWQgY2hhciAqa2V5cywgaW50IGtleWxlbik7CisjZW5kaWYKKworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX2dldDBfYWxwbl9zZWxlY3RlZChjb25zdCBXT0xGU1NMICpzc2wsCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipkYXRhLCB1bnNpZ25lZCBpbnQgKmxlbik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9zZWxlY3RfbmV4dF9wcm90byh1bnNpZ25lZCBjaGFyICoqb3V0LAorICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRsZW4sCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sZW4sCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNsaWVudCwKKyAgICAgICAgdW5zaWduZWQgaW50IGNsaWVudF9sZW4pOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0NUWF9zZXRfYWxwbl9zZWxlY3RfY2IoV09MRlNTTF9DVFggKmN0eCwKKyAgICAgICAgaW50ICgqY2IpIChXT0xGU1NMICpzc2wsCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqb3V0LAorICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0bGVuLAorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5sZW4sCisgICAgICAgICAgICB2b2lkICphcmcpLCB2b2lkICphcmcpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2ZXJ0aXNlZF9jYihXT0xGU1NMX0NUWCAqcywKKyAgICAgICAgaW50ICgqY2IpIChXT0xGU1NMICpzc2wsCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqb3V0LAorICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRsZW4sCisgICAgICAgICAgICB2b2lkICphcmcpLCB2b2lkICphcmcpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0NUWF9zZXRfbmV4dF9wcm90b19zZWxlY3RfY2IoV09MRlNTTF9DVFggKnMsCisgICAgICAgIGludCAoKmNiKSAoV09MRlNTTCAqc3NsLAorICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKm91dCwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorICAgICAgICAgICAgdW5zaWduZWQgaW50IGlubGVuLAorICAgICAgICAgICAgdm9pZCAqYXJnKSwgdm9pZCAqYXJnKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9nZXQwX25leHRfcHJvdG9fbmVnb3RpYXRlZChjb25zdCBXT0xGU1NMICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqZGF0YSwKKyAgICAgICAgdW5zaWduZWQgKmxlbik7CisKKyNpZm5kZWYgTk9fQVNOCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X2NoZWNrX2hvc3QoV09MRlNTTF9YNTA5ICp4LCBjb25zdCBjaGFyICpjaGssCisgICAgc2l6ZV90IGNoa2xlbiwgdW5zaWduZWQgaW50IGZsYWdzLCBjaGFyICoqcGVlcm5hbWUpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9jaGVja19pcF9hc2MoV09MRlNTTF9YNTA5ICp4LCBjb25zdCBjaGFyICppcGFzYywKKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgJiYgZGVmaW5lZChXT0xGU1NMX0NFUlRfR0VOKQorV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9jaGVja19lbWFpbChXT0xGU1NMX1g1MDkgKngsIGNvbnN0IGNoYXIgKmNoaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNoa0xlbiwgdW5zaWduZWQgaW50IGZsYWdzKTsKKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBICYmIFdPTEZTU0xfQ0VSVF9HRU4gKi8KKworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX05HSU5YKSB8fCBkZWZpbmVkKFdPTEZTU0xfSEFQUk9YWSkKK1dPTEZTU0xfQVBJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKlNTTF9TRVNTSU9OX2dldDBfaWRfY29udGV4dCgKKyAgICAgICAgY29uc3QgV09MRlNTTF9TRVNTSU9OICpzZXNzLCB1bnNpZ25lZCBpbnQgKnNpZF9jdHhfbGVuZ3RoKTsKK1dPTEZTU0xfQVBJIHNpemVfdCB3b2xmU1NMX2dldF9maW5pc2hlZChjb25zdCBXT0xGU1NMICpzc2wsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK1dPTEZTU0xfQVBJIHNpemVfdCB3b2xmU1NMX2dldF9wZWVyX2ZpbmlzaGVkKGNvbnN0IFdPTEZTU0wgKnNzbCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOworI2VuZGlmCisKK1dPTEZTU0xfQVBJIGludCBTU0xfU0VTU0lPTl9zZXQxX2lkKFdPTEZTU0xfU0VTU0lPTiAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqc2lkLCB1bnNpZ25lZCBpbnQgc2lkX2xlbik7CitXT0xGU1NMX0FQSSBpbnQgU1NMX1NFU1NJT05fc2V0MV9pZF9jb250ZXh0KFdPTEZTU0xfU0VTU0lPTiAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqc2lkX2N0eCwgdW5zaWduZWQgaW50IHNpZF9jdHhfbGVuKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9BTEdPUiogd29sZlNTTF9YNTA5X0FMR09SX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9YNTA5X0FMR09SX2ZyZWUoV09MRlNTTF9YNTA5X0FMR09SICphbGcpOworV09MRlNTTF9BUEkgY29uc3QgV09MRlNTTF9YNTA5X0FMR09SKiB3b2xmU1NMX1g1MDlfZ2V0MF90YnNfc2lnYWxnKGNvbnN0IFdPTEZTU0xfWDUwOSAqeCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfWDUwOV9BTEdPUl9nZXQwKGNvbnN0IFdPTEZTU0xfQVNOMV9PQkpFQ1QgKipwYW9iaiwgaW50ICpwcHR5cGUsIGNvbnN0IHZvaWQgKipwcHZhbCwgY29uc3QgV09MRlNTTF9YNTA5X0FMR09SICphbGdvcik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X0FMR09SX3NldDAoV09MRlNTTF9YNTA5X0FMR09SICphbGdvciwgV09MRlNTTF9BU04xX09CSkVDVCAqYW9iaiwgaW50IHB0eXBlLCB2b2lkICpwdmFsKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQVNOMV9UWVBFKiB3b2xmU1NMX0FTTjFfVFlQRV9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQVNOMV9UWVBFX2ZyZWUoV09MRlNTTF9BU04xX1RZUEUqIGF0KTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfWDUwOV9QVUJLRVkgKndvbGZTU0xfWDUwOV9QVUJLRVlfbmV3KHZvaWQpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1g1MDlfUFVCS0VZX2ZyZWUoV09MRlNTTF9YNTA5X1BVQktFWSAqeCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX1g1MDlfUFVCS0VZICp3b2xmU1NMX1g1MDlfZ2V0X1g1MDlfUFVCS0VZKGNvbnN0IFdPTEZTU0xfWDUwOSogeDUwOSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X1BVQktFWV9nZXQwX3BhcmFtKFdPTEZTU0xfQVNOMV9PQkpFQ1QgKipwcGthbGcsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwaywgaW50ICpwcGtsZW4sIFdPTEZTU0xfWDUwOV9BTEdPUiAqKnBhLCBXT0xGU1NMX1g1MDlfUFVCS0VZICpwdWIpOworV09MRlNTTF9BUEkgV09MRlNTTF9FVlBfUEtFWSogd29sZlNTTF9YNTA5X1BVQktFWV9nZXQoV09MRlNTTF9YNTA5X1BVQktFWSoga2V5KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfUFVCS0VZX3NldChXT0xGU1NMX1g1MDlfUFVCS0VZICoqeCwgV09MRlNTTF9FVlBfUEtFWSAqa2V5KTsKK1dPTEZTU0xfQVBJIGludCBpMnRfQVNOMV9PQkpFQ1QoY2hhciAqYnVmLCBpbnQgYnVmX2xlbiwgV09MRlNTTF9BU04xX09CSkVDVCAqYSk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0FTTjFfT0JKRUNUICp3b2xmU1NMX2QyaV9BU04xX09CSkVDVChXT0xGU1NMX0FTTjFfT0JKRUNUICoqYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbmd0aCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmFfQVNOMV9PQkpFQ1QoV09MRlNTTF9CSU8gKmJwLCBXT0xGU1NMX0FTTjFfT0JKRUNUICphKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX2kyZF9BU04xX09CSkVDVChXT0xGU1NMX0FTTjFfT0JKRUNUICphLCB1bnNpZ25lZCBjaGFyICoqcHApOworV09MRlNTTF9BUEkgdm9pZCBTU0xfQ1RYX3NldF90bXBfZGhfY2FsbGJhY2soV09MRlNTTF9DVFggKmN0eCwgV09MRlNTTF9ESCAqKCpkaCkgKFdPTEZTU0wgKnNzbCwgaW50IGlzX2V4cG9ydCwgaW50IGtleWxlbmd0aCkpOworV09MRlNTTF9BUEkgV09MRl9TVEFDS19PRihTU0xfQ09NUCkgKlNTTF9DT01QX2dldF9jb21wcmVzc2lvbl9tZXRob2RzKHZvaWQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhXT0xGU1NMX1g1MDlfU1RPUkUgKnN0ciwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqZGlyKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1g1MDlfU1RPUkVfYWRkX2NybChXT0xGU1NMX1g1MDlfU1RPUkUgKmN0eCwgV09MRlNTTF9YNTA5X0NSTCAqeCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19TU0xfQ0lQSEVSX251bShjb25zdCBXT0xGX1NUQUNLX09GKFdPTEZTU0xfQ0lQSEVSKSogcCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19TU0xfQ0lQSEVSX2ZpbmQoCisgICAgICAgIFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9DSVBIRVIpKiBzaywgY29uc3QgV09MRlNTTF9DSVBIRVIqIHRvRmluZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfc2tfU1NMX0NJUEhFUl9mcmVlKFdPTEZfU1RBQ0tfT0YoV09MRlNTTF9DSVBIRVIpKiBzayk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9za19TU0xfQ09NUF96ZXJvKFdPTEZTU0xfU1RBQ0sqIHN0KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX3NrX1NTTF9DT01QX251bShXT0xGX1NUQUNLX09GKFdPTEZTU0xfQ09NUCkqIHNrKTsKK1dPTEZTU0xfQVBJIFdPTEZTU0xfQ0lQSEVSKiB3b2xmU1NMX3NrX1NTTF9DSVBIRVJfdmFsdWUoV09MRlNTTF9TVEFDSyogc2ssIGludCBpKTsKK1dPTEZTU0xfQVBJIHZvaWQgRVJSX2xvYWRfU1NMX3N0cmluZ3Modm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfRUNfUE9JTlRfZHVtcChjb25zdCBjaGFyICptc2csIGNvbnN0IFdPTEZTU0xfRUNfUE9JTlQgKnApOworCitXT0xGU1NMX0FQSSBjb25zdCBjaGFyICp3b2xmU1NMX0FTTjFfdGFnMnN0cihpbnQgdGFnKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0FTTjFfU1RSSU5HX3ByaW50X2V4KFdPTEZTU0xfQklPICpvdXQsIFdPTEZTU0xfQVNOMV9TVFJJTkcgKnN0ciwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9BU04xX1NUUklOR19wcmludChXT0xGU1NMX0JJTyAqb3V0LCBXT0xGU1NMX0FTTjFfU1RSSU5HICpzdHIpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQVNOMV9USU1FX2dldF9sZW5ndGgoV09MRlNTTF9BU04xX1RJTUUgKnQpOworV09MRlNTTF9BUEkgdW5zaWduZWQgY2hhciogd29sZlNTTF9BU04xX1RJTUVfZ2V0X2RhdGEoV09MRlNTTF9BU04xX1RJTUUgKnQpOworV09MRlNTTF9BUEkgV09MRlNTTF9BU04xX1RJTUUgKndvbGZTU0xfQVNOMV9USU1FX3RvX2dlbmVyYWxpemVkdGltZShXT0xGU1NMX0FTTjFfVElNRSAqdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FTTjFfVElNRSAqKm91dCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9pMmNfQVNOMV9JTlRFR0VSKFdPTEZTU0xfQVNOMV9JTlRFR0VSICphLCB1bnNpZ25lZCBjaGFyICoqcHApOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfYTJpX0FTTjFfSU5URUdFUihXT0xGU1NMX0JJTyAqYmlvLCBXT0xGU1NMX0FTTjFfSU5URUdFUiAqYXNuMSwKKyAgICAgICAgY2hhciAqYnVmLCBpbnQgc2l6ZSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X0NBX251bShXT0xGU1NMX1g1MDlfU1RPUkUgKnN0b3JlKTsKK1dPTEZTU0xfQVBJIGxvbmcgd29sZlNTTF9YNTA5X2dldF92ZXJzaW9uKGNvbnN0IFdPTEZTU0xfWDUwOSAqeCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9YNTA5X2dldF9zaWduYXR1cmVfbmlkKGNvbnN0IFdPTEZTU0xfWDUwOSogeCk7CisKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX1BFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5KFdPTEZTU0xfQklPKiBiaW8sCisgICAgV09MRlNTTF9FVlBfUEtFWSogcGtleSwgY29uc3QgV09MRlNTTF9FVlBfQ0lQSEVSKiBlbmMsIGNoYXIqIHBhc3N3ZCwKKyAgICBpbnQgcGFzc3dkU3osIHBlbV9wYXNzd29yZF9jYiogY2IsIHZvaWQqIGN0eCk7CitXT0xGU1NMX0FQSSBXT0xGU1NMX0VWUF9QS0VZKiB3b2xmU1NMX2QyaV9QS0NTOFByaXZhdGVLZXlfYmlvKFdPTEZTU0xfQklPKiBiaW8sCisgICAgV09MRlNTTF9FVlBfUEtFWSoqIHBrZXksIHBlbV9wYXNzd29yZF9jYiogY2IsIHZvaWQqIHUpOworV09MRlNTTF9BUEkgV09MRlNTTF9FVlBfUEtFWSogd29sZlNTTF9kMmlfQXV0b1ByaXZhdGVLZXkoCisgICAgV09MRlNTTF9FVlBfUEtFWSoqIHBrZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIqKiBkYXRhLCBsb25nIGxlbmd0aCk7CisKKworI2VuZGlmIC8qIE9QRU5TU0xfRVhUUkEgfHwgT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMICovCisKKyNpZmRlZiBIQVZFX1BLX0NBTExCQUNLUworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfSXNQcml2YXRlUGtTZXQoV09MRlNTTCogc3NsKTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NUWF9Jc1ByaXZhdGVQa1NldChXT0xGU1NMX0NUWCogY3R4KTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9FTkNSWVBUX1RIRU5fTUFDCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfQWxsb3dFbmNyeXB0VGhlbk1hYyhXT0xGU1NMX0NUWCAqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQWxsb3dFbmNyeXB0VGhlbk1hYyhXT0xGU1NMICpzLCBpbnQpOworI2VuZGlmCisKKy8qIFRoaXMgZmVhdHVyZSBpcyB1c2VkIHRvIHNldCBhIGZpeGVkIGVwaGVtZXJhbCBrZXkgYW5kIGlzIGZvciB0ZXN0aW5nIG9ubHkgKi8KKy8qIEN1cnJlbnRseSBhbGxvd3MgRUNESEUgYW5kIERIRSBvbmx5ICovCisjaWZkZWYgV09MRlNTTF9TVEFUSUNfRVBIRU1FUkFMCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfc2V0X2VwaGVtZXJhbF9rZXkoV09MRlNTTF9DVFgqIGN0eCwgaW50IGtleUFsZ28sCisgICAgY29uc3QgY2hhcioga2V5LCB1bnNpZ25lZCBpbnQga2V5U3osIGludCBmb3JtYXQpOworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfc2V0X2VwaGVtZXJhbF9rZXkoV09MRlNTTCogc3NsLCBpbnQga2V5QWxnbywKKyAgICBjb25zdCBjaGFyKiBrZXksIHVuc2lnbmVkIGludCBrZXlTeiwgaW50IGZvcm1hdCk7CisKKy8qIHJldHVybnMgcG9pbnRlciB0byBsb2FkZWQga2V5IGFzIEFTTi4xL0RFUiAqLworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ1RYX2dldF9lcGhlbWVyYWxfa2V5KFdPTEZTU0xfQ1RYKiBjdHgsIGludCBrZXlBbGdvLCAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKioga2V5LCB1bnNpZ25lZCBpbnQqIGtleVN6KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX2dldF9lcGhlbWVyYWxfa2V5KFdPTEZTU0wqIHNzbCwgaW50IGtleUFsZ28sIAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqKiBrZXksIHVuc2lnbmVkIGludCoga2V5U3opOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9FVlBfUEtFWV9wYXJhbV9jaGVjayhXT0xGU1NMX0VWUF9QS0VZX0NUWCogY3R4KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfc2V0X3NlY3VyaXR5X2xldmVsKFdPTEZTU0xfQ1RYKiBjdHgsIGludCBsZXZlbCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DVFhfZ2V0X3NlY3VyaXR5X2xldmVsKGNvbnN0IFdPTEZTU0xfQ1RYKiBjdHgpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TRVNTSU9OX2lzX3Jlc3VtYWJsZShjb25zdCBXT0xGU1NMX1NFU1NJT04gKnMpOworCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1JZUFRPX2ZyZWUodm9pZCAqc3RyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CitXT0xGU1NMX0FQSSB2b2lkICp3b2xmU1NMX0NSWVBUT19tYWxsb2Moc2l6ZV90IG51bSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworCitXT0xGU1NMX0FQSSBXT0xGU1NMX0NPTkZfQ1RYKiB3b2xmU1NMX0NPTkZfQ1RYX25ldyh2b2lkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DT05GX0NUWF9mcmVlKFdPTEZTU0xfQ09ORl9DVFgqIGNjdHgpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0NPTkZfQ1RYX3NldF9zc2xfY3R4KFdPTEZTU0xfQ09ORl9DVFgqIGNjdHgsIFdPTEZTU0xfQ1RYICpjdHgpOworV09MRlNTTF9BUEkgdW5zaWduZWQgaW50IHdvbGZTU0xfQ09ORl9DVFhfc2V0X2ZsYWdzKFdPTEZTU0xfQ09ORl9DVFgqIGNjdHgsIHVuc2lnbmVkIGludCBmbGFncyk7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9DT05GX0NUWF9maW5pc2goV09MRlNTTF9DT05GX0NUWCogY2N0eCk7CisKKyNkZWZpbmUgV09MRlNTTF9DT05GX0ZMQUdfQ01ETElORSAgICAgICAweDEKKyNkZWZpbmUgV09MRlNTTF9DT05GX0ZMQUdfRklMRSAgICAgICAgICAweDIKKyNkZWZpbmUgV09MRlNTTF9DT05GX0ZMQUdfQ0VSVElGSUNBVEUgICAweDIwCisKKyNkZWZpbmUgV09MRlNTTF9DT05GX1RZUEVfU1RSSU5HICAgICAgICAweDEKKyNkZWZpbmUgV09MRlNTTF9DT05GX1RZUEVfRklMRSAgICAgICAgICAweDIKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfQ09ORl9jbWQoV09MRlNTTF9DT05GX0NUWCogY2N0eCwgY29uc3QgY2hhciogY21kLCBjb25zdCBjaGFyKiB2YWx1ZSk7CisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSAqLworI2lmIGRlZmluZWQoSEFWRV9FWF9EQVRBKSB8fCBkZWZpbmVkKEZPUlRSRVNTKSB8fCBkZWZpbmVkKFdPTEZTU0xfV1BBU19TTUFMTCkKK1dPTEZTU0xfQVBJIGludCB3b2xmU1NMX0NSWVBUT19nZXRfZXhfbmV3X2luZGV4KGludCBjbGFzc19pbmRleCwgbG9uZyBhcmdsLCB2b2lkICphcmdwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfQ1JZUFRPX0VYX25ldyogbmV3X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9DUllQVE9fRVhfZHVwKiBkdXBfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0NSWVBUT19FWF9mcmVlKiBmcmVlX2Z1bmMpOworI2VuZGlmIC8qIEhBVkVfRVhfREFUQSB8fCBGT1JUUkVTUyAqLworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIFdPTEZTU0xfU1NMX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3Rlc3QuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWNlNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvdGVzdC5oCkBAIC0wLDAgKzEsNDgwNSBAQAorLyogdGVzdC5oICovCisKKyNpZm5kZWYgd29sZlNTTF9URVNUX0gKKyNkZWZpbmUgd29sZlNTTF9URVNUX0gKKworI2lmZGVmIEZVU0lPTl9SVE9TCisgICAgI2luY2x1ZGUgPGZjbHN0ZGlvLmg+CisgICAgI2luY2x1ZGUgPGZjbHN0ZGxpYi5oPgorI2Vsc2UKKyAgICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorICAgICNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL2Vycm9yLXNzbC5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3JhbmRvbS5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L21lbV90cmFjay5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmlvLmg+CisjaWYgZGVmaW5lZChTSE9XX0NFUlRTKSAmJiBcCisgICAgKGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpKQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc24uaD4gLyogZm9yIGRvbWFpbiBjb21wb25lbnQgTklEIHZhbHVlICovCisjZW5kaWYKKworI2lmZGVmIEFUT01JQ19VU0VSCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2Flcy5oPgorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hcmM0Lmg+CisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2htYWMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfUEtfQ0FMTEJBQ0tTCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2Fzbi5oPgorICAgICNpZm5kZWYgTk9fUlNBCisgICAgICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9yc2EuaD4KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgSEFWRV9FQ0MKKyAgICAgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2VjYy5oPgorICAgICNlbmRpZiAvKiBIQVZFX0VDQyAqLworICAgICNpZm5kZWYgTk9fREgKKyAgICAgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2RoLmg+CisgICAgI2VuZGlmIC8qICFOT19ESCAqLworICAgICNpZmRlZiBIQVZFX0VEMjU1MTkKKyAgICAgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2VkMjU1MTkuaD4KKyAgICAjZW5kaWYgLyogSEFWRV9FRDI1NTE5ICovCisgICAgI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorICAgICAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvY3VydmUyNTUxOS5oPgorICAgICNlbmRpZiAvKiBIQVZFX0VDQyAqLworICAgICNpZmRlZiBIQVZFX0VENDQ4CisgICAgICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9lZDQ0OC5oPgorICAgICNlbmRpZiAvKiBIQVZFX0VENDQ4ICovCisgICAgI2lmZGVmIEhBVkVfQ1VSVkU0NDgKKyAgICAgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2N1cnZlNDQ4Lmg+CisgICAgI2VuZGlmIC8qIEhBVkVfRUNDICovCisjZW5kaWYgLypIQVZFX1BLX0NBTExCQUNLUyAqLworCisjaWZkZWYgVVNFX1dJTkRPV1NfQVBJCisgICAgI2luY2x1ZGUgPHdpbnNvY2syLmg+CisgICAgI2luY2x1ZGUgPHByb2Nlc3MuaD4KKyAgICAjaWZkZWYgVEVTVF9JUFY2ICAgICAgICAgICAgLyogZG9uJ3QgcmVxdWlyZSBuZXdlciBTREsgZm9yIElQVjQgKi8KKyAgICAgICAgI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisgICAgICAgICNpbmNsdWRlIDx3c3BpYXBpLmg+CisgICAgI2VuZGlmCisgICAgI2RlZmluZSBTT0NLRVRfVCBTT0NLRVQKKyAgICAjZGVmaW5lIFNOUFJJTlRGIF9zbnByaW50ZgorICAgICNkZWZpbmUgWFNMRUVQX01TKHQpIFNsZWVwKHQpCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkgfHwgZGVmaW5lZChXT0xGU1NMX0tFSUxfVENQX05FVCkKKyAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgI2luY2x1ZGUgInJsX25ldC5oIgorICAgICNkZWZpbmUgU09DS0VUX1QgaW50CisgICAgdHlwZWRlZiBpbnQgc29ja2xlbl90IDsKKyAgICAjZGVmaW5lIGluZXRfYWRkciB3b2xmU1NMX2luZXRfYWRkcgorICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHdvbGZTU0xfaW5ldF9hZGRyKGNvbnN0IGNoYXIgKmNwKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGFbNF0gOyB1bnNpZ25lZCBsb25nIHJldCA7CisgICAgICAgIHNzY2FuZihjcCwgIiVkLiVkLiVkLiVkIiwgJmFbMF0sICZhWzFdLCAmYVsyXSwgJmFbM10pIDsKKyAgICAgICAgcmV0ID0gKChhWzNdPDwyNCkgKyAoYVsyXTw8MTYpICsgKGFbMV08PDgpICsgYVswXSkgOworICAgICAgICByZXR1cm4ocmV0KSA7CisgICAgfQorICAgICNpZiBkZWZpbmVkKEhBVkVfS0VJTF9SVFgpCisgICAgICAgICNkZWZpbmUgWFNMRUVQX01TKHQpICBvc19kbHlfd2FpdCh0KQorICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9DTVNJU19SVE9TKSB8fCBkZWZpbmVkKFdPTEZTU0xfQ01TSVNfUlRPU3YyKQorICAgICAgICAjZGVmaW5lIFhTTEVFUF9NUyh0KSAgb3NEZWxheSh0KQorICAgICNlbmRpZgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX1RJUlRPUykKKyAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICNpbmNsdWRlIDx0aS9zeXNiaW9zL2tubC9UYXNrLmg+CisgICAgc3RydWN0IGhvc3RlbnQgeworICAgICAgICBjaGFyICpoX25hbWU7IC8qIG9mZmljaWFsIG5hbWUgb2YgaG9zdCAqLworICAgICAgICBjaGFyICoqaF9hbGlhc2VzOyAvKiBhbGlhcyBsaXN0ICovCisgICAgICAgIGludCBoX2FkZHJ0eXBlOyAvKiBob3N0IGFkZHJlc3MgdHlwZSAqLworICAgICAgICBpbnQgaF9sZW5ndGg7IC8qIGxlbmd0aCBvZiBhZGRyZXNzICovCisgICAgICAgIGNoYXIgKipoX2FkZHJfbGlzdDsgLyogbGlzdCBvZiBhZGRyZXNzZXMgZnJvbSBuYW1lIHNlcnZlciAqLworICAgIH07CisgICAgI2RlZmluZSBTT0NLRVRfVCBpbnQKKyAgICAjZGVmaW5lIFhTTEVFUF9NUyh0KSBUYXNrX3NsZWVwKHQvMTAwMCkKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9WWFdPUktTKQorICAgICNpbmNsdWRlIDxob3N0TGliLmg+CisgICAgI2luY2x1ZGUgPHNvY2tMaWIuaD4KKyAgICAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisgICAgI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICNpbmNsdWRlIDxzZWxlY3RMaWIuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAgICAjaW5jbHVkZSA8ZmNudGwuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyAgICAjaW5jbHVkZSA8bmV0ZGIuaD4KKyAgICAjaW5jbHVkZSA8cHRocmVhZC5oPgorICAgICNkZWZpbmUgU09DS0VUX1QgaW50CisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPG5ldC9zb2NrZXQuaD4KKyAgICAjZGVmaW5lIFNPQ0tFVF9UIGludAorICAgICNkZWZpbmUgU09MX1NPQ0tFVCAxCisgICAgI2RlZmluZSBXT0xGU1NMX1VTRV9HRVRBRERSSU5GTworCisgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5ldF9hZGRyKGNvbnN0IGNoYXIgKmNwKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGFbNF07IHVuc2lnbmVkIGxvbmcgcmV0OworICAgICAgICBpbnQgaSwgajsKKyAgICAgICAgZm9yIChpPTAsIGo9MDsgaTw0OyBpKyspIHsKKyAgICAgICAgICAgIGFbaV0gPSAwOworICAgICAgICAgICAgd2hpbGUgKGNwW2pdICE9ICcuJyAmJiBjcFtqXSAhPSAnXDAnKSB7CisgICAgICAgICAgICAgICAgYVtpXSAqPSAxMDsKKyAgICAgICAgICAgICAgICBhW2ldICs9IGNwW2pdIC0gJzAnOworICAgICAgICAgICAgICAgIGorKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXQgPSAoKGFbM108PDI0KSArIChhWzJdPDwxNikgKyAoYVsxXTw8OCkgKyBhWzBdKSA7CisgICAgICAgIHJldHVybihyZXQpIDsKKyAgICB9CisjZWxzZQorICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIFdPTEZTU0xfTEVBTlBTSworICAgICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAgICAjaW5jbHVkZSA8bmV0ZGIuaD4KKyAgICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICAgICNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorICAgICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAgICAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisgICAgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICAjaW5jbHVkZSA8cHRocmVhZC5oPgorICAgICNpbmNsdWRlIDxmY250bC5oPgorICAgICNpZmRlZiBURVNUX0lQVjYKKyAgICAgICAgI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgI2VuZGlmCisjZW5kaWYKKyAgICAjaWZkZWYgRlJFRVNDQUxFX01RWAorICAgICAgICB0eXBlZGVmIGludCBzb2NrbGVuX3QgOworICAgICNlbmRpZgorICAgICNkZWZpbmUgU09DS0VUX1QgaW50CisgICAgI2lmbmRlZiBTT19OT1NJR1BJUEUKKyAgICAgICAgI2luY2x1ZGUgPHNpZ25hbC5oPiAgLyogaWdub3JlIFNJR1BJUEUgKi8KKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIFNOUFJJTlRGIHNucHJpbnRmCisKKyAgICAjZGVmaW5lIFhTRUxFQ1RfV0FJVCh4LHkpIGRvIHsgXAorICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0diA9IHsoKHgpICsgKCh5KSAvIDEwMDAwMDApKSwoKHkpICUgMTAwMDAwMCl9OyBcCisgICAgICAgIHNlbGVjdCgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmdHYpOyBcCisgICAgfSB3aGlsZSAoMCkKKyAgICAjZGVmaW5lIFhTTEVFUF9VUyh1KSBYU0VMRUNUX1dBSVQoMCx1KQorICAgICNkZWZpbmUgWFNMRUVQX01TKG0pIFhTRUxFQ1RfV0FJVCgwLChtKSoxMDAwKQorI2VuZGlmIC8qIFVTRV9XSU5ET1dTX0FQSSAqLworCisjaWZuZGVmIFhTTEVFUF9NUworICAgICNkZWZpbmUgWFNMRUVQX01TKHQpIHNsZWVwKHQvMTAwMCkKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc3luYy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9DQVZJVU0KKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcG9ydC9jYXZpdW0vY2F2aXVtX25pdHJveC5oPgorI2VuZGlmCisjaWZkZWYgX01TQ19WRVIKKyAgICAvKiBkaXNhYmxlIGNvbnZlcnNpb24gd2FybmluZyAqLworICAgIC8qIDQ5OTYgd2FybmluZyB0byB1c2UgTVMgZXh0ZW5zaW9ucyBlLmcuLCBzdHJjcHlfcyBpbnN0ZWFkIG9mIHN0cm5jcHkgKi8KKyAgICAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ0IDQ5OTYpCisjZW5kaWYKKworI2lmbmRlZiBXT0xGU1NMX0NJUEhFUl9MSVNUX01BWF9TSVpFCisgICAgI2RlZmluZSBXT0xGU1NMX0NJUEhFUl9MSVNUX01BWF9TSVpFIDQwOTYKKyNlbmRpZgorLyogQnVmZmVyIGZvciBiZW5jaG1hcmsgdGVzdHMgKi8KKyNpZm5kZWYgVEVTVF9CVUZGRVJfU0laRQorICAgICNkZWZpbmUgVEVTVF9CVUZGRVJfU0laRSAxNjM4NAorI2VuZGlmCisKKyNpZm5kZWYgV09MRlNTTF9IQVZFX01JTgorICAgICNkZWZpbmUgV09MRlNTTF9IQVZFX01JTgorICAgIHN0YXRpYyBXQ19JTkxJTkUgd29yZDMyIG1pbih3b3JkMzIgYSwgd29yZDMyIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA+IGIgPyBiIDogYTsKKyAgICB9CisjZW5kaWYgLyogV09MRlNTTF9IQVZFX01JTiAqLworCisvKiBTb2NrZXQgSGFuZGxpbmcgKi8KKyNpZm5kZWYgV09MRlNTTF9TT0NLRVRfSU5WQUxJRAorI2lmZGVmIFVTRV9XSU5ET1dTX0FQSQorICAgICNkZWZpbmUgV09MRlNTTF9TT0NLRVRfSU5WQUxJRCAgKChTT0NLRVRfVClJTlZBTElEX1NPQ0tFVCkKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9USVJUT1MpCisgICAgI2RlZmluZSBXT0xGU1NMX1NPQ0tFVF9JTlZBTElEICAoKFNPQ0tFVF9UKS0xKQorI2Vsc2UKKyAgICAjZGVmaW5lIFdPTEZTU0xfU09DS0VUX0lOVkFMSUQgIChTT0NLRVRfVCkoMCkKKyNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfU09DS0VUX0lOVkFMSUQgKi8KKworI2lmbmRlZiBXT0xGU1NMX1NPQ0tFVF9JU19JTlZBTElECisjaWYgZGVmaW5lZChVU0VfV0lORE9XU19BUEkpIHx8IGRlZmluZWQoV09MRlNTTF9USVJUT1MpCisgICAgI2RlZmluZSBXT0xGU1NMX1NPQ0tFVF9JU19JTlZBTElEKHMpICAoKFNPQ0tFVF9UKShzKSA9PSBXT0xGU1NMX1NPQ0tFVF9JTlZBTElEKQorI2Vsc2UKKyAgICAjZGVmaW5lIFdPTEZTU0xfU09DS0VUX0lTX0lOVkFMSUQocykgICgoU09DS0VUX1QpKHMpIDwgV09MRlNTTF9TT0NLRVRfSU5WQUxJRCkKKyNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfU09DS0VUX0lTX0lOVkFMSUQgKi8KKworI2lmIGRlZmluZWQoX19NQUNIX18pIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfQVBJKQorICAgICNpZm5kZWYgX1NPQ0tMRU5fVAorICAgICAgICB0eXBlZGVmIGludCBzb2NrbGVuX3Q7CisgICAgI2VuZGlmCisjZW5kaWYKKworCisvKiBIUFVYIGRvZXNuJ3QgdXNlIHNvY2tsZW50X3QgZm9yIHRoaXJkIHBhcmFtZXRlciB0byBhY2NlcHQsIHVubGVzcworICAgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCBpcyBkZWZpbmVkICovCisjaWYgIWRlZmluZWQoX19ocHV4X18pICYmICFkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkgJiYgIWRlZmluZWQoV09MRlNTTF9JQVJfQVJNKVwKKyAmJiAhZGVmaW5lZChXT0xGU1NMX1JPV0xFWV9BUk0pICAmJiAhZGVmaW5lZChXT0xGU1NMX0tFSUxfVENQX05FVCkKKyAgICB0eXBlZGVmIHNvY2tsZW5fdCogQUNDRVBUX1RISVJEX1Q7CisjZWxzZQorICAgICNpZiBkZWZpbmVkIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyAgICAgICAgdHlwZWRlZiBzb2NrbGVuX3QqIEFDQ0VQVF9USElSRF9UOworICAgICNlbHNlCisgICAgICAgIHR5cGVkZWYgaW50KiAgICAgICBBQ0NFUFRfVEhJUkRfVDsKKyAgICAjZW5kaWYKKyNlbmRpZgorCisKKworI2lmZGVmIFNJTkdMRV9USFJFQURFRAorICAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICBUSFJFQURfUkVUVVJOOworICAgIHR5cGVkZWYgdm9pZCogICAgICAgICBUSFJFQURfVFlQRTsKKyAgICAjZGVmaW5lIFdPTEZTU0xfVEhSRUFECisjZWxzZQorICAgICNpZiBkZWZpbmVkKF9QT1NJWF9USFJFQURTKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykKKyAgICAgICAgdHlwZWRlZiB2b2lkKiAgICAgICAgIFRIUkVBRF9SRVRVUk47CisgICAgICAgIHR5cGVkZWYgcHRocmVhZF90ICAgICBUSFJFQURfVFlQRTsKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1RIUkVBRAorICAgICAgICAjZGVmaW5lIElORklOSVRFIC0xCisgICAgICAgICNkZWZpbmUgV0FJVF9PQkpFQ1RfMCAwTAorICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9NREtfQVJNKXx8IGRlZmluZWQoV09MRlNTTF9LRUlMX1RDUF9ORVQpIHx8IGRlZmluZWQoRlJFRVNDQUxFX01RWCkKKyAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgIFRIUkVBRF9SRVRVUk47CisgICAgICAgIHR5cGVkZWYgaW50ICAgICAgICAgICBUSFJFQURfVFlQRTsKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1RIUkVBRAorICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9USVJUT1MpCisgICAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICBUSFJFQURfUkVUVVJOOworICAgICAgICB0eXBlZGVmIFRhc2tfSGFuZGxlICAgVEhSRUFEX1RZUEU7CisgICAgICAgICNkZWZpbmUgV09MRlNTTF9USFJFQUQKKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICBUSFJFQURfUkVUVVJOOworICAgICAgICB0eXBlZGVmIHN0cnVjdCBrX3RocmVhZCBUSFJFQURfVFlQRTsKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1RIUkVBRAorICAgICNlbHNlCisgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICBUSFJFQURfUkVUVVJOOworICAgICAgICB0eXBlZGVmIGludHB0cl90ICAgICAgVEhSRUFEX1RZUEU7CisgICAgICAgICNkZWZpbmUgV09MRlNTTF9USFJFQUQgX19zdGRjYWxsCisgICAgI2VuZGlmCisjZW5kaWYKKworCisjaWZkZWYgVEVTVF9JUFY2CisgICAgdHlwZWRlZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IFNPQ0tBRERSX0lOX1Q7CisgICAgI2RlZmluZSBBRl9JTkVUX1YgICAgQUZfSU5FVDYKKyNlbHNlCisgICAgdHlwZWRlZiBzdHJ1Y3Qgc29ja2FkZHJfaW4gIFNPQ0tBRERSX0lOX1Q7CisgICAgI2RlZmluZSBBRl9JTkVUX1YgICAgQUZfSU5FVAorI2VuZGlmCisKKworI2lmbmRlZiBXT0xGU1NMX05PX1RMUzEyCisjZGVmaW5lIFNFUlZFUl9ERUZBVUxUX1ZFUlNJT04gMworI2Vsc2UKKyNkZWZpbmUgU0VSVkVSX0RFRkFVTFRfVkVSU0lPTiA0CisjZW5kaWYKKyNkZWZpbmUgU0VSVkVSX0RUTFNfREVGQVVMVF9WRVJTSU9OICgtMikKKyNkZWZpbmUgU0VSVkVSX0lOVkFMSURfVkVSU0lPTiAoLTk5KQorI2RlZmluZSBTRVJWRVJfRE9XTkdSQURFX1ZFUlNJT04gKC05OCkKKyNpZm5kZWYgV09MRlNTTF9OT19UTFMxMgorI2RlZmluZSBDTElFTlRfREVGQVVMVF9WRVJTSU9OIDMKKyNlbHNlCisjZGVmaW5lIENMSUVOVF9ERUZBVUxUX1ZFUlNJT04gNAorI2VuZGlmCisjZGVmaW5lIENMSUVOVF9EVExTX0RFRkFVTFRfVkVSU0lPTiAoLTIpCisjZGVmaW5lIENMSUVOVF9JTlZBTElEX1ZFUlNJT04gKC05OSkKKyNkZWZpbmUgQ0xJRU5UX0RPV05HUkFERV9WRVJTSU9OICgtOTgpCisjZGVmaW5lIEVJVEhFUl9ET1dOR1JBREVfVkVSU0lPTiAoLTk3KQorI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmIGRlZmluZWQoV09MRlNTTF9NQVhfU1RSRU5HVEgpCisgICAgI2RlZmluZSBERUZBVUxUX01JTl9ESEtFWV9CSVRTIDIwNDgKKyAgICAjZGVmaW5lIERFRkFVTFRfTUFYX0RIS0VZX0JJVFMgMzA3MgorI2Vsc2UKKyAgICAjZGVmaW5lIERFRkFVTFRfTUlOX0RIS0VZX0JJVFMgMTAyNAorICAgICNkZWZpbmUgREVGQVVMVF9NQVhfREhLRVlfQklUUyAyMDQ4CisjZW5kaWYKKyNpZiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiBkZWZpbmVkKFdPTEZTU0xfTUFYX1NUUkVOR1RIKQorICAgICNkZWZpbmUgREVGQVVMVF9NSU5fUlNBS0VZX0JJVFMgMjA0OAorI2Vsc2UKKyAgICAjaWZuZGVmIERFRkFVTFRfTUlOX1JTQUtFWV9CSVRTCisgICAgI2RlZmluZSBERUZBVUxUX01JTl9SU0FLRVlfQklUUyAxMDI0CisgICAgI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiBkZWZpbmVkKFdPTEZTU0xfTUFYX1NUUkVOR1RIKQorICAgICNkZWZpbmUgREVGQVVMVF9NSU5fRUNDS0VZX0JJVFMgMjU2CisjZWxzZQorICAgICNpZm5kZWYgREVGQVVMVF9NSU5fRUNDS0VZX0JJVFMKKyAgICAjZGVmaW5lIERFRkFVTFRfTUlOX0VDQ0tFWV9CSVRTIDIyNAorICAgICNlbmRpZgorI2VuZGlmCisKKy8qIGFsbCBjZXJ0cyByZWxhdGl2ZSB0byB3b2xmU1NMIGhvbWUgZGlyZWN0b3J5IG5vdyAqLworI2lmIGRlZmluZWQoV09MRlNTTF9OT19DVVJSRElSKSB8fCBkZWZpbmVkKFdPTEZTU0xfTURLX1NIRUxMKQorI2RlZmluZSBjYUNlcnRGaWxlICAgICAgICAiY2VydHMvY2EtY2VydC5wZW0iCisjZGVmaW5lIGVjY0NlcnRGaWxlICAgICAgICJjZXJ0cy9zZXJ2ZXItZWNjLnBlbSIKKyNkZWZpbmUgZWNjS2V5RmlsZSAgICAgICAgImNlcnRzL2VjYy1rZXkucGVtIgorI2RlZmluZSBlY2NSc2FDZXJ0RmlsZSAgICAiY2VydHMvc2VydmVyLWVjYy1yc2EucGVtIgorI2RlZmluZSBzdnJDZXJ0RmlsZSAgICAgICAiY2VydHMvc2VydmVyLWNlcnQucGVtIgorI2RlZmluZSBzdnJLZXlGaWxlICAgICAgICAiY2VydHMvc2VydmVyLWtleS5wZW0iCisjZGVmaW5lIGNsaUNlcnRGaWxlICAgICAgICJjZXJ0cy9jbGllbnQtY2VydC5wZW0iCisjZGVmaW5lIGNsaUNlcnREZXJGaWxlICAgICJjZXJ0cy9jbGllbnQtY2VydC5kZXIiCisjZGVmaW5lIGNsaUNlcnRGaWxlRXh0ICAgICJjZXJ0cy9jbGllbnQtY2VydC1leHQucGVtIgorI2RlZmluZSBjbGlDZXJ0RGVyRmlsZUV4dCAiY2VydHMvY2xpZW50LWNlcnQtZXh0LmRlciIKKyNkZWZpbmUgY2xpS2V5RmlsZSAgICAgICAgImNlcnRzL2NsaWVudC1rZXkucGVtIgorI2RlZmluZSBudHJ1Q2VydEZpbGUgICAgICAiY2VydHMvbnRydS1jZXJ0LnBlbSIKKyNkZWZpbmUgbnRydUtleUZpbGUgICAgICAgImNlcnRzL250cnUta2V5LnJhdyIKKyNkZWZpbmUgZGhQYXJhbUZpbGUgICAgICAgImNlcnRzL2RoMjA0OC5wZW0iCisjZGVmaW5lIGNsaUVjY0tleUZpbGUgICAgICJjZXJ0cy9lY2MtY2xpZW50LWtleS5wZW0iCisjZGVmaW5lIGNsaUVjY0NlcnRGaWxlICAgICJjZXJ0cy9jbGllbnQtZWNjLWNlcnQucGVtIgorI2RlZmluZSBjYUVjY0NlcnRGaWxlICAgICAiY2VydHMvY2EtZWNjLWNlcnQucGVtIgorI2RlZmluZSBjcmxQZW1EaXIgICAgICAgICAiY2VydHMvY3JsIgorI2RlZmluZSBlZENlcnRGaWxlICAgICAgICAiY2VydHMvZWQyNTUxOS9zZXJ2ZXItZWQyNTUxOS1jZXJ0LnBlbSIKKyNkZWZpbmUgZWRLZXlGaWxlICAgICAgICAgImNlcnRzL2VkMjU1MTkvc2VydmVyLWVkMjU1MTktcHJpdi5wZW0iCisjZGVmaW5lIGNsaUVkQ2VydEZpbGUgICAgICJjZXJ0cy9lZDI1NTE5L2NsaWVudC1lZDI1NTE5LnBlbSIKKyNkZWZpbmUgY2xpRWRLZXlGaWxlICAgICAgImNlcnRzL2VkMjU1MTkvY2xpZW50LWVkMjU1MTktcHJpdi5wZW0iCisjZGVmaW5lIGNhRWRDZXJ0RmlsZSAgICAgICJjZXJ0cy9lZDI1NTE5L2NhLWVkMjU1MTkucGVtIgorI2RlZmluZSBlZDQ0OENlcnRGaWxlICAgICAiY2VydHMvZWQ0NDgvc2VydmVyLWVkNDQ4LWNlcnQucGVtIgorI2RlZmluZSBlZDQ0OEtleUZpbGUgICAgICAiY2VydHMvZWQ0NDgvc2VydmVyLWVkNDQ4LXByaXYucGVtIgorI2RlZmluZSBjbGlFZDQ0OENlcnRGaWxlICAiY2VydHMvZWQ0NDgvY2xpZW50LWVkNDQ4LnBlbSIKKyNkZWZpbmUgY2xpRWQ0NDhLZXlGaWxlICAgImNlcnRzL2VkNDQ4L2NsaWVudC1lZDQ0OC1wcml2LnBlbSIKKyNkZWZpbmUgY2FFZDQ0OENlcnRGaWxlICAgImNlcnRzL2VkNDQ4L2NhLWVkNDQ4LnBlbSIKKyNkZWZpbmUgY2FDZXJ0Rm9sZGVyICAgICAgImNlcnRzLyIKKyNpZmRlZiBIQVZFX1dOUgorICAgIC8qIFdoaXRld29vZCBuZXRSYW5kb20gZGVmYXVsdCBjb25maWcgZmlsZSAqLworICAgICNkZWZpbmUgd25yQ29uZmlnICAgICAid25yLWV4YW1wbGUuY29uZiIKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgY2FDZXJ0RmlsZSAgICAgICAgIi4vY2VydHMvY2EtY2VydC5wZW0iCisjZGVmaW5lIGVjY0NlcnRGaWxlICAgICAgICIuL2NlcnRzL3NlcnZlci1lY2MucGVtIgorI2RlZmluZSBlY2NLZXlGaWxlICAgICAgICAiLi9jZXJ0cy9lY2Mta2V5LnBlbSIKKyNkZWZpbmUgZWNjUnNhQ2VydEZpbGUgICAgIi4vY2VydHMvc2VydmVyLWVjYy1yc2EucGVtIgorI2RlZmluZSBzdnJDZXJ0RmlsZSAgICAgICAiLi9jZXJ0cy9zZXJ2ZXItY2VydC5wZW0iCisjZGVmaW5lIHN2cktleUZpbGUgICAgICAgICIuL2NlcnRzL3NlcnZlci1rZXkucGVtIgorI2RlZmluZSBjbGlDZXJ0RmlsZSAgICAgICAiLi9jZXJ0cy9jbGllbnQtY2VydC5wZW0iCisjZGVmaW5lIGNsaUNlcnREZXJGaWxlICAgICIuL2NlcnRzL2NsaWVudC1jZXJ0LmRlciIKKyNkZWZpbmUgY2xpQ2VydEZpbGVFeHQgICAgIi4vY2VydHMvY2xpZW50LWNlcnQtZXh0LnBlbSIKKyNkZWZpbmUgY2xpQ2VydERlckZpbGVFeHQgIi4vY2VydHMvY2xpZW50LWNlcnQtZXh0LmRlciIKKyNkZWZpbmUgY2xpS2V5RmlsZSAgICAgICAgIi4vY2VydHMvY2xpZW50LWtleS5wZW0iCisjZGVmaW5lIG50cnVDZXJ0RmlsZSAgICAgICIuL2NlcnRzL250cnUtY2VydC5wZW0iCisjZGVmaW5lIG50cnVLZXlGaWxlICAgICAgICIuL2NlcnRzL250cnUta2V5LnJhdyIKKyNkZWZpbmUgZGhQYXJhbUZpbGUgICAgICAgIi4vY2VydHMvZGgyMDQ4LnBlbSIKKyNkZWZpbmUgY2xpRWNjS2V5RmlsZSAgICAgIi4vY2VydHMvZWNjLWNsaWVudC1rZXkucGVtIgorI2RlZmluZSBjbGlFY2NDZXJ0RmlsZSAgICAiLi9jZXJ0cy9jbGllbnQtZWNjLWNlcnQucGVtIgorI2RlZmluZSBjYUVjY0NlcnRGaWxlICAgICAiLi9jZXJ0cy9jYS1lY2MtY2VydC5wZW0iCisjZGVmaW5lIGNybFBlbURpciAgICAgICAgICIuL2NlcnRzL2NybCIKKyNkZWZpbmUgZWRDZXJ0RmlsZSAgICAgICAgIi4vY2VydHMvZWQyNTUxOS9zZXJ2ZXItZWQyNTUxOS1jZXJ0LnBlbSIKKyNkZWZpbmUgZWRLZXlGaWxlICAgICAgICAgIi4vY2VydHMvZWQyNTUxOS9zZXJ2ZXItZWQyNTUxOS1wcml2LnBlbSIKKyNkZWZpbmUgY2xpRWRDZXJ0RmlsZSAgICAgIi4vY2VydHMvZWQyNTUxOS9jbGllbnQtZWQyNTUxOS5wZW0iCisjZGVmaW5lIGNsaUVkS2V5RmlsZSAgICAgICIuL2NlcnRzL2VkMjU1MTkvY2xpZW50LWVkMjU1MTktcHJpdi5wZW0iCisjZGVmaW5lIGNhRWRDZXJ0RmlsZSAgICAgICIuL2NlcnRzL2VkMjU1MTkvY2EtZWQyNTUxOS5wZW0iCisjZGVmaW5lIGVkNDQ4Q2VydEZpbGUgICAgICIuL2NlcnRzL2VkNDQ4L3NlcnZlci1lZDQ0OC1jZXJ0LnBlbSIKKyNkZWZpbmUgZWQ0NDhLZXlGaWxlICAgICAgIi4vY2VydHMvZWQ0NDgvc2VydmVyLWVkNDQ4LXByaXYucGVtIgorI2RlZmluZSBjbGlFZDQ0OENlcnRGaWxlICAiLi9jZXJ0cy9lZDQ0OC9jbGllbnQtZWQ0NDgucGVtIgorI2RlZmluZSBjbGlFZDQ0OEtleUZpbGUgICAiLi9jZXJ0cy9lZDQ0OC9jbGllbnQtZWQ0NDgtcHJpdi5wZW0iCisjZGVmaW5lIGNhRWQ0NDhDZXJ0RmlsZSAgICIuL2NlcnRzL2VkNDQ4L2NhLWVkNDQ4LnBlbSIKKyNkZWZpbmUgY2FDZXJ0Rm9sZGVyICAgICAgIi4vY2VydHMvIgorI2lmZGVmIEhBVkVfV05SCisgICAgLyogV2hpdGV3b29kIG5ldFJhbmRvbSBkZWZhdWx0IGNvbmZpZyBmaWxlICovCisgICAgI2RlZmluZSB3bnJDb25maWcgICAgICIuL3duci1leGFtcGxlLmNvbmYiCisjZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB0Y3BfcmVhZHkgeworICAgIHdvcmQxNiByZWFkeTsgICAgICAgICAgICAgIC8qIHByZWRpY2F0ZSAqLworICAgIHdvcmQxNiBwb3J0OworICAgIGNoYXIqICBzcmZOYW1lOyAgICAgLyogc2VydmVyIHJlYWR5IGZpbGUgbmFtZSAqLworI2lmIGRlZmluZWQoX1BPU0lYX1RIUkVBRFMpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKKyAgICBwdGhyZWFkX2NvbmRfdCAgY29uZDsKKyNlbmRpZgorfSB0Y3BfcmVhZHk7CisKKworc3RhdGljIFdDX0lOTElORSB2b2lkIEluaXRUY3BSZWFkeSh0Y3BfcmVhZHkqIHJlYWR5KQoreworICAgIHJlYWR5LT5yZWFkeSA9IDA7CisgICAgcmVhZHktPnBvcnQgPSAwOworICAgIHJlYWR5LT5zcmZOYW1lID0gTlVMTDsKKyNpZmRlZiBTSU5HTEVfVEhSRUFERUQKKyNlbGlmIGRlZmluZWQoX1BPU0lYX1RIUkVBRFMpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmcmVhZHktPm11dGV4LCAwKTsKKyAgICBwdGhyZWFkX2NvbmRfaW5pdCgmcmVhZHktPmNvbmQsIDApOworI2VuZGlmCit9CisKKworc3RhdGljIFdDX0lOTElORSB2b2lkIEZyZWVUY3BSZWFkeSh0Y3BfcmVhZHkqIHJlYWR5KQoreworI2lmZGVmIFNJTkdMRV9USFJFQURFRAorICAgICh2b2lkKXJlYWR5OworI2VsaWYgZGVmaW5lZChfUE9TSVhfVEhSRUFEUykgJiYgIWRlZmluZWQoX19NSU5HVzMyX18pCisgICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZyZWFkeS0+bXV0ZXgpOworICAgIHB0aHJlYWRfY29uZF9kZXN0cm95KCZyZWFkeS0+Y29uZCk7CisjZWxzZQorICAgICh2b2lkKXJlYWR5OworI2VuZGlmCit9CisKK3R5cGVkZWYgV09MRlNTTF9NRVRIT0QqICgqbWV0aG9kX3Byb3ZpZGVyKSh2b2lkKTsKK3R5cGVkZWYgdm9pZCAoKmN0eF9jYWxsYmFjaykoV09MRlNTTF9DVFgqIGN0eCk7Cit0eXBlZGVmIHZvaWQgKCpzc2xfY2FsbGJhY2spKFdPTEZTU0wqIHNzbCk7CisKK3R5cGVkZWYgc3RydWN0IGNhbGxiYWNrX2Z1bmN0aW9ucyB7CisgICAgbWV0aG9kX3Byb3ZpZGVyIG1ldGhvZDsKKyAgICBjdHhfY2FsbGJhY2sgY3R4X3JlYWR5OworICAgIHNzbF9jYWxsYmFjayBzc2xfcmVhZHk7CisgICAgc3NsX2NhbGxiYWNrIG9uX3Jlc3VsdDsKKyAgICBXT0xGU1NMX0NUWCogY3R4OworICAgIHVuc2lnbmVkIGNoYXIgaXNTaGFyZWRDdHg6MTsKK30gY2FsbGJhY2tfZnVuY3Rpb25zOworCit0eXBlZGVmIHN0cnVjdCBmdW5jX2FyZ3MgeworICAgIGludCAgICBhcmdjOworICAgIGNoYXIqKiBhcmd2OworICAgIGludCAgICByZXR1cm5fY29kZTsKKyAgICB0Y3BfcmVhZHkqIHNpZ25hbDsKKyAgICBjYWxsYmFja19mdW5jdGlvbnMgKmNhbGxiYWNrczsKK30gZnVuY19hcmdzOworCisKKworCit2b2lkIHdhaXRfdGNwX3JlYWR5KGZ1bmNfYXJncyopOworCisjaWZkZWYgV09MRlNTTF9aRVBIWVIKK3R5cGVkZWYgdm9pZCBUSFJFQURfRlVOQyh2b2lkKiwgdm9pZCosIHZvaWQqKTsKKyNlbHNlCit0eXBlZGVmIFRIUkVBRF9SRVRVUk4gV09MRlNTTF9USFJFQUQgVEhSRUFEX0ZVTkModm9pZCopOworI2VuZGlmCisKK3ZvaWQgc3RhcnRfdGhyZWFkKFRIUkVBRF9GVU5DLCBmdW5jX2FyZ3MqLCBUSFJFQURfVFlQRSopOwordm9pZCBqb2luX3RocmVhZChUSFJFQURfVFlQRSk7CisKKy8qIHdvbGZTU0wgKi8KKyNpZm5kZWYgVEVTVF9JUFY2CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHdvbGZTU0xJUCAgID0gIjEyNy4wLjAuMSI7CisjZWxzZQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB3b2xmU1NMSVAgICA9ICI6OjEiOworI2VuZGlmCitzdGF0aWMgY29uc3Qgd29yZDE2ICAgICAgd29sZlNTTFBvcnQgPSAxMTExMTsKKworCisKKyNpZm5kZWYgTVlfRVhfVVNBR0UKKyNkZWZpbmUgTVlfRVhfVVNBR0UgMgorI2VuZGlmCisKKyNpZm5kZWYgRVhJVF9GQUlMVVJFCisjZGVmaW5lIEVYSVRfRkFJTFVSRSAxCisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF9GT1JDRV9NQUxMT0NfRkFJTF9URVNUKSB8fCBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgICNpZm5kZWYgRVhJVF9TVUNDRVNTCisgICAgICAgICNkZWZpbmUgRVhJVF9TVUNDRVNTICAgMAorICAgICNlbmRpZgorICAgICNkZWZpbmUgWEVYSVQocmMpICAgcmV0dXJuIHJjCisgICAgI2RlZmluZSBYRVhJVF9UKHJjKSByZXR1cm4gKFRIUkVBRF9SRVRVUk4pcmMKKyNlbHNlCisgICAgI2RlZmluZSBYRVhJVChyYykgICBleGl0KChpbnQpKHJjKSkKKyAgICAjZGVmaW5lIFhFWElUX1QocmMpIGV4aXQoKGludCkocmMpKQorI2VuZGlmCisKKworc3RhdGljIFdDX0lOTElORQorI2lmIGRlZmluZWQoV09MRlNTTF9GT1JDRV9NQUxMT0NfRkFJTF9URVNUKSB8fCBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorVEhSRUFEX1JFVFVSTgorI2Vsc2UKK1dDX05PUkVUVVJOIHZvaWQKKyNlbmRpZgorZXJyX3N5cyhjb25zdCBjaGFyKiBtc2cpCit7CisjaWYgIWRlZmluZWQoX19HTlVDX18pCisgICAgLyogc2Nhbi1idWlsZCAod2hpY2ggcHJldGVuZHMgdG8gYmUgZ251YykgY2FuIGdldCBjb25mdXNlZCBhbmQgdGhpbmsgdGhlCisgICAgICogbXNnIHBvaW50ZXIgY2FuIGJlIG51bGwgZXZlbiB3aGVuIGhhcmRjb2RlZCBhbmQgdGhlbiBpdCB3b24ndCBleGl0LAorICAgICAqIG1ha2luZyBudWxsIHBvaW50ZXIgY2hlY2tzIGFib3ZlIHRoZSBlcnJfc3lzKCkgY2FsbCB1c2VsZXNzLgorICAgICAqIFdlIGNvdWxkIGp1c3QgYWx3YXlzIGV4aXQoKSBidXQgc29tZSBjb21waWxlcnMgd2lsbCBjb21wbGFpbiBhYm91dCBubworICAgICAqIHBvc3NpYmxlIHJldHVybiwgd2l0aCBnY2Mgd2Uga25vdyB0aGUgYXR0cmlidXRlIHRvIGhhbmRsZSB0aGF0IHdpdGgKKyAgICAgKiBXQ19OT1JFVFVSTi4gKi8KKyAgICBpZiAobXNnKQorI2VuZGlmCisgICAgeworICAgICAgICBwcmludGYoIndvbGZTU0wgZXJyb3I6ICVzXG4iLCBtc2cpOworCisgICAgICAgIFhFWElUX1QoRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisKK3N0YXRpYyBXQ19JTkxJTkUKKyNpZiBkZWZpbmVkKFdPTEZTU0xfRk9SQ0VfTUFMTE9DX0ZBSUxfVEVTVCkgfHwgZGVmaW5lZChXT0xGU1NMX1pFUEhZUikKK1RIUkVBRF9SRVRVUk4KKyNlbHNlCitXQ19OT1JFVFVSTiB2b2lkCisjZW5kaWYKK2Vycl9zeXNfd2l0aF9lcnJubyhjb25zdCBjaGFyKiBtc2cpCit7CisjaWYgIWRlZmluZWQoX19HTlVDX18pCisgICAgLyogc2Nhbi1idWlsZCAod2hpY2ggcHJldGVuZHMgdG8gYmUgZ251YykgY2FuIGdldCBjb25mdXNlZCBhbmQgdGhpbmsgdGhlCisgICAgICogbXNnIHBvaW50ZXIgY2FuIGJlIG51bGwgZXZlbiB3aGVuIGhhcmRjb2RlZCBhbmQgdGhlbiBpdCB3b24ndCBleGl0LAorICAgICAqIG1ha2luZyBudWxsIHBvaW50ZXIgY2hlY2tzIGFib3ZlIHRoZSBlcnJfc3lzKCkgY2FsbCB1c2VsZXNzLgorICAgICAqIFdlIGNvdWxkIGp1c3QgYWx3YXlzIGV4aXQoKSBidXQgc29tZSBjb21waWxlcnMgd2lsbCBjb21wbGFpbiBhYm91dCBubworICAgICAqIHBvc3NpYmxlIHJldHVybiwgd2l0aCBnY2Mgd2Uga25vdyB0aGUgYXR0cmlidXRlIHRvIGhhbmRsZSB0aGF0IHdpdGgKKyAgICAgKiBXQ19OT1JFVFVSTi4gKi8KKyAgICBpZiAobXNnKQorI2VuZGlmCisgICAgeworI2lmIGRlZmluZWQoSEFWRV9TVFJJTkdfSCkgJiYgZGVmaW5lZChIQVZFX0VSUk5PX0gpCisgICAgICAgIHByaW50Zigid29sZlNTTCBlcnJvcjogJXM6ICVzXG4iLCBtc2csIHN0cmVycm9yKGVycm5vKSk7CisjZWxzZQorICAgICAgICBwcmludGYoIndvbGZTU0wgZXJyb3I6ICVzXG4iLCBtc2cpOworI2VuZGlmCisKKyAgICAgICAgWEVYSVRfVChFWElUX0ZBSUxVUkUpOworICAgIH0KK30KKworCitleHRlcm4gaW50ICAgbXlvcHRpbmQ7CitleHRlcm4gY2hhciogbXlvcHRhcmc7CisKKy8qKgorICoKKyAqIEBwYXJhbSBhcmdjIE51bWJlciBvZiBhcmd2IHN0cmluZ3MKKyAqIEBwYXJhbSBhcmd2IEFycmF5IG9mIHN0cmluZyBhcmd1bWVudHMKKyAqIEBwYXJhbSBvcHRzdHJpbmcgU3RyaW5nIGNvbnRhaW5pbmcgdGhlIHN1cHBvcnRlZCBhbHBoYW51bWVyaWMgYXJndW1lbnRzLgorICogICAgICAgICAgICAgICAgICBBICc6JyBmb2xsb3dpbmcgYSBjaGFyYWN0ZXIgbWVhbnMgdGhhdCBpdCByZXF1aXJlcyBhCisgKiAgICAgICAgICAgICAgICAgIHZhbHVlIGluIG15b3B0YXJnIHRvIGJlIHNldC4gQSAnOycgbWVhbnMgdGhhdCB0aGUKKyAqICAgICAgICAgICAgICAgICAgbXlvcHRhcmcgaXMgb3B0aW9uYWwuIG15b3B0YXJnIGlzIHNldCB0byAiIiBpZiBub3QKKyAqICAgICAgICAgICAgICAgICAgcHJlc2VudC4KKyAqIEByZXR1cm4gT3B0aW9uIGxldHRlciBpbiBhcmd1bWVudAorICovCitzdGF0aWMgV0NfSU5MSU5FIGludCBteWdldG9wdChpbnQgYXJnYywgY2hhcioqIGFyZ3YsIGNvbnN0IGNoYXIqIG9wdHN0cmluZykKK3sKKyAgICBzdGF0aWMgY2hhciogbmV4dCA9IE5VTEw7CisKKyAgICBjaGFyICBjOworICAgIGNoYXIqIGNwOworCisgICAgLyogQWRkZWQgc2FuaXR5IGNoZWNrIGJlY2F1c2Ugc2Nhbi1idWlsZCBjb21wbGFpbnMgYXJndltteW9wdGluZF0gYWNjZXNzCisgICAgICogcmVzdWx0cyBpbiBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS4gKi8KKyAgICBpZiAoYXJndiA9PSBOVUxMKSAgeworICAgICAgICBteW9wdGFyZyA9IE5VTEw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAobXlvcHRpbmQgPT0gMCkKKyAgICAgICAgbmV4dCA9IE5VTEw7ICAgLyogd2UncmUgc3RhcnRpbmcgbmV3L292ZXIgKi8KKworICAgIGlmIChuZXh0ID09IE5VTEwgfHwgKm5leHQgPT0gJ1wwJykgeworICAgICAgICBpZiAobXlvcHRpbmQgPT0gMCkKKyAgICAgICAgICAgIG15b3B0aW5kKys7CisKKyAgICAgICAgaWYgKG15b3B0aW5kID49IGFyZ2MgfHwgYXJndltteW9wdGluZF0gPT0gTlVMTCB8fAorICAgICAgICAgICAgICAgIGFyZ3ZbbXlvcHRpbmRdWzBdICE9ICctJyB8fCBhcmd2W215b3B0aW5kXVsxXSA9PSAnXDAnKSB7CisgICAgICAgICAgICBteW9wdGFyZyA9IE5VTEw7CisgICAgICAgICAgICBpZiAobXlvcHRpbmQgPCBhcmdjKQorICAgICAgICAgICAgICAgIG15b3B0YXJnID0gYXJndltteW9wdGluZF07CisKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJjbXAoYXJndltteW9wdGluZF0sICItLSIpID09IDApIHsKKyAgICAgICAgICAgIG15b3B0aW5kKys7CisgICAgICAgICAgICBteW9wdGFyZyA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChteW9wdGluZCA8IGFyZ2MpCisgICAgICAgICAgICAgICAgbXlvcHRhcmcgPSBhcmd2W215b3B0aW5kXTsKKworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgbmV4dCA9IGFyZ3ZbbXlvcHRpbmRdOworICAgICAgICBuZXh0Kys7ICAgICAgICAgICAgICAgICAgLyogc2tpcCAtICovCisgICAgICAgIG15b3B0aW5kKys7CisgICAgfQorCisgICAgYyAgPSAqbmV4dCsrOworICAgIC8qIFRoZSBDKysgc3RyY2hyIGNhbiByZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUgKi8KKyAgICBjcCA9IChjaGFyKilzdHJjaHIob3B0c3RyaW5nLCBjKTsKKworICAgIGlmIChjcCA9PSBOVUxMIHx8IGMgPT0gJzonIHx8IGMgPT0gJzsnKQorICAgICAgICByZXR1cm4gJz8nOworCisgICAgY3ArKzsKKworICAgIGlmICgqY3AgPT0gJzonKSB7CisgICAgICAgIGlmICgqbmV4dCAhPSAnXDAnKSB7CisgICAgICAgICAgICBteW9wdGFyZyA9IG5leHQ7CisgICAgICAgICAgICBuZXh0ICAgICA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobXlvcHRpbmQgPCBhcmdjKSB7CisgICAgICAgICAgICBteW9wdGFyZyA9IGFyZ3ZbbXlvcHRpbmRdOworICAgICAgICAgICAgbXlvcHRpbmQrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gJz8nOworICAgIH0KKyAgICBlbHNlIGlmICgqY3AgPT0gJzsnKSB7CisgICAgICAgIG15b3B0YXJnID0gKGNoYXIqKSIiOworICAgICAgICBpZiAoKm5leHQgIT0gJ1wwJykgeworICAgICAgICAgICAgbXlvcHRhcmcgPSBuZXh0OworICAgICAgICAgICAgbmV4dCAgICAgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG15b3B0aW5kIDwgYXJnYykgeworICAgICAgICAgICAgLyogQ2hlY2sgaWYgbmV4dCBhcmd1bWVudCBpcyBub3QgYSBwYXJhbWV0ZXIgYXJndW1lbnQgKi8KKyAgICAgICAgICAgIGlmIChhcmd2W215b3B0aW5kXSAmJiBhcmd2W215b3B0aW5kXVswXSAhPSAnLScpIHsKKyAgICAgICAgICAgICAgICBteW9wdGFyZyA9IGFyZ3ZbbXlvcHRpbmRdOworICAgICAgICAgICAgICAgIG15b3B0aW5kKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYzsKK30KKworc3RydWN0IG15Z2V0b3B0X2xvbmdfY29uZmlnIHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGludCB0YWtlc19hcmc7CisgICAgaW50IHZhbHVlOworfTsKKworLyoqCisgKgorICogQHBhcmFtIGFyZ2MgTnVtYmVyIG9mIGFyZ3Ygc3RyaW5ncworICogQHBhcmFtIGFyZ3YgQXJyYXkgb2Ygc3RyaW5nIGFyZ3VtZW50cworICogQHBhcmFtIG9wdHN0cmluZyBTdHJpbmcgY29udGFpbmluZyB0aGUgc3VwcG9ydGVkIGFscGhhbnVtZXJpYyBhcmd1bWVudHMuCisgKiAgICAgICAgICAgICAgICAgIEEgJzonIGZvbGxvd2luZyBhIGNoYXJhY3RlciBtZWFucyB0aGF0IGl0IHJlcXVpcmVzIGEKKyAqICAgICAgICAgICAgICAgICAgdmFsdWUgaW4gbXlvcHRhcmcgdG8gYmUgc2V0LiBBICc7JyBtZWFucyB0aGF0IHRoZQorICogICAgICAgICAgICAgICAgICBteW9wdGFyZyBpcyBvcHRpb25hbC4gbXlvcHRhcmcgaXMgc2V0IHRvICIiIGlmIG5vdAorICogICAgICAgICAgICAgICAgICBwcmVzZW50LgorICogQHJldHVybiBPcHRpb24gbGV0dGVyIGluIGFyZ3VtZW50CisgKi8KK3N0YXRpYyBXQ19JTkxJTkUgaW50IG15Z2V0b3B0X2xvbmcoaW50IGFyZ2MsIGNoYXIqKiBhcmd2LCBjb25zdCBjaGFyKiBvcHRzdHJpbmcsCisgICAgY29uc3Qgc3RydWN0IG15Z2V0b3B0X2xvbmdfY29uZmlnICpsb25nb3B0cywgaW50ICpsb25naW5kZXgpCit7CisgICAgc3RhdGljIGNoYXIqIG5leHQgPSBOVUxMOworCisgICAgaW50ICBjOworICAgIGNoYXIqIGNwOworCisgICAgLyogQWRkZWQgc2FuaXR5IGNoZWNrIGJlY2F1c2Ugc2Nhbi1idWlsZCBjb21wbGFpbnMgYXJndltteW9wdGluZF0gYWNjZXNzCisgICAgICogcmVzdWx0cyBpbiBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS4gKi8KKyAgICBpZiAoYXJndiA9PSBOVUxMKSAgeworICAgICAgICBteW9wdGFyZyA9IE5VTEw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAobXlvcHRpbmQgPT0gMCkKKyAgICAgICAgbmV4dCA9IE5VTEw7ICAgLyogd2UncmUgc3RhcnRpbmcgbmV3L292ZXIgKi8KKworICAgIGlmIChuZXh0ID09IE5VTEwgfHwgKm5leHQgPT0gJ1wwJykgeworICAgICAgICBpZiAobXlvcHRpbmQgPT0gMCkKKyAgICAgICAgICAgIG15b3B0aW5kKys7CisKKyAgICAgICAgaWYgKG15b3B0aW5kID49IGFyZ2MgfHwgYXJndltteW9wdGluZF0gPT0gTlVMTCB8fAorICAgICAgICAgICAgICAgIGFyZ3ZbbXlvcHRpbmRdWzBdICE9ICctJyB8fCBhcmd2W215b3B0aW5kXVsxXSA9PSAnXDAnKSB7CisgICAgICAgICAgICBteW9wdGFyZyA9IE5VTEw7CisgICAgICAgICAgICBpZiAobXlvcHRpbmQgPCBhcmdjKQorICAgICAgICAgICAgICAgIG15b3B0YXJnID0gYXJndltteW9wdGluZF07CisKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJjbXAoYXJndltteW9wdGluZF0sICItLSIpID09IDApIHsKKyAgICAgICAgICAgIG15b3B0aW5kKys7CisgICAgICAgICAgICBteW9wdGFyZyA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChteW9wdGluZCA8IGFyZ2MpCisgICAgICAgICAgICAgICAgbXlvcHRhcmcgPSBhcmd2W215b3B0aW5kXTsKKworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cm5jbXAoYXJndltteW9wdGluZF0sICItLSIsIDIpID09IDApIHsKKyAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBteWdldG9wdF9sb25nX2NvbmZpZyAqaTsKKyAgICAgICAgICAgIGMgPSAtMTsKKyAgICAgICAgICAgIG15b3B0YXJnID0gTlVMTDsKKyAgICAgICAgICAgIGZvciAoaSA9IGxvbmdvcHRzOyBpLT5uYW1lOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoISBzdHJjbXAoYXJndltteW9wdGluZF0gKyAyLCBpLT5uYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBjID0gaS0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIG15b3B0aW5kKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChsb25naW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICAqbG9uZ2luZGV4ID0gKGludCkoKGkgLSBsb25nb3B0cykgLyBzaXplb2YgKmkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaS0+dGFrZXNfYXJnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXlvcHRpbmQgPCBhcmdjKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlvcHRhcmcgPSBhcmd2W215b3B0aW5kXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteW9wdGluZCsrOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIH0KKworICAgICAgICBuZXh0ID0gYXJndltteW9wdGluZF07CisgICAgICAgIG5leHQrKzsgICAgICAgICAgICAgICAgICAvKiBza2lwIC0gKi8KKyAgICAgICAgbXlvcHRpbmQrKzsKKyAgICB9CisKKyAgICBjICA9ICpuZXh0Kys7CisgICAgLyogVGhlIEMrKyBzdHJjaHIgY2FuIHJldHVybiBhIGRpZmZlcmVudCB2YWx1ZSAqLworICAgIGNwID0gKGNoYXIqKXN0cmNocihvcHRzdHJpbmcsIGMpOworCisgICAgaWYgKGNwID09IE5VTEwgfHwgYyA9PSAnOicgfHwgYyA9PSAnOycpCisgICAgICAgIHJldHVybiAnPyc7CisKKyAgICBjcCsrOworCisgICAgaWYgKCpjcCA9PSAnOicpIHsKKyAgICAgICAgaWYgKCpuZXh0ICE9ICdcMCcpIHsKKyAgICAgICAgICAgIG15b3B0YXJnID0gbmV4dDsKKyAgICAgICAgICAgIG5leHQgICAgID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChteW9wdGluZCA8IGFyZ2MpIHsKKyAgICAgICAgICAgIG15b3B0YXJnID0gYXJndltteW9wdGluZF07CisgICAgICAgICAgICBteW9wdGluZCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAnPyc7CisgICAgfQorICAgIGVsc2UgaWYgKCpjcCA9PSAnOycpIHsKKyAgICAgICAgbXlvcHRhcmcgPSAoY2hhciopIiI7CisgICAgICAgIGlmICgqbmV4dCAhPSAnXDAnKSB7CisgICAgICAgICAgICBteW9wdGFyZyA9IG5leHQ7CisgICAgICAgICAgICBuZXh0ICAgICA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobXlvcHRpbmQgPCBhcmdjKSB7CisgICAgICAgICAgICAvKiBDaGVjayBpZiBuZXh0IGFyZ3VtZW50IGlzIG5vdCBhIHBhcmFtZXRlciBhcmd1bWVudCAqLworICAgICAgICAgICAgaWYgKGFyZ3ZbbXlvcHRpbmRdICYmIGFyZ3ZbbXlvcHRpbmRdWzBdICE9ICctJykgeworICAgICAgICAgICAgICAgIG15b3B0YXJnID0gYXJndltteW9wdGluZF07CisgICAgICAgICAgICAgICAgbXlvcHRpbmQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjOworfQorCisKKyNpZmRlZiBXT0xGU1NMX0VOQ1JZUFRFRF9LRVlTCisKK3N0YXRpYyBXQ19JTkxJTkUgaW50IFBhc3N3b3JkQ2FsbEJhY2soY2hhciogcGFzc3dkLCBpbnQgc3osIGludCBydywgdm9pZCogdXNlcmRhdGEpCit7CisgICAgKHZvaWQpcnc7CisgICAgKHZvaWQpdXNlcmRhdGE7CisgICAgaWYgKHVzZXJkYXRhICE9IE5VTEwpIHsKKyAgICAgICAgc3RybmNweShwYXNzd2QsIChjaGFyKil1c2VyZGF0YSwgc3opOworICAgICAgICByZXR1cm4gKGludClYU1RSTEVOKChjaGFyKil1c2VyZGF0YSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdHJuY3B5KHBhc3N3ZCwgInlhc3NsMTIzIiwgc3opOworICAgICAgICByZXR1cm4gODsKKyAgICB9Cit9CisKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciogY2xpZW50X3Nob3dwZWVyX21zZ1tdWzldID0geworICAgIC8qIEVuZ2xpc2ggKi8KKyAgICB7CisgICAgICAgICJTU0wgdmVyc2lvbiBpcyIsCisgICAgICAgICJTU0wgY2lwaGVyIHN1aXRlIGlzIiwKKyAgICAgICAgIlNTTCBzaWduYXR1cmUgYWxnb3JpdGhtIGlzIiwKKyAgICAgICAgIlNTTCBjdXJ2ZSBuYW1lIGlzIiwKKyAgICAgICAgIlNTTCBESCBzaXplIGlzIiwKKyAgICAgICAgIlNTTCByZXVzZWQgc2Vzc2lvbiIsCisgICAgICAgICJBbHRlcm5hdGUgY2VydCBjaGFpbiB1c2VkIiwKKyAgICAgICAgInBlZXIncyBjZXJ0IGluZm86IiwKKyAgICAgICAgTlVMTAorICAgIH0sCisjaWZuZGVmIE5PX01VTFRJQllURV9QUklOVAorICAgIC8qIEphcGFuZXNlICovCisgICAgeworICAgICAgICAiU1NMIOODkOODvOOCuOODp+ODs+OBryIsCisgICAgICAgICJTU0wg5pqX5Y+344K544Kk44O844OI44GvIiwKKyAgICAgICAgIlNTTCBzaWduYXR1cmUgYWxnb3JpdGhtIGlzIiwKKyAgICAgICAgIlNTTCDmm7Lnt5rlkI3jga8iLAorICAgICAgICAiU1NMIERIIOOCteOCpOOCuuOBryIsCisgICAgICAgICJTU0wg5YaN5Yip55So44K744OD44K344On44OzIiwKKyAgICAgICAgIuS7o+abv+iovOaYjuODgeOCp+ODvOODs+OCkuS9v+eUqCIsCisgICAgICAgICLnm7jmiYvmlrnoqLzmmI7mm7jmg4XloLEiLAorICAgICAgICBOVUxMCisgICAgfSwKKyNlbmRpZgorfTsKKworI2lmIGRlZmluZWQoS0VFUF9QRUVSX0NFUlQpIHx8IGRlZmluZWQoS0VFUF9PVVJfQ0VSVCkgfHwgZGVmaW5lZChTRVNTSU9OX0NFUlRTKQorc3RhdGljIGNvbnN0IGNoYXIqIGNsaWVudF9zaG93eDUwOV9tc2dbXVs1XSA9IHsKKyAgICAvKiBFbmdsaXNoICovCisgICAgeworICAgICAgICAiaXNzdWVyIiwKKyAgICAgICAgInN1YmplY3QiLAorICAgICAgICAiYWx0bmFtZSIsCisgICAgICAgICJzZXJpYWwgbnVtYmVyIiwKKyAgICAgICAgTlVMTAorICAgIH0sCisjaWZuZGVmIE5PX01VTFRJQllURV9QUklOVAorICAgIC8qIEphcGFuZXNlICovCisgICAgeworICAgICAgICAi55m66KGM6ICFIiwKKyAgICAgICAgIuOCteODluOCuOOCp+OCr+ODiCIsCisgICAgICAgICLku6Pmm7/lkI0iLAorICAgICAgICAi44K344Oq44Ki44Or55Wq5Y+3IiwKKyAgICAgICAgTlVMTAorICAgIH0sCisjZW5kaWYKK307CisKKy8qIGxuZ19pbmRleCBpcyB0byBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBmb3IgZGlzcGxheWluZyBtZXNzYWdlLiAgICAgICAgICAgICAgKi8KKy8qIDA6RW5nbGlzaCwgMTpKYXBhbmVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBTaG93WDUwOUV4KFdPTEZTU0xfWDUwOSogeDUwOSwgY29uc3QgY2hhciogaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG5nX2luZGV4KQoreworICAgIGNoYXIqIGFsdE5hbWU7CisgICAgY2hhciogaXNzdWVyOworICAgIGNoYXIqIHN1YmplY3Q7CisgICAgYnl0ZSAgc2VyaWFsWzMyXTsKKyAgICBpbnQgICByZXQ7CisgICAgaW50ICAgc3ogPSBzaXplb2Yoc2VyaWFsKTsKKyAgICBjb25zdCBjaGFyKiogd29yZHMgPSBjbGllbnRfc2hvd3g1MDlfbXNnW2xuZ19pbmRleF07CisKKyAgICBpZiAoeDUwOSA9PSBOVUxMKSB7CisgICAgICAgIHByaW50ZigiJXMgTm8gQ2VydFxuIiwgaGRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlzc3VlciAgPSB3b2xmU1NMX1g1MDlfTkFNRV9vbmVsaW5lKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X2lzc3Vlcl9uYW1lKHg1MDkpLCAwLCAwKTsKKyAgICBzdWJqZWN0ID0gd29sZlNTTF9YNTA5X05BTUVfb25lbGluZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X3N1YmplY3RfbmFtZSh4NTA5KSwgMCwgMCk7CisKKyAgICBwcmludGYoIiVzXG4gJXMgOiAlc1xuICVzOiAlc1xuIiwgaGRyLCB3b3Jkc1swXSwgaXNzdWVyLCB3b3Jkc1sxXSwgc3ViamVjdCk7CisKKyAgICB3aGlsZSAoIChhbHROYW1lID0gd29sZlNTTF9YNTA5X2dldF9uZXh0X2FsdG5hbWUoeDUwOSkpICE9IE5VTEwpCisgICAgICAgIHByaW50ZigiICVzID0gJXNcbiIsIHdvcmRzWzJdLCBhbHROYW1lKTsKKworICAgIHJldCA9IHdvbGZTU0xfWDUwOV9nZXRfc2VyaWFsX251bWJlcih4NTA5LCBzZXJpYWwsICZzeik7CisgICAgaWYgKHJldCA9PSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgaW50ICBpOworICAgICAgICBpbnQgIHN0ckxlbjsKKyAgICAgICAgY2hhciBzZXJpYWxNc2dbODBdOworCisgICAgICAgIC8qIHRlc3RzdWl0ZSBoYXMgbXVsdGlwbGUgdGhyZWFkcyB3cml0aW5nIHRvIHN0ZG91dCwgZ2V0IG91dHB1dAorICAgICAgICAgICBtZXNzYWdlIHJlYWR5IHRvIHdyaXRlIG9uY2UgKi8KKyAgICAgICAgc3RyTGVuID0gc3ByaW50ZihzZXJpYWxNc2csICIgJXMiLCB3b3Jkc1szXSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzejsgaSsrKQorICAgICAgICAgICAgc3ByaW50ZihzZXJpYWxNc2cgKyBzdHJMZW4gKyAoaSozKSwgIjolMDJ4ICIsIHNlcmlhbFtpXSk7CisgICAgICAgIHByaW50ZigiJXNcbiIsIHNlcmlhbE1zZyk7CisgICAgfQorCisgICAgWEZSRUUoc3ViamVjdCwgMCwgRFlOQU1JQ19UWVBFX09QRU5TU0wpOworICAgIFhGUkVFKGlzc3VlciwgIDAsIERZTkFNSUNfVFlQRV9PUEVOU1NMKTsKKworI2lmIGRlZmluZWQoU0hPV19DRVJUUykgJiYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKQorICAgIHsKKyAgICAgICAgV09MRlNTTF9CSU8qIGJpbzsKKyAgICAgICAgY2hhciBidWZbMjU2XTsgLyogc2hvdWxkIGJlIHNpemUgb2YgQVNOX05BTUVfTUFYICovCisgICAgICAgIGludCAgdGV4dFN6OworCisgICAgICAgIC8qIHByaW50IG91dCBkb21haW4gY29tcG9uZW50IGlmIGNlcnRpZmljYXRlIGhhcyBpdCAqLworICAgICAgICB0ZXh0U3ogPSB3b2xmU1NMX1g1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQoCisgICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5X2dldF9zdWJqZWN0X25hbWUoeDUwOSksIE5JRF9kb21haW5Db21wb25lbnQsCisgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIGlmICh0ZXh0U3ogPiAwKSB7CisgICAgICAgICAgICBwcmludGYoIkRvbWFpbiBDb21wb25lbnQgPSAlc1xuIiwgYnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIGJpbyA9IHdvbGZTU0xfQklPX25ldyh3b2xmU1NMX0JJT19zX2ZpbGUoKSk7CisgICAgICAgIGlmIChiaW8gIT0gTlVMTCkgeworICAgICAgICAgICAgd29sZlNTTF9CSU9fc2V0X2ZwKGJpbywgc3Rkb3V0LCBCSU9fTk9DTE9TRSk7CisgICAgICAgICAgICB3b2xmU1NMX1g1MDlfcHJpbnQoYmlvLCB4NTA5KTsKKyAgICAgICAgICAgIHdvbGZTU0xfQklPX2ZyZWUoYmlvKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBTSE9XX0NFUlRTICYmIE9QRU5TU0xfRVhUUkEgKi8KK30KKy8qIG9yaWdpbmFsIFNob3dYNTA5IHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgKi8KK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBTaG93WDUwOShXT0xGU1NMX1g1MDkqIHg1MDksIGNvbnN0IGNoYXIqIGhkcikKK3sKKyAgICBTaG93WDUwOUV4KHg1MDksIGhkciwgMCk7Cit9CisKKyNlbmRpZiAvKiBLRUVQX1BFRVJfQ0VSVCB8fCBLRUVQX09VUl9DRVJUIHx8IFNFU1NJT05fQ0VSVFMgKi8KKworI2lmIGRlZmluZWQoU0hPV19DRVJUUykgJiYgZGVmaW5lZChTRVNTSU9OX0NFUlRTKSAmJiBcCisgICAgKGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpKQorc3RhdGljIFdDX0lOTElORSB2b2lkIFNob3dYNTA5Q2hhaW4oV09MRlNTTF9YNTA5X0NIQUlOKiBjaGFpbiwgaW50IGNvdW50LAorICAgIGNvbnN0IGNoYXIqIGhkcikKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgbGVuZ3RoOworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzMwNzJdOworICAgIFdPTEZTU0xfWDUwOSogY2hhaW5YNTA5OworCisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgd29sZlNTTF9nZXRfY2hhaW5fY2VydF9wZW0oY2hhaW4sIGksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICZsZW5ndGgpOworICAgICAgICBidWZmZXJbbGVuZ3RoXSA9IDA7CisgICAgICAgIHByaW50ZigiXG4lczogJWQgaGFzIGxlbmd0aCAlZCBkYXRhID0gXG4lc1xuIiwgaGRyLCBpLCBsZW5ndGgsIGJ1ZmZlcik7CisKKyAgICAgICAgY2hhaW5YNTA5ID0gd29sZlNTTF9nZXRfY2hhaW5fWDUwOShjaGFpbiwgaSk7CisgICAgICAgIGlmIChjaGFpblg1MDkpCisgICAgICAgICAgICBTaG93WDUwOShjaGFpblg1MDksIGhkcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiZ2V0X2NoYWluX1g1MDkgZmFpbGVkXG4iKTsKKyAgICAgICAgd29sZlNTTF9GcmVlWDUwOShjaGFpblg1MDkpOworICAgIH0KK30KKyNlbmRpZiAvKiBTSE9XX0NFUlRTICYmIFNFU1NJT05fQ0VSVFMgKi8KKworLyogbG5nX2luZGV4IGlzIHRvIHNwZWNpZnkgdGhlIGxhbmd1YWdlIGZvciBkaXNwbGF5aW5nIG1lc3NhZ2UuICAgICAgICAgICAgICAqLworLyogMDpFbmdsaXNoLCAxOkphcGFuZXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworc3RhdGljIFdDX0lOTElORSB2b2lkIHNob3dQZWVyRXgoV09MRlNTTCogc3NsLCBpbnQgbG5nX2luZGV4KQoreworICAgIFdPTEZTU0xfQ0lQSEVSKiBjaXBoZXI7CisgICAgY29uc3QgY2hhcioqIHdvcmRzID0gY2xpZW50X3Nob3dwZWVyX21zZ1tsbmdfaW5kZXhdOworCisjaWYgZGVmaW5lZChIQVZFX0VDQykgfHwgZGVmaW5lZChIQVZFX0NVUlZFMjU1MTkpIHx8IGRlZmluZWQoSEFWRV9DVVJWRTQ0OCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZChOT19ESCkKKyAgICBjb25zdCBjaGFyICpuYW1lOworI2VuZGlmCisjaWZuZGVmIE5PX0RICisgICAgaW50IGJpdHM7CisjZW5kaWYKKyNpZmRlZiBPUEVOU1NMX0VYVFJBCisgICAgaW50IG5pZDsKKyNlbmRpZgorI2lmZGVmIEtFRVBfUEVFUl9DRVJUCisgICAgV09MRlNTTF9YNTA5KiBwZWVyID0gd29sZlNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2wpOworICAgIGlmIChwZWVyKQorICAgICAgICBTaG93WDUwOUV4KHBlZXIsIHdvcmRzWzZdLCBsbmdfaW5kZXgpOworICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJwZWVyIGhhcyBubyBjZXJ0IVxuIik7CisgICAgd29sZlNTTF9GcmVlWDUwOShwZWVyKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoU0hPV19DRVJUUykgJiYgZGVmaW5lZChLRUVQX09VUl9DRVJUKSAmJiBcCisgICAgKGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpKQorICAgIFNob3dYNTA5KHdvbGZTU0xfZ2V0X2NlcnRpZmljYXRlKHNzbCksICJvdXIgY2VydCBpbmZvOiIpOworICAgIHByaW50ZigiUGVlciB2ZXJpZnkgcmVzdWx0ID0gJWx1XG4iLCB3b2xmU1NMX2dldF92ZXJpZnlfcmVzdWx0KHNzbCkpOworI2VuZGlmIC8qIFNIT1dfQ0VSVFMgJiYgS0VFUF9PVVJfQ0VSVCAqLworICAgIHByaW50ZigiJXMgJXNcbiIsIHdvcmRzWzBdLCB3b2xmU1NMX2dldF92ZXJzaW9uKHNzbCkpOworCisgICAgY2lwaGVyID0gd29sZlNTTF9nZXRfY3VycmVudF9jaXBoZXIoc3NsKTsKKyNpZmRlZiBIQVZFX1FTSAorICAgIHByaW50ZigiJXMgJXMlc1xuIiwgd29yZHNbMV0sICh3b2xmU1NMX2lzUVNIKHNzbCkpPyAiUVNIOiI6ICIiLAorICAgICAgICAgICAgd29sZlNTTF9DSVBIRVJfZ2V0X25hbWUoY2lwaGVyKSk7CisjZWxzZQorICAgIHByaW50ZigiJXMgJXNcbiIsIHdvcmRzWzFdLCB3b2xmU1NMX0NJUEhFUl9nZXRfbmFtZShjaXBoZXIpKTsKKyNlbmRpZgorI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgICBpZiAod29sZlNTTF9nZXRfc2lnbmF0dXJlX25pZChzc2wsICZuaWQpID09IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICBwcmludGYoIiVzICVzXG4iLCB3b3Jkc1syXSwgT0JKX25pZDJzbihuaWQpKTsKKyAgICB9CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfRUNDKSB8fCBkZWZpbmVkKEhBVkVfQ1VSVkUyNTUxOSkgfHwgZGVmaW5lZChIQVZFX0NVUlZFNDQ4KSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZpbmVkKE5PX0RIKQorICAgIGlmICgobmFtZSA9IHdvbGZTU0xfZ2V0X2N1cnZlX25hbWUoc3NsKSkgIT0gTlVMTCkKKyAgICAgICAgcHJpbnRmKCIlcyAlc1xuIiwgd29yZHNbM10sIG5hbWUpOworI2VuZGlmCisjaWZuZGVmIE5PX0RICisgICAgZWxzZSBpZiAoKGJpdHMgPSB3b2xmU1NMX0dldERoS2V5X1N6KHNzbCkpID4gMCkKKyAgICAgICAgcHJpbnRmKCIlcyAlZCBiaXRzXG4iLCB3b3Jkc1s0XSwgYml0cyk7CisjZW5kaWYKKyAgICBpZiAod29sZlNTTF9zZXNzaW9uX3JldXNlZChzc2wpKQorICAgICAgICBwcmludGYoIiVzXG4iLCB3b3Jkc1s1XSk7CisjaWZkZWYgV09MRlNTTF9BTFRfQ0VSVF9DSEFJTlMKKyAgICBpZiAod29sZlNTTF9pc19wZWVyX2FsdF9jZXJ0X2NoYWluKHNzbCkpCisgICAgICAgIHByaW50ZigiJXNcbiIsIHdvcmRzWzZdKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTSE9XX0NFUlRTKSAmJiBkZWZpbmVkKFNFU1NJT05fQ0VSVFMpICYmIFwKKyAgICAoZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkFfWDUwOV9TTUFMTCkpCisgICAgeworICAgICAgICBXT0xGU1NMX1g1MDlfQ0hBSU4qIGNoYWluOworCisgICAgICAgIGNoYWluID0gd29sZlNTTF9nZXRfcGVlcl9jaGFpbihzc2wpOworICAgICAgICBTaG93WDUwOUNoYWluKGNoYWluLCB3b2xmU1NMX2dldF9jaGFpbl9jb3VudChjaGFpbiksICJzZXNzaW9uIGNlcnQiKTsKKworICAgICNpZmRlZiBXT0xGU1NMX0FMVF9DRVJUX0NIQUlOUworICAgICAgICBpZiAod29sZlNTTF9pc19wZWVyX2FsdF9jZXJ0X2NoYWluKHNzbCkpIHsKKyAgICAgICAgICAgIGNoYWluID0gd29sZlNTTF9nZXRfcGVlcl9hbHRfY2hhaW4oc3NsKTsKKyAgICAgICAgICAgIFNob3dYNTA5Q2hhaW4oY2hhaW4sIHdvbGZTU0xfZ2V0X2NoYWluX2NvdW50KGNoYWluKSwgImFsdCBjZXJ0Iik7CisgICAgICAgIH0KKyAgICAjZW5kaWYKKyAgICB9CisjZW5kaWYgLyogU0hPV19DRVJUUyAmJiBTRVNTSU9OX0NFUlRTICovCisgICh2b2lkKXNzbDsKK30KKy8qIG9yaWdpbmFsIHNob3dQZWVyIHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgKi8KK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBzaG93UGVlcihXT0xGU1NMKiBzc2wpCit7CisgICAgc2hvd1BlZXJFeChzc2wsIDApOworfQorCitzdGF0aWMgV0NfSU5MSU5FIHZvaWQgYnVpbGRfYWRkcihTT0NLQUREUl9JTl9UKiBhZGRyLCBjb25zdCBjaGFyKiBwZWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDE2IHBvcnQsIGludCB1ZHAsIGludCBzY3RwKQoreworICAgIGludCB1c2VMb29rdXAgPSAwOworICAgICh2b2lkKXVzZUxvb2t1cDsKKyAgICAodm9pZCl1ZHA7CisgICAgKHZvaWQpc2N0cDsKKworICAgIGlmIChhZGRyID09IE5VTEwpCisgICAgICAgIGVycl9zeXMoImludmFsaWQgYXJndW1lbnQgdG8gYnVpbGRfYWRkciwgYWRkciBpcyBOVUxMIik7CisKKyAgICBYTUVNU0VUKGFkZHIsIDAsIHNpemVvZihTT0NLQUREUl9JTl9UKSk7CisKKyNpZm5kZWYgVEVTVF9JUFY2CisgICAgLyogcGVlciBjb3VsZCBiZSBpbiBodW1hbiByZWFkYWJsZSBmb3JtICovCisgICAgaWYgKCAoKHNpemVfdClwZWVyICE9IElOQUREUl9BTlkpICYmIGlzYWxwaGEoKGludClwZWVyWzBdKSkgeworICAgICNpZm5kZWYgV09MRlNTTF9VU0VfR0VUQUREUklORk8KKyAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9NREtfQVJNKSB8fCBkZWZpbmVkKFdPTEZTU0xfS0VJTF9UQ1BfTkVUKQorICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50KiBlbnRyeSA9IGdldGhvc3RieW5hbWUocGVlciwgJmVycik7CisgICAgICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9USVJUT1MpCisgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCogZW50cnkgPSBETlNHZXRIb3N0QnlOYW1lKHBlZXIpOworICAgICAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfVlhXT1JLUykKKyAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50KiBlbnRyeSA9IChzdHJ1Y3QgaG9zdGVudCopaG9zdEdldEJ5TmFtZSgoY2hhciopcGVlcik7CisgICAgICAgICNlbHNlCisgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCogZW50cnkgPSBnZXRob3N0YnluYW1lKHBlZXIpOworICAgICAgICAjZW5kaWYKKworICAgICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgIFhNRU1DUFkoJmFkZHItPnNpbl9hZGRyLnNfYWRkciwgZW50cnktPmhfYWRkcl9saXN0WzBdLAorICAgICAgICAgICAgICAgICAgIGVudHJ5LT5oX2xlbmd0aCk7CisgICAgICAgICAgICB1c2VMb29rdXAgPSAxOworICAgICAgICB9CisgICAgI2Vsc2UKKyAgICAgICAgc3RydWN0IHpzb2NrX2FkZHJpbmZvIGhpbnRzLCAqYWRkckluZm87CisgICAgICAgIGNoYXIgcG9ydFN0cls2XTsKKyAgICAgICAgWFNOUFJJTlRGKHBvcnRTdHIsIHNpemVvZihwb3J0U3RyKSwgIiVkIiwgcG9ydCk7CisgICAgICAgIFhNRU1TRVQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKyAgICAgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOworICAgICAgICBoaW50cy5haV9zb2NrdHlwZSA9IHVkcCA/IFNPQ0tfREdSQU0gOiBTT0NLX1NUUkVBTTsKKyAgICAgICAgaGludHMuYWlfcHJvdG9jb2wgPSB1ZHAgPyBJUFBST1RPX1VEUCA6IElQUFJPVE9fVENQOworICAgICAgICBpZiAoZ2V0YWRkcmluZm8oKGNoYXIqKXBlZXIsIHBvcnRTdHIsICZoaW50cywgJmFkZHJJbmZvKSA9PSAwKSB7CisgICAgICAgICAgICBYTUVNQ1BZKGFkZHIsIGFkZHJJbmZvLT5haV9hZGRyLCBzaXplb2YoKmFkZHIpKTsKKyAgICAgICAgICAgIHVzZUxvb2t1cCA9IDE7CisgICAgICAgIH0KKyAgICAjZW5kaWYKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXJyX3N5cygibm8gZW50cnkgZm9yIGhvc3QiKTsKKyAgICB9CisjZW5kaWYKKworCisjaWZuZGVmIFRFU1RfSVBWNgorICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkgfHwgZGVmaW5lZChXT0xGU1NMX0tFSUxfVENQX05FVCkKKyAgICAgICAgYWRkci0+c2luX2ZhbWlseSA9IFBGX0lORVQ7CisgICAgI2Vsc2UKKyAgICAgICAgYWRkci0+c2luX2ZhbWlseSA9IEFGX0lORVRfVjsKKyAgICAjZW5kaWYKKyAgICBhZGRyLT5zaW5fcG9ydCA9IFhIVE9OUyhwb3J0KTsKKyAgICBpZiAoKHNpemVfdClwZWVyID09IElOQUREUl9BTlkpCisgICAgICAgIGFkZHItPnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghdXNlTG9va3VwKQorICAgICAgICAgICAgYWRkci0+c2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKHBlZXIpOworICAgIH0KKyNlbHNlCisgICAgYWRkci0+c2luNl9mYW1pbHkgPSBBRl9JTkVUX1Y7CisgICAgYWRkci0+c2luNl9wb3J0ID0gWEhUT05TKHBvcnQpOworICAgIGlmICgoc2l6ZV90KXBlZXIgPT0gSU5BRERSX0FOWSkgeworICAgICAgICBhZGRyLT5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICNpZiBkZWZpbmVkKEhBVkVfR0VUQUREUklORk8pIHx8IGRlZmluZWQoV09MRl9DOTkpCisgICAgICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gIGhpbnRzOworICAgICAgICAgICAgc3RydWN0IGFkZHJpbmZvKiBhbnN3ZXIgPSBOVUxMOworICAgICAgICAgICAgaW50ICAgIHJldDsKKyAgICAgICAgICAgIGNoYXIgICBzdHJQb3J0WzgwXTsKKworICAgICAgICAgICAgWE1FTVNFVCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCisgICAgICAgICAgICBoaW50cy5haV9mYW1pbHkgICA9IEFGX0lORVRfVjsKKyAgICAgICAgICAgIGlmICh1ZHApIHsKKyAgICAgICAgICAgICAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07CisgICAgICAgICAgICAgICAgaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1VEUDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfU0NUUAorICAgICAgICAgICAgZWxzZSBpZiAoc2N0cCkgeworICAgICAgICAgICAgICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisgICAgICAgICAgICAgICAgaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1NDVFA7CisgICAgICAgICAgICB9CisgICAgICAgICNlbmRpZgorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKyAgICAgICAgICAgICAgICBoaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTTlBSSU5URihzdHJQb3J0LCBzaXplb2Yoc3RyUG9ydCksICIlZCIsIHBvcnQpOworICAgICAgICAgICAgc3RyUG9ydFs3OV0gPSAnXDAnOworCisgICAgICAgICAgICByZXQgPSBnZXRhZGRyaW5mbyhwZWVyLCBzdHJQb3J0LCAmaGludHMsICZhbnN3ZXIpOworICAgICAgICAgICAgaWYgKHJldCA8IDAgfHwgYW5zd2VyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZXJyX3N5cygiZ2V0YWRkcmluZm8gZmFpbGVkIik7CisKKyAgICAgICAgICAgIFhNRU1DUFkoYWRkciwgYW5zd2VyLT5haV9hZGRyLCBhbnN3ZXItPmFpX2FkZHJsZW4pOworICAgICAgICAgICAgZnJlZWFkZHJpbmZvKGFuc3dlcik7CisgICAgICAgICNlbHNlCisgICAgICAgICAgICBwcmludGYoIm5vIGlwdjYgZ2V0YWRkcmluZm8sIGxvb3BiYWNrIG9ubHkgdGVzdHMvZXhhbXBsZXNcbiIpOworICAgICAgICAgICAgYWRkci0+c2luNl9hZGRyID0gaW42YWRkcl9sb29wYmFjazsKKyAgICAgICAgI2VuZGlmCisgICAgfQorI2VuZGlmCit9CisKKworc3RhdGljIFdDX0lOTElORSB2b2lkIHRjcF9zb2NrZXQoU09DS0VUX1QqIHNvY2tmZCwgaW50IHVkcCwgaW50IHNjdHApCit7CisgICAgKHZvaWQpc2N0cDsKKworICAgIGlmICh1ZHApCisgICAgICAgICpzb2NrZmQgPSBzb2NrZXQoQUZfSU5FVF9WLCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CisjaWZkZWYgV09MRlNTTF9TQ1RQCisgICAgZWxzZSBpZiAoc2N0cCkKKyAgICAgICAgKnNvY2tmZCA9IHNvY2tldChBRl9JTkVUX1YsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOworI2VuZGlmCisgICAgZWxzZQorICAgICAgICAqc29ja2ZkID0gc29ja2V0KEFGX0lORVRfViwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTsKKworICAgIGlmKFdPTEZTU0xfU09DS0VUX0lTX0lOVkFMSUQoKnNvY2tmZCkpIHsKKyAgICAgICAgZXJyX3N5c193aXRoX2Vycm5vKCJzb2NrZXQgZmFpbGVkXG4iKTsKKyAgICB9CisKKyNpZm5kZWYgVVNFX1dJTkRPV1NfQVBJCisjaWZkZWYgU09fTk9TSUdQSVBFCisgICAgeworICAgICAgICBpbnQgICAgICAgb24gPSAxOworICAgICAgICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKG9uKTsKKyAgICAgICAgaW50ICAgICAgIHJlcyA9IHNldHNvY2tvcHQoKnNvY2tmZCwgU09MX1NPQ0tFVCwgU09fTk9TSUdQSVBFLCAmb24sIGxlbik7CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgZXJyX3N5c193aXRoX2Vycm5vKCJzZXRzb2Nrb3B0IFNPX05PU0lHUElQRSBmYWlsZWRcbiIpOworICAgIH0KKyNlbGlmIGRlZmluZWQoV09MRlNTTF9NREtfQVJNKSB8fCBkZWZpbmVkIChXT0xGU1NMX1RJUlRPUykgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKFdPTEZTU0xfS0VJTF9UQ1BfTkVUKSB8fCBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgIC8qIG5vdGhpbmcgdG8gZGVmaW5lICovCisjZWxzZSAgLyogbm8gU19OT1NJR1BJUEUgKi8KKyAgICBzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CisjZW5kaWYgLyogU19OT1NJR1BJUEUgKi8KKworI2lmIGRlZmluZWQoVENQX05PREVMQVkpCisgICAgaWYgKCF1ZHAgJiYgIXNjdHApCisgICAgeworICAgICAgICBpbnQgICAgICAgb24gPSAxOworICAgICAgICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKG9uKTsKKyAgICAgICAgaW50ICAgICAgIHJlcyA9IHNldHNvY2tvcHQoKnNvY2tmZCwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAmb24sIGxlbik7CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgZXJyX3N5c193aXRoX2Vycm5vKCJzZXRzb2Nrb3B0IFRDUF9OT0RFTEFZIGZhaWxlZFxuIik7CisgICAgfQorI2VuZGlmCisjZW5kaWYgIC8qIFVTRV9XSU5ET1dTX0FQSSAqLworfQorCisjaWYgZGVmaW5lZChXT0xGU1NMX1dPTEZTRU5UUllfSE9PS1MpICYmIGRlZmluZWQoV09MRlNFTlRSWV9IKQorCisjaW5jbHVkZSA8d29sZnNlbnRyeS93b2xmc2VudHJ5X3V0aWwuaD4KKworI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKFdPTEZTRU5UUllfTk9fSlNPTikKKyNpbmNsdWRlIDx3b2xmc2VudHJ5L3dvbGZzZW50cnlfanNvbi5oPgorI2VuZGlmCisKK3N0cnVjdCB3b2xmc2VudHJ5X2RhdGEgeworICAgIHN0cnVjdCB3b2xmc2VudHJ5X3NvY2thZGRyIHJlbW90ZTsKKyAgICBieXRlIHJlbW90ZV9hZGRyYnVmWzE2XTsKKyAgICBzdHJ1Y3Qgd29sZnNlbnRyeV9zb2NrYWRkciBsb2NhbDsKKyAgICBieXRlIGxvY2FsX2FkZHJidWZbMTZdOworICAgIHdvbGZzZW50cnlfcm91dGVfZmxhZ3NfdCBmbGFnczsKKyAgICB2b2lkICpoZWFwOworICAgIGludCBhbGxvY3R5cGU7Cit9OworCitzdGF0aWMgdm9pZCBmcmVlX3dvbGZzZW50cnlfZGF0YShzdHJ1Y3Qgd29sZnNlbnRyeV9kYXRhICpkYXRhKSB7CisgICAgWEZSRUUoZGF0YSwgZGF0YS0+aGVhcCwgZGF0YS0+YWxsb2N0eXBlKTsKK30KKworc3RhdGljIHN0cnVjdCB3b2xmc2VudHJ5X2NvbnRleHQgKndvbGZzZW50cnkgPSBOVUxMOworCitzdGF0aWMgaW50IHdvbGZzZW50cnlfZGF0YV9pbmRleCA9IC0xOworCitzdGF0aWMgV0NfSU5MSU5FIGludCB3b2xmc2VudHJ5X3N0b3JlX2VuZHBvaW50cygKKyAgICBXT0xGU1NMICpzc2wsCisgICAgU09DS0FERFJfSU5fVCAqcmVtb3RlLAorICAgIFNPQ0tBRERSX0lOX1QgKmxvY2FsLAorICAgIGludCBwcm90bywKKyAgICB3b2xmc2VudHJ5X3JvdXRlX2ZsYWdzX3QgZmxhZ3MsCisgICAgc3RydWN0IHdvbGZzZW50cnlfZGF0YSAqKndvbGZzZW50cnlfZGF0YV9vdXQpCit7CisgICAgc3RydWN0IHdvbGZzZW50cnlfZGF0YSAqd29sZnNlbnRyeV9kYXRhID0gKHN0cnVjdCB3b2xmc2VudHJ5X2RhdGEgKilYTUFMTE9DKAorICAgICAgICBzaXplb2YgKndvbGZzZW50cnlfZGF0YSwgTlVMTCwgRFlOQU1JQ19UWVBFX1NPQ0tBRERSKTsKKyAgICBpZiAod29sZnNlbnRyeV9kYXRhID09IE5VTEwpCisgICAgICAgIHJldHVybiBXT0xGU1NMX0ZBSUxVUkU7CisKKyAgICB3b2xmc2VudHJ5X2RhdGEtPmhlYXAgPSBOVUxMOworICAgIHdvbGZzZW50cnlfZGF0YS0+YWxsb2N0eXBlID0gRFlOQU1JQ19UWVBFX1NPQ0tBRERSOworCisjaWZkZWYgVEVTVF9JUFY2CisgICAgaWYgKChzaXplb2Ygd29sZnNlbnRyeV9kYXRhLT5yZW1vdGVfYWRkcmJ1ZiA8IHNpemVvZiByZW1vdGUtPnNpbjZfYWRkcikgfHwKKyAgICAgICAgKHNpemVvZiB3b2xmc2VudHJ5X2RhdGEtPmxvY2FsX2FkZHJidWYgPCBzaXplb2YgbG9jYWwtPnNpbjZfYWRkcikpCisgICAgICAgIHJldHVybiBXT0xGU1NMX0ZBSUxVUkU7CisgICAgd29sZnNlbnRyeV9kYXRhLT5yZW1vdGUuc2FfZmFtaWx5ID0gd29sZnNlbnRyeV9kYXRhLT5sb2NhbC5zYV9mYW1pbHkgPSByZW1vdGUtPnNpbjZfZmFtaWx5OworICAgIHdvbGZzZW50cnlfZGF0YS0+cmVtb3RlLnNhX3BvcnQgPSBudG9ocyhyZW1vdGUtPnNpbjZfcG9ydCk7CisgICAgd29sZnNlbnRyeV9kYXRhLT5sb2NhbC5zYV9wb3J0ID0gbnRvaHMobG9jYWwtPnNpbjZfcG9ydCk7CisgICAgaWYgKFdPTEZTRU5UUllfQ0hFQ0tfQklUUyhmbGFncywgV09MRlNFTlRSWV9ST1VURV9GTEFHX1NBX1JFTU9URV9BRERSX1dJTERDQVJEKSkgeworICAgICAgICB3b2xmc2VudHJ5X2RhdGEtPnJlbW90ZS5hZGRyX2xlbiA9IDA7CisgICAgICAgIFhNRU1TRVQod29sZnNlbnRyeV9kYXRhLT5yZW1vdGUuYWRkciwgMCwgc2l6ZW9mIHJlbW90ZS0+c2luNl9hZGRyKTsKKyAgICB9IGVsc2UgeworICAgICAgICB3b2xmc2VudHJ5X2RhdGEtPnJlbW90ZS5hZGRyX2xlbiA9IHNpemVvZiByZW1vdGUtPnNpbjZfYWRkciAqIEJJVFNfUEVSX0JZVEU7CisgICAgICAgIFhNRU1DUFkod29sZnNlbnRyeV9kYXRhLT5yZW1vdGUuYWRkciwgJnJlbW90ZS0+c2luNl9hZGRyLCBzaXplb2YgcmVtb3RlLT5zaW42X2FkZHIpOworICAgIH0KKyAgICBpZiAoV09MRlNFTlRSWV9DSEVDS19CSVRTKGZsYWdzLCBXT0xGU0VOVFJZX1JPVVRFX0ZMQUdfU0FfTE9DQUxfQUREUl9XSUxEQ0FSRCkpIHsKKyAgICAgICAgd29sZnNlbnRyeV9kYXRhLT5sb2NhbC5hZGRyX2xlbiA9IDA7CisgICAgICAgIFhNRU1TRVQod29sZnNlbnRyeV9kYXRhLT5sb2NhbC5hZGRyLCAwLCBzaXplb2YgbG9jYWwtPnNpbjZfYWRkcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd29sZnNlbnRyeV9kYXRhLT5sb2NhbC5hZGRyX2xlbiA9IHNpemVvZiBsb2NhbC0+c2luNl9hZGRyICogQklUU19QRVJfQllURTsKKyAgICAgICAgWE1FTUNQWSh3b2xmc2VudHJ5X2RhdGEtPmxvY2FsLmFkZHIsICZsb2NhbC0+c2luNl9hZGRyLCBzaXplb2YgbG9jYWwtPnNpbjZfYWRkcik7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoKHNpemVvZiB3b2xmc2VudHJ5X2RhdGEtPnJlbW90ZV9hZGRyYnVmIDwgc2l6ZW9mIHJlbW90ZS0+c2luX2FkZHIpIHx8CisgICAgICAgIChzaXplb2Ygd29sZnNlbnRyeV9kYXRhLT5sb2NhbF9hZGRyYnVmIDwgc2l6ZW9mIGxvY2FsLT5zaW5fYWRkcikpCisgICAgICAgIHJldHVybiBXT0xGU1NMX0ZBSUxVUkU7CisgICAgd29sZnNlbnRyeV9kYXRhLT5yZW1vdGUuc2FfZmFtaWx5ID0gd29sZnNlbnRyeV9kYXRhLT5sb2NhbC5zYV9mYW1pbHkgPSByZW1vdGUtPnNpbl9mYW1pbHk7CisgICAgd29sZnNlbnRyeV9kYXRhLT5yZW1vdGUuc2FfcG9ydCA9IG50b2hzKHJlbW90ZS0+c2luX3BvcnQpOworICAgIHdvbGZzZW50cnlfZGF0YS0+bG9jYWwuc2FfcG9ydCA9IG50b2hzKGxvY2FsLT5zaW5fcG9ydCk7CisgICAgaWYgKFdPTEZTRU5UUllfQ0hFQ0tfQklUUyhmbGFncywgV09MRlNFTlRSWV9ST1VURV9GTEFHX1NBX1JFTU9URV9BRERSX1dJTERDQVJEKSkgeworICAgICAgICB3b2xmc2VudHJ5X2RhdGEtPnJlbW90ZS5hZGRyX2xlbiA9IDA7CisgICAgICAgIFhNRU1TRVQod29sZnNlbnRyeV9kYXRhLT5yZW1vdGUuYWRkciwgMCwgc2l6ZW9mIHJlbW90ZS0+c2luX2FkZHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHdvbGZzZW50cnlfZGF0YS0+cmVtb3RlLmFkZHJfbGVuID0gc2l6ZW9mIHJlbW90ZS0+c2luX2FkZHIgKiBCSVRTX1BFUl9CWVRFOworICAgICAgICBYTUVNQ1BZKHdvbGZzZW50cnlfZGF0YS0+cmVtb3RlLmFkZHIsICZyZW1vdGUtPnNpbl9hZGRyLCBzaXplb2YgcmVtb3RlLT5zaW5fYWRkcik7CisgICAgfQorICAgIGlmIChXT0xGU0VOVFJZX0NIRUNLX0JJVFMoZmxhZ3MsIFdPTEZTRU5UUllfUk9VVEVfRkxBR19TQV9MT0NBTF9BRERSX1dJTERDQVJEKSkgeworICAgICAgICB3b2xmc2VudHJ5X2RhdGEtPmxvY2FsLmFkZHJfbGVuID0gMDsKKyAgICAgICAgWE1FTVNFVCh3b2xmc2VudHJ5X2RhdGEtPmxvY2FsLmFkZHIsIDAsIHNpemVvZiBsb2NhbC0+c2luX2FkZHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHdvbGZzZW50cnlfZGF0YS0+bG9jYWwuYWRkcl9sZW4gPSBzaXplb2YgbG9jYWwtPnNpbl9hZGRyICogQklUU19QRVJfQllURTsKKyAgICAgICAgWE1FTUNQWSh3b2xmc2VudHJ5X2RhdGEtPmxvY2FsLmFkZHIsICZsb2NhbC0+c2luX2FkZHIsIHNpemVvZiBsb2NhbC0+c2luX2FkZHIpOworICAgIH0KKyNlbmRpZgorICAgIHdvbGZzZW50cnlfZGF0YS0+cmVtb3RlLnNhX3Byb3RvID0gd29sZnNlbnRyeV9kYXRhLT5sb2NhbC5zYV9wcm90byA9IHByb3RvOworICAgIHdvbGZzZW50cnlfZGF0YS0+cmVtb3RlLmludGVyZmFjZSA9IHdvbGZzZW50cnlfZGF0YS0+bG9jYWwuaW50ZXJmYWNlID0gMDsKKyAgICB3b2xmc2VudHJ5X2RhdGEtPmZsYWdzID0gZmxhZ3M7CisKKyAgICBpZiAod29sZlNTTF9zZXRfZXhfZGF0YV93aXRoX2NsZWFudXAoCisgICAgICAgICAgICBzc2wsIHdvbGZzZW50cnlfZGF0YV9pbmRleCwgd29sZnNlbnRyeV9kYXRhLAorICAgICAgICAgICAgKHdvbGZTU0xfZXhfZGF0YV9jbGVhbnVwX3JvdXRpbmVfdClmcmVlX3dvbGZzZW50cnlfZGF0YSkgIT0KKyAgICAgICAgV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgIGZyZWVfd29sZnNlbnRyeV9kYXRhKHdvbGZzZW50cnlfZGF0YSk7CisgICAgICAgIHJldHVybiBXT0xGU1NMX0ZBSUxVUkU7CisgICAgfQorCisgICAgaWYgKHdvbGZzZW50cnlfZGF0YV9vdXQgIT0gTlVMTCkKKyAgICAgICAgKndvbGZzZW50cnlfZGF0YV9vdXQgPSB3b2xmc2VudHJ5X2RhdGE7CisKKyAgICByZXR1cm4gV09MRlNTTF9TVUNDRVNTOworfQorCitzdGF0aWMgaW50IHdvbGZTZW50cnlfTmV0d29ya0ZpbHRlckNhbGxiYWNrKAorICAgIFdPTEZTU0wgKnNzbCwKKyAgICBzdHJ1Y3Qgd29sZnNlbnRyeV9jb250ZXh0ICpfd29sZnNlbnRyeSwKKyAgICB3b2xmU1NMX25ldGZpbHRlcl9kZWNpc2lvbl90ICpkZWNpc2lvbikKK3sKKyAgICBzdHJ1Y3Qgd29sZnNlbnRyeV9kYXRhICpkYXRhOworICAgIGNoYXIgaW5ldF9udG9wX2J1ZltJTkVUNl9BRERSU1RSTEVOXSwgaW5ldF9udG9wX2J1ZjJbSU5FVDZfQUREUlNUUkxFTl07CisgICAgd29sZnNlbnRyeV9lcnJjb2RlX3QgcmV0OworICAgIHdvbGZzZW50cnlfYWN0aW9uX3Jlc190IGFjdGlvbl9yZXN1bHRzOworCisgICAgaWYgKChkYXRhID0gd29sZlNTTF9nZXRfZXhfZGF0YShzc2wsIHdvbGZzZW50cnlfZGF0YV9pbmRleCkpID09IE5VTEwpCisgICAgICAgIHJldHVybiBXT0xGU1NMX0ZBSUxVUkU7CisKKyAgICByZXQgPSB3b2xmc2VudHJ5X3JvdXRlX2V2ZW50X2Rpc3BhdGNoKAorICAgICAgICBfd29sZnNlbnRyeSwKKyAgICAgICAgJmRhdGEtPnJlbW90ZSwKKyAgICAgICAgJmRhdGEtPmxvY2FsLAorICAgICAgICBkYXRhLT5mbGFncywKKyAgICAgICAgTlVMTCAvKiBldmVudF9sYWJlbCAqLywKKyAgICAgICAgMCAvKiBldmVudF9sYWJlbF9sZW4gKi8sCisgICAgICAgIE5VTEwgLyogY2FsbGVyX2NvbnRleHQgKi8sCisgICAgICAgIE5VTEwgLyogaWQgKi8sCisgICAgICAgIE5VTEwgLyogaW5leGFjdF9tYXRjaGVzICovLAorICAgICAgICAmYWN0aW9uX3Jlc3VsdHMpOworCisgICAgaWYgKHJldCA+PSAwKSB7CisgICAgICAgIGlmIChXT0xGU0VOVFJZX0NIRUNLX0JJVFMoYWN0aW9uX3Jlc3VsdHMsIFdPTEZTRU5UUllfQUNUSU9OX1JFU19SRUpFQ1QpKQorICAgICAgICAgICAgKmRlY2lzaW9uID0gV09MRlNTTF9ORVRGSUxURVJfUkVKRUNUOworICAgICAgICBlbHNlIGlmIChXT0xGU0VOVFJZX0NIRUNLX0JJVFMoYWN0aW9uX3Jlc3VsdHMsIFdPTEZTRU5UUllfQUNUSU9OX1JFU19BQ0NFUFQpKQorICAgICAgICAgICAgKmRlY2lzaW9uID0gV09MRlNTTF9ORVRGSUxURVJfQUNDRVBUOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZGVjaXNpb24gPSBXT0xGU1NMX05FVEZJTFRFUl9QQVNTOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50Zigid29sZnNlbnRyeV9yb3V0ZV9ldmVudF9kaXNwYXRjaCBlcnJvciAiCisgICAgICAgICAgICAgICBXT0xGU0VOVFJZX0VSUk9SX0ZNVCAiXG4iLCBXT0xGU0VOVFJZX0VSUk9SX0ZNVF9BUkdTKHJldCkpOworICAgICAgICAqZGVjaXNpb24gPSBXT0xGU1NMX05FVEZJTFRFUl9QQVNTOworICAgIH0KKworICAgIHByaW50Zigid29sZlNlbnRyeSBnb3QgbmV0d29yayBmaWx0ZXIgY2FsbGJhY2s6IGZhbWlseT0lZCBwcm90bz0lZCBycG9ydD0lZCIKKyAgICAgICAgICAgIiBscG9ydD0lZCByYWRkcj0lcyBsYWRkcj0lcyBpbnRlcmZhY2U9JWQ7IGRlY2lzaW9uPSVkICglcylcbiIsCisgICAgICAgICAgIGRhdGEtPnJlbW90ZS5zYV9mYW1pbHksCisgICAgICAgICAgIGRhdGEtPnJlbW90ZS5zYV9wcm90bywKKyAgICAgICAgICAgZGF0YS0+cmVtb3RlLnNhX3BvcnQsCisgICAgICAgICAgIGRhdGEtPmxvY2FsLnNhX3BvcnQsCisgICAgICAgICAgIGluZXRfbnRvcChkYXRhLT5yZW1vdGUuc2FfZmFtaWx5LCBkYXRhLT5yZW1vdGUuYWRkciwgaW5ldF9udG9wX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBpbmV0X250b3BfYnVmKSwKKyAgICAgICAgICAgaW5ldF9udG9wKGRhdGEtPmxvY2FsLnNhX2ZhbWlseSwgZGF0YS0+bG9jYWwuYWRkciwgaW5ldF9udG9wX2J1ZjIsCisgICAgICAgICAgICAgICAgICAgICBzaXplb2YgaW5ldF9udG9wX2J1ZjIpLAorICAgICAgICAgICBkYXRhLT5yZW1vdGUuaW50ZXJmYWNlLAorICAgICAgICAgICAqZGVjaXNpb24sCisgICAgICAgICAgICpkZWNpc2lvbiA9PSBXT0xGU1NMX05FVEZJTFRFUl9SRUpFQ1QgPyAiUkVKRUNUIiA6CisgICAgICAgICAgICpkZWNpc2lvbiA9PSBXT0xGU1NMX05FVEZJTFRFUl9BQ0NFUFQgPyAiQUNDRVBUIiA6CisgICAgICAgICAgICpkZWNpc2lvbiA9PSBXT0xGU1NMX05FVEZJTFRFUl9QQVNTID8gIlBBU1MiIDoKKyAgICAgICAgICAgIj8/PyIpOworCisgICAgcmV0dXJuIFdPTEZTU0xfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCB3b2xmc2VudHJ5X3NldHVwKAorICAgIHN0cnVjdCB3b2xmc2VudHJ5X2NvbnRleHQgKipfd29sZnNlbnRyeSwKKyAgICBjb25zdCBjaGFyICpfd29sZnNlbnRyeV9jb25maWdfcGF0aCwKKyAgICB3b2xmc2VudHJ5X3JvdXRlX2ZsYWdzX3Qgcm91dGVfZmxhZ3MpCit7CisgICAgd29sZnNlbnRyeV9lcnJjb2RlX3QgcmV0OworICAgIHJldCA9ICB3b2xmc2VudHJ5X2luaXQoTlVMTCAvKiBocGkgKi8sIE5VTEwgLyogZGVmYXVsdCBjb25maWcgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfd29sZnNlbnRyeSk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3b2xmc2VudHJ5X2luaXQoKSByZXR1cm5lZCAiIFdPTEZTRU5UUllfRVJST1JfRk1UICJcbiIsCisgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9FUlJPUl9GTVRfQVJHUyhyZXQpKTsKKyAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIGluaXRpYWxpemUgd29sZlNlbnRyeSIpOworICAgIH0KKworICAgIGlmICh3b2xmc2VudHJ5X2RhdGFfaW5kZXggPCAwKQorICAgICAgICB3b2xmc2VudHJ5X2RhdGFfaW5kZXggPSB3b2xmU1NMX2dldF9leF9uZXdfaW5kZXgoMCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisjaWYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgIWRlZmluZWQoV09MRlNFTlRSWV9OT19KU09OKQorICAgIGlmIChfd29sZnNlbnRyeV9jb25maWdfcGF0aCAhPSBOVUxMKSB7CisgICAgICAgIGNoYXIgYnVmWzUxMl0sIGVycl9idWZbNTEyXTsKKyAgICAgICAgc3RydWN0IHdvbGZzZW50cnlfanNvbl9wcm9jZXNzX3N0YXRlICpqcHM7CisKKyAgICAgICAgRklMRSAqZiA9IGZvcGVuKF93b2xmc2VudHJ5X2NvbmZpZ19wYXRoLCAiciIpOworCisgICAgICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZm9wZW4oJXMpOiAlc1xuIixfd29sZnNlbnRyeV9jb25maWdfcGF0aCxzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIG9wZW4gd29sZlNlbnRyeSBjb25maWcgZmlsZSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChyZXQgPSB3b2xmc2VudHJ5X2NvbmZpZ19qc29uX2luaXQoCisgICAgICAgICAgICAgICAgICpfd29sZnNlbnRyeSwKKyAgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9DT05GSUdfTE9BRF9GTEFHX05PTkUsCisgICAgICAgICAgICAgICAgICZqcHMpKSA8IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid29sZnNlbnRyeV9jb25maWdfanNvbl9pbml0KCkgcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX0VSUk9SX0ZNVCAiXG4iLAorICAgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX0VSUk9SX0ZNVF9BUkdTKHJldCkpOworICAgICAgICAgICAgZXJyX3N5cygiZXJyb3Igd2hpbGUgaW5pdGlhbGl6aW5nIHdvbGZTZW50cnkgY29uZmlnIHBhcnNlciIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgc2l6ZV90IG4gPSBmcmVhZChidWYsIDEsIHNpemVvZiBidWYsIGYpOworICAgICAgICAgICAgaWYgKChuIDwgc2l6ZW9mIGJ1ZikgJiYgZmVycm9yKGYpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsImZyZWFkKCVzKTogJXNcbiIsX3dvbGZzZW50cnlfY29uZmlnX3BhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgZXJyX3N5cygiZXJyb3Igd2hpbGUgcmVhZGluZyB3b2xmU2VudHJ5IGNvbmZpZyBmaWxlIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCA9IHdvbGZzZW50cnlfY29uZmlnX2pzb25fZmVlZChqcHMsIGJ1ZiwgbiwgZXJyX2J1Ziwgc2l6ZW9mIGVycl9idWYpOworICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiUuKnNcbiIsIChpbnQpc2l6ZW9mIGVycl9idWYsIGVycl9idWYpOworICAgICAgICAgICAgICAgIGVycl9zeXMoImVycm9yIHdoaWxlIGxvYWRpbmcgd29sZlNlbnRyeSBjb25maWcgZmlsZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChuIDwgc2l6ZW9mIGJ1ZikgJiYgZmVvZihmKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZik7CisKKyAgICAgICAgaWYgKChyZXQgPSB3b2xmc2VudHJ5X2NvbmZpZ19qc29uX2ZpbmkoanBzLCBlcnJfYnVmLCBzaXplb2YgZXJyX2J1ZikpIDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlLipzXG4iLCAoaW50KXNpemVvZiBlcnJfYnVmLCBlcnJfYnVmKTsKKyAgICAgICAgICAgIGVycl9zeXMoImVycm9yIHdoaWxlIGxvYWRpbmcgd29sZlNlbnRyeSBjb25maWcgZmlsZSIpOworICAgICAgICB9CisKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiAhTk9fRklMRVNZU1RFTSAmJiAhV09MRlNFTlRSWV9OT19KU09OICovCisgICAgeworICAgICAgICBzdHJ1Y3Qgd29sZnNlbnRyeV9yb3V0ZV90YWJsZSAqdGFibGU7CisKKyAgICAgICAgaWYgKChyZXQgPSB3b2xmc2VudHJ5X3JvdXRlX2dldF90YWJsZV9zdGF0aWMoKl93b2xmc2VudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWJsZSkpIDwgMCkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid29sZnNlbnRyeV9yb3V0ZV9nZXRfdGFibGVfc3RhdGljKCkgcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX0VSUk9SX0ZNVCAiXG4iLAorICAgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX0VSUk9SX0ZNVF9BUkdTKHJldCkpOworCisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICBpZiAoV09MRlNFTlRSWV9DSEVDS19CSVRTKHJvdXRlX2ZsYWdzLCBXT0xGU0VOVFJZX1JPVVRFX0ZMQUdfRElSRUNUSU9OX09VVCkpIHsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgc3RydWN0IHdvbGZzZW50cnlfc29ja2FkZHIgc2E7CisgICAgICAgICAgICAgICAgYnl0ZSBidWZbMTZdOworICAgICAgICAgICAgfSByZW1vdGUsIGxvY2FsOworICAgICAgICAgICAgd29sZnNlbnRyeV9lbnRfaWRfdCBpZDsKKyAgICAgICAgICAgIHdvbGZzZW50cnlfYWN0aW9uX3Jlc190IGFjdGlvbl9yZXN1bHRzOworCisgICAgICAgICAgICBpZiAoKHJldCA9IHdvbGZzZW50cnlfcm91dGVfdGFibGVfZGVmYXVsdF9wb2xpY3lfc2V0KAorICAgICAgICAgICAgICAgICAgICAgKl93b2xmc2VudHJ5LCB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfQUNUSU9OX1JFU19BQ0NFUFQpKQorICAgICAgICAgICAgICAgIDwgMCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgIndvbGZzZW50cnlfcm91dGVfdGFibGVfZGVmYXVsdF9wb2xpY3lfc2V0KCkgcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9FUlJPUl9GTVQgIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfRVJST1JfRk1UX0FSR1MocmV0KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgWE1FTVNFVCgmcmVtb3RlLCAwLCBzaXplb2YgcmVtb3RlKTsKKyAgICAgICAgICAgIFhNRU1TRVQoJmxvY2FsLCAwLCBzaXplb2YgbG9jYWwpOworI2lmZGVmIFRFU1RfSVBWNgorICAgICAgICAgICAgcmVtb3RlLnNhLnNhX2ZhbWlseSA9IGxvY2FsLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICAgICAgcmVtb3RlLnNhLmFkZHJfbGVuID0gMTI4OworICAgICAgICAgICAgWE1FTUNQWShyZW1vdGUuc2EuYWRkciwgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDEiLCAxNik7CisjZWxzZQorICAgICAgICAgICAgcmVtb3RlLnNhLnNhX2ZhbWlseSA9IGxvY2FsLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgICAgICByZW1vdGUuc2EuYWRkcl9sZW4gPSAzMjsKKyAgICAgICAgICAgIFhNRU1DUFkocmVtb3RlLnNhLmFkZHIsICJcMTc3XDAwMFwwMDBcMDAxIiwgNCk7CisjZW5kaWYKKworICAgICAgICAgICAgaWYgKChyZXQgPSB3b2xmc2VudHJ5X3JvdXRlX2luc2VydF9zdGF0aWMKKyAgICAgICAgICAgICAgICAgKCpfd29sZnNlbnRyeSwgTlVMTCAvKiBjYWxsZXJfY29udGV4dCAqLywgJnJlbW90ZS5zYSwgJmxvY2FsLnNhLAorICAgICAgICAgICAgICAgICAgcm91dGVfZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX1JPVVRFX0ZMQUdfR1JFRU5MSVNURUQgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfUk9VVEVfRkxBR19QQVJFTlRfRVZFTlRfV0lMRENBUkQgICAgfAorICAgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9ST1VURV9GTEFHX1JFTU9URV9JTlRFUkZBQ0VfV0lMRENBUkR8CisgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX1JPVVRFX0ZMQUdfTE9DQUxfSU5URVJGQUNFX1dJTERDQVJEIHwKKyAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfUk9VVEVfRkxBR19TQV9MT0NBTF9BRERSX1dJTERDQVJEICAgfAorICAgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9ST1VURV9GTEFHX1NBX1BST1RPX1dJTERDQVJEICAgICAgICB8CisgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX1JPVVRFX0ZMQUdfU0FfUkVNT1RFX1BPUlRfV0lMRENBUkQgIHwKKyAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfUk9VVEVfRkxBR19TQV9MT0NBTF9QT1JUX1dJTERDQVJELAorICAgICAgICAgICAgICAgICAgMCAvKiBldmVudF9sYWJlbF9sZW4gKi8sIDAgLyogZXZlbnRfbGFiZWwgKi8sICZpZCwKKyAgICAgICAgICAgICAgICAgICZhY3Rpb25fcmVzdWx0cykpIDwgMCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid29sZnNlbnRyeV9yb3V0ZV9pbnNlcnRfc3RhdGljKCkgcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9FUlJPUl9GTVQgIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfRVJST1JfRk1UX0FSR1MocmV0KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChXT0xGU0VOVFJZX0NIRUNLX0JJVFMocm91dGVfZmxhZ3MsIFdPTEZTRU5UUllfUk9VVEVfRkxBR19ESVJFQ1RJT05fSU4pKSB7CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIHN0cnVjdCB3b2xmc2VudHJ5X3NvY2thZGRyIHNhOworICAgICAgICAgICAgICAgIGJ5dGUgYnVmWzE2XTsKKyAgICAgICAgICAgIH0gcmVtb3RlLCBsb2NhbDsKKyAgICAgICAgICAgIHdvbGZzZW50cnlfZW50X2lkX3QgaWQ7CisgICAgICAgICAgICB3b2xmc2VudHJ5X2FjdGlvbl9yZXNfdCBhY3Rpb25fcmVzdWx0czsKKworICAgICAgICAgICAgaWYgKChyZXQgPSB3b2xmc2VudHJ5X3JvdXRlX3RhYmxlX2RlZmF1bHRfcG9saWN5X3NldCgKKyAgICAgICAgICAgICAgICAgICAgICpfd29sZnNlbnRyeSwgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX0FDVElPTl9SRVNfUkVKRUNUfFdPTEZTRU5UUllfQUNUSU9OX1JFU19TVE9QKSkKKyAgICAgICAgICAgICAgICA8IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3b2xmc2VudHJ5X3JvdXRlX3RhYmxlX2RlZmF1bHRfcG9saWN5X3NldCgpIHJldHVybmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfRVJST1JfRk1UICJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX0VSUk9SX0ZNVF9BUkdTKHJldCkpOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFhNRU1TRVQoJnJlbW90ZSwgMCwgc2l6ZW9mIHJlbW90ZSk7CisgICAgICAgICAgICBYTUVNU0VUKCZsb2NhbCwgMCwgc2l6ZW9mIGxvY2FsKTsKKyNpZmRlZiBURVNUX0lQVjYKKyAgICAgICAgICAgIHJlbW90ZS5zYS5zYV9mYW1pbHkgPSBsb2NhbC5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgIHJlbW90ZS5zYS5hZGRyX2xlbiA9IDEyODsKKyAgICAgICAgICAgIFhNRU1DUFkocmVtb3RlLnNhLmFkZHIsICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxIiwgMTYpOworI2Vsc2UKKyAgICAgICAgICAgIHJlbW90ZS5zYS5zYV9mYW1pbHkgPSBsb2NhbC5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICAgICAgcmVtb3RlLnNhLmFkZHJfbGVuID0gMzI7CisgICAgICAgICAgICBYTUVNQ1BZKHJlbW90ZS5zYS5hZGRyLCAiXDE3N1wwMDBcMDAwXDAwMSIsIDQpOworI2VuZGlmCisKKyAgICAgICAgICAgIGlmICgocmV0ID0gd29sZnNlbnRyeV9yb3V0ZV9pbnNlcnRfc3RhdGljCisgICAgICAgICAgICAgICAgICgqX3dvbGZzZW50cnksIE5VTEwgLyogY2FsbGVyX2NvbnRleHQgKi8sICZyZW1vdGUuc2EsICZsb2NhbC5zYSwKKyAgICAgICAgICAgICAgICAgIHJvdXRlX2ZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9ST1VURV9GTEFHX0dSRUVOTElTVEVEICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX1JPVVRFX0ZMQUdfUEFSRU5UX0VWRU5UX1dJTERDQVJEICAgIHwKKyAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfUk9VVEVfRkxBR19SRU1PVEVfSU5URVJGQUNFX1dJTERDQVJEfAorICAgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9ST1VURV9GTEFHX0xPQ0FMX0lOVEVSRkFDRV9XSUxEQ0FSRCB8CisgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX1JPVVRFX0ZMQUdfU0FfTE9DQUxfQUREUl9XSUxEQ0FSRCAgIHwKKyAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfUk9VVEVfRkxBR19TQV9QUk9UT19XSUxEQ0FSRCAgICAgICAgfAorICAgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9ST1VURV9GTEFHX1NBX1JFTU9URV9QT1JUX1dJTERDQVJEICB8CisgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX1JPVVRFX0ZMQUdfU0FfTE9DQUxfUE9SVF9XSUxEQ0FSRCwKKyAgICAgICAgICAgICAgICAgIDAgLyogZXZlbnRfbGFiZWxfbGVuICovLCAwIC8qIGV2ZW50X2xhYmVsICovLCAmaWQsCisgICAgICAgICAgICAgICAgICAmYWN0aW9uX3Jlc3VsdHMpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndvbGZzZW50cnlfcm91dGVfaW5zZXJ0X3N0YXRpYygpIHJldHVybmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfRVJST1JfRk1UICJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX0VSUk9SX0ZNVF9BUkdTKHJldCkpOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFdDX0lOTElORSBpbnQgdGNwX2Nvbm5lY3Rfd2l0aF93b2xmU2VudHJ5KAorICAgIFNPQ0tFVF9UKiBzb2NrZmQsCisgICAgY29uc3QgY2hhciogaXAsCisgICAgd29yZDE2IHBvcnQsCisgICAgaW50IHVkcCwKKyAgICBpbnQgc2N0cCwKKyAgICBXT0xGU1NMKiBzc2wsCisgICAgc3RydWN0IHdvbGZzZW50cnlfY29udGV4dCAqX3dvbGZzZW50cnkpCit7CisgICAgU09DS0FERFJfSU5fVCByZW1vdGVfYWRkcjsKKyAgICBzdHJ1Y3Qgd29sZnNlbnRyeV9kYXRhICp3b2xmc2VudHJ5X2RhdGE7CisgICAgY2hhciBpbmV0X250b3BfYnVmW0lORVQ2X0FERFJTVFJMRU5dLCBpbmV0X250b3BfYnVmMltJTkVUNl9BRERSU1RSTEVOXTsKKyAgICB3b2xmc2VudHJ5X2VycmNvZGVfdCByZXQ7CisgICAgd29sZnNlbnRyeV9hY3Rpb25fcmVzX3QgYWN0aW9uX3Jlc3VsdHM7CisgICAgd29sZlNTTF9uZXRmaWx0ZXJfZGVjaXNpb25fdCBkZWNpc2lvbjsKKworICAgIGJ1aWxkX2FkZHIoJnJlbW90ZV9hZGRyLCBpcCwgcG9ydCwgdWRwLCBzY3RwKTsKKworICAgIHsKKyAgICAgICAgU09DS0FERFJfSU5fVCBsb2NhbF9hZGRyOworI2lmZGVmIFRFU1RfSVBWNgorICAgICAgICBsb2NhbF9hZGRyLnNpbjZfcG9ydCA9IDA7CisjZWxzZQorICAgICAgICBsb2NhbF9hZGRyLnNpbl9wb3J0ID0gMDsKKyNlbmRpZgorICAgICAgICAoKHN0cnVjdCBzb2NrYWRkciAqKSZsb2NhbF9hZGRyKS0+c2FfZmFtaWx5ID0gKChzdHJ1Y3Qgc29ja2FkZHIgKikmcmVtb3RlX2FkZHIpLT5zYV9mYW1pbHk7CisKKyAgICAgICAgaWYgKHdvbGZzZW50cnlfc3RvcmVfZW5kcG9pbnRzKAorICAgICAgICAgICAgICAgIHNzbCwgJnJlbW90ZV9hZGRyLCAmbG9jYWxfYWRkciwKKyAgICAgICAgICAgICAgICB1ZHAgPyBJUFBST1RPX1VEUCA6IElQUFJPVE9fVENQLAorICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfUk9VVEVfRkxBR19ESVJFQ1RJT05fT1VUfAorICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfUk9VVEVfRkxBR19TQV9MT0NBTF9BRERSX1dJTERDQVJEfAorICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfUk9VVEVfRkxBR19TQV9MT0NBTF9QT1JUX1dJTERDQVJELCAmd29sZnNlbnRyeV9kYXRhKSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9GQUlMVVJFOworICAgIH0KKworICAgIHJldCA9IHdvbGZzZW50cnlfcm91dGVfZXZlbnRfZGlzcGF0Y2goCisgICAgICAgIF93b2xmc2VudHJ5LAorICAgICAgICAmd29sZnNlbnRyeV9kYXRhLT5yZW1vdGUsCisgICAgICAgICZ3b2xmc2VudHJ5X2RhdGEtPmxvY2FsLAorICAgICAgICB3b2xmc2VudHJ5X2RhdGEtPmZsYWdzLAorICAgICAgICBOVUxMIC8qIGV2ZW50X2xhYmVsICovLAorICAgICAgICAwICAgIC8qIGV2ZW50X2xhYmVsX2xlbiAqLywKKyAgICAgICAgTlVMTCAvKiBjYWxsZXJfY29udGV4dCAqLywKKyAgICAgICAgTlVMTCAvKiBpZCAqLywKKyAgICAgICAgTlVMTCAvKiBpbmV4YWN0X21hdGNoZXMgKi8sCisgICAgICAgICZhY3Rpb25fcmVzdWx0cyk7CisKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBwcmludGYoIndvbGZzZW50cnlfcm91dGVfZXZlbnRfZGlzcGF0Y2ggZXJyb3IgIgorICAgICAgICAgICAgICAgV09MRlNFTlRSWV9FUlJPUl9GTVQgIlxuIiwgV09MRlNFTlRSWV9FUlJPUl9GTVRfQVJHUyhyZXQpKTsKKyAgICAgICAgZGVjaXNpb24gPSBXT0xGU1NMX05FVEZJTFRFUl9QQVNTOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChXT0xGU0VOVFJZX0NIRUNLX0JJVFMoYWN0aW9uX3Jlc3VsdHMsIFdPTEZTRU5UUllfQUNUSU9OX1JFU19SRUpFQ1QpKQorICAgICAgICAgICAgZGVjaXNpb24gPSBXT0xGU1NMX05FVEZJTFRFUl9SRUpFQ1Q7CisgICAgICAgIGVsc2UgaWYgKFdPTEZTRU5UUllfQ0hFQ0tfQklUUyhhY3Rpb25fcmVzdWx0cywgV09MRlNFTlRSWV9BQ1RJT05fUkVTX0FDQ0VQVCkpCisgICAgICAgICAgICBkZWNpc2lvbiA9IFdPTEZTU0xfTkVURklMVEVSX0FDQ0VQVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVjaXNpb24gPSBXT0xGU1NMX05FVEZJTFRFUl9QQVNTOworICAgIH0KKworICAgIHByaW50Zigid29sZlNlbnRyeSBjYWxsaW4gZnJvbSB0Y3BfY29ubmVjdF93aXRoX3dvbGZTZW50cnk6IGZhbWlseT0lZCBwcm90bz0lZCBycG9ydD0lZCIKKyAgICAgICAgICAgIiBscG9ydD0lZCByYWRkcj0lcyBsYWRkcj0lcyBpbnRlcmZhY2U9JWQ7IGRlY2lzaW9uPSVkICglcylcbiIsCisgICAgICAgICAgIHdvbGZzZW50cnlfZGF0YS0+cmVtb3RlLnNhX2ZhbWlseSwKKyAgICAgICAgICAgd29sZnNlbnRyeV9kYXRhLT5yZW1vdGUuc2FfcHJvdG8sCisgICAgICAgICAgIHdvbGZzZW50cnlfZGF0YS0+cmVtb3RlLnNhX3BvcnQsCisgICAgICAgICAgIHdvbGZzZW50cnlfZGF0YS0+bG9jYWwuc2FfcG9ydCwKKyAgICAgICAgICAgaW5ldF9udG9wKHdvbGZzZW50cnlfZGF0YS0+cmVtb3RlLnNhX2ZhbWlseSwgd29sZnNlbnRyeV9kYXRhLT5yZW1vdGUuYWRkciwgaW5ldF9udG9wX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBpbmV0X250b3BfYnVmKSwKKyAgICAgICAgICAgaW5ldF9udG9wKHdvbGZzZW50cnlfZGF0YS0+bG9jYWwuc2FfZmFtaWx5LCB3b2xmc2VudHJ5X2RhdGEtPmxvY2FsLmFkZHIsIGluZXRfbnRvcF9idWYyLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIGluZXRfbnRvcF9idWYyKSwKKyAgICAgICAgICAgd29sZnNlbnRyeV9kYXRhLT5yZW1vdGUuaW50ZXJmYWNlLAorICAgICAgICAgICBkZWNpc2lvbiwKKyAgICAgICAgICAgZGVjaXNpb24gPT0gV09MRlNTTF9ORVRGSUxURVJfUkVKRUNUID8gIlJFSkVDVCIgOgorICAgICAgICAgICBkZWNpc2lvbiA9PSBXT0xGU1NMX05FVEZJTFRFUl9BQ0NFUFQgPyAiQUNDRVBUIiA6CisgICAgICAgICAgIGRlY2lzaW9uID09IFdPTEZTU0xfTkVURklMVEVSX1BBU1MgPyAgICJQQVNTIiA6CisgICAgICAgICAgICI/Pz8iKTsKKworICAgIGlmIChkZWNpc2lvbiA9PSBXT0xGU1NMX05FVEZJTFRFUl9SRUpFQ1QpCisgICAgICAgIHJldHVybiBTT0NLRVRfRklMVEVSRURfRTsKKworICAgIGlmICh1ZHApIHsKKyAgICAgICAgd29sZlNTTF9kdGxzX3NldF9wZWVyKHNzbCwgJnJlbW90ZV9hZGRyLCBzaXplb2YocmVtb3RlX2FkZHIpKTsKKyAgICB9CisgICAgdGNwX3NvY2tldChzb2NrZmQsIHVkcCwgc2N0cCk7CisKKyAgICBpZiAoIXVkcCkgeworICAgICAgICBpZiAoY29ubmVjdCgqc29ja2ZkLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikmcmVtb3RlX2FkZHIsIHNpemVvZihyZW1vdGVfYWRkcikpICE9IDApCisgICAgICAgICAgICBlcnJfc3lzX3dpdGhfZXJybm8oInRjcCBjb25uZWN0IGZhaWxlZCIpOworICAgIH0KKworICAgIHJldHVybiBXT0xGU1NMX1NVQ0NFU1M7Cit9CisKKyNkZWZpbmUgdGNwX2Nvbm5lY3Qoc29ja2ZkLCBpcCwgcG9ydCwgdWRwLCBzY3RwLCBzc2wpIFwKKyAgICB0Y3BfY29ubmVjdF93aXRoX3dvbGZTZW50cnkoc29ja2ZkLCBpcCwgcG9ydCwgdWRwLCBzY3RwLCBzc2wsIHdvbGZzZW50cnkpCisKKyNlbHNlIC8qICFXT0xGU1NMX1dPTEZTRU5UUllfSE9PS1MgKi8KKworc3RhdGljIFdDX0lOTElORSB2b2lkIHRjcF9jb25uZWN0KFNPQ0tFVF9UKiBzb2NrZmQsIGNvbnN0IGNoYXIqIGlwLCB3b3JkMTYgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdWRwLCBpbnQgc2N0cCwgV09MRlNTTCogc3NsKQoreworICAgIFNPQ0tBRERSX0lOX1QgYWRkcjsKKyAgICBidWlsZF9hZGRyKCZhZGRyLCBpcCwgcG9ydCwgdWRwLCBzY3RwKTsKKyAgICBpZiAodWRwKSB7CisgICAgICAgIHdvbGZTU0xfZHRsc19zZXRfcGVlcihzc2wsICZhZGRyLCBzaXplb2YoYWRkcikpOworICAgIH0KKyAgICB0Y3Bfc29ja2V0KHNvY2tmZCwgdWRwLCBzY3RwKTsKKworICAgIGlmICghdWRwKSB7CisgICAgICAgIGlmIChjb25uZWN0KCpzb2NrZmQsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCBzaXplb2YoYWRkcikpICE9IDApCisgICAgICAgICAgICBlcnJfc3lzX3dpdGhfZXJybm8oInRjcCBjb25uZWN0IGZhaWxlZCIpOworICAgIH0KK30KKworI2VuZGlmIC8qIFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUyAqLworCisKK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCB1ZHBfY29ubmVjdChTT0NLRVRfVCogc29ja2ZkLCB2b2lkKiBhZGRyLCBpbnQgYWRkclN6KQoreworICAgIGlmIChjb25uZWN0KCpzb2NrZmQsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKWFkZHIsIGFkZHJTeikgIT0gMCkKKyAgICAgICAgZXJyX3N5c193aXRoX2Vycm5vKCJ0Y3AgY29ubmVjdCBmYWlsZWQiKTsKK30KKworCitlbnVtIHsKKyAgICBURVNUX1NFTEVDVF9GQUlMLAorICAgIFRFU1RfVElNRU9VVCwKKyAgICBURVNUX1JFQ1ZfUkVBRFksCisgICAgVEVTVF9TRU5EX1JFQURZLAorICAgIFRFU1RfRVJST1JfUkVBRFkKK307CisKKworI2lmICFkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkgJiYgIWRlZmluZWQoV09MRlNTTF9LRUlMX1RDUF9ORVQpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZpbmVkKFdPTEZTU0xfVElSVE9TKQorc3RhdGljIFdDX0lOTElORSBpbnQgdGNwX3NlbGVjdF9leChTT0NLRVRfVCBzb2NrZXRmZCwgaW50IHRvX3NlYywgaW50IHJ4KQoreworICAgIGZkX3NldCBmZHMsIGVycmZkczsKKyAgICBmZF9zZXQqIHJlY3ZmZHMgPSBOVUxMOworICAgIGZkX3NldCogc2VuZGZkcyA9IE5VTEw7CisgICAgU09DS0VUX1QgbmZkcyA9IHNvY2tldGZkICsgMTsKKyNpZiAhZGVmaW5lZChfX0lOVEVHUklUWSkKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0ID0geyh0b19zZWMgPiAwKSA/IHRvX3NlYyA6IDAsIDB9OworI2Vsc2UKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworI2VuZGlmCisgICAgaW50IHJlc3VsdDsKKworICAgIEZEX1pFUk8oJmZkcyk7CisgICAgRkRfU0VUKHNvY2tldGZkLCAmZmRzKTsKKyAgICBGRF9aRVJPKCZlcnJmZHMpOworICAgIEZEX1NFVChzb2NrZXRmZCwgJmVycmZkcyk7CisKKyAgICBpZiAocngpCisgICAgICAgIHJlY3ZmZHMgPSAmZmRzOworICAgIGVsc2UKKyAgICAgICAgc2VuZGZkcyA9ICZmZHM7CisKKyNpZiBkZWZpbmVkKF9fSU5URUdSSVRZKQorICAgIHRpbWVvdXQudHZfc2VjID0gKGxvbmcgbG9uZykodG9fc2VjID4gMCkgPyB0b19zZWMgOiAwLCAwOworI2VuZGlmCisgICAgcmVzdWx0ID0gc2VsZWN0KG5mZHMsIHJlY3ZmZHMsIHNlbmRmZHMsICZlcnJmZHMsICZ0aW1lb3V0KTsKKworICAgIGlmIChyZXN1bHQgPT0gMCkKKyAgICAgICAgcmV0dXJuIFRFU1RfVElNRU9VVDsKKyAgICBlbHNlIGlmIChyZXN1bHQgPiAwKSB7CisgICAgICAgIGlmIChGRF9JU1NFVChzb2NrZXRmZCwgJmZkcykpIHsKKyAgICAgICAgICAgIGlmIChyeCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVEVTVF9SRUNWX1JFQURZOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBURVNUX1NFTkRfUkVBRFk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihGRF9JU1NFVChzb2NrZXRmZCwgJmVycmZkcykpCisgICAgICAgICAgICByZXR1cm4gVEVTVF9FUlJPUl9SRUFEWTsKKyAgICB9CisKKyAgICByZXR1cm4gVEVTVF9TRUxFQ1RfRkFJTDsKK30KKworc3RhdGljIFdDX0lOTElORSBpbnQgdGNwX3NlbGVjdChTT0NLRVRfVCBzb2NrZXRmZCwgaW50IHRvX3NlYykKK3sKKyAgICByZXR1cm4gdGNwX3NlbGVjdF9leChzb2NrZXRmZCwgdG9fc2VjLCAxKTsKK30KKworc3RhdGljIFdDX0lOTElORSBpbnQgdGNwX3NlbGVjdF90eChTT0NLRVRfVCBzb2NrZXRmZCwgaW50IHRvX3NlYykKK3sKKyAgICByZXR1cm4gdGNwX3NlbGVjdF9leChzb2NrZXRmZCwgdG9fc2VjLCAwKTsKK30KKworI2VsaWYgZGVmaW5lZChXT0xGU1NMX1RJUlRPUykgfHwgZGVmaW5lZChXT0xGU1NMX0tFSUxfVENQX05FVCkKK3N0YXRpYyBXQ19JTkxJTkUgaW50IHRjcF9zZWxlY3QoU09DS0VUX1Qgc29ja2V0ZmQsIGludCB0b19zZWMpCit7CisgICAgcmV0dXJuIFRFU1RfUkVDVl9SRUFEWTsKK30KK3N0YXRpYyBXQ19JTkxJTkUgaW50IHRjcF9zZWxlY3RfdHgoU09DS0VUX1Qgc29ja2V0ZmQsIGludCB0b19zZWMpCit7CisgICAgcmV0dXJuIFRFU1RfU0VORF9SRUFEWTsKK30KKyNlbmRpZiAvKiAhV09MRlNTTF9NREtfQVJNICovCisKKworc3RhdGljIFdDX0lOTElORSB2b2lkIHRjcF9saXN0ZW4oU09DS0VUX1QqIHNvY2tmZCwgd29yZDE2KiBwb3J0LCBpbnQgdXNlQW55QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1ZHAsIGludCBzY3RwKQoreworICAgIFNPQ0tBRERSX0lOX1QgYWRkcjsKKworICAgIC8qIGRvbid0IHVzZSBJTkFERFJfQU5ZIGJ5IGRlZmF1bHQsIGZpcmV3YWxsIG1heSBibG9jaywgbWFrZSB1c2VyIHN3aXRjaAorICAgICAgIG9uICovCisgICAgYnVpbGRfYWRkcigmYWRkciwgKHVzZUFueUFkZHIgPyBJTkFERFJfQU5ZIDogd29sZlNTTElQKSwgKnBvcnQsIHVkcCwgc2N0cCk7CisgICAgdGNwX3NvY2tldChzb2NrZmQsIHVkcCwgc2N0cCk7CisKKyNpZiAhZGVmaW5lZChVU0VfV0lORE9XU19BUEkpICYmICFkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSlcCisgICAgICAgICAgICAgICAgICAgJiYgIWRlZmluZWQoV09MRlNTTF9LRUlMX1RDUF9ORVQpICYmICFkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgIHsKKyAgICAgICAgaW50ICAgICAgIHJlcywgb24gID0gMTsKKyAgICAgICAgc29ja2xlbl90IGxlbiA9IHNpemVvZihvbik7CisgICAgICAgIHJlcyA9IHNldHNvY2tvcHQoKnNvY2tmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb24sIGxlbik7CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgZXJyX3N5c193aXRoX2Vycm5vKCJzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUiBmYWlsZWRcbiIpOworICAgIH0KKyNpZmRlZiBTT19SRVVTRVBPUlQKKyAgICB7CisgICAgICAgIGludCAgICAgICByZXMsIG9uICA9IDE7CisgICAgICAgIHNvY2tsZW5fdCBsZW4gPSBzaXplb2Yob24pOworICAgICAgICByZXMgPSBzZXRzb2Nrb3B0KCpzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFUE9SVCwgJm9uLCBsZW4pOworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIGVycl9zeXNfd2l0aF9lcnJubygic2V0c29ja29wdCBTT19SRVVTRVBPUlQgZmFpbGVkXG4iKTsKKyAgICB9CisjZW5kaWYKKyNlbmRpZgorCisgICAgaWYgKGJpbmQoKnNvY2tmZCwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopJmFkZHIsIHNpemVvZihhZGRyKSkgIT0gMCkKKyAgICAgICAgZXJyX3N5c193aXRoX2Vycm5vKCJ0Y3AgYmluZCBmYWlsZWQiKTsKKyAgICBpZiAoIXVkcCkgeworICAgICAgICAjaWZkZWYgV09MRlNTTF9LRUlMX1RDUF9ORVQKKyAgICAgICAgICAgICNkZWZpbmUgU09DS19MSVNURU5fTUFYX1FVRVVFIDEKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNkZWZpbmUgU09DS19MSVNURU5fTUFYX1FVRVVFIDUKKyAgICAgICAgI2VuZGlmCisgICAgICAgIGlmIChsaXN0ZW4oKnNvY2tmZCwgU09DS19MSVNURU5fTUFYX1FVRVVFKSAhPSAwKQorICAgICAgICAgICAgICAgIGVycl9zeXNfd2l0aF9lcnJubygidGNwIGxpc3RlbiBmYWlsZWQiKTsKKyAgICB9CisgICAgI2lmICFkZWZpbmVkKFVTRV9XSU5ET1dTX0FQSSkgJiYgIWRlZmluZWQoV09MRlNTTF9USVJUT1MpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWRlZmluZWQoV09MRlNTTF9aRVBIWVIpCisgICAgICAgIGlmICgqcG9ydCA9PSAwKSB7CisgICAgICAgICAgICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGFkZHIpOworICAgICAgICAgICAgaWYgKGdldHNvY2tuYW1lKCpzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCAmbGVuKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgI2lmbmRlZiBURVNUX0lQVjYKKyAgICAgICAgICAgICAgICAgICAgKnBvcnQgPSBYTlRPSFMoYWRkci5zaW5fcG9ydCk7CisgICAgICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgKnBvcnQgPSBYTlRPSFMoYWRkci5zaW42X3BvcnQpOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgI2VuZGlmCit9CisKKworI2lmIDAKK3N0YXRpYyBXQ19JTkxJTkUgaW50IHVkcF9yZWFkX2Nvbm5lY3QoU09DS0VUX1Qgc29ja2ZkKQoreworICAgIFNPQ0tBRERSX0lOX1QgY2xpYWRkcjsKKyAgICBieXRlICAgICAgICAgIGJbMTUwMF07CisgICAgaW50ICAgICAgICAgICBuOworICAgIHNvY2tsZW5fdCAgICAgbGVuID0gc2l6ZW9mKGNsaWFkZHIpOworCisgICAgbiA9IChpbnQpcmVjdmZyb20oc29ja2ZkLCAoY2hhciopYiwgc2l6ZW9mKGIpLCBNU0dfUEVFSywKKyAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyKikmY2xpYWRkciwgJmxlbik7CisgICAgaWYgKG4gPiAwKSB7CisgICAgICAgIGlmIChjb25uZWN0KHNvY2tmZCwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopJmNsaWFkZHIsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihjbGlhZGRyKSkgIT0gMCkKKyAgICAgICAgICAgIGVycl9zeXMoInVkcCBjb25uZWN0IGZhaWxlZCIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGVycl9zeXMoInJlY3Zmcm9tIGZhaWxlZCIpOworCisgICAgcmV0dXJuIHNvY2tmZDsKK30KKyNlbmRpZgorCitzdGF0aWMgV0NfSU5MSU5FIHZvaWQgdWRwX2FjY2VwdChTT0NLRVRfVCogc29ja2ZkLCBTT0NLRVRfVCogY2xpZW50ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNlQW55QWRkciwgd29yZDE2IHBvcnQsIGZ1bmNfYXJncyogYXJncykKK3sKKyAgICBTT0NLQUREUl9JTl9UIGFkZHI7CisKKyAgICAodm9pZClhcmdzOworICAgIGJ1aWxkX2FkZHIoJmFkZHIsICh1c2VBbnlBZGRyID8gSU5BRERSX0FOWSA6IHdvbGZTU0xJUCksIHBvcnQsIDEsIDApOworICAgIHRjcF9zb2NrZXQoc29ja2ZkLCAxLCAwKTsKKworCisjaWYgIWRlZmluZWQoVVNFX1dJTkRPV1NfQVBJKSAmJiAhZGVmaW5lZChXT0xGU1NMX01ES19BUk0pIFwKKyAgICAgICAgICAgICAgICAgICAmJiAhZGVmaW5lZChXT0xGU1NMX0tFSUxfVENQX05FVCkgJiYgIWRlZmluZWQoV09MRlNTTF9aRVBIWVIpCisgICAgeworICAgICAgICBpbnQgICAgICAgcmVzLCBvbiAgPSAxOworICAgICAgICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKG9uKTsKKyAgICAgICAgcmVzID0gc2V0c29ja29wdCgqc29ja2ZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICZvbiwgbGVuKTsKKyAgICAgICAgaWYgKHJlcyA8IDApCisgICAgICAgICAgICBlcnJfc3lzX3dpdGhfZXJybm8oInNldHNvY2tvcHQgU09fUkVVU0VBRERSIGZhaWxlZFxuIik7CisgICAgfQorI2lmZGVmIFNPX1JFVVNFUE9SVAorICAgIHsKKyAgICAgICAgaW50ICAgICAgIHJlcywgb24gID0gMTsKKyAgICAgICAgc29ja2xlbl90IGxlbiA9IHNpemVvZihvbik7CisgICAgICAgIHJlcyA9IHNldHNvY2tvcHQoKnNvY2tmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VQT1JULCAmb24sIGxlbik7CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgZXJyX3N5c193aXRoX2Vycm5vKCJzZXRzb2Nrb3B0IFNPX1JFVVNFUE9SVCBmYWlsZWRcbiIpOworICAgIH0KKyNlbmRpZgorI2VuZGlmCisKKyAgICBpZiAoYmluZCgqc29ja2ZkLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikmYWRkciwgc2l6ZW9mKGFkZHIpKSAhPSAwKQorICAgICAgICBlcnJfc3lzX3dpdGhfZXJybm8oInRjcCBiaW5kIGZhaWxlZCIpOworCisgICAgI2lmIChkZWZpbmVkKE5PX01BSU5fRFJJVkVSKSAmJiAhZGVmaW5lZChVU0VfV0lORE9XU19BUEkpKSAmJiAhZGVmaW5lZChXT0xGU1NMX1RJUlRPUykKKyAgICAgICAgaWYgKHBvcnQgPT0gMCkgeworICAgICAgICAgICAgc29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTsKKyAgICAgICAgICAgIGlmIChnZXRzb2NrbmFtZSgqc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyKikmYWRkciwgJmxlbikgPT0gMCkgeworICAgICAgICAgICAgICAgICNpZm5kZWYgVEVTVF9JUFY2CisgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBYTlRPSFMoYWRkci5zaW5fcG9ydCk7CisgICAgICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IFhOVE9IUyhhZGRyLnNpbjZfcG9ydCk7CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAjZW5kaWYKKworI2lmIGRlZmluZWQoX1BPU0lYX1RIUkVBRFMpICYmIGRlZmluZWQoTk9fTUFJTl9EUklWRVIpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgIC8qIHNpZ25hbCByZWFkeSB0byBhY2NlcHQgZGF0YSAqLworICAgIHsKKyAgICB0Y3BfcmVhZHkqIHJlYWR5ID0gYXJncy0+c2lnbmFsOworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcmVhZHktPm11dGV4KTsKKyAgICByZWFkeS0+cmVhZHkgPSAxOworICAgIHJlYWR5LT5wb3J0ID0gcG9ydDsKKyAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZyZWFkeS0+Y29uZCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnJlYWR5LT5tdXRleCk7CisgICAgfQorI2VsaWYgZGVmaW5lZCAoV09MRlNTTF9USVJUT1MpCisgICAgLyogTmVlZCBtdXRleD8gKi8KKyAgICB0Y3BfcmVhZHkqIHJlYWR5ID0gYXJncy0+c2lnbmFsOworICAgIHJlYWR5LT5yZWFkeSA9IDE7CisgICAgcmVhZHktPnBvcnQgPSBwb3J0OworI2Vsc2UKKyAgICAodm9pZClwb3J0OworI2VuZGlmCisKKyAgICAqY2xpZW50ZmQgPSAqc29ja2ZkOworfQorCitzdGF0aWMgV0NfSU5MSU5FIHZvaWQgdGNwX2FjY2VwdChTT0NLRVRfVCogc29ja2ZkLCBTT0NLRVRfVCogY2xpZW50ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FyZ3MqIGFyZ3MsIHdvcmQxNiBwb3J0LCBpbnQgdXNlQW55QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1ZHAsIGludCBzY3RwLCBpbnQgcmVhZHlfZmlsZSwgaW50IGRvX2xpc3RlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tBRERSX0lOX1QgKmNsaWVudF9hZGRyLCBzb2NrbGVuX3QgKmNsaWVudF9sZW4pCit7CisgICAgdGNwX3JlYWR5KiByZWFkeSA9IE5VTEw7CisKKyAgICAodm9pZCkgcmVhZHk7IC8qIEFjY291bnQgZm9yIGNhc2Ugd2hlbiAicmVhZHkiIGlzIG5vdCB1c2VkICovCisKKyAgICBpZiAodWRwKSB7CisgICAgICAgIHVkcF9hY2NlcHQoc29ja2ZkLCBjbGllbnRmZCwgdXNlQW55QWRkciwgcG9ydCwgYXJncyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZihkb19saXN0ZW4pIHsKKyAgICAgICAgdGNwX2xpc3Rlbihzb2NrZmQsICZwb3J0LCB1c2VBbnlBZGRyLCB1ZHAsIHNjdHApOworCisgICAgI2lmIGRlZmluZWQoX1BPU0lYX1RIUkVBRFMpICYmIGRlZmluZWQoTk9fTUFJTl9EUklWRVIpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgICAgICAvKiBzaWduYWwgcmVhZHkgdG8gdGNwX2FjY2VwdCAqLworICAgICAgICBpZiAoYXJncykKKyAgICAgICAgICAgIHJlYWR5ID0gYXJncy0+c2lnbmFsOworICAgICAgICBpZiAocmVhZHkpIHsKKyAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcmVhZHktPm11dGV4KTsKKyAgICAgICAgICAgIHJlYWR5LT5yZWFkeSA9IDE7CisgICAgICAgICAgICByZWFkeS0+cG9ydCA9IHBvcnQ7CisgICAgICAgICAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZyZWFkeS0+Y29uZCk7CisgICAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcmVhZHktPm11dGV4KTsKKyAgICAgICAgfQorICAgICNlbGlmIGRlZmluZWQgKFdPTEZTU0xfVElSVE9TKQorICAgICAgICAvKiBOZWVkIG11dGV4PyAqLworICAgICAgICBpZiAoYXJncykKKyAgICAgICAgICAgIHJlYWR5ID0gYXJncy0+c2lnbmFsOworICAgICAgICBpZiAocmVhZHkpIHsKKyAgICAgICAgICAgIHJlYWR5LT5yZWFkeSA9IDE7CisgICAgICAgICAgICByZWFkeS0+cG9ydCA9IHBvcnQ7CisgICAgICAgIH0KKyAgICAjZW5kaWYKKworICAgICAgICBpZiAocmVhZHlfZmlsZSkgeworICAgICAgICAjaWYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgfHwgZGVmaW5lZChGT1JDRV9CVUZGRVJfVEVTVCkKKyAgICAgICAgICAgIFhGSUxFIHNyZiA9IE5VTEw7CisgICAgICAgICAgICBpZiAoYXJncykKKyAgICAgICAgICAgICAgICByZWFkeSA9IGFyZ3MtPnNpZ25hbDsKKworICAgICAgICAgICAgaWYgKHJlYWR5KSB7CisgICAgICAgICAgICAgICAgc3JmID0gWEZPUEVOKHJlYWR5LT5zcmZOYW1lLCAidyIpOworCisgICAgICAgICAgICAgICAgaWYgKHNyZikgeworICAgICAgICAgICAgICAgICAgICAvKiBsZXQncyB3cml0ZSBwb3J0IHNldmVyIGlzIGxpc3RlbmluZyBvbiB0byByZWFkeSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIG1vbml0b3IgY2FuIHRoZW4gZG8gZXBoZW1lcmFsIHBvcnRzIGJ5IHBhc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgLXAgMCB0byBzZXJ2ZXIgb24gc3VwcG9ydGVkIHBsYXRmb3JtcyB3aXRoIC1SIHJlYWR5X2ZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50IGNhbiB0aGVuIHdhaXQgZm9yIGV4aXN0ZW5jZSBvZiByZWFkeV9maWxlIGFuZCBzZWUKKyAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggcG9ydCB0aGUgc2VydmVyIGlzIGxpc3RlbmluZyBvbi4gKi8KKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzcmYsICIlZFxuIiwgKGludClwb3J0KTsKKyAgICAgICAgICAgICAgICAgICAgZmNsb3NlKHNyZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAgICpjbGllbnRmZCA9IGFjY2VwdCgqc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyKiljbGllbnRfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAoQUNDRVBUX1RISVJEX1QpY2xpZW50X2xlbik7CisgICAgaWYoV09MRlNTTF9TT0NLRVRfSVNfSU5WQUxJRCgqY2xpZW50ZmQpKSB7CisgICAgICAgIGVycl9zeXNfd2l0aF9lcnJubygidGNwIGFjY2VwdCBmYWlsZWQiKTsKKyAgICB9Cit9CisKKworc3RhdGljIFdDX0lOTElORSB2b2lkIHRjcF9zZXRfbm9uYmxvY2tpbmcoU09DS0VUX1QqIHNvY2tmZCkKK3sKKyAgICAjaWZkZWYgVVNFX1dJTkRPV1NfQVBJCisgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tpbmcgPSAxOworICAgICAgICBpbnQgcmV0ID0gaW9jdGxzb2NrZXQoKnNvY2tmZCwgRklPTkJJTywgJmJsb2NraW5nKTsKKyAgICAgICAgaWYgKHJldCA9PSBTT0NLRVRfRVJST1IpCisgICAgICAgICAgICBlcnJfc3lzX3dpdGhfZXJybm8oImlvY3Rsc29ja2V0IGZhaWxlZCIpOworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9NREtfQVJNKSB8fCBkZWZpbmVkKFdPTEZTU0xfS0VJTF9UQ1BfTkVUKSBcCisgICAgICAgIHx8IGRlZmluZWQgKFdPTEZTU0xfVElSVE9TKXx8IGRlZmluZWQoV09MRlNTTF9WWFdPUktTKSBcCisgICAgICAgIHx8IGRlZmluZWQoV09MRlNTTF9aRVBIWVIpCisgICAgICAgICAvKiBub24gYmxvY2tpbmcgbm90IHN1cHBvcnRlZCwgZm9yIG5vdyAqLworICAgICNlbHNlCisgICAgICAgIGludCBmbGFncyA9IGZjbnRsKCpzb2NrZmQsIEZfR0VURkwsIDApOworICAgICAgICBpZiAoZmxhZ3MgPCAwKQorICAgICAgICAgICAgZXJyX3N5c193aXRoX2Vycm5vKCJmY250bCBnZXQgZmFpbGVkIik7CisgICAgICAgIGZsYWdzID0gZmNudGwoKnNvY2tmZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKTsKKyAgICAgICAgaWYgKGZsYWdzIDwgMCkKKyAgICAgICAgICAgIGVycl9zeXNfd2l0aF9lcnJubygiZmNudGwgc2V0IGZhaWxlZCIpOworICAgICNlbmRpZgorfQorCisKKyNpZm5kZWYgTk9fUFNLCisKKy8qIGlkZW50aXR5IGlzIE9wZW5TU0wgdGVzdGluZyBkZWZhdWx0IGZvciBvcGVuc3NsIHNfY2xpZW50LCBrZWVwIHNhbWUgKi8KK3N0YXRpYyBjb25zdCBjaGFyKiBrSWRlbnRpdHlTdHIgPSAiQ2xpZW50X2lkZW50aXR5IjsKKworc3RhdGljIFdDX0lOTElORSB1bnNpZ25lZCBpbnQgbXlfcHNrX2NsaWVudF9jYihXT0xGU1NMKiBzc2wsIGNvbnN0IGNoYXIqIGhpbnQsCisgICAgICAgIGNoYXIqIGlkZW50aXR5LCB1bnNpZ25lZCBpbnQgaWRfbWF4X2xlbiwgdW5zaWduZWQgY2hhcioga2V5LAorICAgICAgICB1bnNpZ25lZCBpbnQga2V5X21heF9sZW4pCit7CisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWhpbnQ7CisgICAgKHZvaWQpa2V5X21heF9sZW47CisKKyAgICAvKiBzZWUgaW50ZXJuYWwuaCBNQVhfUFNLX0lEX0xFTiBmb3IgUFNLIGlkZW50aXR5IGxpbWl0ICovCisgICAgWFNUUk5DUFkoaWRlbnRpdHksIGtJZGVudGl0eVN0ciwgaWRfbWF4X2xlbik7CisKKyAgICBpZiAod29sZlNTTF9HZXRWZXJzaW9uKHNzbCkgPCBXT0xGU1NMX1RMU1YxXzMpIHsKKyAgICAgICAgLyogdGVzdCBrZXkgaW4gaGV4IGlzIDB4MWEyYjNjNGQgLCBpbiBkZWNpbWFsIDQzOSwwNDEsMTAxICwgd2UncmUgdXNpbmcKKyAgICAgICAgICAgdW5zaWduZWQgYmluYXJ5ICovCisgICAgICAgIGtleVswXSA9IDB4MWE7CisgICAgICAgIGtleVsxXSA9IDB4MmI7CisgICAgICAgIGtleVsyXSA9IDB4M2M7CisgICAgICAgIGtleVszXSA9IDB4NGQ7CisKKyAgICAgICAgcmV0dXJuIDQ7ICAgLyogbGVuZ3RoIG9mIGtleSBpbiBvY3RldHMgb3IgMCBmb3IgZXJyb3IgKi8KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCBpOworICAgICAgICBpbnQgYiA9IDB4MDE7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyssIGIgKz0gMHgyMikgeworICAgICAgICAgICAgaWYgKGIgPj0gMHgxMDApCisgICAgICAgICAgICAgICAgYiA9IDB4MDE7CisgICAgICAgICAgICBrZXlbaV0gPSBiOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDMyOyAgIC8qIGxlbmd0aCBvZiBrZXkgaW4gb2N0ZXRzIG9yIDAgZm9yIGVycm9yICovCisgICAgfQorfQorCisKK3N0YXRpYyBXQ19JTkxJTkUgdW5zaWduZWQgaW50IG15X3Bza19zZXJ2ZXJfY2IoV09MRlNTTCogc3NsLCBjb25zdCBjaGFyKiBpZGVudGl0eSwKKyAgICAgICAgdW5zaWduZWQgY2hhcioga2V5LCB1bnNpZ25lZCBpbnQga2V5X21heF9sZW4pCit7CisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWtleV9tYXhfbGVuOworCisgICAgLyogc2VlIGludGVybmFsLmggTUFYX1BTS19JRF9MRU4gZm9yIFBTSyBpZGVudGl0eSBsaW1pdCAqLworICAgIGlmIChYU1RSTkNNUChpZGVudGl0eSwga0lkZW50aXR5U3RyLCBYU1RSTEVOKGtJZGVudGl0eVN0cikpICE9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHdvbGZTU0xfR2V0VmVyc2lvbihzc2wpIDwgV09MRlNTTF9UTFNWMV8zKSB7CisgICAgICAgIC8qIHRlc3Qga2V5IGluIGhleCBpcyAweDFhMmIzYzRkICwgaW4gZGVjaW1hbCA0MzksMDQxLDEwMSAsIHdlJ3JlIHVzaW5nCisgICAgICAgICAgIHVuc2lnbmVkIGJpbmFyeSAqLworICAgICAgICBrZXlbMF0gPSAweDFhOworICAgICAgICBrZXlbMV0gPSAweDJiOworICAgICAgICBrZXlbMl0gPSAweDNjOworICAgICAgICBrZXlbM10gPSAweDRkOworCisgICAgICAgIHJldHVybiA0OyAgIC8qIGxlbmd0aCBvZiBrZXkgaW4gb2N0ZXRzIG9yIDAgZm9yIGVycm9yICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgaW50IGIgPSAweDAxOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrLCBiICs9IDB4MjIpIHsKKyAgICAgICAgICAgIGlmIChiID49IDB4MTAwKQorICAgICAgICAgICAgICAgIGIgPSAweDAxOworICAgICAgICAgICAga2V5W2ldID0gYjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAzMjsgICAvKiBsZW5ndGggb2Yga2V5IGluIG9jdGV0cyBvciAwIGZvciBlcnJvciAqLworICAgIH0KK30KKworI2lmZGVmIFdPTEZTU0xfVExTMTMKK3N0YXRpYyBXQ19JTkxJTkUgdW5zaWduZWQgaW50IG15X3Bza19jbGllbnRfdGxzMTNfY2IoV09MRlNTTCogc3NsLAorICAgICAgICBjb25zdCBjaGFyKiBoaW50LCBjaGFyKiBpZGVudGl0eSwgdW5zaWduZWQgaW50IGlkX21heF9sZW4sCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGtleSwgdW5zaWduZWQgaW50IGtleV9tYXhfbGVuLCBjb25zdCBjaGFyKiogY2lwaGVyc3VpdGUpCit7CisgICAgaW50IGk7CisgICAgaW50IGIgPSAweDAxOworICAgIGNvbnN0IGNoYXIqIHVzZXJDaXBoZXIgPSAoY29uc3QgY2hhciopd29sZlNTTF9nZXRfcHNrX2NhbGxiYWNrX2N0eChzc2wpOworCisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWhpbnQ7CisgICAgKHZvaWQpa2V5X21heF9sZW47CisKKyAgICAvKiBzZWUgaW50ZXJuYWwuaCBNQVhfUFNLX0lEX0xFTiBmb3IgUFNLIGlkZW50aXR5IGxpbWl0ICovCisgICAgWFNUUk5DUFkoaWRlbnRpdHksIGtJZGVudGl0eVN0ciwgaWRfbWF4X2xlbik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKywgYiArPSAweDIyKSB7CisgICAgICAgIGlmIChiID49IDB4MTAwKQorICAgICAgICAgICAgYiA9IDB4MDE7CisgICAgICAgIGtleVtpXSA9IGI7CisgICAgfQorCisgICAgKmNpcGhlcnN1aXRlID0gdXNlckNpcGhlciA/IHVzZXJDaXBoZXIgOiAiVExTMTMtQUVTMTI4LUdDTS1TSEEyNTYiOworCisgICAgcmV0dXJuIDMyOyAgIC8qIGxlbmd0aCBvZiBrZXkgaW4gb2N0ZXRzIG9yIDAgZm9yIGVycm9yICovCit9CisKKworc3RhdGljIFdDX0lOTElORSB1bnNpZ25lZCBpbnQgbXlfcHNrX3NlcnZlcl90bHMxM19jYihXT0xGU1NMKiBzc2wsCisgICAgICAgIGNvbnN0IGNoYXIqIGlkZW50aXR5LCB1bnNpZ25lZCBjaGFyKiBrZXksIHVuc2lnbmVkIGludCBrZXlfbWF4X2xlbiwKKyAgICAgICAgY29uc3QgY2hhcioqIGNpcGhlcnN1aXRlKQoreworICAgIGludCBpOworICAgIGludCBiID0gMHgwMTsKKyAgICBpbnQga0lkTGVuID0gKGludClYU1RSTEVOKGtJZGVudGl0eVN0cik7CisgICAgY29uc3QgY2hhciogdXNlckNpcGhlciA9IChjb25zdCBjaGFyKil3b2xmU1NMX2dldF9wc2tfY2FsbGJhY2tfY3R4KHNzbCk7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpa2V5X21heF9sZW47CisKKyAgICAvKiBzZWUgaW50ZXJuYWwuaCBNQVhfUFNLX0lEX0xFTiBmb3IgUFNLIGlkZW50aXR5IGxpbWl0ICovCisgICAgaWYgKFhTVFJOQ01QKGlkZW50aXR5LCBrSWRlbnRpdHlTdHIsIGtJZExlbikgIT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlkZW50aXR5W2tJZExlbl0gIT0gJ1wwJykgeworICAgICAgICB1c2VyQ2lwaGVyID0gd29sZlNTTF9nZXRfY2lwaGVyX25hbWVfYnlfaGFzaChzc2wsIGlkZW50aXR5ICsga0lkTGVuKTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKywgYiArPSAweDIyKSB7CisgICAgICAgIGlmIChiID49IDB4MTAwKQorICAgICAgICAgICAgYiA9IDB4MDE7CisgICAgICAgIGtleVtpXSA9IGI7CisgICAgfQorCisgICAgKmNpcGhlcnN1aXRlID0gdXNlckNpcGhlciA/IHVzZXJDaXBoZXIgOiAiVExTMTMtQUVTMTI4LUdDTS1TSEEyNTYiOworCisgICAgcmV0dXJuIDMyOyAgIC8qIGxlbmd0aCBvZiBrZXkgaW4gb2N0ZXRzIG9yIDAgZm9yIGVycm9yICovCit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpICYmICFkZWZpbmVkKE5PX0NFUlRTKSAmJiBcCisgICAgICAgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGxvY2FsX3Bza1szMl07CisjZW5kaWYKK3N0YXRpYyBXQ19JTkxJTkUgaW50IG15X3Bza191c2Vfc2Vzc2lvbl9jYihXT0xGU1NMKiBzc2wsIAorICAgICAgICAgICAgY29uc3QgV09MRlNTTF9FVlBfTUQqIG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaWQsCisgICAgICAgICAgICBzaXplX3QqIGlkbGVuLCAgV09MRlNTTF9TRVNTSU9OICoqc2VzcykKK3sKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSAmJiAhZGVmaW5lZChOT19DRVJUUykgJiYgXAorICAgICAgICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pCisgICAgaW50IGk7CisgICAgaW50IGIgPSAweDAxOworICAgIFdPTEZTU0xfU0VTU0lPTiogbHNlc3M7CisgICAgY2hhciBidWZbMjU2XTsKKyAgICBjb25zdCBjaGFyKiBjaXBoZXJfaWQgPSAiVExTMTMtQUVTMTI4LUdDTS1TSEEyNTYiOworICAgIGNvbnN0IFNTTF9DSVBIRVIqIGNpcGhlciA9IE5VTEw7CisgICAgU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnN1cHBvcnRlZENpcGhlcnMgPSBOVUxMOworICAgIGludCBudW1DaXBoZXJzID0gMDsKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpbWQ7CisgICAgCisgICAgcHJpbnRmKCJ1c2UgcHNrIHNlc3Npb24gY2FsbGJhY2sgXG4iKTsKKyAgICAKKyAgICBsc2VzcyA9IHdvbGZTU0xfU0VTU0lPTl9uZXcoKTsKKyAgICBpZiAobHNlc3MgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgc3VwcG9ydGVkQ2lwaGVycyA9IFNTTF9nZXRfY2lwaGVycyhzc2wpOworICAgIG51bUNpcGhlcnMgPSBza19udW0oc3VwcG9ydGVkQ2lwaGVycyk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQ2lwaGVyczsgKytpKSB7CisgICAgICAgIAorICAgICAgICBpZiAoKGNpcGhlciA9IChjb25zdCBXT0xGU1NMX0NJUEhFUiopc2tfdmFsdWUoc3VwcG9ydGVkQ2lwaGVycywgaSkpKSB7CisgICAgICAgICAgICBTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uKGNpcGhlciwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChYTUVNQ01QKGNpcGhlcl9pZCwgYnVmLCBYU1RSTEVOKGNpcGhlcl9pZCkpID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChpICE9IG51bUNpcGhlcnMpIHsKKyAgICAgICAgU1NMX1NFU1NJT05fc2V0X2NpcGhlcihsc2VzcywgY2lwaGVyKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrLCBiICs9IDB4MjIpIHsKKyAgICAgICAgICAgIGlmIChiID49IDB4MTAwKQorICAgICAgICAgICAgICAgIGIgPSAweDAxOworICAgICAgICAgICAgbG9jYWxfcHNrW2ldID0gYjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgKmlkID0gbG9jYWxfcHNrOworICAgICAgICAqaWRsZW4gPSAzMjsKKyAgICAgICAgKnNlc3MgPSBsc2VzczsKKyAgICAgICAgCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgKmlkID0gTlVMTDsKKyAgICAgICAgKmlkbGVuID0gMDsKKyAgICAgICAgKnNlc3MgPSBOVUxMOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisjZWxzZQorICAgICh2b2lkKXNzbDsKKyAgICAodm9pZCltZDsKKyAgICAodm9pZClpZDsKKyAgICAodm9pZClpZGxlbjsKKyAgICAodm9pZClzZXNzOworICAgIAorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3N0YXRpYyBXQ19JTkxJTkUgdW5zaWduZWQgaW50IG15X3Bza19jbGllbnRfY3NfY2IoV09MRlNTTCogc3NsLAorICAgICAgICBjb25zdCBjaGFyKiBoaW50LCBjaGFyKiBpZGVudGl0eSwgdW5zaWduZWQgaW50IGlkX21heF9sZW4sCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGtleSwgdW5zaWduZWQgaW50IGtleV9tYXhfbGVuLCBjb25zdCBjaGFyKiBjaXBoZXJzdWl0ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgYiA9IDB4MDE7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpaGludDsKKyAgICAodm9pZClrZXlfbWF4X2xlbjsKKworICAgIC8qIHNlZSBpbnRlcm5hbC5oIE1BWF9QU0tfSURfTEVOIGZvciBQU0sgaWRlbnRpdHkgbGltaXQgKi8KKyAgICBYU1RSTkNQWShpZGVudGl0eSwga0lkZW50aXR5U3RyLCBpZF9tYXhfbGVuKTsKKyAgICBYU1RSTkNBVChpZGVudGl0eSwgY2lwaGVyc3VpdGUgKyBYU1RSTEVOKGNpcGhlcnN1aXRlKSAtIDYsIGlkX21heF9sZW4pOworCisgICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyssIGIgKz0gMHgyMikgeworICAgICAgICBpZiAoYiA+PSAweDEwMCkKKyAgICAgICAgICAgIGIgPSAweDAxOworICAgICAgICBrZXlbaV0gPSBiOworICAgIH0KKworICAgIHJldHVybiAzMjsgICAvKiBsZW5ndGggb2Yga2V5IGluIG9jdGV0cyBvciAwIGZvciBlcnJvciAqLworfQorCisjZW5kaWYgLyogIU5PX1BTSyAqLworCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfVVNFUl9DVVJSVElNRSkKKyAgICBleHRlcm4gICBkb3VibGUgY3VycmVudF90aW1lKGludCByZXNldCk7CisKKyNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1NfQVBJKQorCisgICAgI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisgICAgI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworICAgIHN0YXRpYyBXQ19JTkxJTkUgZG91YmxlIGN1cnJlbnRfdGltZShpbnQgcmVzZXQpCisgICAgeworICAgICAgICBzdGF0aWMgaW50IGluaXQgPSAwOworICAgICAgICBzdGF0aWMgTEFSR0VfSU5URUdFUiBmcmVxOworCisgICAgICAgIExBUkdFX0lOVEVHRVIgY291bnQ7CisKKyAgICAgICAgaWYgKCFpbml0KSB7CisgICAgICAgICAgICBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZmcmVxKTsKKyAgICAgICAgICAgIGluaXQgPSAxOworICAgICAgICB9CisKKyAgICAgICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmNvdW50KTsKKworICAgICAgICAodm9pZClyZXNldDsKKyAgICAgICAgcmV0dXJuIChkb3VibGUpY291bnQuUXVhZFBhcnQgLyBmcmVxLlF1YWRQYXJ0OworICAgIH0KKworI2VsaWYgZGVmaW5lZChXT0xGU1NMX1RJUlRPUykKKyAgICBleHRlcm4gZG91YmxlIGN1cnJlbnRfdGltZSgpOworI2VsaWYgZGVmaW5lZChXT0xGU1NMX1pFUEhZUikKKyAgICBleHRlcm4gZG91YmxlIGN1cnJlbnRfdGltZSgpOworI2Vsc2UKKworI2lmICFkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkgJiYgIWRlZmluZWQoV09MRlNTTF9LRUlMX1RDUF9ORVQpICYmICFkZWZpbmVkKFdPTEZTU0xfQ0hJQklPUykKKyAgICAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworICAgIHN0YXRpYyBXQ19JTkxJTkUgZG91YmxlIGN1cnJlbnRfdGltZShpbnQgcmVzZXQpCisgICAgeworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisgICAgICAgICh2b2lkKXJlc2V0OworCisgICAgICAgIHJldHVybiAoZG91YmxlKXR2LnR2X3NlYyArIChkb3VibGUpdHYudHZfdXNlYyAvIDEwMDAwMDA7CisgICAgfQorI2Vsc2UKKyAgICBleHRlcm4gZG91YmxlIGN1cnJlbnRfdGltZShpbnQgcmVzZXQpOworI2VuZGlmCisjZW5kaWYgLyogVVNFX1dJTkRPV1NfQVBJICovCisKKworI2lmIGRlZmluZWQoSEFWRV9PQ1NQKSAmJiBkZWZpbmVkKFdPTEZTU0xfTk9OQkxPQ0tfT0NTUCkKK3N0YXRpYyBXQ19JTkxJTkUgaW50IE9DU1BJT0NiKHZvaWQqIGlvQ3R4LCBjb25zdCBjaGFyKiB1cmwsIGludCB1cmxTeiwKKyAgICB1bnNpZ25lZCBjaGFyKiByZXF1ZXN0LCBpbnQgcmVxdWVzdFN6LCB1bnNpZ25lZCBjaGFyKiogcmVzcG9uc2UpCit7CisjaWZkZWYgVEVTVF9OT05CTE9DS19DRVJUUworICAgIHN0YXRpYyBpbnQgaW9DYkNudCA9IDA7CisjZW5kaWYKKworICAgICh2b2lkKWlvQ3R4OworICAgICh2b2lkKXVybDsKKyAgICAodm9pZCl1cmxTejsKKyAgICAodm9pZClyZXF1ZXN0OworICAgICh2b2lkKXJlcXVlc3RTejsKKyAgICAodm9pZClyZXNwb25zZTsKKworI2lmZGVmIFRFU1RfTk9OQkxPQ0tfQ0VSVFMKKyAgICBpZiAoaW9DYkNudCkgeworICAgICAgICBpb0NiQ250ID0gMDsKKyAgICAgICAgcmV0dXJuIEVtYmVkT2NzcExvb2t1cChpb0N0eCwgdXJsLCB1cmxTeiwgcmVxdWVzdCwgcmVxdWVzdFN6LCByZXNwb25zZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpb0NiQ250ID0gMTsKKyAgICAgICAgcmV0dXJuIFdPTEZTU0xfQ0JJT19FUlJfV0FOVF9SRUFEOworICAgIH0KKyNlbHNlCisgICAgcmV0dXJuIEVtYmVkT2NzcExvb2t1cChpb0N0eCwgdXJsLCB1cmxTeiwgcmVxdWVzdCwgcmVxdWVzdFN6LCByZXNwb25zZSk7CisjZW5kaWYKK30KKworc3RhdGljIFdDX0lOTElORSB2b2lkIE9DU1BSZXNwRnJlZUNiKHZvaWQqIGlvQ3R4LCB1bnNpZ25lZCBjaGFyKiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gRW1iZWRPY3NwUmVzcEZyZWUoaW9DdHgsIHJlc3BvbnNlKTsKK30KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTk9fQ0VSVFMpCisgICAgI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pIHx8IFwKKyAgICAgICAgKGRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgZGVmaW5lZChGT1JDRV9CVUZGRVJfVEVTVCkpCisKKyAgICAvKiByZWFkcyBmaWxlIHNpemUsIGFsbG9jYXRlcyBidWZmZXIsIHJlYWRzIGludG8gYnVmZmVyLCByZXR1cm5zIGJ1ZmZlciAqLworICAgIHN0YXRpYyBXQ19JTkxJTkUgaW50IGxvYWRfZmlsZShjb25zdCBjaGFyKiBmbmFtZSwgYnl0ZSoqIGJ1Ziwgc2l6ZV90KiBidWZMZW4pCisgICAgeworICAgICAgICBpbnQgcmV0OworICAgICAgICBsb25nIGludCBmaWxlU3o7CisgICAgICAgIFhGSUxFIGxGaWxlOworCisgICAgICAgIGlmIChmbmFtZSA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMIHx8IGJ1ZkxlbiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIEJBRF9GVU5DX0FSRzsKKworICAgICAgICAvKiBzZXQgZGVmYXVsdHMgKi8KKyAgICAgICAgKmJ1ZiA9IE5VTEw7CisgICAgICAgICpidWZMZW4gPSAwOworCisgICAgICAgIC8qIG9wZW4gZmlsZSAocmVhZC1vbmx5IGJpbmFyeSkgKi8KKyAgICAgICAgbEZpbGUgPSBYRk9QRU4oZm5hbWUsICJyYiIpOworICAgICAgICBpZiAoIWxGaWxlKSB7CisgICAgICAgICAgICBwcmludGYoIkVycm9yIGxvYWRpbmcgJXNcbiIsIGZuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBCQURfUEFUSF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGZzZWVrKGxGaWxlLCAwLCBTRUVLX0VORCk7CisgICAgICAgIGZpbGVTeiA9IChpbnQpZnRlbGwobEZpbGUpOworICAgICAgICByZXdpbmQobEZpbGUpOworICAgICAgICBpZiAoZmlsZVN6ICA+IDApIHsKKyAgICAgICAgICAgICpidWZMZW4gPSAoc2l6ZV90KWZpbGVTejsKKyAgICAgICAgICAgICpidWYgPSAoYnl0ZSopbWFsbG9jKCpidWZMZW4pOworICAgICAgICAgICAgaWYgKCpidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldCA9IE1FTU9SWV9FOworICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgYWxsb2NhdGluZyAlbHUgYnl0ZXNcbiIsICh1bnNpZ25lZCBsb25nKSpidWZMZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IHJlYWRMZW4gPSBmcmVhZCgqYnVmLCAqYnVmTGVuLCAxLCBsRmlsZSk7CisKKyAgICAgICAgICAgICAgICAvKiBjaGVjayByZXNwb25zZSBjb2RlICovCisgICAgICAgICAgICAgICAgcmV0ID0gKHJlYWRMZW4gPiAwKSA/IDAgOiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldCA9IEJVRkZFUl9FOworICAgICAgICB9CisgICAgICAgIGZjbG9zZShsRmlsZSk7CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBlbnVtIHsKKyAgICAgICAgV09MRlNTTF9DQSAgID0gMSwKKyAgICAgICAgV09MRlNTTF9DRVJUID0gMiwKKyAgICAgICAgV09MRlNTTF9LRVkgID0gMywKKyAgICAgICAgV09MRlNTTF9DRVJUX0NIQUlOID0gNCwKKyAgICB9OworCisgICAgc3RhdGljIFdDX0lOTElORSB2b2lkIGxvYWRfYnVmZmVyKFdPTEZTU0xfQ1RYKiBjdHgsIGNvbnN0IGNoYXIqIGZuYW1lLCBpbnQgdHlwZSkKKyAgICB7CisgICAgICAgIGludCBmb3JtYXQgPSBXT0xGU1NMX0ZJTEVUWVBFX1BFTTsKKyAgICAgICAgYnl0ZSogYnVmZiA9IE5VTEw7CisgICAgICAgIHNpemVfdCBzeiA9IDA7CisKKyAgICAgICAgaWYgKGxvYWRfZmlsZShmbmFtZSwgJmJ1ZmYsICZzeikgIT0gMCkgeworICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3Qgb3BlbiBmaWxlIGZvciBidWZmZXIgbG9hZCAiCisgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgcnVuIGZyb20gd29sZlNTTCBob21lIGRpcmVjdG9yeSBpZiBub3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGRldGVybWluZSBmb3JtYXQgKi8KKyAgICAgICAgaWYgKHN0cnN0cihmbmFtZSwgIi5kZXIiKSkKKyAgICAgICAgICAgIGZvcm1hdCA9IFdPTEZTU0xfRklMRVRZUEVfQVNOMTsKKworICAgICAgICBpZiAodHlwZSA9PSBXT0xGU1NMX0NBKSB7CisgICAgICAgICAgICBpZiAod29sZlNTTF9DVFhfbG9hZF92ZXJpZnlfYnVmZmVyKGN0eCwgYnVmZiwgKGxvbmcpc3osIGZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBidWZmZXIgY2EgZmlsZSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gV09MRlNTTF9DRVJUKSB7CisgICAgICAgICAgICBpZiAod29sZlNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2J1ZmZlcihjdHgsIGJ1ZmYsIChsb25nKXN6LAorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBidWZmZXIgY2VydCBmaWxlIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBXT0xGU1NMX0tFWSkgeworICAgICAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2J1ZmZlcihjdHgsIGJ1ZmYsIChsb25nKXN6LAorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBidWZmZXIga2V5IGZpbGUiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFdPTEZTU0xfQ0VSVF9DSEFJTikgeworICAgICAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9idWZmZXJfZm9ybWF0KGN0eCwgYnVmZiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpc3osIGZvcm1hdCkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgY2VydCBjaGFpbiBidWZmZXIiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChidWZmKQorICAgICAgICAgICAgZnJlZShidWZmKTsKKyAgICB9CisKKyAgICBzdGF0aWMgV0NfSU5MSU5FIHZvaWQgbG9hZF9zc2xfYnVmZmVyKFdPTEZTU0wqIHNzbCwgY29uc3QgY2hhciogZm5hbWUsIGludCB0eXBlKQorICAgIHsKKyAgICAgICAgaW50IGZvcm1hdCA9IFdPTEZTU0xfRklMRVRZUEVfUEVNOworICAgICAgICBieXRlKiBidWZmID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHN6ID0gMDsKKworICAgICAgICBpZiAobG9hZF9maWxlKGZuYW1lLCAmYnVmZiwgJnN6KSAhPSAwKSB7CisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBvcGVuIGZpbGUgZm9yIGJ1ZmZlciBsb2FkICIKKyAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBydW4gZnJvbSB3b2xmU1NMIGhvbWUgZGlyZWN0b3J5IGlmIG5vdCIpOworICAgICAgICB9CisKKyAgICAgICAgLyogZGV0ZXJtaW5lIGZvcm1hdCAqLworICAgICAgICBpZiAoc3Ryc3RyKGZuYW1lLCAiLmRlciIpKQorICAgICAgICAgICAgZm9ybWF0ID0gV09MRlNTTF9GSUxFVFlQRV9BU04xOworCisgICAgICAgIGlmICh0eXBlID09IFdPTEZTU0xfQ0EpIHsKKyAgICAgICAgICAgIC8qIHZlcmlmeSBjZXJ0cyAoQ0EncykgdXNlIHRoZSBzaGFyZWQgY3R4LT5jbSAoV09MRlNTTF9DRVJUX01BTkFHRVIpICovCisgICAgICAgICAgICBXT0xGU1NMX0NUWCogY3R4ID0gd29sZlNTTF9nZXRfU1NMX0NUWChzc2wpOworICAgICAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX2xvYWRfdmVyaWZ5X2J1ZmZlcihjdHgsIGJ1ZmYsIChsb25nKXN6LCBmb3JtYXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgYnVmZmVyIGNhIGZpbGUiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFdPTEZTU0xfQ0VSVCkgeworICAgICAgICAgICAgaWYgKHdvbGZTU0xfdXNlX2NlcnRpZmljYXRlX2J1ZmZlcihzc2wsIGJ1ZmYsIChsb25nKXN6LAorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBidWZmZXIgY2VydCBmaWxlIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBXT0xGU1NMX0tFWSkgeworICAgICAgICAgICAgaWYgKHdvbGZTU0xfdXNlX1ByaXZhdGVLZXlfYnVmZmVyKHNzbCwgYnVmZiwgKGxvbmcpc3osCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQpICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBsb2FkIGJ1ZmZlciBrZXkgZmlsZSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gV09MRlNTTF9DRVJUX0NIQUlOKSB7CisgICAgICAgICAgICBpZiAod29sZlNTTF91c2VfY2VydGlmaWNhdGVfY2hhaW5fYnVmZmVyX2Zvcm1hdChzc2wsIGJ1ZmYsCisgICAgICAgICAgICAgICAgICAgIChsb25nKXN6LCBmb3JtYXQpICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBsb2FkIGNlcnQgY2hhaW4gYnVmZmVyIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYnVmZikKKyAgICAgICAgICAgIGZyZWUoYnVmZik7CisgICAgfQorCisgICAgI2lmZGVmIFRFU1RfUEtfUFJJVktFWQorICAgIHN0YXRpYyBXQ19JTkxJTkUgaW50IGxvYWRfa2V5X2ZpbGUoY29uc3QgY2hhciogZm5hbWUsIGJ5dGUqKiBkZXJCdWYsIHdvcmQzMiogZGVyTGVuKQorICAgIHsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgYnl0ZSogYnVmID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IGJ1ZkxlbjsKKworICAgICAgICByZXQgPSBsb2FkX2ZpbGUoZm5hbWUsICZidWYsICZidWZMZW4pOworICAgICAgICBpZiAocmV0ICE9IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgICpkZXJCdWYgPSAoYnl0ZSopbWFsbG9jKGJ1Zkxlbik7CisgICAgICAgIGlmICgqZGVyQnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgICAgIHJldHVybiBNRU1PUllfRTsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IHdjX0tleVBlbVRvRGVyKGJ1ZiwgKHdvcmQzMilidWZMZW4sICpkZXJCdWYsICh3b3JkMzIpYnVmTGVuLCBOVUxMKTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgICAgIGZyZWUoKmRlckJ1Zik7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgICAgICpkZXJMZW4gPSByZXQ7CisgICAgICAgIGZyZWUoYnVmKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgI2VuZGlmIC8qIFRFU1RfUEtfUFJJVktFWSAqLworCisgICAgI2VuZGlmIC8qICFOT19GSUxFU1lTVEVNIHx8IChOT19GSUxFU1lTVEVNICYmIEZPUkNFX0JVRkZFUl9URVNUKSAqLworI2VuZGlmIC8qICFOT19DRVJUUyAqLworCitlbnVtIHsKKyAgICBWRVJJRllfT1ZFUlJJREVfRVJST1IsCisgICAgVkVSSUZZX0ZPUkNFX0ZBSUwsCisgICAgVkVSSUZZX1VTRV9QUkVWRVJGSVksCisgICAgVkVSSUZZX09WRVJSSURFX0RBVEVfRVJSLAorfTsKK3N0YXRpYyBUSFJFQURfTFNfVCBpbnQgbXlWZXJpZnlBY3Rpb24gPSBWRVJJRllfT1ZFUlJJREVfRVJST1I7CisKKy8qIFRoZSB2ZXJpZnkgY2FsbGJhY2sgaXMgY2FsbGVkIGZvciBldmVyeSBjZXJ0aWZpY2F0ZSBvbmx5IHdoZW4KKyAqIC0tZW5hYmxlLW9wZW5zc2xleHRyYSBpcyBkZWZpbmVkIGJlY2F1c2UgaXQgc2V0cyBXT0xGU1NMX0FMV0FZU19WRVJJRllfQ0IgYW5kCisgKiBXT0xGU1NMX1ZFUklGWV9DQl9BTExfQ0VSVFMuCisgKiBOb3JtYWwgY2FzZXMgb2YgdGhlIHZlcmlmeSBjYWxsYmFjayBvbmx5IG9jY3VyIG9uIGNlcnRpZmljYXRlIGZhaWx1cmVzIHdoZW4gdGhlCisgKiB3b2xmU1NMX3NldF92ZXJpZnkoc3NsLCBTU0xfVkVSSUZZX1BFRVIsIG15VmVyaWZ5Q2IpOyBpcyBjYWxsZWQKKyovCisKK3N0YXRpYyBXQ19JTkxJTkUgaW50IG15VmVyaWZ5KGludCBwcmV2ZXJpZnksIFdPTEZTU0xfWDUwOV9TVE9SRV9DVFgqIHN0b3JlKQoreworICAgIGNoYXIgYnVmZmVyW1dPTEZTU0xfTUFYX0VSUk9SX1NaXTsKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMKQorICAgIFdPTEZTU0xfWDUwOSogcGVlcjsKKyNpZiBkZWZpbmVkKFNIT1dfQ0VSVFMpICYmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pCisgICAgV09MRlNTTF9CSU8qIGJpbyA9IE5VTEw7CisgICAgV09MRlNTTF9TVEFDSyogc2sgPSBOVUxMOworICAgIFg1MDkqIHg1MDkgPSBOVUxMOworICAgIGludCBpID0gMDsKKyNlbmRpZgorI2VuZGlmCisgICAgKHZvaWQpcHJldmVyaWZ5OworCisgICAgLyogVmVyaWZ5IENhbGxiYWNrIEFyZ3VtZW50czoKKyAgICAgKiBwcmV2ZXJpZnk6ICAgICAgICAgICAxPVZlcmlmeSBPa2F5LCAwPUZhaWx1cmUKKyAgICAgKiBzdG9yZS0+ZXJyb3I6ICAgICAgICBGYWlsdXJlIGVycm9yIGNvZGUgKDAgaW5kaWNhdGVzIG5vIGZhaWx1cmUpCisgICAgICogc3RvcmUtPmN1cnJlbnRfY2VydDogQ3VycmVudCBXT0xGU1NMX1g1MDkgb2JqZWN0IChvbmx5IHdpdGggT1BFTlNTTF9FWFRSQSkKKyAgICAgKiBzdG9yZS0+ZXJyb3JfZGVwdGg6ICBDdXJyZW50IEluZGV4CisgICAgICogc3RvcmUtPmRvbWFpbjogICAgICAgU3ViamVjdCBDTiBhcyBzdHJpbmcgKG51bGwgdGVybSkKKyAgICAgKiBzdG9yZS0+dG90YWxDZXJ0czogICBOdW1iZXIgb2YgY2VydHMgcHJlc2VudGVkIGJ5IHBlZXIKKyAgICAgKiBzdG9yZS0+Y2VydHNbaV06ICAgICBBIGBXT0xGU1NMX0JVRkZFUl9JTkZPYCB3aXRoIHBsYWluIERFUiBmb3IgZWFjaCBjZXJ0CisgICAgICogc3RvcmUtPnN0b3JlOiAgICAgICAgV09MRlNTTF9YNTA5X1NUT1JFIHdpdGggQ0EgY2VydCBjaGFpbgorICAgICAqIHN0b3JlLT5zdG9yZS0+Y206ICAgIFdPTEZTU0xfQ0VSVF9NQU5BR0VSCisgICAgICogc3RvcmUtPmV4X2RhdGE6ICAgICAgVGhlIFdPTEZTU0wgb2JqZWN0IHBvaW50ZXIKKyAgICAgKiBzdG9yZS0+ZGlzY2FyZFNlc3Npb25DZXJ0czogV2hlbiBzZXQgdG8gbm9uLXplcm8gdmFsdWUgc2Vzc2lvbiBjZXJ0cworICAgICAgICB3aWxsIGJlIGRpc2NhcmRlZCAob25seSB3aXRoIFNFU1NJT05fQ0VSVFMpCisgICAgICovCisKKyAgICBwcmludGYoIkluIHZlcmlmaWNhdGlvbiBjYWxsYmFjaywgZXJyb3IgPSAlZCwgJXNcbiIsIHN0b3JlLT5lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZyhzdG9yZS0+ZXJyb3IsIGJ1ZmZlcikpOworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpCisgICAgcGVlciA9IHN0b3JlLT5jdXJyZW50X2NlcnQ7CisgICAgaWYgKHBlZXIpIHsKKyAgICAgICAgY2hhciogaXNzdWVyICA9IHdvbGZTU0xfWDUwOV9OQU1FX29uZWxpbmUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfZ2V0X2lzc3Vlcl9uYW1lKHBlZXIpLCAwLCAwKTsKKyAgICAgICAgY2hhciogc3ViamVjdCA9IHdvbGZTU0xfWDUwOV9OQU1FX29uZWxpbmUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXIpLCAwLCAwKTsKKyAgICAgICAgcHJpbnRmKCJcdFBlZXIncyBjZXJ0IGluZm86XG4gaXNzdWVyIDogJXNcbiBzdWJqZWN0OiAlc1xuIiwgaXNzdWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdCk7CisgICAgICAgIFhGUkVFKHN1YmplY3QsIDAsIERZTkFNSUNfVFlQRV9PUEVOU1NMKTsKKyAgICAgICAgWEZSRUUoaXNzdWVyLCAgMCwgRFlOQU1JQ19UWVBFX09QRU5TU0wpOworI2lmIGRlZmluZWQoU0hPV19DRVJUUykgJiYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkKKyAgICAgICAgLyogYXZvaWQgcHJpbnRpbmcgZHVwbGljYXRlIGNlcnRzICovCisgICAgICAgIGlmIChzdG9yZS0+ZGVwdGggPT0gMSkgeworICAgICAgICAgICAgLyogcmV0cmlldmUgeDUwOSBjZXJ0cyBhbmQgZGlzcGxheSB0aGVtIG9uIHN0ZG91dCAqLworICAgICAgICAgICAgc2sgPSB3b2xmU1NMX1g1MDlfU1RPUkVfR2V0Q2VydHMoc3RvcmUpOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd29sZlNTTF9za19YNTA5X251bShzayk7IGkrKykgeworICAgICAgICAgICAgICAgIHg1MDkgPSB3b2xmU1NMX3NrX1g1MDlfdmFsdWUoc2ssIGkpOworICAgICAgICAgICAgICAgIGJpbyA9IHdvbGZTU0xfQklPX25ldyh3b2xmU1NMX0JJT19zX2ZpbGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKGJpbyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQklPX3NldF9mcChiaW8sIHN0ZG91dCwgQklPX05PQ0xPU0UpOworICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX1g1MDlfcHJpbnQoYmlvLCB4NTA5KTsKKyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fZnJlZShiaW8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdvbGZTU0xfc2tfWDUwOV9mcmVlKHNrKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJcdFBlZXIgaGFzIG5vIGNlcnQhXG4iKTsKKyNlbHNlCisgICAgcHJpbnRmKCJcdFBlZXIgY2VydHM6ICVkXG4iLCBzdG9yZS0+dG90YWxDZXJ0cyk7CisgICAgI2lmZGVmIFNIT1dfQ0VSVFMKKyAgICB7ICAgaW50IGk7CisgICAgICAgIGZvciAoaT0wOyBpPHN0b3JlLT50b3RhbENlcnRzOyBpKyspIHsKKyAgICAgICAgICAgIFdPTEZTU0xfQlVGRkVSX0lORk8qIGNlcnQgPSAmc3RvcmUtPmNlcnRzW2ldOworICAgICAgICAgICAgcHJpbnRmKCJcdFx0Q2VydCAlZDogUHRyICVwLCBMZW4gJXVcbiIsIGksIGNlcnQtPmJ1ZmZlciwgY2VydC0+bGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAjZW5kaWYgLyogU0hPV19DRVJUUyAqLworI2VuZGlmIC8qIE9QRU5TU0xfRVhUUkEgfHwgT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMICovCisKKyAgICBwcmludGYoIlx0U3ViamVjdCdzIGRvbWFpbiBuYW1lIGF0ICVkIGlzICVzXG4iLCBzdG9yZS0+ZXJyb3JfZGVwdGgsIHN0b3JlLT5kb21haW4pOworCisgICAgLyogVGVzdGluZyBmb3JjZWQgZmFpbCBjYXNlIGJ5IHJldHVybiB6ZXJvICovCisgICAgaWYgKG15VmVyaWZ5QWN0aW9uID09IFZFUklGWV9GT1JDRV9GQUlMKSB7CisgICAgICAgIHJldHVybiAwOyAvKiB0ZXN0IGZhaWx1cmUgY2FzZSAqLworICAgIH0KKworICAgIGlmIChteVZlcmlmeUFjdGlvbiA9PSBWRVJJRllfT1ZFUlJJREVfREFURV9FUlIgJiYgCisgICAgICAgIChzdG9yZS0+ZXJyb3IgPT0gQVNOX0JFRk9SRV9EQVRFX0UgfHwgc3RvcmUtPmVycm9yID09IEFTTl9BRlRFUl9EQVRFX0UpKSB7CisgICAgICAgIHByaW50ZigiT3ZlcnJpZGluZyBjZXJ0IGRhdGUgZXJyb3IgYXMgZXhhbXBsZSBmb3IgYmFkIGNsb2NrIHRlc3RpbmdcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBJZiBlcnJvciBpbmRpY2F0ZSB3ZSBhcmUgb3ZlcnJpZGluZyBpdCBmb3IgdGVzdGluZyBwdXJwb3NlcyAqLworICAgIGlmIChzdG9yZS0+ZXJyb3IgIT0gMCAmJiBteVZlcmlmeUFjdGlvbiA9PSBWRVJJRllfT1ZFUlJJREVfRVJST1IpIHsKKyAgICAgICAgcHJpbnRmKCJcdEFsbG93aW5nIGZhaWxlZCBjZXJ0aWZpY2F0ZSBjaGVjaywgdGVzdGluZyBvbmx5ICIKKyAgICAgICAgICAgICIoc2hvdWxkbid0IGRvIHRoaXMgaW4gcHJvZHVjdGlvbilcbiIpOworICAgIH0KKworICAgIC8qIEEgbm9uLXplcm8gcmV0dXJuIGNvZGUgaW5kaWNhdGVzIGZhaWx1cmUgb3ZlcnJpZGUgKi8KKyAgICByZXR1cm4gKG15VmVyaWZ5QWN0aW9uID09IFZFUklGWV9PVkVSUklERV9FUlJPUikgPyAxIDogcHJldmVyaWZ5OworfQorCisKKyNpZmRlZiBIQVZFX0VYVF9DQUNIRQorCitzdGF0aWMgV0NfSU5MSU5FIFdPTEZTU0xfU0VTU0lPTiogbXlTZXNzR2V0Q2IoV09MRlNTTCogc3NsLCB1bnNpZ25lZCBjaGFyKiBpZCwKKyAgICBpbnQgaWRfbGVuLCBpbnQqIGNvcHkpCit7CisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWlkOworICAgICh2b2lkKWlkX2xlbjsKKyAgICAodm9pZCljb3B5OworCisgICAgLyogdXNpbmcgaW50ZXJuYWwgY2FjaGUsIHRoaXMgaXMgZm9yIHRlc3Rpbmcgb25seSAqLworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgV0NfSU5MSU5FIGludCBteVNlc3NOZXdDYihXT0xGU1NMKiBzc2wsIFdPTEZTU0xfU0VTU0lPTiogc2Vzc2lvbikKK3sKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpc2Vzc2lvbjsKKworICAgIC8qIHVzaW5nIGludGVybmFsIGNhY2hlLCB0aGlzIGlzIGZvciB0ZXN0aW5nIG9ubHkgKi8KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFdDX0lOTElORSB2b2lkIG15U2Vzc1JlbUNiKFdPTEZTU0xfQ1RYKiBjdHgsIFdPTEZTU0xfU0VTU0lPTiogc2Vzc2lvbikKK3sKKyAgICAodm9pZCljdHg7CisgICAgKHZvaWQpc2Vzc2lvbjsKKworICAgIC8qIHVzaW5nIGludGVybmFsIGNhY2hlLCB0aGlzIGlzIGZvciB0ZXN0aW5nIG9ubHkgKi8KK30KKworI2VuZGlmIC8qIEhBVkVfRVhUX0NBQ0hFICovCisKKworI2lmZGVmIEhBVkVfQ1JMCisKK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBDUkxfQ2FsbEJhY2soY29uc3QgY2hhciogdXJsKQoreworICAgIHByaW50ZigiQ1JMIGNhbGxiYWNrIHVybCA9ICVzXG4iLCB1cmwpOworfQorCisjZW5kaWYKKworI2lmbmRlZiBOT19ESAorc3RhdGljIFdDX0lOTElORSB2b2lkIFNldERIKFdPTEZTU0wqIHNzbCkKK3sKKyAgICAvKiBkaDEwMjQgcCAqLworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9CisgICAgeworICAgICAgICAweEU2LCAweDk2LCAweDlELCAweDNELCAweDQ5LCAweDVCLCAweEUzLCAweDJDLCAweDdDLCAweEYxLCAweDgwLCAweEMzLAorICAgICAgICAweEJELCAweEQ0LCAweDc5LCAweDhFLCAweDkxLCAweEI3LCAweDgxLCAweDgyLCAweDUxLCAweEJCLCAweDA1LCAweDVFLAorICAgICAgICAweDJBLCAweDIwLCAweDY0LCAweDkwLCAweDRBLCAweDc5LCAweEE3LCAweDcwLCAweEZBLCAweDE1LCAweEEyLCAweDU5LAorICAgICAgICAweENCLCAweEQ1LCAweDIzLCAweEE2LCAweEE2LCAweEVGLCAweDA5LCAweEM0LCAweDMwLCAweDQ4LCAweEQ1LCAweEEyLAorICAgICAgICAweDJGLCAweDk3LCAweDFGLCAweDNDLCAweDIwLCAweDEyLCAweDlCLCAweDQ4LCAweDAwLCAweDBFLCAweDZFLCAweERELAorICAgICAgICAweDA2LCAweDFDLCAweEJDLCAweDA1LCAweDNFLCAweDM3LCAweDFELCAweDc5LCAweDRFLCAweDUzLCAweDI3LCAweERGLAorICAgICAgICAweDYxLCAweDFFLCAweEJCLCAweEJFLCAweDFCLCAweEFDLCAweDlCLCAweDVDLCAweDYwLCAweDQ0LCAweENGLCAweDAyLAorICAgICAgICAweDNELCAweDc2LCAweEUwLCAweDVFLCAweEVBLCAweDlCLCAweEFELCAweDk5LCAweDFCLCAweDEzLCAweEE2LCAweDNDLAorICAgICAgICAweDk3LCAweDRFLCAweDlFLCAweEYxLCAweDgzLCAweDlFLCAweEI1LCAweERCLCAweDEyLCAweDUxLCAweDM2LCAweEY3LAorICAgICAgICAweDI2LCAweDJFLCAweDU2LCAweEE4LCAweDg3LCAweDE1LCAweDM4LCAweERGLCAweEQ4LCAweDIzLCAweEM2LCAweDUwLAorICAgICAgICAweDUwLCAweDg1LCAweEUyLCAweDFGLCAweDBELCAweEQ1LCAweEM4LCAweDZCLAorICAgIH07CisKKyAgICAvKiBkaDEwMjQgZyAqLworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdbXSA9CisgICAgeworICAgICAgMHgwMiwKKyAgICB9OworCisgICAgd29sZlNTTF9TZXRUbXBESChzc2wsIHAsIHNpemVvZihwKSwgZywgc2l6ZW9mKGcpKTsKK30KKworc3RhdGljIFdDX0lOTElORSB2b2lkIFNldERIQ3R4KFdPTEZTU0xfQ1RYKiBjdHgpCit7CisgICAgLyogZGgxMDI0IHAgKi8KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwW10gPQorICAgIHsKKyAgICAgICAgMHhFNiwgMHg5NiwgMHg5RCwgMHgzRCwgMHg0OSwgMHg1QiwgMHhFMywgMHgyQywgMHg3QywgMHhGMSwgMHg4MCwgMHhDMywKKyAgICAgICAgMHhCRCwgMHhENCwgMHg3OSwgMHg4RSwgMHg5MSwgMHhCNywgMHg4MSwgMHg4MiwgMHg1MSwgMHhCQiwgMHgwNSwgMHg1RSwKKyAgICAgICAgMHgyQSwgMHgyMCwgMHg2NCwgMHg5MCwgMHg0QSwgMHg3OSwgMHhBNywgMHg3MCwgMHhGQSwgMHgxNSwgMHhBMiwgMHg1OSwKKyAgICAgICAgMHhDQiwgMHhENSwgMHgyMywgMHhBNiwgMHhBNiwgMHhFRiwgMHgwOSwgMHhDNCwgMHgzMCwgMHg0OCwgMHhENSwgMHhBMiwKKyAgICAgICAgMHgyRiwgMHg5NywgMHgxRiwgMHgzQywgMHgyMCwgMHgxMiwgMHg5QiwgMHg0OCwgMHgwMCwgMHgwRSwgMHg2RSwgMHhERCwKKyAgICAgICAgMHgwNiwgMHgxQywgMHhCQywgMHgwNSwgMHgzRSwgMHgzNywgMHgxRCwgMHg3OSwgMHg0RSwgMHg1MywgMHgyNywgMHhERiwKKyAgICAgICAgMHg2MSwgMHgxRSwgMHhCQiwgMHhCRSwgMHgxQiwgMHhBQywgMHg5QiwgMHg1QywgMHg2MCwgMHg0NCwgMHhDRiwgMHgwMiwKKyAgICAgICAgMHgzRCwgMHg3NiwgMHhFMCwgMHg1RSwgMHhFQSwgMHg5QiwgMHhBRCwgMHg5OSwgMHgxQiwgMHgxMywgMHhBNiwgMHgzQywKKyAgICAgICAgMHg5NywgMHg0RSwgMHg5RSwgMHhGMSwgMHg4MywgMHg5RSwgMHhCNSwgMHhEQiwgMHgxMiwgMHg1MSwgMHgzNiwgMHhGNywKKyAgICAgICAgMHgyNiwgMHgyRSwgMHg1NiwgMHhBOCwgMHg4NywgMHgxNSwgMHgzOCwgMHhERiwgMHhEOCwgMHgyMywgMHhDNiwgMHg1MCwKKyAgICAgICAgMHg1MCwgMHg4NSwgMHhFMiwgMHgxRiwgMHgwRCwgMHhENSwgMHhDOCwgMHg2QiwKKyAgICB9OworCisgICAgLyogZGgxMDI0IGcgKi8KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnW10gPQorICAgIHsKKyAgICAgIDB4MDIsCisgICAgfTsKKworICAgIHdvbGZTU0xfQ1RYX1NldFRtcERIKGN0eCwgcCwgc2l6ZW9mKHApLCBnLCBzaXplb2YoZykpOworfQorI2VuZGlmIC8qIE5PX0RIICovCisKKyNpZm5kZWYgTk9fQ0VSVFMKKworc3RhdGljIFdDX0lOTElORSB2b2lkIENhQ2IodW5zaWduZWQgY2hhciogZGVyLCBpbnQgc3osIGludCB0eXBlKQoreworICAgICh2b2lkKWRlcjsKKyAgICBwcmludGYoIkdvdCBDQSBjYWNoZSBhZGQgY2FsbGJhY2ssIGRlclN6ID0gJWQsIHR5cGUgPSAlZFxuIiwgc3osIHR5cGUpOworfQorCisjZW5kaWYgLyogIU5PX0NFUlRTICovCisKKworLyogV29sZiBSb290IERpcmVjdG9yeSBIZWxwZXIgKi8KKy8qIEtFSUwtUkwgRmlsZSBTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCByZWxhdGl2ZSBkaXJlY3RvcnkgKi8KKyNpZiAhZGVmaW5lZChXT0xGU1NMX01ES19BUk0pICYmICFkZWZpbmVkKFdPTEZTU0xfS0VJTF9GUykgJiYgIWRlZmluZWQoV09MRlNTTF9USVJUT1MpCisgICAgLyogTWF4aW11bSBkZXB0aCB0byBzZWFyY2ggZm9yIFdvbGZTU0wgcm9vdCAqLworICAgICNkZWZpbmUgTUFYX1dPTEZfUk9PVF9ERVBUSCA1CisKKyAgICBzdGF0aWMgV0NfSU5MSU5FIGludCBDaGFuZ2VUb1dvbGZSb290KHZvaWQpCisgICAgeworICAgICAgICAjaWYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgfHwgZGVmaW5lZChGT1JDRV9CVUZGRVJfVEVTVCkKKyAgICAgICAgICAgIGludCBkZXB0aCwgcmVzOworICAgICAgICAgICAgWEZJTEUga2V5RmlsZTsKKyAgICAgICAgICAgIGZvcihkZXB0aCA9IDA7IGRlcHRoIDw9IE1BWF9XT0xGX1JPT1RfREVQVEg7IGRlcHRoKyspIHsKKyAgICAgICAgICAgICAgICBrZXlGaWxlID0gWEZPUEVOKG50cnVLZXlGaWxlLCAicmIiKTsKKyAgICAgICAgICAgICAgICBpZiAoa2V5RmlsZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGZjbG9zZShrZXlGaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlcHRoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICNpZmRlZiBVU0VfV0lORE9XU19BUEkKKyAgICAgICAgICAgICAgICByZXMgPSBTZXRDdXJyZW50RGlyZWN0b3J5QSgiLi5cXCIpOworICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICByZXMgPSBjaGRpcigiLi4vIik7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoImNoZGlyIHRvIC4uLyBmYWlsZWQhXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlcnJfc3lzKCJ3b2xmIHJvb3Qgbm90IGZvdW5kIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICNlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgI2VuZGlmCisgICAgfQorI2VuZGlmIC8qICFkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkgJiYgIWRlZmluZWQoV09MRlNTTF9LRUlMX0ZTKSAmJiAhZGVmaW5lZChXT0xGU1NMX1RJUlRPUykgKi8KKworI2lmZGVmIEhBVkVfU1RBQ0tfU0laRQorCit0eXBlZGVmIFRIUkVBRF9SRVRVUk4gV09MRlNTTF9USFJFQUQgKCp0aHJlYWRfZnVuYykodm9pZCogYXJncyk7CisjZGVmaW5lIFNUQUNLX0NIRUNLX1ZBTCAweDAxCisKK3N0cnVjdCBzdGFja19zaXplX2RlYnVnX2NvbnRleHQgeworICB1bnNpZ25lZCBjaGFyICpteVN0YWNrOworICBzaXplX3Qgc3RhY2tTaXplOworI2lmZGVmIEhBVkVfU1RBQ0tfU0laRV9WRVJCT1NFCisgIHNpemVfdCAqc3RhY2tTaXplSFdNX3B0cjsKKyAgdGhyZWFkX2Z1bmMgZm47CisgIHZvaWQgKmFyZ3M7CisjZW5kaWYKK307CisKKyNpZmRlZiBIQVZFX1NUQUNLX1NJWkVfVkVSQk9TRQorCisvKiBwZXItc3VidGVzdCBzdGFjayBoaWdoIHdhdGVyIG1hcmsgdHJhY2tpbmcuCisgKgorICogZW5hYmxlIHdpdGgKKyAqCisgKiAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1zdGFja3NpemU9dmVyYm9zZSBbLi4uXQorICovCisKK3N0YXRpYyBUSFJFQURfUkVUVVJOIGRlYnVnX3N0YWNrX3NpemVfdmVyYm9zZV9zaGltKHN0cnVjdCBzdGFja19zaXplX2RlYnVnX2NvbnRleHQgKnNoaW1fYXJncykgeworICBTdGFja1NpemVDaGVja19teVN0YWNrID0gc2hpbV9hcmdzLT5teVN0YWNrOworICBTdGFja1NpemVDaGVja19zdGFja1NpemUgPSBzaGltX2FyZ3MtPnN0YWNrU2l6ZTsKKyAgU3RhY2tTaXplQ2hlY2tfc3RhY2tTaXplSFdNX3B0ciA9IHNoaW1fYXJncy0+c3RhY2tTaXplSFdNX3B0cjsKKyAgcmV0dXJuIHNoaW1fYXJncy0+Zm4oc2hpbV9hcmdzLT5hcmdzKTsKK30KKworc3RhdGljIFdDX0lOTElORSBpbnQgU3RhY2tTaXplU2V0T2Zmc2V0KGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCB2b2lkICpwKQoreworICAgIGlmIChTdGFja1NpemVDaGVja19teVN0YWNrID09IE5VTEwpCisgICAgICAgIHJldHVybiAtQkFEX0ZVTkNfQVJHOworCisgICAgU3RhY2tTaXplQ2hlY2tfc3RhY2tPZmZzZXRQb2ludGVyID0gcDsKKworICAgIHByaW50Zigic2V0dGluZyBzdGFjayByZWxhdGl2ZSBvZmZzZXQgcmVmZXJlbmNlIG1hcmsgaW4gJXMgdG8gKyVsdVxuIiwKKyAgICAgICAgZnVuY25hbWUsICh1bnNpZ25lZCBsb25nKSgoY2hhciopKFN0YWNrU2l6ZUNoZWNrX215U3RhY2sgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2l6ZUNoZWNrX3N0YWNrU2l6ZSkgLSAoY2hhciAqKXApKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgV0NfSU5MSU5FIHNzaXplX3QgU3RhY2tTaXplSFdNKHZvaWQpCit7CisgICAgc2l6ZV90IGk7CisgICAgc3NpemVfdCB1c2VkOworCisgICAgaWYgKFN0YWNrU2l6ZUNoZWNrX215U3RhY2sgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC1CQURfRlVOQ19BUkc7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgU3RhY2tTaXplQ2hlY2tfc3RhY2tTaXplOyBpKyspIHsKKyAgICAgICAgaWYgKFN0YWNrU2l6ZUNoZWNrX215U3RhY2tbaV0gIT0gU1RBQ0tfQ0hFQ0tfVkFMKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVzZWQgPSBTdGFja1NpemVDaGVja19zdGFja1NpemUgLSBpOworICAgIGlmICgoc3NpemVfdCkqU3RhY2tTaXplQ2hlY2tfc3RhY2tTaXplSFdNX3B0ciA8IHVzZWQpCisgICAgICAqU3RhY2tTaXplQ2hlY2tfc3RhY2tTaXplSFdNX3B0ciA9IHVzZWQ7CisKKyAgICByZXR1cm4gdXNlZDsKK30KKworc3RhdGljIFdDX0lOTElORSBzc2l6ZV90IFN0YWNrU2l6ZUhXTV9PZmZzZXRDb3JyZWN0ZWQodm9pZCkKK3sKKyAgICBzc2l6ZV90IHVzZWQgPSBTdGFja1NpemVIV00oKTsKKyAgICBpZiAodXNlZCA8IDApCisgICAgICAgIHJldHVybiB1c2VkOworICAgIGlmIChTdGFja1NpemVDaGVja19zdGFja09mZnNldFBvaW50ZXIpCisgICAgICAgIHVzZWQgLT0gKHNzaXplX3QpKCgoY2hhciAqKVN0YWNrU2l6ZUNoZWNrX215U3RhY2sgKyBTdGFja1NpemVDaGVja19zdGFja1NpemUpIC0gKGNoYXIgKilTdGFja1NpemVDaGVja19zdGFja09mZnNldFBvaW50ZXIpOworICAgIHJldHVybiB1c2VkOworfQorCitzdGF0aWMKKyNpZmRlZiBfX0dOVUNfXworX19hdHRyaWJ1dGVfXygodW51c2VkKSkgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorI2VuZGlmCitpbnQgU3RhY2tTaXplSFdNUmVzZXQodm9pZCkKK3sKKyAgICB2b2xhdGlsZSBzc2l6ZV90IGk7CisKKyAgICBpZiAoU3RhY2tTaXplQ2hlY2tfbXlTdGFjayA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLUJBRF9GVU5DX0FSRzsKKworICAgIGZvciAoaSA9IChzc2l6ZV90KSgoY2hhciAqKSZpIC0gKGNoYXIgKilTdGFja1NpemVDaGVja19teVN0YWNrKSAtIChzc2l6ZV90KXNpemVvZiBpIC0gMTsgaSA+PSAwOyAtLWkpCisgICAgeworICAgICAgICBTdGFja1NpemVDaGVja19teVN0YWNrW2ldID0gU1RBQ0tfQ0hFQ0tfVkFMOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisjZGVmaW5lIFNUQUNLX1NJWkVfQ0hFQ0tQT0lOVCguLi4pICh7ICBcCisgICAgc3NpemVfdCBIV00gPSBTdGFja1NpemVIV01fT2Zmc2V0Q29ycmVjdGVkKCk7ICAgIFwKKyAgICBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHByaW50ZigiICAgIHJlbGF0aXZlIHN0YWNrIHBlYWsgdXNhZ2UgPSAlbGQgYnl0ZXNcbiIsIEhXTSk7ICBcCisgICAgU3RhY2tTaXplSFdNUmVzZXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIFNUQUNLX1NJWkVfQ0hFQ0tQT0lOVF9XSVRIX01BWF9DSEVDSyhtYXgsIC4uLikgKHsgIFwKKyAgICBzc2l6ZV90IEhXTSA9IFN0YWNrU2l6ZUhXTV9PZmZzZXRDb3JyZWN0ZWQoKTsgICAgXAorICAgIGludCBfcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwcmludGYoIiAgICByZWxhdGl2ZSBzdGFjayBwZWFrIHVzYWdlID0gJWxkIGJ5dGVzXG4iLCBIV00pOyAgXAorICAgIF9yZXQgPSBTdGFja1NpemVIV01SZXNldCgpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChtYXggPj0gMCkgJiYgKEhXTSA+IChzc2l6ZV90KShtYXgpKSkgeyAgICAgIFwKKyAgICAgICAgcHJpbnRmKCIgICAgcmVsYXRpdmUgc3RhY2sgdXNhZ2UgYXQgJXMgTCVkIGV4Y2VlZHMgZGVzaWduYXRlZCBtYXggJWxkIGJ5dGVzLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAoc3NpemVfdCkobWF4KSk7IFwKKyAgICAgICAgX3JldCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBTVEFDS19TSVpFX0lOSVQoKSAodm9pZClTdGFja1NpemVTZXRPZmZzZXQoX19GVU5DVElPTl9fLCBfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcygwKSkKKyNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9TVEFDS19TSVpFX1ZFUkJPU0UgKi8KKworc3RhdGljIFdDX0lOTElORSBpbnQgU3RhY2tTaXplQ2hlY2soZnVuY19hcmdzKiBhcmdzLCB0aHJlYWRfZnVuYyB0ZikKK3sKKyAgICBzaXplX3QgICAgICAgICBpOworICAgIGludCAgICAgICAgICAgIHJldDsKKyAgICB2b2lkKiAgICAgICAgICBzdGF0dXM7CisgICAgdW5zaWduZWQgY2hhciogbXlTdGFjayA9IE5VTEw7CisgICAgc2l6ZV90ICAgICAgICAgc3RhY2tTaXplID0gMTAyNCoxMDI0OworICAgIHB0aHJlYWRfYXR0cl90IG15QXR0cjsKKyAgICBwdGhyZWFkX3QgICAgICB0aHJlYWRJZDsKKyNpZmRlZiBIQVZFX1NUQUNLX1NJWkVfVkVSQk9TRQorICAgIHN0cnVjdCBzdGFja19zaXplX2RlYnVnX2NvbnRleHQgc2hpbV9hcmdzOworI2VuZGlmCisKKyNpZmRlZiBQVEhSRUFEX1NUQUNLX01JTgorICAgIGlmIChzdGFja1NpemUgPCBQVEhSRUFEX1NUQUNLX01JTikKKyAgICAgICAgc3RhY2tTaXplID0gUFRIUkVBRF9TVEFDS19NSU47CisjZW5kaWYKKworICAgIHJldCA9IHBvc2l4X21lbWFsaWduKCh2b2lkKiopJm15U3RhY2ssIHN5c2NvbmYoX1NDX1BBR0VTSVpFKSwgc3RhY2tTaXplKTsKKyAgICBpZiAocmV0ICE9IDAgfHwgbXlTdGFjayA9PSBOVUxMKQorICAgICAgICBlcnJfc3lzX3dpdGhfZXJybm8oInBvc2l4X21lbWFsaWduIGZhaWxlZFxuIik7CisKKyAgICBYTUVNU0VUKG15U3RhY2ssIFNUQUNLX0NIRUNLX1ZBTCwgc3RhY2tTaXplKTsKKworICAgIHJldCA9IHB0aHJlYWRfYXR0cl9pbml0KCZteUF0dHIpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgZXJyX3N5cygiYXR0cl9pbml0IGZhaWxlZCIpOworCisgICAgcmV0ID0gcHRocmVhZF9hdHRyX3NldHN0YWNrKCZteUF0dHIsIG15U3RhY2ssIHN0YWNrU2l6ZSk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICBlcnJfc3lzKCJhdHRyX3NldHN0YWNrYWRkciBmYWlsZWQiKTsKKworI2lmZGVmIEhBVkVfU1RBQ0tfU0laRV9WRVJCT1NFCisgICAgU3RhY2tTaXplQ2hlY2tfc3RhY2tTaXplSFdNID0gMDsKKyAgICBzaGltX2FyZ3MubXlTdGFjayA9IG15U3RhY2s7CisgICAgc2hpbV9hcmdzLnN0YWNrU2l6ZSA9IHN0YWNrU2l6ZTsKKyAgICBzaGltX2FyZ3Muc3RhY2tTaXplSFdNX3B0ciA9ICZTdGFja1NpemVDaGVja19zdGFja1NpemVIV007CisgICAgc2hpbV9hcmdzLmZuID0gdGY7CisgICAgc2hpbV9hcmdzLmFyZ3MgPSBhcmdzOworICAgIHJldCA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRJZCwgJm15QXR0ciwgKHRocmVhZF9mdW5jKWRlYnVnX3N0YWNrX3NpemVfdmVyYm9zZV9zaGltLCAodm9pZCAqKSZzaGltX2FyZ3MpOworI2Vsc2UKKyAgICByZXQgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSWQsICZteUF0dHIsIHRmLCBhcmdzKTsKKyNlbmRpZgorICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICBwZXJyb3IoInB0aHJlYWRfY3JlYXRlIGZhaWxlZCIpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgcmV0ID0gcHRocmVhZF9qb2luKHRocmVhZElkLCAmc3RhdHVzKTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIGVycl9zeXMoInB0aHJlYWRfam9pbiBmYWlsZWQiKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzdGFja1NpemU7IGkrKykgeworICAgICAgICBpZiAobXlTdGFja1tpXSAhPSBTVEFDS19DSEVDS19WQUwpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZnJlZShteVN0YWNrKTsKKyNpZmRlZiBIQVZFX1NUQUNLX1NJWkVfVkVSQk9TRQorICAgIHByaW50Zigic3RhY2sgdXNlZCA9ICVsdVxuIiwgU3RhY2tTaXplQ2hlY2tfc3RhY2tTaXplSFdNID4gKHN0YWNrU2l6ZSAtIGkpCisgICAgICAgID8gKHVuc2lnbmVkIGxvbmcpU3RhY2tTaXplQ2hlY2tfc3RhY2tTaXplSFdNCisgICAgICAgIDogKHVuc2lnbmVkIGxvbmcpKHN0YWNrU2l6ZSAtIGkpKTsKKyNlbHNlCisgICAgeworICAgICAgc2l6ZV90IHVzZWQgPSBzdGFja1NpemUgLSBpOworICAgICAgcHJpbnRmKCJzdGFjayB1c2VkID0gJWx1XG4iLCAodW5zaWduZWQgbG9uZyl1c2VkKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiAoaW50KSgoc2l6ZV90KXN0YXR1cyk7Cit9CisKK3N0YXRpYyBXQ19JTkxJTkUgaW50IFN0YWNrU2l6ZUNoZWNrX2xhdW5jaChmdW5jX2FyZ3MqIGFyZ3MsIHRocmVhZF9mdW5jIHRmLCBwdGhyZWFkX3QgKnRocmVhZElkLCB2b2lkICoqc3RhY2tfY29udGV4dCkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIqIG15U3RhY2sgPSBOVUxMOworICAgIHNpemVfdCBzdGFja1NpemUgPSAxMDI0KjEwMjQ7CisgICAgcHRocmVhZF9hdHRyX3QgbXlBdHRyOworCisjaWZkZWYgUFRIUkVBRF9TVEFDS19NSU4KKyAgICBpZiAoc3RhY2tTaXplIDwgUFRIUkVBRF9TVEFDS19NSU4pCisgICAgICAgIHN0YWNrU2l6ZSA9IFBUSFJFQURfU1RBQ0tfTUlOOworI2VuZGlmCisKKyAgICBzdHJ1Y3Qgc3RhY2tfc2l6ZV9kZWJ1Z19jb250ZXh0ICpzaGltX2FyZ3MgPSAoc3RydWN0IHN0YWNrX3NpemVfZGVidWdfY29udGV4dCAqKW1hbGxvYyhzaXplb2YgKnNoaW1fYXJncyk7CisgICAgaWYgKCEgc2hpbV9hcmdzKSB7CisgICAgICAgIHBlcnJvcigibWFsbG9jIik7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICByZXQgPSBwb3NpeF9tZW1hbGlnbigodm9pZCoqKSZteVN0YWNrLCBzeXNjb25mKF9TQ19QQUdFU0laRSksIHN0YWNrU2l6ZSk7CisgICAgaWYgKHJldCAhPSAwIHx8IG15U3RhY2sgPT0gTlVMTCkKKyAgICAgICAgZXJyX3N5c193aXRoX2Vycm5vKCJwb3NpeF9tZW1hbGlnbiBmYWlsZWRcbiIpOworCisgICAgWE1FTVNFVChteVN0YWNrLCBTVEFDS19DSEVDS19WQUwsIHN0YWNrU2l6ZSk7CisKKyAgICByZXQgPSBwdGhyZWFkX2F0dHJfaW5pdCgmbXlBdHRyKTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIGVycl9zeXMoImF0dHJfaW5pdCBmYWlsZWQiKTsKKworICAgIHJldCA9IHB0aHJlYWRfYXR0cl9zZXRzdGFjaygmbXlBdHRyLCBteVN0YWNrLCBzdGFja1NpemUpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgZXJyX3N5cygiYXR0cl9zZXRzdGFja2FkZHIgZmFpbGVkIik7CisKKyAgICBzaGltX2FyZ3MtPm15U3RhY2sgPSBteVN0YWNrOworICAgIHNoaW1fYXJncy0+c3RhY2tTaXplID0gc3RhY2tTaXplOworI2lmZGVmIEhBVkVfU1RBQ0tfU0laRV9WRVJCT1NFCisgICAgc2hpbV9hcmdzLT5zdGFja1NpemVIV01fcHRyID0gJlN0YWNrU2l6ZUNoZWNrX3N0YWNrU2l6ZUhXTTsKKyAgICBzaGltX2FyZ3MtPmZuID0gdGY7CisgICAgc2hpbV9hcmdzLT5hcmdzID0gYXJnczsKKyAgICByZXQgPSBwdGhyZWFkX2NyZWF0ZSh0aHJlYWRJZCwgJm15QXR0ciwgKHRocmVhZF9mdW5jKWRlYnVnX3N0YWNrX3NpemVfdmVyYm9zZV9zaGltLCAodm9pZCAqKXNoaW1fYXJncyk7CisjZWxzZQorICAgIHJldCA9IHB0aHJlYWRfY3JlYXRlKHRocmVhZElkLCAmbXlBdHRyLCB0ZiwgYXJncyk7CisjZW5kaWYKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsInB0aHJlYWRfY3JlYXRlIGZhaWxlZDogJXMiLHN0cmVycm9yKHJldCkpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgKnN0YWNrX2NvbnRleHQgPSAodm9pZCAqKXNoaW1fYXJnczsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgV0NfSU5MSU5FIGludCBTdGFja1NpemVDaGVja19yZWFwKHB0aHJlYWRfdCB0aHJlYWRJZCwgdm9pZCAqc3RhY2tfY29udGV4dCkKK3sKKyAgICBzdHJ1Y3Qgc3RhY2tfc2l6ZV9kZWJ1Z19jb250ZXh0ICpzaGltX2FyZ3MgPSAoc3RydWN0IHN0YWNrX3NpemVfZGVidWdfY29udGV4dCAqKXN0YWNrX2NvbnRleHQ7CisgICAgc2l6ZV90IGk7CisgICAgdm9pZCAqc3RhdHVzOworICAgIGludCByZXQgPSBwdGhyZWFkX2pvaW4odGhyZWFkSWQsICZzdGF0dXMpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgZXJyX3N5cygicHRocmVhZF9qb2luIGZhaWxlZCIpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNoaW1fYXJncy0+c3RhY2tTaXplOyBpKyspIHsKKyAgICAgICAgaWYgKHNoaW1fYXJncy0+bXlTdGFja1tpXSAhPSBTVEFDS19DSEVDS19WQUwpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZnJlZShzaGltX2FyZ3MtPm15U3RhY2spOworI2lmZGVmIEhBVkVfU1RBQ0tfU0laRV9WRVJCT1NFCisgICAgcHJpbnRmKCJzdGFjayB1c2VkID0gJWx1XG4iLAorICAgICAgICAqc2hpbV9hcmdzLT5zdGFja1NpemVIV01fcHRyID4gKHNoaW1fYXJncy0+c3RhY2tTaXplIC0gaSkKKyAgICAgICAgPyAodW5zaWduZWQgbG9uZykqc2hpbV9hcmdzLT5zdGFja1NpemVIV01fcHRyCisgICAgICAgIDogKHVuc2lnbmVkIGxvbmcpKHNoaW1fYXJncy0+c3RhY2tTaXplIC0gaSkpOworI2Vsc2UKKyAgICB7CisgICAgICBzaXplX3QgdXNlZCA9IHNoaW1fYXJncy0+c3RhY2tTaXplIC0gaTsKKyAgICAgIHByaW50Zigic3RhY2sgdXNlZCA9ICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpdXNlZCk7CisgICAgfQorI2VuZGlmCisgICAgZnJlZShzaGltX2FyZ3MpOworCisgICAgcmV0dXJuIChpbnQpKChzaXplX3Qpc3RhdHVzKTsKK30KKworCisjZW5kaWYgLyogSEFWRV9TVEFDS19TSVpFICovCisKKyNpZm5kZWYgU1RBQ0tfU0laRV9DSEVDS1BPSU5UCisjZGVmaW5lIFNUQUNLX1NJWkVfQ0hFQ0tQT0lOVCguLi4pIChfX1ZBX0FSR1NfXykKKyNlbmRpZgorI2lmbmRlZiBTVEFDS19TSVpFX0lOSVQKKyNkZWZpbmUgU1RBQ0tfU0laRV9JTklUKCkKKyNlbmRpZgorCisjaWZkZWYgU1RBQ0tfVFJBUAorCisvKiBnb29kIHNldHRpbmdzCisgICAtLWVuYWJsZS1kZWJ1ZyAtLWRpc2FibGUtc2hhcmVkIENfRVhUUkFfRkxBR1M9Ii1EVVNFUl9USU1FIC1EVEZNX1RJTUlOR19SRVNJU1RBTlQgLURQT1NJVElWRV9FWFBfT05MWSAtRFNUQUNLX1RSQVAiCisKKyovCisKKyNpZmRlZiBIQVZFX1NUQUNLX1NJWkUKKyAgICAvKiBjbGllbnQgb25seSBmb3Igbm93LCBzZXRybGltaXQgd2lsbCBmYWlsIGlmIHB0aHJlYWRfY3JlYXRlKCkgY2FsbGVkICovCisgICAgLyogU1RBQ0tfU0laRSBkb2VzIHB0aHJlYWRfY3JlYXRlKCkgb24gY2xpZW50ICovCisgICAgI2Vycm9yICJjYW4ndCB1c2UgU1RBQ0tfVFJBUCB3aXRoIFNUQUNLX1NJWkUsIHNldHJsaW1pdCB3aWxsIGZhaWwiCisjZW5kaWYgLyogSEFWRV9TVEFDS19TSVpFICovCisKK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBTdGFja1RyYXAodm9pZCkKK3sKKyAgICBzdHJ1Y3QgcmxpbWl0ICBybDsKKyAgICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnJsKSAhPSAwKQorICAgICAgICBlcnJfc3lzX3dpdGhfZXJybm8oImdldHJsaW1pdCBmYWlsZWQiKTsKKyAgICBwcmludGYoInJsaW1fY3VyID0gJWxsdVxuIiwgcmwucmxpbV9jdXIpOworICAgIHJsLnJsaW1fY3VyID0gMTAyNCoyMTsgIC8qIGFkanVzdCB0cmFwIHNpemUgaGVyZSAqLworICAgIGlmIChzZXRybGltaXQoUkxJTUlUX1NUQUNLLCAmcmwpICE9IDApCisgICAgICAgIGVycl9zeXNfd2l0aF9lcnJubygic2V0cmxpbWl0IGZhaWxlZCIpOworfQorCisjZWxzZSAvKiBTVEFDS19UUkFQICovCisKK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBTdGFja1RyYXAodm9pZCkKK3sKK30KKworI2VuZGlmIC8qIFNUQUNLX1RSQVAgKi8KKworCisjaWYgZGVmaW5lZChBVE9NSUNfVVNFUikgJiYgIWRlZmluZWQoV09MRlNTTF9BRUFEX09OTFkpCisKKy8qIEF0b21pYyBFbmNyeXB0IENvbnRleHQgZXhhbXBsZSAqLwordHlwZWRlZiBzdHJ1Y3QgQXRvbWljRW5jQ3R4IHsKKyAgICBpbnQgIGtleVNldHVwOyAgICAgICAgICAgLyogaGF2ZSB3ZSBkb25lIGtleSBzZXR1cCB5ZXQgKi8KKyAgICBBZXMgIGFlczsgICAgICAgICAgICAgICAgLyogZm9yIGFlcyBleGFtcGxlICovCit9IEF0b21pY0VuY0N0eDsKKworCisvKiBBdG9taWMgRGVjcnlwdCBDb250ZXh0IGV4YW1wbGUgKi8KK3R5cGVkZWYgc3RydWN0IEF0b21pY0RlY0N0eCB7CisgICAgaW50ICBrZXlTZXR1cDsgICAgICAgICAgIC8qIGhhdmUgd2UgZG9uZSBrZXkgc2V0dXAgeWV0ICovCisgICAgQWVzICBhZXM7ICAgICAgICAgICAgICAgIC8qIGZvciBhZXMgZXhhbXBsZSAqLworfSBBdG9taWNEZWNDdHg7CisKKworc3RhdGljIFdDX0lOTElORSBpbnQgbXlNYWNFbmNyeXB0Q2IoV09MRlNTTCogc3NsLCB1bnNpZ25lZCBjaGFyKiBtYWNPdXQsCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogbWFjSW4sIHVuc2lnbmVkIGludCBtYWNJblN6LCBpbnQgbWFjQ29udGVudCwKKyAgICAgICBpbnQgbWFjVmVyaWZ5LCB1bnNpZ25lZCBjaGFyKiBlbmNPdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGVuY0luLAorICAgICAgIHVuc2lnbmVkIGludCBlbmNTeiwgdm9pZCogY3R4KQoreworICAgIGludCAgcmV0OworICAgIEhtYWMgaG1hYzsKKyAgICBieXRlIG15SW5uZXJbV09MRlNTTF9UTFNfSE1BQ19JTk5FUl9TWl07CisgICAgQXRvbWljRW5jQ3R4KiBlbmNDdHggPSAoQXRvbWljRW5jQ3R4KiljdHg7CisgICAgY29uc3QgY2hhciogdGxzU3RyID0gIlRMUyI7CisKKyAgICAvKiBleGFtcGxlIHN1cHBvcnRzIChkKXRscyBhZXMgKi8KKyAgICBpZiAod29sZlNTTF9HZXRCdWxrQ2lwaGVyKHNzbCkgIT0gd29sZnNzbF9hZXMpIHsKKyAgICAgICAgcHJpbnRmKCJteU1hY0VuY3J5cHRDYiBub3QgdXNpbmcgQUVTXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzdHJzdHIod29sZlNTTF9nZXRfdmVyc2lvbihzc2wpLCB0bHNTdHIpID09IE5VTEwpIHsKKyAgICAgICAgcHJpbnRmKCJteU1hY0VuY3J5cHRDYiBub3QgdXNpbmcgKEQpVExTXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIGhtYWMsIG5vdCBuZWVkZWQgaWYgYWVhZCBtb2RlICovCisgICAgd29sZlNTTF9TZXRUbHNIbWFjSW5uZXIoc3NsLCBteUlubmVyLCBtYWNJblN6LCBtYWNDb250ZW50LCBtYWNWZXJpZnkpOworCisgICAgcmV0ID0gd2NfSG1hY0luaXQoJmhtYWMsIE5VTEwsIElOVkFMSURfREVWSUQpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICByZXQgPSB3Y19IbWFjU2V0S2V5KCZobWFjLCB3b2xmU1NMX0dldEhtYWNUeXBlKHNzbCksCisgICAgICAgICAgICAgICB3b2xmU1NMX0dldE1hY1NlY3JldChzc2wsIG1hY1ZlcmlmeSksIHdvbGZTU0xfR2V0SG1hY1NpemUoc3NsKSk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIHJldCA9IHdjX0htYWNVcGRhdGUoJmhtYWMsIG15SW5uZXIsIHNpemVvZihteUlubmVyKSk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIHJldCA9IHdjX0htYWNVcGRhdGUoJmhtYWMsIG1hY0luLCBtYWNJblN6KTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgcmV0ID0gd2NfSG1hY0ZpbmFsKCZobWFjLCBtYWNPdXQpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworCisgICAgLyogZW5jcnlwdCBzZXR1cCBvbiBmaXJzdCB0aW1lICovCisgICAgaWYgKGVuY0N0eC0+a2V5U2V0dXAgPT0gMCkgeworICAgICAgICBpbnQgICBrZXlMZW4gPSB3b2xmU1NMX0dldEtleVNpemUoc3NsKTsKKyAgICAgICAgY29uc3QgYnl0ZSoga2V5OworICAgICAgICBjb25zdCBieXRlKiBpdjsKKworICAgICAgICBpZiAod29sZlNTTF9HZXRTaWRlKHNzbCkgPT0gV09MRlNTTF9DTElFTlRfRU5EKSB7CisgICAgICAgICAgICBrZXkgPSB3b2xmU1NMX0dldENsaWVudFdyaXRlS2V5KHNzbCk7CisgICAgICAgICAgICBpdiAgPSB3b2xmU1NMX0dldENsaWVudFdyaXRlSVYoc3NsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGtleSA9IHdvbGZTU0xfR2V0U2VydmVyV3JpdGVLZXkoc3NsKTsKKyAgICAgICAgICAgIGl2ICA9IHdvbGZTU0xfR2V0U2VydmVyV3JpdGVJVihzc2wpOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gd2NfQWVzU2V0S2V5KCZlbmNDdHgtPmFlcywga2V5LCBrZXlMZW4sIGl2LCBBRVNfRU5DUllQVElPTik7CisgICAgICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICAgICAgcHJpbnRmKCJBZXNTZXRLZXkgZmFpbGVkIGluIG15TWFjRW5jcnlwdENiXG4iKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgZW5jQ3R4LT5rZXlTZXR1cCA9IDE7CisgICAgfQorCisgICAgLyogZW5jcnlwdCAqLworICAgIHJldHVybiB3Y19BZXNDYmNFbmNyeXB0KCZlbmNDdHgtPmFlcywgZW5jT3V0LCBlbmNJbiwgZW5jU3opOworfQorCisKK3N0YXRpYyBXQ19JTkxJTkUgaW50IG15RGVjcnlwdFZlcmlmeUNiKFdPTEZTU0wqIHNzbCwKKyAgICAgICB1bnNpZ25lZCBjaGFyKiBkZWNPdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRlY0luLAorICAgICAgIHVuc2lnbmVkIGludCBkZWNTeiwgaW50IG1hY0NvbnRlbnQsIGludCBtYWNWZXJpZnksCisgICAgICAgdW5zaWduZWQgaW50KiBwYWRTeiwgdm9pZCogY3R4KQoreworICAgIEF0b21pY0RlY0N0eCogZGVjQ3R4ID0gKEF0b21pY0RlY0N0eCopY3R4OworICAgIGludCByZXQgICAgICA9IDA7CisgICAgaW50IG1hY0luU3ogID0gMDsKKyAgICBpbnQgaXZFeHRyYSAgPSAwOworICAgIGludCBkaWdlc3RTeiA9IHdvbGZTU0xfR2V0SG1hY1NpemUoc3NsKTsKKyAgICB1bnNpZ25lZCBpbnQgcGFkICAgICA9IDA7CisgICAgdW5zaWduZWQgaW50IHBhZEJ5dGUgPSAwOworICAgIEhtYWMgaG1hYzsKKyAgICBieXRlIG15SW5uZXJbV09MRlNTTF9UTFNfSE1BQ19JTk5FUl9TWl07CisgICAgYnl0ZSB2ZXJpZnlbV0NfTUFYX0RJR0VTVF9TSVpFXTsKKyAgICBjb25zdCBjaGFyKiB0bHNTdHIgPSAiVExTIjsKKworICAgIC8qIGV4YW1wbGUgc3VwcG9ydHMgKGQpdGxzIGFlcyAqLworICAgIGlmICh3b2xmU1NMX0dldEJ1bGtDaXBoZXIoc3NsKSAhPSB3b2xmc3NsX2FlcykgeworICAgICAgICBwcmludGYoIm15TWFjRW5jcnlwdENiIG5vdCB1c2luZyBBRVNcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHN0cnN0cih3b2xmU1NMX2dldF92ZXJzaW9uKHNzbCksIHRsc1N0cikgPT0gTlVMTCkgeworICAgICAgICBwcmludGYoIm15TWFjRW5jcnlwdENiIG5vdCB1c2luZyAoRClUTFNcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLypkZWNyeXB0ICovCisgICAgaWYgKGRlY0N0eC0+a2V5U2V0dXAgPT0gMCkgeworICAgICAgICBpbnQgICBrZXlMZW4gPSB3b2xmU1NMX0dldEtleVNpemUoc3NsKTsKKyAgICAgICAgY29uc3QgYnl0ZSoga2V5OworICAgICAgICBjb25zdCBieXRlKiBpdjsKKworICAgICAgICAvKiBkZWNyeXB0IGlzIGZyb20gb3RoZXIgc2lkZSAocGVlcikgKi8KKyAgICAgICAgaWYgKHdvbGZTU0xfR2V0U2lkZShzc2wpID09IFdPTEZTU0xfU0VSVkVSX0VORCkgeworICAgICAgICAgICAga2V5ID0gd29sZlNTTF9HZXRDbGllbnRXcml0ZUtleShzc2wpOworICAgICAgICAgICAgaXYgID0gd29sZlNTTF9HZXRDbGllbnRXcml0ZUlWKHNzbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBrZXkgPSB3b2xmU1NMX0dldFNlcnZlcldyaXRlS2V5KHNzbCk7CisgICAgICAgICAgICBpdiAgPSB3b2xmU1NMX0dldFNlcnZlcldyaXRlSVYoc3NsKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IHdjX0Flc1NldEtleSgmZGVjQ3R4LT5hZXMsIGtleSwga2V5TGVuLCBpdiwgQUVTX0RFQ1JZUFRJT04pOworICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiQWVzU2V0S2V5IGZhaWxlZCBpbiBteURlY3J5cHRWZXJpZnlDYlxuIik7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgICAgIGRlY0N0eC0+a2V5U2V0dXAgPSAxOworICAgIH0KKworICAgIC8qIGRlY3J5cHQgKi8KKyAgICByZXQgPSB3Y19BZXNDYmNEZWNyeXB0KCZkZWNDdHgtPmFlcywgZGVjT3V0LCBkZWNJbiwgZGVjU3opOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGlmICh3b2xmU1NMX0dldENpcGhlclR5cGUoc3NsKSA9PSBXT0xGU1NMX0FFQURfVFlQRSkgeworICAgICAgICAqcGFkU3ogPSB3b2xmU1NMX0dldEFlYWRNYWNTaXplKHNzbCk7CisgICAgICAgIHJldHVybiAwOyAvKiBobWFjLCBub3QgbmVlZGVkIGlmIGFlYWQgbW9kZSAqLworICAgIH0KKworICAgIGlmICh3b2xmU1NMX0dldENpcGhlclR5cGUoc3NsKSA9PSBXT0xGU1NMX0JMT0NLX1RZUEUpIHsKKyAgICAgICAgcGFkICAgICA9ICooZGVjT3V0ICsgZGVjU3ogLSAxKTsKKyAgICAgICAgcGFkQnl0ZSA9IDE7CisgICAgICAgIGlmICh3b2xmU1NMX0lzVExTdjFfMShzc2wpKQorICAgICAgICAgICAgaXZFeHRyYSA9IHdvbGZTU0xfR2V0Q2lwaGVyQmxvY2tTaXplKHNzbCk7CisgICAgfQorCisgICAgKnBhZFN6ICA9IHdvbGZTU0xfR2V0SG1hY1NpemUoc3NsKSArIHBhZCArIHBhZEJ5dGU7CisgICAgbWFjSW5TeiA9IGRlY1N6IC0gaXZFeHRyYSAtIGRpZ2VzdFN6IC0gcGFkIC0gcGFkQnl0ZTsKKworICAgIHdvbGZTU0xfU2V0VGxzSG1hY0lubmVyKHNzbCwgbXlJbm5lciwgbWFjSW5TeiwgbWFjQ29udGVudCwgbWFjVmVyaWZ5KTsKKworICAgIHJldCA9IHdjX0htYWNJbml0KCZobWFjLCBOVUxMLCBJTlZBTElEX0RFVklEKTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgcmV0ID0gd2NfSG1hY1NldEtleSgmaG1hYywgd29sZlNTTF9HZXRIbWFjVHlwZShzc2wpLAorICAgICAgICAgICAgICAgd29sZlNTTF9HZXRNYWNTZWNyZXQoc3NsLCBtYWNWZXJpZnkpLCBkaWdlc3RTeik7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIHJldCA9IHdjX0htYWNVcGRhdGUoJmhtYWMsIG15SW5uZXIsIHNpemVvZihteUlubmVyKSk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIHJldCA9IHdjX0htYWNVcGRhdGUoJmhtYWMsIGRlY091dCArIGl2RXh0cmEsIG1hY0luU3opOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICByZXQgPSB3Y19IbWFjRmluYWwoJmhtYWMsIHZlcmlmeSk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKFhNRU1DTVAodmVyaWZ5LCBkZWNPdXQgKyBkZWNTeiAtIGRpZ2VzdFN6IC0gcGFkIC0gcGFkQnl0ZSwKKyAgICAgICAgICAgICAgIGRpZ2VzdFN6KSAhPSAwKSB7CisgICAgICAgIHByaW50ZigibXlEZWNyeXB0VmVyaWZ5IHZlcmlmeSBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworI2lmIGRlZmluZWQoSEFWRV9FTkNSWVBUX1RIRU5fTUFDKQorCitzdGF0aWMgV0NfSU5MSU5FIGludCBteUVuY3J5cHRNYWNDYihXT0xGU1NMKiBzc2wsIHVuc2lnbmVkIGNoYXIqIG1hY091dCwKKyAgICAgICBpbnQgY29udGVudCwgaW50IG1hY1ZlcmlmeSwgdW5zaWduZWQgY2hhciogZW5jT3V0LAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGVuY0luLCB1bnNpZ25lZCBpbnQgZW5jU3osIHZvaWQqIGN0eCkKK3sKKyAgICBpbnQgIHJldDsKKyAgICBIbWFjIGhtYWM7CisgICAgQXRvbWljRW5jQ3R4KiBlbmNDdHggPSAoQXRvbWljRW5jQ3R4KiljdHg7CisgICAgYnl0ZSBteUlubmVyW1dPTEZTU0xfVExTX0hNQUNfSU5ORVJfU1pdOworICAgIGNvbnN0IGNoYXIqIHRsc1N0ciA9ICJUTFMiOworCisgICAgLyogZXhhbXBsZSBzdXBwb3J0cyAoZCl0bHMgYWVzICovCisgICAgaWYgKHdvbGZTU0xfR2V0QnVsa0NpcGhlcihzc2wpICE9IHdvbGZzc2xfYWVzKSB7CisgICAgICAgIHByaW50ZigibXlNYWNFbmNyeXB0Q2Igbm90IHVzaW5nIEFFU1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc3Ryc3RyKHdvbGZTU0xfZ2V0X3ZlcnNpb24oc3NsKSwgdGxzU3RyKSA9PSBOVUxMKSB7CisgICAgICAgIHByaW50ZigibXlNYWNFbmNyeXB0Q2Igbm90IHVzaW5nIChEKVRMU1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBlbmNyeXB0IHNldHVwIG9uIGZpcnN0IHRpbWUgKi8KKyAgICBpZiAoZW5jQ3R4LT5rZXlTZXR1cCA9PSAwKSB7CisgICAgICAgIGludCAgIGtleUxlbiA9IHdvbGZTU0xfR2V0S2V5U2l6ZShzc2wpOworICAgICAgICBjb25zdCBieXRlKiBrZXk7CisgICAgICAgIGNvbnN0IGJ5dGUqIGl2OworCisgICAgICAgIGlmICh3b2xmU1NMX0dldFNpZGUoc3NsKSA9PSBXT0xGU1NMX0NMSUVOVF9FTkQpIHsKKyAgICAgICAgICAgIGtleSA9IHdvbGZTU0xfR2V0Q2xpZW50V3JpdGVLZXkoc3NsKTsKKyAgICAgICAgICAgIGl2ICA9IHdvbGZTU0xfR2V0Q2xpZW50V3JpdGVJVihzc2wpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAga2V5ID0gd29sZlNTTF9HZXRTZXJ2ZXJXcml0ZUtleShzc2wpOworICAgICAgICAgICAgaXYgID0gd29sZlNTTF9HZXRTZXJ2ZXJXcml0ZUlWKHNzbCk7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSB3Y19BZXNTZXRLZXkoJmVuY0N0eC0+YWVzLCBrZXksIGtleUxlbiwgaXYsIEFFU19FTkNSWVBUSU9OKTsKKyAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAgICBwcmludGYoIkFlc1NldEtleSBmYWlsZWQgaW4gbXlNYWNFbmNyeXB0Q2JcbiIpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgICAgICBlbmNDdHgtPmtleVNldHVwID0gMTsKKyAgICB9CisKKyAgICAvKiBlbmNyeXB0ICovCisgICAgcmV0ID0gd2NfQWVzQ2JjRW5jcnlwdCgmZW5jQ3R4LT5hZXMsIGVuY091dCwgZW5jSW4sIGVuY1N6KTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAvKiBSZWNvbnN0cnVjdCByZWNvcmQgaGVhZGVyLiAqLworICAgIHdvbGZTU0xfU2V0VGxzSG1hY0lubmVyKHNzbCwgbXlJbm5lciwgZW5jU3osIGNvbnRlbnQsIG1hY1ZlcmlmeSk7CisKKyAgICByZXQgPSB3Y19IbWFjSW5pdCgmaG1hYywgTlVMTCwgSU5WQUxJRF9ERVZJRCk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIHJldCA9IHdjX0htYWNTZXRLZXkoJmhtYWMsIHdvbGZTU0xfR2V0SG1hY1R5cGUoc3NsKSwKKyAgICAgICAgICAgICAgIHdvbGZTU0xfR2V0TWFjU2VjcmV0KHNzbCwgbWFjVmVyaWZ5KSwgd29sZlNTTF9HZXRIbWFjU2l6ZShzc2wpKTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgcmV0ID0gd2NfSG1hY1VwZGF0ZSgmaG1hYywgbXlJbm5lciwgc2l6ZW9mKG15SW5uZXIpKTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgcmV0ID0gd2NfSG1hY1VwZGF0ZSgmaG1hYywgZW5jT3V0LCBlbmNTeik7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIHJldHVybiB3Y19IbWFjRmluYWwoJmhtYWMsIG1hY091dCk7Cit9CisKKworc3RhdGljIFdDX0lOTElORSBpbnQgbXlWZXJpZnlEZWNyeXB0Q2IoV09MRlNTTCogc3NsLAorICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlY091dCwgY29uc3QgdW5zaWduZWQgY2hhciogZGVjSW4sCisgICAgICAgdW5zaWduZWQgaW50IGRlY1N6LCBpbnQgY29udGVudCwgaW50IG1hY1ZlcmlmeSwKKyAgICAgICB1bnNpZ25lZCBpbnQqIHBhZFN6LCB2b2lkKiBjdHgpCit7CisgICAgQXRvbWljRGVjQ3R4KiBkZWNDdHggPSAoQXRvbWljRGVjQ3R4KiljdHg7CisgICAgaW50IHJldCAgICAgID0gMDsKKyAgICBpbnQgZGlnZXN0U3ogPSB3b2xmU1NMX0dldEhtYWNTaXplKHNzbCk7CisgICAgSG1hYyBobWFjOworICAgIGJ5dGUgbXlJbm5lcltXT0xGU1NMX1RMU19ITUFDX0lOTkVSX1NaXTsKKyAgICBieXRlIHZlcmlmeVtXQ19NQVhfRElHRVNUX1NJWkVdOworICAgIGNvbnN0IGNoYXIqIHRsc1N0ciA9ICJUTFMiOworCisgICAgLyogZXhhbXBsZSBzdXBwb3J0cyAoZCl0bHMgYWVzICovCisgICAgaWYgKHdvbGZTU0xfR2V0QnVsa0NpcGhlcihzc2wpICE9IHdvbGZzc2xfYWVzKSB7CisgICAgICAgIHByaW50ZigibXlNYWNFbmNyeXB0Q2Igbm90IHVzaW5nIEFFU1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc3Ryc3RyKHdvbGZTU0xfZ2V0X3ZlcnNpb24oc3NsKSwgdGxzU3RyKSA9PSBOVUxMKSB7CisgICAgICAgIHByaW50ZigibXlNYWNFbmNyeXB0Q2Igbm90IHVzaW5nIChEKVRMU1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBSZWNvbnN0cnVjdCByZWNvcmQgaGVhZGVyLiAqLworICAgIHdvbGZTU0xfU2V0VGxzSG1hY0lubmVyKHNzbCwgbXlJbm5lciwgZGVjU3osIGNvbnRlbnQsIG1hY1ZlcmlmeSk7CisKKyAgICByZXQgPSB3Y19IbWFjSW5pdCgmaG1hYywgTlVMTCwgSU5WQUxJRF9ERVZJRCk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIHJldCA9IHdjX0htYWNTZXRLZXkoJmhtYWMsIHdvbGZTU0xfR2V0SG1hY1R5cGUoc3NsKSwKKyAgICAgICAgICAgICAgIHdvbGZTU0xfR2V0TWFjU2VjcmV0KHNzbCwgbWFjVmVyaWZ5KSwgZGlnZXN0U3opOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICByZXQgPSB3Y19IbWFjVXBkYXRlKCZobWFjLCBteUlubmVyLCBzaXplb2YobXlJbm5lcikpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICByZXQgPSB3Y19IbWFjVXBkYXRlKCZobWFjLCBkZWNJbiwgZGVjU3opOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICByZXQgPSB3Y19IbWFjRmluYWwoJmhtYWMsIHZlcmlmeSk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKFhNRU1DTVAodmVyaWZ5LCBkZWNPdXQgKyBkZWNTeiwgZGlnZXN0U3opICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJteURlY3J5cHRWZXJpZnkgdmVyaWZ5IGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBkZWNyeXB0ICovCisgICAgaWYgKGRlY0N0eC0+a2V5U2V0dXAgPT0gMCkgeworICAgICAgICBpbnQgICBrZXlMZW4gPSB3b2xmU1NMX0dldEtleVNpemUoc3NsKTsKKyAgICAgICAgY29uc3QgYnl0ZSoga2V5OworICAgICAgICBjb25zdCBieXRlKiBpdjsKKworICAgICAgICAvKiBkZWNyeXB0IGlzIGZyb20gb3RoZXIgc2lkZSAocGVlcikgKi8KKyAgICAgICAgaWYgKHdvbGZTU0xfR2V0U2lkZShzc2wpID09IFdPTEZTU0xfU0VSVkVSX0VORCkgeworICAgICAgICAgICAga2V5ID0gd29sZlNTTF9HZXRDbGllbnRXcml0ZUtleShzc2wpOworICAgICAgICAgICAgaXYgID0gd29sZlNTTF9HZXRDbGllbnRXcml0ZUlWKHNzbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBrZXkgPSB3b2xmU1NMX0dldFNlcnZlcldyaXRlS2V5KHNzbCk7CisgICAgICAgICAgICBpdiAgPSB3b2xmU1NMX0dldFNlcnZlcldyaXRlSVYoc3NsKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IHdjX0Flc1NldEtleSgmZGVjQ3R4LT5hZXMsIGtleSwga2V5TGVuLCBpdiwgQUVTX0RFQ1JZUFRJT04pOworICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiQWVzU2V0S2V5IGZhaWxlZCBpbiBteURlY3J5cHRWZXJpZnlDYlxuIik7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgICAgIGRlY0N0eC0+a2V5U2V0dXAgPSAxOworICAgIH0KKworICAgIC8qIGRlY3J5cHQgKi8KKyAgICByZXQgPSB3Y19BZXNDYmNEZWNyeXB0KCZkZWNDdHgtPmFlcywgZGVjT3V0LCBkZWNJbiwgZGVjU3opOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgICpwYWRTeiAgPSAqKGRlY091dCArIGRlY1N6IC0gMSkgKyAxOworCisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisKK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBTZXR1cEF0b21pY1VzZXIoV09MRlNTTF9DVFgqIGN0eCwgV09MRlNTTCogc3NsKQoreworICAgIEF0b21pY0VuY0N0eCogZW5jQ3R4OworICAgIEF0b21pY0RlY0N0eCogZGVjQ3R4OworCisgICAgZW5jQ3R4ID0gKEF0b21pY0VuY0N0eCopbWFsbG9jKHNpemVvZihBdG9taWNFbmNDdHgpKTsKKyAgICBpZiAoZW5jQ3R4ID09IE5VTEwpCisgICAgICAgIGVycl9zeXNfd2l0aF9lcnJubygiQXRvbWljRW5jQ3R4IG1hbGxvYyBmYWlsZWQiKTsKKyAgICBYTUVNU0VUKGVuY0N0eCwgMCwgc2l6ZW9mKEF0b21pY0VuY0N0eCkpOworCisgICAgZGVjQ3R4ID0gKEF0b21pY0RlY0N0eCopbWFsbG9jKHNpemVvZihBdG9taWNEZWNDdHgpKTsKKyAgICBpZiAoZGVjQ3R4ID09IE5VTEwpIHsKKyAgICAgICAgZnJlZShlbmNDdHgpOworICAgICAgICBlcnJfc3lzX3dpdGhfZXJybm8oIkF0b21pY0RlY0N0eCBtYWxsb2MgZmFpbGVkIik7CisgICAgfQorICAgIFhNRU1TRVQoZGVjQ3R4LCAwLCBzaXplb2YoQXRvbWljRGVjQ3R4KSk7CisKKyAgICB3b2xmU1NMX0NUWF9TZXRNYWNFbmNyeXB0Q2IoY3R4LCBteU1hY0VuY3J5cHRDYik7CisgICAgd29sZlNTTF9TZXRNYWNFbmNyeXB0Q3R4KHNzbCwgZW5jQ3R4KTsKKworICAgIHdvbGZTU0xfQ1RYX1NldERlY3J5cHRWZXJpZnlDYihjdHgsIG15RGVjcnlwdFZlcmlmeUNiKTsKKyAgICB3b2xmU1NMX1NldERlY3J5cHRWZXJpZnlDdHgoc3NsLCBkZWNDdHgpOworCisjaWYgZGVmaW5lZChIQVZFX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgd29sZlNTTF9DVFhfU2V0RW5jcnlwdE1hY0NiKGN0eCwgbXlFbmNyeXB0TWFjQ2IpOworICAgIHdvbGZTU0xfU2V0RW5jcnlwdE1hY0N0eChzc2wsIGVuY0N0eCk7CisKKyAgICB3b2xmU1NMX0NUWF9TZXRWZXJpZnlEZWNyeXB0Q2IoY3R4LCBteVZlcmlmeURlY3J5cHRDYik7CisgICAgd29sZlNTTF9TZXRWZXJpZnlEZWNyeXB0Q3R4KHNzbCwgZGVjQ3R4KTsKKyNlbmRpZgorfQorCisKK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBGcmVlQXRvbWljVXNlcihXT0xGU1NMKiBzc2wpCit7CisgICAgQXRvbWljRW5jQ3R4KiBlbmNDdHggPSAoQXRvbWljRW5jQ3R4Kil3b2xmU1NMX0dldE1hY0VuY3J5cHRDdHgoc3NsKTsKKyAgICBBdG9taWNEZWNDdHgqIGRlY0N0eCA9IChBdG9taWNEZWNDdHgqKXdvbGZTU0xfR2V0RGVjcnlwdFZlcmlmeUN0eChzc2wpOworCisgICAgLyogRW5jcnlwdC1UaGVuLU1BQyBjYWxsYmFja3MgdXNlIHNhbWUgY29udGV4dHMuICovCisKKyAgICBmcmVlKGRlY0N0eCk7CisgICAgZnJlZShlbmNDdHgpOworfQorCisjZW5kaWYgLyogQVRPTUlDX1VTRVIgKi8KKworI2lmZGVmIFdPTEZTU0xfU1RBVElDX01FTU9SWQorc3RhdGljIFdDX0lOTElORSBpbnQgd29sZlNTTF9QcmludFN0YXRzKFdPTEZTU0xfTUVNX1NUQVRTKiBzdGF0cykKK3sKKyAgICB3b3JkMTYgaTsKKworICAgIGlmIChzdGF0cyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIHByaW50IHRvIHN0ZGVyciBzbyBpcyBvbiB0aGUgc2FtZSBwaXBlIGFzIFdPTEZTU0xfREVCVUcgKi8KKyAgICBmcHJpbnRmKHN0ZGVyciwgIlRvdGFsIG1hbGxvY3MgICA9ICVkXG4iLCBzdGF0cy0+dG90YWxBbGxvYyk7CisgICAgZnByaW50ZihzdGRlcnIsICJUb3RhbCBmcmVlcyAgICAgPSAlZFxuIiwgc3RhdHMtPnRvdGFsRnIpOworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VycmVudCBtYWxsb2NzID0gJWRcbiIsIHN0YXRzLT5jdXJBbGxvYyk7CisgICAgZnByaW50ZihzdGRlcnIsICJBdmFpbGFibGUgSU8gICAgPSAlZFxuIiwgc3RhdHMtPmF2YUlPKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk1heCBjb24uIGhhbmRzaGFrZXMgID0gJWRcbiIsIHN0YXRzLT5tYXhIYSk7CisgICAgZnByaW50ZihzdGRlcnIsICJNYXggY29uLiBJTyAgICAgICAgICA9ICVkXG4iLCBzdGF0cy0+bWF4SU8pOworICAgIGZwcmludGYoc3RkZXJyLCAiU3RhdGUgb2YgbWVtb3J5IGJsb2Nrczogc2l6ZSAgIDogYXZhaWxhYmxlIFxuIik7CisgICAgZm9yIChpID0gMDsgaSA8IFdPTEZNRU1fTUFYX0JVQ0tFVFM7IGkrKykgeworICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICAgICAgICAgICAgICAgICAgIDogJWRcdCA6ICVkXG4iLCBzdGF0cy0+YmxvY2tTeltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLT5hdmFCbG9ja1tpXSk7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogV09MRlNTTF9TVEFUSUNfTUVNT1JZICovCisKKyNpZmRlZiBIQVZFX1BLX0NBTExCQUNLUworCit0eXBlZGVmIHN0cnVjdCBQa0NiSW5mbyB7CisgICAgY29uc3QgY2hhciogb3VyS2V5OworI2lmZGVmIFRFU1RfUEtfUFJJVktFWQorICAgIHVuaW9uIHsKKyAgICAjaWZkZWYgSEFWRV9FQ0MKKyAgICAgICAgZWNjX2tleSBlY2M7CisgICAgI2VuZGlmCisgICAgI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorICAgICAgICBjdXJ2ZTI1NTE5X2tleSBjdXJ2ZTsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgSEFWRV9DVVJWRTQ0OAorICAgICAgICBjdXJ2ZTQ0OF9rZXkgY3VydmU7CisgICAgI2VuZGlmCisgICAgfSBrZXlHZW47CisjZW5kaWYKK30gUGtDYkluZm87CisKKyNpZiBkZWZpbmVkKERFQlVHX1BLX0NCKSB8fCBkZWZpbmVkKFRFU1RfUEtfUFJJVktFWSkKKyAgICAjZGVmaW5lIFdPTEZTU0xfUEtNU0coX2ZfLCAuLi4pIHByaW50ZihfZl8sICMjX19WQV9BUkdTX18pCisjZWxzZQorICAgICNkZWZpbmUgV09MRlNTTF9QS01TRyhfZl8sIC4uLikKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9FQ0MKKworc3RhdGljIFdDX0lOTElORSBpbnQgbXlFY2NLZXlHZW4oV09MRlNTTCogc3NsLCBlY2Nfa2V5KiBrZXksIHdvcmQzMiBrZXlTeiwKKyAgICBpbnQgZWNjX2N1cnZlLCB2b2lkKiBjdHgpCit7CisgICAgaW50ICAgICAgIHJldDsKKyAgICBXQ19STkcgICAgcm5nOworICAgIFBrQ2JJbmZvKiBjYkluZm8gPSAoUGtDYkluZm8qKWN0eDsKKyAgICBlY2Nfa2V5KiAgbmV3X2tleTsKKyNpZmRlZiBURVNUX1BLX1BSSVZLRVkKKyAgICBieXRlIHF4W01BWF9FQ0NfQllURVNdLCBxeVtNQVhfRUNDX0JZVEVTXTsKKyAgICB3b3JkMzIgcXhMZW4gPSBzaXplb2YocXgpLCBxeUxlbiA9IHNpemVvZihxeSk7CisKKyAgICBuZXdfa2V5ID0gJmNiSW5mby0+a2V5R2VuLmVjYzsKKyNlbHNlCisgICAgbmV3X2tleSA9IGtleTsKKyNlbmRpZgorCisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWNiSW5mbzsKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIEVDQyBLZXlHZW46IGtleVN6ICVkLCBDdXJ2ZSBJRCAlZFxuIiwga2V5U3osIGVjY19jdXJ2ZSk7CisKKyAgICByZXQgPSB3Y19Jbml0Um5nKCZybmcpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9IHdjX2VjY19pbml0KG5ld19rZXkpOworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAvKiBjcmVhdGUgbmV3IGtleSAqLworICAgICAgICByZXQgPSB3Y19lY2NfbWFrZV9rZXlfZXgoJnJuZywga2V5U3osIG5ld19rZXksIGVjY19jdXJ2ZSk7CisKKyAgICAjaWZkZWYgVEVTVF9QS19QUklWS0VZCisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgLyogZXh0cmFjdCBwdWJsaWMgcG9ydGlvbiBmcm9tIG5ldyBrZXkgaW50byBga2V5YCBhcmcgKi8KKyAgICAgICAgICAgIHJldCA9IHdjX2VjY19leHBvcnRfcHVibGljX3JhdyhuZXdfa2V5LCBxeCwgJnF4TGVuLCBxeSwgJnF5TGVuKTsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgICAgIC8qIGxvYWQgcHVibGljIHBvcnRpb24gb25seSBpbnRvIGtleSAqLworICAgICAgICAgICAgICAgIHJldCA9IHdjX2VjY19pbXBvcnRfdW5zaWduZWQoa2V5LCBxeCwgcXksIE5VTEwsIGVjY19jdXJ2ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAodm9pZClxeExlbjsKKyAgICAgICAgICAgICh2b2lkKXF5TGVuOworICAgICAgICB9CisgICAgI2VuZGlmCisgICAgfQorCisgICAgV09MRlNTTF9QS01TRygiUEsgRUNDIEtleUdlbjogcmV0ICVkXG4iLCByZXQpOworCisgICAgd2NfRnJlZVJuZygmcm5nKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBXQ19JTkxJTkUgaW50IG15RWNjU2lnbihXT0xGU1NMKiBzc2wsIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5TeiwKKyAgICAgICAgYnl0ZSogb3V0LCB3b3JkMzIqIG91dFN6LCBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwgdm9pZCogY3R4KQoreworICAgIGludCAgICAgICByZXQ7CisgICAgV0NfUk5HICAgIHJuZzsKKyAgICB3b3JkMzIgICAgaWR4ID0gMDsKKyAgICBlY2Nfa2V5ICAgbXlLZXk7CisgICAgYnl0ZSogICAgIGtleUJ1ZiA9IChieXRlKilrZXk7CisgICAgUGtDYkluZm8qIGNiSW5mbyA9IChQa0NiSW5mbyopY3R4OworCisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWNiSW5mbzsKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIEVDQyBTaWduOiBpblN6ICVkLCBrZXlTeiAlZFxuIiwgaW5Teiwga2V5U3opOworCisjaWZkZWYgVEVTVF9QS19QUklWS0VZCisgICAgcmV0ID0gbG9hZF9rZXlfZmlsZShjYkluZm8tPm91cktleSwgJmtleUJ1ZiwgJmtleVN6KTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisjZW5kaWYKKworICAgIHJldCA9IHdjX0luaXRSbmcoJnJuZyk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0gd2NfZWNjX2luaXQoJm15S2V5KTsKKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgcmV0ID0gd2NfRWNjUHJpdmF0ZUtleURlY29kZShrZXlCdWYsICZpZHgsICZteUtleSwga2V5U3opOworICAgICAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgICAgIFdPTEZTU0xfUEtNU0coIlBLIEVDQyBTaWduOiBDdXJ2ZSBJRCAlZFxuIiwgbXlLZXkuZHAtPmlkKTsKKyAgICAgICAgICAgIHJldCA9IHdjX2VjY19zaWduX2hhc2goaW4sIGluU3osIG91dCwgb3V0U3osICZybmcsICZteUtleSk7CisgICAgICAgIH0KKyAgICAgICAgd2NfZWNjX2ZyZWUoJm15S2V5KTsKKyAgICB9CisgICAgd2NfRnJlZVJuZygmcm5nKTsKKworI2lmZGVmIFRFU1RfUEtfUFJJVktFWQorICAgIGZyZWUoa2V5QnVmKTsKKyNlbmRpZgorCisgICAgV09MRlNTTF9QS01TRygiUEsgRUNDIFNpZ246IHJldCAlZCBvdXRTeiAlZFxuIiwgcmV0LCAqb3V0U3opOworCisgICAgcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgV0NfSU5MSU5FIGludCBteUVjY1ZlcmlmeShXT0xGU1NMKiBzc2wsIGNvbnN0IGJ5dGUqIHNpZywgd29yZDMyIHNpZ1N6LAorICAgICAgICBjb25zdCBieXRlKiBoYXNoLCB3b3JkMzIgaGFzaFN6LCBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwKKyAgICAgICAgaW50KiByZXN1bHQsIHZvaWQqIGN0eCkKK3sKKyAgICBpbnQgICAgICAgcmV0OworICAgIHdvcmQzMiAgICBpZHggPSAwOworICAgIGVjY19rZXkgICBteUtleTsKKyAgICBQa0NiSW5mbyogY2JJbmZvID0gKFBrQ2JJbmZvKiljdHg7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpY2JJbmZvOworCisgICAgV09MRlNTTF9QS01TRygiUEsgRUNDIFZlcmlmeTogc2lnU3ogJWQsIGhhc2hTeiAlZCwga2V5U3ogJWRcbiIsIHNpZ1N6LCBoYXNoU3osIGtleVN6KTsKKworICAgIHJldCA9IHdjX2VjY19pbml0KCZteUtleSk7CisgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgIHJldCA9IHdjX0VjY1B1YmxpY0tleURlY29kZShrZXksICZpZHgsICZteUtleSwga2V5U3opOworICAgICAgICBpZiAocmV0ID09IDApCisgICAgICAgICAgICByZXQgPSB3Y19lY2NfdmVyaWZ5X2hhc2goc2lnLCBzaWdTeiwgaGFzaCwgaGFzaFN6LCByZXN1bHQsICZteUtleSk7CisgICAgICAgIHdjX2VjY19mcmVlKCZteUtleSk7CisgICAgfQorCisgICAgV09MRlNTTF9QS01TRygiUEsgRUNDIFZlcmlmeTogcmV0ICVkLCByZXN1bHQgJWRcbiIsIHJldCwgKnJlc3VsdCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgV0NfSU5MSU5FIGludCBteUVjY1NoYXJlZFNlY3JldChXT0xGU1NMKiBzc2wsIGVjY19rZXkqIG90aGVyS2V5LAorICAgICAgICB1bnNpZ25lZCBjaGFyKiBwdWJLZXlEZXIsIHVuc2lnbmVkIGludCogcHViS2V5U3osCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIG91dCwgdW5zaWduZWQgaW50KiBvdXRsZW4sCisgICAgICAgIGludCBzaWRlLCB2b2lkKiBjdHgpCit7CisgICAgaW50ICAgICAgIHJldDsKKyAgICBlY2Nfa2V5KiAgcHJpdktleSA9IE5VTEw7CisgICAgZWNjX2tleSogIHB1YktleSA9IE5VTEw7CisgICAgZWNjX2tleSAgIHRtcEtleTsKKyAgICBQa0NiSW5mbyogY2JJbmZvID0gKFBrQ2JJbmZvKiljdHg7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpY2JJbmZvOworCisgICAgV09MRlNTTF9QS01TRygiUEsgRUNDIFBNUzogU2lkZSAlcywgUGVlciBDdXJ2ZSAlZFxuIiwKKyAgICAgICAgc2lkZSA9PSBXT0xGU1NMX0NMSUVOVF9FTkQgPyAiY2xpZW50IiA6ICJzZXJ2ZXIiLCBvdGhlcktleS0+ZHAtPmlkKTsKKworICAgIHJldCA9IHdjX2VjY19pbml0KCZ0bXBLZXkpOworICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8qIGZvciBjbGllbnQ6IGNyZWF0ZSBhbmQgZXhwb3J0IHB1YmxpYyBrZXkgKi8KKyAgICBpZiAoc2lkZSA9PSBXT0xGU1NMX0NMSUVOVF9FTkQpIHsKKyAgICAgICAgV0NfUk5HIHJuZzsKKworICAgICAgICBwcml2S2V5ID0gJnRtcEtleTsKKyAgICAgICAgcHViS2V5ID0gb3RoZXJLZXk7CisKKyAgICAgICAgcmV0ID0gd2NfSW5pdFJuZygmcm5nKTsKKyAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICByZXQgPSB3Y19lY2NfbWFrZV9rZXlfZXgoJnJuZywgMCwgcHJpdktleSwgb3RoZXJLZXktPmRwLT5pZCk7CisgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICBpZiAocmV0ID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgIHJldCA9IHdjX0FzeW5jV2FpdChyZXQsICZwcml2S2V5LT5hc3luY0RldiwgV0NfQVNZTkNfRkxBR19OT05FKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBpZiAocmV0ID09IDApCisgICAgICAgICAgICAgICAgcmV0ID0gd2NfZWNjX2V4cG9ydF94OTYzKHByaXZLZXksIHB1YktleURlciwgcHViS2V5U3opOworICAgICAgICAgICAgd2NfRnJlZVJuZygmcm5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGZvciBzZXJ2ZXI6IGltcG9ydCBwdWJsaWMga2V5ICovCisgICAgZWxzZSBpZiAoc2lkZSA9PSBXT0xGU1NMX1NFUlZFUl9FTkQpIHsKKyAgICAjaWZkZWYgVEVTVF9QS19QUklWS0VZCisgICAgICAgIHByaXZLZXkgPSAmY2JJbmZvLT5rZXlHZW4uZWNjOworICAgICNlbHNlCisgICAgICAgIHByaXZLZXkgPSBvdGhlcktleTsKKyAgICAjZW5kaWYKKyAgICAgICAgcHViS2V5ID0gJnRtcEtleTsKKworICAgICAgICByZXQgPSB3Y19lY2NfaW1wb3J0X3g5NjNfZXgocHViS2V5RGVyLCAqcHViS2V5U3osIHB1YktleSwKKyAgICAgICAgICAgIG90aGVyS2V5LT5kcC0+aWQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0ID0gQkFEX0ZVTkNfQVJHOworICAgIH0KKworI2lmIGRlZmluZWQoRUNDX1RJTUlOR19SRVNJU1RBTlQpICYmICFkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkKKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgcmV0ID0gd2NfZWNjX3NldF9ybmcocHJpdktleSwgd29sZlNTTF9HZXRSTkcoc3NsKSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBnZW5lcmF0ZSBzaGFyZWQgc2VjcmV0IGFuZCByZXR1cm4gaXQgKi8KKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgcmV0ID0gd2NfZWNjX3NoYXJlZF9zZWNyZXQocHJpdktleSwgcHViS2V5LCBvdXQsIG91dGxlbik7CisKKyAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICBpZiAocmV0ID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgcmV0ID0gd2NfQXN5bmNXYWl0KHJldCwgJnByaXZLZXktPmFzeW5jRGV2LCBXQ19BU1lOQ19GTEFHX0NBTExfQUdBSU4pOworICAgICAgICB9CisgICAgI2VuZGlmCisgICAgfQorCisjaWZkZWYgVEVTVF9QS19QUklWS0VZCisgICAgaWYgKHNpZGUgPT0gV09MRlNTTF9TRVJWRVJfRU5EKSB7CisgICAgICAgIHdjX2VjY19mcmVlKCZjYkluZm8tPmtleUdlbi5lY2MpOworICAgIH0KKyNlbmRpZgorCisgICAgd2NfZWNjX2ZyZWUoJnRtcEtleSk7CisKKyAgICBXT0xGU1NMX1BLTVNHKCJQSyBFQ0MgUE1TOiByZXQgJWQsIFB1YktleVN6ICVkLCBPdXRMZW4gJWRcbiIsIHJldCwgKnB1YktleVN6LCAqb3V0bGVuKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAvKiBIQVZFX0VDQyAqLworCisjaWZkZWYgSEFWRV9FRDI1NTE5CitzdGF0aWMgV0NfSU5MSU5FIGludCBteUVkMjU1MTlTaWduKFdPTEZTU0wqIHNzbCwgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpblN6LAorICAgICAgICBieXRlKiBvdXQsIHdvcmQzMiogb3V0U3osIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGtleVN6LCB2b2lkKiBjdHgpCit7CisgICAgaW50ICAgICAgICAgcmV0OworICAgIHdvcmQzMiAgICAgIGlkeCA9IDA7CisgICAgZWQyNTUxOV9rZXkgbXlLZXk7CisgICAgYnl0ZSogICAgICAga2V5QnVmID0gKGJ5dGUqKWtleTsKKyAgICBQa0NiSW5mbyogICBjYkluZm8gPSAoUGtDYkluZm8qKWN0eDsKKworICAgICh2b2lkKXNzbDsKKyAgICAodm9pZCljYkluZm87CisKKyAgICBXT0xGU1NMX1BLTVNHKCJQSyAyNTUxOSBTaWduOiBpblN6ICVkLCBrZXlTeiAlZFxuIiwgaW5Teiwga2V5U3opOworCisjaWZkZWYgVEVTVF9QS19QUklWS0VZCisgICAgcmV0ID0gbG9hZF9rZXlfZmlsZShjYkluZm8tPm91cktleSwgJmtleUJ1ZiwgJmtleVN6KTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisjZW5kaWYKKworICAgIHJldCA9IHdjX2VkMjU1MTlfaW5pdCgmbXlLZXkpOworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXQgPSB3Y19FZDI1NTE5UHJpdmF0ZUtleURlY29kZShrZXlCdWYsICZpZHgsICZteUtleSwga2V5U3opOworICAgICAgICBpZiAocmV0ID09IDApCisgICAgICAgICAgICByZXQgPSB3Y19lZDI1NTE5X3NpZ25fbXNnKGluLCBpblN6LCBvdXQsIG91dFN6LCAmbXlLZXkpOworICAgICAgICB3Y19lZDI1NTE5X2ZyZWUoJm15S2V5KTsKKyAgICB9CisKKyNpZmRlZiBURVNUX1BLX1BSSVZLRVkKKyAgICBmcmVlKGtleUJ1Zik7CisjZW5kaWYKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIDI1NTE5IFNpZ246IHJldCAlZCwgb3V0U3ogJWRcbiIsIHJldCwgKm91dFN6KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKworc3RhdGljIFdDX0lOTElORSBpbnQgbXlFZDI1NTE5VmVyaWZ5KFdPTEZTU0wqIHNzbCwgY29uc3QgYnl0ZSogc2lnLCB3b3JkMzIgc2lnU3osCisgICAgICAgIGNvbnN0IGJ5dGUqIG1zZywgd29yZDMyIG1zZ1N6LCBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwKKyAgICAgICAgaW50KiByZXN1bHQsIHZvaWQqIGN0eCkKK3sKKyAgICBpbnQgICAgICAgICByZXQ7CisgICAgZWQyNTUxOV9rZXkgbXlLZXk7CisgICAgUGtDYkluZm8qIGNiSW5mbyA9IChQa0NiSW5mbyopY3R4OworCisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWNiSW5mbzsKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIDI1NTE5IFZlcmlmeTogc2lnU3ogJWQsIG1zZ1N6ICVkLCBrZXlTeiAlZFxuIiwgc2lnU3osIG1zZ1N6LCBrZXlTeik7CisKKyAgICByZXQgPSB3Y19lZDI1NTE5X2luaXQoJm15S2V5KTsKKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgcmV0ID0gd2NfZWQyNTUxOV9pbXBvcnRfcHVibGljKGtleSwga2V5U3osICZteUtleSk7CisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgcmV0ID0gd2NfZWQyNTUxOV92ZXJpZnlfbXNnKHNpZywgc2lnU3osIG1zZywgbXNnU3osIHJlc3VsdCwgJm15S2V5KTsKKyAgICAgICAgfQorICAgICAgICB3Y19lZDI1NTE5X2ZyZWUoJm15S2V5KTsKKyAgICB9CisKKyAgICBXT0xGU1NMX1BLTVNHKCJQSyAyNTUxOSBWZXJpZnk6IHJldCAlZCwgcmVzdWx0ICVkXG4iLCByZXQsICpyZXN1bHQpOworCisgICAgcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBIQVZFX0VEMjU1MTkgKi8KKworI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorc3RhdGljIFdDX0lOTElORSBpbnQgbXlYMjU1MTlLZXlHZW4oV09MRlNTTCogc3NsLCBjdXJ2ZTI1NTE5X2tleSoga2V5LAorICAgIHVuc2lnbmVkIGludCBrZXlTeiwgdm9pZCogY3R4KQoreworICAgIGludCAgICAgICByZXQ7CisgICAgV0NfUk5HICAgIHJuZzsKKyAgICBQa0NiSW5mbyogY2JJbmZvID0gKFBrQ2JJbmZvKiljdHg7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpY2JJbmZvOworCisgICAgV09MRlNTTF9QS01TRygiUEsgMjU1MTkgS2V5R2VuOiBrZXlTeiAlZFxuIiwga2V5U3opOworCisgICAgcmV0ID0gd2NfSW5pdFJuZygmcm5nKTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPSB3Y19jdXJ2ZTI1NTE5X21ha2Vfa2V5KCZybmcsIGtleVN6LCBrZXkpOworCisgICAgd2NfRnJlZVJuZygmcm5nKTsKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIDI1NTE5IEtleUdlbjogcmV0ICVkXG4iLCByZXQpOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIFdDX0lOTElORSBpbnQgbXlYMjU1MTlTaGFyZWRTZWNyZXQoV09MRlNTTCogc3NsLCBjdXJ2ZTI1NTE5X2tleSogb3RoZXJLZXksCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIHB1YktleURlciwgdW5zaWduZWQgaW50KiBwdWJLZXlTeiwKKyAgICAgICAgdW5zaWduZWQgY2hhciogb3V0LCB1bnNpZ25lZCBpbnQqIG91dGxlbiwKKyAgICAgICAgaW50IHNpZGUsIHZvaWQqIGN0eCkKK3sKKyAgICBpbnQgICAgICByZXQ7CisgICAgY3VydmUyNTUxOV9rZXkqIHByaXZLZXkgPSBOVUxMOworICAgIGN1cnZlMjU1MTlfa2V5KiBwdWJLZXkgPSBOVUxMOworICAgIGN1cnZlMjU1MTlfa2V5ICB0bXBLZXk7CisgICAgUGtDYkluZm8qIGNiSW5mbyA9IChQa0NiSW5mbyopY3R4OworCisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWNiSW5mbzsKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIDI1NTE5IFBNUzogc2lkZSAlc1xuIiwKKyAgICAgICAgc2lkZSA9PSBXT0xGU1NMX0NMSUVOVF9FTkQgPyAiY2xpZW50IiA6ICJzZXJ2ZXIiKTsKKworICAgIHJldCA9IHdjX2N1cnZlMjU1MTlfaW5pdCgmdG1wS2V5KTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvKiBmb3IgY2xpZW50OiBjcmVhdGUgYW5kIGV4cG9ydCBwdWJsaWMga2V5ICovCisgICAgaWYgKHNpZGUgPT0gV09MRlNTTF9DTElFTlRfRU5EKSB7CisgICAgICAgIFdDX1JORyBybmc7CisKKyAgICAgICAgcHJpdktleSA9ICZ0bXBLZXk7CisgICAgICAgIHB1YktleSA9IG90aGVyS2V5OworCisgICAgICAgIHJldCA9IHdjX0luaXRSbmcoJnJuZyk7CisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgcmV0ID0gd2NfY3VydmUyNTUxOV9tYWtlX2tleSgmcm5nLCBDVVJWRTI1NTE5X0tFWVNJWkUsIHByaXZLZXkpOworICAgICAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gd2NfY3VydmUyNTUxOV9leHBvcnRfcHVibGljX2V4KHByaXZLZXksIHB1YktleURlciwKKyAgICAgICAgICAgICAgICAgICAgcHViS2V5U3osIEVDMjU1MTlfTElUVExFX0VORElBTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3Y19GcmVlUm5nKCZybmcpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogZm9yIHNlcnZlcjogaW1wb3J0IHB1YmxpYyBrZXkgKi8KKyAgICBlbHNlIGlmIChzaWRlID09IFdPTEZTU0xfU0VSVkVSX0VORCkgeworICAgICAgICBwcml2S2V5ID0gb3RoZXJLZXk7CisgICAgICAgIHB1YktleSA9ICZ0bXBLZXk7CisKKyAgICAgICAgcmV0ID0gd2NfY3VydmUyNTUxOV9pbXBvcnRfcHVibGljX2V4KHB1YktleURlciwgKnB1YktleVN6LCBwdWJLZXksCisgICAgICAgICAgICBFQzI1NTE5X0xJVFRMRV9FTkRJQU4pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0ID0gQkFEX0ZVTkNfQVJHOworICAgIH0KKworICAgIC8qIGdlbmVyYXRlIHNoYXJlZCBzZWNyZXQgYW5kIHJldHVybiBpdCAqLworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXQgPSB3Y19jdXJ2ZTI1NTE5X3NoYXJlZF9zZWNyZXRfZXgocHJpdktleSwgcHViS2V5LCBvdXQsIG91dGxlbiwKKyAgICAgICAgICAgIEVDMjU1MTlfTElUVExFX0VORElBTik7CisgICAgfQorCisgICAgd2NfY3VydmUyNTUxOV9mcmVlKCZ0bXBLZXkpOworCisgICAgV09MRlNTTF9QS01TRygiUEsgMjU1MTkgUE1TOiByZXQgJWQsIHB1YktleVN6ICVkLCBvdXRMZW4gJWRcbiIsCisgICAgICAgIHJldCwgKnB1YktleVN6LCAqb3V0bGVuKTsKKworICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogSEFWRV9DVVJWRTI1NTE5ICovCisKKyNpZmRlZiBIQVZFX0VENDQ4CitzdGF0aWMgV0NfSU5MSU5FIGludCBteUVkNDQ4U2lnbihXT0xGU1NMKiBzc2wsIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5TeiwKKyAgICAgICAgYnl0ZSogb3V0LCB3b3JkMzIqIG91dFN6LCBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwgdm9pZCogY3R4KQoreworICAgIGludCAgICAgICAgIHJldDsKKyAgICB3b3JkMzIgICAgICBpZHggPSAwOworICAgIGVkNDQ4X2tleSAgIG15S2V5OworICAgIGJ5dGUqICAgICAgIGtleUJ1ZiA9IChieXRlKilrZXk7CisgICAgUGtDYkluZm8qICAgY2JJbmZvID0gKFBrQ2JJbmZvKiljdHg7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpY2JJbmZvOworCisgICAgV09MRlNTTF9QS01TRygiUEsgNDQ4IFNpZ246IGluU3ogJWQsIGtleVN6ICVkXG4iLCBpblN6LCBrZXlTeik7CisKKyNpZmRlZiBURVNUX1BLX1BSSVZLRVkKKyAgICByZXQgPSBsb2FkX2tleV9maWxlKGNiSW5mby0+b3VyS2V5LCAma2V5QnVmLCAma2V5U3opOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyNlbmRpZgorCisgICAgcmV0ID0gd2NfZWQ0NDhfaW5pdCgmbXlLZXkpOworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXQgPSB3Y19FZDQ0OFByaXZhdGVLZXlEZWNvZGUoa2V5QnVmLCAmaWR4LCAmbXlLZXksIGtleVN6KTsKKyAgICAgICAgaWYgKHJldCA9PSAwKQorICAgICAgICAgICAgcmV0ID0gd2NfZWQ0NDhfc2lnbl9tc2coaW4sIGluU3osIG91dCwgb3V0U3osICZteUtleSwgTlVMTCwgMCk7CisgICAgICAgIHdjX2VkNDQ4X2ZyZWUoJm15S2V5KTsKKyAgICB9CisKKyNpZmRlZiBURVNUX1BLX1BSSVZLRVkKKyAgICBmcmVlKGtleUJ1Zik7CisjZW5kaWYKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIDQ0OCBTaWduOiByZXQgJWQsIG91dFN6ICVkXG4iLCByZXQsICpvdXRTeik7CisKKyAgICByZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBXQ19JTkxJTkUgaW50IG15RWQ0NDhWZXJpZnkoV09MRlNTTCogc3NsLCBjb25zdCBieXRlKiBzaWcsIHdvcmQzMiBzaWdTeiwKKyAgICAgICAgY29uc3QgYnl0ZSogbXNnLCB3b3JkMzIgbXNnU3osIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGtleVN6LAorICAgICAgICBpbnQqIHJlc3VsdCwgdm9pZCogY3R4KQoreworICAgIGludCAgICAgICAgIHJldDsKKyAgICBlZDQ0OF9rZXkgICBteUtleTsKKyAgICBQa0NiSW5mbyogICBjYkluZm8gPSAoUGtDYkluZm8qKWN0eDsKKworICAgICh2b2lkKXNzbDsKKyAgICAodm9pZCljYkluZm87CisKKyAgICBXT0xGU1NMX1BLTVNHKCJQSyA0NDggVmVyaWZ5OiBzaWdTeiAlZCwgbXNnU3ogJWQsIGtleVN6ICVkXG4iLCBzaWdTeiwgbXNnU3osCisgICAgICAgICAgICAgICAgICBrZXlTeik7CisKKyAgICByZXQgPSB3Y19lZDQ0OF9pbml0KCZteUtleSk7CisgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgIHJldCA9IHdjX2VkNDQ4X2ltcG9ydF9wdWJsaWMoa2V5LCBrZXlTeiwgJm15S2V5KTsKKyAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICByZXQgPSB3Y19lZDQ0OF92ZXJpZnlfbXNnKHNpZywgc2lnU3osIG1zZywgbXNnU3osIHJlc3VsdCwgJm15S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgfQorICAgICAgICB3Y19lZDQ0OF9mcmVlKCZteUtleSk7CisgICAgfQorCisgICAgV09MRlNTTF9QS01TRygiUEsgNDQ4IFZlcmlmeTogcmV0ICVkLCByZXN1bHQgJWRcbiIsIHJldCwgKnJlc3VsdCk7CisKKyAgICByZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIEhBVkVfRUQ0NDggKi8KKworI2lmZGVmIEhBVkVfQ1VSVkU0NDgKK3N0YXRpYyBXQ19JTkxJTkUgaW50IG15WDQ0OEtleUdlbihXT0xGU1NMKiBzc2wsIGN1cnZlNDQ4X2tleSoga2V5LAorICAgIHVuc2lnbmVkIGludCBrZXlTeiwgdm9pZCogY3R4KQoreworICAgIGludCAgICAgICByZXQ7CisgICAgV0NfUk5HICAgIHJuZzsKKyAgICBQa0NiSW5mbyogY2JJbmZvID0gKFBrQ2JJbmZvKiljdHg7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpY2JJbmZvOworCisgICAgV09MRlNTTF9QS01TRygiUEsgNDQ4IEtleUdlbjoga2V5U3ogJWRcbiIsIGtleVN6KTsKKworICAgIHJldCA9IHdjX0luaXRSbmcoJnJuZyk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0gd2NfY3VydmU0NDhfbWFrZV9rZXkoJnJuZywga2V5U3osIGtleSk7CisKKyAgICB3Y19GcmVlUm5nKCZybmcpOworCisgICAgV09MRlNTTF9QS01TRygiUEsgNDQ4IEtleUdlbjogcmV0ICVkXG4iLCByZXQpOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIFdDX0lOTElORSBpbnQgbXlYNDQ4U2hhcmVkU2VjcmV0KFdPTEZTU0wqIHNzbCwgY3VydmU0NDhfa2V5KiBvdGhlcktleSwKKyAgICAgICAgdW5zaWduZWQgY2hhciogcHViS2V5RGVyLCB1bnNpZ25lZCBpbnQqIHB1YktleVN6LAorICAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXQsIHVuc2lnbmVkIGludCogb3V0bGVuLAorICAgICAgICBpbnQgc2lkZSwgdm9pZCogY3R4KQoreworICAgIGludCAgICAgICAgICAgcmV0OworICAgIGN1cnZlNDQ4X2tleSogcHJpdktleSA9IE5VTEw7CisgICAgY3VydmU0NDhfa2V5KiBwdWJLZXkgPSBOVUxMOworICAgIGN1cnZlNDQ4X2tleSAgdG1wS2V5OworICAgIFBrQ2JJbmZvKiAgICAgY2JJbmZvID0gKFBrQ2JJbmZvKiljdHg7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpY2JJbmZvOworCisgICAgV09MRlNTTF9QS01TRygiUEsgNDQ4IFBNUzogc2lkZSAlc1xuIiwKKyAgICAgICAgc2lkZSA9PSBXT0xGU1NMX0NMSUVOVF9FTkQgPyAiY2xpZW50IiA6ICJzZXJ2ZXIiKTsKKworICAgIHJldCA9IHdjX2N1cnZlNDQ4X2luaXQoJnRtcEtleSk7CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgLyogZm9yIGNsaWVudDogY3JlYXRlIGFuZCBleHBvcnQgcHVibGljIGtleSAqLworICAgIGlmIChzaWRlID09IFdPTEZTU0xfQ0xJRU5UX0VORCkgeworICAgICAgICBXQ19STkcgcm5nOworCisgICAgICAgIHByaXZLZXkgPSAmdG1wS2V5OworICAgICAgICBwdWJLZXkgPSBvdGhlcktleTsKKworICAgICAgICByZXQgPSB3Y19Jbml0Um5nKCZybmcpOworICAgICAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgICAgIHJldCA9IHdjX2N1cnZlNDQ4X21ha2Vfa2V5KCZybmcsIENVUlZFNDQ4X0tFWV9TSVpFLCBwcml2S2V5KTsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldCA9IHdjX2N1cnZlNDQ4X2V4cG9ydF9wdWJsaWNfZXgocHJpdktleSwgcHViS2V5RGVyLAorICAgICAgICAgICAgICAgICAgICBwdWJLZXlTeiwgRUM0NDhfTElUVExFX0VORElBTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3Y19GcmVlUm5nKCZybmcpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogZm9yIHNlcnZlcjogaW1wb3J0IHB1YmxpYyBrZXkgKi8KKyAgICBlbHNlIGlmIChzaWRlID09IFdPTEZTU0xfU0VSVkVSX0VORCkgeworICAgICAgICBwcml2S2V5ID0gb3RoZXJLZXk7CisgICAgICAgIHB1YktleSA9ICZ0bXBLZXk7CisKKyAgICAgICAgcmV0ID0gd2NfY3VydmU0NDhfaW1wb3J0X3B1YmxpY19leChwdWJLZXlEZXIsICpwdWJLZXlTeiwgcHViS2V5LAorICAgICAgICAgICAgRUM0NDhfTElUVExFX0VORElBTik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXQgPSBCQURfRlVOQ19BUkc7CisgICAgfQorCisgICAgLyogZ2VuZXJhdGUgc2hhcmVkIHNlY3JldCBhbmQgcmV0dXJuIGl0ICovCisgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgIHJldCA9IHdjX2N1cnZlNDQ4X3NoYXJlZF9zZWNyZXRfZXgocHJpdktleSwgcHViS2V5LCBvdXQsIG91dGxlbiwKKyAgICAgICAgICAgIEVDNDQ4X0xJVFRMRV9FTkRJQU4pOworICAgIH0KKworICAgIHdjX2N1cnZlNDQ4X2ZyZWUoJnRtcEtleSk7CisKKyAgICBXT0xGU1NMX1BLTVNHKCJQSyA0NDggUE1TOiByZXQgJWQsIHB1YktleVN6ICVkLCBvdXRMZW4gJWRcbiIsCisgICAgICAgIHJldCwgKnB1YktleVN6LCAqb3V0bGVuKTsKKworICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogSEFWRV9DVVJWRTQ0OCAqLworCisjaWZuZGVmIE5PX0RICitzdGF0aWMgV0NfSU5MSU5FIGludCBteURoQ2FsbGJhY2soV09MRlNTTCogc3NsLCBzdHJ1Y3QgRGhLZXkqIGtleSwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcHJpdiwgdW5zaWduZWQgaW50IHByaXZTeiwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcHViS2V5RGVyLCB1bnNpZ25lZCBpbnQgcHViS2V5U3osCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIG91dCwgdW5zaWduZWQgaW50KiBvdXRsZW4sCisgICAgICAgIHZvaWQqIGN0eCkKK3sKKyAgICBpbnQgcmV0OworICAgIFBrQ2JJbmZvKiBjYkluZm8gPSAoUGtDYkluZm8qKWN0eDsKKworICAgICh2b2lkKXNzbDsKKyAgICAodm9pZCljYkluZm87CisKKyAgICAvKiByZXR1cm4gMCBvbiBzdWNjZXNzICovCisgICAgcmV0ID0gd2NfRGhBZ3JlZShrZXksIG91dCwgb3V0bGVuLCBwcml2LCBwcml2U3osIHB1YktleURlciwgcHViS2V5U3opOworCisgICAgV09MRlNTTF9QS01TRygiUEsgRUQgQWdyZWU6IHJldCAlZCwgcHJpdlN6ICVkLCBwdWJLZXlTeiAlZCwgb3V0bGVuICVkXG4iLAorICAgICAgICByZXQsIHByaXZTeiwgcHViS2V5U3osICpvdXRsZW4pOworCisgICAgcmV0dXJuIHJldDsKK30KKworI2VuZGlmIC8qICFOT19ESCAqLworCisjaWZuZGVmIE5PX1JTQQorCitzdGF0aWMgV0NfSU5MSU5FIGludCBteVJzYVNpZ24oV09MRlNTTCogc3NsLCBjb25zdCBieXRlKiBpbiwgd29yZDMyIGluU3osCisgICAgICAgIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRTeiwgY29uc3QgYnl0ZSoga2V5LCB3b3JkMzIga2V5U3osIHZvaWQqIGN0eCkKK3sKKyAgICBXQ19STkcgIHJuZzsKKyAgICBpbnQgICAgIHJldDsKKyAgICB3b3JkMzIgIGlkeCA9IDA7CisgICAgUnNhS2V5ICBteUtleTsKKyAgICBieXRlKiAgIGtleUJ1ZiA9IChieXRlKilrZXk7CisgICAgUGtDYkluZm8qIGNiSW5mbyA9IChQa0NiSW5mbyopY3R4OworCisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWNiSW5mbzsKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIFJTQSBTaWduOiBpblN6ICVkLCBrZXlTeiAlZFxuIiwgaW5Teiwga2V5U3opOworCisjaWZkZWYgVEVTVF9QS19QUklWS0VZCisgICAgcmV0ID0gbG9hZF9rZXlfZmlsZShjYkluZm8tPm91cktleSwgJmtleUJ1ZiwgJmtleVN6KTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisjZW5kaWYKKworICAgIHJldCA9IHdjX0luaXRSbmcoJnJuZyk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0gd2NfSW5pdFJzYUtleSgmbXlLZXksIE5VTEwpOworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXQgPSB3Y19Sc2FQcml2YXRlS2V5RGVjb2RlKGtleUJ1ZiwgJmlkeCwgJm15S2V5LCBrZXlTeik7CisgICAgICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgICAgIHJldCA9IHdjX1JzYVNTTF9TaWduKGluLCBpblN6LCBvdXQsICpvdXRTeiwgJm15S2V5LCAmcm5nKTsKKyAgICAgICAgaWYgKHJldCA+IDApIHsgIC8qIHNhdmUgYW5kIGNvbnZlcnQgdG8gMCBzdWNjZXNzICovCisgICAgICAgICAgICAqb3V0U3ogPSByZXQ7CisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICB9CisgICAgICAgIHdjX0ZyZWVSc2FLZXkoJm15S2V5KTsKKyAgICB9CisgICAgd2NfRnJlZVJuZygmcm5nKTsKKworI2lmZGVmIFRFU1RfUEtfUFJJVktFWQorICAgIGZyZWUoa2V5QnVmKTsKKyNlbmRpZgorCisgICAgV09MRlNTTF9QS01TRygiUEsgUlNBIFNpZ246IHJldCAlZCwgb3V0U3ogJWRcbiIsIHJldCwgKm91dFN6KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKworc3RhdGljIFdDX0lOTElORSBpbnQgbXlSc2FWZXJpZnkoV09MRlNTTCogc3NsLCBieXRlKiBzaWcsIHdvcmQzMiBzaWdTeiwKKyAgICAgICAgYnl0ZSoqIG91dCwgY29uc3QgYnl0ZSoga2V5LCB3b3JkMzIga2V5U3osIHZvaWQqIGN0eCkKK3sKKyAgICBpbnQgICAgIHJldDsKKyAgICB3b3JkMzIgIGlkeCA9IDA7CisgICAgUnNhS2V5ICBteUtleTsKKyAgICBQa0NiSW5mbyogY2JJbmZvID0gKFBrQ2JJbmZvKiljdHg7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpY2JJbmZvOworCisgICAgV09MRlNTTF9QS01TRygiUEsgUlNBIFZlcmlmeTogc2lnU3ogJWQsIGtleVN6ICVkXG4iLCBzaWdTeiwga2V5U3opOworCisgICAgcmV0ID0gd2NfSW5pdFJzYUtleSgmbXlLZXksIE5VTEwpOworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXQgPSB3Y19Sc2FQdWJsaWNLZXlEZWNvZGUoa2V5LCAmaWR4LCAmbXlLZXksIGtleVN6KTsKKyAgICAgICAgaWYgKHJldCA9PSAwKQorICAgICAgICAgICAgcmV0ID0gd2NfUnNhU1NMX1ZlcmlmeUlubGluZShzaWcsIHNpZ1N6LCBvdXQsICZteUtleSk7CisgICAgICAgIHdjX0ZyZWVSc2FLZXkoJm15S2V5KTsKKyAgICB9CisKKyAgICBXT0xGU1NMX1BLTVNHKCJQSyBSU0EgVmVyaWZ5OiByZXQgJWRcbiIsIHJldCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgV0NfSU5MSU5FIGludCBteVJzYVNpZ25DaGVjayhXT0xGU1NMKiBzc2wsIGJ5dGUqIHNpZywgd29yZDMyIHNpZ1N6LAorICAgICAgICBieXRlKiogb3V0LCBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwgdm9pZCogY3R4KQoreworICAgIGludCAgICAgcmV0OworICAgIHdvcmQzMiAgaWR4ID0gMDsKKyAgICBSc2FLZXkgIG15S2V5OworICAgIGJ5dGUqICAga2V5QnVmID0gKGJ5dGUqKWtleTsKKyAgICBQa0NiSW5mbyogY2JJbmZvID0gKFBrQ2JJbmZvKiljdHg7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpY2JJbmZvOworCisgICAgV09MRlNTTF9QS01TRygiUEsgUlNBIFNpZ25DaGVjazogc2lnU3ogJWQsIGtleVN6ICVkXG4iLCBzaWdTeiwga2V5U3opOworCisjaWZkZWYgVEVTVF9QS19QUklWS0VZCisgICAgcmV0ID0gbG9hZF9rZXlfZmlsZShjYkluZm8tPm91cktleSwgJmtleUJ1ZiwgJmtleVN6KTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisjZW5kaWYKKworICAgIHJldCA9IHdjX0luaXRSc2FLZXkoJm15S2V5LCBOVUxMKTsKKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgcmV0ID0gd2NfUnNhUHJpdmF0ZUtleURlY29kZShrZXlCdWYsICZpZHgsICZteUtleSwga2V5U3opOworICAgICAgICBpZiAocmV0ID09IDApCisgICAgICAgICAgICByZXQgPSB3Y19Sc2FTU0xfVmVyaWZ5SW5saW5lKHNpZywgc2lnU3osIG91dCwgJm15S2V5KTsKKyAgICAgICAgd2NfRnJlZVJzYUtleSgmbXlLZXkpOworICAgIH0KKyNpZmRlZiBURVNUX1BLX1BSSVZLRVkKKyAgICBmcmVlKGtleUJ1Zik7CisjZW5kaWYKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIFJTQSBTaWduQ2hlY2s6IHJldCAlZFxuIiwgcmV0KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBXQ19SU0FfUFNTCitzdGF0aWMgV0NfSU5MSU5FIGludCBteVJzYVBzc1NpZ24oV09MRlNTTCogc3NsLCBjb25zdCBieXRlKiBpbiwgd29yZDMyIGluU3osCisgICAgICAgIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRTeiwgaW50IGhhc2gsIGludCBtZ2YsIGNvbnN0IGJ5dGUqIGtleSwKKyAgICAgICAgd29yZDMyIGtleVN6LCB2b2lkKiBjdHgpCit7CisgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoVHlwZSA9IFdDX0hBU0hfVFlQRV9OT05FOworICAgIFdDX1JORyAgICAgICAgICAgcm5nOworICAgIGludCAgICAgICAgICAgICAgcmV0OworICAgIHdvcmQzMiAgICAgICAgICAgaWR4ID0gMDsKKyAgICBSc2FLZXkgICAgICAgICAgIG15S2V5OworICAgIGJ5dGUqICAgICAgICAgICAga2V5QnVmID0gKGJ5dGUqKWtleTsKKyAgICBQa0NiSW5mbyogY2JJbmZvID0gKFBrQ2JJbmZvKiljdHg7CisKKyAgICAodm9pZClzc2w7CisgICAgKHZvaWQpY2JJbmZvOworCisgICAgV09MRlNTTF9QS01TRygiUEsgUlNBIFBTUyBTaWduOiBpblN6ICVkLCBoYXNoICVkLCBtZ2YgJWQsIGtleVN6ICVkXG4iLAorICAgICAgICBpblN6LCBoYXNoLCBtZ2YsIGtleVN6KTsKKworI2lmZGVmIFRFU1RfUEtfUFJJVktFWQorICAgIHJldCA9IGxvYWRfa2V5X2ZpbGUoY2JJbmZvLT5vdXJLZXksICZrZXlCdWYsICZrZXlTeik7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworI2VuZGlmCisKKyAgICBzd2l0Y2ggKGhhc2gpIHsKKyNpZm5kZWYgTk9fU0hBMjU2CisgICAgICAgIGNhc2UgU0hBMjU2aDoKKyAgICAgICAgICAgIGhhc2hUeXBlID0gV0NfSEFTSF9UWVBFX1NIQTI1NjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9TSEEzODQKKyAgICAgICAgY2FzZSBTSEEzODRoOgorICAgICAgICAgICAgaGFzaFR5cGUgPSBXQ19IQVNIX1RZUEVfU0hBMzg0OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1NIQTUxMgorICAgICAgICBjYXNlIFNIQTUxMmg6CisgICAgICAgICAgICBoYXNoVHlwZSA9IFdDX0hBU0hfVFlQRV9TSEE1MTI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIH0KKworICAgIHJldCA9IHdjX0luaXRSbmcoJnJuZyk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0gd2NfSW5pdFJzYUtleSgmbXlLZXksIE5VTEwpOworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXQgPSB3Y19Sc2FQcml2YXRlS2V5RGVjb2RlKGtleUJ1ZiwgJmlkeCwgJm15S2V5LCBrZXlTeik7CisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgcmV0ID0gd2NfUnNhUFNTX1NpZ24oaW4sIGluU3osIG91dCwgKm91dFN6LCBoYXNoVHlwZSwgbWdmLCAmbXlLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm5nKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0ID4gMCkgeyAgLyogc2F2ZSBhbmQgY29udmVydCB0byAwIHN1Y2Nlc3MgKi8KKyAgICAgICAgICAgICpvdXRTeiA9IHJldDsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgd2NfRnJlZVJzYUtleSgmbXlLZXkpOworICAgIH0KKyAgICB3Y19GcmVlUm5nKCZybmcpOworCisjaWZkZWYgVEVTVF9QS19QUklWS0VZCisgICAgZnJlZShrZXlCdWYpOworI2VuZGlmCisKKyAgICBXT0xGU1NMX1BLTVNHKCJQSyBSU0EgUFNTIFNpZ246IHJldCAlZCwgb3V0U3ogJWRcbiIsIHJldCwgKm91dFN6KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKworc3RhdGljIFdDX0lOTElORSBpbnQgbXlSc2FQc3NWZXJpZnkoV09MRlNTTCogc3NsLCBieXRlKiBzaWcsIHdvcmQzMiBzaWdTeiwKKyAgICAgICAgYnl0ZSoqIG91dCwgaW50IGhhc2gsIGludCBtZ2YsIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGtleVN6LCB2b2lkKiBjdHgpCit7CisgICAgaW50ICAgICAgIHJldDsKKyAgICB3b3JkMzIgICAgaWR4ID0gMDsKKyAgICBSc2FLZXkgICAgbXlLZXk7CisgICAgUGtDYkluZm8qIGNiSW5mbyA9IChQa0NiSW5mbyopY3R4OworICAgIGVudW0gd2NfSGFzaFR5cGUgaGFzaFR5cGUgPSBXQ19IQVNIX1RZUEVfTk9ORTsKKworICAgICh2b2lkKXNzbDsKKyAgICAodm9pZCljYkluZm87CisKKyAgICBXT0xGU1NMX1BLTVNHKCJQSyBSU0EgUFNTIFZlcmlmeTogc2lnU3ogJWQsIGhhc2ggJWQsIG1nZiAlZCwga2V5U3ogJWRcbiIsCisgICAgICAgIHNpZ1N6LCBoYXNoLCBtZ2YsIGtleVN6KTsKKworICAgIHN3aXRjaCAoaGFzaCkgeworI2lmbmRlZiBOT19TSEEyNTYKKyAgICAgICAgY2FzZSBTSEEyNTZoOgorICAgICAgICAgICAgaGFzaFR5cGUgPSBXQ19IQVNIX1RZUEVfU0hBMjU2OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1NIQTM4NAorICAgICAgICBjYXNlIFNIQTM4NGg6CisgICAgICAgICAgICBoYXNoVHlwZSA9IFdDX0hBU0hfVFlQRV9TSEEzODQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfU0hBNTEyCisgICAgICAgIGNhc2UgU0hBNTEyaDoKKyAgICAgICAgICAgIGhhc2hUeXBlID0gV0NfSEFTSF9UWVBFX1NIQTUxMjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgfQorCisgICAgcmV0ID0gd2NfSW5pdFJzYUtleSgmbXlLZXksIE5VTEwpOworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXQgPSB3Y19Sc2FQdWJsaWNLZXlEZWNvZGUoa2V5LCAmaWR4LCAmbXlLZXksIGtleVN6KTsKKyAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICByZXQgPSB3Y19Sc2FQU1NfVmVyaWZ5SW5saW5lKHNpZywgc2lnU3osIG91dCwgaGFzaFR5cGUsIG1nZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm15S2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgd2NfRnJlZVJzYUtleSgmbXlLZXkpOworICAgIH0KKworICAgIFdPTEZTU0xfUEtNU0coIlBLIFJTQSBQU1MgVmVyaWZ5OiByZXQgJWRcbiIsIHJldCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgV0NfSU5MSU5FIGludCBteVJzYVBzc1NpZ25DaGVjayhXT0xGU1NMKiBzc2wsIGJ5dGUqIHNpZywgd29yZDMyIHNpZ1N6LAorICAgICAgICBieXRlKiogb3V0LCBpbnQgaGFzaCwgaW50IG1nZiwgY29uc3QgYnl0ZSoga2V5LCB3b3JkMzIga2V5U3osIHZvaWQqIGN0eCkKK3sKKyAgICBpbnQgICAgICAgcmV0OworICAgIHdvcmQzMiAgICBpZHggPSAwOworICAgIFJzYUtleSAgICBteUtleTsKKyAgICBieXRlKiAgICAga2V5QnVmID0gKGJ5dGUqKWtleTsKKyAgICBQa0NiSW5mbyogY2JJbmZvID0gKFBrQ2JJbmZvKiljdHg7CisgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoVHlwZSA9IFdDX0hBU0hfVFlQRV9OT05FOworCisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWNiSW5mbzsKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIFJTQSBQU1MgU2lnbkNoZWNrOiBzaWdTeiAlZCwgaGFzaCAlZCwgbWdmICVkLCBrZXlTeiAlZFxuIiwKKyAgICAgICAgc2lnU3osIGhhc2gsIG1nZiwga2V5U3opOworCisjaWZkZWYgVEVTVF9QS19QUklWS0VZCisgICAgcmV0ID0gbG9hZF9rZXlfZmlsZShjYkluZm8tPm91cktleSwgJmtleUJ1ZiwgJmtleVN6KTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisjZW5kaWYKKworICAgIHN3aXRjaCAoaGFzaCkgeworI2lmbmRlZiBOT19TSEEyNTYKKyAgICAgICAgY2FzZSBTSEEyNTZoOgorICAgICAgICAgICAgaGFzaFR5cGUgPSBXQ19IQVNIX1RZUEVfU0hBMjU2OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1NIQTM4NAorICAgICAgICBjYXNlIFNIQTM4NGg6CisgICAgICAgICAgICBoYXNoVHlwZSA9IFdDX0hBU0hfVFlQRV9TSEEzODQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfU0hBNTEyCisgICAgICAgIGNhc2UgU0hBNTEyaDoKKyAgICAgICAgICAgIGhhc2hUeXBlID0gV0NfSEFTSF9UWVBFX1NIQTUxMjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgfQorCisgICAgcmV0ID0gd2NfSW5pdFJzYUtleSgmbXlLZXksIE5VTEwpOworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXQgPSB3Y19Sc2FQcml2YXRlS2V5RGVjb2RlKGtleUJ1ZiwgJmlkeCwgJm15S2V5LCBrZXlTeik7CisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgcmV0ID0gd2NfUnNhUFNTX1ZlcmlmeUlubGluZShzaWcsIHNpZ1N6LCBvdXQsIGhhc2hUeXBlLCBtZ2YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteUtleSk7CisgICAgICAgICAgICB9CisgICAgICAgIHdjX0ZyZWVSc2FLZXkoJm15S2V5KTsKKyAgICB9CisKKyNpZmRlZiBURVNUX1BLX1BSSVZLRVkKKyAgICBmcmVlKGtleUJ1Zik7CisjZW5kaWYKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIFJTQSBQU1MgU2lnbkNoZWNrOiByZXQgJWRcbiIsIHJldCk7CisKKyAgICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKKworc3RhdGljIFdDX0lOTElORSBpbnQgbXlSc2FFbmMoV09MRlNTTCogc3NsLCBjb25zdCBieXRlKiBpbiwgd29yZDMyIGluU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXQsIHdvcmQzMiogb3V0U3osIGNvbnN0IGJ5dGUqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBrZXlTeiwgdm9pZCogY3R4KQoreworICAgIGludCAgICAgICByZXQ7CisgICAgd29yZDMyICAgIGlkeCA9IDA7CisgICAgUnNhS2V5ICAgIG15S2V5OworICAgIFdDX1JORyAgICBybmc7CisgICAgUGtDYkluZm8qIGNiSW5mbyA9IChQa0NiSW5mbyopY3R4OworCisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWNiSW5mbzsKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIFJTQSBFbmM6IGluU3ogJWQsIGtleVN6ICVkXG4iLCBpblN6LCBrZXlTeik7CisKKyAgICByZXQgPSB3Y19Jbml0Um5nKCZybmcpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9IHdjX0luaXRSc2FLZXkoJm15S2V5LCBOVUxMKTsKKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgcmV0ID0gd2NfUnNhUHVibGljS2V5RGVjb2RlKGtleSwgJmlkeCwgJm15S2V5LCBrZXlTeik7CisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgcmV0ID0gd2NfUnNhUHVibGljRW5jcnlwdChpbiwgaW5Teiwgb3V0LCAqb3V0U3osICZteUtleSwgJnJuZyk7CisgICAgICAgICAgICBpZiAocmV0ID4gMCkgeworICAgICAgICAgICAgICAgICpvdXRTeiA9IHJldDsKKyAgICAgICAgICAgICAgICByZXQgPSAwOyAgLyogcmVzZXQgdG8gc3VjY2VzcyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdjX0ZyZWVSc2FLZXkoJm15S2V5KTsKKyAgICB9CisgICAgd2NfRnJlZVJuZygmcm5nKTsKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIFJTQSBFbmM6IHJldCAlZCwgb3V0U3ogJWRcbiIsIHJldCwgKm91dFN6KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBXQ19JTkxJTkUgaW50IG15UnNhRGVjKFdPTEZTU0wqIHNzbCwgYnl0ZSogaW4sIHdvcmQzMiBpblN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSoqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGtleVN6LCB2b2lkKiBjdHgpCit7CisgICAgaW50ICAgICAgIHJldDsKKyAgICB3b3JkMzIgICAgaWR4ID0gMDsKKyAgICBSc2FLZXkgICAgbXlLZXk7CisgICAgYnl0ZSogICAgIGtleUJ1ZiA9IChieXRlKilrZXk7CisgICAgUGtDYkluZm8qIGNiSW5mbyA9IChQa0NiSW5mbyopY3R4OworCisgICAgKHZvaWQpc3NsOworICAgICh2b2lkKWNiSW5mbzsKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIFJTQSBEZWM6IGluU3ogJWQsIGtleVN6ICVkXG4iLCBpblN6LCBrZXlTeik7CisKKyNpZmRlZiBURVNUX1BLX1BSSVZLRVkKKyAgICByZXQgPSBsb2FkX2tleV9maWxlKGNiSW5mby0+b3VyS2V5LCAma2V5QnVmLCAma2V5U3opOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyNlbmRpZgorCisgICAgcmV0ID0gd2NfSW5pdFJzYUtleSgmbXlLZXksIE5VTEwpOworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXQgPSB3Y19Sc2FQcml2YXRlS2V5RGVjb2RlKGtleUJ1ZiwgJmlkeCwgJm15S2V5LCBrZXlTeik7CisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgI2lmZGVmIFdDX1JTQV9CTElORElORworICAgICAgICAgICAgICAgIHJldCA9IHdjX1JzYVNldFJORygmbXlLZXksIHdvbGZTU0xfR2V0Uk5HKHNzbCkpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICB3Y19GcmVlUnNhS2V5KCZteUtleSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICByZXQgPSB3Y19Sc2FQcml2YXRlRGVjcnlwdElubGluZShpbiwgaW5Teiwgb3V0LCAmbXlLZXkpOworICAgICAgICB9CisgICAgICAgIHdjX0ZyZWVSc2FLZXkoJm15S2V5KTsKKyAgICB9CisKKyNpZmRlZiBURVNUX1BLX1BSSVZLRVkKKyAgICBmcmVlKGtleUJ1Zik7CisjZW5kaWYKKworICAgIFdPTEZTU0xfUEtNU0coIlBLIFJTQSBEZWM6IHJldCAlZFxuIiwgcmV0KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAvKiBOT19SU0EgKi8KKworc3RhdGljIFdDX0lOTElORSB2b2lkIFNldHVwUGtDYWxsYmFja3MoV09MRlNTTF9DVFgqIGN0eCkKK3sKKyAgICAodm9pZCljdHg7CisKKyAgICAjaWZkZWYgSEFWRV9FQ0MKKyAgICAgICAgd29sZlNTTF9DVFhfU2V0RWNjS2V5R2VuQ2IoY3R4LCBteUVjY0tleUdlbik7CisgICAgICAgIHdvbGZTU0xfQ1RYX1NldEVjY1NpZ25DYihjdHgsIG15RWNjU2lnbik7CisgICAgICAgIHdvbGZTU0xfQ1RYX1NldEVjY1ZlcmlmeUNiKGN0eCwgbXlFY2NWZXJpZnkpOworICAgICAgICB3b2xmU1NMX0NUWF9TZXRFY2NTaGFyZWRTZWNyZXRDYihjdHgsIG15RWNjU2hhcmVkU2VjcmV0KTsKKyAgICAjZW5kaWYgLyogSEFWRV9FQ0MgKi8KKyAgICAjaWZuZGVmIE5PX0RICisgICAgICAgIHdvbGZTU0xfQ1RYX1NldERoQWdyZWVDYihjdHgsIG15RGhDYWxsYmFjayk7CisgICAgI2VuZGlmCisgICAgI2lmZGVmIEhBVkVfRUQyNTUxOQorICAgICAgICB3b2xmU1NMX0NUWF9TZXRFZDI1NTE5U2lnbkNiKGN0eCwgbXlFZDI1NTE5U2lnbik7CisgICAgICAgIHdvbGZTU0xfQ1RYX1NldEVkMjU1MTlWZXJpZnlDYihjdHgsIG15RWQyNTUxOVZlcmlmeSk7CisgICAgI2VuZGlmCisgICAgI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorICAgICAgICB3b2xmU1NMX0NUWF9TZXRYMjU1MTlLZXlHZW5DYihjdHgsIG15WDI1NTE5S2V5R2VuKTsKKyAgICAgICAgd29sZlNTTF9DVFhfU2V0WDI1NTE5U2hhcmVkU2VjcmV0Q2IoY3R4LCBteVgyNTUxOVNoYXJlZFNlY3JldCk7CisgICAgI2VuZGlmCisgICAgI2lmZGVmIEhBVkVfRUQ0NDgKKyAgICAgICAgd29sZlNTTF9DVFhfU2V0RWQ0NDhTaWduQ2IoY3R4LCBteUVkNDQ4U2lnbik7CisgICAgICAgIHdvbGZTU0xfQ1RYX1NldEVkNDQ4VmVyaWZ5Q2IoY3R4LCBteUVkNDQ4VmVyaWZ5KTsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgSEFWRV9DVVJWRTQ0OAorICAgICAgICB3b2xmU1NMX0NUWF9TZXRYNDQ4S2V5R2VuQ2IoY3R4LCBteVg0NDhLZXlHZW4pOworICAgICAgICB3b2xmU1NMX0NUWF9TZXRYNDQ4U2hhcmVkU2VjcmV0Q2IoY3R4LCBteVg0NDhTaGFyZWRTZWNyZXQpOworICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fUlNBCisgICAgICAgIHdvbGZTU0xfQ1RYX1NldFJzYVNpZ25DYihjdHgsIG15UnNhU2lnbik7CisgICAgICAgIHdvbGZTU0xfQ1RYX1NldFJzYVZlcmlmeUNiKGN0eCwgbXlSc2FWZXJpZnkpOworICAgICAgICB3b2xmU1NMX0NUWF9TZXRSc2FTaWduQ2hlY2tDYihjdHgsIG15UnNhU2lnbkNoZWNrKTsKKyAgICAgICAgI2lmZGVmIFdDX1JTQV9QU1MKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX1NldFJzYVBzc1NpZ25DYihjdHgsIG15UnNhUHNzU2lnbik7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9TZXRSc2FQc3NWZXJpZnlDYihjdHgsIG15UnNhUHNzVmVyaWZ5KTsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX1NldFJzYVBzc1NpZ25DaGVja0NiKGN0eCwgbXlSc2FQc3NTaWduQ2hlY2spOworICAgICAgICAjZW5kaWYKKyAgICAgICAgd29sZlNTTF9DVFhfU2V0UnNhRW5jQ2IoY3R4LCBteVJzYUVuYyk7CisgICAgICAgIHdvbGZTU0xfQ1RYX1NldFJzYURlY0NiKGN0eCwgbXlSc2FEZWMpOworICAgICNlbmRpZiAvKiBOT19SU0EgKi8KK30KKworc3RhdGljIFdDX0lOTElORSB2b2lkIFNldHVwUGtDYWxsYmFja0NvbnRleHRzKFdPTEZTU0wqIHNzbCwgdm9pZCogbXlDdHgpCit7CisgICAgI2lmZGVmIEhBVkVfRUNDCisgICAgICAgIHdvbGZTU0xfU2V0RWNjS2V5R2VuQ3R4KHNzbCwgbXlDdHgpOworICAgICAgICB3b2xmU1NMX1NldEVjY1NpZ25DdHgoc3NsLCBteUN0eCk7CisgICAgICAgIHdvbGZTU0xfU2V0RWNjVmVyaWZ5Q3R4KHNzbCwgbXlDdHgpOworICAgICAgICB3b2xmU1NMX1NldEVjY1NoYXJlZFNlY3JldEN0eChzc2wsIG15Q3R4KTsKKyAgICAjZW5kaWYgLyogSEFWRV9FQ0MgKi8KKyAgICAjaWZuZGVmIE5PX0RICisgICAgICAgIHdvbGZTU0xfU2V0RGhBZ3JlZUN0eChzc2wsIG15Q3R4KTsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgSEFWRV9FRDI1NTE5CisgICAgICAgIHdvbGZTU0xfU2V0RWQyNTUxOVNpZ25DdHgoc3NsLCBteUN0eCk7CisgICAgICAgIHdvbGZTU0xfU2V0RWQyNTUxOVZlcmlmeUN0eChzc2wsIG15Q3R4KTsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgSEFWRV9DVVJWRTI1NTE5CisgICAgICAgIHdvbGZTU0xfU2V0WDI1NTE5S2V5R2VuQ3R4KHNzbCwgbXlDdHgpOworICAgICAgICB3b2xmU1NMX1NldFgyNTUxOVNoYXJlZFNlY3JldEN0eChzc2wsIG15Q3R4KTsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgSEFWRV9FRDQ0OAorICAgICAgICB3b2xmU1NMX1NldEVkNDQ4U2lnbkN0eChzc2wsIG15Q3R4KTsKKyAgICAgICAgd29sZlNTTF9TZXRFZDQ0OFZlcmlmeUN0eChzc2wsIG15Q3R4KTsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgSEFWRV9DVVJWRTQ0OAorICAgICAgICB3b2xmU1NMX1NldFg0NDhLZXlHZW5DdHgoc3NsLCBteUN0eCk7CisgICAgICAgIHdvbGZTU0xfU2V0WDQ0OFNoYXJlZFNlY3JldEN0eChzc2wsIG15Q3R4KTsKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX1JTQQorICAgICAgICB3b2xmU1NMX1NldFJzYVNpZ25DdHgoc3NsLCBteUN0eCk7CisgICAgICAgIHdvbGZTU0xfU2V0UnNhVmVyaWZ5Q3R4KHNzbCwgbXlDdHgpOworICAgICAgICAjaWZkZWYgV0NfUlNBX1BTUworICAgICAgICAgICAgd29sZlNTTF9TZXRSc2FQc3NTaWduQ3R4KHNzbCwgbXlDdHgpOworICAgICAgICAgICAgd29sZlNTTF9TZXRSc2FQc3NWZXJpZnlDdHgoc3NsLCBteUN0eCk7CisgICAgICAgICNlbmRpZgorICAgICAgICB3b2xmU1NMX1NldFJzYUVuY0N0eChzc2wsIG15Q3R4KTsKKyAgICAgICAgd29sZlNTTF9TZXRSc2FEZWNDdHgoc3NsLCBteUN0eCk7CisgICAgI2VuZGlmIC8qIE5PX1JTQSAqLworfQorCisjZW5kaWYgLyogSEFWRV9QS19DQUxMQkFDS1MgKi8KKworI2lmZGVmIFVTRV9XT0xGU1NMX0lPCitzdGF0aWMgV0NfSU5MSU5FIGludCBTaW11bGF0ZVdhbnRXcml0ZUlPU2VuZENiKFdPTEZTU0wgKnNzbCwgY2hhciAqYnVmLCBpbnQgc3osIHZvaWQgKmN0eCkKK3sKKyAgICBzdGF0aWMgaW50IHdhbnRXcml0ZUZsYWcgPSAxOworCisgICAgaW50IHNlbnQ7CisgICAgaW50IHNkID0gKihpbnQqKWN0eDsKKworICAgICh2b2lkKXNzbDsKKworICAgIGlmICghd2FudFdyaXRlRmxhZykKKyAgICB7CisgICAgICAgIHdhbnRXcml0ZUZsYWcgPSAxOworCisgICAgICAgIHNlbnQgPSB3b2xmSU9fU2VuZChzZCwgYnVmLCBzeiwgMCk7CisgICAgICAgIGlmIChzZW50IDwgMCkgeworICAgICAgICAgICAgaW50IGVyciA9IGVycm5vOworCisgICAgICAgICAgICBpZiAoZXJyID09IFNPQ0tFVF9FV09VTERCTE9DSyB8fCBlcnIgPT0gU09DS0VUX0VBR0FJTikgeworICAgICAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX1dBTlRfV1JJVEU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gU09DS0VUX0VDT05OUkVTRVQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9DT05OX1JTVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSBTT0NLRVRfRUlOVFIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9JU1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gU09DS0VUX0VQSVBFKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdPTEZTU0xfQ0JJT19FUlJfQ09OTl9DTE9TRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0dFTkVSQUw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2VudDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2FudFdyaXRlRmxhZyA9IDA7CisgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX1dBTlRfV1JJVEU7CisgICAgfQorfQorI2VuZGlmIC8qIFVTRV9XT0xGU1NMX0lPICovCisKKyNpZiBkZWZpbmVkKF9faHB1eF9fKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkIChXT0xGU1NMX1RJUlRPUykgXAorICAgICAgICAgICAgICAgICAgICAgIHx8IGRlZmluZWQoX01TQ19WRVIpCisKKy8qIEhQL1VYIGRvZXNuJ3QgaGF2ZSBzdHJzZXAsIG5lZWRlZCBieSB0ZXN0L3N1aXRlcy5jICovCitzdGF0aWMgV0NfSU5MSU5FIGNoYXIqIHN0cnNlcChjaGFyICoqc3RyaW5ncCwgY29uc3QgY2hhciAqZGVsaW0pCit7CisgICAgY2hhciogc3RhcnQ7CisgICAgY2hhciogZW5kOworCisgICAgc3RhcnQgPSAqc3RyaW5ncDsKKyAgICBpZiAoc3RhcnQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoKGVuZCA9IHN0cnBicmsoc3RhcnQsIGRlbGltKSkpIHsKKyAgICAgICAgKmVuZCsrID0gJ1wwJzsKKyAgICAgICAgKnN0cmluZ3AgPSBlbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKnN0cmluZ3AgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBzdGFydDsKK30KKworI2VuZGlmIC8qIF9faHB1eF9fIGFuZCBvdGhlcnMgKi8KKworLyogQ3JlYXRlIHVuaXF1ZSBmaWxlbmFtZSwgbGVuIGlzIGxlbmd0aCBvZiB0ZW1wZm4gbmFtZSwgYXNzdW1pbmcKKyAgIGxlbiBkb2VzIG5vdCBpbmNsdWRlIG51bGwgdGVybWluYXRpbmcgY2hhcmFjdGVyLAorICAgbnVtIGlzIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRlbXBmbiBuYW1lIHRvIHJhbmRvbWl6ZSAqLworc3RhdGljIFdDX0lOTElORSBjb25zdCBjaGFyKiBteW1rdGVtcChjaGFyICp0ZW1wZm4sIGludCBsZW4sIGludCBudW0pCit7CisgICAgaW50IHgsIHNpemU7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgYWxwaGFudW1bXSA9ICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisgICAgV0NfUk5HIHJuZzsKKyAgICBieXRlICAgb3V0OworCisgICAgaWYgKHRlbXBmbiA9PSBOVUxMIHx8IGxlbiA8IDEgfHwgbnVtIDwgMSB8fCBsZW4gPD0gbnVtKSB7CisgICAgICAgIHByaW50ZigiQmFkIGlucHV0XG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2l6ZSA9IGxlbiAtIDE7CisKKyAgICBpZiAod2NfSW5pdFJuZygmcm5nKSAhPSAwKSB7CisgICAgICAgIHByaW50ZigiSW5pdFJuZyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBmb3IgKHggPSBzaXplOyB4ID4gc2l6ZSAtIG51bTsgeC0tKSB7CisgICAgICAgIGlmICh3Y19STkdfR2VuZXJhdGVCbG9jaygmcm5nLChieXRlKikmb3V0LCBzaXplb2Yob3V0KSkgIT0gMCkgeworICAgICAgICAgICAgcHJpbnRmKCJSTkdfR2VuZXJhdGVCbG9jayBmYWlsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdGVtcGZuW3hdID0gYWxwaGFudW1bb3V0ICUgKHNpemVvZihhbHBoYW51bSkgLSAxKV07CisgICAgfQorICAgIHRlbXBmbltsZW5dID0gJ1wwJzsKKworICAgIHdjX0ZyZWVSbmcoJnJuZyk7CisgICAgKHZvaWQpcm5nOyAvKiBmb3IgV0NfTk9fUk5HIGNhc2UgKi8KKworICAgIHJldHVybiB0ZW1wZm47Cit9CisKKworCisjaWYgZGVmaW5lZChIQVZFX1NFU1NJT05fVElDS0VUKSAmJiBkZWZpbmVkKFdPTEZTU0xfTk9fREVGX1RJQ0tFVF9FTkNfQ0IpICYmIFwKKyAgICAoKGRlZmluZWQoSEFWRV9DSEFDSEEpICYmIGRlZmluZWQoSEFWRV9QT0xZMTMwNSkpIHx8IFwKKyAgICAgIGRlZmluZWQoSEFWRV9BRVNHQ00pKQorCisjaWYgZGVmaW5lZChIQVZFX0NIQUNIQSkgJiYgZGVmaW5lZChIQVZFX1BPTFkxMzA1KQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9jaGFjaGEyMF9wb2x5MTMwNS5oPgorICAgICNkZWZpbmUgV09MRlNTTF9USUNLRVRfS0VZX1NaIENIQUNIQTIwX1BPTFkxMzA1X0FFQURfS0VZU0laRQorI2VsaWYgZGVmaW5lZChIQVZFX0FFU0dDTSkKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYWVzLmg+CisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3djX2VuY3J5cHQuaD4gLyogQUVTIElWIHNpemVzIGluIEZJUFMgbW9kZSAqLworICAgICNkZWZpbmUgV09MRlNTTF9USUNLRVRfS0VZX1NaIEFFU18yNTZfS0VZX1NJWkUKKyNlbmRpZgorCisgICAgdHlwZWRlZiBzdHJ1Y3Qga2V5X2N0eCB7CisgICAgICAgIGJ5dGUgbmFtZVtXT0xGU1NMX1RJQ0tFVF9OQU1FX1NaXTsgLyogbmFtZSBmb3IgdGhpcyBjb250ZXh0ICovCisgICAgICAgIGJ5dGUga2V5W1dPTEZTU0xfVElDS0VUX0tFWV9TWl07ICAgLyogY2lwaGVyIGtleSAqLworICAgIH0ga2V5X2N0eDsKKworICAgIHN0YXRpYyBUSFJFQURfTFNfVCBrZXlfY3R4IG15S2V5X2N0eDsKKyAgICBzdGF0aWMgVEhSRUFEX0xTX1QgV0NfUk5HIG15S2V5X3JuZzsKKworICAgIHN0YXRpYyBXQ19JTkxJTkUgaW50IFRpY2tldEluaXQodm9pZCkKKyAgICB7CisgICAgICAgIGludCByZXQgPSB3Y19Jbml0Um5nKCZteUtleV9ybmcpOworICAgICAgICBpZiAocmV0ICE9IDApIHJldHVybiByZXQ7CisKKyAgICAgICAgcmV0ID0gd2NfUk5HX0dlbmVyYXRlQmxvY2soJm15S2V5X3JuZywgbXlLZXlfY3R4LmtleSwgc2l6ZW9mKG15S2V5X2N0eC5rZXkpKTsKKyAgICAgICAgaWYgKHJldCAhPSAwKSByZXR1cm4gcmV0OworCisgICAgICAgIHJldCA9IHdjX1JOR19HZW5lcmF0ZUJsb2NrKCZteUtleV9ybmcsIG15S2V5X2N0eC5uYW1lLHNpemVvZihteUtleV9jdHgubmFtZSkpOworICAgICAgICBpZiAocmV0ICE9IDApIHJldHVybiByZXQ7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3RhdGljIFdDX0lOTElORSB2b2lkIFRpY2tldENsZWFudXAodm9pZCkKKyAgICB7CisgICAgICAgIHdjX0ZyZWVSbmcoJm15S2V5X3JuZyk7CisgICAgfQorCisgICAgc3RhdGljIFdDX0lOTElORSBpbnQgbXlUaWNrZXRFbmNDYihXT0xGU1NMKiBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUga2V5X25hbWVbV09MRlNTTF9USUNLRVRfTkFNRV9TWl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgaXZbV09MRlNTTF9USUNLRVRfSVZfU1pdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlIG1hY1tXT0xGU1NMX1RJQ0tFVF9NQUNfU1pdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5jLCBieXRlKiB0aWNrZXQsIGludCBpbkxlbiwgaW50KiBvdXRMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHVzZXJDdHgpCisgICAgeworICAgICAgICBpbnQgcmV0OworICAgICAgICB3b3JkMTYgc0xlbiA9IFhIVE9OUyhpbkxlbik7CisgICAgICAgIGJ5dGUgYWFkW1dPTEZTU0xfVElDS0VUX05BTUVfU1ogKyBXT0xGU1NMX1RJQ0tFVF9JVl9TWiArIDJdOworICAgICAgICBpbnQgIGFhZFN6ID0gV09MRlNTTF9USUNLRVRfTkFNRV9TWiArIFdPTEZTU0xfVElDS0VUX0lWX1NaICsgMjsKKyAgICAgICAgYnl0ZSogdG1wID0gYWFkOworICAgICNpZiBkZWZpbmVkKEhBVkVfQ0hBQ0hBKSAmJiBkZWZpbmVkKEhBVkVfUE9MWTEzMDUpCisgICAgICAgIC8qIGNoYWhjYTIwL3BvbHkxMzA1ICovCisgICAgI2VsaWYgZGVmaW5lZChIQVZFX0FFU0dDTSkKKyAgICAgICAgQWVzIGFlczsKKyAgICAjZW5kaWYKKworICAgICAgICAodm9pZClzc2w7CisgICAgICAgICh2b2lkKXVzZXJDdHg7CisKKyAgICAgICAgLyogZW5jcnlwdCAqLworICAgICAgICBpZiAoZW5jKSB7CisgICAgICAgICAgICBYTUVNQ1BZKGtleV9uYW1lLCBteUtleV9jdHgubmFtZSwgV09MRlNTTF9USUNLRVRfTkFNRV9TWik7CisKKyAgICAgICAgICAgIHJldCA9IHdjX1JOR19HZW5lcmF0ZUJsb2NrKCZteUtleV9ybmcsIGl2LCBXT0xGU1NMX1RJQ0tFVF9JVl9TWik7CisgICAgICAgICAgICBpZiAocmV0ICE9IDApIHJldHVybiBXT0xGU1NMX1RJQ0tFVF9SRVRfUkVKRUNUOworCisgICAgICAgICAgICAvKiBidWlsZCBhYWQgZnJvbSBrZXkgbmFtZSwgaXYsIGFuZCBsZW5ndGggKi8KKyAgICAgICAgICAgIFhNRU1DUFkodG1wLCBrZXlfbmFtZSwgV09MRlNTTF9USUNLRVRfTkFNRV9TWik7CisgICAgICAgICAgICB0bXAgKz0gV09MRlNTTF9USUNLRVRfTkFNRV9TWjsKKyAgICAgICAgICAgIFhNRU1DUFkodG1wLCBpdiwgV09MRlNTTF9USUNLRVRfSVZfU1opOworICAgICAgICAgICAgdG1wICs9IFdPTEZTU0xfVElDS0VUX0lWX1NaOworICAgICAgICAgICAgWE1FTUNQWSh0bXAsICZzTGVuLCBzaXplb2Yoc0xlbikpOworCisgICAgICAgICNpZiBkZWZpbmVkKEhBVkVfQ0hBQ0hBKSAmJiBkZWZpbmVkKEhBVkVfUE9MWTEzMDUpCisgICAgICAgICAgICByZXQgPSB3Y19DaGFDaGEyMFBvbHkxMzA1X0VuY3J5cHQobXlLZXlfY3R4LmtleSwgaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWFkLCBhYWRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXQsIGluTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWMpOworICAgICAgICAjZWxpZiBkZWZpbmVkKEhBVkVfQUVTR0NNKQorICAgICAgICAgICAgcmV0ID0gd2NfQWVzSW5pdCgmYWVzLCBOVUxMLCBJTlZBTElEX0RFVklEKTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgcmV0dXJuIFdPTEZTU0xfVElDS0VUX1JFVF9SRUpFQ1Q7CisKKyAgICAgICAgICAgIHJldCA9IHdjX0Flc0djbVNldEtleSgmYWVzLCBteUtleV9jdHgua2V5LCBzaXplb2YobXlLZXlfY3R4LmtleSkpOworICAgICAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gd2NfQWVzR2NtRW5jcnlwdCgmYWVzLCB0aWNrZXQsIHRpY2tldCwgaW5MZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgR0NNX05PTkNFX01JRF9TWiwgbWFjLCBBRVNfQkxPQ0tfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhZCwgYWFkU3opOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2NfQWVzRnJlZSgmYWVzKTsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgcmV0dXJuIFdPTEZTU0xfVElDS0VUX1JFVF9SRUpFQ1Q7CisgICAgICAgICAgICAqb3V0TGVuID0gaW5MZW47ICAvKiBubyBwYWRkaW5nIGluIHRoaXMgbW9kZSAqLworICAgICAgICB9CisgICAgICAgIC8qIGRlY3J5cHQgKi8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBzZWUgaWYgd2Uga25vdyB0aGlzIGtleSAqLworICAgICAgICAgICAgaWYgKFhNRU1DTVAoa2V5X25hbWUsIG15S2V5X2N0eC5uYW1lLCBXT0xGU1NMX1RJQ0tFVF9OQU1FX1NaKSAhPSAwKXsKKyAgICAgICAgICAgICAgICBwcmludGYoImNsaWVudCBwcmVzZW50ZWQgdW5rbm93biB0aWNrZXQga2V5IG5hbWUgJXNcbiIsIGtleV9uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9USUNLRVRfUkVUX0ZBVEFMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBidWlsZCBhYWQgZnJvbSBrZXkgbmFtZSwgaXYsIGFuZCBsZW5ndGggKi8KKyAgICAgICAgICAgIFhNRU1DUFkodG1wLCBrZXlfbmFtZSwgV09MRlNTTF9USUNLRVRfTkFNRV9TWik7CisgICAgICAgICAgICB0bXAgKz0gV09MRlNTTF9USUNLRVRfTkFNRV9TWjsKKyAgICAgICAgICAgIFhNRU1DUFkodG1wLCBpdiwgV09MRlNTTF9USUNLRVRfSVZfU1opOworICAgICAgICAgICAgdG1wICs9IFdPTEZTU0xfVElDS0VUX0lWX1NaOworICAgICAgICAgICAgWE1FTUNQWSh0bXAsICZzTGVuLCBzaXplb2Yoc0xlbikpOworCisgICAgICAgICNpZiBkZWZpbmVkKEhBVkVfQ0hBQ0hBKSAmJiBkZWZpbmVkKEhBVkVfUE9MWTEzMDUpCisgICAgICAgICAgICByZXQgPSB3Y19DaGFDaGEyMFBvbHkxMzA1X0RlY3J5cHQobXlLZXlfY3R4LmtleSwgaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWFkLCBhYWRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXQsIGluTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXQpOworICAgICAgICAjZWxpZiBkZWZpbmVkKEhBVkVfQUVTR0NNKQorICAgICAgICAgICAgcmV0ID0gd2NfQWVzSW5pdCgmYWVzLCBOVUxMLCBJTlZBTElEX0RFVklEKTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgcmV0dXJuIFdPTEZTU0xfVElDS0VUX1JFVF9SRUpFQ1Q7CisKKyAgICAgICAgICAgIHJldCA9IHdjX0Flc0djbVNldEtleSgmYWVzLCBteUtleV9jdHgua2V5LCBzaXplb2YobXlLZXlfY3R4LmtleSkpOworICAgICAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gd2NfQWVzR2NtRGVjcnlwdCgmYWVzLCB0aWNrZXQsIHRpY2tldCwgaW5MZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXYsIEdDTV9OT05DRV9NSURfU1osIG1hYywgQUVTX0JMT0NLX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWFkLCBhYWRTeik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3Y19BZXNGcmVlKCZhZXMpOworICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgaWYgKHJldCAhPSAwKSByZXR1cm4gV09MRlNTTF9USUNLRVRfUkVUX1JFSkVDVDsKKyAgICAgICAgICAgICpvdXRMZW4gPSBpbkxlbjsgIC8qIG5vIHBhZGRpbmcgaW4gdGhpcyBtb2RlICovCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gV09MRlNTTF9USUNLRVRfUkVUX09LOworICAgIH0KKworI2VuZGlmIC8qIEhBVkVfU0VTU0lPTl9USUNLRVQgJiYgKChIQVZFX0NIQUNIQSAmJiBIQVZFX1BPTFkxMzA1KSB8fCBIQVZFX0FFU0dDTSkgKi8KKworCitzdGF0aWMgV0NfSU5MSU5FIHdvcmQxNiBHZXRSYW5kb21Qb3J0KHZvaWQpCit7CisgICAgd29yZDE2IHBvcnQgPSAwOworCisgICAgLyogR2VuZXJhdGUgcmFuZG9tIHBvcnQgZm9yIHRlc3RpbmcgKi8KKyAgICBXQ19STkcgcm5nOworICAgIGlmICh3Y19Jbml0Um5nKCZybmcpID09IDApIHsKKyAgICAgICAgaWYgKHdjX1JOR19HZW5lcmF0ZUJsb2NrKCZybmcsIChieXRlKikmcG9ydCwgc2l6ZW9mKHBvcnQpKSA9PSAwKSB7CisgICAgICAgICAgICBwb3J0IHw9IDB4QzAwMDsgLyogTWFrZSBzdXJlIGl0cyBpbiB0aGUgNDkxNTIgLSA2NTUzNSByYW5nZSAqLworICAgICAgICB9CisgICAgICAgIHdjX0ZyZWVSbmcoJnJuZyk7CisgICAgfQorICAgICh2b2lkKXJuZzsgLyogZm9yIFdDX05PX1JORyBjYXNlICovCisgICAgcmV0dXJuIHBvcnQ7Cit9CisKKyNpZmRlZiBXT0xGU1NMX0VBUkxZX0RBVEEKK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBFYXJseURhdGFTdGF0dXMoV09MRlNTTCogc3NsKQoreworICAgIGludCBlYXJseURhdGFfc3RhdHVzOworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgICBlYXJseURhdGFfc3RhdHVzID0gU1NMX2dldF9lYXJseV9kYXRhX3N0YXR1cyhzc2wpOworI2Vsc2UKKyAgICBlYXJseURhdGFfc3RhdHVzID0gd29sZlNTTF9nZXRfZWFybHlfZGF0YV9zdGF0dXMoc3NsKTsKKyNlbmRpZgorICAgIGlmIChlYXJseURhdGFfc3RhdHVzIDwgMCkgcmV0dXJuOworICAgIAorICAgIHByaW50ZigiRWFybHkgRGF0YSB3YXMgIik7CisgICAgCisgICAgc3dpdGNoKGVhcmx5RGF0YV9zdGF0dXMpIHsKKyAgICAgICAgY2FzZSBXT0xGU1NMX0VBUkxZX0RBVEFfTk9UX1NFTlQ6CisgICAgICAgICAgICAgICAgcHJpbnRmKCJub3Qgc2VudC5cbiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdPTEZTU0xfRUFSTFlfREFUQV9SRUpFQ1RFRDoKKyAgICAgICAgICAgICAgICBwcmludGYoInJlamVjdGVkLlxuIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV09MRlNTTF9FQVJMWV9EQVRBX0FDQ0VQVEVEOgorICAgICAgICAgICAgICAgIHByaW50ZigiYWNjZXB0ZWRcbiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHByaW50ZigidW5rbm93bi4uLlxuIik7CisgICAgfQorfQorI2VuZGlmIC8qIFdPTEZTU0xfRUFSTFlfREFUQSAqLworCisjZW5kaWYgLyogd29sZlNTTF9URVNUX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3ZlcnNpb24uaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFmNTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvdmVyc2lvbi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIHdvbGZzc2xfdmVyc2lvbi5oLmluCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaWZuZGVmIFdPTEZTU0xfVkVSU0lPTl9ICisjZGVmaW5lIFdPTEZTU0xfVkVSU0lPTl9ICisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIExJQldPTEZTU0xfVkVSU0lPTl9TVFJJTkcgIjQuOC4xIgorI2RlZmluZSBMSUJXT0xGU1NMX1ZFUlNJT05fSEVYIDB4MDQwMDgwMDEKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogV09MRlNTTF9WRVJTSU9OX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2Flcy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2Flcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTA4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvYWVzLmgKQEAgLTAsMCArMSw1MDUgQEAKKy8qIGFlcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvYWVzLmgKKyovCisvKgorCitERVNDUklQVElPTgorVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHRoZSBpbnRlcmZhY2VzIHRvIHRoZSBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkIChBRVMpCitmb3IgZW5jcnlwdGluZyBhbmQgZGVjcnlwdGluZyBkYXRhLiBBRVMgaXMgdGhlIHN0YW5kYXJkIGtub3duIGZvciBhIHN5bW1ldHJpYworYmxvY2sgY2lwaGVyIG1lY2hhbmlzbSB0aGF0IHVzZXMgbi1iaXQgYmluYXJ5IHN0cmluZyBwYXJhbWV0ZXIga2V5IHdpdGggMTI4LWJpdHMsCisxOTItYml0cywgYW5kIDI1Ni1iaXRzIG9mIGtleSBzaXplcy4KKworKi8KKyNpZm5kZWYgV09MRl9DUllQVF9BRVNfSAorI2RlZmluZSBXT0xGX0NSWVBUX0FFU19ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZuZGVmIE5PX0FFUworCisjaWYgZGVmaW5lZChIQVZFX0ZJUFMpICYmIFwKKyAgICBkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiAoSEFWRV9GSVBTX1ZFUlNJT04gPj0gMikKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZmlwcy5oPgorI2VuZGlmIC8qIEhBVkVfRklQU19WRVJTSU9OID49IDIgKi8KKworLyogaW5jbHVkZWQgZm9yIGZpcHMgQHdjX2ZpcHMgKi8KKyNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorICAgICghZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgfHwgKEhBVkVfRklQU19WRVJTSU9OIDwgMikpCisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9hZXMuaD4KKyNpZiBkZWZpbmVkKENZQVNTTF9BRVNfQ09VTlRFUikgJiYgIWRlZmluZWQoV09MRlNTTF9BRVNfQ09VTlRFUikKKyAgICAjZGVmaW5lIFdPTEZTU0xfQUVTX0NPVU5URVIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFdPTEZTU0xfQUVTX0RJUkVDVCkgJiYgZGVmaW5lZChDWUFTU0xfQUVTX0RJUkVDVCkKKyAgICAjZGVmaW5lIFdPTEZTU0xfQUVTX0RJUkVDVAorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBXQ19OT19STkcKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcmFuZG9tLmg+CisjZW5kaWYKKyNpZmRlZiBTVE0zMl9DUllQVE8KKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcG9ydC9zdC9zdG0zMi5oPgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0lNWFJUX0RDUAorICAgICNpbmNsdWRlICJmc2xfZGNwLmgiCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfWElMSU5YX0NSWVBUCisjaW5jbHVkZSAieHNlY3VyZV9hZXMuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX0FGQUxHKSB8fCBkZWZpbmVkKFdPTEZTU0xfQUZBTEdfWElMSU5YX0FFUykKKy8qIGluY2x1ZGVkIGZvciBzdHJ1Y3QgbXNnaGRyICovCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcG9ydC9hZl9hbGcvd2NfYWZhbGcuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX0RFVkNSWVBUT19BRVMpIHx8IGRlZmluZWQoV09MRlNTTF9ERVZDUllQVE9fQ0JDKQorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvZGV2Y3J5cHRvL3djX2RldmNyeXB0by5oPgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1NJTEFCU19TRV9BQ0NFTAorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9wb3J0L3NpbGFicy9zaWxhYnNfYWVzLmg+CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChIQVZFX0FFU0dDTSkgJiYgIWRlZmluZWQoV0NfTk9fUk5HKQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9yYW5kb20uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX0NSWVBUT0NFTEwpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvYXJtL2NyeXB0b0NlbGwuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX1JFTkVTQVNfVFNJUF9UTFMpICYmIFwKKyAgICBkZWZpbmVkKFdPTEZTU0xfUkVORVNBU19UU0lQX1RMU19BRVNfQ1JZUFQpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvUmVuZXNhcy9yZW5lc2FzLXRzaXAtY3J5cHQuaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZuZGVmIFdPTEZTU0xfQUVTX0tFWV9TSVpFX0VOVU0KKyNkZWZpbmUgV09MRlNTTF9BRVNfS0VZX1NJWkVfRU5VTQorLyogdGhlc2UgYXJlIHJlcXVpcmVkIGZvciBGSVBTIGFuZCBub24tRklQUyAqLworZW51bSB7CisgICAgQUVTXzEyOF9LRVlfU0laRSAgICA9IDE2LCAgLyogZm9yIDEyOCBiaXQgICAgICAgICAgICAgKi8KKyAgICBBRVNfMTkyX0tFWV9TSVpFICAgID0gMjQsICAvKiBmb3IgMTkyIGJpdCAgICAgICAgICAgICAqLworICAgIEFFU18yNTZfS0VZX1NJWkUgICAgPSAzMiwgIC8qIGZvciAyNTYgYml0ICAgICAgICAgICAgICovCisKKyAgICBBRVNfSVZfU0laRSAgICAgICAgID0gMTYsICAvKiBhbHdheXMgYmxvY2sgc2l6ZSAgICAgICAqLworfTsKKyNlbmRpZgorCisvKiBhdm9pZCByZWRlZmluaXRpb24gb2Ygc3RydWN0cyAqLworI2lmICFkZWZpbmVkKEhBVkVfRklQUykgfHwgXAorICAgIChkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiAoSEFWRV9GSVBTX1ZFUlNJT04gPj0gMikpCisKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2FzeW5jLmg+CisjZW5kaWYKKworZW51bSB7CisgICAgQUVTX0VOQ19UWVBFICAgPSBXQ19DSVBIRVJfQUVTLCAgIC8qIGNpcGhlciB1bmlxdWUgdHlwZSAqLworICAgIEFFU19FTkNSWVBUSU9OID0gMCwKKyAgICBBRVNfREVDUllQVElPTiA9IDEsCisKKyAgICBBRVNfQkxPQ0tfU0laRSAgICAgID0gMTYsCisKKyAgICBLRVlXUkFQX0JMT0NLX1NJWkUgID0gOCwKKworICAgIEdDTV9OT05DRV9NQVhfU1ogPSAxNiwgLyogd29sZkNyeXB0J3MgbWF4aW11bSBub25jZSBzaXplIGFsbG93ZWQuICovCisgICAgR0NNX05PTkNFX01JRF9TWiA9IDEyLCAvKiBUaGUgdXN1YWwgZGVmYXVsdCBub25jZSBzaXplIGZvciBBRVMtR0NNLiAqLworICAgIEdDTV9OT05DRV9NSU5fU1ogPSA4LCAgLyogd29sZkNyeXB0J3MgbWluaW11bSBub25jZSBzaXplIGFsbG93ZWQuICovCisgICAgQ0NNX05PTkNFX01JTl9TWiA9IDcsCisgICAgQ0NNX05PTkNFX01BWF9TWiA9IDEzLAorICAgIENUUl9TWiAgID0gNCwKKyAgICBBRVNfSVZfRklYRURfU1ogPSA0LAorI2lmZGVmIFdPTEZTU0xfQUVTX0NGQgorICAgIEFFU19DRkJfTU9ERSA9IDEsCisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0FFU19PRkIKKyAgICBBRVNfT0ZCX01PREUgPSAyLAorI2VuZGlmCisjaWZkZWYgV09MRlNTTF9BRVNfWFRTCisgICAgQUVTX1hUU19NT0RFID0gMywKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9QS0NTMTEKKyAgICBBRVNfTUFYX0lEX0xFTiAgICAgID0gMzIsCisgICAgQUVTX01BWF9MQUJFTF9MRU4gICA9IDMyLAorI2VuZGlmCit9OworCisKK3N0cnVjdCBBZXMgeworICAgIC8qIEFFU05JIG5lZWRzIGtleSBmaXJzdCwgcm91bmRzIDJuZCwgbm90IHN1cmUgd2h5IHlldCAqLworICAgIEFMSUdOMTYgd29yZDMyIGtleVs2MF07CisgICAgd29yZDMyICByb3VuZHM7CisgICAgaW50ICAgICBrZXlsZW47CisKKyAgICBBTElHTjE2IHdvcmQzMiByZWdbQUVTX0JMT0NLX1NJWkUgLyBzaXplb2Yod29yZDMyKV07ICAgICAgLyogZm9yIENCQyBtb2RlICovCisgICAgQUxJR04xNiB3b3JkMzIgdG1wW0FFU19CTE9DS19TSVpFIC8gc2l6ZW9mKHdvcmQzMildOyAgICAgIC8qIHNhbWUgICAgICAgICAqLworCisjaWYgZGVmaW5lZChIQVZFX0FFU0dDTSkgfHwgZGVmaW5lZChIQVZFX0FFU0NDTSkKKyAgICB3b3JkMzIgaW52b2tlQ3RyWzJdOworICAgIHdvcmQzMiBub25jZVN6OworI2VuZGlmCisjaWZkZWYgSEFWRV9BRVNHQ00KKyAgICBBTElHTjE2IGJ5dGUgSFtBRVNfQkxPQ0tfU0laRV07CisjaWZkZWYgT1BFTlNTTF9FWFRSQQorICAgIHdvcmQzMiBhYWRIWzRdOyAvKiBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0ZWQgZGF0YSBHSEFTSCAqLworICAgIHdvcmQzMiBhYWRMZW47ICAvKiBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0ZWQgZGF0YSBsZW4gKi8KKyNlbmRpZgorCisjaWZkZWYgR0NNX1RBQkxFCisgICAgLyoga2V5LWJhc2VkIGZhc3QgbXVsdGlwbGljYXRpb24gdGFibGUuICovCisgICAgQUxJR04xNiBieXRlIE0wWzI1Nl1bQUVTX0JMT0NLX1NJWkVdOworI2VsaWYgZGVmaW5lZChHQ01fVEFCTEVfNEJJVCkKKyAgICAjaWYgZGVmaW5lZChCSUdfRU5ESUFOX09SREVSKSB8fCBkZWZpbmVkKFdDXzE2QklUX0NQVSkKKyAgICAgICAgQUxJR04xNiBieXRlIE0wWzE2XVtBRVNfQkxPQ0tfU0laRV07CisgICAgI2Vsc2UKKyAgICAgICAgQUxJR04xNiBieXRlIE0wWzMyXVtBRVNfQkxPQ0tfU0laRV07CisgICAgI2VuZGlmCisjZW5kaWYgLyogR0NNX1RBQkxFICovCisjaWZkZWYgSEFWRV9DQVZJVU1fT0NURU9OX1NZTkMKKyAgICB3b3JkMzIgeTA7CisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0FFU0dDTSAqLworI2lmZGVmIFdPTEZTU0xfQUVTTkkKKyAgICBieXRlIHVzZV9hZXNuaTsKKyNlbmRpZiAvKiBXT0xGU1NMX0FFU05JICovCisjaWZkZWYgV09MRl9DUllQVE9fQ0IKKyAgICBpbnQgICAgZGV2SWQ7CisgICAgdm9pZCogIGRldkN0eDsKKyNlbmRpZgorI2lmZGVmIEhBVkVfUEtDUzExCisgICAgYnl0ZSBpZFtBRVNfTUFYX0lEX0xFTl07CisgICAgaW50ICBpZExlbjsKKyAgICBjaGFyIGxhYmVsW0FFU19NQVhfTEFCRUxfTEVOXTsKKyAgICBpbnQgIGxhYmVsTGVuOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIFdDX0FTWU5DX0RFViBhc3luY0RldjsKKyNlbmRpZiAvKiBXT0xGU1NMX0FTWU5DX0NSWVBUICovCisjaWYgZGVmaW5lZChXT0xGU1NMX0FFU19DT1VOVEVSKSB8fCBkZWZpbmVkKFdPTEZTU0xfQUVTX0NGQikgfHwgXAorICAgIGRlZmluZWQoV09MRlNTTF9BRVNfT0ZCKSB8fCBkZWZpbmVkKFdPTEZTU0xfQUVTX1hUUykKKyAgICB3b3JkMzIgIGxlZnQ7ICAgICAgICAgICAgLyogdW51c2VkIGJ5dGVzIGxlZnQgZnJvbSBsYXN0IGNhbGwgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfWElMSU5YX0NSWVBUCisgICAgWFNlY3VyZV9BZXMgeGlsQWVzOworICAgIFhDc3VEbWEgICAgIGRtYTsKKyAgICB3b3JkMzIgICAgICBrZXlfaW5pdFs4XTsKKyAgICB3b3JkMzIgICAgICBrdXA7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQUZBTEcpIHx8IGRlZmluZWQoV09MRlNTTF9BRkFMR19YSUxJTlhfQUVTKQorICAgIGludCBhbEZkOyAvKiBzZXJ2ZXIgc29ja2V0IHRvIGJpbmQgdG8gKi8KKyAgICBpbnQgcmRGZDsgLyogc29ja2V0IHRvIHJlYWQgZnJvbSAqLworICAgIHN0cnVjdCBtc2doZHIgbXNnOworICAgIGludCBkaXI7ICAvKiBmbGFnIGZvciBlbmNycHl0IG9yIGRlY3J5cHQgKi8KKyNpZmRlZiBXT0xGU1NMX0FGQUxHX1hJTElOWF9BRVMKKyAgICB3b3JkMzIgbXNnQnVmW0NNU0dfU1BBQ0UoNCkgKyBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgYWZfYWxnX2l2KSArCisgICAgICAgICAgICAgICAgICBHQ01fTk9OQ0VfTUlEX1NaKV07CisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRl9DUllQVE9fQ0IpIHx8IChkZWZpbmVkKFdPTEZTU0xfREVWQ1JZUFRPKSAmJiBcCisgICAgKGRlZmluZWQoV09MRlNTTF9ERVZDUllQVE9fQUVTKSB8fCBkZWZpbmVkKFdPTEZTU0xfREVWQ1JZUFRPX0NCQykpKSB8fCBcCisgICAgKGRlZmluZWQoV09MRlNTTF9BU1lOQ19DUllQVCkgJiYgZGVmaW5lZChXQ19BU1lOQ19FTkFCTEVfQUVTKSkKKyAgICB3b3JkMzIgZGV2S2V5W0FFU19NQVhfS0VZX1NJWkUvV09MRlNTTF9CSVRfU0laRS9zaXplb2Yod29yZDMyKV07IC8qIHJhdyBrZXkgKi8KKyNpZmRlZiBIQVZFX0NBVklVTV9PQ1RFT05fU1lOQworICAgIGludCAgICBrZXlTZXQ7CisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9ERVZDUllQVE8pICYmIFwKKyAgICAoZGVmaW5lZChXT0xGU1NMX0RFVkNSWVBUT19BRVMpIHx8IGRlZmluZWQoV09MRlNTTF9ERVZDUllQVE9fQ0JDKSkKKyAgICBXQ19DUllQVE9ERVYgY3R4OworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0NSWVBUT0NFTEwpCisgICAgYWVzX2NvbnRleHRfdCBjdHg7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfUkVORVNBU19UU0lQX1RMUykgJiYgXAorICAgIGRlZmluZWQoV09MRlNTTF9SRU5FU0FTX1RTSVBfVExTX0FFU19DUllQVCkKKyAgICBUU0lQX0FFU19DVFggY3R4OworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0lNWFJUX0RDUCkKKyAgICBkY3BfaGFuZGxlX3QgaGFuZGxlOworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX1NJTEFCU19TRV9BQ0NFTCkKKyAgICBzaWxhYnNfYWVzX3QgY3R4OworI2VuZGlmCisgICAgdm9pZCogIGhlYXA7IC8qIG1lbW9yeSBoaW50IHRvIHVzZSAqLworI2lmZGVmIFdPTEZTU0xfQUVTR0NNX1NUUkVBTQorI2lmICFkZWZpbmVkKFdPTEZTU0xfU01BTExfU1RBQ0spIHx8IGRlZmluZWQoV09MRlNTTF9BRVNOSSkKKyAgICBBTElHTjE2IGJ5dGUgc3RyZWFtRGF0YVs1ICogQUVTX0JMT0NLX1NJWkVdOworI2Vsc2UKKyAgICBieXRlKiAgICAgICAgc3RyZWFtRGF0YTsKKyNlbmRpZgorICAgIHdvcmQzMiAgICAgICBhU3o7CisgICAgd29yZDMyICAgICAgIGNTejsKKyAgICBieXRlICAgICAgICAgb3ZlcjsKKyAgICBieXRlICAgICAgICAgYU92ZXI7CisgICAgYnl0ZSAgICAgICAgIGNPdmVyOworICAgIGJ5dGUgICAgICAgICBnY21LZXlTZXQ6MTsKKyAgICBieXRlICAgICAgICAgbm9uY2VTZXQ6MTsKKyAgICBieXRlICAgICAgICAgY3RyU2V0OjE7CisjZW5kaWYKK307CisKKyNpZm5kZWYgV0NfQUVTX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IEFlcyBBZXM7CisgICAgI2RlZmluZSBXQ19BRVNfVFlQRV9ERUZJTkVECisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfQUVTX1hUUwordHlwZWRlZiBzdHJ1Y3QgWHRzQWVzIHsKKyAgICBBZXMgYWVzOworICAgIEFlcyB0d2VhazsKK30gWHRzQWVzOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0FFU0dDTQordHlwZWRlZiBzdHJ1Y3QgR21hYyB7CisgICAgQWVzIGFlczsKK30gR21hYzsKKyNlbmRpZiAvKiBIQVZFX0FFU0dDTSAqLworI2VuZGlmIC8qIEhBVkVfRklQUyAqLworCisKKy8qIEF1dGhlbnRpY2F0ZSBjaXBoZXIgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwordHlwZWRlZiBpbnQgKCp3Y19BZXNBdXRoRW5jcnlwdEZ1bmMpKEFlcyogYWVzLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGl2LCB3b3JkMzIgaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogYXV0aFRhZywgd29yZDMyIGF1dGhUYWdTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aEluLCB3b3JkMzIgYXV0aEluU3opOwordHlwZWRlZiBpbnQgKCp3Y19BZXNBdXRoRGVjcnlwdEZ1bmMpKEFlcyogYWVzLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGl2LCB3b3JkMzIgaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aFRhZywgd29yZDMyIGF1dGhUYWdTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aEluLCB3b3JkMzIgYXV0aEluU3opOworCisvKiBBRVMtQ0JDICovCitXT0xGU1NMX0FQSSBpbnQgIHdjX0Flc1NldEtleShBZXMqIGFlcywgY29uc3QgYnl0ZSoga2V5LCB3b3JkMzIgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaXYsIGludCBkaXIpOworV09MRlNTTF9BUEkgaW50ICB3Y19BZXNTZXRJVihBZXMqIGFlcywgY29uc3QgYnl0ZSogaXYpOworCisjaWZkZWYgSEFWRV9BRVNfQ0JDCitXT0xGU1NMX0FQSSBpbnQgIHdjX0Flc0NiY0VuY3J5cHQoQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfQWVzQ2JjRGVjcnlwdChBZXMqIGFlcywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3opOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0FFU19DRkIKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNDZmJFbmNyeXB0KEFlcyogYWVzLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNDZmIxRW5jcnlwdChBZXMqIGFlcywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfQWVzQ2ZiOEVuY3J5cHQoQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3opOworI2lmZGVmIEhBVkVfQUVTX0RFQ1JZUFQKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNDZmJEZWNyeXB0KEFlcyogYWVzLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNDZmIxRGVjcnlwdChBZXMqIGFlcywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfQWVzQ2ZiOERlY3J5cHQoQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3opOworI2VuZGlmIC8qIEhBVkVfQUVTX0RFQ1JZUFQgKi8KKyNlbmRpZiAvKiBXT0xGU1NMX0FFU19DRkIgKi8KKworI2lmZGVmIFdPTEZTU0xfQUVTX09GQgorV09MRlNTTF9BUEkgaW50IHdjX0Flc09mYkVuY3J5cHQoQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3opOworI2lmZGVmIEhBVkVfQUVTX0RFQ1JZUFQKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNPZmJEZWNyeXB0KEFlcyogYWVzLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6KTsKKyNlbmRpZiAvKiBIQVZFX0FFU19ERUNSWVBUICovCisjZW5kaWYgLyogV09MRlNTTF9BRVNfT0ZCICovCisKKyNpZmRlZiBIQVZFX0FFU19FQ0IKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNFY2JFbmNyeXB0KEFlcyogYWVzLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfQWVzRWNiRGVjcnlwdChBZXMqIGFlcywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3opOworI2VuZGlmCisKKy8qIEFFUy1DVFIgKi8KKyNpZmRlZiBXT0xGU1NMX0FFU19DT1VOVEVSCisgV09MRlNTTF9BUEkgaW50IHdjX0Flc0N0ckVuY3J5cHQoQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeik7CisjZW5kaWYKKy8qIEFFUy1ESVJFQ1QgKi8KKyNpZiBkZWZpbmVkKFdPTEZTU0xfQUVTX0RJUkVDVCkKKyBXT0xGU1NMX0FQSSB2b2lkIHdjX0Flc0VuY3J5cHREaXJlY3QoQWVzKiBhZXMsIGJ5dGUqIG91dCwgY29uc3QgYnl0ZSogaW4pOworIFdPTEZTU0xfQVBJIHZvaWQgd2NfQWVzRGVjcnlwdERpcmVjdChBZXMqIGFlcywgYnl0ZSogb3V0LCBjb25zdCBieXRlKiBpbik7CisgV09MRlNTTF9BUEkgaW50ICB3Y19BZXNTZXRLZXlEaXJlY3QoQWVzKiBhZXMsIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaXYsIGludCBkaXIpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0FFU0dDTQorI2lmZGVmIFdPTEZTU0xfWElMSU5YX0NSWVBUCisgV09MRlNTTF9BUEkgaW50ICB3Y19BZXNHY21TZXRLZXlfZXgoQWVzKiBhZXMsIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGxlbiwKKyAgICAgICAgIHdvcmQzMiBrdXApOworI2VsaWYgZGVmaW5lZChXT0xGU1NMX0FGQUxHX1hJTElOWF9BRVMpCisgV09MRlNTTF9MT0NBTCBpbnQgIHdjX0Flc0djbVNldEtleV9leChBZXMqIGFlcywgY29uc3QgYnl0ZSoga2V5LCB3b3JkMzIgbGVuLAorICAgICAgICAgd29yZDMyIGt1cCk7CisjZW5kaWYKKyBXT0xGU1NMX0FQSSBpbnQgIHdjX0Flc0djbVNldEtleShBZXMqIGFlcywgY29uc3QgYnl0ZSoga2V5LCB3b3JkMzIgbGVuKTsKKyBXT0xGU1NMX0FQSSBpbnQgIHdjX0Flc0djbUVuY3J5cHQoQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaXYsIHdvcmQzMiBpdlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBhdXRoVGFnLCB3b3JkMzIgYXV0aFRhZ1N6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBhdXRoSW4sIHdvcmQzMiBhdXRoSW5Teik7CisgV09MRlNTTF9BUEkgaW50ICB3Y19BZXNHY21EZWNyeXB0KEFlcyogYWVzLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGl2LCB3b3JkMzIgaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aFRhZywgd29yZDMyIGF1dGhUYWdTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aEluLCB3b3JkMzIgYXV0aEluU3opOworI2lmZGVmIFdPTEZTU0xfQUVTR0NNX1NUUkVBTQorV09MRlNTTF9BUEkgaW50IHdjX0Flc0djbUluaXQoQWVzKiBhZXMsIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGxlbiwKKyAgICAgICAgY29uc3QgYnl0ZSogaXYsIHdvcmQzMiBpdlN6KTsKKworV09MRlNTTF9BUEkgaW50IHdjX0Flc0djbUVuY3J5cHRJbml0KEFlcyogYWVzLCBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBsZW4sCisgICAgICAgIGNvbnN0IGJ5dGUqIGl2LCB3b3JkMzIgaXZTeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfQWVzR2NtRW5jcnlwdEluaXRfZXgoQWVzKiBhZXMsIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGxlbiwKKyAgICAgICAgYnl0ZSogaXZPdXQsIHdvcmQzMiBpdk91dFN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNHY21FbmNyeXB0VXBkYXRlKEFlcyogYWVzLCBieXRlKiBvdXQsIGNvbnN0IGJ5dGUqIGluLAorICAgICAgICB3b3JkMzIgc3osIGNvbnN0IGJ5dGUqIGF1dGhJbiwgd29yZDMyIGF1dGhJblN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNHY21FbmNyeXB0RmluYWwoQWVzKiBhZXMsIGJ5dGUqIGF1dGhUYWcsCisgICAgICAgIHdvcmQzMiBhdXRoVGFnU3opOworCitXT0xGU1NMX0FQSSBpbnQgd2NfQWVzR2NtRGVjcnlwdEluaXQoQWVzKiBhZXMsIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGxlbiwKKyAgICAgICAgY29uc3QgYnl0ZSogaXYsIHdvcmQzMiBpdlN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNHY21EZWNyeXB0VXBkYXRlKEFlcyogYWVzLCBieXRlKiBvdXQsIGNvbnN0IGJ5dGUqIGluLAorICAgICAgICB3b3JkMzIgc3osIGNvbnN0IGJ5dGUqIGF1dGhJbiwgd29yZDMyIGF1dGhJblN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNHY21EZWNyeXB0RmluYWwoQWVzKiBhZXMsIGNvbnN0IGJ5dGUqIGF1dGhUYWcsCisgICAgICAgIHdvcmQzMiBhdXRoVGFnU3opOworI2VuZGlmCisKKyNpZm5kZWYgV0NfTk9fUk5HCisgV09MRlNTTF9BUEkgaW50ICB3Y19BZXNHY21TZXRFeHRJVihBZXMqIGFlcywgY29uc3QgYnl0ZSogaXYsIHdvcmQzMiBpdlN6KTsKKyBXT0xGU1NMX0FQSSBpbnQgIHdjX0Flc0djbVNldElWKEFlcyogYWVzLCB3b3JkMzIgaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaXZGaXhlZCwgd29yZDMyIGl2Rml4ZWRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0NfUk5HKiBybmcpOworIFdPTEZTU0xfQVBJIGludCAgd2NfQWVzR2NtRW5jcnlwdF9leChBZXMqIGFlcywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBpdk91dCwgd29yZDMyIGl2T3V0U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIGF1dGhUYWcsIHdvcmQzMiBhdXRoVGFnU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGF1dGhJbiwgd29yZDMyIGF1dGhJblN6KTsKKyNlbmRpZiAvKiBXQ19OT19STkcgKi8KKworIFdPTEZTU0xfQVBJIGludCB3Y19HbWFjU2V0S2V5KEdtYWMqIGdtYWMsIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGxlbik7CisgV09MRlNTTF9BUEkgaW50IHdjX0dtYWNVcGRhdGUoR21hYyogZ21hYywgY29uc3QgYnl0ZSogaXYsIHdvcmQzMiBpdlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGF1dGhJbiwgd29yZDMyIGF1dGhJblN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIGF1dGhUYWcsIHdvcmQzMiBhdXRoVGFnU3opOworI2lmbmRlZiBXQ19OT19STkcKKyBXT0xGU1NMX0FQSSBpbnQgd2NfR21hYyhjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwgYnl0ZSogaXYsIHdvcmQzMiBpdlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGF1dGhJbiwgd29yZDMyIGF1dGhJblN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIGF1dGhUYWcsIHdvcmQzMiBhdXRoVGFnU3osIFdDX1JORyogcm5nKTsKKyBXT0xGU1NMX0FQSSBpbnQgd2NfR21hY1ZlcmlmeShjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpdiwgd29yZDMyIGl2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aEluLCB3b3JkMzIgYXV0aEluU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aFRhZywgd29yZDMyIGF1dGhUYWdTeik7CisjZW5kaWYgLyogV0NfTk9fUk5HICovCisgV09MRlNTTF9MT0NBTCB2b2lkIEdIQVNIKEFlcyogYWVzLCBjb25zdCBieXRlKiBhLCB3b3JkMzIgYVN6LCBjb25zdCBieXRlKiBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBjU3osIGJ5dGUqIHMsIHdvcmQzMiBzU3opOworI2VuZGlmIC8qIEhBVkVfQUVTR0NNICovCisjaWZkZWYgSEFWRV9BRVNDQ00KKyBXT0xGU1NMX0xPQ0FMIGludCB3Y19BZXNDY21DaGVja1RhZ1NpemUoaW50IHN6KTsKKyBXT0xGU1NMX0FQSSBpbnQgIHdjX0Flc0NjbVNldEtleShBZXMqIGFlcywgY29uc3QgYnl0ZSoga2V5LCB3b3JkMzIga2V5U3opOworIFdPTEZTU0xfQVBJIGludCAgd2NfQWVzQ2NtRW5jcnlwdChBZXMqIGFlcywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIGluU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIG5vbmNlLCB3b3JkMzIgbm9uY2VTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogYXV0aFRhZywgd29yZDMyIGF1dGhUYWdTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aEluLCB3b3JkMzIgYXV0aEluU3opOworIFdPTEZTU0xfQVBJIGludCAgd2NfQWVzQ2NtRGVjcnlwdChBZXMqIGFlcywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIGluU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIG5vbmNlLCB3b3JkMzIgbm9uY2VTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aFRhZywgd29yZDMyIGF1dGhUYWdTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aEluLCB3b3JkMzIgYXV0aEluU3opOworIFdPTEZTU0xfQVBJIGludCAgd2NfQWVzQ2NtU2V0Tm9uY2UoQWVzKiBhZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIG5vbmNlLCB3b3JkMzIgbm9uY2VTeik7CisgV09MRlNTTF9BUEkgaW50ICB3Y19BZXNDY21FbmNyeXB0X2V4KEFlcyogYWVzLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIGl2T3V0LCB3b3JkMzIgaXZPdXRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogYXV0aFRhZywgd29yZDMyIGF1dGhUYWdTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aEluLCB3b3JkMzIgYXV0aEluU3opOworI2VuZGlmIC8qIEhBVkVfQUVTQ0NNICovCisjaWZkZWYgSEFWRV9BRVNfS0VZV1JBUAorIFdPTEZTU0xfQVBJIGludCAgd2NfQWVzS2V5V3JhcChjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpblN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXQsIHdvcmQzMiBvdXRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaXYpOworIFdPTEZTU0xfQVBJIGludCAgd2NfQWVzS2V5V3JhcF9leChBZXMgKmFlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpblN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXQsIHdvcmQzMiBvdXRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaXYpOworIFdPTEZTU0xfQVBJIGludCAgd2NfQWVzS2V5VW5XcmFwKGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGtleVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIGluU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG91dCwgd29yZDMyIG91dFN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpdik7CisgV09MRlNTTF9BUEkgaW50ICB3Y19BZXNLZXlVbldyYXBfZXgoQWVzICphZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5TeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogb3V0LCB3b3JkMzIgb3V0U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGl2KTsKKyNlbmRpZiAvKiBIQVZFX0FFU19LRVlXUkFQICovCisKKyNpZmRlZiBXT0xGU1NMX0FFU19YVFMKKworV09MRlNTTF9BUEkgaW50IHdjX0Flc1h0c1NldEtleShYdHNBZXMqIGFlcywgY29uc3QgYnl0ZSoga2V5LAorICAgICAgICAgd29yZDMyIGxlbiwgaW50IGRpciwgdm9pZCogaGVhcCwgaW50IGRldklkKTsKKworV09MRlNTTF9BUEkgaW50IHdjX0Flc1h0c0VuY3J5cHRTZWN0b3IoWHRzQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3osIHdvcmQ2NCBzZWN0b3IpOworCitXT0xGU1NMX0FQSSBpbnQgd2NfQWVzWHRzRGVjcnlwdFNlY3RvcihYdHNBZXMqIGFlcywgYnl0ZSogb3V0LAorICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeiwgd29yZDY0IHNlY3Rvcik7CisKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNYdHNFbmNyeXB0KFh0c0FlcyogYWVzLCBieXRlKiBvdXQsCisgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6LCBjb25zdCBieXRlKiBpLCB3b3JkMzIgaVN6KTsKKworV09MRlNTTF9BUEkgaW50IHdjX0Flc1h0c0RlY3J5cHQoWHRzQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeiwgY29uc3QgYnl0ZSogaSwgd29yZDMyIGlTeik7CisKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNYdHNGcmVlKFh0c0FlcyogYWVzKTsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSBpbnQgd2NfQWVzR2V0S2V5U2l6ZShBZXMqIGFlcywgd29yZDMyKiBrZXlTaXplKTsKKworV09MRlNTTF9BUEkgaW50ICB3Y19BZXNJbml0KEFlcyogYWVzLCB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworI2lmZGVmIEhBVkVfUEtDUzExCitXT0xGU1NMX0FQSSBpbnQgIHdjX0Flc0luaXRfSWQoQWVzKiBhZXMsIHVuc2lnbmVkIGNoYXIqIGlkLCBpbnQgbGVuLCB2b2lkKiBoZWFwLAorICAgICAgICBpbnQgZGV2SWQpOworV09MRlNTTF9BUEkgaW50ICB3Y19BZXNJbml0X0xhYmVsKEFlcyogYWVzLCBjb25zdCBjaGFyKiBsYWJlbCwgdm9pZCogaGVhcCwKKyAgICAgICAgaW50IGRldklkKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgdm9pZCB3Y19BZXNGcmVlKEFlcyogYWVzKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworCisjZW5kaWYgLyogTk9fQUVTICovCisjZW5kaWYgLyogV09MRl9DUllQVF9BRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2FyYzQuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9hcmM0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMWY1YwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9hcmM0LmgKQEAgLTAsMCArMSw2OCBAQAorLyogYXJjNC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvYXJjNC5oCisqLworCisjaWZuZGVmIFdPTEZfQ1JZUFRfQVJDNF9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfQVJDNF9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc3luYy5oPgorI2VuZGlmCisKK2VudW0geworCUFSQzRfRU5DX1RZUEUgICA9IDQsICAgIC8qIGNpcGhlciB1bmlxdWUgdHlwZSAqLworICAgIEFSQzRfU1RBVEVfU0laRSA9IDI1NiwKKyAgICBSQzRfS0VZX1NJWkUgICAgPSAxNiwgICAvKiBhbHdheXMgMTI4Yml0ICAgICAgICAgICAqLworfTsKKworLyogQVJDNCBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uICovCit0eXBlZGVmIHN0cnVjdCBBcmM0IHsKKyAgICBieXRlIHg7CisgICAgYnl0ZSB5OworICAgIGJ5dGUgc3RhdGVbQVJDNF9TVEFURV9TSVpFXTsKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgV0NfQVNZTkNfREVWIGFzeW5jRGV2OworI2VuZGlmCisgICAgdm9pZCogaGVhcDsKK30gQXJjNDsKKworV09MRlNTTF9BUEkgaW50IHdjX0FyYzRQcm9jZXNzKEFyYzQqLCBieXRlKiwgY29uc3QgYnl0ZSosIHdvcmQzMik7CitXT0xGU1NMX0FQSSBpbnQgd2NfQXJjNFNldEtleShBcmM0KiwgY29uc3QgYnl0ZSosIHdvcmQzMik7CisKK1dPTEZTU0xfQVBJIGludCAgd2NfQXJjNEluaXQoQXJjNCosIHZvaWQqLCBpbnQpOworV09MRlNTTF9BUEkgdm9pZCB3Y19BcmM0RnJlZShBcmM0Kik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfQVJDNF9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9hc24uaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9hc24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDZjYmJkCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2Fzbi5oCkBAIC0wLDAgKzEsMTU3NCBAQAorLyogYXNuLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL3dvbGZjcnlwdC9hc24uaAorKi8KKworLyoKKworREVTQ1JJUFRJT04KK1RoaXMgbGlicmFyeSBwcm92aWRlcyB0aGUgaW50ZXJmYWNlIHRvIEFic3RyYWN0IFN5bnRheCBOb3RhdGlvbiBPbmUgKEFTTi4xKSBvYmplY3RzLgorQVNOLjEgaXMgYSBzdGFuZGFyZCBpbnRlcmZhY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2UgZm9yIGRlZmluaW5nIGRhdGEgc3RydWN0dXJlcwordGhhdCBjYW4gYmUgc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkIGluIGEgY3Jvc3MtcGxhdGZvcm0gd2F5LgorCisqLworI2lmbmRlZiBXT0xGX0NSWVBUX0FTTl9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfQVNOX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZm5kZWYgTk9fQVNOCisKKworI2lmICFkZWZpbmVkKE5PX0FTTl9USU1FKSAmJiBkZWZpbmVkKE5PX1RJTUVfSCkKKyAgICAjZGVmaW5lIE5PX0FTTl9USU1FIC8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggTk9fVElNRV9IICovCisjZW5kaWYKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ludGVnZXIuaD4KKworLyogZmlwcyBkZWNsYXJlIG9mIFJzYVByaXZhdGVLZXlEZWNvZGUgQHdjX2ZpcHMgKi8KKyNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQoTk9fUlNBKSAmJiBcCisJKCFkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSB8fCAoSEFWRV9GSVBTX1ZFUlNJT04gPCAyKSkKKyAgICAjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9yc2EuaD4KKyNlbmRpZgorCisjaWZuZGVmIE5PX0RICisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2RoLmg+CisjZW5kaWYKKyNpZm5kZWYgTk9fRFNBCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2RzYS5oPgorI2VuZGlmCisjaWZuZGVmIE5PX1NIQQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zaGEuaD4KKyNlbmRpZgorI2lmbmRlZiBOT19NRDUKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvbWQ1Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zaGEyNTYuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc25fcHVibGljLmg+ICAgLyogcHVibGljIGludGVyZmFjZSAqLworCisjaWYgZGVmaW5lZChOT19TSEEpICYmIGRlZmluZWQoTk9fU0hBMjU2KQorICAgICNkZWZpbmUgV0NfU0hBMjU2X0RJR0VTVF9TSVpFIDMyCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiBFWFRFUk5BTF9TRVJJQUxfU0laRQorICAgICNkZWZpbmUgRVhURVJOQUxfU0VSSUFMX1NJWkUgMzIKKyNlbmRpZgorCitlbnVtIHsKKyAgICBJU1NVRVIgID0gMCwKKyAgICBTVUJKRUNUID0gMSwKKworICAgIEJFRk9SRSAgPSAwLAorICAgIEFGVEVSICAgPSAxCit9OworCisvKiBBU04gVGFncyAgICovCitlbnVtIEFTTl9UYWdzIHsKKyAgICBBU05fRU9DICAgICAgICAgICAgICAgPSAweDAwLAorICAgIEFTTl9CT09MRUFOICAgICAgICAgICA9IDB4MDEsCisgICAgQVNOX0lOVEVHRVIgICAgICAgICAgID0gMHgwMiwKKyAgICBBU05fQklUX1NUUklORyAgICAgICAgPSAweDAzLAorICAgIEFTTl9PQ1RFVF9TVFJJTkcgICAgICA9IDB4MDQsCisgICAgQVNOX1RBR19OVUxMICAgICAgICAgID0gMHgwNSwKKyAgICBBU05fT0JKRUNUX0lEICAgICAgICAgPSAweDA2LAorICAgIEFTTl9FTlVNRVJBVEVEICAgICAgICA9IDB4MGEsCisgICAgQVNOX1VURjhTVFJJTkcgICAgICAgID0gMHgwYywKKyAgICBBU05fU0VRVUVOQ0UgICAgICAgICAgPSAweDEwLAorICAgIEFTTl9TRVQgICAgICAgICAgICAgICA9IDB4MTEsCisgICAgQVNOX1BSSU5UQUJMRV9TVFJJTkcgID0gMHgxMywKKyAgICBBU05fSUE1X1NUUklORyAgICAgICAgPSAweDE2LAorICAgIEFTTl9VVENfVElNRSAgICAgICAgICA9IDB4MTcsCisgICAgQVNOX09USEVSX1RZUEUgICAgICAgID0gMHgwMCwKKyAgICBBU05fUkZDODIyX1RZUEUgICAgICAgPSAweDAxLAorICAgIEFTTl9ETlNfVFlQRSAgICAgICAgICA9IDB4MDIsCisgICAgQVNOX0RJUl9UWVBFICAgICAgICAgID0gMHgwNCwKKyAgICBBU05fVVJJX1RZUEUgICAgICAgICAgPSAweDA2LCAvKiB0aGUgdmFsdWUgNiBpcyBmcm9tIEdlbmVyYWxOYW1lIE9JRCAqLworICAgIEFTTl9JUF9UWVBFICAgICAgICAgICA9IDB4MDcsIC8qIHRoZSB2YWx1ZSA3IGlzIGZyb20gR2VuZXJhbE5hbWUgT0lEICovCisgICAgQVNOX0dFTkVSQUxJWkVEX1RJTUUgID0gMHgxOCwKKyAgICBDUkxfRVhURU5TSU9OUyAgICAgICAgPSAweGEwLAorICAgIEFTTl9FWFRFTlNJT05TICAgICAgICA9IDB4YTMsCisgICAgQVNOX0xPTkdfTEVOR1RIICAgICAgID0gMHg4MCwKKyAgICBBU05fSU5ERUZfTEVOR1RIICAgICAgPSAweDgwLAorCisgICAgLyogQVNOX0ZsYWdzIC0gQml0bWFzayAqLworICAgIEFTTl9DT05TVFJVQ1RFRCAgICAgICA9IDB4MjAsCisgICAgQVNOX0FQUExJQ0FUSU9OICAgICAgID0gMHg0MCwKKyAgICBBU05fQ09OVEVYVF9TUEVDSUZJQyAgPSAweDgwLAorfTsKKworI2RlZmluZSBBU05fVVRDX1RJTUVfU0laRSAxNAorI2RlZmluZSBBU05fR0VORVJBTElaRURfVElNRV9TSVpFIDE2CisjZGVmaW5lIEFTTl9HRU5FUkFMSVpFRF9USU1FX01BWCA2OAorCitlbnVtIEROX1RhZ3MgeworICAgIEFTTl9ETl9OVUxMICAgICAgID0gMHgwMCwKKyAgICBBU05fQ09NTU9OX05BTUUgICA9IDB4MDMsICAgLyogQ04gKi8KKyAgICBBU05fU1VSX05BTUUgICAgICA9IDB4MDQsICAgLyogU04gKi8KKyAgICBBU05fU0VSSUFMX05VTUJFUiA9IDB4MDUsICAgLyogc2VyaWFsTnVtYmVyICovCisgICAgQVNOX0NPVU5UUllfTkFNRSAgPSAweDA2LCAgIC8qIEMgICovCisgICAgQVNOX0xPQ0FMSVRZX05BTUUgPSAweDA3LCAgIC8qIEwgICovCisgICAgQVNOX1NUQVRFX05BTUUgICAgPSAweDA4LCAgIC8qIFNUICovCisgICAgQVNOX09SR19OQU1FICAgICAgPSAweDBhLCAgIC8qIE8gICovCisgICAgQVNOX09SR1VOSVRfTkFNRSAgPSAweDBiLCAgIC8qIE9VICovCisgICAgQVNOX0JVU19DQVQgICAgICAgPSAweDBmLCAgIC8qIGJ1c2luZXNzQ2F0ZWdvcnkgKi8KKyAgICBBU05fRU1BSUxfTkFNRSAgICA9IDB4OTgsICAgLyogbm90IG9pZCBudW1iZXIgdGhlcmUgaXMgOTcgaW4gMi41LjQuMC05NyAqLworCisgICAgLyogcGlsb3QgYXR0cmlidXRlIHR5cGVzCisgICAgICogT0lEIHZhbHVlcyBvZiAwLjkuMjM0Mi4xOTIwMDMwMC4xMDAuMS4qICovCisgICAgQVNOX1VTRVJfSUQgICAgICAgICAgPSAweDAxLCAvKiBVSUQgKi8KKyAgICBBU05fRkFWT1VSSVRFX0RSSU5LICA9IDB4MDUsIC8qIGZhdm91cml0ZURyaW5rICovCisgICAgQVNOX0RPTUFJTl9DT01QT05FTlQgPSAweDE5ICAvKiBEQyAqLworfTsKKworLyogVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QgcG9zc2libGUgUEVNIGhlYWRlciBhbmQgZm9vdGVyICovCitleHRlcm4gY29uc3QgaW50IHBlbV9zdHJ1Y3RfbWluX3N6OworCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkFfWDUwOV9TTUFMTCkKK3R5cGVkZWYgc3RydWN0IFdPTEZTU0xfT2JqZWN0SW5mbyB7CisgICAgaW50IG5pZDsKKyAgICBpbnQgaWQ7CisgICAgd29yZDMyIHR5cGU7CisgICAgY29uc3QgY2hhciogc05hbWU7CisgICAgY29uc3QgY2hhciogbE5hbWU7Cit9IFdPTEZTU0xfT2JqZWN0SW5mbzsKK2V4dGVybiBjb25zdCBzaXplX3Qgd29sZnNzbF9vYmplY3RfaW5mb19zejsKK2V4dGVybiBjb25zdCBXT0xGU1NMX09iamVjdEluZm8gd29sZnNzbF9vYmplY3RfaW5mb1tdOworI2VuZGlmIC8qIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpICovCisKKy8qIEROIFRhZyBTdHJpbmdzICovCisjZGVmaW5lIFdPTEZTU0xfQ09NTU9OX05BTUUgICAgICAiL0NOPSIKKyNkZWZpbmUgV09MRlNTTF9MTl9DT01NT05fTkFNRSAgICIvY29tbW9uTmFtZT0iCisjZGVmaW5lIFdPTEZTU0xfU1VSX05BTUUgICAgICAgICAiL1NOPSIKKyNkZWZpbmUgV09MRlNTTF9TRVJJQUxfTlVNQkVSICAgICIvc2VyaWFsTnVtYmVyPSIKKyNkZWZpbmUgV09MRlNTTF9DT1VOVFJZX05BTUUgICAgICIvQz0iCisjZGVmaW5lIFdPTEZTU0xfTE5fQ09VTlRSWV9OQU1FICAiL2NvdW50cnlOYW1lPSIKKyNkZWZpbmUgV09MRlNTTF9MT0NBTElUWV9OQU1FICAgICIvTD0iCisjZGVmaW5lIFdPTEZTU0xfTE5fTE9DQUxJVFlfTkFNRSAiL2xvY2FsaXR5TmFtZT0iCisjZGVmaW5lIFdPTEZTU0xfU1RBVEVfTkFNRSAgICAgICAiL1NUPSIKKyNkZWZpbmUgV09MRlNTTF9MTl9TVEFURV9OQU1FICAgICIvc3RhdGVPclByb3ZpbmNlTmFtZT0iCisjZGVmaW5lIFdPTEZTU0xfT1JHX05BTUUgICAgICAgICAiL089IgorI2RlZmluZSBXT0xGU1NMX0xOX09SR19OQU1FICAgICAgIi9vcmdhbml6YXRpb25OYW1lPSIKKyNkZWZpbmUgV09MRlNTTF9PUkdVTklUX05BTUUgICAgICIvT1U9IgorI2RlZmluZSBXT0xGU1NMX0xOX09SR1VOSVRfTkFNRSAgIi9vcmdhbml6YXRpb25hbFVuaXROYW1lPSIKKyNkZWZpbmUgV09MRlNTTF9ET01BSU5fQ09NUE9ORU5UICIvREM9IgorI2RlZmluZSBXT0xGU1NMX0xOX0RPTUFJTl9DT01QT05FTlQgIi9kb21haW5Db21wb25lbnQ9IgorI2RlZmluZSBXT0xGU1NMX0JVU19DQVQgICAgICAgICAgIi9idXNpbmVzc0NhdGVnb3J5PSIKKyNkZWZpbmUgV09MRlNTTF9KT0lfQyAgICAgICAgICAgICIvanVyaXNkaWN0aW9uQz0iCisjZGVmaW5lIFdPTEZTU0xfSk9JX1NUICAgICAgICAgICAiL2p1cmlzZGljdGlvblNUPSIKKyNkZWZpbmUgV09MRlNTTF9FTUFJTF9BRERSICAgICAgICIvZW1haWxBZGRyZXNzPSIKKworI2RlZmluZSBXT0xGU1NMX1VTRVJfSUQgICAgICAgICAgIi9VSUQ9IgorI2RlZmluZSBXT0xGU1NMX0RPTUFJTl9DT01QT05FTlQgIi9EQz0iCisjZGVmaW5lIFdPTEZTU0xfRkFWT1VSSVRFX0RSSU5LICAiL2Zhdm91cml0ZURyaW5rPSIKKworI2lmIGRlZmluZWQoV09MRlNTTF9BUEFDSEVfSFRUUEQpCisgICAgLyogb3RoZXJOYW1lIHN0cmluZ3MgKi8KKyAgICAjZGVmaW5lIFdPTEZTU0xfU05fTVNfVVBOICAgICAgICJtc1VQTiIKKyAgICAjZGVmaW5lIFdPTEZTU0xfTE5fTVNfVVBOICAgICAgICJNaWNyb3NvZnQgVXNlciBQcmluY2lwYWwgTmFtZSIKKyAgICAjZGVmaW5lIFdPTEZTU0xfTVNfVVBOX1NVTSAyNjUKKyAgICAjZGVmaW5lIFdPTEZTU0xfU05fRE5TX1NSViAgICAgICJpZC1vbi1kbnNTUlYiCisgICAgI2RlZmluZSBXT0xGU1NMX0xOX0ROU19TUlYgICAgICAiU1JWTmFtZSIKKyAgICAvKiBUTFMgZmVhdHVyZXMgZXh0ZW5zaW9uIHN0cmluZ3MgKi8KKyAgICAjZGVmaW5lIFdPTEZTU0xfU05fVExTX0ZFQVRVUkUgICJ0bHNmZWF0dXJlIgorICAgICNkZWZpbmUgV09MRlNTTF9MTl9UTFNfRkVBVFVSRSAgIlRMUyBGZWF0dXJlIgorICAgICNkZWZpbmUgV09MRlNTTF9UTFNfRkVBVFVSRV9TVU0gOTIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkFfWDUwOV9TTUFMTCkKKy8qIE5JRHMgKi8KK2VudW0KK3sKKyAgICBOSURfdW5kZWYgPSAwLAorICAgIE5JRF9uZXRzY2FwZV9jZXJ0X3R5cGUgPSBOSURfdW5kZWYsCisgICAgTklEX2RlcyA9IDY2LAorICAgIE5JRF9kZXMzID0gNjcsCisgICAgTklEX3NoYTI1NiA9IDY3MiwKKyAgICBOSURfc2hhMzg0ID0gNjczLAorICAgIE5JRF9zaGE1MTIgPSA2NzQsCisgICAgTklEX3BrY3M5X2NoYWxsZW5nZVBhc3N3b3JkID0gNTQsCisgICAgTklEX2h3X25hbWVfb2lkID0gNzMsCisgICAgTklEX2lkX3BraXhfT0NTUF9iYXNpYyA9IDc0LAorICAgIE5JRF9hbnlfcG9saWN5ID0gNzUsCisgICAgTklEX2FueUV4dGVuZGVkS2V5VXNhZ2UgPSA3NiwKKyAgICBOSURfZ2l2ZW5OYW1lID0gOTksCisgICAgTklEX2luaXRpYWxzID0gMTAxLAorICAgIE5JRF90aXRsZSA9IDEwNiwKKyAgICBOSURfZGVzY3JpcHRpb24gPSAxMDcsCisgICAgTklEX2Jhc2ljX2NvbnN0cmFpbnRzID0gMTMzLAorICAgIE5JRF9rZXlfdXNhZ2UgPSAxMjksICAgICAvKiAyLjUuMjkuMTUgKi8KKyAgICBOSURfZXh0X2tleV91c2FnZSA9IDE1MSwgLyogMi41LjI5LjM3ICovCisgICAgTklEX3N1YmplY3Rfa2V5X2lkZW50aWZpZXIgPSAxMjgsCisgICAgTklEX2F1dGhvcml0eV9rZXlfaWRlbnRpZmllciA9IDE0OSwKKyAgICBOSURfcHJpdmF0ZV9rZXlfdXNhZ2VfcGVyaW9kID0gMTMwLCAvKiAyLjUuMjkuMTYgKi8KKyAgICBOSURfc3ViamVjdF9hbHRfbmFtZSA9IDEzMSwKKyAgICBOSURfaXNzdWVyX2FsdF9uYW1lID0gMTMyLAorICAgIE5JRF9pbmZvX2FjY2VzcyA9IDY5LAorICAgIE5JRF9zaW5mb19hY2Nlc3MgPSA3OSwgICAgICAvKiBpZC1wZSAxMSAqLworICAgIE5JRF9uYW1lX2NvbnN0cmFpbnRzID0gMTQ0LCAvKiAyLjUuMjkuMzAgKi8KKyAgICBOSURfY3JsX2Rpc3RyaWJ1dGlvbl9wb2ludHMgPSAxNDUsIC8qIDIuNS4yOS4zMSAqLworICAgIE5JRF9jZXJ0aWZpY2F0ZV9wb2xpY2llcyA9IDE0NiwKKyAgICBOSURfcG9saWN5X21hcHBpbmdzID0gMTQ3LAorICAgIE5JRF9wb2xpY3lfY29uc3RyYWludHMgPSAxNTAsCisgICAgTklEX2luaGliaXRfYW55X3BvbGljeSA9IDE2OCwgICAgICAvKiAyLjUuMjkuNTQgKi8KKyAgICBOSURfdGxzZmVhdHVyZSA9IDEwMjAsICAgICAgICAgICAgIC8qIGlkLXBlIDI0ICovCisgICAgTklEX2NvbW1vbk5hbWUgPSAweDAzLCAgICAgICAgICAgICAvKiBtYXRjaGVzIEFTTl9DT01NT05fTkFNRSBpbiBhc24uaCAqLworICAgIE5JRF9idWlsZGluZ05hbWUgPSAxNDk0LAorCisKKyAgICBOSURfc3VybmFtZSA9IDB4MDQsICAgICAgICAgICAgICAgIC8qIFNOICovCisgICAgTklEX3NlcmlhbE51bWJlciA9IDB4MDUsICAgICAgICAgICAvKiBzZXJpYWxOdW1iZXIgKi8KKyAgICBOSURfY291bnRyeU5hbWUgPSAweDA2LCAgICAgICAgICAgIC8qIEMgICovCisgICAgTklEX2xvY2FsaXR5TmFtZSA9IDB4MDcsICAgICAgICAgICAvKiBMICAqLworICAgIE5JRF9zdGF0ZU9yUHJvdmluY2VOYW1lID0gMHgwOCwgICAgLyogU1QgKi8KKyAgICBOSURfb3JnYW5pemF0aW9uTmFtZSA9IDB4MGEsICAgICAgIC8qIE8gICovCisgICAgTklEX29yZ2FuaXphdGlvbmFsVW5pdE5hbWUgPSAweDBiLCAvKiBPVSAqLworICAgIE5JRF9qdXJpc2RpY3Rpb25Db3VudHJ5TmFtZSA9IDB4YywKKyAgICBOSURfanVyaXNkaWN0aW9uU3RhdGVPclByb3ZpbmNlTmFtZSA9IDB4ZCwKKyAgICBOSURfYnVzaW5lc3NDYXRlZ29yeSA9IEFTTl9CVVNfQ0FULAorICAgIE5JRF9kb21haW5Db21wb25lbnQgPSBBU05fRE9NQUlOX0NPTVBPTkVOVCwKKyAgICBOSURfZmF2b3VyaXRlRHJpbmsgPSA0NjIsCisgICAgTklEX3VzZXJJZCA9IDQ1OCwKKyAgICBOSURfZW1haWxBZGRyZXNzID0gMHgzMCwgICAgICAgICAgIC8qIGVtYWlsQWRkcmVzcyAqLworICAgIE5JRF9pZF9vbl9kbnNTUlYgPSA4MiwgICAgICAgICAgICAgLyogMS4zLjYuMS41LjUuNy44LjcgKi8KKyAgICBOSURfbXNfdXBuID0gMjY1LCAgICAgICAgICAgICAgICAgIC8qIDEuMy42LjEuNC4xLjMxMS4yMC4yLjMgKi8KKworICAgIE5JRF9YOV82Ml9wcmltZV9maWVsZCA9IDQwNiAgICAgICAgLyogMS4yLjg0MC4xMDA0NS4xLjEgKi8KK307CisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSAqLworCitlbnVtIEVDQ19UWVBFUworeworICAgIEVDQ19QUkVGSVhfMCA9IDE2MCwKKyAgICBFQ0NfUFJFRklYXzEgPSAxNjEKK307CisKKyNpZmRlZiBXT0xGU1NMX0NFUlRfUElWCisgICAgZW51bSBQSVZfVGFncyB7CisgICAgICAgIEFTTl9QSVZfQ0VSVCAgICAgICAgICA9IDB4MEEsCisgICAgICAgIEFTTl9QSVZfTk9OQ0UgICAgICAgICA9IDB4MEIsCisgICAgICAgIEFTTl9QSVZfU0lHTkVEX05PTkNFICA9IDB4MEMsCisKKyAgICAgICAgQVNOX1BJVl9UQUdfQ0VSVCAgICAgID0gMHg3MCwKKyAgICAgICAgQVNOX1BJVl9UQUdfQ0VSVF9JTkZPID0gMHg3MSwKKyAgICAgICAgQVNOX1BJVl9UQUdfTVNDVUlEICAgID0gMHg3MiwKKyAgICAgICAgQVNOX1BJVl9UQUdfRVJSX0RFVCAgID0gMHhGRSwKKworICAgICAgICAvKiBjZXJ0aWZpY2F0ZSBpbmZvIG1hc2tzICovCisgICAgICAgIEFTTl9QSVZfQ0VSVF9JTkZPX0NPTVBSRVNTRUQgPSAweDAzLAorICAgICAgICBBU05fUElWX0NFUlRfSU5GT19JU1g1MDkgICAgID0gMHgwNCwKKyAgICB9OworI2VuZGlmIC8qIFdPTEZTU0xfQ0VSVF9QSVYgKi8KKworCisjZGVmaW5lIEFTTl9KT0lfUFJFRklYX1NaICAgICAgIDEwCisjZGVmaW5lIEFTTl9KT0lfUFJFRklYICAgICAgICAgICJceDJiXHgwNlx4MDFceDA0XHgwMVx4ODJceDM3XHgzY1x4MDJceDAxIgorI2RlZmluZSBBU05fSk9JX0MgICAgICAgICAgICAgICAweDMKKyNkZWZpbmUgQVNOX0pPSV9TVCAgICAgICAgICAgICAgMHgyCisKKyNpZm5kZWYgV0NfQVNOX05BTUVfTUFYCisgICAgI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgICAgICAgI2RlZmluZSBXQ19BU05fTkFNRV9NQVggMzAwCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBXQ19BU05fTkFNRV9NQVggMjU2CisgICAgI2VuZGlmCisjZW5kaWYKKyNkZWZpbmUgQVNOX05BTUVfTUFYIFdDX0FTTl9OQU1FX01BWAorCitlbnVtIE1pc2NfQVNOIHsKKyAgICBNQVhfU0FMVF9TSVpFICAgICAgID0gIDY0LCAgICAgLyogTUFYIFBLQ1MgU2FsdCBsZW5ndGggKi8KKyAgICBNQVhfSVZfU0laRSAgICAgICAgID0gIDY0LCAgICAgLyogTUFYIFBLQ1MgSXYgbGVuZ3RoICovCisgICAgQVNOX0JPT0xfU0laRSAgICAgICA9ICAgMiwgICAgIC8qIGluY2x1ZGluZyB0eXBlICovCisgICAgQVNOX0VDQ19IRUFERVJfU1ogICA9ICAgMiwgICAgIC8qIFN0cmluZyB0eXBlICsgMSBieXRlIGxlbiAqLworICAgIEFTTl9FQ0NfQ09OVEVYVF9TWiAgPSAgIDIsICAgICAvKiBDb250ZW50IHNwZWNpZmljIHR5cGUgKyAxIGJ5dGUgbGVuICovCisjaWZkZWYgTk9fU0hBCisgICAgS0VZSURfU0laRSAgICAgICAgICA9IFdDX1NIQTI1Nl9ESUdFU1RfU0laRSwKKyNlbHNlCisgICAgS0VZSURfU0laRSAgICAgICAgICA9IFdDX1NIQV9ESUdFU1RfU0laRSwKKyNlbmRpZgorICAgIFJTQV9JTlRTICAgICAgICAgICAgPSAgIDgsICAgICAvKiBSU0EgaW50cyBpbiBwcml2YXRlIGtleSAqLworICAgIERTQV9QQVJBTV9JTlRTICAgICAgPSAgIDMsICAgICAvKiBEU0EgcGFyYW1hdGVyIGludHMgKi8KKyAgICBEU0FfSU5UUyAgICAgICAgICAgID0gICA1LCAgICAgLyogRFNBIGludHMgaW4gcHJpdmF0ZSBrZXkgKi8KKyAgICBNSU5fREFURV9TSVpFICAgICAgID0gIDEyLAorICAgIE1BWF9EQVRFX1NJWkUgICAgICAgPSAgMzIsCisgICAgQVNOX0dFTl9USU1FX1NaICAgICA9ICAxNSwgICAgIC8qIDcgbnVtYmVycyAqIDIgKyBadWx1IHRhZyAqLworI2lmbmRlZiBOT19SU0EKKyAgICBNQVhfRU5DT0RFRF9TSUdfU1ogID0gNTEyLAorI2VsaWYgZGVmaW5lZChIQVZFX0VDQykKKyAgICBNQVhfRU5DT0RFRF9TSUdfU1ogID0gMTQwLAorI2VsaWYgZGVmaW5lZChIQVZFX0NVUlZFNDQ4KQorICAgIE1BWF9FTkNPREVEX1NJR19TWiAgPSAxMTQsCisjZWxzZQorICAgIE1BWF9FTkNPREVEX1NJR19TWiAgPSAgNjQsCisjZW5kaWYKKyAgICBNQVhfU0lHX1NaICAgICAgICAgID0gMjU2LAorICAgIE1BWF9BTEdPX1NaICAgICAgICAgPSAgMjAsCisgICAgTUFYX1NIT1JUX1NaICAgICAgICA9ICAgNiwgICAgIC8qIGFzbiBpbnQgKyBieXRlIGxlbiArIDQgYnl0ZSBsZW5ndGggKi8KKyAgICBNQVhfU0VRX1NaICAgICAgICAgID0gICA1LCAgICAgLyogZW51bShzZXEgfCBjb24pICsgbGVuZ3RoKDQpICovCisgICAgTUFYX1NFVF9TWiAgICAgICAgICA9ICAgNSwgICAgIC8qIGVudW0oc2V0IHwgY29uKSArIGxlbmd0aCg0KSAqLworICAgIE1BWF9PQ1RFVF9TVFJfU1ogICAgPSAgIDUsICAgICAvKiBlbnVtKHNldCB8IGNvbikgKyBsZW5ndGgoNCkgKi8KKyAgICBNQVhfRVhQX1NaICAgICAgICAgID0gICA1LCAgICAgLyogZW51bShjb250ZXh0c3BlY3xjb258ZXhwKSArIGxlbmd0aCg0KSAqLworICAgIE1BWF9QUlNUUl9TWiAgICAgICAgPSAgIDUsICAgICAvKiBlbnVtKHByc3RyKSArIGxlbmd0aCg0KSAqLworICAgIE1BWF9WRVJTSU9OX1NaICAgICAgPSAgIDUsICAgICAvKiBlbnVtICsgaWQgKyB2ZXJzaW9uKGJ5dGUpICsgKGhlYWRlcigyKSkqLworICAgIE1BWF9FTkNPREVEX0RJR19BU05fU1o9IDksICAgICAvKiBlbnVtKGJpdCBvciBvY3RldCkgKyBsZW5ndGgoNCkgKi8KKyAgICBNQVhfRU5DT0RFRF9ESUdfU1ogID0gIDY0ICsgTUFYX0VOQ09ERURfRElHX0FTTl9TWiwgLyogYXNuIGhlYWRlciArIHNoYTUxMiAqLworICAgIE1BWF9SU0FfSU5UX1NaICAgICAgPSA1MTcsICAgICAvKiBSU0EgcmF3IHN6IDQwOTYgZm9yIGJpdHMgKyB0YWcgKyBsZW4oNCkgKi8KKyAgICBNQVhfRFNBX0lOVF9TWiAgICAgID0gMzg5LCAgICAgLyogRFNBIHJhdyBzeiAzMDcyIGZvciBiaXRzICsgdGFnICsgbGVuKDQpICovCisgICAgTUFYX05UUlVfS0VZX1NaICAgICA9IDYxMCwgICAgIC8qIE5UUlUgMTEyIGJpdCBwdWJsaWMga2V5ICovCisgICAgTUFYX05UUlVfRU5DX1NaICAgICA9IDYyOCwgICAgIC8qIE5UUlUgMTEyIGJpdCBERVIgcHVibGljIGVuY29kaW5nICovCisgICAgTUFYX0xFTkdUSF9TWiAgICAgICA9ICAgNCwgICAgIC8qIE1heCBsZW5ndGggc2l6ZSBmb3IgREVSIGVuY29kaW5nICovCisgICAgTUFYX1JTQV9FX1NaICAgICAgICA9ICAxNiwgICAgIC8qIE1heCBSU0EgcHVibGljIGUgc2l6ZSAqLworICAgIE1BWF9DQV9TWiAgICAgICAgICAgPSAgMzIsICAgICAvKiBNYXggZW5jb2RlZCBDQSBiYXNpYyBjb25zdHJhaW50IGxlbmd0aCAqLworICAgIE1BWF9TTl9TWiAgICAgICAgICAgPSAgMzUsICAgICAvKiBNYXggZW5jb2RlZCBzZXJpYWwgbnVtYmVyIChJTlQpIGxlbmd0aCAqLworICAgIE1BWF9ERVJfRElHRVNUX1NaICAgICA9IE1BWF9FTkNPREVEX0RJR19TWiArIE1BWF9BTEdPX1NaICsgTUFYX1NFUV9TWiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXhpbXVtIERFUiBkaWdlc3Qgc2l6ZSAqLworICAgIE1BWF9ERVJfRElHRVNUX0FTTl9TWiA9IE1BWF9FTkNPREVEX0RJR19BU05fU1ogKyBNQVhfQUxHT19TWiArIE1BWF9TRVFfU1osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWF4aW11bSBERVIgZGlnZXN0IEFTTiBoZWFkZXIgc2l6ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heCBYNTA5IGhlYWRlciBsZW5ndGggaW5kaWNhdGVzIHRoZSBtYXggbGVuZ3RoICsgMiAoJ1xuJywgJ1wwJykgKi8KKyAgICBNQVhfWDUwOV9IRUFERVJfU1ogID0gKDM3ICsgMiksIC8qIE1heGltdW0gUEVNIEhlYWRlci9Gb290ZXIgU2l6ZSAqLworI2lmZGVmIFdPTEZTU0xfQ0VSVF9HRU4KKyAgICAjaWZkZWYgV09MRlNTTF9DRVJUX1JFUQorICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXggZW5jb2RlZCBjZXJ0IHJlcSBhdHRyaWJ1dGVzIGxlbmd0aCAqLworICAgICAgICBNQVhfQVRUUklCX1NaICAgPSBNQVhfU0VRX1NaICogMyArICgxMSArIE1BWF9TRVFfU1opICogMiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9QUlNUUl9TWiArIENUQ19OQU1FX1NJWkUsIC8qIDExIGlzIHRoZSBPSUQgc2l6ZSAqLworICAgICNlbmRpZgorICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfQUxUX05BTUVTKSB8fCBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9FWFQpCisgICAgICAgIE1BWF9FWFRFTlNJT05TX1NaICAgPSAxICsgTUFYX0xFTkdUSF9TWiArIENUQ19NQVhfQUxUX1NJWkUsCisgICAgI2Vsc2UKKyAgICAgICAgTUFYX0VYVEVOU0lPTlNfU1ogICA9IDEgKyBNQVhfTEVOR1RIX1NaICsgTUFYX0NBX1NaLAorICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXggdG90YWwgZXh0ZW5zaW9ucywgaWQgKyBsZW4gKyBvdGhlcnMgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9DRVJUX0VYVCkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBcCisgICAgICAgIGRlZmluZWQoSEFWRV9QS0NTNykgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpCisgICAgTUFYX09JRF9TWiAgICAgICAgICA9IDMyLCAgICAgIC8qIE1heCBERVIgbGVuZ3RoIG9mIE9JRCovCisgICAgTUFYX09JRF9TVFJJTkdfU1ogICA9IDY0LCAgICAgIC8qIE1heCBzdHJpbmcgbGVuZ3RoIHJlcHJlc2VudGF0aW9uIG9mIE9JRCovCisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0NFUlRfRVhUCisgICAgTUFYX0tJRF9TWiAgICAgICAgICA9IDQ1LCAgICAgIC8qIE1heCBlbmNvZGVkIEtJRCBsZW5ndGggKFNIQS0yNTYgY2FzZSkgKi8KKyAgICBNQVhfS0VZVVNBR0VfU1ogICAgID0gMTgsICAgICAgLyogTWF4IGVuY29kZWQgS2V5IFVzYWdlIGxlbmd0aCAqLworICAgIE1BWF9FWFRLRVlVU0FHRV9TWiAgPSAxMiArICg2ICogKDggKyAyKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICBDVENfTUFYX0VLVV9PSURfU1osIC8qIE1heCBlbmNvZGVkIEV4dEtleVVzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChTRVEvTEVOICsgT0JKSUQgKyBPQ1RTVFIvTEVOICsgU0VRICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDYgKiAoU0VRICsgT0lEKSkpICovCisgICAgTUFYX0NFUlRQT0xfTkIgICAgICA9IENUQ19NQVhfQ0VSVFBPTF9OQiwvKiBNYXggbnVtYmVyIG9mIENlcnQgUG9saWN5ICovCisgICAgTUFYX0NFUlRQT0xfU1ogICAgICA9IENUQ19NQVhfQ0VSVFBPTF9TWiwKKyNlbmRpZgorICAgIE1BWF9BSUFfU1ogICAgICAgICAgPSAyLCAgICAgICAvKiBNYXggQXV0aG9yaXR5IEluZm8gQWNjZXNzIGV4dGVuc2lvbiBzaXplKi8KKyAgICBPQ1NQX05PTkNFX0VYVF9TWiAgID0gMzUsICAgICAgLyogT0NTUCBOb25jZSBFeHRlbnNpb24gc2l6ZSAqLworICAgIE1BWF9PQ1NQX0VYVF9TWiAgICAgPSA1OCwgICAgICAvKiBNYXggT0NTUCBFeHRlbnNpb24gbGVuZ3RoICovCisgICAgTUFYX09DU1BfTk9OQ0VfU1ogICA9IDE2LCAgICAgIC8qIE9DU1AgTm9uY2Ugc2l6ZSAgICAgICAgICAgKi8KKyAgICBFSUdIVEtfQlVGICAgICAgICAgID0gODE5MiwgICAgLyogVG1wIGJ1ZmZlciBzaXplICAgICAgICAgICAqLworICAgIE1BWF9QVUJMSUNfS0VZX1NaICAgPSBNQVhfTlRSVV9FTkNfU1ogKyBNQVhfQUxHT19TWiArIE1BWF9TRVFfU1ogKiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2UgYmlnZ2VyIE5UUlUgc2l6ZSAqLworI2lmZGVmIFdPTEZTU0xfRU5DUllQVEVEX0tFWVMKKyAgICBIRUFERVJfRU5DUllQVEVEX0tFWV9TSVpFID0gODgsLyogRXh0cmEgaGVhZGVyIHNpemUgZm9yIGVuY3J5cHRlZCBrZXkgKi8KKyNlbHNlCisgICAgSEVBREVSX0VOQ1JZUFRFRF9LRVlfU0laRSA9IDAsCisjZW5kaWYKKyAgICBUUkFJTElOR19aRVJPICAgICAgID0gMSwgICAgICAgLyogVXNlZCBmb3Igc2l6ZSBvZiB6ZXJvIHBhZCAqLworICAgIEFTTl9UQUdfU1ogICAgICAgICAgPSAxLCAgICAgICAvKiBzaW5nbGUgYnl0ZSBBU04uMSB0YWcgKi8KKyAgICBNSU5fVkVSU0lPTl9TWiAgICAgID0gMywgICAgICAgLyogTWluIGJ5dGVzIG5lZWRlZCBmb3IgR2V0TXlWZXJzaW9uICovCisgICAgTUFYX1g1MDlfVkVSU0lPTiAgICA9IDMsICAgICAgIC8qIE1heCBYNTA5IHZlcnNpb24gYWxsb3dlZCAqLworICAgIE1JTl9YNTA5X1ZFUlNJT04gICAgPSAwLCAgICAgICAvKiBNaW4gWDUwOSB2ZXJzaW9uIGFsbG93ZWQgKi8KKyAgICBXT0xGU1NMX1g1MDlfVjEgICAgID0gMCwKKyAgICBXT0xGU1NMX1g1MDlfVjIgICAgID0gMSwKKyAgICBXT0xGU1NMX1g1MDlfVjMgICAgID0gMiwKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSAgfHwgZGVmaW5lZChXT0xGU1NMX01ZU1FMX0NPTVBBVElCTEUpIHx8IFwKKyAgICBkZWZpbmVkKFdPTEZTU0xfTkdJTlgpIHx8IGRlZmluZWQoV09MRlNTTF9IQVBST1hZKSB8fCBcCisgICAgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKEhBVkVfUEtDUzcpCisgICAgTUFYX1RJTUVfU1RSSU5HX1NaICA9IDI1LCAgICAgIC8qIE1heCBsZW5ndGggb2YgZm9ybWF0dGVkIHRpbWUgc3RyaW5nICovCisjZW5kaWYKKworICAgIFBLQ1M1X1NBTFRfU1ogICAgICAgPSA4LAorCisgICAgUEVNX0xJTkVfU1ogICAgICAgID0gNjQsICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIEJhc2U2NCBlbmNvZGVkIGxpbmUsIG5vdCBpbmNsdWRpbmcgbmV3IGxpbmUgKi8KKyAgICBQRU1fTElORV9MRU4gICAgICAgPSBQRU1fTElORV9TWiArIDEyLCAvKiBQRU0gbGluZSBtYXggKyBmdWRnZSAqLworfTsKKworI2lmbmRlZiBXQ19NQVhfTkFNRV9FTlRSSUVTCisgICAgLyogZW50cmllcyBhZGRlZCB0byB4NTA5IG5hbWUgc3RydWN0ICovCisgICAgI2RlZmluZSBXQ19NQVhfTkFNRV9FTlRSSUVTIDEzCisjZW5kaWYKKyNkZWZpbmUgTUFYX05BTUVfRU5UUklFUyBXQ19NQVhfTkFNRV9FTlRSSUVTCisKKworZW51bSBPaWRfVHlwZXMgeworICAgIG9pZEhhc2hUeXBlICAgICAgICAgPSAwLAorICAgIG9pZFNpZ1R5cGUgICAgICAgICAgPSAxLAorICAgIG9pZEtleVR5cGUgICAgICAgICAgPSAyLAorICAgIG9pZEN1cnZlVHlwZSAgICAgICAgPSAzLAorICAgIG9pZEJsa1R5cGUgICAgICAgICAgPSA0LAorICAgIG9pZE9jc3BUeXBlICAgICAgICAgPSA1LAorICAgIG9pZENlcnRFeHRUeXBlICAgICAgPSA2LAorICAgIG9pZENlcnRBdXRoSW5mb1R5cGUgPSA3LAorICAgIG9pZENlcnRQb2xpY3lUeXBlICAgPSA4LAorICAgIG9pZENlcnRBbHROYW1lVHlwZSAgPSA5LAorICAgIG9pZENlcnRLZXlVc2VUeXBlICAgPSAxMCwKKyAgICBvaWRLZGZUeXBlICAgICAgICAgID0gMTEsCisgICAgb2lkS2V5V3JhcFR5cGUgICAgICA9IDEyLAorICAgIG9pZENtc0tleUFncmVlVHlwZSAgPSAxMywKKyAgICBvaWRQQkVUeXBlICAgICAgICAgID0gMTQsCisgICAgb2lkSG1hY1R5cGUgICAgICAgICA9IDE1LAorICAgIG9pZENvbXByZXNzVHlwZSAgICAgPSAxNiwKKyAgICBvaWRDZXJ0TmFtZVR5cGUgICAgID0gMTcsCisgICAgb2lkVGxzRXh0VHlwZSAgICAgICA9IDE4LAorICAgIG9pZENybEV4dFR5cGUgICAgICAgPSAxOSwKKyAgICBvaWRDc3JBdHRyVHlwZSAgICAgID0gMjAsCisgICAgb2lkSWdub3JlVHlwZQorfTsKKworCitlbnVtIEhhc2hfU3VtICB7CisgICAgTUQyaCAgICAgID0gNjQ2LAorICAgIE1ENWggICAgICA9IDY0OSwKKyAgICBTSEFoICAgICAgPSAgODgsCisgICAgU0hBMjI0aCAgID0gNDE3LAorICAgIFNIQTI1NmggICA9IDQxNCwKKyAgICBTSEEzODRoICAgPSA0MTUsCisgICAgU0hBNTEyaCAgID0gNDE2LAorICAgIFNIQTNfMjI0aCA9IDQyMCwKKyAgICBTSEEzXzI1NmggPSA0MjEsCisgICAgU0hBM18zODRoID0gNDIyLAorICAgIFNIQTNfNTEyaCA9IDQyMworfTsKKworCisjaWYgIWRlZmluZWQoTk9fREVTMykgfHwgIWRlZmluZWQoTk9fQUVTKQorZW51bSBCbG9ja19TdW0geworI2lmZGVmIFdPTEZTU0xfQUVTXzEyOAorICAgIEFFUzEyOENCQ2IgPSA0MTQsCisgICAgQUVTMTI4R0NNYiA9IDQxOCwKKyAgICBBRVMxMjhDQ01iID0gNDE5LAorI2VuZGlmCisjaWZkZWYgV09MRlNTTF9BRVNfMTkyCisgICAgQUVTMTkyQ0JDYiA9IDQzNCwKKyAgICBBRVMxOTJHQ01iID0gNDM4LAorICAgIEFFUzE5MkNDTWIgPSA0MzksCisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0FFU18yNTYKKyAgICBBRVMyNTZDQkNiID0gNDU0LAorICAgIEFFUzI1NkdDTWIgPSA0NTgsCisgICAgQUVTMjU2Q0NNYiA9IDQ1OSwKKyNlbmRpZgorI2lmbmRlZiBOT19ERVMzCisgICAgREVTYiAgICAgICA9IDY5LAorICAgIERFUzNiICAgICAgPSA2NTIKKyNlbmRpZgorfTsKKyNlbmRpZiAvKiAhTk9fREVTMyB8fCAhTk9fQUVTICovCisKKworZW51bSBLZXlfU3VtIHsKKyAgICBEU0FrICAgICA9IDUxNSwKKyAgICBSU0FrICAgICA9IDY0NSwKKyAgICBOVFJVayAgICA9IDI3NCwKKyAgICBFQ0RTQWsgICA9IDUxOCwKKyAgICBFRDI1NTE5ayA9IDI1NiwKKyAgICBFRDQ0OGsgICA9IDI1NywKKyAgICBESGsgICAgICA9IDY0NywgLyogZGhLZXlBZ3JlZW1lbnQgT0lEOiAxLjIuODQwLjExMzU0OS4xLjMuMSAqLworfTsKKworI2lmICFkZWZpbmVkKE5PX0FFUykgfHwgZGVmaW5lZChIQVZFX1BLQ1M3KQorZW51bSBLZXlXcmFwX1N1bSB7CisjaWZkZWYgV09MRlNTTF9BRVNfMTI4CisgICAgQUVTMTI4X1dSQVAgID0gNDE3LAorI2VuZGlmCisjaWZkZWYgV09MRlNTTF9BRVNfMTkyCisgICAgQUVTMTkyX1dSQVAgID0gNDM3LAorI2VuZGlmCisjaWZkZWYgV09MRlNTTF9BRVNfMjU2CisgICAgQUVTMjU2X1dSQVAgID0gNDU3LAorI2VuZGlmCisjaWZkZWYgSEFWRV9QS0NTNworICAgIFBXUklfS0VLX1dSQVAgPSA2ODAgIC8qaWQtYWxnLVBXUkktS0VLLCAxLjIuODQwLjExMzU0OS4xLjkuMTYuMy45ICovCisjZW5kaWYKK307CisjZW5kaWYgLyogIU5PX0FFUyB8fCBQS0NTNyAqLworCitlbnVtIEtleV9BZ3JlZSB7CisgICAgZGhTaW5nbGVQYXNzX3N0ZERIX3NoYTFrZGZfc2NoZW1lICAgPSA0NjQsCisgICAgZGhTaW5nbGVQYXNzX3N0ZERIX3NoYTIyNGtkZl9zY2hlbWUgPSAxODgsCisgICAgZGhTaW5nbGVQYXNzX3N0ZERIX3NoYTI1NmtkZl9zY2hlbWUgPSAxODksCisgICAgZGhTaW5nbGVQYXNzX3N0ZERIX3NoYTM4NGtkZl9zY2hlbWUgPSAxOTAsCisgICAgZGhTaW5nbGVQYXNzX3N0ZERIX3NoYTUxMmtkZl9zY2hlbWUgPSAxOTEsCit9OworCisKKworZW51bSBLREZfU3VtIHsKKyAgICBQQktERjJfT0lEID0gNjYwCit9OworCisKK2VudW0gSE1BQ19TdW0geworICAgIEhNQUNfU0hBMjI0X09JRCAgID0gNjUyLAorICAgIEhNQUNfU0hBMjU2X09JRCAgID0gNjUzLAorICAgIEhNQUNfU0hBMzg0X09JRCAgID0gNjU0LAorICAgIEhNQUNfU0hBNTEyX09JRCAgID0gNjU1LAorICAgIEhNQUNfU0hBM18yMjRfT0lEID0gNDI2LAorICAgIEhNQUNfU0hBM18yNTZfT0lEID0gNDI3LAorICAgIEhNQUNfU0hBM18zODRfT0lEID0gNDI4LAorICAgIEhNQUNfU0hBM181MTJfT0lEID0gNDI5Cit9OworCisKK2VudW0gRXh0ZW5zaW9uc19TdW0geworICAgIEJBU0lDX0NBX09JRCAgICA9IDEzMywgICAgICAgICAgIC8qIDIuNS4yOS4xOSAqLworICAgIEFMVF9OQU1FU19PSUQgICA9IDEzMSwgICAgICAgICAgIC8qIDIuNS4yOS4xNyAqLworICAgIENSTF9ESVNUX09JRCAgICA9IDE0NSwgICAgICAgICAgIC8qIDIuNS4yOS4zMSAqLworICAgIEFVVEhfSU5GT19PSUQgICA9IDY5LCAgICAgICAgICAgIC8qIDEuMy42LjEuNS41LjcuMS4xICovCisgICAgQVVUSF9LRVlfT0lEICAgID0gMTQ5LCAgICAgICAgICAgLyogMi41LjI5LjM1ICovCisgICAgU1VCSl9LRVlfT0lEICAgID0gMTI4LCAgICAgICAgICAgLyogMi41LjI5LjE0ICovCisgICAgQ0VSVF9QT0xJQ1lfT0lEID0gMTQ2LCAgICAgICAgICAgLyogMi41LjI5LjMyICovCisgICAgS0VZX1VTQUdFX09JRCAgID0gMTI5LCAgICAgICAgICAgLyogMi41LjI5LjE1ICovCisgICAgSU5ISUJJVF9BTllfT0lEID0gMTY4LCAgICAgICAgICAgLyogMi41LjI5LjU0ICovCisgICAgRVhUX0tFWV9VU0FHRV9PSUQgICAgICAgICA9IDE1MSwgLyogMi41LjI5LjM3ICovCisgICAgTkFNRV9DT05TX09JRCAgICAgICAgICAgICA9IDE0NCwgLyogMi41LjI5LjMwICovCisgICAgUFJJVl9LRVlfVVNBR0VfUEVSSU9EX09JRCA9IDEzMCwgLyogMi41LjI5LjE2ICovCisgICAgU1VCSkVDVF9JTkZPX0FDQ0VTUyAgICAgICA9IDc5LCAgLyogMS4zLjYuMS41LjUuNy4xLjExICovCisgICAgUE9MSUNZX01BUF9PSUQgICAgICAgICAgICA9IDE0NywgLyogMi41LjI5LjMzICovCisgICAgUE9MSUNZX0NPTlNUX09JRCAgICAgICAgICA9IDE1MCwgLyogMi41LjI5LjM2ICovCisgICAgSVNTVUVfQUxUX05BTUVTX09JRCAgICAgICA9IDEzMiwgLyogMi41LjI5LjE4ICovCisgICAgVExTX0ZFQVRVUkVfT0lEICAgICAgICAgICA9IDkyLCAgLyogMS4zLjYuMS41LjUuNy4xLjI0ICovCisgICAgTkVUU0NBUEVfQ1RfT0lEICAgICAgICAgICA9IDc1MywgLyogMi4xNi44NDAuMS4xMTM3MzAuMS4xICovCisgICAgT0NTUF9OT0NIRUNLX09JRCAgICAgICAgICA9IDEyMSAgLyogMS4zLjYuMS41LjUuNy40OC4xLjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQtcGtpeC1vY3NwLW5vY2hlY2sgKi8KK307CisKK2VudW0gQ2VydGlmaWNhdGVQb2xpY3lfU3VtIHsKKyAgICBDUF9BTllfT0lEICAgICAgPSAxNDYgIC8qIGlkLWNlIDMyIDAgKi8KK307CisKK2VudW0gU2VwSGFyZHdhcmVOYW1lX1N1bSB7CisgICAgSFdfTkFNRV9PSUQgICAgID0gNzkgICAvKiAxLjMuNi4xLjUuNS43LjguNCBmcm9tIFJGQyA0MTA4Ki8KK307CisKK2VudW0gQXV0aEluZm9fU3VtIHsKKyAgICBBSUFfT0NTUF9PSUQgICAgICA9IDExNiwgLyogMS4zLjYuMS41LjUuNy40OC4xICovCisgICAgQUlBX0NBX0lTU1VFUl9PSUQgPSAxMTcgIC8qIDEuMy42LjEuNS41LjcuNDguMiAqLworfTsKKworZW51bSBFeHRLZXlVc2FnZV9TdW0geyAvKiBGcm9tIFJGQyA1MjgwICovCisgICAgRUtVX0FOWV9PSUQgICAgICAgICA9IDE1MSwgLyogMi41LjI5LjM3LjAsIGFueUV4dGVuZGVkS2V5VXNhZ2UgICAgICAgICAqLworICAgIEVLVV9TRVJWRVJfQVVUSF9PSUQgPSA3MSwgIC8qIDEuMy42LjEuNS41LjcuMy4xLCBpZC1rcC1zZXJ2ZXJBdXRoICAgICAgKi8KKyAgICBFS1VfQ0xJRU5UX0FVVEhfT0lEID0gNzIsICAvKiAxLjMuNi4xLjUuNS43LjMuMiwgaWQta3AtY2xpZW50QXV0aCAgICAgICovCisgICAgRUtVX0NPREVTSUdOSU5HX09JRCA9IDczLCAgLyogMS4zLjYuMS41LjUuNy4zLjMsIGlkLWtwLWNvZGVTaWduaW5nICAgICAqLworICAgIEVLVV9FTUFJTFBST1RFQ1RfT0lEID0gNzQsIC8qIDEuMy42LjEuNS41LjcuMy40LCBpZC1rcC1lbWFpbFByb3RlY3Rpb24gKi8KKyAgICBFS1VfVElNRVNUQU1QX09JRCAgID0gNzgsICAvKiAxLjMuNi4xLjUuNS43LjMuOCwgaWQta3AtdGltZVN0YW1waW5nICAgICovCisgICAgRUtVX09DU1BfU0lHTl9PSUQgICA9IDc5ICAgLyogMS4zLjYuMS41LjUuNy4zLjksIGlkLWtwLU9DU1BTaWduaW5nICAgICAqLworfTsKKworI2lmZGVmIEhBVkVfTElCWgorZW51bSBDb21wcmVzc0FsZ19TdW0geworICAgIFpMSUJjID0gNjc5ICAvKiAxLjIuODQwLjExMzU0OS4xLjkuMTYuMy44LCBpZC1hbGctemxpYkNvbXByZXNzICovCit9OworI2VuZGlmCisKK2VudW0gVmVyaWZ5VHlwZSB7CisgICAgTk9fVkVSSUZZICAgPSAwLAorICAgIFZFUklGWSAgICAgID0gMSwKKyAgICBWRVJJRllfQ1JMICA9IDIsCisgICAgVkVSSUZZX09DU1AgPSAzLAorICAgIFZFUklGWV9OQU1FID0gNCwKKyAgICBWRVJJRllfU0tJUF9EQVRFID0gNSwKKyAgICBWRVJJRllfT0NTUF9DRVJUID0gNiwKK307CisKKyNpZmRlZiBXT0xGU1NMX0NFUlRfRVhUCitlbnVtIEtleUlkVHlwZSB7CisgICAgU0tJRF9UWVBFID0gMCwKKyAgICBBS0lEX1RZUEUgPSAxCit9OworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0NFUlRfUkVRCitlbnVtIENzckF0dHJUeXBlIHsKKyAgICBDSEFMTEVOR0VfUEFTU1dPUkRfT0lEID0gNjU5LAorICAgIFNFUklBTF9OVU1CRVJfT0lEID0gOTQsCisgICAgRVhURU5TSU9OX1JFUVVFU1RfT0lEID0gNjY2LAorfTsKKyNlbmRpZgorCisvKiBLZXkgdXNhZ2UgZXh0ZW5zaW9uIGJpdHMgKGJhc2VkIG9uIFJGQyA1MjgwKSAqLworI2RlZmluZSBLRVlVU0VfRElHSVRBTF9TSUcgICAgMHgwMDgwCisjZGVmaW5lIEtFWVVTRV9DT05URU5UX0NPTU1JVCAweDAwNDAKKyNkZWZpbmUgS0VZVVNFX0tFWV9FTkNJUEhFUiAgIDB4MDAyMAorI2RlZmluZSBLRVlVU0VfREFUQV9FTkNJUEhFUiAgMHgwMDEwCisjZGVmaW5lIEtFWVVTRV9LRVlfQUdSRUUgICAgICAweDAwMDgKKyNkZWZpbmUgS0VZVVNFX0tFWV9DRVJUX1NJR04gIDB4MDAwNAorI2RlZmluZSBLRVlVU0VfQ1JMX1NJR04gICAgICAgMHgwMDAyCisjZGVmaW5lIEtFWVVTRV9FTkNJUEhFUl9PTkxZICAweDAwMDEKKyNkZWZpbmUgS0VZVVNFX0RFQ0lQSEVSX09OTFkgIDB4ODAwMAorCisvKiBFeHRlbmRlZCBLZXkgVXNhZ2UgYml0cyAoaW50ZXJuYWwgbWFwcGluZyBvbmx5KSAqLworI2RlZmluZSBFWFRLRVlVU0VfVVNFUiAgICAgICAgMHg4MAorI2RlZmluZSBFWFRLRVlVU0VfT0NTUF9TSUdOICAgMHg0MAorI2RlZmluZSBFWFRLRVlVU0VfVElNRVNUQU1QICAgMHgyMAorI2RlZmluZSBFWFRLRVlVU0VfRU1BSUxQUk9UICAgMHgxMAorI2RlZmluZSBFWFRLRVlVU0VfQ09ERVNJR04gICAgMHgwOAorI2RlZmluZSBFWFRLRVlVU0VfQ0xJRU5UX0FVVEggMHgwNAorI2RlZmluZSBFWFRLRVlVU0VfU0VSVkVSX0FVVEggMHgwMgorI2RlZmluZSBFWFRLRVlVU0VfQU5ZICAgICAgICAgMHgwMQorCit0eXBlZGVmIHN0cnVjdCBETlNfZW50cnkgICBETlNfZW50cnk7CisKK3N0cnVjdCBETlNfZW50cnkgeworICAgIEROU19lbnRyeSogbmV4dDsgICAvKiBuZXh0IG9uIEROUyBsaXN0ICovCisgICAgaW50ICAgICAgICB0eXBlOyAgIC8qIGkuZS4gQVNOX0ROU19UWVBFICovCisgICAgaW50ICAgICAgICBsZW47ICAgIC8qIGFjdHVhbCBETlMgbGVuICovCisgICAgY2hhciogICAgICBuYW1lOyAgIC8qIGFjdHVhbCBETlMgbmFtZSAqLworfTsKKworCit0eXBlZGVmIHN0cnVjdCBCYXNlX2VudHJ5ICBCYXNlX2VudHJ5OworCitzdHJ1Y3QgQmFzZV9lbnRyeSB7CisgICAgQmFzZV9lbnRyeSogbmV4dDsgICAvKiBuZXh0IG9uIG5hbWUgYmFzZSBsaXN0ICovCisgICAgY2hhciogICAgICAgbmFtZTsgICAvKiBhY3R1YWwgbmFtZSBiYXNlICovCisgICAgaW50ICAgICAgICAgbmFtZVN6OyAvKiBuYW1lIGxlbmd0aCAqLworICAgIGJ5dGUgICAgICAgIHR5cGU7ICAgLyogTmFtZSBiYXNlIHR5cGUgKEROUyBvciBSRkM4MjIpICovCit9OworCisKK2VudW0gU2lnbmF0dXJlU3RhdGUgeworICAgIFNJR19TVEFURV9CRUdJTiwKKyAgICBTSUdfU1RBVEVfSEFTSCwKKyAgICBTSUdfU1RBVEVfS0VZLAorICAgIFNJR19TVEFURV9ETywKKyAgICBTSUdfU1RBVEVfQ0hFQ0ssCit9OworCisKKyNpZmRlZiBIQVZFX1BLX0NBTExCQUNLUworI2lmZGVmIEhBVkVfRUNDCisgICAgdHlwZWRlZiBpbnQgKCp3Y19DYWxsYmFja0VjY1ZlcmlmeSkoCisgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNpZywgdW5zaWduZWQgaW50IHNpZ1N6LAorICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBoYXNoLCB1bnNpZ25lZCBpbnQgaGFzaFN6LAorICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXlEZXIsIHVuc2lnbmVkIGludCBrZXlTeiwKKyAgICAgICAgICAgaW50KiByZXN1bHQsIHZvaWQqIGN0eCk7CisjZW5kaWYKKyNpZm5kZWYgTk9fUlNBCisgICAgdHlwZWRlZiBpbnQgKCp3Y19DYWxsYmFja1JzYVZlcmlmeSkoCisgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNpZywgdW5zaWduZWQgaW50IHNpZ1N6LAorICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiogb3V0LAorICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXlEZXIsIHVuc2lnbmVkIGludCBrZXlTeiwKKyAgICAgICAgICAgdm9pZCogY3R4KTsKKyNlbmRpZgorI2VuZGlmIC8qIEhBVkVfUEtfQ0FMTEJBQ0tTICovCisKK3N0cnVjdCBTaWduYXR1cmVDdHggeworICAgIHZvaWQqIGhlYXA7CisgICAgYnl0ZSogZGlnZXN0OworI2lmbmRlZiBOT19SU0EKKyAgICBieXRlKiBvdXQ7CisjZW5kaWYKKyNpZiAhKGRlZmluZWQoTk9fUlNBKSAmJiBkZWZpbmVkKE5PX0RTQSkpCisgICAgYnl0ZSogc2lnQ3B5OworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0VDQykgfHwgZGVmaW5lZChIQVZFX0VEMjU1MTkpIHx8IGRlZmluZWQoSEFWRV9FRDQ0OCkgfHwgXAorICAgICFkZWZpbmVkKE5PX0RTQSkKKyAgICBpbnQgdmVyaWZ5OworI2VuZGlmCisgICAgdW5pb24geworICAgICNpZm5kZWYgTk9fUlNBCisgICAgICAgIHN0cnVjdCBSc2FLZXkqICAgICAgcnNhOworICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fRFNBCisgICAgICAgIHN0cnVjdCBEc2FLZXkqICAgICAgZHNhOworICAgICNlbmRpZgorICAgICNpZmRlZiBIQVZFX0VDQworICAgICAgICBzdHJ1Y3QgZWNjX2tleSogICAgIGVjYzsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgSEFWRV9FRDI1NTE5CisgICAgICAgIHN0cnVjdCBlZDI1NTE5X2tleSogZWQyNTUxOTsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgSEFWRV9FRDQ0OAorICAgICAgICBzdHJ1Y3QgZWQ0NDhfa2V5KiBlZDQ0ODsKKyAgICAjZW5kaWYKKyAgICAgICAgdm9pZCogcHRyOworICAgIH0ga2V5OworICAgIGludCBkZXZJZDsKKyAgICBpbnQgc3RhdGU7CisgICAgaW50IHR5cGVIOworICAgIGludCBkaWdlc3RTejsKKyAgICB3b3JkMzIga2V5T0lEOworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICBXQ19BU1lOQ19ERVYqIGFzeW5jRGV2OworICAgIHZvaWQqIGFzeW5jQ3R4OworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BLX0NBTExCQUNLUworI2lmZGVmIEhBVkVfRUNDCisgICAgd2NfQ2FsbGJhY2tFY2NWZXJpZnkgcGtDYkVjYzsKKyAgICB2b2lkKiBwa0N0eEVjYzsKKyNlbmRpZgorI2lmbmRlZiBOT19SU0EKKyAgICB3Y19DYWxsYmFja1JzYVZlcmlmeSBwa0NiUnNhOworICAgIHZvaWQqIHBrQ3R4UnNhOworI2VuZGlmCisjZW5kaWYgLyogSEFWRV9QS19DQUxMQkFDS1MgKi8KKyNpZm5kZWYgTk9fUlNBCisjaWZkZWYgV09MRlNTTF9SRU5FU0FTX1RTSVBfVExTCisgICAgYnl0ZSB2ZXJpZnlCeVRTSVA7CisgICAgd29yZDMyIGNlcnRCZWdpbjsKKyAgICB3b3JkMzIgcHVia2V5X25fc3RhcnQ7CisgICAgd29yZDMyIHB1YmtleV9uX2xlbjsKKyAgICB3b3JkMzIgcHVia2V5X2Vfc3RhcnQ7CisgICAgd29yZDMyIHB1YmtleV9lX2xlbjsKKyNlbmRpZgorI2VuZGlmCit9OworCitlbnVtIENlcnRTaWduU3RhdGUgeworICAgIENFUlRTSUdOX1NUQVRFX0JFR0lOLAorICAgIENFUlRTSUdOX1NUQVRFX0RJR0VTVCwKKyAgICBDRVJUU0lHTl9TVEFURV9FTkNPREUsCisgICAgQ0VSVFNJR05fU1RBVEVfRE8sCit9OworCitzdHJ1Y3QgQ2VydFNpZ25DdHggeworICAgIGJ5dGUqIHNpZzsKKyAgICBieXRlKiBkaWdlc3Q7CisgICAgI2lmbmRlZiBOT19SU0EKKyAgICAgICAgYnl0ZSogZW5jU2lnOworICAgICAgICBpbnQgZW5jU2lnU3o7CisgICAgI2VuZGlmCisgICAgaW50IHN0YXRlOyAvKiBlbnVtIENlcnRTaWduU3RhdGUgKi8KK307CisKKyNpZm5kZWYgV09MRlNTTF9NQVhfUEFUSF9MRU4KKyAgICAvKiBSRkMgNTI4MCBTZWN0aW9uIDYuMS4yLiAiSW5pdGlhbGl6YXRpb24iIC0gaXRlbSAoaykgZGVmaW5lcworICAgICAqICAgICAoaykgIG1heF9wYXRoX2xlbmd0aDogIHRoaXMgaW50ZWdlciBpcyBpbml0aWFsaXplZCB0byAibiIsIGlzCisgICAgICogICAgIGRlY3JlbWVudGVkIGZvciBlYWNoIG5vbi1zZWxmLWlzc3VlZCBjZXJ0aWZpY2F0ZSBpbiB0aGUgcGF0aCwKKyAgICAgKiAgICAgYW5kIG1heSBiZSByZWR1Y2VkIHRvIHRoZSB2YWx1ZSBpbiB0aGUgcGF0aCBsZW5ndGggY29uc3RyYWludAorICAgICAqICAgICBmaWVsZCB3aXRoaW4gdGhlIGJhc2ljIGNvbnN0cmFpbnRzIGV4dGVuc2lvbiBvZiBhIENBCisgICAgICogICAgIGNlcnRpZmljYXRlLgorICAgICAqCisgICAgICogd29sZlNTTCBoYXMgYXJiaXRyYXJpbHkgc2VsZWN0ZWQgdGhlIHZhbHVlIDEyNyBmb3IgIm4iIGluIHRoZSBhYm92ZQorICAgICAqIGRlc2NyaXB0aW9uLiBVc2VycyBjYW4gbW9kaWZ5IHRoZSBtYXhpbXVtIHBhdGggbGVuZ3RoIGJ5IHNldHRpbmcKKyAgICAgKiBXT0xGU1NMX01BWF9QQVRIX0xFTiB0byBhIHByZWZlcnJlZCB2YWx1ZSBhdCBidWlsZCB0aW1lCisgICAgICovCisgICAgI2RlZmluZSBXT0xGU1NMX01BWF9QQVRIX0xFTiAxMjcKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBEZWNvZGVkQ2VydCBEZWNvZGVkQ2VydDsKK3R5cGVkZWYgc3RydWN0IFNpZ25lciAgICAgIFNpZ25lcjsKKyNpZmRlZiBXT0xGU1NMX1RSVVNUX1BFRVJfQ0VSVAordHlwZWRlZiBzdHJ1Y3QgVHJ1c3RlZFBlZXJDZXJ0IFRydXN0ZWRQZWVyQ2VydDsKKyNlbmRpZiAvKiBXT0xGU1NMX1RSVVNUX1BFRVJfQ0VSVCAqLwordHlwZWRlZiBzdHJ1Y3QgU2lnbmF0dXJlQ3R4IFNpZ25hdHVyZUN0eDsKK3R5cGVkZWYgc3RydWN0IENlcnRTaWduQ3R4ICBDZXJ0U2lnbkN0eDsKKworCitzdHJ1Y3QgRGVjb2RlZENlcnQgeworICAgIGNvbnN0IGJ5dGUqIHB1YmxpY0tleTsKKyAgICB3b3JkMzIgIHB1YktleVNpemU7CisgICAgaW50ICAgICBwdWJLZXlTdG9yZWQ7CisgICAgd29yZDMyICBjZXJ0QmVnaW47ICAgICAgICAgICAgICAgLyogb2Zmc2V0IHRvIHN0YXJ0IG9mIGNlcnQgICAgICAgICAgKi8KKyAgICB3b3JkMzIgIHNpZ0luZGV4OyAgICAgICAgICAgICAgICAvKiBvZmZzZXQgdG8gc3RhcnQgb2Ygc2lnbmF0dXJlICAgICAqLworICAgIHdvcmQzMiAgc2lnTGVuZ3RoOyAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBzaWduYXR1cmUgICAgICAgICAgICAgICovCisgICAgd29yZDMyICBzaWduYXR1cmVPSUQ7ICAgICAgICAgICAgLyogc3VtIG9mIGFsZ29yaXRobSBvYmplY3QgaWQgICAgICAgKi8KKyAgICB3b3JkMzIgIGtleU9JRDsgICAgICAgICAgICAgICAgICAvKiBzdW0gb2Yga2V5IGFsZ28gIG9iamVjdCBpZCAgICAgICAqLworICAgIGludCAgICAgdmVyc2lvbjsgICAgICAgICAgICAgICAgIC8qIGNlcnQgdmVyc2lvbiwgMSBvciAzICAgICAgICAgICAgICovCisgICAgRE5TX2VudHJ5KiBhbHROYW1lczsgICAgICAgICAgICAgLyogYWx0IG5hbWVzIGxpc3Qgb2YgZG5zIGVudHJpZXMgICAgKi8KKyNpZm5kZWYgSUdOT1JFX05BTUVfQ09OU1RSQUlOVFMKKyAgICBETlNfZW50cnkqIGFsdEVtYWlsTmFtZXM7ICAgICAgICAvKiBhbHQgbmFtZXMgbGlzdCBvZiBSRkM4MjIgZW50cmllcyAqLworICAgIEROU19lbnRyeSogYWx0RGlyTmFtZXM7ICAgICAgICAgIC8qIGFsdCBuYW1lcyBsaXN0IG9mIERJUiBlbnRyaWVzICAgICovCisgICAgQmFzZV9lbnRyeSogcGVybWl0dGVkTmFtZXM7ICAgICAgLyogUGVybWl0dGVkIG5hbWUgYmFzZXMgICAgICAgICAgICAgKi8KKyAgICBCYXNlX2VudHJ5KiBleGNsdWRlZE5hbWVzOyAgICAgICAvKiBFeGNsdWRlZCBuYW1lIGJhc2VzICAgICAgICAgICAgICAqLworI2VuZGlmIC8qIElHTk9SRV9OQU1FX0NPTlNUUkFJTlRTICovCisgICAgYnl0ZSAgICBzdWJqZWN0SGFzaFtLRVlJRF9TSVpFXTsgLyogaGFzaCBvZiBhbGwgTmFtZXMgICAgICAgICAgICAgICAgKi8KKyAgICBieXRlICAgIGlzc3Vlckhhc2hbS0VZSURfU0laRV07ICAvKiBoYXNoIG9mIGFsbCBOYW1lcyAgICAgICAgICAgICAgICAqLworI2lmZGVmIEhBVkVfT0NTUAorICAgIGJ5dGUgICAgc3ViamVjdEtleUhhc2hbS0VZSURfU0laRV07IC8qIGhhc2ggb2YgdGhlIHB1YmxpYyBLZXkgICAgICAgICAqLworICAgIGJ5dGUgICAgaXNzdWVyS2V5SGFzaFtLRVlJRF9TSVpFXTsgLyogaGFzaCBvZiB0aGUgcHVibGljIEtleSAgICAgICAgICovCisjZW5kaWYgLyogSEFWRV9PQ1NQICovCisgICAgY29uc3QgYnl0ZSogc2lnbmF0dXJlOyAgICAgICAgICAgLyogbm90IG93bmVkLCBwb2ludHMgaW50byByYXcgY2VydCAgKi8KKyAgICBjaGFyKiAgIHN1YmplY3RDTjsgICAgICAgICAgICAgICAvKiBDb21tb25OYW1lICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCAgICAgc3ViamVjdENOTGVuOyAgICAgICAgICAgIC8qIENvbW1vbk5hbWUgTGVuZ3RoICAgICAgICAgICAgICAgICovCisgICAgY2hhciAgICBzdWJqZWN0Q05FbmM7ICAgICAgICAgICAgLyogQ29tbW9uTmFtZSBFbmNvZGluZyAgICAgICAgICAgICAgKi8KKyAgICBjaGFyICAgIGlzc3VlcltBU05fTkFNRV9NQVhdOyAgICAvKiBmdWxsIG5hbWUgaW5jbHVkaW5nIGNvbW1vbiBuYW1lICAqLworICAgIGNoYXIgICAgc3ViamVjdFtBU05fTkFNRV9NQVhdOyAgIC8qIGZ1bGwgbmFtZSBpbmNsdWRpbmcgY29tbW9uIG5hbWUgICovCisgICAgaW50ICAgICB2ZXJpZnk7ICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCB0byB5ZXMsIGJ1dCBjb3VsZCBiZSBvZmYgKi8KKyAgICBjb25zdCBieXRlKiBzb3VyY2U7ICAgICAgICAgICAgICAvKiBieXRlIGJ1ZmZlciBob2xkZXIgY2VydCwgTk9UIG93bmVyICovCisgICAgd29yZDMyICBzcmNJZHg7ICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBvZmZzZXQgaW50byBidWZmZXIgICAgICAgKi8KKyAgICB3b3JkMzIgIG1heElkeDsgICAgICAgICAgICAgICAgICAvKiBtYXggb2Zmc2V0IGJhc2VkIG9uIGluaXQgc2l6ZSAgICAqLworICAgIHZvaWQqICAgaGVhcDsgICAgICAgICAgICAgICAgICAgIC8qIGZvciB1c2VyIG1lbW9yeSBvdmVycmlkZXMgICAgICAgICovCisgICAgYnl0ZSAgICBzZXJpYWxbRVhURVJOQUxfU0VSSUFMX1NJWkVdOyAgLyogcmF3IHNlcmlhbCBudW1iZXIgICAgICAgICAgKi8KKyAgICBpbnQgICAgIHNlcmlhbFN6OyAgICAgICAgICAgICAgICAvKiByYXcgc2VyaWFsIGJ5dGVzIHN0b3JlZCAqLworICAgIGNvbnN0IGJ5dGUqIGV4dGVuc2lvbnM7ICAgICAgICAgIC8qIG5vdCBvd25lZCwgcG9pbnRzIGludG8gcmF3IGNlcnQgICovCisgICAgaW50ICAgICBleHRlbnNpb25zU3o7ICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGNlcnQgZXh0ZW5zaW9ucyAqLworICAgIHdvcmQzMiAgZXh0ZW5zaW9uc0lkeDsgICAgICAgICAgIC8qIGlmIHdhbnQgdG8gZ28gYmFjayBhbmQgcGFyc2UgbGF0ZXIgKi8KKyAgICBjb25zdCBieXRlKiBleHRBdXRoSW5mbzsgICAgICAgICAvKiBBdXRob3JpdHkgSW5mb3JtYXRpb24gQWNjZXNzIFVSSSAqLworICAgIGludCAgICAgZXh0QXV0aEluZm9TejsgICAgICAgICAgIC8qIGxlbmd0aCBvZiB0aGUgVVJJICAgICAgICAgICAgICAgICovCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX1FUKQorICAgIGNvbnN0IGJ5dGUqIGV4dEF1dGhJbmZvQ2FJc3N1ZXI7IC8qIEF1dGhvcml0eSBJbmZvIEFjY2VzcyBjYUlzc3VlciBVUkkgKi8KKyAgICBpbnQgICAgIGV4dEF1dGhJbmZvQ2FJc3N1ZXJTejsgICAvKiBsZW5ndGggb2YgdGhlIGNhSXNzdWVyIFVSSSAgICAgICAgICovCisjZW5kaWYKKyAgICBjb25zdCBieXRlKiBleHRDcmxJbmZvOyAgICAgICAgICAvKiBDUkwgRGlzdHJpYnV0aW9uIFBvaW50cyAgICAgICAgICAqLworICAgIGludCAgICAgZXh0Q3JsSW5mb1N6OyAgICAgICAgICAgIC8qIGxlbmd0aCBvZiB0aGUgVVJJICAgICAgICAgICAgICAgICovCisgICAgYnl0ZSAgICBleHRTdWJqS2V5SWRbS0VZSURfU0laRV07IC8qIFN1YmplY3QgS2V5IElEICAgICAgICAgICAgICAgICAgKi8KKyAgICBieXRlICAgIGV4dEF1dGhLZXlJZFtLRVlJRF9TSVpFXTsgLyogQXV0aG9yaXR5IEtleSBJRCAgICAgICAgICAgICAgICAqLworICAgIGJ5dGUgICAgcGF0aExlbmd0aDsgICAgICAgICAgICAgIC8qIENBIGJhc2ljIGNvbnN0cmFpbnQgcGF0aCBsZW5ndGggICovCisgICAgYnl0ZSAgICBtYXhQYXRoTGVuOyAgICAgICAgICAgICAgLyogbWF4X3BhdGhfbGVuIHNlZSBSRkMgNTI4MCBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogNi4xLjIgIkluaXRpYWxpemF0aW9uIiAtIChrKSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkZXNjcmlwdGlvbiBvZiBtYXhfcGF0aF9sZW4gKi8KKyAgICBieXRlICAgIHBvbGljeUNvbnN0U2tpcDsgICAgICAgICAvKiBQb2xpY3kgQ29uc3RyYWludHMgc2tpcCBjZXJ0cyB2YWx1ZSAqLworICAgIHdvcmQxNiAgZXh0S2V5VXNhZ2U7ICAgICAgICAgICAgIC8qIEtleSB1c2FnZSBiaXRmaWVsZCAgICAgICAgICAgICAgICovCisgICAgYnl0ZSAgICBleHRFeHRLZXlVc2FnZTsgICAgICAgICAgLyogRXh0ZW5kZWQgS2V5IHVzYWdlIGJpdGZpZWxkICAgICAgKi8KKworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpCisgICAgY29uc3QgYnl0ZSogZXh0RXh0S2V5VXNhZ2VTcmM7CisgICAgd29yZDMyICBleHRFeHRLZXlVc2FnZVN6OworICAgIHdvcmQzMiAgZXh0RXh0S2V5VXNhZ2VDb3VudDsKKyAgICBjb25zdCBieXRlKiBleHRBdXRoS2V5SWRTcmM7CisgICAgd29yZDMyICBleHRBdXRoS2V5SWRTejsKKyAgICBjb25zdCBieXRlKiBleHRTdWJqS2V5SWRTcmM7CisgICAgd29yZDMyICBleHRTdWJqS2V5SWRTejsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0VDQykgfHwgZGVmaW5lZChIQVZFX0VEMjU1MTkpIHx8IGRlZmluZWQoSEFWRV9FRDQ0OCkKKyAgICB3b3JkMzIgIHBrQ3VydmVPSUQ7ICAgICAgICAgICAvKiBQdWJsaWMgS2V5J3MgY3VydmUgT0lEICovCisjZW5kaWYgLyogSEFWRV9FQ0MgKi8KKyAgICBjb25zdCBieXRlKiBiZWZvcmVEYXRlOworICAgIGludCAgICAgYmVmb3JlRGF0ZUxlbjsKKyAgICBjb25zdCBieXRlKiBhZnRlckRhdGU7CisgICAgaW50ICAgICBhZnRlckRhdGVMZW47CisjaWYgZGVmaW5lZChIQVZFX1BLQ1M3KSB8fCBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9FWFQpCisgICAgY29uc3QgYnl0ZSogaXNzdWVyUmF3OyAgICAgICAgICAgLyogcG9pbnRlciB0byBpc3N1ZXIgaW5zaWRlIHNvdXJjZSAqLworICAgIGludCAgICAgaXNzdWVyUmF3TGVuOworI2VuZGlmCisjaWYgIWRlZmluZWQoSUdOT1JFX05BTUVfQ09OU1RSQUlOVFMpIHx8IGRlZmluZWQoV09MRlNTTF9DRVJUX0VYVCkKKyAgICBjb25zdCBieXRlKiBzdWJqZWN0UmF3OyAgICAgICAgICAvKiBwb2ludGVyIHRvIHN1YmplY3QgaW5zaWRlIHNvdXJjZSAqLworICAgIGludCAgICAgc3ViamVjdFJhd0xlbjsKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9DRVJUX0dFTikgfHwgZGVmaW5lZChXT0xGU1NMX0NFUlRfRVhUKQorICAgIC8qIGVhc3kgYWNjZXNzIHRvIHN1YmplY3QgaW5mbyBmb3Igb3RoZXIgc2lnbiAqLworICAgIGNoYXIqICAgc3ViamVjdFNOOworICAgIGludCAgICAgc3ViamVjdFNOTGVuOworICAgIGNoYXIgICAgc3ViamVjdFNORW5jOworICAgIGNoYXIqICAgc3ViamVjdEM7CisgICAgaW50ICAgICBzdWJqZWN0Q0xlbjsKKyAgICBjaGFyICAgIHN1YmplY3RDRW5jOworICAgIGNoYXIqICAgc3ViamVjdEw7CisgICAgaW50ICAgICBzdWJqZWN0TExlbjsKKyAgICBjaGFyICAgIHN1YmplY3RMRW5jOworICAgIGNoYXIqICAgc3ViamVjdFNUOworICAgIGludCAgICAgc3ViamVjdFNUTGVuOworICAgIGNoYXIgICAgc3ViamVjdFNURW5jOworICAgIGNoYXIqICAgc3ViamVjdE87CisgICAgaW50ICAgICBzdWJqZWN0T0xlbjsKKyAgICBjaGFyICAgIHN1YmplY3RPRW5jOworICAgIGNoYXIqICAgc3ViamVjdE9VOworICAgIGludCAgICAgc3ViamVjdE9VTGVuOworICAgIGNoYXIgICAgc3ViamVjdE9VRW5jOworICAgIGNoYXIqICAgc3ViamVjdFNORDsKKyAgICBpbnQgICAgIHN1YmplY3RTTkRMZW47CisgICAgY2hhciAgICBzdWJqZWN0U05ERW5jOworI2lmZGVmIFdPTEZTU0xfQ0VSVF9FWFQKKyAgICBjaGFyKiAgIHN1YmplY3RCQzsKKyAgICBpbnQgICAgIHN1YmplY3RCQ0xlbjsKKyAgICBjaGFyICAgIHN1YmplY3RCQ0VuYzsKKyAgICBjaGFyKiAgIHN1YmplY3RKQzsKKyAgICBpbnQgICAgIHN1YmplY3RKQ0xlbjsKKyAgICBjaGFyICAgIHN1YmplY3RKQ0VuYzsKKyAgICBjaGFyKiAgIHN1YmplY3RKUzsKKyAgICBpbnQgICAgIHN1YmplY3RKU0xlbjsKKyAgICBjaGFyICAgIHN1YmplY3RKU0VuYzsKKyNlbmRpZgorICAgIGNoYXIqICAgc3ViamVjdEVtYWlsOworICAgIGludCAgICAgc3ViamVjdEVtYWlsTGVuOworI2VuZGlmIC8qIFdPTEZTU0xfQ0VSVF9HRU4gKi8KKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMKQorICAgIC8qIFdPTEZTU0xfWDUwOV9OQU1FIHN0cnVjdHVyZXMgKHVzZWQgdm9pZCogdG8gYXZvaWQgaW5jbHVkaW5nIHNzbC5oKSAqLworICAgIHZvaWQqIGlzc3Vlck5hbWU7CisgICAgdm9pZCogc3ViamVjdE5hbWU7CisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSAqLworI2lmZGVmIFdPTEZTU0xfU0VQCisgICAgaW50ICAgICBkZXZpY2VUeXBlU3o7CisgICAgYnl0ZSogICBkZXZpY2VUeXBlOworICAgIGludCAgICAgaHdUeXBlU3o7CisgICAgYnl0ZSogICBod1R5cGU7CisgICAgaW50ICAgICBod1NlcmlhbE51bVN6OworICAgIGJ5dGUqICAgaHdTZXJpYWxOdW07CisjZW5kaWYgLyogV09MRlNTTF9TRVAgKi8KKyNpZmRlZiBXT0xGU1NMX0NFUlRfRVhUCisgICAgY2hhciAgICBleHRDZXJ0UG9saWNpZXNbTUFYX0NFUlRQT0xfTkJdW01BWF9DRVJUUE9MX1NaXTsKKyAgICBpbnQgICAgIGV4dENlcnRQb2xpY2llc05iOworI2VuZGlmIC8qIGRlZmluZWQoV09MRlNTTF9DRVJUX0dFTikgfHwgZGVmaW5lZChXT0xGU1NMX0NFUlRfRVhUKSAqLworCisjaWZkZWYgV09MRlNTTF9DRVJUX1JFUQorICAgIC8qIENTUiBhdHRyaWJ1dGVzICovCisgICAgY2hhciogICBjUHdkOyAvKiBjaGFsbGVuZ2VQYXNzd29yZCAqLworICAgIGludCAgICAgY1B3ZExlbjsKKyAgICBjaGFyKiAgIHNOdW07IC8qIFNlcmlhbCBOdW1iZXIgKi8KKyAgICBpbnQgICAgIHNOdW1MZW47CisjZW5kaWYgLyogV09MRlNTTF9DRVJUX1JFUSAqLworCisgICAgU2lnbmVyKiBjYTsKKyNpZm5kZWYgTk9fQ0VSVFMKKyAgICBTaWduYXR1cmVDdHggc2lnQ3R4OworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9SRU5FU0FTX1RTSVAKKyAgICBieXRlKiAgdHNpcF9lbmNSc2FLZXlJZHg7CisjZW5kaWYKKworICAgIGludCBiYWREYXRlOworICAgIGludCBjcml0aWNhbEV4dDsKKworICAgIC8qIE9wdGlvbiBCaXRzICovCisgICAgYnl0ZSBzdWJqZWN0Q05TdG9yZWQgOiAxOyAgICAgIC8qIGhhdmUgd2Ugc2F2ZWQgYSBjb3B5IHdlIG93biAqLworICAgIGJ5dGUgZXh0U3ViaktleUlkU2V0IDogMTsgICAgICAvKiBTZXQgd2hlbiB0aGUgU0tJRCB3YXMgcmVhZCBmcm9tIGNlcnQgKi8KKyAgICBieXRlIGV4dEF1dGhLZXlJZFNldCA6IDE7ICAgICAgLyogU2V0IHdoZW4gdGhlIEFLSUQgd2FzIHJlYWQgZnJvbSBjZXJ0ICovCisjaWZuZGVmIElHTk9SRV9OQU1FX0NPTlNUUkFJTlRTCisgICAgYnl0ZSBleHROYW1lQ29uc3RyYWludFNldCA6IDE7CisjZW5kaWYKKyAgICBieXRlIGlzQ0EgOiAxOyAgICAgICAgICAgICAgICAgLyogQ0EgYmFzaWMgY29uc3RyYWludCB0cnVlICovCisgICAgYnl0ZSBwYXRoTGVuZ3RoU2V0IDogMTsgICAgICAgIC8qIENBIGJhc2ljIGNvbnN0IHBhdGggbGVuZ3RoIHNldCAqLworICAgIGJ5dGUgd2VPd25BbHROYW1lcyA6IDE7ICAgICAgICAvKiBhbHROYW1lcyBoYXZlbid0IGJlZW4gZ2l2ZW4gdG8gY29weSAqLworICAgIGJ5dGUgZXh0S2V5VXNhZ2VTZXQgOiAxOworICAgIGJ5dGUgZXh0RXh0S2V5VXNhZ2VTZXQgOiAxOyAgICAvKiBFeHRlbmRlZCBLZXkgVXNhZ2Ugc2V0ICovCisjaWZkZWYgSEFWRV9PQ1NQCisgICAgYnl0ZSBvY3NwTm9DaGVja1NldCA6IDE7ICAgICAgIC8qIGlkLXBraXgtb2NzcC1ub2NoZWNrIHNldCAqLworI2VuZGlmCisgICAgYnl0ZSBleHRDUkxkaXN0U2V0IDogMTsKKyAgICBieXRlIGV4dEF1dGhJbmZvU2V0IDogMTsKKyAgICBieXRlIGV4dEJhc2ljQ29uc3RTZXQgOiAxOworICAgIGJ5dGUgZXh0UG9saWN5Q29uc3RTZXQgOiAxOworICAgIGJ5dGUgZXh0UG9saWN5Q29uc3RSeHBTZXQgOiAxOyAvKiByZXF1aXJlRXhwbGljaXRQb2xpY3kgc2V0ICovCisgICAgYnl0ZSBleHRQb2xpY3lDb25zdElwbVNldCA6IDE7IC8qIGluaGliaXRQb2xpY3lNYXBwaW5nIHNldCAqLworICAgIGJ5dGUgZXh0U3ViakFsdE5hbWVTZXQgOiAxOworICAgIGJ5dGUgaW5oaWJpdEFueU9pZFNldCA6IDE7CisgICAgYnl0ZSBzZWxmU2lnbmVkIDogMTsgICAgICAgICAgIC8qIEluZGljYXRlcyBzdWJqZWN0IGFuZCBpc3N1ZXIgYXJlIHNhbWUgKi8KKyNpZiBkZWZpbmVkKFdPTEZTU0xfU0VQKSB8fCBkZWZpbmVkKFdPTEZTU0xfUVQpCisgICAgYnl0ZSBleHRDZXJ0UG9saWN5U2V0IDogMTsKKyNlbmRpZgorI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpCisgICAgYnl0ZSBleHRDUkxkaXN0Q3JpdCA6IDE7CisgICAgYnl0ZSBleHRBdXRoSW5mb0NyaXQgOiAxOworICAgIGJ5dGUgZXh0QmFzaWNDb25zdENyaXQgOiAxOworICAgIGJ5dGUgZXh0UG9saWN5Q29uc3RDcml0IDogMTsKKyAgICBieXRlIGV4dFN1YmpBbHROYW1lQ3JpdCA6IDE7CisgICAgYnl0ZSBleHRBdXRoS2V5SWRDcml0IDogMTsKKyAgICAjaWZuZGVmIElHTk9SRV9OQU1FX0NPTlNUUkFJTlRTCisgICAgICAgIGJ5dGUgZXh0TmFtZUNvbnN0cmFpbnRDcml0IDogMTsKKyAgICAjZW5kaWYKKyAgICBieXRlIGV4dFN1YmpLZXlJZENyaXQgOiAxOworICAgIGJ5dGUgZXh0S2V5VXNhZ2VDcml0IDogMTsKKyAgICBieXRlIGV4dEV4dEtleVVzYWdlQ3JpdCA6IDE7CisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSAqLworI2lmIGRlZmluZWQoV09MRlNTTF9TRVApIHx8IGRlZmluZWQoV09MRlNTTF9RVCkKKyAgICBieXRlIGV4dENlcnRQb2xpY3lDcml0IDogMTsKKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfQ0VSVF9SRVEKKyAgICBieXRlIGlzQ1NSIDogMTsgICAgICAgICAgICAgICAgLyogRG8gd2UgaW50ZW5kIG9uIHBhcnNpbmcgYSBDU1I/ICovCisjZW5kaWYKK307CisKKy8qIEFTTiBFbmNvZGVkIE5hbWUgZmllbGQgKi8KK3R5cGVkZWYgc3RydWN0IEVuY29kZWROYW1lIHsKKyAgICBpbnQgIG5hbWVMZW47ICAgICAgICAgICAgICAgIC8qIGFjdHVhbCBzdHJpbmcgdmFsdWUgbGVuZ3RoICovCisgICAgaW50ICB0b3RhbExlbjsgICAgICAgICAgICAgICAvKiB0b3RhbCBlbmNvZGVkIGxlbmd0aCAqLworICAgIGludCAgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogdHlwZSBvZiBuYW1lICovCisgICAgaW50ICB1c2VkOyAgICAgICAgICAgICAgICAgICAvKiBhcmUgd2UgYWN0dWFsbHkgdXNpbmcgdGhpcyBvbmUgKi8KKyAgICBieXRlIGVuY29kZWRbQ1RDX05BTUVfU0laRSAqIDJdOyAvKiBlbmNvZGluZyAqLworfSBFbmNvZGVkTmFtZTsKKworI2lmZGVmIE5PX1NIQQorICAgICNkZWZpbmUgU0lHTkVSX0RJR0VTVF9TSVpFIFdDX1NIQTI1Nl9ESUdFU1RfU0laRQorI2Vsc2UKKyAgICAjZGVmaW5lIFNJR05FUl9ESUdFU1RfU0laRSBXQ19TSEFfRElHRVNUX1NJWkUKKyNlbmRpZgorCisvKiBDQSBTaWduZXJzICovCisvKiBpZiBjaGFuZ2UgbGF5b3V0IGNoYW5nZSBQRVJTSVNUX0NFUlRfQ0FDSEUgZnVuY3Rpb25zIHRvbyAqLworc3RydWN0IFNpZ25lciB7CisgICAgd29yZDMyICBwdWJLZXlTaXplOworICAgIHdvcmQzMiAga2V5T0lEOyAgICAgICAgICAgICAgICAgIC8qIGtleSB0eXBlICovCisgICAgd29yZDE2ICBrZXlVc2FnZTsKKyAgICBieXRlICAgIG1heFBhdGhMZW47CisgICAgYnl0ZSAgICBwYXRoTGVuZ3RoOworICAgIGJ5dGUgICAgcGF0aExlbmd0aFNldCA6IDE7CisgICAgYnl0ZSAgICBzZWxmU2lnbmVkIDogMTsKKyAgICBjb25zdCBieXRlKiBwdWJsaWNLZXk7CisgICAgaW50ICAgICBuYW1lTGVuOworICAgIGNoYXIqICAgbmFtZTsgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1vbiBuYW1lICovCisjaWZuZGVmIElHTk9SRV9OQU1FX0NPTlNUUkFJTlRTCisgICAgICAgIEJhc2VfZW50cnkqIHBlcm1pdHRlZE5hbWVzOworICAgICAgICBCYXNlX2VudHJ5KiBleGNsdWRlZE5hbWVzOworI2VuZGlmIC8qIElHTk9SRV9OQU1FX0NPTlNUUkFJTlRTICovCisgICAgYnl0ZSAgICBzdWJqZWN0TmFtZUhhc2hbU0lHTkVSX0RJR0VTVF9TSVpFXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaGEgaGFzaCBvZiBuYW1lcyBpbiBjZXJ0aWZpY2F0ZSAqLworICAgICNpZm5kZWYgTk9fU0tJRAorICAgICAgICBieXRlICAgIHN1YmplY3RLZXlJZEhhc2hbU0lHTkVSX0RJR0VTVF9TSVpFXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaGEgaGFzaCBvZiBuYW1lcyBpbiBjZXJ0aWZpY2F0ZSAqLworICAgICNlbmRpZgorICAgICNpZmRlZiBIQVZFX09DU1AKKyAgICAgICAgYnl0ZSBzdWJqZWN0S2V5SGFzaFtLRVlJRF9TSVpFXTsKKyAgICAjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1NJR05FUl9ERVJfQ0VSVAorICAgIERlckJ1ZmZlciogZGVyQ2VydDsKKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfUkVORVNBU19UU0lQX1RMUworICAgIHdvcmQzMiBjbV9pZHg7CisjZW5kaWYKKyAgICBTaWduZXIqIG5leHQ7Cit9OworCisKKyNpZmRlZiBXT0xGU1NMX1RSVVNUX1BFRVJfQ0VSVAorLyogdXNlZCBmb3IgaGF2aW5nIHRydXN0ZWQgcGVlciBjZXJ0cyByYXRoZXIgdGhlbiBDQSAqLworc3RydWN0IFRydXN0ZWRQZWVyQ2VydCB7CisgICAgaW50ICAgICBuYW1lTGVuOworICAgIGNoYXIqICAgbmFtZTsgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1vbiBuYW1lICovCisgICAgI2lmbmRlZiBJR05PUkVfTkFNRV9DT05TVFJBSU5UUworICAgICAgICBCYXNlX2VudHJ5KiBwZXJtaXR0ZWROYW1lczsKKyAgICAgICAgQmFzZV9lbnRyeSogZXhjbHVkZWROYW1lczsKKyAgICAjZW5kaWYgLyogSUdOT1JFX05BTUVfQ09OU1RSQUlOVFMgKi8KKyAgICBieXRlICAgIHN1YmplY3ROYW1lSGFzaFtTSUdORVJfRElHRVNUX1NJWkVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNoYSBoYXNoIG9mIG5hbWVzIGluIGNlcnRpZmljYXRlICovCisgICAgI2lmbmRlZiBOT19TS0lECisgICAgICAgIGJ5dGUgICAgc3ViamVjdEtleUlkSGFzaFtTSUdORVJfRElHRVNUX1NJWkVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNoYSBoYXNoIG9mIG5hbWVzIGluIGNlcnRpZmljYXRlICovCisgICAgI2VuZGlmCisgICAgd29yZDMyIHNpZ0xlbjsKKyAgICBieXRlKiAgc2lnOworICAgIHN0cnVjdCBUcnVzdGVkUGVlckNlcnQqIG5leHQ7Cit9OworI2VuZGlmIC8qIFdPTEZTU0xfVFJVU1RfUEVFUl9DRVJUICovCisKKworLyogZm9yIHRlc3Rpbmcgb3IgY3VzdG9tIG9wZW5zc2wgd3JhcHBlcnMgKi8KKyNpZiBkZWZpbmVkKFdPTEZTU0xfVEVTVF9DRVJUKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IFwKKyAgICBkZWZpbmVkKE9QRU5TU0xfRVhUUkFfWDUwOV9TTUFMTCkKKyAgICAjZGVmaW5lIFdPTEZTU0xfQVNOX0FQSSBXT0xGU1NMX0FQSQorI2Vsc2UKKyAgICAjZGVmaW5lIFdPTEZTU0xfQVNOX0FQSSBXT0xGU1NMX0xPQ0FMCisjZW5kaWYKKworI2lmZGVmIEhBVkVfU01JTUUKKyNkZWZpbmUgTUlNRV9IRUFERVJfQVNDSUlfTUlOICAgMzMKKyNkZWZpbmUgTUlNRV9IRUFERVJfQVNDSUlfTUFYICAgMTI2CisKK3R5cGVkZWYgc3RydWN0IE1pbWVQYXJhbSBNaW1lUGFyYW07Cit0eXBlZGVmIHN0cnVjdCBNaW1lSGRyIE1pbWVIZHI7CisKK3N0cnVjdCBNaW1lUGFyYW0KK3sKKyAgICBNaW1lUGFyYW0qICBuZXh0OworICAgIGNoYXIqICAgICAgIGF0dHJpYnV0ZTsKKyAgICBjaGFyKiAgICAgICB2YWx1ZTsKK307CisKK3N0cnVjdCBNaW1lSGRyCit7CisgICAgTWltZUhkciogICAgbmV4dDsKKyAgICBNaW1lUGFyYW0qICBwYXJhbXM7CisgICAgY2hhciogICAgICAgbmFtZTsKKyAgICBjaGFyKiAgICAgICBib2R5OworfTsKKwordHlwZWRlZiBlbnVtIE1pbWVUeXBlcworeworICAgIE1JTUVfSERSLAorICAgIE1JTUVfUEFSQU0KK30gTWltZVR5cGVzOworCit0eXBlZGVmIGVudW0gTWltZVN0YXR1cworeworICAgIE1JTUVfTkFNRUFUVFIsCisgICAgTUlNRV9CT0RZVkFMCit9IE1pbWVTdGF0dXM7CisjZW5kaWYgLyogSEFWRV9TTUlNRSAqLworCisKK1dPTEZTU0xfTE9DQUwgaW50IENhbGNIYXNoSWQoY29uc3QgYnl0ZSogZGF0YSwgd29yZDMyIGxlbiwgYnl0ZSogaGFzaCk7CitXT0xGU1NMX0xPQ0FMIGludCBHZXROYW1lKERlY29kZWRDZXJ0KiBjZXJ0LCBpbnQgbmFtZVR5cGUsIGludCBtYXhJZHgpOworCitXT0xGU1NMX0FTTl9BUEkgaW50IHdjX0JlclRvRGVyKGNvbnN0IGJ5dGUqIGJlciwgd29yZDMyIGJlclN6LCBieXRlKiBkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiogZGVyU3opOworCitXT0xGU1NMX0FTTl9BUEkgdm9pZCBGcmVlQWx0TmFtZXMoRE5TX2VudHJ5Kiwgdm9pZCopOworI2lmbmRlZiBJR05PUkVfTkFNRV9DT05TVFJBSU5UUworICAgIFdPTEZTU0xfQVNOX0FQSSB2b2lkIEZyZWVOYW1lU3VidHJlZXMoQmFzZV9lbnRyeSosIHZvaWQqKTsKKyNlbmRpZiAvKiBJR05PUkVfTkFNRV9DT05TVFJBSU5UUyAqLworV09MRlNTTF9BU05fQVBJIHZvaWQgSW5pdERlY29kZWRDZXJ0KERlY29kZWRDZXJ0KiwgY29uc3QgYnl0ZSosIHdvcmQzMiwgdm9pZCopOworV09MRlNTTF9BU05fQVBJIHZvaWQgRnJlZURlY29kZWRDZXJ0KERlY29kZWRDZXJ0Kik7CitXT0xGU1NMX0FTTl9BUEkgaW50ICBQYXJzZUNlcnQoRGVjb2RlZENlcnQqLCBpbnQgdHlwZSwgaW50IHZlcmlmeSwgdm9pZCogY20pOworCitXT0xGU1NMX0xPQ0FMIGludCBEZWNvZGVQb2xpY3lPSUQoY2hhciAqbywgd29yZDMyIG9TeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlICppbiwgd29yZDMyIGluU3opOworV09MRlNTTF9MT0NBTCBpbnQgRW5jb2RlUG9saWN5T0lEKGJ5dGUgKm91dCwgd29yZDMyICpvdXRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbiwgdm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSSBpbnQgQ2hlY2tDZXJ0U2lnbmF0dXJlKGNvbnN0IGJ5dGUqLHdvcmQzMix2b2lkKix2b2lkKiBjbSk7CitXT0xGU1NMX0xPQ0FMIGludCBDaGVja0NlcnRTaWduYXR1cmVQdWJLZXkoY29uc3QgYnl0ZSogY2VydCwgd29yZDMyIGNlcnRTeiwKKyAgICAgICAgdm9pZCogaGVhcCwgY29uc3QgYnl0ZSogcHViS2V5LCB3b3JkMzIgcHViS2V5U3osIGludCBwdWJLZXlPSUQpOworI2lmZGVmIFdPTEZTU0xfQ0VSVF9SRVEKK1dPTEZTU0xfTE9DQUwgaW50IENoZWNrQ1NSU2lnbmF0dXJlUHViS2V5KGNvbnN0IGJ5dGUqIGNlcnQsIHdvcmQzMiBjZXJ0U3osIHZvaWQqIGhlYXAsCisgICAgICAgIGNvbnN0IGJ5dGUqIHB1YktleSwgd29yZDMyIHB1YktleVN6LCBpbnQgcHViS2V5T0lEKTsKKyNlbmRpZiAvKiBXT0xGU1NMX0NFUlRfUkVRICovCitXT0xGU1NMX0xPQ0FMIGludCBBZGRTaWduYXR1cmUoYnl0ZSogYnVmLCBpbnQgYm9keVN6LCBjb25zdCBieXRlKiBzaWcsIGludCBzaWdTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWdBbGdvVHlwZSk7CitXT0xGU1NMX0xPQ0FMIGludCBQYXJzZUNlcnRSZWxhdGl2ZShEZWNvZGVkQ2VydCosaW50IHR5cGUsaW50IHZlcmlmeSx2b2lkKiBjbSk7CitXT0xGU1NMX0xPQ0FMIGludCBEZWNvZGVUb0tleShEZWNvZGVkQ2VydCosIGludCB2ZXJpZnkpOworV09MRlNTTF9MT0NBTCBpbnQgd2NfR2V0UHViWDUwOShEZWNvZGVkQ2VydCogY2VydCwgaW50IHZlcmlmeSwgaW50KiBiYWREYXRlKTsKKworV09MRlNTTF9MT0NBTCBjb25zdCBieXRlKiBPaWRGcm9tSWQod29yZDMyIGlkLCB3b3JkMzIgdHlwZSwgd29yZDMyKiBvaWRTeik7CitXT0xGU1NMX0xPQ0FMIFNpZ25lciogTWFrZVNpZ25lcih2b2lkKik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgICAgRnJlZVNpZ25lcihTaWduZXIqLCB2b2lkKik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgICAgRnJlZVNpZ25lclRhYmxlKFNpZ25lcioqLCBpbnQsIHZvaWQqKTsKKyNpZmRlZiBXT0xGU1NMX1RSVVNUX1BFRVJfQ0VSVAorV09MRlNTTF9MT0NBTCB2b2lkICAgIEZyZWVUcnVzdGVkUGVlcihUcnVzdGVkUGVlckNlcnQqLCB2b2lkKik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgICAgRnJlZVRydXN0ZWRQZWVyVGFibGUoVHJ1c3RlZFBlZXJDZXJ0KiosIGludCwgdm9pZCopOworI2VuZGlmIC8qIFdPTEZTU0xfVFJVU1RfUEVFUl9DRVJUICovCisKK1dPTEZTU0xfQVNOX0FQSSBpbnQgVG9UcmFkaXRpb25hbChieXRlKiBidWZmZXIsIHdvcmQzMiBsZW5ndGgpOworV09MRlNTTF9BU05fQVBJIGludCBUb1RyYWRpdGlvbmFsX2V4KGJ5dGUqIGJ1ZmZlciwgd29yZDMyIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIqIGFsZ0lkKTsKK1dPTEZTU0xfTE9DQUwgaW50IFRvVHJhZGl0aW9uYWxJbmxpbmUoY29uc3QgYnl0ZSogaW5wdXQsIHdvcmQzMiogaW5PdXRJZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBsZW5ndGgpOworV09MRlNTTF9MT0NBTCBpbnQgVG9UcmFkaXRpb25hbElubGluZV9leChjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGxlbmd0aCwgd29yZDMyKiBhbGdJZCk7CitXT0xGU1NMX0xPQ0FMIGludCBUb1RyYWRpdGlvbmFsRW5jKGJ5dGUqIGJ1ZmZlciwgd29yZDMyIGxlbmd0aCxjb25zdCBjaGFyKixpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiogYWxnSWQpOworV09MRlNTTF9BU05fQVBJIGludCBVblRyYWRpdGlvbmFsRW5jKGJ5dGUqIGtleSwgd29yZDMyIGtleVN6LCBieXRlKiBvdXQsCisgICAgICAgIHdvcmQzMiogb3V0U3osIGNvbnN0IGNoYXIqIHBhc3N3b3JkLCBpbnQgcGFzc3dvcmRTeiwgaW50IHZQS0NTLAorICAgICAgICBpbnQgdkFsZ28sIGJ5dGUqIHNhbHQsIHdvcmQzMiBzYWx0U3osIGludCBpdHQsIFdDX1JORyogcm5nLCB2b2lkKiBoZWFwKTsKK1dPTEZTU0xfQVNOX0FQSSBpbnQgVHJhZGl0aW9uYWxFbmMoYnl0ZSoga2V5LCB3b3JkMzIga2V5U3osIGJ5dGUqIG91dCwKKyAgICAgICAgd29yZDMyKiBvdXRTeiwgY29uc3QgY2hhciogcGFzc3dvcmQsIGludCBwYXNzd29yZFN6LCBpbnQgdlBLQ1MsCisgICAgICAgIGludCB2QWxnbywgaW50IGVuY0FsZ0lkLCBieXRlKiBzYWx0LCB3b3JkMzIgc2FsdFN6LCBpbnQgaXR0LAorICAgICAgICBXQ19STkcqIHJuZywgdm9pZCogaGVhcCk7CitXT0xGU1NMX0xPQ0FMIGludCBEZWNyeXB0Q29udGVudChieXRlKiBpbnB1dCwgd29yZDMyIHN6LGNvbnN0IGNoYXIqIHBzdyxpbnQgcHN3U3opOworV09MRlNTTF9MT0NBTCBpbnQgRW5jcnlwdENvbnRlbnQoYnl0ZSogaW5wdXQsIHdvcmQzMiBzeiwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dFN6LAorICAgICAgICBjb25zdCBjaGFyKiBwYXNzd29yZCxpbnQgcGFzc3dvcmRTeiwgaW50IHZQS0NTLCBpbnQgdkFsZ28sCisgICAgICAgIGJ5dGUqIHNhbHQsIHdvcmQzMiBzYWx0U3osIGludCBpdHQsIFdDX1JORyogcm5nLCB2b2lkKiBoZWFwKTsKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0dldEtleU9JRChieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwgY29uc3QgYnl0ZSoqIGN1cnZlT0lELAorICAgICAgICB3b3JkMzIqIG9pZFN6LCBpbnQqIGFsZ29JRCwgdm9pZCogaGVhcCk7CisKK3R5cGVkZWYgc3RydWN0IHRtIHdvbGZzc2xfdG07CisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX01ZU1FMX0NPTVBBVElCTEUpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgXAorICAgIGRlZmluZWQoV09MRlNTTF9OR0lOWCkgfHwgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpCitXT0xGU1NMX0xPQ0FMIGludCBHZXRUaW1lU3RyaW5nKGJ5dGUqIGRhdGUsIGludCBmb3JtYXQsIGNoYXIqIGJ1ZiwgaW50IGxlbik7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChOT19BU05fVElNRSkgJiYgZGVmaW5lZChIQVZFX1BLQ1M3KQorV09MRlNTTF9MT0NBTCBpbnQgR2V0QXNuVGltZVN0cmluZyh2b2lkKiBjdXJyVGltZSwgYnl0ZSogYnVmLCB3b3JkMzIgbGVuKTsKKyNlbmRpZgorV09MRlNTTF9MT0NBTCBpbnQgRXh0cmFjdERhdGUoY29uc3QgdW5zaWduZWQgY2hhciogZGF0ZSwgdW5zaWduZWQgY2hhciBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZnNzbF90bSogY2VydFRpbWUsIGludCogaWR4KTsKK1dPTEZTU0xfTE9DQUwgaW50IERhdGVHcmVhdGVyVGhhbihjb25zdCBzdHJ1Y3QgdG0qIGEsIGNvbnN0IHN0cnVjdCB0bSogYik7CitXT0xGU1NMX0xPQ0FMIGludCB3Y19WYWxpZGF0ZURhdGUoY29uc3QgYnl0ZSogZGF0ZSwgYnl0ZSBmb3JtYXQsIGludCBkYXRlVHlwZSk7CitXT0xGU1NMX0xPQ0FMIGludCB3Y19PQkpfc24ybmlkKGNvbnN0IGNoYXIgKnNuKTsKKworV09MRlNTTF9MT0NBTCBpbnQgd2NfRW5jb2RlTmFtZShFbmNvZGVkTmFtZSogbmFtZSwgY29uc3QgY2hhciogbmFtZVN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBuYW1lVHlwZSwgYnl0ZSB0eXBlKTsKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0VuY29kZU5hbWVDYW5vbmljYWwoRW5jb2RlZE5hbWUqIG5hbWUsIGNvbnN0IGNoYXIqIG5hbWVTdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgbmFtZVR5cGUsIGJ5dGUgdHlwZSk7CisvKiBBU04uMSBoZWxwZXIgZnVuY3Rpb25zICovCisjaWZkZWYgV09MRlNTTF9DRVJUX0dFTgorV09MRlNTTF9BU05fQVBJIGludCBTZXROYW1lKGJ5dGUqIG91dHB1dCwgd29yZDMyIG91dHB1dFN6LCBDZXJ0TmFtZSogbmFtZSk7CitXT0xGU1NMX0xPQ0FMIGNvbnN0IGNoYXIqIEdldE9uZUNlcnROYW1lKENlcnROYW1lKiBuYW1lLCBpbnQgaWR4KTsKK1dPTEZTU0xfTE9DQUwgYnl0ZSBHZXRDZXJ0TmFtZUlkKGludCBpZHgpOworI2VuZGlmCitXT0xGU1NMX0xPQ0FMIGludCBHZXRTaG9ydEludChjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwgaW50KiBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgbWF4SWR4KTsKK1dPTEZTU0xfTE9DQUwgaW50IFNldFNob3J0SW50KGJ5dGUqIGlucHV0LCB3b3JkMzIqIGluT3V0SWR4LCB3b3JkMzIgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG1heElkeCk7CisKK1dPTEZTU0xfTE9DQUwgY29uc3QgY2hhciogR2V0U2lnTmFtZShpbnQgb2lkKTsKK1dPTEZTU0xfTE9DQUwgaW50IEdldExlbmd0aChjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwgaW50KiBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgbWF4SWR4KTsKK1dPTEZTU0xfTE9DQUwgaW50IEdldExlbmd0aF9leChjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwgaW50KiBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgbWF4SWR4LCBpbnQgY2hlY2spOworV09MRlNTTF9MT0NBTCBpbnQgR2V0U2VxdWVuY2UoY29uc3QgYnl0ZSogaW5wdXQsIHdvcmQzMiogaW5PdXRJZHgsIGludCogbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgbWF4SWR4KTsKK1dPTEZTU0xfTE9DQUwgaW50IEdldFNlcXVlbmNlX2V4KGNvbnN0IGJ5dGUqIGlucHV0LCB3b3JkMzIqIGluT3V0SWR4LCBpbnQqIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBtYXhJZHgsIGludCBjaGVjayk7CitXT0xGU1NMX0xPQ0FMIGludCBHZXRPY3RldFN0cmluZyhjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwgaW50KiBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG1heElkeCk7CitXT0xGU1NMX0xPQ0FMIGludCBDaGVja0JpdFN0cmluZyhjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwgaW50KiBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBtYXhJZHgsIGludCB6ZXJvQml0cywgYnl0ZSogdW51c2VkQml0cyk7CitXT0xGU1NMX0xPQ0FMIGludCBHZXRTZXQoY29uc3QgYnl0ZSogaW5wdXQsIHdvcmQzMiogaW5PdXRJZHgsIGludCogbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG1heElkeCk7CitXT0xGU1NMX0xPQ0FMIGludCBHZXRTZXRfZXgoY29uc3QgYnl0ZSogaW5wdXQsIHdvcmQzMiogaW5PdXRJZHgsIGludCogbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG1heElkeCwgaW50IGNoZWNrKTsKK1dPTEZTU0xfTE9DQUwgaW50IEdldE15VmVyc2lvbihjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogdmVyc2lvbiwgd29yZDMyIG1heElkeCk7CitXT0xGU1NMX0xPQ0FMIGludCBHZXRJbnQobXBfaW50KiBtcGksIGNvbnN0IGJ5dGUqIGlucHV0LCB3b3JkMzIqIGluT3V0SWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG1heElkeCk7CisjaWZkZWYgSEFWRV9PSURfRU5DT0RJTkcKKyAgICBXT0xGU1NMX0xPQ0FMIGludCBFbmNvZGVPYmplY3RJZChjb25zdCB3b3JkMTYqIGluLCB3b3JkMzIgaW5TeiwKKyAgICAgICAgYnl0ZSogb3V0LCB3b3JkMzIqIG91dFN6KTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfT0lEX0RFQ09ESU5HCisgICAgV09MRlNTTF9MT0NBTCBpbnQgRGVjb2RlT2JqZWN0SWQoY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpblN6LAorICAgICAgICB3b3JkMTYqIG91dCwgd29yZDMyKiBvdXRTeik7CisjZW5kaWYKK1dPTEZTU0xfTE9DQUwgaW50IEdldEFTTk9iamVjdElkKGNvbnN0IGJ5dGUqIGlucHV0LCB3b3JkMzIqIGluT3V0SWR4LCBpbnQqIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBtYXhJZHgpOworV09MRlNTTF9MT0NBTCBpbnQgU2V0T2JqZWN0SWQoaW50IGxlbiwgYnl0ZSogb3V0cHV0KTsKK1dPTEZTU0xfTE9DQUwgaW50IEdldE9iamVjdElkKGNvbnN0IGJ5dGUqIGlucHV0LCB3b3JkMzIqIGluT3V0SWR4LCB3b3JkMzIqIG9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBvaWRUeXBlLCB3b3JkMzIgbWF4SWR4KTsKK1dPTEZTU0xfTE9DQUwgaW50IEdldEFsZ29JZChjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwgd29yZDMyKiBvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgb2lkVHlwZSwgd29yZDMyIG1heElkeCk7CitXT0xGU1NMX0xPQ0FMIGludCBHZXRBU05UYWcoY29uc3QgYnl0ZSogaW5wdXQsIHdvcmQzMiogaWR4LCBieXRlKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGlucHV0U3opOworV09MRlNTTF9MT0NBTCB3b3JkMzIgU2V0TGVuZ3RoKHdvcmQzMiBsZW5ndGgsIGJ5dGUqIG91dHB1dCk7CitXT0xGU1NMX0xPQ0FMIHdvcmQzMiBTZXRTZXF1ZW5jZSh3b3JkMzIgbGVuLCBieXRlKiBvdXRwdXQpOworV09MRlNTTF9MT0NBTCB3b3JkMzIgU2V0T2N0ZXRTdHJpbmcod29yZDMyIGxlbiwgYnl0ZSogb3V0cHV0KTsKK1dPTEZTU0xfTE9DQUwgaW50IFNldEFTTkludChpbnQgbGVuLCBieXRlIGZpcnN0Qnl0ZSwgYnl0ZSogb3V0cHV0KTsKK1dPTEZTU0xfTE9DQUwgd29yZDMyIFNldEJpdFN0cmluZyh3b3JkMzIgbGVuLCBieXRlIHVudXNlZEJpdHMsIGJ5dGUqIG91dHB1dCk7CitXT0xGU1NMX0xPQ0FMIHdvcmQzMiBTZXRJbXBsaWNpdChieXRlIHRhZyxieXRlIG51bWJlcix3b3JkMzIgbGVuLGJ5dGUqIG91dHB1dCk7CitXT0xGU1NMX0xPQ0FMIHdvcmQzMiBTZXRFeHBsaWNpdChieXRlIG51bWJlciwgd29yZDMyIGxlbiwgYnl0ZSogb3V0cHV0KTsKK1dPTEZTU0xfTE9DQUwgd29yZDMyIFNldFNldCh3b3JkMzIgbGVuLCBieXRlKiBvdXRwdXQpOworV09MRlNTTF9MT0NBTCB3b3JkMzIgU2V0QWxnb0lEKGludCBhbGdvT0lELGJ5dGUqIG91dHB1dCxpbnQgdHlwZSxpbnQgY3VydmVTeik7CitXT0xGU1NMX0xPQ0FMIGludCBTZXRNeVZlcnNpb24od29yZDMyIHZlcnNpb24sIGJ5dGUqIG91dHB1dCwgaW50IGhlYWRlcik7CitXT0xGU1NMX0xPQ0FMIGludCBTZXRTZXJpYWxOdW1iZXIoY29uc3QgYnl0ZSogc24sIHdvcmQzMiBzblN6LCBieXRlKiBvdXRwdXQsCisgICAgd29yZDMyIG91dHB1dFN6LCBpbnQgbWF4U25Teik7CitXT0xGU1NMX0xPQ0FMIGludCBHZXRTZXJpYWxOdW1iZXIoY29uc3QgYnl0ZSogaW5wdXQsIHdvcmQzMiogaW5PdXRJZHgsCisgICAgYnl0ZSogc2VyaWFsLCBpbnQqIHNlcmlhbFN6LCB3b3JkMzIgbWF4SWR4KTsKK1dPTEZTU0xfTE9DQUwgaW50IEdldE5hbWVIYXNoKGNvbnN0IGJ5dGUqIHNvdXJjZSwgd29yZDMyKiBpZHgsIGJ5dGUqIGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhJZHgpOworV09MRlNTTF9MT0NBTCBpbnQgd2NfQ2hlY2tQcml2YXRlS2V5Q2VydChjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwgRGVjb2RlZENlcnQqIGRlcik7CitXT0xGU1NMX0xPQ0FMIGludCB3Y19DaGVja1ByaXZhdGVLZXkoY29uc3QgYnl0ZSogcHJpdktleSwgd29yZDMyIHByaXZLZXlTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBwdWJLZXksIHdvcmQzMiBwdWJLZXlTeiwgZW51bSBLZXlfU3VtIGtzKTsKK1dPTEZTU0xfTE9DQUwgaW50IFN0b3JlREhwYXJhbXMoYnl0ZSogb3V0LCB3b3JkMzIqIG91dExlbiwgbXBfaW50KiBwLCBtcF9pbnQqIGcpOworV09MRlNTTF9MT0NBTCBpbnQgRmxhdHRlbkFsdE5hbWVzKCBieXRlKiwgd29yZDMyLCBjb25zdCBETlNfZW50cnkqKTsKKworI2lmZGVmIEhBVkVfRUNDCisgICAgLyogQVNOIHNpZyBoZWxwZXJzICovCisgICAgV09MRlNTTF9MT0NBTCBpbnQgU3RvcmVFQ0NfRFNBX1NpZyhieXRlKiBvdXQsIHdvcmQzMiogb3V0TGVuLCBtcF9pbnQqIHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2ludCogcyk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgU3RvcmVFQ0NfRFNBX1NpZ19CaW4oYnl0ZSogb3V0LCB3b3JkMzIqIG91dExlbiwgCisgICAgICAgIGNvbnN0IGJ5dGUqIHIsIHdvcmQzMiByTGVuLCBjb25zdCBieXRlKiBzLCB3b3JkMzIgc0xlbik7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgRGVjb2RlRUNDX0RTQV9TaWdfQmluKGNvbnN0IGJ5dGUqIHNpZywgd29yZDMyIHNpZ0xlbiwgCisgICAgICAgIGJ5dGUqIHIsIHdvcmQzMiogckxlbiwgYnl0ZSogcywgd29yZDMyKiBzTGVuKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9FQ0MpIHx8ICFkZWZpbmVkKE5PX0RTQSkKKyAgICBXT0xGU1NMX0xPQ0FMIGludCBEZWNvZGVFQ0NfRFNBX1NpZyhjb25zdCBieXRlKiBzaWcsIHdvcmQzMiBzaWdMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9pbnQqIHIsIG1wX2ludCogcyk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIEhBVkVfRUNDICYmIChkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMKSkKK1dPTEZTU0xfQVBJIGludCBFY2NFbnVtVG9OSUQoaW50IG4pOworI2VuZGlmCisKK1dPTEZTU0xfTE9DQUwgdm9pZCBJbml0U2lnbmF0dXJlQ3R4KFNpZ25hdHVyZUN0eCogc2lnQ3R4LCB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworV09MRlNTTF9MT0NBTCB2b2lkIEZyZWVTaWduYXR1cmVDdHgoU2lnbmF0dXJlQ3R4KiBzaWdDdHgpOworCisjaWZuZGVmIE5PX0NFUlRTCisKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0VuY3J5cHRlZEluZm9QYXJzZShFbmNyeXB0ZWRJbmZvKiBpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBwQnVmZmVyLCBzaXplX3QgYnVmU3opOworCitXT0xGU1NMX0xPQ0FMIGludCBQZW1Ub0Rlcihjb25zdCB1bnNpZ25lZCBjaGFyKiBidWZmLCBsb25nIHN6LCBpbnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVyQnVmZmVyKiogcERlciwgdm9pZCogaGVhcCwgRW5jcnlwdGVkSW5mbyogaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBlY2NLZXkpOworV09MRlNTTF9MT0NBTCBpbnQgQWxsb2NEZXIoRGVyQnVmZmVyKiogZGVyLCB3b3JkMzIgbGVuZ3RoLCBpbnQgdHlwZSwgdm9pZCogaGVhcCk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgRnJlZURlcihEZXJCdWZmZXIqKiBkZXIpOworCisjZW5kaWYgLyogIU5PX0NFUlRTICovCisKKyNpZmRlZiBIQVZFX1NNSU1FCitXT0xGU1NMX0xPQ0FMIGludCB3Y19NSU1FX3BhcnNlX2hlYWRlcnMoY2hhciogaW4sIGludCBpbkxlbiwgTWltZUhkcioqIGhkcnMpOworV09MRlNTTF9MT0NBTCBpbnQgd2NfTUlNRV9oZWFkZXJfc3RyaXAoY2hhciogaW4sIGNoYXIqKiBvdXQsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCk7CitXT0xGU1NMX0xPQ0FMIGludCB3Y19NSU1FX2NyZWF0ZV9oZWFkZXIoY2hhciogbmFtZSwgY2hhciogYm9keSwgTWltZUhkcioqIGhkcik7CitXT0xGU1NMX0xPQ0FMIGludCB3Y19NSU1FX2NyZWF0ZV9wYXJhbWV0ZXIoY2hhciogYXR0cmlidXRlLCBjaGFyKiB2YWx1ZSwgTWltZVBhcmFtKiogcGFyYW0pOworV09MRlNTTF9MT0NBTCBNaW1lSGRyKiB3Y19NSU1FX2ZpbmRfaGVhZGVyX25hbWUoY29uc3QgY2hhciogbmFtZSwgTWltZUhkciogaGRyKTsKK1dPTEZTU0xfTE9DQUwgTWltZVBhcmFtKiB3Y19NSU1FX2ZpbmRfcGFyYW1fYXR0cihjb25zdCBjaGFyKiBhdHRyaWJ1dGUsIE1pbWVQYXJhbSogcGFyYW0pOworV09MRlNTTF9MT0NBTCBjaGFyKiB3Y19NSU1FX2Nhbm9uaWNhbGl6ZShjb25zdCBjaGFyKiBsaW5lKTsKK1dPTEZTU0xfTE9DQUwgaW50IHdjX01JTUVfZnJlZV9oZHJzKE1pbWVIZHIqIGhlYWQpOworI2VuZGlmIC8qIEhBVkVfU01JTUUgKi8KKworI2lmZGVmIFdPTEZTU0xfQ0VSVF9HRU4KKworZW51bSBjZXJ0X2VudW1zIHsKKyNpZmRlZiBXT0xGU1NMX0NFUlRfRVhUCisgICAgTkFNRV9FTlRSSUVTICAgID0gIDEwLAorI2Vsc2UKKyAgICBOQU1FX0VOVFJJRVMgICAgPSAgOSwKKyNlbmRpZgorICAgIEpPSU5UX0xFTiAgICAgICA9ICAyLAorICAgIEVNQUlMX0pPSU5UX0xFTiA9ICA5LAorICAgIFBJTE9UX0pPSU5UX0xFTiA9ICAxMCwKKyAgICBSU0FfS0VZICAgICAgICAgPSAxMCwKKyAgICBOVFJVX0tFWSAgICAgICAgPSAxMSwKKyAgICBFQ0NfS0VZICAgICAgICAgPSAxMiwKKyAgICBFRDI1NTE5X0tFWSAgICAgPSAxMywKKyAgICBFRDQ0OF9LRVkgICAgICAgPSAxNCwKKyAgICBEU0FfS0VZICAgICAgICAgPSAxNQorfTsKKworI2VuZGlmIC8qIFdPTEZTU0xfQ0VSVF9HRU4gKi8KKworCisKKy8qIGZvciBwb2ludGVyIHVzZSAqLwordHlwZWRlZiBzdHJ1Y3QgQ2VydFN0YXR1cyBDZXJ0U3RhdHVzOworCisjaWZkZWYgSEFWRV9PQ1NQCisKK2VudW0gT2NzcF9SZXNwb25zZV9TdGF0dXMgeworICAgIE9DU1BfU1VDQ0VTU0ZVTCAgICAgICAgPSAwLCAvKiBSZXNwb25zZSBoYXMgdmFsaWQgY29uZmlybWF0aW9ucyAqLworICAgIE9DU1BfTUFMRk9STUVEX1JFUVVFU1QgPSAxLCAvKiBJbGxlZ2FsIGNvbmZpcm1hdGlvbiByZXF1ZXN0ICovCisgICAgT0NTUF9JTlRFUk5BTF9FUlJPUiAgICA9IDIsIC8qIEludGVybmFsIGVycm9yIGluIGlzc3VlciAqLworICAgIE9DU1BfVFJZX0xBVEVSICAgICAgICAgPSAzLCAvKiBUcnkgYWdhaW4gbGF0ZXIgKi8KKyAgICBPQ1NQX1NJR19SRVFVSVJFRCAgICAgID0gNSwgLyogTXVzdCBzaWduIHRoZSByZXF1ZXN0ICg0IGlzIHNraXBwZWQpICovCisgICAgT0NTUF9VTkFVVEhST0laRUQgICAgICA9IDYgIC8qIFJlcXVlc3QgdW5hdXRob3JpemVkICovCit9OworCisKK2VudW0gT2NzcF9DZXJ0X1N0YXR1cyB7CisgICAgQ0VSVF9HT09EICAgID0gMCwKKyAgICBDRVJUX1JFVk9LRUQgPSAxLAorICAgIENFUlRfVU5LTk9XTiA9IDIKK307CisKKworZW51bSBPY3NwX1N1bXMgeworICAgIE9DU1BfQkFTSUNfT0lEID0gMTE3LAorICAgIE9DU1BfTk9OQ0VfT0lEID0gMTE4Cit9OworCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorZW51bSBPY3NwX1ZlcmlmeV9FcnJvciB7CisgICAgT0NTUF9WRVJJRllfRVJST1JfTk9ORSA9IDAsCisgICAgT0NTUF9CQURfSVNTVUVSID0gMQorfTsKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IE9jc3BSZXF1ZXN0ICBPY3NwUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IE9jc3BSZXNwb25zZSBPY3NwUmVzcG9uc2U7CisKKworc3RydWN0IENlcnRTdGF0dXMgeworICAgIENlcnRTdGF0dXMqIG5leHQ7CisKKyAgICBieXRlIHNlcmlhbFtFWFRFUk5BTF9TRVJJQUxfU0laRV07CisgICAgaW50IHNlcmlhbFN6OworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgICBXT0xGU1NMX0FTTjFfSU5URUdFUiogc2VyaWFsSW50OworI2VuZGlmCisKKyAgICBpbnQgc3RhdHVzOworCisgICAgYnl0ZSB0aGlzRGF0ZVtNQVhfREFURV9TSVpFXTsKKyAgICBieXRlIG5leHREYXRlW01BWF9EQVRFX1NJWkVdOworICAgIGJ5dGUgdGhpc0RhdGVGb3JtYXQ7CisgICAgYnl0ZSBuZXh0RGF0ZUZvcm1hdDsKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSB8fCBkZWZpbmVkKFdPTEZTU0xfTkdJTlgpIHx8IGRlZmluZWQoV09MRlNTTF9IQVBST1hZKSB8fCBkZWZpbmVkKEhBVkVfTElHSFRZKQorICAgIFdPTEZTU0xfQVNOMV9USU1FIHRoaXNEYXRlUGFyc2VkOworICAgIFdPTEZTU0xfQVNOMV9USU1FIG5leHREYXRlUGFyc2VkOworICAgIGJ5dGUqIHRoaXNEYXRlQXNuOworICAgIGJ5dGUqIG5leHREYXRlQXNuOworI2VuZGlmCisKKyAgICBieXRlKiAgcmF3T2NzcFJlc3BvbnNlOworICAgIHdvcmQzMiByYXdPY3NwUmVzcG9uc2VTejsKK307CisKK3R5cGVkZWYgc3RydWN0IE9jc3BFbnRyeSBPY3NwRW50cnk7CisKKyNpZmRlZiBOT19TSEEKKyNkZWZpbmUgT0NTUF9ESUdFU1RfU0laRSBXQ19TSEEyNTZfRElHRVNUX1NJWkUKKyNlbHNlCisjZGVmaW5lIE9DU1BfRElHRVNUX1NJWkUgV0NfU0hBX0RJR0VTVF9TSVpFCisjZW5kaWYKKworc3RydWN0IE9jc3BFbnRyeQoreworICAgIE9jc3BFbnRyeSAqbmV4dDsgICAgICAgICAgICAgICAgICAgICAgLyogbmV4dCBlbnRyeSAgICAgICAgICAgICAgICAqLworICAgIHdvcmQzMiBoYXNoQWxnb09JRDsgICAgICAgICAgICAgICAgICAgLyogaGFzaCBhbGdvIElEICAgICAgICAgICAgICAqLworICAgIGJ5dGUgaXNzdWVySGFzaFtPQ1NQX0RJR0VTVF9TSVpFXTsgICAgLyogaXNzdWVyIGhhc2ggICAgICAgICAgICAgICAqLworICAgIGJ5dGUgaXNzdWVyS2V5SGFzaFtPQ1NQX0RJR0VTVF9TSVpFXTsgLyogaXNzdWVyIHB1YmxpYyBrZXkgaGFzaCAgICAqLworICAgIENlcnRTdGF0dXMgKnN0YXR1czsgICAgICAgICAgICAgICAgICAgLyogT0NTUCByZXNwb25zZSBsaXN0ICAgICAgICAqLworICAgIGludCB0b3RhbFN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9uIGxpc3QgICAgICAgICAgICAqLworICAgIGJ5dGUqIHJhd0NlcnRJZDsgICAgICAgICAgICAgICAgICAgICAgLyogcmF3IGJ5dGVzIG9mIHRoZSBDZXJ0SUQgICAqLworICAgIGludCByYXdDZXJ0SWRTaXplOyAgICAgICAgICAgICAgICAgICAgLyogbnVtIGJ5dGVzIGluIHJhdyBDZXJ0SUQgICAqLworICAgIC8qIG9wdGlvbiBiaXRzIC0gdXNpbmcgMzItYml0IGZvciBhbGlnbm1lbnQgKi8KKyAgICB3b3JkMzIgb3duU3RhdHVzOjE7ICAgICAgICAgICAgICAgICAgIC8qIGRvIHdlIG5lZWQgdG8gZnJlZSB0aGUgc3RhdHVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXNwb25zZSBsaXN0ICovCisgICAgd29yZDMyIGlzRHluYW1pYzoxOyAgICAgICAgICAgICAgICAgICAvKiB3YXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkICovCisKK307CisKKy8qIFRPRE86IExvbmctdGVybSwgaXQgd291bGQgYmUgaGVscGZ1bCBpZiB3ZSBtYWRlIHRoaXMgc3RydWN0IGFuZCBvdGhlciBPQ1NQCisgICAgICAgICBzdHJ1Y3RzIGNvbmZvcm0gdG8gdGhlIEFTTiBzcGVjIGFzIGRlc2NyaWJlZCBpbiBSRkMgNjk2MC4gSXQgd2lsbCBoZWxwCisgICAgICAgICB3aXRoIHJlYWRhYmlsaXR5IGFuZCB3aXRoIGltcGxlbWVudGluZyBPcGVuU1NMIGNvbXBhdGliaWxpdHkgQVBJCisgICAgICAgICBmdW5jdGlvbnMsIGJlY2F1c2UgT3BlblNTTCdzIE9DU1AgZGF0YSBzdHJ1Y3R1cmVzIGNvbmZvcm0gdG8gdGhlCisgICAgICAgICBSRkMuICovCitzdHJ1Y3QgT2NzcFJlc3BvbnNlIHsKKyAgICBpbnQgICAgIHJlc3BvbnNlU3RhdHVzOyAgLyogcmV0dXJuIGNvZGUgZnJvbSBSZXNwb25kZXIgKi8KKworICAgIGJ5dGUqICAgcmVzcG9uc2U7ICAgICAgICAvKiBQb2ludGVyIHRvIGJlZ2lubmluZyBvZiBPQ1NQIFJlc3BvbnNlICovCisgICAgd29yZDMyICByZXNwb25zZVN6OyAgICAgIC8qIGxlbmd0aCBvZiB0aGUgT0NTUCBSZXNwb25zZSAqLworCisgICAgYnl0ZSAgICBwcm9kdWNlZERhdGVbTUFYX0RBVEVfU0laRV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGUgYXQgd2hpY2ggdGhpcyByZXNwb25zZSB3YXMgc2lnbmVkICovCisgICAgYnl0ZSAgICBwcm9kdWNlZERhdGVGb3JtYXQ7IC8qIGZvcm1hdCBvZiB0aGUgcHJvZHVjZWREYXRlICovCisKKyAgICBieXRlKiAgIGNlcnQ7CisgICAgd29yZDMyICBjZXJ0U3o7CisKKyAgICBieXRlKiAgIHNpZzsgICAgICAgICAgICAgLyogUG9pbnRlciB0byBzaWcgaW4gc291cmNlICovCisgICAgd29yZDMyICBzaWdTejsgICAgICAgICAgIC8qIExlbmd0aCBpbiBvY3RldHMgZm9yIHRoZSBzaWcgKi8KKyAgICB3b3JkMzIgIHNpZ09JRDsgICAgICAgICAgLyogT0lEIGZvciBoYXNoIHVzZWQgZm9yIHNpZyAqLworCisgICAgT2NzcEVudHJ5KiBzaW5nbGU7ICAgICAgIC8qIGNoYWluIG9mIE9DU1Agc2luZ2xlIHJlc3BvbnNlcyAqLworCisgICAgYnl0ZSogICBub25jZTsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbm9uY2UgaW5zaWRlIEFTTi4xIHJlc3BvbnNlICovCisgICAgaW50ICAgICBub25jZVN6OyAgICAgICAgIC8qIGxlbmd0aCBvZiB0aGUgbm9uY2Ugc3RyaW5nICovCisKKyAgICBieXRlKiAgIHNvdXJjZTsgICAgICAgICAgLyogcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyLCBub3Qgb3duZWQgKi8KKyAgICB3b3JkMzIgIG1heElkeDsgICAgICAgICAgLyogbWF4IG9mZnNldCBiYXNlZCBvbiBpbml0IHNpemUgKi8KKworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgICBpbnQgICAgIHZlcmlmeUVycm9yOworI2VuZGlmCisgICAgdm9pZCogIGhlYXA7Cit9OworCisKK3N0cnVjdCBPY3NwUmVxdWVzdCB7CisgICAgYnl0ZSAgIGlzc3Vlckhhc2hbS0VZSURfU0laRV07CisgICAgYnl0ZSAgIGlzc3VlcktleUhhc2hbS0VZSURfU0laRV07CisgICAgYnl0ZSogIHNlcmlhbDsgICAvKiBjb3B5IG9mIHRoZSBzZXJpYWwgbnVtYmVyIGluIHNvdXJjZSBjZXJ0ICovCisgICAgaW50ICAgIHNlcmlhbFN6OworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgICBXT0xGU1NMX0FTTjFfSU5URUdFUiogc2VyaWFsSW50OworI2VuZGlmCisgICAgYnl0ZSogIHVybDsgICAgICAvKiBjb3B5IG9mIHRoZSBleHRBdXRoSW5mbyBpbiBzb3VyY2UgY2VydCAqLworICAgIGludCAgICB1cmxTejsKKworICAgIGJ5dGUgICBub25jZVtNQVhfT0NTUF9OT05DRV9TWl07CisgICAgaW50ICAgIG5vbmNlU3o7CisgICAgdm9pZCogIGhlYXA7CisgICAgdm9pZCogIHNzbDsKK307CisKK1dPTEZTU0xfTE9DQUwgdm9pZCBJbml0T2NzcFJlc3BvbnNlKE9jc3BSZXNwb25zZSosIE9jc3BFbnRyeSosIENlcnRTdGF0dXMqLCBieXRlKiwgd29yZDMyLCB2b2lkKik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgRnJlZU9jc3BSZXNwb25zZShPY3NwUmVzcG9uc2UqKTsKK1dPTEZTU0xfTE9DQUwgaW50IE9jc3BSZXNwb25zZURlY29kZShPY3NwUmVzcG9uc2UqLCB2b2lkKiwgdm9pZCogaGVhcCwgaW50KTsKKworV09MRlNTTF9MT0NBTCBpbnQgICAgSW5pdE9jc3BSZXF1ZXN0KE9jc3BSZXF1ZXN0KiwgRGVjb2RlZENlcnQqLCBieXRlLCB2b2lkKik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgICBGcmVlT2NzcFJlcXVlc3QoT2NzcFJlcXVlc3QqKTsKK1dPTEZTU0xfTE9DQUwgaW50ICAgIEVuY29kZU9jc3BSZXF1ZXN0KE9jc3BSZXF1ZXN0KiwgYnl0ZSosIHdvcmQzMik7CitXT0xGU1NMX0xPQ0FMIHdvcmQzMiBFbmNvZGVPY3NwUmVxdWVzdEV4dGVuc2lvbnMoT2NzcFJlcXVlc3QqLCBieXRlKiwgd29yZDMyKTsKKworCitXT0xGU1NMX0xPQ0FMIGludCAgQ29tcGFyZU9jc3BSZXFSZXNwKE9jc3BSZXF1ZXN0KiwgT2NzcFJlc3BvbnNlKik7CisKKworI2VuZGlmIC8qIEhBVkVfT0NTUCAqLworCisKKy8qIGZvciBwb2ludGVyIHVzZSAqLwordHlwZWRlZiBzdHJ1Y3QgUmV2b2tlZENlcnQgUmV2b2tlZENlcnQ7CisKKyNpZmRlZiBIQVZFX0NSTAorCitzdHJ1Y3QgUmV2b2tlZENlcnQgeworICAgIGJ5dGUgICAgICAgICBzZXJpYWxOdW1iZXJbRVhURVJOQUxfU0VSSUFMX1NJWkVdOworICAgIGludCAgICAgICAgICBzZXJpYWxTejsKKyAgICBSZXZva2VkQ2VydCogbmV4dDsKK307CisKK3R5cGVkZWYgc3RydWN0IERlY29kZWRDUkwgRGVjb2RlZENSTDsKKworc3RydWN0IERlY29kZWRDUkwgeworICAgIHdvcmQzMiAgY2VydEJlZ2luOyAgICAgICAgICAgICAgIC8qIG9mZnNldCB0byBzdGFydCBvZiBjZXJ0ICAgICAgICAgICovCisgICAgd29yZDMyICBzaWdJbmRleDsgICAgICAgICAgICAgICAgLyogb2Zmc2V0IHRvIHN0YXJ0IG9mIHNpZ25hdHVyZSAgICAgKi8KKyAgICB3b3JkMzIgIHNpZ0xlbmd0aDsgICAgICAgICAgICAgICAvKiBsZW5ndGggb2Ygc2lnbmF0dXJlICAgICAgICAgICAgICAqLworICAgIHdvcmQzMiAgc2lnbmF0dXJlT0lEOyAgICAgICAgICAgIC8qIHN1bSBvZiBhbGdvcml0aG0gb2JqZWN0IGlkICAgICAgICovCisgICAgYnl0ZSogICBzaWduYXR1cmU7ICAgICAgICAgICAgICAgLyogcG9pbnRlciBpbnRvIHJhdyBzb3VyY2UsIG5vdCBvd25lZCAqLworICAgIGJ5dGUgICAgaXNzdWVySGFzaFtTSUdORVJfRElHRVNUX1NJWkVdOyAvKiBpc3N1ZXIgbmFtZSBoYXNoICAgICAgICAgICovCisgICAgYnl0ZSAgICBjcmxIYXNoW1NJR05FUl9ESUdFU1RfU0laRV07IC8qIHJhdyBjcmwgZGF0YSBoYXNoICAgICAgICAgICAgKi8KKyAgICBieXRlICAgIGxhc3REYXRlW01BWF9EQVRFX1NJWkVdOyAvKiBsYXN0IGRhdGUgdXBkYXRlZCAgKi8KKyAgICBieXRlICAgIG5leHREYXRlW01BWF9EQVRFX1NJWkVdOyAvKiBuZXh0IHVwZGF0ZSBkYXRlICAgKi8KKyAgICBieXRlICAgIGxhc3REYXRlRm9ybWF0OyAgICAgICAgICAvKiBmb3JtYXQgb2YgbGFzdCBkYXRlICovCisgICAgYnl0ZSAgICBuZXh0RGF0ZUZvcm1hdDsgICAgICAgICAgLyogZm9ybWF0IG9mIG5leHQgZGF0ZSAqLworICAgIFJldm9rZWRDZXJ0KiBjZXJ0czsgICAgICAgICAgICAgIC8qIHJldm9rZWQgY2VydCBsaXN0ICAqLworICAgIGludCAgICAgICAgICB0b3RhbENlcnRzOyAgICAgICAgIC8qIG51bWJlciBvbiBsaXN0ICAgICAqLworICAgIHZvaWQqICAgaGVhcDsKKyNpZm5kZWYgTk9fU0tJRAorICAgIGJ5dGUgICAgZXh0QXV0aEtleUlkU2V0OworICAgIGJ5dGUgICAgZXh0QXV0aEtleUlkW1NJR05FUl9ESUdFU1RfU0laRV07IC8qIEF1dGhvcml0eSBLZXkgSUQgICAgICAgICovCisjZW5kaWYKK307CisKK1dPTEZTU0xfTE9DQUwgdm9pZCBJbml0RGVjb2RlZENSTChEZWNvZGVkQ1JMKiwgdm9pZCogaGVhcCk7CitXT0xGU1NMX0xPQ0FMIGludCBWZXJpZnlDUkxfU2lnbmF0dXJlKFNpZ25hdHVyZUN0eCogc2lnQ3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiB0b0JlU2lnbmVkLCB3b3JkMzIgdGJzU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHNpZ25hdHVyZSwgd29yZDMyIHNpZ1N6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgc2lnbmF0dXJlT0lELCBTaWduZXIgKmNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBoZWFwKTsKK1dPTEZTU0xfTE9DQUwgaW50ICBQYXJzZUNSTChEZWNvZGVkQ1JMKiwgY29uc3QgYnl0ZSogYnVmZiwgd29yZDMyIHN6LCB2b2lkKiBjbSk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgRnJlZURlY29kZWRDUkwoRGVjb2RlZENSTCopOworCisKKyNlbmRpZiAvKiBIQVZFX0NSTCAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiAhTk9fQVNOICovCisKKworI2lmICFkZWZpbmVkKE5PX0FTTikgfHwgIWRlZmluZWQoTk9fUFdEQkFTRUQpCisKKyNpZm5kZWYgTUFYX0tFWV9TSVpFCisgICAgI2RlZmluZSBNQVhfS0VZX1NJWkUgICAgNjQgIC8qIE1BWCBQS0NTIEtleSBsZW5ndGggKi8KKyNlbmRpZgorI2lmbmRlZiBNQVhfVU5JQ09ERV9TWgorICAgICNkZWZpbmUgTUFYX1VOSUNPREVfU1ogIDI1NgorI2VuZGlmCisKK2VudW0gUEJFU1R5cGVzIHsKKyAgICBQQkVfTUQ1X0RFUyAgICAgICAgPSAwLAorICAgIFBCRV9TSEExX1JDNF8xMjggICA9IDEsCisgICAgUEJFX1NIQTFfREVTICAgICAgID0gMiwKKyAgICBQQkVfU0hBMV9ERVMzICAgICAgPSAzLAorICAgIFBCRV9BRVMyNTZfQ0JDICAgICA9IDQsCisgICAgUEJFX0FFUzEyOF9DQkMgICAgID0gNSwKKyAgICBQQkVfU0hBMV80MFJDMl9DQkMgPSA2LAorCisgICAgUEJFX1NIQTFfUkM0XzEyOF9TVU0gPSA2NTcsCisgICAgUEJFX1NIQTFfREVTM19TVU0gICAgPSA2NTksCisgICAgUEJFUzIgICAgICAgICAgICA9IDEzICAgICAgIC8qIGFsZ28gSUQgKi8KK307CisKK2VudW0gUEtDU1R5cGVzIHsKKyAgICBQS0NTNXYyICAgICAgICAgICAgID0gICA2LCAgICAgLyogUEtDUyAjNSB2Mi4wICovCisgICAgUEtDUzEydjEgICAgICAgICAgICA9ICAxMiwgICAgIC8qIFBLQ1MgIzEyICovCisgICAgUEtDUzUgICAgICAgICAgICAgICA9ICAgNSwgICAgIC8qIFBLQ1Mgb2lkIHRhZyAqLworICAgIFBLQ1M4djAgICAgICAgICAgICAgPSAgIDAsICAgICAvKiBkZWZhdWx0IFBLQ1MjOCB2ZXJzaW9uICovCit9OworCisjZW5kaWYgLyogIU5PX0FTTiB8fCAhTk9fUFdEQkFTRUQgKi8KKworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfQVNOX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9hc25fcHVibGljLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvYXNuX3B1YmxpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYWY5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvYXNuX3B1YmxpYy5oCkBAIC0wLDAgKzEsNjU4IEBACisvKiBhc25fcHVibGljLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL3dvbGZjcnlwdC9hc25fcHVibGljLmgKKyovCisKKy8qCitERVNDUklQVElPTgorVGhpcyBsaWJyYXJ5IGRlZmluZXMgdGhlIGludGVyZmFjZSBBUElzIGZvciBYNTA5IGNlcnRpZmljYXRlcy4KKworKi8KKyNpZm5kZWYgV09MRl9DUllQVF9BU05fUFVCTElDX0gKKyNkZWZpbmUgV09MRl9DUllQVF9BU05fUFVCTElDX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZHNhLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGd1YXJkIG9uIHJlZGVjbGFyYXRpb24gKi8KKyNpZm5kZWYgV0NfRUNDS0VZX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IGVjY19rZXkgZWNjX2tleTsKKyAgICAjZGVmaW5lIFdDX0VDQ0tFWV9UWVBFX0RFRklORUQKKyNlbmRpZgorI2lmbmRlZiBXQ19FRDI1NTE5S0VZX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IGVkMjU1MTlfa2V5IGVkMjU1MTlfa2V5OworICAgICNkZWZpbmUgV0NfRUQyNTUxOUtFWV9UWVBFX0RFRklORUQKKyNlbmRpZgorI2lmbmRlZiBXQ19FRDQ0OEtFWV9UWVBFX0RFRklORUQKKyAgICB0eXBlZGVmIHN0cnVjdCBlZDQ0OF9rZXkgZWQ0NDhfa2V5OworICAgICNkZWZpbmUgV0NfRUQ0NDhLRVlfVFlQRV9ERUZJTkVECisjZW5kaWYKKyNpZm5kZWYgV0NfUlNBS0VZX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IFJzYUtleSBSc2FLZXk7CisgICAgI2RlZmluZSBXQ19SU0FLRVlfVFlQRV9ERUZJTkVECisjZW5kaWYKKyNpZm5kZWYgV0NfUk5HX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IFdDX1JORyBXQ19STkc7CisgICAgI2RlZmluZSBXQ19STkdfVFlQRV9ERUZJTkVECisjZW5kaWYKKyNpZm5kZWYgV0NfREhfVFlQRV9ERUZJTkVECisgICAgdHlwZWRlZiBzdHJ1Y3QgRGhLZXkgRGhLZXk7CisgICAgI2RlZmluZSBXQ19ESF9UWVBFX0RFRklORUQKKyNlbmRpZgorCitlbnVtIEVjY19TdW0geworICAgIEVDQ19TRUNQMTEyUjFfT0lEID0gMTgyLAorICAgIEVDQ19TRUNQMTEyUjJfT0lEID0gMTgzLAorICAgIEVDQ19TRUNQMTI4UjFfT0lEID0gMjA0LAorICAgIEVDQ19TRUNQMTI4UjJfT0lEID0gMjA1LAorICAgIEVDQ19TRUNQMTYwUjFfT0lEID0gMTg0LAorICAgIEVDQ19TRUNQMTYwUjJfT0lEID0gMjA2LAorICAgIEVDQ19TRUNQMTYwSzFfT0lEID0gMTg1LAorICAgIEVDQ19CUkFJTlBPT0xQMTYwUjFfT0lEID0gOTgsCisgICAgRUNDX1NFQ1AxOTJSMV9PSUQgPSA1MjAsCisgICAgRUNDX1BSSU1FMTkyVjJfT0lEID0gNTIxLAorICAgIEVDQ19QUklNRTE5MlYzX09JRCA9IDUyMiwKKyAgICBFQ0NfU0VDUDE5MksxX09JRCA9IDIwNywKKyAgICBFQ0NfQlJBSU5QT09MUDE5MlIxX09JRCA9IDEwMCwKKyAgICBFQ0NfU0VDUDIyNFIxX09JRCA9IDIwOSwKKyAgICBFQ0NfU0VDUDIyNEsxX09JRCA9IDIwOCwKKyAgICBFQ0NfQlJBSU5QT09MUDIyNFIxX09JRCA9IDEwMiwKKyAgICBFQ0NfUFJJTUUyMzlWMV9PSUQgPSA1MjMsCisgICAgRUNDX1BSSU1FMjM5VjJfT0lEID0gNTI0LAorICAgIEVDQ19QUklNRTIzOVYzX09JRCA9IDUyNSwKKyAgICBFQ0NfU0VDUDI1NlIxX09JRCA9IDUyNiwKKyAgICBFQ0NfU0VDUDI1NksxX09JRCA9IDE4NiwKKyAgICBFQ0NfQlJBSU5QT09MUDI1NlIxX09JRCA9IDEwNCwKKyAgICBFQ0NfWDI1NTE5X09JRCA9IDM2NSwKKyAgICBFQ0NfRUQyNTUxOV9PSUQgPSAyNTYsCisgICAgRUNDX0JSQUlOUE9PTFAzMjBSMV9PSUQgPSAxMDYsCisgICAgRUNDX1g0NDhfT0lEID0gMzYyLAorICAgIEVDQ19FRDQ0OF9PSUQgPSAyNTcsCisgICAgRUNDX1NFQ1AzODRSMV9PSUQgPSAyMTAsCisgICAgRUNDX0JSQUlOUE9PTFAzODRSMV9PSUQgPSAxMDgsCisgICAgRUNDX0JSQUlOUE9PTFA1MTJSMV9PSUQgPSAxMTAsCisgICAgRUNDX1NFQ1A1MjFSMV9PSUQgPSAyMTEsCit9OworCisKKy8qIENlcnRpZmljYXRlIGZpbGUgVHlwZSAqLworZW51bSBDZXJ0VHlwZSB7CisgICAgQ0VSVF9UWVBFICAgICAgID0gMCwKKyAgICBQUklWQVRFS0VZX1RZUEUsCisgICAgREhfUEFSQU1fVFlQRSwKKyAgICBEU0FfUEFSQU1fVFlQRSwKKyAgICBDUkxfVFlQRSwKKyAgICBDQV9UWVBFLAorICAgIEVDQ19QUklWQVRFS0VZX1RZUEUsCisgICAgRFNBX1BSSVZBVEVLRVlfVFlQRSwKKyAgICBDRVJUUkVRX1RZUEUsCisgICAgRFNBX1RZUEUsCisgICAgRUNDX1RZUEUsCisgICAgUlNBX1RZUEUsCisgICAgUFVCTElDS0VZX1RZUEUsCisgICAgUlNBX1BVQkxJQ0tFWV9UWVBFLAorICAgIEVDQ19QVUJMSUNLRVlfVFlQRSwKKyAgICBUUlVTVEVEX1BFRVJfVFlQRSwKKyAgICBFRERTQV9QUklWQVRFS0VZX1RZUEUsCisgICAgRUQyNTUxOV9UWVBFLAorICAgIEVENDQ4X1RZUEUsCisgICAgUEtDUzEyX1RZUEUsCisgICAgUEtDUzhfUFJJVkFURUtFWV9UWVBFLAorICAgIFBLQ1M4X0VOQ19QUklWQVRFS0VZX1RZUEUsCisgICAgREVURUNUX0NFUlRfVFlQRSwKKyAgICBESF9QUklWQVRFS0VZX1RZUEUsCit9OworCisKKy8qIFNpZ25hdHVyZSB0eXBlLCBieSBPSUQgc3VtICovCitlbnVtIEN0Y19TaWdUeXBlIHsKKyAgICBDVENfU0hBd0RTQSAgICAgID0gNTE3LAorICAgIENUQ19TSEEyNTZ3RFNBICAgPSA0MTYsCisgICAgQ1RDX01EMndSU0EgICAgICA9IDY0NiwKKyAgICBDVENfTUQ1d1JTQSAgICAgID0gNjQ4LAorICAgIENUQ19TSEF3UlNBICAgICAgPSA2NDksCisgICAgQ1RDX1NIQXdFQ0RTQSAgICA9IDUyMCwKKyAgICBDVENfU0hBMjI0d1JTQSAgID0gNjU4LAorICAgIENUQ19TSEEyMjR3RUNEU0EgPSA1MjMsCisgICAgQ1RDX1NIQTI1NndSU0EgICA9IDY1NSwKKyAgICBDVENfU0hBMjU2d0VDRFNBID0gNTI0LAorICAgIENUQ19TSEEzODR3UlNBICAgPSA2NTYsCisgICAgQ1RDX1NIQTM4NHdFQ0RTQSA9IDUyNSwKKyAgICBDVENfU0hBNTEyd1JTQSAgID0gNjU3LAorICAgIENUQ19TSEE1MTJ3RUNEU0EgPSA1MjYsCisKKyAgICAvKiBodHRwczovL2NzcmMubmlzdC5nb3YvcHJvamVjdHMvY29tcHV0ZXItc2VjdXJpdHktb2JqZWN0cy1yZWdpc3Rlci9hbGdvcml0aG0tcmVnaXN0cmF0aW9uICovCisgICAgQ1RDX1NIQTNfMjI0d0VDRFNBID0gNDIzLAorICAgIENUQ19TSEEzXzI1NndFQ0RTQSA9IDQyNCwKKyAgICBDVENfU0hBM18zODR3RUNEU0EgPSA0MjUsCisgICAgQ1RDX1NIQTNfNTEyd0VDRFNBID0gNDI2LAorICAgIENUQ19TSEEzXzIyNHdSU0EgPSA0MjcsCisgICAgQ1RDX1NIQTNfMjU2d1JTQSA9IDQyOCwKKyAgICBDVENfU0hBM18zODR3UlNBID0gNDI5LAorICAgIENUQ19TSEEzXzUxMndSU0EgPSA0MzAsCisKKyAgICBDVENfRUQyNTUxOSAgICAgID0gMjU2LAorICAgIENUQ19FRDQ0OCAgICAgICAgPSAyNTcKK307CisKK2VudW0gQ3RjX0VuY29kaW5nIHsKKyAgICBDVENfVVRGOCAgICAgICA9IDB4MGMsIC8qIHV0ZjggICAgICAqLworICAgIENUQ19QUklOVEFCTEUgID0gMHgxMyAgLyogcHJpbnRhYmxlICovCit9OworCisjaWZuZGVmIFdDX0NUQ19OQU1FX1NJWkUKKyAgICAjZGVmaW5lIFdDX0NUQ19OQU1FX1NJWkUgNjQKKyNlbmRpZgorI2lmbmRlZiBXQ19DVENfTUFYX0FMVF9TSVpFCisgICAgI2RlZmluZSBXQ19DVENfTUFYX0FMVF9TSVpFIDE2Mzg0CisjZW5kaWYKKworZW51bSBDdGNfTWlzYyB7CisgICAgQ1RDX0NPVU5UUllfU0laRSAgPSAgICAgMiwKKyAgICBDVENfTkFNRV9TSVpFICAgICA9IFdDX0NUQ19OQU1FX1NJWkUsCisgICAgQ1RDX0RBVEVfU0laRSAgICAgPSAgICAzMiwKKyAgICBDVENfTUFYX0FMVF9TSVpFICA9IFdDX0NUQ19NQVhfQUxUX1NJWkUsIC8qIG1heSBiZSBodWdlLCBkZWZhdWx0OiAxNjM4NCAqLworICAgIENUQ19TRVJJQUxfU0laRSAgID0gICAgMjAsCisgICAgQ1RDX0dFTl9TRVJJQUxfU1ogPSAgICAxNiwKKyNpZmRlZiBXT0xGU1NMX0NFUlRfRVhUCisgICAgLyogQUtJRCBjb3VsZCBjb250YWluczogaGFzaCArIChPcHRpb24pIEF1dGhDZXJ0SXNzdWVyLEF1dGhDZXJ0U2VyaWFsTnVtCisgICAgICogV2Ugc3VwcG9ydCBvbmx5IGhhc2ggKi8KKyAgICBDVENfTUFYX1NLSURfU0laRSA9IDMyLCAvKiBTSEEyNTZfRElHRVNUX1NJWkUgKi8KKyAgICBDVENfTUFYX0FLSURfU0laRSA9IDMyLCAvKiBTSEEyNTZfRElHRVNUX1NJWkUgKi8KKyAgICBDVENfTUFYX0NFUlRQT0xfU1ogPSA2NCwKKyAgICBDVENfTUFYX0NFUlRQT0xfTkIgPSAyIC8qIE1heCBudW1iZXIgb2YgQ2VydGlmaWNhdGUgUG9saWN5ICovCisjZW5kaWYgLyogV09MRlNTTF9DRVJUX0VYVCAqLworfTsKKworLyogREVSIGJ1ZmZlciAqLwordHlwZWRlZiBzdHJ1Y3QgRGVyQnVmZmVyIHsKKyAgICBieXRlKiAgYnVmZmVyOworICAgIHZvaWQqICBoZWFwOworICAgIHdvcmQzMiBsZW5ndGg7CisgICAgaW50ICAgIHR5cGU7ICAgIC8qIGVudW0gQ2VydFR5cGUgKi8KKyAgICBpbnQgICAgZHluVHlwZTsgLyogRFlOQU1JQ19UWVBFXyogKi8KK30gRGVyQnVmZmVyOworCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0FTTjFfVElNRSB7CisgICAgdW5zaWduZWQgY2hhciBkYXRhW0NUQ19EQVRFX1NJWkVdOyAvKiBkYXRlIGJ5dGVzICovCisgICAgaW50IGxlbmd0aDsKKyAgICBpbnQgdHlwZTsKK30gV09MRlNTTF9BU04xX1RJTUU7CisKK2VudW0geworICAgIElWX1NaICAgPSAzMiwgICAgICAgICAgICAgICAgICAgLyogbWF4IGl2IHN6ICovCisgICAgTkFNRV9TWiA9IDgwLCAgICAgICAgICAgICAgICAgICAvKiBtYXggb25lIGxpbmUgKi8KKworICAgIFBFTV9QQVNTX1JFQUQgID0gMCwKKyAgICBQRU1fUEFTU19XUklURSA9IDEsCit9OworCisKK3R5cGVkZWYgaW50IChwZW1fcGFzc3dvcmRfY2IpKGNoYXIqIHBhc3N3ZCwgaW50IHN6LCBpbnQgcncsIHZvaWQqIHVzZXJkYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgRW5jcnlwdGVkSW5mbyB7CisgICAgcGVtX3Bhc3N3b3JkX2NiKiBwYXNzd2RfY2I7CisgICAgdm9pZCogICAgICAgICAgICBwYXNzd2RfdXNlcmRhdGE7CisKKyAgICBsb25nICAgICBjb25zdW1lZDsgICAgICAgICAvKiB0cmFja3MgUEVNIGJ5dGVzIGNvbnN1bWVkICovCisKKyAgICBpbnQgICAgICBjaXBoZXJUeXBlOworICAgIHdvcmQzMiAgIGtleVN6OworICAgIHdvcmQzMiAgIGl2U3o7ICAgICAgICAgICAgIC8qIHNhbHQgb3IgZW5jcnlwdGVkIElWIHNpemUgKi8KKworICAgIGNoYXIgICAgIG5hbWVbTkFNRV9TWl07ICAgIC8qIGNpcGhlciBuYW1lLCBzdWNoIGFzICJERVMtQ0JDIiAqLworICAgIGJ5dGUgICAgIGl2W0lWX1NaXTsgICAgICAgIC8qIHNhbHQgb3IgZW5jcnlwdGVkIElWICovCisKKyAgICB3b3JkMTYgICBzZXQ6MTsgICAgICAgICAgICAvKiBpZiBlbmNyeXB0aW9uIHNldCAqLworfSBFbmNyeXB0ZWRJbmZvOworCisKKyNkZWZpbmUgV09MRlNTTF9BU04xX0lOVEVHRVJfTUFYIDIwCit0eXBlZGVmIHN0cnVjdCBXT0xGU1NMX0FTTjFfSU5URUdFUiB7CisgICAgLyogc2l6ZSBjYW4gYmUgaW5jcmVhc2VkIHNldCBhdCAyMCBmb3IgdGFnLCBsZW5ndGggdGhlbiB0byBob2xkIGF0IGxlYXN0IDE2CisgICAgICogYnl0ZSB0eXBlICovCisgICAgdW5zaWduZWQgY2hhciAgaW50RGF0YVtXT0xGU1NMX0FTTjFfSU5URUdFUl9NQVhdOworICAgIC8qIEFTTl9JTlRFR0VSIHwgTEVOR1RIIHwgaGV4IG9mIG51bWJlciAqLworICAgIHVuc2lnbmVkIGNoYXIgIG5lZ2F0aXZlOyAgIC8qIG5lZ2F0aXZlIG51bWJlciBmbGFnICovCisKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhOworICAgIHVuc2lnbmVkIGludCAgIGRhdGFNYXg7ICAgLyogbWF4IHNpemUgb2YgZGF0YSBidWZmZXIgKi8KKyAgICB1bnNpZ25lZCBpbnQgICBpc0R5bmFtaWM6MTsgLyogZmxhZyBmb3IgaWYgZGF0YSBwb2ludGVyIGR5bmFtaWMgKDEgaXMgeWVzIDAgaXMgbm8pICovCisKKyAgICBpbnQgbGVuZ3RoOworICAgIGludCB0eXBlOworfSBXT0xGU1NMX0FTTjFfSU5URUdFUjsKKworCisjaWYgZGVmaW5lZChXT0xGU1NMX0NFUlRfR0VOKSB8fCBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9FWFQpCisjaWZkZWYgV09MRlNTTF9FS1VfT0lECisgICAgI2lmbmRlZiBDVENfTUFYX0VLVV9OQgorICAgICAgICAjZGVmaW5lIENUQ19NQVhfRUtVX05CIDEKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIENUQ19NQVhfRUtVX09JRF9TWgorICAgICAgICAjZGVmaW5lIENUQ19NQVhfRUtVX09JRF9TWiAzMAorICAgICNlbmRpZgorI2Vsc2UKKyAgICAjdW5kZWYgQ1RDX01BWF9FS1VfT0lEX1NaCisgICAgI2RlZmluZSBDVENfTUFYX0VLVV9PSURfU1ogMAorI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9DRVJUX0dFTiB8fCBXT0xGU1NMX0NFUlRfRVhUICovCisKKyNpZmRlZiBXT0xGU1NMX0NFUlRfR0VOCisKKyNpZmRlZiBXT0xGU1NMX01VTFRJX0FUVFJJQgorI2lmbmRlZiBDVENfTUFYX0FUVFJJQgorICAgICNkZWZpbmUgQ1RDX01BWF9BVFRSSUIgNAorI2VuZGlmCisKKy8qIEFTTiBFbmNvZGVkIE5hbWUgZmllbGQgKi8KK3R5cGVkZWYgc3RydWN0IE5hbWVBdHRyaWIgeworICAgIGludCAgc3o7ICAgICAgICAgICAgICAgICAgICAgLyogYWN0dWFsIHN0cmluZyB2YWx1ZSBsZW5ndGggKi8KKyAgICBpbnQgIGlkOyAgICAgICAgICAgICAgICAgICAgIC8qIGlkIG9mIG5hbWUgKi8KKyAgICBpbnQgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIGVuYyBvZiBuYW1lICovCisgICAgY2hhciB2YWx1ZVtDVENfTkFNRV9TSVpFXTsgICAvKiBuYW1lICovCit9IE5hbWVBdHRyaWI7CisjZW5kaWYgLyogV09MRlNTTF9NVUxUSV9BVFRSSUIgKi8KKworCit0eXBlZGVmIHN0cnVjdCBDZXJ0TmFtZSB7CisgICAgY2hhciBjb3VudHJ5W0NUQ19OQU1FX1NJWkVdOworICAgIGNoYXIgY291bnRyeUVuYzsKKyAgICBjaGFyIHN0YXRlW0NUQ19OQU1FX1NJWkVdOworICAgIGNoYXIgc3RhdGVFbmM7CisgICAgY2hhciBsb2NhbGl0eVtDVENfTkFNRV9TSVpFXTsKKyAgICBjaGFyIGxvY2FsaXR5RW5jOworICAgIGNoYXIgc3VyW0NUQ19OQU1FX1NJWkVdOworICAgIGNoYXIgc3VyRW5jOworICAgIGNoYXIgb3JnW0NUQ19OQU1FX1NJWkVdOworICAgIGNoYXIgb3JnRW5jOworICAgIGNoYXIgdW5pdFtDVENfTkFNRV9TSVpFXTsKKyAgICBjaGFyIHVuaXRFbmM7CisgICAgY2hhciBjb21tb25OYW1lW0NUQ19OQU1FX1NJWkVdOworICAgIGNoYXIgY29tbW9uTmFtZUVuYzsKKyAgICBjaGFyIHNlcmlhbERldltDVENfTkFNRV9TSVpFXTsKKyAgICBjaGFyIHNlcmlhbERldkVuYzsKKyNpZmRlZiBXT0xGU1NMX0NFUlRfRVhUCisgICAgY2hhciBidXNDYXRbQ1RDX05BTUVfU0laRV07CisgICAgY2hhciBidXNDYXRFbmM7CisgICAgY2hhciBqb2lDW0NUQ19OQU1FX1NJWkVdOworICAgIGNoYXIgam9pQ0VuYzsKKyAgICBjaGFyIGpvaVN0W0NUQ19OQU1FX1NJWkVdOworICAgIGNoYXIgam9pU3RFbmM7CisjZW5kaWYKKyAgICBjaGFyIGVtYWlsW0NUQ19OQU1FX1NJWkVdOyAgLyogISEhISBlbWFpbCBoYXMgdG8gYmUgbGFzdCAhISEhICovCisjaWZkZWYgV09MRlNTTF9NVUxUSV9BVFRSSUIKKyAgICBOYW1lQXR0cmliIG5hbWVbQ1RDX01BWF9BVFRSSUJdOworI2VuZGlmCit9IENlcnROYW1lOworCisKKy8qIGZvciB1c2VyIHRvIGZpbGwgZm9yIGNlcnRpZmljYXRlIGdlbmVyYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IENlcnQgeworICAgIGludCAgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgICAgIC8qIHg1MDkgdmVyc2lvbiAgKi8KKyAgICBieXRlICAgICBzZXJpYWxbQ1RDX1NFUklBTF9TSVpFXTsgICAvKiBzZXJpYWwgbnVtYmVyICovCisgICAgaW50ICAgICAgc2VyaWFsU3o7ICAgICAgICAgICAgICAgICAgLyogc2VyaWFsIHNpemUgKi8KKyAgICBpbnQgICAgICBzaWdUeXBlOyAgICAgICAgICAgICAgICAgICAvKiBzaWduYXR1cmUgYWxnbyB0eXBlICovCisgICAgQ2VydE5hbWUgaXNzdWVyOyAgICAgICAgICAgICAgICAgICAgLyogaXNzdWVyIGluZm8gKi8KKyAgICBpbnQgICAgICBkYXlzVmFsaWQ7ICAgICAgICAgICAgICAgICAvKiB2YWxpZGl0eSBkYXlzICovCisgICAgaW50ICAgICAgc2VsZlNpZ25lZDsgICAgICAgICAgICAgICAgLyogc2VsZiBzaWduZWQgZmxhZyAqLworICAgIENlcnROYW1lIHN1YmplY3Q7ICAgICAgICAgICAgICAgICAgIC8qIHN1YmplY3QgaW5mbyAqLworICAgIGludCAgICAgIGlzQ0E7ICAgICAgICAgICAgICAgICAgICAgIC8qIGlzIHRoaXMgZ29pbmcgdG8gYmUgYSBDQSAqLworICAgIC8qIGludGVybmFsIHVzZSBvbmx5ICovCisgICAgaW50ICAgICAgYm9keVN6OyAgICAgICAgICAgICAgICAgICAgLyogcHJlIHNpZ24gdG90YWwgc2l6ZSAqLworICAgIGludCAgICAgIGtleVR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIHB1YmxpYyBrZXkgdHlwZSBvZiBzdWJqZWN0ICovCisjaWZkZWYgV09MRlNTTF9BTFRfTkFNRVMKKyAgICBieXRlICAgICBhbHROYW1lc1tDVENfTUFYX0FMVF9TSVpFXTsgLyogYWx0TmFtZXMgY29weSAqLworICAgIGludCAgICAgIGFsdE5hbWVzU3o7ICAgICAgICAgICAgICAgICAvKiBhbHROYW1lcyBzaXplIGluIGJ5dGVzICovCisgICAgYnl0ZSAgICAgYmVmb3JlRGF0ZVtDVENfREFURV9TSVpFXTsgIC8qIGJlZm9yZSBkYXRlIGNvcHkgKi8KKyAgICBpbnQgICAgICBiZWZvcmVEYXRlU3o7ICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBjb3B5ICovCisgICAgYnl0ZSAgICAgYWZ0ZXJEYXRlW0NUQ19EQVRFX1NJWkVdOyAgIC8qIGFmdGVyIGRhdGUgY29weSAqLworICAgIGludCAgICAgIGFmdGVyRGF0ZVN6OyAgICAgICAgICAgICAgICAvKiBzaXplIG9mIGNvcHkgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfQ0VSVF9FWFQKKyAgICBieXRlICAgIHNraWRbQ1RDX01BWF9TS0lEX1NJWkVdOyAgICAgLyogU3ViamVjdCBLZXkgSWRlbnRpZmllciAqLworICAgIGludCAgICAgc2tpZFN6OyAgICAgICAgICAgICAgICAgICAgICAvKiBTS0lEIHNpemUgaW4gYnl0ZXMgKi8KKyAgICBieXRlICAgIGFraWRbQ1RDX01BWF9BS0lEX1NJWkVdOyAgICAgLyogQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyICovCisgICAgaW50ICAgICBha2lkU3o7ICAgICAgICAgICAgICAgICAgICAgIC8qIEFLSUQgc2l6ZSBpbiBieXRlcyAqLworICAgIHdvcmQxNiAga2V5VXNhZ2U7ICAgICAgICAgICAgICAgICAgICAvKiBLZXkgVXNhZ2UgKi8KKyAgICBieXRlICAgIGV4dEtleVVzYWdlOyAgICAgICAgICAgICAgICAgLyogRXh0ZW5kZWQgS2V5IFVzYWdlICovCisjaWZkZWYgV09MRlNTTF9FS1VfT0lECisgICAgLyogRXh0ZW5kZWQgS2V5IFVzYWdlIE9JRHMgKi8KKyAgICBieXRlICAgIGV4dEtleVVzYWdlT0lEW0NUQ19NQVhfRUtVX05CXVtDVENfTUFYX0VLVV9PSURfU1pdOworICAgIGJ5dGUgICAgZXh0S2V5VXNhZ2VPSURTeltDVENfTUFYX0VLVV9OQl07CisjZW5kaWYKKyAgICBjaGFyICAgIGNlcnRQb2xpY2llc1tDVENfTUFYX0NFUlRQT0xfTkJdW0NUQ19NQVhfQ0VSVFBPTF9TWl07CisgICAgd29yZDE2ICBjZXJ0UG9saWNpZXNOYjsgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBDZXJ0IFBvbGljeSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0NFUlRfRVhUKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IFwKKyAgICBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9SRVEpCisgICAgYnl0ZSAgICAgaXNzUmF3W3NpemVvZihDZXJ0TmFtZSldOyAgIC8qIHJhdyBpc3N1ZXIgaW5mbyAqLworICAgIGJ5dGUgICAgIHNialJhd1tzaXplb2YoQ2VydE5hbWUpXTsgICAvKiByYXcgc3ViamVjdCBpbmZvICovCisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0NFUlRfUkVRCisgICAgY2hhciAgICAgY2hhbGxlbmdlUHdbQ1RDX05BTUVfU0laRV07CisgICAgaW50ICAgICAgY2hhbGxlbmdlUHdQcmludGFibGVTdHJpbmc7IC8qIGVuY29kZSBhcyBQcmludGFibGVTdHJpbmcgKi8KKyNlbmRpZgorICAgIHZvaWQqICAgZGVjb2RlZENlcnQ7ICAgIC8qIGludGVybmFsIERlY29kZWRDZXJ0IGFsbG9jYXRlZCBmcm9tIGhlYXAgKi8KKyAgICBieXRlKiAgIGRlcjsgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGJ1ZmZlciBvZiBjdXJyZW50IERlY29kZWRDZXJ0IGNhY2hlICovCisgICAgdm9pZCogICBoZWFwOyAgICAgICAgICAgLyogaGVhcCBoaW50ICovCit9IENlcnQ7CisKKworLyogSW5pdGlhbGl6ZSBhbmQgU2V0IENlcnRpZmljYXRlIGRlZmF1bHRzOgorICAgdmVyc2lvbiAgICA9IDMgKDB4MikKKyAgIHNlcmlhbCAgICAgPSAwIChXaWxsIGJlIHJhbmRvbWx5IGdlbmVyYXRlZCkKKyAgIHNpZ1R5cGUgICAgPSBTSEFfV0lUSF9SU0EKKyAgIGlzc3VlciAgICAgPSBibGFuaworICAgZGF5c1ZhbGlkICA9IDUwMAorICAgc2VsZlNpZ25lZCA9IDEgKHRydWUpIHVzZSBzdWJqZWN0IGFzIGlzc3VlcgorICAgc3ViamVjdCAgICA9IGJsYW5rCisgICBpc0NBICAgICAgID0gMCAoZmFsc2UpCisgICBrZXlUeXBlICAgID0gUlNBX0tFWSAoZGVmYXVsdCkKKyovCitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdENlcnQoQ2VydCopOworV09MRlNTTF9BUEkgaW50IHdjX01ha2VDZXJ0X2V4KENlcnQqIGNlcnQsIGJ5dGUqIGRlckJ1ZmZlciwgd29yZDMyIGRlclN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5VHlwZSwgdm9pZCoga2V5LCBXQ19STkcqIHJuZyk7CitXT0xGU1NMX0FQSSBpbnQgd2NfTWFrZUNlcnQoQ2VydCosIGJ5dGUqIGRlckJ1ZmZlciwgd29yZDMyIGRlclN6LCBSc2FLZXkqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5KiwgV0NfUk5HKik7CisjaWZkZWYgV09MRlNTTF9DRVJUX1JFUQorICAgIFdPTEZTU0xfQVBJIGludCB3Y19NYWtlQ2VydFJlcV9leChDZXJ0KiwgYnl0ZSogZGVyQnVmZmVyLCB3b3JkMzIgZGVyU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIHZvaWQqKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfTWFrZUNlcnRSZXEoQ2VydCosIGJ5dGUqIGRlckJ1ZmZlciwgd29yZDMyIGRlclN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnNhS2V5KiwgZWNjX2tleSopOworI2VuZGlmCitXT0xGU1NMX0FQSSBpbnQgd2NfU2lnbkNlcnRfZXgoaW50IHJlcXVlc3RTeiwgaW50IHNUeXBlLCBieXRlKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBidWZmU3osIGludCBrZXlUeXBlLCB2b2lkKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdDX1JORyogcm5nKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaWduQ2VydChpbnQgcmVxdWVzdFN6LCBpbnQgc2lnVHlwZSwgYnl0ZSogZGVyQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgZGVyU3osIFJzYUtleSosIGVjY19rZXkqLCBXQ19STkcqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19NYWtlU2VsZkNlcnQoQ2VydCosIGJ5dGUqIGRlckJ1ZmZlciwgd29yZDMyIGRlclN6LCBSc2FLZXkqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQ19STkcqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TZXRJc3N1ZXIoQ2VydCosIGNvbnN0IGNoYXIqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TZXRTdWJqZWN0KENlcnQqLCBjb25zdCBjaGFyKik7CisjaWZkZWYgV09MRlNTTF9BTFRfTkFNRVMKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfU2V0QWx0TmFtZXMoQ2VydCosIGNvbnN0IGNoYXIqKTsKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9DRVJUX0dFTl9DQUNIRQorV09MRlNTTF9BUEkgdm9pZCB3Y19TZXRDZXJ0X0ZyZWUoQ2VydCogY2VydCk7CisjZW5kaWYKKworV09MRlNTTF9BUEkgaW50IHdjX1NldElzc3VlckJ1ZmZlcihDZXJ0KiwgY29uc3QgYnl0ZSosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2V0U3ViamVjdEJ1ZmZlcihDZXJ0KiwgY29uc3QgYnl0ZSosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2V0QWx0TmFtZXNCdWZmZXIoQ2VydCosIGNvbnN0IGJ5dGUqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdjX1NldERhdGVzQnVmZmVyKENlcnQqLCBjb25zdCBieXRlKiwgaW50KTsKKworI2lmbmRlZiBOT19BU05fVElNRQorV09MRlNTTF9BUEkgaW50IHdjX0dldENlcnREYXRlcyhDZXJ0KiBjZXJ0LCBzdHJ1Y3QgdG0qIGJlZm9yZSwKKyAgICBzdHJ1Y3QgdG0qIGFmdGVyKTsKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9DRVJUX0VYVAorV09MRlNTTF9BUEkgaW50IHdjX1NldEF1dGhLZXlJZEZyb21QdWJsaWNLZXlfZXgoQ2VydCAqY2VydCwgaW50IGtleVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBrZXkpOworV09MRlNTTF9BUEkgaW50IHdjX1NldEF1dGhLZXlJZEZyb21QdWJsaWNLZXkoQ2VydCAqY2VydCwgUnNhS2V5ICpyc2FrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICplY2tleSk7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2V0QXV0aEtleUlkRnJvbUNlcnQoQ2VydCAqY2VydCwgY29uc3QgYnl0ZSAqZGVyLCBpbnQgZGVyU3opOworV09MRlNTTF9BUEkgaW50IHdjX1NldEF1dGhLZXlJZChDZXJ0ICpjZXJ0LCBjb25zdCBjaGFyKiBmaWxlKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TZXRTdWJqZWN0S2V5SWRGcm9tUHVibGljS2V5X2V4KENlcnQgKmNlcnQsIGludCBrZXlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoga2V5KTsKK1dPTEZTU0xfQVBJIGludCB3Y19TZXRTdWJqZWN0S2V5SWRGcm9tUHVibGljS2V5KENlcnQgKmNlcnQsIFJzYUtleSAqcnNha2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqZWNrZXkpOworV09MRlNTTF9BUEkgaW50IHdjX1NldFN1YmplY3RLZXlJZChDZXJ0ICpjZXJ0LCBjb25zdCBjaGFyKiBmaWxlKTsKK1dPTEZTU0xfQVBJIGludCB3Y19HZXRTdWJqZWN0UmF3KGJ5dGUgKipzdWJqZWN0UmF3LCBDZXJ0ICpjZXJ0KTsKK1dPTEZTU0xfQVBJIGludCB3Y19TZXRTdWJqZWN0UmF3KENlcnQqIGNlcnQsIGNvbnN0IGJ5dGUqIGRlciwgaW50IGRlclN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19TZXRJc3N1ZXJSYXcoQ2VydCogY2VydCwgY29uc3QgYnl0ZSogZGVyLCBpbnQgZGVyU3opOworCisjaWZkZWYgSEFWRV9OVFJVCitXT0xGU1NMX0FQSSBpbnQgd2NfU2V0U3ViamVjdEtleUlkRnJvbU50cnVQdWJsaWNLZXkoQ2VydCAqY2VydCwgYnl0ZSAqbnRydUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMTYgbnRydUtleVN6KTsKKyNlbmRpZgorCisvKiBTZXQgdGhlIEtleVVzYWdlLgorICogVmFsdWUgaXMgYSBzdHJpbmcgc2VwYXJhdGVkIHRva2VucyB3aXRoICcsJy4gQWNjZXB0ZWQgdG9rZW5zIGFyZSA6CisgKiBkaWdpdGFsU2lnbmF0dXJlLG5vblJlcHVkaWF0aW9uLGNvbnRlbnRDb21taXRtZW50LGtleUNlcnRTaWduLGNSTFNpZ24sCisgKiBkYXRhRW5jaXBoZXJtZW50LGtleUFncmVlbWVudCxrZXlFbmNpcGhlcm1lbnQsZW5jaXBoZXJPbmx5IGFuZCBkZWNpcGhlck9ubHkuCisgKgorICogbm9uUmVwdWRpYXRpb24gYW5kIGNvbnRlbnRDb21taXRtZW50IGFyZSBmb3IgdGhlIHNhbWUgdXNhZ2UuCisgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19TZXRLZXlVc2FnZShDZXJ0ICpjZXJ0LCBjb25zdCBjaGFyICp2YWx1ZSk7CisKKy8qIFNldCBFeHRlbmRlZEtleVVzYWdlCisgKiBWYWx1ZSBpcyBhIHN0cmluZyBzZXBhcmF0ZWQgdG9rZW5zIHdpdGggJywnLiBBY2NlcHRlZCB0b2tlbnMgYXJlIDoKKyAqIGFueSxzZXJ2ZXJBdXRoLGNsaWVudEF1dGgsY29kZVNpZ25pbmcsZW1haWxQcm90ZWN0aW9uLHRpbWVTdGFtcGluZyxPQ1NQU2lnbmluZworICovCitXT0xGU1NMX0FQSSBpbnQgd2NfU2V0RXh0S2V5VXNhZ2UoQ2VydCAqY2VydCwgY29uc3QgY2hhciAqdmFsdWUpOworCisKKyNpZmRlZiBXT0xGU1NMX0VLVV9PSUQKKy8qIFNldCBFeHRlbmRlZEtleVVzYWdlIHdpdGggdW5pcXVlIE9JRAorICogb2lkIGlzIGV4cGVjdGVkIHRvIGJlIGluIGJ5dGUgcmVwcmVzZW50YXRpb24KKyAqLworV09MRlNTTF9BUEkgaW50IHdjX1NldEV4dEtleVVzYWdlT0lEKENlcnQgKmNlcnQsIGNvbnN0IGNoYXIgKm9pZCwgd29yZDMyIHN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgaWR4LCB2b2lkKiBoZWFwKTsKKyNlbmRpZiAvKiBXT0xGU1NMX0VLVV9PSUQgKi8KKyNlbmRpZiAvKiBXT0xGU1NMX0NFUlRfRVhUICovCisKKyAgICAjaWZkZWYgSEFWRV9OVFJVCisgICAgICAgIFdPTEZTU0xfQVBJIGludCB3Y19NYWtlTnRydUNlcnQoQ2VydCosIGJ5dGUqIGRlckJ1ZmZlciwgd29yZDMyIGRlclN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIG50cnVLZXksIHdvcmQxNiBrZXlTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQ19STkcqKTsKKyAgICAjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZTU0xfQ0VSVF9HRU4gKi8KKworV09MRlNTTF9BUEkgaW50IHdjX0dldERhdGVJbmZvKGNvbnN0IGJ5dGUqIGNlcnREYXRlLCBpbnQgY2VydERhdGVTeiwKKyAgICBjb25zdCBieXRlKiogZGF0ZSwgYnl0ZSogZm9ybWF0LCBpbnQqIGxlbmd0aCk7CisjaWZuZGVmIE5PX0FTTl9USU1FCitXT0xGU1NMX0FQSSBpbnQgd2NfR2V0RGF0ZUFzQ2FsZW5kYXJUaW1lKGNvbnN0IGJ5dGUqIGRhdGUsIGludCBsZW5ndGgsCisgICAgYnl0ZSBmb3JtYXQsIHN0cnVjdCB0bSogdGltZSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF9QRU1fVE9fREVSKSB8fCBkZWZpbmVkKFdPTEZTU0xfREVSX1RPX1BFTSkKKworICAgIFdPTEZTU0xfQVBJIGludCB3Y19QZW1HZXRIZWFkZXJGb290ZXIoaW50IHR5cGUsIGNvbnN0IGNoYXIqKiBoZWFkZXIsCisgICAgICAgIGNvbnN0IGNoYXIqKiBmb290ZXIpOworCisjZW5kaWYKKworV09MRlNTTF9BUEkgIGludCB3Y19BbGxvY0RlcihEZXJCdWZmZXIqKiBwRGVyLCB3b3JkMzIgbGVuZ3RoLCBpbnQgdHlwZSwgdm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSSB2b2lkIHdjX0ZyZWVEZXIoRGVyQnVmZmVyKiogcERlcik7CisKKyNpZmRlZiBXT0xGU1NMX1BFTV9UT19ERVIKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfUGVtVG9EZXIoY29uc3QgdW5zaWduZWQgY2hhciogYnVmZiwgbG9uZyBsb25nU3osIGludCB0eXBlLAorICAgICAgICAgICAgICBEZXJCdWZmZXIqKiBwRGVyLCB2b2lkKiBoZWFwLCBFbmNyeXB0ZWRJbmZvKiBpbmZvLCBpbnQqIGVjY0tleSk7CisKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfS2V5UGVtVG9EZXIoY29uc3QgdW5zaWduZWQgY2hhciosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciosIGludCwgY29uc3QgY2hhciopOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19DZXJ0UGVtVG9EZXIoY29uc3QgdW5zaWduZWQgY2hhciosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqLCBpbnQsIGludCk7CisjZW5kaWYgLyogV09MRlNTTF9QRU1fVE9fREVSICovCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9FWFQpIHx8IGRlZmluZWQoV09MRlNTTF9QVUJfUEVNX1RPX0RFUikKKyAgICAjaWZuZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAgICAgV09MRlNTTF9BUEkgaW50IHdjX1BlbVB1YktleVRvRGVyKGNvbnN0IGNoYXIqIGZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZGVyQnVmLCBpbnQgZGVyU3opOworICAgICNlbmRpZgorCisgICAgV09MRlNTTF9BUEkgaW50IHdjX1B1YktleVBlbVRvRGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqLCBpbnQpOworI2VuZGlmIC8qIFdPTEZTU0xfQ0VSVF9FWFQgfHwgV09MRlNTTF9QVUJfUEVNX1RPX0RFUiAqLworCisjaWZkZWYgV09MRlNTTF9DRVJUX0dFTgorICAgICNpZm5kZWYgTk9fRklMRVNZU1RFTQorICAgICAgICBXT0xGU1NMX0FQSSBpbnQgd2NfUGVtQ2VydFRvRGVyKGNvbnN0IGNoYXIqIGZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlckJ1ZiwgaW50IGRlclN6KTsKKyAgICAjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX0NFUlRfR0VOICovCisKKyNpZmRlZiBXT0xGU1NMX0RFUl9UT19QRU0KKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfRGVyVG9QZW0oY29uc3QgYnl0ZSogZGVyLCB3b3JkMzIgZGVyU3osIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG91dHB1dFN6LCBpbnQgdHlwZSk7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX0RlclRvUGVtRXgoY29uc3QgYnl0ZSogZGVyLCB3b3JkMzIgZGVyU3osIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG91dHB1dFN6LCBieXRlICpjaXBoZXJJbm8sIGludCB0eXBlKTsKKyNlbmRpZgorCisjaWZuZGVmIE5PX1JTQQorICAgICNpZiAhZGVmaW5lZChIQVZFX1VTRVJfUlNBKQorICAgIFdPTEZTU0xfQVBJIGludCB3Y19Sc2FQdWJsaWNLZXlEZWNvZGVfZXgoY29uc3QgYnl0ZSogaW5wdXQsIHdvcmQzMiogaW5PdXRJZHgsCisgICAgICAgIHdvcmQzMiBpblN6LCBjb25zdCBieXRlKiogbiwgd29yZDMyKiBuU3osIGNvbnN0IGJ5dGUqKiBlLCB3b3JkMzIqIGVTeik7CisgICAgI2VuZGlmCisgICAgV09MRlNTTF9BUEkgaW50IHdjX1JzYVB1YmxpY0tleURlclNpemUoUnNhS2V5KiBrZXksIGludCB3aXRoX2hlYWRlcik7CisjZW5kaWYKKworI2lmbmRlZiBOT19EU0EKKyAgICAvKiBEU0EgcGFyYW1ldGVyIERFUiBoZWxwZXIgZnVuY3Rpb25zICovCisgICAgV09MRlNTTF9BUEkgaW50IHdjX0RzYVBhcmFtc0RlY29kZShjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERzYUtleSosIHdvcmQzMik7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX0RzYUtleVRvUGFyYW1zRGVyKERzYUtleSoga2V5LCBieXRlKiBvdXRwdXQsIHdvcmQzMiBpbkxlbik7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5PX0RIKSAmJiBkZWZpbmVkKFdPTEZTU0xfREhfRVhUUkEpCitXT0xGU1NMX0xPQ0FMIGludCB3Y19EaEtleVRvRGVyKERoS2V5KiBrZXksIGJ5dGUqIG91dHB1dCwgd29yZDMyKiBvdXRTeiwgaW50IGV4cG9ydFByaXYpOworV09MRlNTTF9BUEkgaW50IHdjX0RoUGFyYW1zVG9EZXIoRGhLZXkqIGtleSwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dFN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19EaFB1YktleVRvRGVyKERoS2V5KiBrZXksIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRTeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfRGhQcml2S2V5VG9EZXIoRGhLZXkqIGtleSwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dFN6KTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9FQ0MKKyAgICAvKiBwcml2YXRlIGtleSBoZWxwZXJzICovCisgICAgV09MRlNTTF9BUEkgaW50IHdjX0VjY1ByaXZhdGVLZXlEZWNvZGUoY29uc3QgYnl0ZSosIHdvcmQzMiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSosIHdvcmQzMik7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX0VjY0tleVRvRGVyKGVjY19rZXkqLCBieXRlKiBvdXRwdXQsIHdvcmQzMiBpbkxlbik7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX0VjY1ByaXZhdGVLZXlUb0RlcihlY2Nfa2V5KiBrZXksIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBpbkxlbik7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX0VjY0tleURlclNpemUoZWNjX2tleSosIGludCBwdWIpOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19FY2NQcml2YXRlS2V5VG9QS0NTOChlY2Nfa2V5KiBrZXksIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyKiBvdXRMZW4pOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19FY2NLZXlUb1BLQ1M4KGVjY19rZXkqIGtleSwgYnl0ZSogb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiogb3V0TGVuKTsKKworICAgIC8qIHB1YmxpYyBrZXkgaGVscGVyICovCisgICAgV09MRlNTTF9BUEkgaW50IHdjX0VjY1B1YmxpY0tleURlY29kZShjb25zdCBieXRlKiwgd29yZDMyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5Kiwgd29yZDMyKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfRWNjUHVibGljS2V5VG9EZXIoZWNjX2tleSosIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGluTGVuLCBpbnQgd2l0aF9BbGdDdXJ2ZSk7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX0VjY1B1YmxpY0tleURlclNpemUoZWNjX2tleSosIGludCB3aXRoX0FsZ0N1cnZlKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9FRDI1NTE5CisgICAgLyogcHJpdmF0ZSBrZXkgaGVscGVycyAqLworICAgIFdPTEZTU0xfQVBJIGludCB3Y19FZDI1NTE5UHJpdmF0ZUtleURlY29kZShjb25zdCBieXRlKiwgd29yZDMyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWQyNTUxOV9rZXkqLCB3b3JkMzIpOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19FZDI1NTE5S2V5VG9EZXIoZWQyNTUxOV9rZXkqIGtleSwgYnl0ZSogb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGluTGVuKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfRWQyNTUxOVByaXZhdGVLZXlUb0RlcihlZDI1NTE5X2tleSoga2V5LCBieXRlKiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGluTGVuKTsKKworICAgIC8qIHB1YmxpYyBrZXkgaGVscGVyICovCisgICAgV09MRlNTTF9BUEkgaW50IHdjX0VkMjU1MTlQdWJsaWNLZXlEZWNvZGUoY29uc3QgYnl0ZSosIHdvcmQzMiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWQyNTUxOV9rZXkqLCB3b3JkMzIpOworICAgICNpZiAoZGVmaW5lZChXT0xGU1NMX0NFUlRfR0VOKSB8fCBkZWZpbmVkKFdPTEZTU0xfS0VZX0dFTikpCisgICAgICAgIFdPTEZTU0xfQVBJIGludCB3Y19FZDI1NTE5UHVibGljS2V5VG9EZXIoZWQyNTUxOV9rZXkqLCBieXRlKiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBpbkxlbiwgaW50IHdpdGhfQWxnQ3VydmUpOworICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0VENDQ4CisgICAgLyogcHJpdmF0ZSBrZXkgaGVscGVycyAqLworICAgIFdPTEZTU0xfQVBJIGludCB3Y19FZDQ0OFByaXZhdGVLZXlEZWNvZGUoY29uc3QgYnl0ZSosIHdvcmQzMiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZDQ0OF9rZXkqLCB3b3JkMzIpOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19FZDQ0OEtleVRvRGVyKGVkNDQ4X2tleSoga2V5LCBieXRlKiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGluTGVuKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfRWQ0NDhQcml2YXRlS2V5VG9EZXIoZWQ0NDhfa2V5KiBrZXksIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGluTGVuKTsKKworICAgIC8qIHB1YmxpYyBrZXkgaGVscGVyICovCisgICAgV09MRlNTTF9BUEkgaW50IHdjX0VkNDQ4UHVibGljS2V5RGVjb2RlKGNvbnN0IGJ5dGUqLCB3b3JkMzIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZDQ0OF9rZXkqLCB3b3JkMzIpOworICAgICNpZiAoZGVmaW5lZChXT0xGU1NMX0NFUlRfR0VOKSB8fCBkZWZpbmVkKFdPTEZTU0xfS0VZX0dFTikpCisgICAgICAgIFdPTEZTU0xfQVBJIGludCB3Y19FZDQ0OFB1YmxpY0tleVRvRGVyKGVkNDQ4X2tleSosIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGluTGVuLCBpbnQgd2l0aF9BbGdDdXJ2ZSk7CisgICAgI2VuZGlmCisjZW5kaWYKKworLyogREVSIGVuY29kZSBzaWduYXR1cmUgKi8KK1dPTEZTU0xfQVBJIHdvcmQzMiB3Y19FbmNvZGVTaWduYXR1cmUoYnl0ZSogb3V0LCBjb25zdCBieXRlKiBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBkaWdTeiwgaW50IGhhc2hPSUQpOworV09MRlNTTF9BUEkgaW50IHdjX0dldENUQ19IYXNoT0lEKGludCB0eXBlKTsKKworV09MRlNTTF9BUEkgaW50IHdjX0dldFBrY3M4VHJhZGl0aW9uYWxPZmZzZXQoYnl0ZSogaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIqIGluT3V0SWR4LCB3b3JkMzIgc3opOworV09MRlNTTF9BUEkgaW50IHdjX0NyZWF0ZVBLQ1M4S2V5KGJ5dGUqIG91dCwgd29yZDMyKiBvdXRTeiwKKyAgICAgICAgYnl0ZSoga2V5LCB3b3JkMzIga2V5U3osIGludCBhbGdvSUQsIGNvbnN0IGJ5dGUqIGN1cnZlT0lELAorICAgICAgICB3b3JkMzIgb2lkU3opOworV09MRlNTTF9BUEkgaW50IHdjX0VuY3J5cHRQS0NTOEtleShieXRlKiwgd29yZDMyLCBieXRlKiwgd29yZDMyKiwgY29uc3QgY2hhciosCisgICAgICAgIGludCwgaW50LCBpbnQsIGludCwgYnl0ZSosIHdvcmQzMiwgaW50LCBXQ19STkcqLCB2b2lkKik7CitXT0xGU1NMX0FQSSBpbnQgd2NfRGVjcnlwdFBLQ1M4S2V5KGJ5dGUqLCB3b3JkMzIsIGNvbnN0IGNoYXIqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdjX0NyZWF0ZUVuY3J5cHRlZFBLQ1M4S2V5KGJ5dGUqLCB3b3JkMzIsIGJ5dGUqLCB3b3JkMzIqLAorICAgICAgICBjb25zdCBjaGFyKiwgaW50LCBpbnQsIGludCwgaW50LCBieXRlKiwgd29yZDMyLCBpbnQsIFdDX1JORyosIHZvaWQqKTsKKworI2lmbmRlZiBOT19BU05fVElNRQorLyogVGltZSAqLworLyogUmV0dXJucyBzZWNvbmRzIChFcG9jaC9VVEMpCisgKiB0aW1lUHRyOiBpcyAidGltZV90Iiwgd2hpY2ggaXMgdHlwaWNhbGx5ICJsb25nIgorICogRXhhbXBsZToKKyAgICBsb25nIGxUaW1lOworICAgIHJjID0gd2NfR2V0VGltZSgmbFRpbWUsICh3b3JkMzIpc2l6ZW9mKGxUaW1lKSk7CisqLworV09MRlNTTF9BUEkgaW50IHdjX0dldFRpbWUodm9pZCogdGltZVB0ciwgd29yZDMyIHRpbWVTaXplKTsKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9FTkNSWVBURURfS0VZUworICAgIFdPTEZTU0xfQVBJIGludCB3Y19FbmNyeXB0ZWRJbmZvR2V0KEVuY3J5cHRlZEluZm8qIGluZm8sCisgICAgICAgIGNvbnN0IGNoYXIqIGNpcGhlckluZm8pOworI2VuZGlmCisKKworI2lmZGVmIFdPTEZTU0xfQ0VSVF9QSVYKKwordHlwZWRlZiBzdHJ1Y3QgX3djX0NlcnRQSVYgeworICAgIGNvbnN0IGJ5dGUqICBjZXJ0OworICAgIHdvcmQzMiAgICAgICBjZXJ0U3o7CisgICAgY29uc3QgYnl0ZSogIGNlcnRFcnJEZXQ7CisgICAgd29yZDMyICAgICAgIGNlcnRFcnJEZXRTejsKKyAgICBjb25zdCBieXRlKiAgbm9uY2U7ICAgICAgICAgLyogSWRlbnRpdiBPbmx5ICovCisgICAgd29yZDMyICAgICAgIG5vbmNlU3o7ICAgICAgIC8qIElkZW50aXYgT25seSAqLworICAgIGNvbnN0IGJ5dGUqICBzaWduZWROb25jZTsgICAvKiBJZGVudGl2IE9ubHkgKi8KKyAgICB3b3JkMzIgICAgICAgc2lnbmVkTm9uY2VTejsgLyogSWRlbnRpdiBPbmx5ICovCisKKyAgICAvKiBmbGFncyAqLworICAgIHdvcmQxNiAgICAgICBjb21wcmVzc2lvbjoyOworICAgIHdvcmQxNiAgICAgICBpc1g1MDk6MTsKKyAgICB3b3JkMTYgICAgICAgaXNJZGVudGl2OjE7Cit9IHdjX0NlcnRQSVY7CisKK1dPTEZTU0xfQVBJIGludCB3Y19QYXJzZUNlcnRQSVYod2NfQ2VydFBJViogY2VydCwgY29uc3QgYnl0ZSogYnVmLCB3b3JkMzIgdG90YWxTeik7CisjZW5kaWYgLyogV09MRlNTTF9DRVJUX1BJViAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0FTTl9QVUJMSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2JsYWtlMi1pbXBsLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvYmxha2UyLWltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmE0YmVjCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2JsYWtlMi1pbXBsLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgICBCTEFLRTIgcmVmZXJlbmNlIHNvdXJjZSBjb2RlIHBhY2thZ2UgLSByZWZlcmVuY2UgQyBpbXBsZW1lbnRhdGlvbnMKKworICAgV3JpdHRlbiBpbiAyMDEyIGJ5IFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4KKworICAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBhdXRob3IocykgaGF2ZSBkZWRpY2F0ZWQgYWxsIGNvcHlyaWdodAorICAgYW5kIHJlbGF0ZWQgYW5kIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGlzIHNvZnR3YXJlIHRvIHRoZSBwdWJsaWMgZG9tYWluCisgICB3b3JsZHdpZGUuIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgd2l0aG91dCBhbnkgd2FycmFudHkuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcgd2l0aAorICAgdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8+LgorKi8KKy8qIGJsYWtlMi1pbXBsLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBXT0xGQ1JZUFRfQkxBS0UyX0lNUExfSAorI2RlZmluZSBXT0xGQ1JZUFRfQkxBS0UyX0lNUExfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworc3RhdGljIFdDX0lOTElORSB3b3JkMzIgbG9hZDMyKCBjb25zdCB2b2lkICpzcmMgKQoreworI2lmIGRlZmluZWQoTElUVExFX0VORElBTl9PUkRFUikKKyAgcmV0dXJuICooIHdvcmQzMiAqICkoIHNyYyApOworI2Vsc2UKKyAgY29uc3QgYnl0ZSAqcCA9ICggYnl0ZSAqIClzcmM7CisgIHdvcmQzMiB3ID0gKnArKzsKKyAgdyB8PSAoIHdvcmQzMiApKCAqcCsrICkgPDwgIDg7CisgIHcgfD0gKCB3b3JkMzIgKSggKnArKyApIDw8IDE2OworICB3IHw9ICggd29yZDMyICkoICpwKysgKSA8PCAyNDsKKyAgcmV0dXJuIHc7CisjZW5kaWYKK30KKworc3RhdGljIFdDX0lOTElORSB3b3JkNjQgbG9hZDY0KCBjb25zdCB2b2lkICpzcmMgKQoreworI2lmIGRlZmluZWQoTElUVExFX0VORElBTl9PUkRFUikKKyAgcmV0dXJuICooIHdvcmQ2NCAqICkoIHNyYyApOworI2Vsc2UKKyAgY29uc3QgYnl0ZSAqcCA9ICggYnl0ZSAqIClzcmM7CisgIHdvcmQ2NCB3ID0gKnArKzsKKyAgdyB8PSAoIHdvcmQ2NCApKCAqcCsrICkgPDwgIDg7CisgIHcgfD0gKCB3b3JkNjQgKSggKnArKyApIDw8IDE2OworICB3IHw9ICggd29yZDY0ICkoICpwKysgKSA8PCAyNDsKKyAgdyB8PSAoIHdvcmQ2NCApKCAqcCsrICkgPDwgMzI7CisgIHcgfD0gKCB3b3JkNjQgKSggKnArKyApIDw8IDQwOworICB3IHw9ICggd29yZDY0ICkoICpwKysgKSA8PCA0ODsKKyAgdyB8PSAoIHdvcmQ2NCApKCAqcCsrICkgPDwgNTY7CisgIHJldHVybiB3OworI2VuZGlmCit9CisKK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBzdG9yZTMyKCB2b2lkICpkc3QsIHdvcmQzMiB3ICkKK3sKKyNpZiBkZWZpbmVkKExJVFRMRV9FTkRJQU5fT1JERVIpCisgICooIHdvcmQzMiAqICkoIGRzdCApID0gdzsKKyNlbHNlCisgIGJ5dGUgKnAgPSAoIGJ5dGUgKiApZHN0OworICAqcCsrID0gKCBieXRlICl3OyB3ID4+PSA4OworICAqcCsrID0gKCBieXRlICl3OyB3ID4+PSA4OworICAqcCsrID0gKCBieXRlICl3OyB3ID4+PSA4OworICAqcCsrID0gKCBieXRlICl3OworI2VuZGlmCit9CisKK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBzdG9yZTY0KCB2b2lkICpkc3QsIHdvcmQ2NCB3ICkKK3sKKyNpZiBkZWZpbmVkKExJVFRMRV9FTkRJQU5fT1JERVIpICYmICFkZWZpbmVkKFdPTEZTU0xfR0VORVJBTF9BTElHTk1FTlQpCisgICooIHdvcmQ2NCAqICkoIGRzdCApID0gdzsKKyNlbHNlCisgIGJ5dGUgKnAgPSAoIGJ5dGUgKiApZHN0OworICAqcCsrID0gKCBieXRlICl3OyB3ID4+PSA4OworICAqcCsrID0gKCBieXRlICl3OyB3ID4+PSA4OworICAqcCsrID0gKCBieXRlICl3OyB3ID4+PSA4OworICAqcCsrID0gKCBieXRlICl3OyB3ID4+PSA4OworICAqcCsrID0gKCBieXRlICl3OyB3ID4+PSA4OworICAqcCsrID0gKCBieXRlICl3OyB3ID4+PSA4OworICAqcCsrID0gKCBieXRlICl3OyB3ID4+PSA4OworICAqcCsrID0gKCBieXRlICl3OworI2VuZGlmCit9CisKK3N0YXRpYyBXQ19JTkxJTkUgd29yZDY0IGxvYWQ0OCggY29uc3Qgdm9pZCAqc3JjICkKK3sKKyAgY29uc3QgYnl0ZSAqcCA9ICggY29uc3QgYnl0ZSAqIClzcmM7CisgIHdvcmQ2NCB3ID0gKnArKzsKKyAgdyB8PSAoIHdvcmQ2NCApKCAqcCsrICkgPDwgIDg7CisgIHcgfD0gKCB3b3JkNjQgKSggKnArKyApIDw8IDE2OworICB3IHw9ICggd29yZDY0ICkoICpwKysgKSA8PCAyNDsKKyAgdyB8PSAoIHdvcmQ2NCApKCAqcCsrICkgPDwgMzI7CisgIHcgfD0gKCB3b3JkNjQgKSggKnArKyApIDw8IDQwOworICByZXR1cm4gdzsKK30KKworc3RhdGljIFdDX0lOTElORSB2b2lkIHN0b3JlNDgoIHZvaWQgKmRzdCwgd29yZDY0IHcgKQoreworICBieXRlICpwID0gKCBieXRlICogKWRzdDsKKyAgKnArKyA9ICggYnl0ZSApdzsgdyA+Pj0gODsKKyAgKnArKyA9ICggYnl0ZSApdzsgdyA+Pj0gODsKKyAgKnArKyA9ICggYnl0ZSApdzsgdyA+Pj0gODsKKyAgKnArKyA9ICggYnl0ZSApdzsgdyA+Pj0gODsKKyAgKnArKyA9ICggYnl0ZSApdzsgdyA+Pj0gODsKKyAgKnArKyA9ICggYnl0ZSApdzsKK30KKworc3RhdGljIFdDX0lOTElORSB3b3JkMzIgcm90bDMyKCBjb25zdCB3b3JkMzIgdywgY29uc3QgdW5zaWduZWQgYyApCit7CisgIHJldHVybiAoIHcgPDwgYyApIHwgKCB3ID4+ICggMzIgLSBjICkgKTsKK30KKworc3RhdGljIFdDX0lOTElORSB3b3JkNjQgcm90bDY0KCBjb25zdCB3b3JkNjQgdywgY29uc3QgdW5zaWduZWQgYyApCit7CisgIHJldHVybiAoIHcgPDwgYyApIHwgKCB3ID4+ICggNjQgLSBjICkgKTsKK30KKworc3RhdGljIFdDX0lOTElORSB3b3JkMzIgcm90cjMyKCBjb25zdCB3b3JkMzIgdywgY29uc3QgdW5zaWduZWQgYyApCit7CisgIHJldHVybiAoIHcgPj4gYyApIHwgKCB3IDw8ICggMzIgLSBjICkgKTsKK30KKworc3RhdGljIFdDX0lOTElORSB3b3JkNjQgcm90cjY0KCBjb25zdCB3b3JkNjQgdywgY29uc3QgdW5zaWduZWQgYyApCit7CisgIHJldHVybiAoIHcgPj4gYyApIHwgKCB3IDw8ICggNjQgLSBjICkgKTsKK30KKworLyogcHJldmVudHMgY29tcGlsZXIgb3B0aW1pemluZyBvdXQgbWVtc2V0KCkgKi8KK3N0YXRpYyBXQ19JTkxJTkUgdm9pZCBzZWN1cmVfemVyb19tZW1vcnkoIHZvaWQgKnYsIHdvcmQ2NCBuICkKK3sKKyAgdm9sYXRpbGUgYnl0ZSAqcCA9ICggdm9sYXRpbGUgYnl0ZSAqICl2OworCisgIHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworI2VuZGlmICAvKiBXT0xGQ1JZUFRfQkxBS0UyX0lNUExfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvYmxha2UyLWludC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2JsYWtlMi1pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI4MGRiCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2JsYWtlMi1pbnQuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAgIEJMQUtFMiByZWZlcmVuY2Ugc291cmNlIGNvZGUgcGFja2FnZSAtIHJlZmVyZW5jZSBDIGltcGxlbWVudGF0aW9ucworCisgICBXcml0dGVuIGluIDIwMTIgYnkgU2FtdWVsIE5ldmVzIDxzbmV2ZXNAZGVpLnVjLnB0PgorCisgICBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGF1dGhvcihzKSBoYXZlIGRlZGljYXRlZCBhbGwgY29weXJpZ2h0CisgICBhbmQgcmVsYXRlZCBhbmQgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoaXMgc29mdHdhcmUgdG8gdGhlIHB1YmxpYyBkb21haW4KKyAgIHdvcmxkd2lkZS4gVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eS4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgQ0MwIFB1YmxpYyBEb21haW4gRGVkaWNhdGlvbiBhbG9uZyB3aXRoCisgICB0aGlzIHNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLz4uCisqLworLyogYmxha2UyLWludC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKworI2lmbmRlZiBXT0xGQ1JZUFRfQkxBS0UyX0lOVF9ICisjZGVmaW5lIFdPTEZDUllQVF9CTEFLRTJfSU5UX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyAgZW51bSBibGFrZTJzX2NvbnN0YW50CisgIHsKKyAgICBCTEFLRTJTX0JMT0NLQllURVMgPSA2NCwKKyAgICBCTEFLRTJTX09VVEJZVEVTICAgPSAzMiwKKyAgICBCTEFLRTJTX0tFWUJZVEVTICAgPSAzMiwKKyAgICBCTEFLRTJTX1NBTFRCWVRFUyAgPSA4LAorICAgIEJMQUtFMlNfUEVSU09OQUxCWVRFUyA9IDgKKyAgfTsKKworICBlbnVtIGJsYWtlMmJfY29uc3RhbnQKKyAgeworICAgIEJMQUtFMkJfQkxPQ0tCWVRFUyA9IDEyOCwKKyAgICBCTEFLRTJCX09VVEJZVEVTICAgPSA2NCwKKyAgICBCTEFLRTJCX0tFWUJZVEVTICAgPSA2NCwKKyAgICBCTEFLRTJCX1NBTFRCWVRFUyAgPSAxNiwKKyAgICBCTEFLRTJCX1BFUlNPTkFMQllURVMgPSAxNgorICB9OworCisjcHJhZ21hIHBhY2socHVzaCwgMSkKKyAgdHlwZWRlZiBzdHJ1Y3QgX19ibGFrZTJzX3BhcmFtCisgIHsKKyAgICBieXRlICBkaWdlc3RfbGVuZ3RoOyAvKiAxICovCisgICAgYnl0ZSAga2V5X2xlbmd0aDsgICAgLyogMiAqLworICAgIGJ5dGUgIGZhbm91dDsgICAgICAgIC8qIDMgKi8KKyAgICBieXRlICBkZXB0aDsgICAgICAgICAvKiA0ICovCisgICAgd29yZDMyIGxlYWZfbGVuZ3RoOyAgIC8qIDggKi8KKyAgICBieXRlICBub2RlX29mZnNldFs2XTsvKiAxNCAqLworICAgIGJ5dGUgIG5vZGVfZGVwdGg7ICAgIC8qIDE1ICovCisgICAgYnl0ZSAgaW5uZXJfbGVuZ3RoOyAgLyogMTYgKi8KKyAgICAvKiBieXRlICByZXNlcnZlZFswXTsgKi8KKyAgICBieXRlICBzYWx0W0JMQUtFMkJfU0FMVEJZVEVTXTsgLyogMjQgKi8KKyAgICBieXRlICBwZXJzb25hbFtCTEFLRTJTX1BFUlNPTkFMQllURVNdOyAgLyogMzIgKi8KKyAgfSBibGFrZTJzX3BhcmFtOworCisgIHR5cGVkZWYgc3RydWN0IEFMSUdOMzIgX19ibGFrZTJzX3N0YXRlCisgIHsKKyAgICB3b3JkMzIgaFs4XTsKKyAgICB3b3JkMzIgdFsyXTsKKyAgICB3b3JkMzIgZlsyXTsKKyAgICBieXRlICBidWZbMiAqIEJMQUtFMlNfQkxPQ0tCWVRFU107CisgICAgd29yZDMyIGJ1ZmxlbjsKKyAgICBieXRlICBsYXN0X25vZGU7CisgIH0gYmxha2Uyc19zdGF0ZSA7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgX19ibGFrZTJiX3BhcmFtCisgIHsKKyAgICBieXRlICBkaWdlc3RfbGVuZ3RoOyAvKiAxICovCisgICAgYnl0ZSAga2V5X2xlbmd0aDsgICAgLyogMiAqLworICAgIGJ5dGUgIGZhbm91dDsgICAgICAgIC8qIDMgKi8KKyAgICBieXRlICBkZXB0aDsgICAgICAgICAvKiA0ICovCisgICAgd29yZDMyIGxlYWZfbGVuZ3RoOyAgIC8qIDggKi8KKyAgICB3b3JkNjQgbm9kZV9vZmZzZXQ7ICAgLyogMTYgKi8KKyAgICBieXRlICBub2RlX2RlcHRoOyAgICAvKiAxNyAqLworICAgIGJ5dGUgIGlubmVyX2xlbmd0aDsgIC8qIDE4ICovCisgICAgYnl0ZSAgcmVzZXJ2ZWRbMTRdOyAgLyogMzIgKi8KKyAgICBieXRlICBzYWx0W0JMQUtFMkJfU0FMVEJZVEVTXTsgLyogNDggKi8KKyAgICBieXRlICBwZXJzb25hbFtCTEFLRTJCX1BFUlNPTkFMQllURVNdOyAgLyogNjQgKi8KKyAgfSBibGFrZTJiX3BhcmFtOworCisgIHR5cGVkZWYgc3RydWN0IEFMSUdONjQgX19ibGFrZTJiX3N0YXRlCisgIHsKKyAgICB3b3JkNjQgaFs4XTsKKyAgICB3b3JkNjQgdFsyXTsKKyAgICB3b3JkNjQgZlsyXTsKKyAgICBieXRlICBidWZbMiAqIEJMQUtFMkJfQkxPQ0tCWVRFU107CisgICAgd29yZDY0IGJ1ZmxlbjsKKyAgICBieXRlICBsYXN0X25vZGU7CisgIH0gYmxha2UyYl9zdGF0ZTsKKworICB0eXBlZGVmIHN0cnVjdCBfX2JsYWtlMnNwX3N0YXRlCisgIHsKKyAgICBibGFrZTJzX3N0YXRlIFNbOF1bMV07CisgICAgYmxha2Uyc19zdGF0ZSBSWzFdOworICAgIGJ5dGUgYnVmWzggKiBCTEFLRTJTX0JMT0NLQllURVNdOworICAgIHdvcmQzMiBidWZsZW47CisgIH0gYmxha2Uyc3Bfc3RhdGU7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgX19ibGFrZTJicF9zdGF0ZQorICB7CisgICAgYmxha2UyYl9zdGF0ZSBTWzRdWzFdOworICAgIGJsYWtlMmJfc3RhdGUgUlsxXTsKKyAgICBieXRlIGJ1Zls0ICogQkxBS0UyQl9CTE9DS0JZVEVTXTsKKyAgICB3b3JkNjQgYnVmbGVuOworICB9IGJsYWtlMmJwX3N0YXRlOworI3ByYWdtYSBwYWNrKHBvcCkKKworICAvKiBTdHJlYW1pbmcgQVBJICovCisgIGludCBibGFrZTJzX2luaXQoIGJsYWtlMnNfc3RhdGUgKlMsIGNvbnN0IGJ5dGUgb3V0bGVuICk7CisgIGludCBibGFrZTJzX2luaXRfa2V5KCBibGFrZTJzX3N0YXRlICpTLCBjb25zdCBieXRlIG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBjb25zdCBieXRlIGtleWxlbiApOworICBpbnQgYmxha2Uyc19pbml0X3BhcmFtKCBibGFrZTJzX3N0YXRlICpTLCBjb25zdCBibGFrZTJzX3BhcmFtICpQICk7CisgIGludCBibGFrZTJzX3VwZGF0ZSggYmxha2Uyc19zdGF0ZSAqUywgY29uc3QgYnl0ZSAqaW4sIHdvcmQzMiBpbmxlbiApOworICBpbnQgYmxha2Uyc19maW5hbCggYmxha2Uyc19zdGF0ZSAqUywgYnl0ZSAqb3V0LCBieXRlIG91dGxlbiApOworCisgIGludCBibGFrZTJiX2luaXQoIGJsYWtlMmJfc3RhdGUgKlMsIGNvbnN0IGJ5dGUgb3V0bGVuICk7CisgIGludCBibGFrZTJiX2luaXRfa2V5KCBibGFrZTJiX3N0YXRlICpTLCBjb25zdCBieXRlIG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBjb25zdCBieXRlIGtleWxlbiApOworICBpbnQgYmxha2UyYl9pbml0X3BhcmFtKCBibGFrZTJiX3N0YXRlICpTLCBjb25zdCBibGFrZTJiX3BhcmFtICpQICk7CisgIGludCBibGFrZTJiX3VwZGF0ZSggYmxha2UyYl9zdGF0ZSAqUywgY29uc3QgYnl0ZSAqaW4sIHdvcmQ2NCBpbmxlbiApOworICBpbnQgYmxha2UyYl9maW5hbCggYmxha2UyYl9zdGF0ZSAqUywgYnl0ZSAqb3V0LCBieXRlIG91dGxlbiApOworCisgIGludCBibGFrZTJzcF9pbml0KCBibGFrZTJzcF9zdGF0ZSAqUywgY29uc3QgYnl0ZSBvdXRsZW4gKTsKKyAgaW50IGJsYWtlMnNwX2luaXRfa2V5KCBibGFrZTJzcF9zdGF0ZSAqUywgY29uc3QgYnl0ZSBvdXRsZW4sIGNvbnN0IHZvaWQgKmtleSwgY29uc3QgYnl0ZSBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMnNwX3VwZGF0ZSggYmxha2Uyc3Bfc3RhdGUgKlMsIGNvbnN0IGJ5dGUgKmluLCB3b3JkMzIgaW5sZW4gKTsKKyAgaW50IGJsYWtlMnNwX2ZpbmFsKCBibGFrZTJzcF9zdGF0ZSAqUywgYnl0ZSAqb3V0LCBieXRlIG91dGxlbiApOworCisgIGludCBibGFrZTJicF9pbml0KCBibGFrZTJicF9zdGF0ZSAqUywgY29uc3QgYnl0ZSBvdXRsZW4gKTsKKyAgaW50IGJsYWtlMmJwX2luaXRfa2V5KCBibGFrZTJicF9zdGF0ZSAqUywgY29uc3QgYnl0ZSBvdXRsZW4sIGNvbnN0IHZvaWQgKmtleSwgY29uc3QgYnl0ZSBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMmJwX3VwZGF0ZSggYmxha2UyYnBfc3RhdGUgKlMsIGNvbnN0IGJ5dGUgKmluLCB3b3JkNjQgaW5sZW4gKTsKKyAgaW50IGJsYWtlMmJwX2ZpbmFsKCBibGFrZTJicF9zdGF0ZSAqUywgYnl0ZSAqb3V0LCBieXRlIG91dGxlbiApOworCisgIC8qIFNpbXBsZSBBUEkgKi8KKyAgaW50IGJsYWtlMnMoIGJ5dGUgKm91dCwgY29uc3Qgdm9pZCAqaW4sIGNvbnN0IHZvaWQgKmtleSwgY29uc3QgYnl0ZSBvdXRsZW4sIGNvbnN0IHdvcmQzMiBpbmxlbiwgYnl0ZSBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMmIoIGJ5dGUgKm91dCwgY29uc3Qgdm9pZCAqaW4sIGNvbnN0IHZvaWQgKmtleSwgY29uc3QgYnl0ZSBvdXRsZW4sIGNvbnN0IHdvcmQ2NCBpbmxlbiwgYnl0ZSBrZXlsZW4gKTsKKworICBpbnQgYmxha2Uyc3AoIGJ5dGUgKm91dCwgY29uc3Qgdm9pZCAqaW4sIGNvbnN0IHZvaWQgKmtleSwgY29uc3QgYnl0ZSBvdXRsZW4sIGNvbnN0IHdvcmQzMiBpbmxlbiwgYnl0ZSBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMmJwKCBieXRlICpvdXQsIGNvbnN0IHZvaWQgKmluLCBjb25zdCB2b2lkICprZXksIGNvbnN0IGJ5dGUgb3V0bGVuLCBjb25zdCB3b3JkNjQgaW5sZW4sIGJ5dGUga2V5bGVuICk7CisKKyAgc3RhdGljIFdDX0lOTElORSBpbnQgYmxha2UyKCBieXRlICpvdXQsIGNvbnN0IHZvaWQgKmluLCBjb25zdCB2b2lkICprZXksIGNvbnN0IGJ5dGUgb3V0bGVuLCBjb25zdCB3b3JkNjQgaW5sZW4sIGJ5dGUga2V5bGVuICkKKyAgeworICAgIHJldHVybiBibGFrZTJiKCBvdXQsIGluLCBrZXksIG91dGxlbiwgaW5sZW4sIGtleWxlbiApOworICB9CisKKworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyAgICB9CisjZW5kaWYKKworI2VuZGlmICAvKiBXT0xGQ1JZUFRfQkxBS0UyX0lOVF9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9ibGFrZTIuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9ibGFrZTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGNiMDY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2JsYWtlMi5oCkBAIC0wLDAgKzEsOTggQEAKKy8qIGJsYWtlMi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvYmxha2UyLmgKKyovCisKKyNpZm5kZWYgV09MRl9DUllQVF9CTEFLRTJfSAorI2RlZmluZSBXT0xGX0NSWVBUX0JMQUtFMl9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaWYgZGVmaW5lZChIQVZFX0JMQUtFMikgfHwgZGVmaW5lZChIQVZFX0JMQUtFMlMpCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9ibGFrZTItaW50Lmg+CisKKy8qIGNhbGwgb2xkIGZ1bmN0aW9ucyBpZiB1c2luZyBmaXBzIGZvciB0aGUgc2FrZSBvZiBobWFjIEB3Y19maXBzICovCisjaWZkZWYgSEFWRV9GSVBTCisgICAgLyogU2luY2UgaG1hYyBjYW4gY2FsbCBibGFrZSBmdW5jdGlvbnMgcHJvdmlkZSBvcmlnaW5hbCBjYWxscyAqLworICAgICNkZWZpbmUgd2NfSW5pdEJsYWtlMmIgICBJbml0Qmxha2UyYgorICAgICNkZWZpbmUgd2NfQmxha2UyYlVwZGF0ZSBCbGFrZTJiVXBkYXRlCisgICAgI2RlZmluZSB3Y19CbGFrZTJiRmluYWwgIEJsYWtlMmJGaW5hbAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGluIGJ5dGVzLCB2YXJpYWJsZSBkaWdlc3Qgc2l6ZSB1cCB0byA1MTIgYml0cyAoNjQgYnl0ZXMpICovCitlbnVtIHsKKyNpZmRlZiBIQVZFX0JMQUtFMkIKKyAgICBCTEFLRTJCX0lEICA9IFdDX0hBU0hfVFlQRV9CTEFLRTJCLAorICAgIEJMQUtFMkJfMjU2ID0gMzIsICAvKiAyNTYgYml0IHR5cGUsIFNTTCBkZWZhdWx0ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0JMQUtFMlMKKyAgICBCTEFLRTJTX0lEICA9IFdDX0hBU0hfVFlQRV9CTEFLRTJTLAorICAgIEJMQUtFMlNfMjU2ID0gMzIgICAvKiAyNTYgYml0IHR5cGUgKi8KKyNlbmRpZgorfTsKKworCisjaWZkZWYgSEFWRV9CTEFLRTJCCisvKiBCTEFLRTJiIGRpZ2VzdCAqLwordHlwZWRlZiBzdHJ1Y3QgQmxha2UyYiB7CisgICAgYmxha2UyYl9zdGF0ZSBTWzFdOyAgICAgICAgIC8qIG91ciBzdGF0ZSAqLworICAgIHdvcmQzMiAgICAgICAgZGlnZXN0U3o7ICAgICAvKiBkaWdlc3Qgc2l6ZSB1c2VkIG9uIGluaXQgKi8KK30gQmxha2UyYjsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9CTEFLRTJTCisvKiBCTEFLRTJzIGRpZ2VzdCAqLwordHlwZWRlZiBzdHJ1Y3QgQmxha2UycyB7CisgICAgYmxha2Uyc19zdGF0ZSBTWzFdOyAgICAgICAgIC8qIG91ciBzdGF0ZSAqLworICAgIHdvcmQzMiAgICAgICAgZGlnZXN0U3o7ICAgICAvKiBkaWdlc3Qgc2l6ZSB1c2VkIG9uIGluaXQgKi8KK30gQmxha2UyczsKKyNlbmRpZgorCisKKyNpZmRlZiBIQVZFX0JMQUtFMkIKK1dPTEZTU0xfQVBJIGludCB3Y19Jbml0Qmxha2UyYihCbGFrZTJiKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19Jbml0Qmxha2UyYl9XaXRoS2V5KEJsYWtlMmIqLCB3b3JkMzIsIGNvbnN0IGJ5dGUgKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19CbGFrZTJiVXBkYXRlKEJsYWtlMmIqLCBjb25zdCBieXRlKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19CbGFrZTJiRmluYWwoQmxha2UyYiosIGJ5dGUqLCB3b3JkMzIpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0JMQUtFMlMKK1dPTEZTU0xfQVBJIGludCB3Y19Jbml0Qmxha2UycyhCbGFrZTJzKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19Jbml0Qmxha2Uyc19XaXRoS2V5KEJsYWtlMnMqLCB3b3JkMzIsIGNvbnN0IGJ5dGUgKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19CbGFrZTJzVXBkYXRlKEJsYWtlMnMqLCBjb25zdCBieXRlKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19CbGFrZTJzRmluYWwoQmxha2UycyosIGJ5dGUqLCB3b3JkMzIpOworI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfQorI2VuZGlmCisKKyNlbmRpZiAgLyogSEFWRV9CTEFLRTIgfHwgSEFWRV9CTEFLRTJTICovCisjZW5kaWYgIC8qIFdPTEZfQ1JZUFRfQkxBS0UyX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2NhbWVsbGlhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvY2FtZWxsaWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWYwMjcwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2NhbWVsbGlhLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qIGNhbWVsbGlhLmggdmVyIDEuMi4wCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcKKyAqIE5UVCAoTmlwcG9uIFRlbGVncmFwaCBhbmQgVGVsZXBob25lIENvcnBvcmF0aW9uKSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgYXMKKyAqICAgdGhlIGZpcnN0IGxpbmVzIG9mIHRoaXMgZmlsZSB1bm1vZGlmaWVkLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTlRUIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBOVFQgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogY2FtZWxsaWEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L2NhbWVsbGlhLmgKKyovCisKKworI2lmbmRlZiBXT0xGX0NSWVBUX0NBTUVMTElBX0gKKyNkZWZpbmUgV09MRl9DUllQVF9DQU1FTExJQV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgSEFWRV9DQU1FTExJQQorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCitlbnVtIHsKKyAgICBDQU1FTExJQV9CTE9DS19TSVpFID0gMTYKK307CisKKyNkZWZpbmUgQ0FNRUxMSUFfVEFCTEVfQllURV9MRU4gMjcyCisjZGVmaW5lIENBTUVMTElBX1RBQkxFX1dPUkRfTEVOIChDQU1FTExJQV9UQUJMRV9CWVRFX0xFTiAvIHNpemVvZih3b3JkMzIpKQorCit0eXBlZGVmIHdvcmQzMiBLRVlfVEFCTEVfVFlQRVtDQU1FTExJQV9UQUJMRV9XT1JEX0xFTl07CisKK3R5cGVkZWYgc3RydWN0IENhbWVsbGlhIHsKKyAgICB3b3JkMzIga2V5U3o7CisgICAgS0VZX1RBQkxFX1RZUEUga2V5OworICAgIHdvcmQzMiByZWdbQ0FNRUxMSUFfQkxPQ0tfU0laRSAvIHNpemVvZih3b3JkMzIpXTsgLyogZm9yIENCQyBtb2RlICovCisgICAgd29yZDMyIHRtcFtDQU1FTExJQV9CTE9DS19TSVpFIC8gc2l6ZW9mKHdvcmQzMildOyAvKiBmb3IgQ0JDIG1vZGUgKi8KK30gQ2FtZWxsaWE7CisKKworV09MRlNTTF9BUEkgaW50ICB3Y19DYW1lbGxpYVNldEtleShDYW1lbGxpYSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBsZW4sIGNvbnN0IGJ5dGUqIGl2KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfQ2FtZWxsaWFTZXRJVihDYW1lbGxpYSogY2FtLCBjb25zdCBieXRlKiBpdik7CitXT0xGU1NMX0FQSSBpbnQgIHdjX0NhbWVsbGlhRW5jcnlwdERpcmVjdChDYW1lbGxpYSogY2FtLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4pOworV09MRlNTTF9BUEkgaW50ICB3Y19DYW1lbGxpYURlY3J5cHREaXJlY3QoQ2FtZWxsaWEqIGNhbSwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluKTsKK1dPTEZTU0xfQVBJIGludCB3Y19DYW1lbGxpYUNiY0VuY3J5cHQoQ2FtZWxsaWEqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG91dCwgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfQ2FtZWxsaWFDYmNEZWNyeXB0KENhbWVsbGlhKiBjYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXQsIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3opOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX0NBTUVMTElBICovCisjZW5kaWYgLyogV09MRl9DUllQVF9DQU1FTExJQV9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jaGFjaGEuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jaGFjaGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg0YzViCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2NoYWNoYS5oCkBAIC0wLDAgKzEsMTE1IEBACisvKiBjaGFjaGEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisvKgorCitERVNDUklQVElPTgorVGhpcyBsaWJyYXJ5IGNvbnRhaW5zIGltcGxlbWVudGF0aW9uIGZvciB0aGUgQ2hhQ2hhMjAgc3RyZWFtIGNpcGhlci4KKworKi8KKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L2NoYWNoYS5oCisqLworCisKKyNpZm5kZWYgV09MRl9DUllQVF9DSEFDSEFfSAorI2RlZmluZSBXT0xGX0NSWVBUX0NIQUNIQV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgSEFWRV9DSEFDSEEKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKK0luaXRpYWxpemF0aW9uIHZlY3RvciBzdGFydHMgYXQgMTMgd2l0aCB6ZXJvIGJlaW5nIHRoZSBpbmRleCBvcmlnaW4gb2YgYSBtYXRyaXguCitCbG9jayBjb3VudGVyIGlzIGxvY2F0ZWQgYXQgaW5kZXggMTIuCisgIDAgICAxICAgMiAgIDMKKyAgNCAgIDUgICA2ICAgNworICA4ICAgOSAgIDEwICAxMQorICAxMiAgMTMgIDE0ICAxNQorKi8KKyNkZWZpbmUgQ0hBQ0hBX01BVFJJWF9DTlRfSVYgMTIKKworLyogU2l6ZSBvZiB0aGUgSVYgKi8KKyNkZWZpbmUgQ0hBQ0hBX0lWX1dPUkRTICAgIDMKKworLyogU2l6ZSBvZiBJViBpbiBieXRlcyovCisjZGVmaW5lIENIQUNIQV9JVl9CWVRFUyAxMgorI2lmZGVmIEhBVkVfWENIQUNIQQorI2RlZmluZSBYQ0hBQ0hBX05PTkNFX0JZVEVTIDI0CisjZW5kaWYKKworLyogU2l6ZSBvZiBDaGFDaGEgY2h1bmtzICovCisjZGVmaW5lIENIQUNIQV9DSFVOS19XT1JEUyAxNgorI2RlZmluZSBDSEFDSEFfQ0hVTktfQllURVMgKENIQUNIQV9DSFVOS19XT1JEUyAqIHNpemVvZih3b3JkMzIpKQorCisjaWZkZWYgV09MRlNTTF9YODZfNjRfQlVJTEQKKyNpZiBkZWZpbmVkKFVTRV9JTlRFTF9TUEVFRFVQKSAmJiAhZGVmaW5lZChOT19DSEFDSEFfQVNNKQorICAgICNkZWZpbmUgVVNFX0lOVEVMX0NIQUNIQV9TUEVFRFVQCisgICAgI2RlZmluZSBIQVZFX0lOVEVMX0FWWDEKKyNlbmRpZgorI2VuZGlmCisKK2VudW0geworCUNIQUNIQV9FTkNfVFlQRSA9IFdDX0NJUEhFUl9DSEFDSEEsICAgIC8qIGNpcGhlciB1bmlxdWUgdHlwZSAqLworICAgIENIQUNIQV9NQVhfS0VZX1NaID0gMzIsCit9OworCit0eXBlZGVmIHN0cnVjdCBDaGFDaGEgeworICAgIHdvcmQzMiBYW0NIQUNIQV9DSFVOS19XT1JEU107ICAgICAgICAgICAvKiBzdGF0ZSBvZiBjaXBoZXIgKi8KKyNpZmRlZiBIQVZFX0lOVEVMX0FWWDEKKyAgICAvKiB2cHNodWZkIHJlYWRzIDE2IGJ5dGVzIGJ1dCB3ZSBvbmx5IHVzZSBib3R0b20gNC4gKi8KKyAgICBieXRlIGV4dHJhWzEyXTsKKyNlbmRpZgorICAgIHdvcmQzMiBsZWZ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgbGVmdG92ZXIgKi8KKyNpZiBkZWZpbmVkKFVTRV9JTlRFTF9DSEFDSEFfU1BFRURVUCkgfHwgZGVmaW5lZChXT0xGU1NMX0FSTUFTTSkKKyAgICB3b3JkMzIgb3ZlcltDSEFDSEFfQ0hVTktfV09SRFNdOworI2VuZGlmCit9IENoYUNoYTsKKworLyoqCisgICogSVYobm9uY2UpIGNoYW5nZXMgd2l0aCBlYWNoIHJlY29yZAorICAqIGNvdW50ZXIgaXMgZm9yIHdoYXQgdmFsdWUgdGhlIGJsb2NrIGNvdW50ZXIgc2hvdWxkIHN0YXJ0IC4uLiB1c3VhbGx5IDAKKyAgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19DaGFjaGFfU2V0SVYoQ2hhQ2hhKiBjdHgsIGNvbnN0IGJ5dGUqIGluSXYsIHdvcmQzMiBjb3VudGVyKTsKKworV09MRlNTTF9BUEkgaW50IHdjX0NoYWNoYV9Qcm9jZXNzKENoYUNoYSogY3R4LCBieXRlKiBjaXBoZXIsIGNvbnN0IGJ5dGUqIHBsYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG1zZ2xlbik7CisKK1dPTEZTU0xfTE9DQUwgdm9pZCB3Y19DaGFjaGFfcHVyZ2VfY3VycmVudF9ibG9jayhDaGFDaGEqIGN0eCk7CisKK1dPTEZTU0xfQVBJIGludCB3Y19DaGFjaGFfU2V0S2V5KENoYUNoYSogY3R4LCBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeik7CisKKyNpZmRlZiBIQVZFX1hDSEFDSEEKK1dPTEZTU0xfQVBJIGludCB3Y19YQ2hhY2hhX1NldEtleShDaGFDaGEgKmN0eCwgY29uc3QgYnl0ZSAqa2V5LCB3b3JkMzIga2V5U3osCisJCQkJICBjb25zdCBieXRlICpub25jZSwgd29yZDMyIG5vbmNlU3osCisJCQkJICB3b3JkMzIgY291bnRlcik7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIEhBVkVfQ0hBQ0hBICovCisjZW5kaWYgLyogV09MRl9DUllQVF9DSEFDSEFfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvY2hhY2hhMjBfcG9seTEzMDUuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jaGFjaGEyMF9wb2x5MTMwNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NjMxYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvY2hhY2hhMjBfcG9seTEzMDUuaApAQCAtMCwwICsxLDE1NyBAQAorLyogY2hhY2hhMjBfcG9seTEzMDUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisvKgorCitERVNDUklQVElPTgorVGhpcyBsaWJyYXJ5IGNvbnRhaW5zIGltcGxlbWVudGF0aW9uIGZvciB0aGUgQ2hhQ2hhMjAgc3RyZWFtIGNpcGhlciBhbmQKK3RoZSBQb2x5MTMwNSBhdXRoZW50aWNhdG9yLCBib3RoIGFzIGFzIGNvbWJpbmVkLW1vZGUsCitvciBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBZGRpdGlvbmFsIERhdGEgKEFFQUQpIGFsZ29yaXRobS4KKworKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvY2hhY2hhMjBfcG9seTEzMDUuaAorKi8KKworI2lmbmRlZiBXT0xGX0NSWVBUX0NIQUNIQTIwX1BPTFkxMzA1X0gKKyNkZWZpbmUgV09MRl9DUllQVF9DSEFDSEEyMF9QT0xZMTMwNV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2NoYWNoYS5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvbHkxMzA1Lmg+CisKKyNpZiBkZWZpbmVkKEhBVkVfQ0hBQ0hBKSAmJiBkZWZpbmVkKEhBVkVfUE9MWTEzMDUpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgQ0hBQ0hBMjBfUE9MWTEzMDVfQUVBRF9LRVlTSVpFICAgICAgMzIKKyNkZWZpbmUgQ0hBQ0hBMjBfUE9MWTEzMDVfQUVBRF9JVl9TSVpFICAgICAgMTIKKyNkZWZpbmUgQ0hBQ0hBMjBfUE9MWTEzMDVfQUVBRF9BVVRIVEFHX1NJWkUgMTYKKyNkZWZpbmUgQ0hBQ0hBMjBfUE9MWTEzMDVfTUFYICAgICAgICAgICAgICAgNDI5NDk2NzI5NVUKKyNkZWZpbmUgWENIQUNIQTIwX1BPTFkxMzA1X0FFQURfTk9OQ0VfU0laRSAgMjQKKworZW51bSB7CisgICAgQ0hBQ0hBMjBfUE9MWV8xMzA1X0VOQ19UWVBFID0gOCwgICAgLyogY2lwaGVyIHVuaXF1ZSB0eXBlICovCisKKyAgICAvKiBBRUFEIENpcGhlciBEaXJlY3Rpb24gKi8KKyAgICBDSEFDSEEyMF9QT0xZMTMwNV9BRUFEX0RFQ1JZUFQgPSAwLAorICAgIENIQUNIQTIwX1BPTFkxMzA1X0FFQURfRU5DUllQVCA9IDEsCisKKyAgICAvKiBBRUFEIFN0YXRlICovCisgICAgQ0hBQ0hBMjBfUE9MWTEzMDVfU1RBVEVfSU5JVCA9IDAsCisgICAgQ0hBQ0hBMjBfUE9MWTEzMDVfU1RBVEVfUkVBRFkgPSAxLAorICAgIENIQUNIQTIwX1BPTFkxMzA1X1NUQVRFX0FBRCA9IDIsCisgICAgQ0hBQ0hBMjBfUE9MWTEzMDVfU1RBVEVfREFUQSA9IDMsCit9OworCit0eXBlZGVmIHN0cnVjdCBDaGFDaGFQb2x5X0FlYWQgeworICAgIENoYUNoYSAgIGNoYWNoYTsKKyAgICBQb2x5MTMwNSBwb2x5OworCisgICAgd29yZDMyICAgYWFkTGVuOworICAgIHdvcmQzMiAgIGRhdGFMZW47CisKKyAgICBieXRlICAgICBzdGF0ZTsKKyAgICBieXRlICAgICBpc0VuY3J5cHQ6MTsKK30gQ2hhQ2hhUG9seV9BZWFkOworCisKKy8qCisgKiBUaGUgSVYgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgOTYgYml0cyB0byBnaXZlIHRoZSBtb3N0IGZsZXhpYmlsaXR5LgorICoKKyAqIFNvbWUgcHJvdG9jb2xzIG1heSBoYXZlIHVuaXF1ZSBwZXItaW52b2NhdGlvbiBpbnB1dHMgdGhhdCBhcmUgbm90CisgKiA5Ni1iaXQgaW4gbGVuZ3RoLiBGb3IgZXhhbXBsZSwgSVBzZWMgbWF5IHNwZWNpZnkgYSA2NC1iaXQgbm9uY2UuIEluCisgKiBzdWNoIGEgY2FzZSwgaXQgaXMgdXAgdG8gdGhlIHByb3RvY29sIGRvY3VtZW50IHRvIGRlZmluZSBob3cgdG8KKyAqIHRyYW5zZm9ybSB0aGUgcHJvdG9jb2wgbm9uY2UgaW50byBhIDk2LWJpdCBub25jZSwgZm9yIGV4YW1wbGUgYnkKKyAqIGNvbmNhdGVuYXRpbmcgYSBjb25zdGFudCB2YWx1ZS4KKyAqLworCitXT0xGU1NMX0FQSQoraW50IHdjX0NoYUNoYTIwUG9seTEzMDVfRW5jcnlwdCgKKyAgICAgICAgICAgICAgICBjb25zdCBieXRlIGluS2V5W0NIQUNIQTIwX1BPTFkxMzA1X0FFQURfS0VZU0laRV0sCisgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSBpbklWW0NIQUNIQTIwX1BPTFkxMzA1X0FFQURfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW5BQUQsIGNvbnN0IHdvcmQzMiBpbkFBRExlbiwKKyAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpblBsYWludGV4dCwgY29uc3Qgd29yZDMyIGluUGxhaW50ZXh0TGVuLAorICAgICAgICAgICAgICAgIGJ5dGUqIG91dENpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgYnl0ZSBvdXRBdXRoVGFnW0NIQUNIQTIwX1BPTFkxMzA1X0FFQURfQVVUSFRBR19TSVpFXSk7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfQ2hhQ2hhMjBQb2x5MTMwNV9EZWNyeXB0KAorICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUgaW5LZXlbQ0hBQ0hBMjBfUE9MWTEzMDVfQUVBRF9LRVlTSVpFXSwKKyAgICAgICAgICAgICAgICBjb25zdCBieXRlIGluSVZbQ0hBQ0hBMjBfUE9MWTEzMDVfQUVBRF9JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbkFBRCwgY29uc3Qgd29yZDMyIGluQUFETGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluQ2lwaGVydGV4dCwgY29uc3Qgd29yZDMyIGluQ2lwaGVydGV4dExlbiwKKyAgICAgICAgICAgICAgICBjb25zdCBieXRlIGluQXV0aFRhZ1tDSEFDSEEyMF9QT0xZMTMwNV9BRUFEX0FVVEhUQUdfU0laRV0sCisgICAgICAgICAgICAgICAgYnl0ZSogb3V0UGxhaW50ZXh0KTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19DaGFDaGEyMFBvbHkxMzA1X0NoZWNrVGFnKAorICAgIGNvbnN0IGJ5dGUgYXV0aFRhZ1tDSEFDSEEyMF9QT0xZMTMwNV9BRUFEX0FVVEhUQUdfU0laRV0sCisgICAgY29uc3QgYnl0ZSBhdXRoVGFnQ2hrW0NIQUNIQTIwX1BPTFkxMzA1X0FFQURfQVVUSFRBR19TSVpFXSk7CisKKworCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBBRUFELCB3aGljaCBpbmNsdWRlcyBzdXBwb3J0IGZvciBhZGRpbmcKKyAgICBkYXRhLCB0aGVuIGZpbmFsIGNhbGN1bGF0aW9uIG9mIGF1dGhlbnRpY2F0aW9uIHRhZyAqLworV09MRlNTTF9BUEkgaW50IHdjX0NoYUNoYTIwUG9seTEzMDVfSW5pdChDaGFDaGFQb2x5X0FlYWQqIGFlYWQsCisgICAgY29uc3QgYnl0ZSBpbktleVtDSEFDSEEyMF9QT0xZMTMwNV9BRUFEX0tFWVNJWkVdLAorICAgIGNvbnN0IGJ5dGUgaW5JVltDSEFDSEEyMF9QT0xZMTMwNV9BRUFEX0lWX1NJWkVdLAorICAgIGludCBpc0VuY3J5cHQpOworV09MRlNTTF9BUEkgaW50IHdjX0NoYUNoYTIwUG9seTEzMDVfVXBkYXRlQWFkKENoYUNoYVBvbHlfQWVhZCogYWVhZCwKKyAgICBjb25zdCBieXRlKiBpbkFBRCwgd29yZDMyIGluQUFETGVuKTsKK1dPTEZTU0xfQVBJIGludCB3Y19DaGFDaGEyMFBvbHkxMzA1X1VwZGF0ZURhdGEoQ2hhQ2hhUG9seV9BZWFkKiBhZWFkLAorICAgIGNvbnN0IGJ5dGUqIGluRGF0YSwgYnl0ZSogb3V0RGF0YSwgd29yZDMyIGRhdGFMZW4pOworV09MRlNTTF9BUEkgaW50IHdjX0NoYUNoYTIwUG9seTEzMDVfRmluYWwoQ2hhQ2hhUG9seV9BZWFkKiBhZWFkLAorICAgIGJ5dGUgb3V0QXV0aFRhZ1tDSEFDSEEyMF9QT0xZMTMwNV9BRUFEX0FVVEhUQUdfU0laRV0pOworCisjaWZkZWYgSEFWRV9YQ0hBQ0hBCisKK1dPTEZTU0xfQVBJIGludCB3Y19YQ2hhQ2hhMjBQb2x5MTMwNV9Jbml0KAorICAgIENoYUNoYVBvbHlfQWVhZCogYWVhZCwKKyAgICBjb25zdCBieXRlICphZCwgd29yZDMyIGFkX2xlbiwKKyAgICBjb25zdCBieXRlICppbktleSwgd29yZDMyIGluS2V5U3osCisgICAgY29uc3QgYnl0ZSAqaW5JViwgd29yZDMyIGluSVZTeiwKKyAgICBpbnQgaXNFbmNyeXB0KTsKKworV09MRlNTTF9BUEkgaW50IHdjX1hDaGFDaGEyMFBvbHkxMzA1X0VuY3J5cHQoCisgICAgYnl0ZSAqZHN0LCBjb25zdCBzaXplX3QgZHN0X3NwYWNlLAorICAgIGNvbnN0IGJ5dGUgKnNyYywgY29uc3Qgc2l6ZV90IHNyY19sZW4sCisgICAgY29uc3QgYnl0ZSAqYWQsIGNvbnN0IHNpemVfdCBhZF9sZW4sCisgICAgY29uc3QgYnl0ZSAqbm9uY2UsIGNvbnN0IHNpemVfdCBub25jZV9sZW4sCisgICAgY29uc3QgYnl0ZSAqa2V5LCBjb25zdCBzaXplX3Qga2V5X2xlbik7CisKK1dPTEZTU0xfQVBJIGludCB3Y19YQ2hhQ2hhMjBQb2x5MTMwNV9EZWNyeXB0KAorICAgIGJ5dGUgKmRzdCwgY29uc3Qgc2l6ZV90IGRzdF9zcGFjZSwKKyAgICBjb25zdCBieXRlICpzcmMsIGNvbnN0IHNpemVfdCBzcmNfbGVuLAorICAgIGNvbnN0IGJ5dGUgKmFkLCBjb25zdCBzaXplX3QgYWRfbGVuLAorICAgIGNvbnN0IGJ5dGUgKm5vbmNlLCBjb25zdCBzaXplX3Qgbm9uY2VfbGVuLAorICAgIGNvbnN0IGJ5dGUgKmtleSwgY29uc3Qgc2l6ZV90IGtleV9sZW4pOworCisjZW5kaWYgLyogSEFWRV9YQ0hBQ0hBICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX0NIQUNIQSAmJiBIQVZFX1BPTFkxMzA1ICovCisjZW5kaWYgLyogV09MRl9DUllQVF9DSEFDSEEyMF9QT0xZMTMwNV9IICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvY21hYy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2NtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTE5YWY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2NtYWMuaApAQCAtMCwwICsxLDExMyBAQAorLyogY21hYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfQ01BQ19ICisjZGVmaW5lIFdPTEZfQ1JZUFRfQ01BQ19ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2Flcy5oPgorCisjaWYgIWRlZmluZWQoTk9fQUVTKSAmJiBkZWZpbmVkKFdPTEZTU0xfQ01BQykKKworI2lmIGRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgJiYgKEhBVkVfRklQU19WRVJTSU9OID49IDIpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ZpcHMuaD4KKyNlbmRpZiAvKiBIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGF2b2lkIHJlZGVmaW5pdGlvbiBvZiBzdHJ1Y3RzICovCisjaWYgIWRlZmluZWQoSEFWRV9GSVBTKSB8fCBcCisgICAgKGRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pICYmIChIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyKSkKKworI2lmbmRlZiBXQ19DTUFDX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IENtYWMgQ21hYzsKKyAgICAjZGVmaW5lIFdDX0NNQUNfVFlQRV9ERUZJTkVECisjZW5kaWYKK3N0cnVjdCBDbWFjIHsKKyAgICBBZXMgYWVzOworICAgIGJ5dGUgYnVmZmVyW0FFU19CTE9DS19TSVpFXTsgLyogcGFydGlhbGx5IHN0b3JlZCBibG9jayAqLworICAgIGJ5dGUgZGlnZXN0W0FFU19CTE9DS19TSVpFXTsgLyogcnVubmluZyBkaWdlc3QgKi8KKyAgICBieXRlIGsxW0FFU19CTE9DS19TSVpFXTsKKyAgICBieXRlIGsyW0FFU19CTE9DS19TSVpFXTsKKyAgICB3b3JkMzIgYnVmZmVyU3o7CisgICAgd29yZDMyIHRvdGFsU3o7CisjaWZkZWYgV09MRl9DUllQVE9fQ0IKKyAgICBpbnQgZGV2SWQ7CisgICAgdm9pZCogZGV2Q3R4OworICAgICNpZmRlZiBXT0xGU1NMX1FOWF9DQUFNCisgICAgYnl0ZSBjdHhbMzJdOyAvKiBob2xkIHN0YXRlIGZvciBzYXZlIGFuZCByZXR1cm4gKi8KKyAgICB3b3JkMzIgYmxhY2tLZXk7CisgICAgd29yZDMyIGtleWxlbjsKKyAgICBieXRlICAgaW5pdGlhbGl6ZWQ7CisgICAgI2VuZGlmCisjZW5kaWYKK307CisKKworCit0eXBlZGVmIGVudW0gQ21hY1R5cGUgeworICAgIFdDX0NNQUNfQUVTID0gMQorfSBDbWFjVHlwZTsKKworI2RlZmluZSBXQ19DTUFDX1RBR19NQVhfU1ogQUVTX0JMT0NLX1NJWkUKKyNkZWZpbmUgV0NfQ01BQ19UQUdfTUlOX1NaIChBRVNfQkxPQ0tfU0laRS80KQorCisjZW5kaWYgLyogSEFWRV9GSVBTICovCisKK1dPTEZTU0xfQVBJCitpbnQgd2NfSW5pdENtYWMoQ21hYyogY21hYywKKyAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwKKyAgICAgICAgICAgICAgICBpbnQgdHlwZSwgdm9pZCogdW51c2VkKTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19Jbml0Q21hY19leChDbWFjKiBjbWFjLAorICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGtleVN6LAorICAgICAgICAgICAgICAgIGludCB0eXBlLCB2b2lkKiB1bnVzZWQsIHZvaWQqIGhlYXAsIGludCBkZXZJZCk7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfQ21hY1VwZGF0ZShDbWFjKiBjbWFjLAorICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpblN6KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfQ21hY0ZpbmFsKENtYWMqIGNtYWMsCisgICAgICAgICAgICAgICAgIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRTeik7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfQWVzQ21hY0dlbmVyYXRlKGJ5dGUqIG91dCwgd29yZDMyKiBvdXRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpblN6LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeik7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfQWVzQ21hY1ZlcmlmeShjb25zdCBieXRlKiBjaGVjaywgd29yZDMyIGNoZWNrU3osCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIGluU3osCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKworI2VuZGlmIC8qIE5PX0FFUyAmJiBXT0xGU1NMX0NNQUMgKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0NNQUNfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvY29kaW5nLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvY29kaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjNGM1YgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jb2RpbmcuaApAQCAtMCwwICsxLDkwIEBACisvKiBjb2RpbmcuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L2NvZGluZy5oCisqLworCisjaWZuZGVmIFdPTEZfQ1JZUFRfQ09ESU5HX0gKKyNkZWZpbmUgV09MRl9DUllQVF9DT0RJTkdfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCitXT0xGU1NMX0FQSSBpbnQgQmFzZTY0X0RlY29kZShjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyKiBvdXRMZW4pOworCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFNFU1NJT05fQ0VSVFMpIHx8IGRlZmluZWQoV09MRlNTTF9LRVlfR0VOKSBcCisgICB8fCBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9HRU4pIHx8IGRlZmluZWQoSEFWRV9XRUJTRVJWRVIpIHx8ICFkZWZpbmVkKE5PX0RTQSkKKyAgICAjaWZuZGVmIFdPTEZTU0xfQkFTRTY0X0VOQ09ERQorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQkFTRTY0X0VOQ09ERQorICAgICNlbmRpZgorI2VuZGlmCisKKworI2lmZGVmIFdPTEZTU0xfQkFTRTY0X0VOQ09ERQorICAgIGVudW0gRXNjYXBlZCB7CisgICAgICAgIFdDX1NURF9FTkMgPSAwLCAgICAgICAvKiBub3JtYWwgXG4gbGluZSBlbmRpbmcgZW5jb2RpbmcgKi8KKyAgICAgICAgV0NfRVNDX05MX0VOQywgICAgICAgIC8qIHVzZSBlc2NhcGUgc2VxdWVuY2UgZW5jb2RpbmcgICAqLworICAgICAgICBXQ19OT19OTF9FTkMgICAgICAgICAgLyogbm8gZW5jb2RpbmcgYXQgYWxsICAgICAgICAgICAgICovCisgICAgfTsgLyogRW5jb2RpbmcgdHlwZXMgKi8KKworICAgIC8qIGVuY29kZSBpc24ndCAqLworICAgIFdPTEZTU0xfQVBJCisgICAgaW50IEJhc2U2NF9FbmNvZGUoY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpbkxlbiwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiogb3V0TGVuKTsKKyAgICBXT0xGU1NMX0FQSQorICAgIGludCBCYXNlNjRfRW5jb2RlRXNjKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIqIG91dExlbik7CisgICAgV09MRlNTTF9BUEkKKyAgICBpbnQgQmFzZTY0X0VuY29kZV9Ob05sKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIqIG91dExlbik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBX1g1MDlfU01BTEwpIHx8IFwKKyAgICBkZWZpbmVkKEhBVkVfV0VCU0VSVkVSKSB8fCBkZWZpbmVkKEhBVkVfRklQUykgfHwgXAorICAgIGRlZmluZWQoSEFWRV9FQ0NfQ0RIKSB8fCBkZWZpbmVkKEhBVkVfU0VMRlRFU1QpIHx8IFwKKyAgICBkZWZpbmVkKFdPTEZTU0xfRU5DUllQVEVEX0tFWVMpCisgICAgI2lmbmRlZiBXT0xGU1NMX0JBU0UxNgorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQkFTRTE2CisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfQkFTRTE2CisgICAgV09MRlNTTF9BUEkKKyAgICBpbnQgQmFzZTE2X0RlY29kZShjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiBvdXQsIHdvcmQzMiogb3V0TGVuKTsKKyAgICBXT0xGU1NMX0FQSQorICAgIGludCBCYXNlMTZfRW5jb2RlKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRMZW4pOworI2VuZGlmCisKKyBXT0xGU1NMX0xPQ0FMIGludCBCYXNlNjRfU2tpcE5ld2xpbmUoY29uc3QgYnl0ZSogaW4sIHdvcmQzMiogaW5MZW4sCisgICAgICAgICAgICB3b3JkMzIqIG91dEopOworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogV09MRl9DUllQVF9DT0RJTkdfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvY29tcHJlc3MuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NWYxZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvY29tcHJlc3MuaApAQCAtMCwwICsxLDYwIEBACisvKiBjb21wcmVzcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvY29tcHJlc3MuaAorKi8KKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfQ09NUFJFU1NfSAorI2RlZmluZSBXT0xGX0NSWVBUX0NPTVBSRVNTX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZmRlZiBIQVZFX0xJQloKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisjZGVmaW5lIENPTVBSRVNTX0ZJWEVEIDEKKworI2RlZmluZSBMSUJaX1dJTkJJVFNfR1pJUCAxNgorCisKK1dPTEZTU0xfQVBJIGludCB3Y19Db21wcmVzcyhieXRlKiwgd29yZDMyLCBjb25zdCBieXRlKiwgd29yZDMyLCB3b3JkMzIpOworV09MRlNTTF9BUEkgaW50IHdjX0NvbXByZXNzX2V4KGJ5dGUqIG91dCwgd29yZDMyIG91dFN6LCBjb25zdCBieXRlKiBpbiwKKyAgICB3b3JkMzIgaW5Teiwgd29yZDMyIGZsYWdzLCB3b3JkMzIgd2luZG93Qml0cyk7CitXT0xGU1NMX0FQSSBpbnQgd2NfRGVDb21wcmVzcyhieXRlKiwgd29yZDMyLCBjb25zdCBieXRlKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19EZUNvbXByZXNzX2V4KGJ5dGUqIG91dCwgd29yZDMyIG91dFN6LCBjb25zdCBieXRlKiBpbiwKKyAgICB3b3JkMzIgaW5TeiwgaW50IHdpbmRvd0JpdHMpOworV09MRlNTTF9BUEkgaW50IHdjX0RlQ29tcHJlc3NEeW5hbWljKGJ5dGUqKiBvdXQsIGludCBtYXgsIGludCBtZW1vcnlUeXBlLAorICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIGluU3osIGludCB3aW5kb3dCaXRzLCB2b2lkKiBoZWFwKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworCisjZW5kaWYgLyogSEFWRV9MSUJaICovCisjZW5kaWYgLyogV09MRl9DUllQVF9DT01QUkVTU19IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jcHVpZC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2NwdWlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhNzI1YgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jcHVpZC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qIGNwdWlkLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKworI2lmbmRlZiBXT0xGX0NSWVBUX0NQVUlEX0gKKyNkZWZpbmUgV09MRl9DUllQVF9DUFVJRF9ICisKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIChkZWZpbmVkKFdPTEZTU0xfWDg2XzY0X0JVSUxEKSB8fCBkZWZpbmVkKFVTRV9JTlRFTF9TUEVFRFVQKSB8fCBcCisgICAgZGVmaW5lZChXT0xGU1NMX0FFU05JKSB8fCBkZWZpbmVkKFdPTEZTU0xfU1BfWDg2XzY0X0FTTSkpICYmIFwKKyAgICAhZGVmaW5lZChXT0xGU1NMX05PX0FTTSkKKworICAgICNkZWZpbmUgQ1BVSURfQVZYMSAgIDB4MDAwMQorICAgICNkZWZpbmUgQ1BVSURfQVZYMiAgIDB4MDAwMgorICAgICNkZWZpbmUgQ1BVSURfUkRSQU5EIDB4MDAwNAorICAgICNkZWZpbmUgQ1BVSURfUkRTRUVEIDB4MDAwOAorICAgICNkZWZpbmUgQ1BVSURfQk1JMiAgIDB4MDAxMCAgIC8qIE1VTFgsIFJPUlggKi8KKyAgICAjZGVmaW5lIENQVUlEX0FFU05JICAweDAwMjAKKyAgICAjZGVmaW5lIENQVUlEX0FEWCAgICAweDAwNDAgICAvKiBBRENYLCBBRE9YICovCisgICAgI2RlZmluZSBDUFVJRF9NT1ZCRSAgMHgwMDgwICAgLyogTW92ZSBhbmQgYnl0ZSBzd2FwICovCisKKyAgICAjZGVmaW5lIElTX0lOVEVMX0FWWDEoZikgICAgKChmKSAmIENQVUlEX0FWWDEpCisgICAgI2RlZmluZSBJU19JTlRFTF9BVlgyKGYpICAgICgoZikgJiBDUFVJRF9BVlgyKQorICAgICNkZWZpbmUgSVNfSU5URUxfUkRSQU5EKGYpICAoKGYpICYgQ1BVSURfUkRSQU5EKQorICAgICNkZWZpbmUgSVNfSU5URUxfUkRTRUVEKGYpICAoKGYpICYgQ1BVSURfUkRTRUVEKQorICAgICNkZWZpbmUgSVNfSU5URUxfQk1JMihmKSAgICAoKGYpICYgQ1BVSURfQk1JMikKKyAgICAjZGVmaW5lIElTX0lOVEVMX0FFU05JKGYpICAgKChmKSAmIENQVUlEX0FFU05JKQorICAgICNkZWZpbmUgSVNfSU5URUxfQURYKGYpICAgICAoKGYpICYgQ1BVSURfQURYKQorICAgICNkZWZpbmUgSVNfSU5URUxfTU9WQkUoZikgICAoKGYpICYgQ1BVSURfTU9WQkUpCisKKyAgICB2b2lkIGNwdWlkX3NldF9mbGFncyh2b2lkKTsKKyAgICB3b3JkMzIgY3B1aWRfZ2V0X2ZsYWdzKHZvaWQpOworCisgICAgLyogUHVibGljIEFQSXMgdG8gbW9kaWZ5IGZsYWdzLiAqLworICAgIFdPTEZTU0xfQVBJIHZvaWQgY3B1aWRfc2VsZWN0X2ZsYWdzKHdvcmQzMiBmbGFncyk7CisgICAgV09MRlNTTF9BUEkgdm9pZCBjcHVpZF9zZXRfZmxhZyh3b3JkMzIgZmxhZyk7CisgICAgV09MRlNTTF9BUEkgdm9pZCBjcHVpZF9jbGVhcl9mbGFnKHdvcmQzMiBmbGFnKTsKKworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworCisjZW5kaWYgLyogV09MRl9DUllQVF9DUFVJRF9IICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvY3J5cHRvY2IuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jcnlwdG9jYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTc1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvY3J5cHRvY2IuaApAQCAtMCwwICsxLDQyNSBAQAorLyogY3J5cHRvY2IuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKyNpZm5kZWYgX1dPTEZfQ1JZUFRPX0NCX0hfCisjZGVmaW5lIF9XT0xGX0NSWVBUT19DQl9IXworCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogRGVmaW5lcyB0aGUgQ3J5cHRvIENhbGxiYWNrIGludGVyZmFjZSB2ZXJzaW9uLCBmb3IgY29tcGF0aWJpbGl0eSAqLworLyogSW5jcmVtZW50IHRoaXMgd2hlbiBDcnlwdG8gQ2FsbGJhY2sgaW50ZXJmYWNlIGNoYW5nZXMgYXJlIG1hZGUgKi8KKyNkZWZpbmUgQ1JZUFRPX0NCX1ZFUiAgIDIKKworCisjaWZkZWYgV09MRl9DUllQVE9fQ0IKKworI2lmbmRlZiBOT19SU0EKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcnNhLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0VDQworICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9lY2MuaD4KKyNlbmRpZgorI2lmbmRlZiBOT19BRVMKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYWVzLmg+CisjZW5kaWYKKyNpZm5kZWYgTk9fU0hBCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NoYS5oPgorI2VuZGlmCisjaWZuZGVmIE5PX1NIQTI1NgorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zaGEyNTYuaD4KKyNlbmRpZgorI2lmbmRlZiBOT19ITUFDCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2htYWMuaD4KKyNlbmRpZgorI2lmbmRlZiBXQ19OT19STkcKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcmFuZG9tLmg+CisjZW5kaWYKKyNpZm5kZWYgTk9fREVTMworICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9kZXMzLmg+CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0NNQUMKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvY21hYy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9FRDI1NTE5CisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2VkMjU1MTkuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9jdXJ2ZTI1NTE5Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfU0hBNTEyKSB8fCBkZWZpbmVkKFdPTEZTU0xfU0hBMzg0KQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zaGE1MTIuaD4KKyNlbmRpZgorCisvKiBDcnlwdG8gSW5mb3JtYXRpb24gU3RydWN0dXJlIGZvciBjYWxsYmFja3MgKi8KK3R5cGVkZWYgc3RydWN0IHdjX0NyeXB0b0luZm8geworICAgIGludCBhbGdvX3R5cGU7IC8qIGVudW0gd2NfQWxnb1R5cGUgKi8KKyNpZiAhZGVmaW5lZChOT19SU0EpIHx8IGRlZmluZWQoSEFWRV9FQ0MpCisgICAgc3RydWN0IHsKKyAgICAgICAgaW50IHR5cGU7IC8qIGVudW0gd2NfUGtUeXBlICovCisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgI2lmbmRlZiBOT19SU0EKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW47CisgICAgICAgICAgICAgICAgd29yZDMyICAgICAgaW5MZW47CisgICAgICAgICAgICAgICAgYnl0ZSogICAgICAgb3V0OworICAgICAgICAgICAgICAgIHdvcmQzMiogICAgIG91dExlbjsKKyAgICAgICAgICAgICAgICBpbnQgICAgICAgICB0eXBlOworICAgICAgICAgICAgICAgIFJzYUtleSogICAgIGtleTsKKyAgICAgICAgICAgICAgICBXQ19STkcqICAgICBybmc7CisgICAgICAgICAgICB9IHJzYTsKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfS0VZX0dFTgorICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBSc2FLZXkqIGtleTsKKyAgICAgICAgICAgICAgICBpbnQgICAgIHNpemU7CisgICAgICAgICAgICAgICAgbG9uZyAgICBlOworICAgICAgICAgICAgICAgIFdDX1JORyogcm5nOworICAgICAgICAgICAgfSByc2FrZzsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIFJzYUtleSogICAgIGtleTsKKyAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBwdWJLZXk7CisgICAgICAgICAgICAgICAgd29yZDMyICAgICAgcHViS2V5U3o7CisgICAgICAgICAgICB9IHJzYV9jaGVjazsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZmRlZiBIQVZFX0VDQworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBXQ19STkcqICBybmc7CisgICAgICAgICAgICAgICAgaW50ICAgICAgc2l6ZTsKKyAgICAgICAgICAgICAgICBlY2Nfa2V5KiBrZXk7CisgICAgICAgICAgICAgICAgaW50ICAgICAgY3VydmVJZDsKKyAgICAgICAgICAgIH0gZWNrZzsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgZWNjX2tleSogcHJpdmF0ZV9rZXk7CisgICAgICAgICAgICAgICAgZWNjX2tleSogcHVibGljX2tleTsKKyAgICAgICAgICAgICAgICBieXRlKiAgICBvdXQ7CisgICAgICAgICAgICAgICAgd29yZDMyKiAgb3V0bGVuOworICAgICAgICAgICAgfSBlY2RoOworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbjsKKyAgICAgICAgICAgICAgICB3b3JkMzIgICAgICBpbmxlbjsKKyAgICAgICAgICAgICAgICBieXRlKiAgICAgICBvdXQ7CisgICAgICAgICAgICAgICAgd29yZDMyKiAgICAgb3V0bGVuOworICAgICAgICAgICAgICAgIFdDX1JORyogICAgIHJuZzsKKyAgICAgICAgICAgICAgICBlY2Nfa2V5KiAgICBrZXk7CisgICAgICAgICAgICB9IGVjY3NpZ247CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHNpZzsKKyAgICAgICAgICAgICAgICB3b3JkMzIgICAgICBzaWdsZW47CisgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaGFzaDsKKyAgICAgICAgICAgICAgICB3b3JkMzIgICAgICBoYXNobGVuOworICAgICAgICAgICAgICAgIGludCogICAgICAgIHJlczsKKyAgICAgICAgICAgICAgICBlY2Nfa2V5KiAgICBrZXk7CisgICAgICAgICAgICB9IGVjY3ZlcmlmeTsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgZWNjX2tleSogICAga2V5OworICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHB1YktleTsKKyAgICAgICAgICAgICAgICB3b3JkMzIgICAgICBwdWJLZXlTejsKKyAgICAgICAgICAgIH0gZWNjX2NoZWNrOworICAgICAgICAjZW5kaWYKKyAgICAgICAgI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBXQ19STkcqICBybmc7CisgICAgICAgICAgICAgICAgaW50ICAgICAgc2l6ZTsKKyAgICAgICAgICAgICAgICBjdXJ2ZTI1NTE5X2tleSoga2V5OworICAgICAgICAgICAgICAgIGludCAgICAgIGN1cnZlSWQ7CisgICAgICAgICAgICB9IGN1cnZlMjU1MTlrZzsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgY3VydmUyNTUxOV9rZXkqIHByaXZhdGVfa2V5OworICAgICAgICAgICAgICAgIGN1cnZlMjU1MTlfa2V5KiBwdWJsaWNfa2V5OworICAgICAgICAgICAgICAgIGJ5dGUqICAgIG91dDsKKyAgICAgICAgICAgICAgICB3b3JkMzIqICBvdXRsZW47CisgICAgICAgICAgICAgICAgaW50ICAgICAgZW5kaWFuOworICAgICAgICAgICAgfSBjdXJ2ZTI1NTE5OworICAgICAgICAjZW5kaWYKKyAgICAgICAgI2lmZGVmIEhBVkVfRUQyNTUxOQorICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBXQ19STkcqICBybmc7CisgICAgICAgICAgICAgICAgaW50ICAgICAgc2l6ZTsKKyAgICAgICAgICAgICAgICBlZDI1NTE5X2tleSoga2V5OworICAgICAgICAgICAgICAgIGludCAgICAgIGN1cnZlSWQ7CisgICAgICAgICAgICB9IGVkMjU1MTlrZzsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogIGluOworICAgICAgICAgICAgICAgIHdvcmQzMiAgICAgICBpbkxlbjsKKyAgICAgICAgICAgICAgICBieXRlKiAgICAgICAgb3V0OworICAgICAgICAgICAgICAgIHdvcmQzMiogICAgICBvdXRMZW47CisgICAgICAgICAgICAgICAgZWQyNTUxOV9rZXkqIGtleTsKKyAgICAgICAgICAgICAgICBieXRlICAgICAgICAgdHlwZTsKKyAgICAgICAgICAgICAgICBjb25zdCBieXRlKiAgY29udGV4dDsKKyAgICAgICAgICAgICAgICBieXRlICAgICAgICAgY29udGV4dExlbjsKKyAgICAgICAgICAgIH0gZWQyNTUxOXNpZ247CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqICBzaWc7CisgICAgICAgICAgICAgICAgd29yZDMyICAgICAgIHNpZ0xlbjsKKyAgICAgICAgICAgICAgICBjb25zdCBieXRlKiAgbXNnOworICAgICAgICAgICAgICAgIHdvcmQzMiAgICAgICBtc2dMZW47CisgICAgICAgICAgICAgICAgaW50KiAgICAgICAgIHJlczsKKyAgICAgICAgICAgICAgICBlZDI1NTE5X2tleSoga2V5OworICAgICAgICAgICAgICAgIGJ5dGUgICAgICAgICB0eXBlOworICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqICBjb250ZXh0OworICAgICAgICAgICAgICAgIGJ5dGUgICAgICAgICBjb250ZXh0TGVuOworICAgICAgICAgICAgfSBlZDI1NTE5dmVyaWZ5OworICAgICAgICAjZW5kaWYKKyAgICAgICAgfTsKKyAgICB9IHBrOworI2VuZGlmIC8qICFOT19SU0EgfHwgSEFWRV9FQ0MgKi8KKyNpZiAhZGVmaW5lZChOT19BRVMpIHx8ICFkZWZpbmVkKE5PX0RFUzMpCisgICAgc3RydWN0IHsKKyAgICAgICAgaW50IHR5cGU7IC8qIGVudW0gd2NfQ2lwaGVyVHlwZSAqLworICAgICAgICBpbnQgZW5jOworICAgICAgICB1bmlvbiB7CisgICAgICAgICNpZmRlZiBIQVZFX0FFU0dDTQorICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBBZXMqICAgICAgICBhZXM7CisgICAgICAgICAgICAgICAgYnl0ZSogICAgICAgb3V0OworICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluOworICAgICAgICAgICAgICAgIHdvcmQzMiAgICAgIHN6OworICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGl2OworICAgICAgICAgICAgICAgIHdvcmQzMiAgICAgIGl2U3o7CisgICAgICAgICAgICAgICAgYnl0ZSogICAgICAgYXV0aFRhZzsKKyAgICAgICAgICAgICAgICB3b3JkMzIgICAgICBhdXRoVGFnU3o7CisgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aEluOworICAgICAgICAgICAgICAgIHdvcmQzMiAgICAgIGF1dGhJblN6OworICAgICAgICAgICAgfSBhZXNnY21fZW5jOworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBBZXMqICAgICAgICBhZXM7CisgICAgICAgICAgICAgICAgYnl0ZSogICAgICAgb3V0OworICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluOworICAgICAgICAgICAgICAgIHdvcmQzMiAgICAgIHN6OworICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGl2OworICAgICAgICAgICAgICAgIHdvcmQzMiAgICAgIGl2U3o7CisgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aFRhZzsKKyAgICAgICAgICAgICAgICB3b3JkMzIgICAgICBhdXRoVGFnU3o7CisgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYXV0aEluOworICAgICAgICAgICAgICAgIHdvcmQzMiAgICAgIGF1dGhJblN6OworICAgICAgICAgICAgfSBhZXNnY21fZGVjOworICAgICAgICAjZW5kaWYgLyogSEFWRV9BRVNHQ00gKi8KKyAgICAgICAgI2lmZGVmIEhBVkVfQUVTX0NCQworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBBZXMqICAgICAgICBhZXM7CisgICAgICAgICAgICAgICAgYnl0ZSogICAgICAgb3V0OworICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluOworICAgICAgICAgICAgICAgIHdvcmQzMiAgICAgIHN6OworICAgICAgICAgICAgfSBhZXNjYmM7CisgICAgICAgICNlbmRpZiAvKiBIQVZFX0FFU19DQkMgKi8KKyAgICAgICAgI2lmbmRlZiBOT19ERVMzCisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIERlczMqICAgICAgIGRlczsKKyAgICAgICAgICAgICAgICBieXRlKiAgICAgICBvdXQ7CisgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW47CisgICAgICAgICAgICAgICAgd29yZDMyICAgICAgc3o7CisgICAgICAgICAgICB9IGRlczM7CisgICAgICAgICNlbmRpZgorICAgICAgICB9OworICAgIH0gY2lwaGVyOworI2VuZGlmIC8qICFOT19BRVMgfHwgIU5PX0RFUzMgKi8KKyNpZiAhZGVmaW5lZChOT19TSEEpIHx8ICFkZWZpbmVkKE5PX1NIQTI1NikgfHwgXAorICAgIGRlZmluZWQoV09MRlNTTF9TSEE1MTIpIHx8IGRlZmluZWQoV09MRlNTTF9TSEEzODQpCisgICAgc3RydWN0IHsKKyAgICAgICAgaW50IHR5cGU7IC8qIGVudW0gd2NfSGFzaFR5cGUgKi8KKyAgICAgICAgY29uc3QgYnl0ZSogaW47CisgICAgICAgIHdvcmQzMiBpblN6OworICAgICAgICBieXRlKiBkaWdlc3Q7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgI2lmbmRlZiBOT19TSEEKKyAgICAgICAgICAgIHdjX1NoYSogc2hhMTsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZm5kZWYgTk9fU0hBMjU2CisgICAgICAgICAgICB3Y19TaGEyNTYqIHNoYTI1NjsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZmRlZiBXT0xGU1NMX1NIQTM4NAorICAgICAgICAgICAgd2NfU2hhMzg0KiBzaGEzODQ7CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZkZWYgV09MRlNTTF9TSEE1MTIKKyAgICAgICAgICAgIHdjX1NoYTUxMiogc2hhNTEyOworICAgICAgICAjZW5kaWYKKyAgICAgICAgfTsKKyAgICB9IGhhc2g7CisjZW5kaWYgLyogIU5PX1NIQSB8fCAhTk9fU0hBMjU2ICovCisjaWZuZGVmIE5PX0hNQUMKKyAgICBzdHJ1Y3QgeworICAgICAgICBpbnQgbWFjVHlwZTsgLyogZW51bSB3Y19IYXNoVHlwZSAqLworICAgICAgICBjb25zdCBieXRlKiBpbjsKKyAgICAgICAgd29yZDMyIGluU3o7CisgICAgICAgIGJ5dGUqIGRpZ2VzdDsKKyAgICAgICAgSG1hYyogaG1hYzsKKyAgICB9IGhtYWM7CisjZW5kaWYKKyNpZm5kZWYgV0NfTk9fUk5HCisgICAgc3RydWN0IHsKKyAgICAgICAgV0NfUk5HKiBybmc7CisgICAgICAgIGJ5dGUqIG91dDsKKyAgICAgICAgd29yZDMyIHN6OworICAgIH0gcm5nOworICAgIHN0cnVjdCB7CisgICAgICAgIE9TX1NlZWQqIG9zOworICAgICAgICBieXRlKiBzZWVkOworICAgICAgICB3b3JkMzIgc3o7CisgICAgfSBzZWVkOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9DTUFDCisgICAgc3RydWN0IHsKKyAgICAgICAgQ21hYyogY21hYzsKKyAgICAgICAgdm9pZCogY3R4OworICAgICAgICBjb25zdCBieXRlKiBrZXk7CisgICAgICAgIGNvbnN0IGJ5dGUqIGluOworICAgICAgICBieXRlKiAgICAgICBvdXQ7CisgICAgICAgIHdvcmQzMiogb3V0U3o7CisgICAgICAgIHdvcmQzMiAga2V5U3o7CisgICAgICAgIHdvcmQzMiAgaW5TejsKKyAgICAgICAgaW50IHR5cGU7CisgICAgfSBjbWFjOworI2VuZGlmCit9IHdjX0NyeXB0b0luZm87CisKKwordHlwZWRlZiBpbnQgKCpDcnlwdG9EZXZDYWxsYmFja0Z1bmMpKGludCBkZXZJZCwgd2NfQ3J5cHRvSW5mbyogaW5mbywgdm9pZCogY3R4KTsKKworV09MRlNTTF9MT0NBTCB2b2lkIHdjX0NyeXB0b0NiX0luaXQodm9pZCk7CitXT0xGU1NMX0xPQ0FMIGludCB3Y19DcnlwdG9DYl9HZXREZXZJZEF0SW5kZXgoaW50IHN0YXJ0SWR4KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfQ3J5cHRvQ2JfUmVnaXN0ZXJEZXZpY2UoaW50IGRldklkLCBDcnlwdG9EZXZDYWxsYmFja0Z1bmMgY2IsIHZvaWQqIGN0eCk7CitXT0xGU1NMX0FQSSB2b2lkIHdjX0NyeXB0b0NiX1VuUmVnaXN0ZXJEZXZpY2UoaW50IGRldklkKTsKKworLyogb2xkIGZ1bmN0aW9uIG5hbWVzICovCisjZGVmaW5lIHdjX0NyeXB0b0Rldl9SZWdpc3RlckRldmljZSAgIHdjX0NyeXB0b0NiX1JlZ2lzdGVyRGV2aWNlCisjZGVmaW5lIHdjX0NyeXB0b0Rldl9VblJlZ2lzdGVyRGV2aWNlIHdjX0NyeXB0b0NiX1VuUmVnaXN0ZXJEZXZpY2UKKworCisjaWZuZGVmIE5PX1JTQQorV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRvQ2JfUnNhKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqIG91dCwKKyAgICB3b3JkMzIqIG91dExlbiwgaW50IHR5cGUsIFJzYUtleSoga2V5LCBXQ19STkcqIHJuZyk7CisKKyNpZmRlZiBXT0xGU1NMX0tFWV9HRU4KK1dPTEZTU0xfTE9DQUwgaW50IHdjX0NyeXB0b0NiX01ha2VSc2FLZXkoUnNhS2V5KiBrZXksIGludCBzaXplLCBsb25nIGUsCisgICAgV0NfUk5HKiBybmcpOworI2VuZGlmIC8qIFdPTEZTU0xfS0VZX0dFTiAqLworCitXT0xGU1NMX0xPQ0FMIGludCB3Y19DcnlwdG9DYl9Sc2FDaGVja1ByaXZLZXkoUnNhS2V5KiBrZXksIGNvbnN0IGJ5dGUqIHB1YktleSwKKyAgICB3b3JkMzIgcHViS2V5U3opOworI2VuZGlmIC8qICFOT19SU0EgKi8KKworI2lmZGVmIEhBVkVfRUNDCitXT0xGU1NMX0xPQ0FMIGludCB3Y19DcnlwdG9DYl9NYWtlRWNjS2V5KFdDX1JORyogcm5nLCBpbnQga2V5U2l6ZSwKKyAgICBlY2Nfa2V5KiBrZXksIGludCBjdXJ2ZUlkKTsKKworV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRvQ2JfRWNkaChlY2Nfa2V5KiBwcml2YXRlX2tleSwgZWNjX2tleSogcHVibGljX2tleSwKKyAgICBieXRlKiBvdXQsIHdvcmQzMiogb3V0bGVuKTsKKworV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRvQ2JfRWNjU2lnbihjb25zdCBieXRlKiBpbiwgd29yZDMyIGlubGVuLCBieXRlKiBvdXQsCisgICAgd29yZDMyICpvdXRsZW4sIFdDX1JORyogcm5nLCBlY2Nfa2V5KiBrZXkpOworCitXT0xGU1NMX0xPQ0FMIGludCB3Y19DcnlwdG9DYl9FY2NWZXJpZnkoY29uc3QgYnl0ZSogc2lnLCB3b3JkMzIgc2lnbGVuLAorICAgIGNvbnN0IGJ5dGUqIGhhc2gsIHdvcmQzMiBoYXNobGVuLCBpbnQqIHJlcywgZWNjX2tleSoga2V5KTsKKworV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRvQ2JfRWNjQ2hlY2tQcml2S2V5KGVjY19rZXkqIGtleSwgY29uc3QgYnl0ZSogcHViS2V5LAorICAgIHdvcmQzMiBwdWJLZXlTeik7CisjZW5kaWYgLyogSEFWRV9FQ0MgKi8KKworI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRvQ2JfQ3VydmUyNTUxOUdlbihXQ19STkcqIHJuZywgaW50IGtleVNpemUsCisgICAgY3VydmUyNTUxOV9rZXkqIGtleSk7CisKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0NyeXB0b0NiX0N1cnZlMjU1MTkoY3VydmUyNTUxOV9rZXkqIHByaXZhdGVfa2V5LAorICAgIGN1cnZlMjU1MTlfa2V5KiBwdWJsaWNfa2V5LCBieXRlKiBvdXQsIHdvcmQzMiogb3V0bGVuLCBpbnQgZW5kaWFuKTsKKyNlbmRpZiAvKiBIQVZFX0NVUlZFMjU1MTkgKi8KKworI2lmZGVmIEhBVkVfRUQyNTUxOQorV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRvQ2JfRWQyNTUxOUdlbihXQ19STkcqIHJuZywgaW50IGtleVNpemUsCisgICAgZWQyNTUxOV9rZXkqIGtleSk7CitXT0xGU1NMX0xPQ0FMIGludCB3Y19DcnlwdG9DYl9FZDI1NTE5U2lnbihjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLAorICAgIGJ5dGUqIG91dCwgd29yZDMyICpvdXRMZW4sIGVkMjU1MTlfa2V5KiBrZXksIGJ5dGUgdHlwZSwgY29uc3QgYnl0ZSogY29udGV4dCwKKyAgICBieXRlIGNvbnRleHRMZW4pOworV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRvQ2JfRWQyNTUxOVZlcmlmeShjb25zdCBieXRlKiBzaWcsIHdvcmQzMiBzaWdMZW4sCisgICAgY29uc3QgYnl0ZSogbXNnLCB3b3JkMzIgbXNnTGVuLCBpbnQqIHJlcywgZWQyNTUxOV9rZXkqIGtleSwgYnl0ZSB0eXBlLAorICAgIGNvbnN0IGJ5dGUqIGNvbnRleHQsIGJ5dGUgY29udGV4dExlbik7CisjZW5kaWYgLyogSEFWRV9FRDI1NTE5ICovCisKKyNpZm5kZWYgTk9fQUVTCisjaWZkZWYgSEFWRV9BRVNHQ00KK1dPTEZTU0xfTE9DQUwgaW50IHdjX0NyeXB0b0NiX0Flc0djbUVuY3J5cHQoQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeiwgY29uc3QgYnl0ZSogaXYsIHdvcmQzMiBpdlN6LAorICAgICBieXRlKiBhdXRoVGFnLCB3b3JkMzIgYXV0aFRhZ1N6LCBjb25zdCBieXRlKiBhdXRoSW4sIHdvcmQzMiBhdXRoSW5Teik7CisKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0NyeXB0b0NiX0Flc0djbURlY3J5cHQoQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeiwgY29uc3QgYnl0ZSogaXYsIHdvcmQzMiBpdlN6LAorICAgICBjb25zdCBieXRlKiBhdXRoVGFnLCB3b3JkMzIgYXV0aFRhZ1N6LAorICAgICBjb25zdCBieXRlKiBhdXRoSW4sIHdvcmQzMiBhdXRoSW5Teik7CisjZW5kaWYgLyogSEFWRV9BRVNHQ00gKi8KKyNpZmRlZiBIQVZFX0FFU19DQkMKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0NyeXB0b0NiX0Flc0NiY0VuY3J5cHQoQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6KTsKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0NyeXB0b0NiX0Flc0NiY0RlY3J5cHQoQWVzKiBhZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6KTsKKyNlbmRpZiAvKiBIQVZFX0FFU19DQkMgKi8KKyNlbmRpZiAvKiAhTk9fQUVTICovCisKKyNpZm5kZWYgTk9fREVTMworV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRvQ2JfRGVzM0VuY3J5cHQoRGVzMyogZGVzMywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3opOworV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRvQ2JfRGVzM0RlY3J5cHQoRGVzMyogZGVzMywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3opOworI2VuZGlmIC8qICFOT19ERVMzICovCisKKyNpZm5kZWYgTk9fU0hBCitXT0xGU1NMX0xPQ0FMIGludCB3Y19DcnlwdG9DYl9TaGFIYXNoKHdjX1NoYSogc2hhLCBjb25zdCBieXRlKiBpbiwKKyAgICB3b3JkMzIgaW5TeiwgYnl0ZSogZGlnZXN0KTsKKyNlbmRpZiAvKiAhTk9fU0hBICovCisKKyNpZm5kZWYgTk9fU0hBMjU2CitXT0xGU1NMX0xPQ0FMIGludCB3Y19DcnlwdG9DYl9TaGEyNTZIYXNoKHdjX1NoYTI1Niogc2hhMjU2LCBjb25zdCBieXRlKiBpbiwKKyAgICB3b3JkMzIgaW5TeiwgYnl0ZSogZGlnZXN0KTsKKyNlbmRpZiAvKiAhTk9fU0hBMjU2ICovCisjaWZkZWYgV09MRlNTTF9TSEEzODQKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0NyeXB0b0NiX1NoYTM4NEhhc2god2NfU2hhMzg0KiBzaGEzODQsIGNvbnN0IGJ5dGUqIGluLAorICAgIHdvcmQzMiBpblN6LCBieXRlKiBkaWdlc3QpOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9TSEE1MTIKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0NyeXB0b0NiX1NoYTUxMkhhc2god2NfU2hhNTEyKiBzaGE1MTIsIGNvbnN0IGJ5dGUqIGluLAorICAgIHdvcmQzMiBpblN6LCBieXRlKiBkaWdlc3QpOworI2VuZGlmCisKKyNpZm5kZWYgTk9fSE1BQworV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRvQ2JfSG1hYyhIbWFjKiBobWFjLCBpbnQgbWFjVHlwZSwgY29uc3QgYnl0ZSogaW4sCisgICAgd29yZDMyIGluU3osIGJ5dGUqIGRpZ2VzdCk7CisjZW5kaWYgLyogIU5PX0hNQUMgKi8KKworI2lmbmRlZiBXQ19OT19STkcKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0NyeXB0b0NiX1JhbmRvbUJsb2NrKFdDX1JORyogcm5nLCBieXRlKiBvdXQsIHdvcmQzMiBzeik7CitXT0xGU1NMX0xPQ0FMIGludCB3Y19DcnlwdG9DYl9SYW5kb21TZWVkKE9TX1NlZWQqIG9zLCBieXRlKiBzZWVkLCB3b3JkMzIgc3opOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0NNQUMKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0NyeXB0b0NiX0NtYWMoQ21hYyogY21hYywgY29uc3QgYnl0ZSoga2V5LCB3b3JkMzIga2V5U3osCisgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5TeiwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dFN6LCBpbnQgdHlwZSwKKyAgICAgICAgdm9pZCogY3R4KTsKKyNlbmRpZgorCisjZW5kaWYgLyogV09MRl9DUllQVE9fQ0IgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIF9XT0xGX0NSWVBUT19DQl9IXyAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2N1cnZlMjU1MTkuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jdXJ2ZTI1NTE5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0NjY2NwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jdXJ2ZTI1NTE5LmgKQEAgLTAsMCArMSwxODIgQEAKKy8qIGN1cnZlMjU1MTkuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L2N1cnZlMjU1MTkuaAorKi8KKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfQ1VSVkUyNTUxOV9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfQ1VSVkUyNTUxOV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgSEFWRV9DVVJWRTI1NTE5CisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9mZV9vcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcmFuZG9tLmg+CisKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2FzeW5jLmg+CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBDVVJWRTI1NTE5X0tFWVNJWkUgMzIKKworI2lmZGVmIFdPTEZTU0xfTkFNRVNfU1RBVElDCit0eXBlZGVmIGNoYXIgY3VydmUyNTUxOV9zdHJbMTJdOworI2Vsc2UKK3R5cGVkZWYgY29uc3QgY2hhciogY3VydmUyNTUxOV9zdHI7CisjZW5kaWYKKworLyogY3VydmUyNTUxOSBzZXQgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCBzaXplOyAgICAgICAgICAgICAvKiBUaGUgc2l6ZSBvZiB0aGUgY3VydmUgaW4gb2N0ZXRzICovCisgICAgY3VydmUyNTUxOV9zdHIgbmFtZTsgLyogbmFtZSBvZiB0aGlzIGN1cnZlICovCit9IGN1cnZlMjU1MTlfc2V0X3R5cGU7CisKKworLyogRUNDIHBvaW50LCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIExpdHRsZSBlbmRpYW4KKyAqIHRoZSBtYXRoZW1hdGljYWwgZnVuY3Rpb25zIHVzZWQgdGhlIGVuZGlhbm5lc3MgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBieXRlIHBvaW50W0NVUlZFMjU1MTlfS0VZU0laRV07CisgICAgI2lmZGVmIEZSRUVTQ0FMRV9MVENfRUNDCisgICAgICAgIGJ5dGUgcG9pbnRZW0NVUlZFMjU1MTlfS0VZU0laRV07CisgICAgI2VuZGlmCit9IEVDUG9pbnQ7CisKKy8qIEEgQ1VSVkUyNTUxOSBLZXkgKi8KK3R5cGVkZWYgc3RydWN0IGN1cnZlMjU1MTlfa2V5IHsKKyAgICBpbnQgaWR4OyAgICAgICAgICAgIC8qIEluZGV4IGludG8gdGhlIGVjY19zZXRzW10gZm9yIHRoZSBwYXJhbWV0ZXJzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGN1cnZlIGlmIC0xLCB0aGlzIGtleSBpcyB1c2luZyB1c2VyIHN1cHBsaWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZSBpbiBkcCAqLworICAgIGNvbnN0IGN1cnZlMjU1MTlfc2V0X3R5cGUqIGRwOyAgIC8qIGRvbWFpbiBwYXJhbWV0ZXJzLCBlaXRoZXIgcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlcyAoaWR4ID49IDApIG9yIHVzZXIgc3VwcGxpZWQgKi8KKyAgICBFQ1BvaW50ICAgcDsgICAgICAgIC8qIHB1YmxpYyBrZXkgICovCisgICAgRUNQb2ludCAgIGs7ICAgICAgICAvKiBwcml2YXRlIGtleSAqLworCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIFdDX0FTWU5DX0RFViBhc3luY0RldjsKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRl9DUllQVE9fQ0IpCisgICAgaW50IGRldklkOworI2VuZGlmCit9IGN1cnZlMjU1MTlfa2V5OworCitlbnVtIHsKKyAgICBFQzI1NTE5X0xJVFRMRV9FTkRJQU49MCwKKyAgICBFQzI1NTE5X0JJR19FTkRJQU49MQorfTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTI1NTE5X21ha2VfcHViKGludCBwdWJsaWNfc2l6ZSwgYnl0ZSogcHViLCBpbnQgcHJpdmF0ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogcHJpdik7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmUyNTUxOV9nZW5lcmljKGludCBwdWJsaWNfc2l6ZSwgYnl0ZSogcHViLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpdmF0ZV9zaXplLCBjb25zdCBieXRlKiBwcml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXBvaW50X3NpemUsIGNvbnN0IGJ5dGUqIGJhc2Vwb2ludCk7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmUyNTUxOV9tYWtlX3ByaXYoV0NfUk5HKiBybmcsIGludCBrZXlzaXplLCBieXRlKiBwcml2KTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTI1NTE5X21ha2Vfa2V5KFdDX1JORyogcm5nLCBpbnQga2V5c2l6ZSwgY3VydmUyNTUxOV9rZXkqIGtleSk7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmUyNTUxOV9zaGFyZWRfc2VjcmV0KGN1cnZlMjU1MTlfa2V5KiBwcml2YXRlX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmUyNTUxOV9rZXkqIHB1YmxpY19rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRsZW4pOworCitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlMjU1MTlfc2hhcmVkX3NlY3JldF9leChjdXJ2ZTI1NTE5X2tleSogcHJpdmF0ZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlMjU1MTlfa2V5KiBwdWJsaWNfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXQsIHdvcmQzMiogb3V0bGVuLCBpbnQgZW5kaWFuKTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTI1NTE5X2luaXQoY3VydmUyNTUxOV9rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlMjU1MTlfaW5pdF9leChjdXJ2ZTI1NTE5X2tleSoga2V5LCB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworCitXT0xGU1NMX0FQSQordm9pZCB3Y19jdXJ2ZTI1NTE5X2ZyZWUoY3VydmUyNTUxOV9rZXkqIGtleSk7CisKKworLyogcmF3IGtleSBoZWxwZXJzICovCitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlMjU1MTlfaW1wb3J0X3ByaXZhdGUoY29uc3QgYnl0ZSogcHJpdiwgd29yZDMyIHByaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlMjU1MTlfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTI1NTE5X2ltcG9ydF9wcml2YXRlX2V4KGNvbnN0IGJ5dGUqIHByaXYsIHdvcmQzMiBwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZTI1NTE5X2tleSoga2V5LCBpbnQgZW5kaWFuKTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTI1NTE5X2ltcG9ydF9wcml2YXRlX3Jhdyhjb25zdCBieXRlKiBwcml2LCB3b3JkMzIgcHJpdlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHB1Yiwgd29yZDMyIHB1YlN6LCBjdXJ2ZTI1NTE5X2tleSoga2V5KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmUyNTUxOV9pbXBvcnRfcHJpdmF0ZV9yYXdfZXgoY29uc3QgYnl0ZSogcHJpdiwgd29yZDMyIHByaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBwdWIsIHdvcmQzMiBwdWJTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZTI1NTE5X2tleSoga2V5LCBpbnQgZW5kaWFuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmUyNTUxOV9leHBvcnRfcHJpdmF0ZV9yYXcoY3VydmUyNTUxOV9rZXkqIGtleSwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiogb3V0TGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmUyNTUxOV9leHBvcnRfcHJpdmF0ZV9yYXdfZXgoY3VydmUyNTUxOV9rZXkqIGtleSwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiogb3V0TGVuLCBpbnQgZW5kaWFuKTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTI1NTE5X2ltcG9ydF9wdWJsaWMoY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpbkxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmUyNTUxOV9rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlMjU1MTlfaW1wb3J0X3B1YmxpY19leChjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZTI1NTE5X2tleSoga2V5LCBpbnQgZW5kaWFuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmUyNTUxOV9jaGVja19wdWJsaWMoY29uc3QgYnl0ZSogcHViLCB3b3JkMzIgcHViU3osIGludCBlbmRpYW4pOworCitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlMjU1MTlfZXhwb3J0X3B1YmxpYyhjdXJ2ZTI1NTE5X2tleSoga2V5LCBieXRlKiBvdXQsIHdvcmQzMiogb3V0TGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmUyNTUxOV9leHBvcnRfcHVibGljX2V4KGN1cnZlMjU1MTlfa2V5KiBrZXksIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyKiBvdXRMZW4sIGludCBlbmRpYW4pOworCitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlMjU1MTlfZXhwb3J0X2tleV9yYXcoY3VydmUyNTUxOV9rZXkqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIHByaXYsIHdvcmQzMiAqcHJpdlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogcHViLCB3b3JkMzIgKnB1YlN6KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmUyNTUxOV9leHBvcnRfa2V5X3Jhd19leChjdXJ2ZTI1NTE5X2tleSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogcHJpdiwgd29yZDMyICpwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBwdWIsIHdvcmQzMiAqcHViU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5kaWFuKTsKKy8qIHNpemUgaGVscGVyICovCitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlMjU1MTlfc2l6ZShjdXJ2ZTI1NTE5X2tleSoga2V5KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIEhBVkVfQ1VSVkUyNTUxOSAqLworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfQ1VSVkUyNTUxOV9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jdXJ2ZTQ0OC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2N1cnZlNDQ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyMDU5NAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9jdXJ2ZTQ0OC5oCkBAIC0wLDAgKzEsMTM5IEBACisvKiBjdXJ2ZTQ0OC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyogSW1wbGVtZW50ZWQgdG86IFJGQyA3NzQ4ICovCisKKworI2lmbmRlZiBXT0xGX0NSWVBUX0NVUlZFNDQ4X0gKKyNkZWZpbmUgV09MRl9DUllQVF9DVVJWRTQ0OF9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgSEFWRV9DVVJWRTQ0OAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZmVfNDQ4Lmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcmFuZG9tLmg+CisKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2FzeW5jLmg+CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBDVVJWRTQ0OF9LRVlfU0laRSAgICAgICAgNTYKKyNkZWZpbmUgQ1VSVkU0NDhfUFVCX0tFWV9TSVpFICAgIDU2CisKKworLyogQSBDVVJWRTQ0OCBLZXkgKi8KK3R5cGVkZWYgc3RydWN0IGN1cnZlNDQ4X2tleSB7CisgICAgYnl0ZSBwW0NVUlZFNDQ4X1BVQl9LRVlfU0laRV07ICAvKiBwdWJsaWMga2V5ICAqLworICAgIGJ5dGUga1tDVVJWRTQ0OF9LRVlfU0laRV07ICAgICAgLyogcHJpdmF0ZSBrZXkgKi8KKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICBXQ19BU1lOQ19ERVYgYXN5bmNEZXY7CisjZW5kaWYKK30gY3VydmU0NDhfa2V5OworCitlbnVtIHsKKyAgICBFQzQ0OF9MSVRUTEVfRU5ESUFOID0gMCwKKyAgICBFQzQ0OF9CSUdfRU5ESUFOICAgID0gMQorfTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTQ0OF9tYWtlX2tleShXQ19STkcqIHJuZywgaW50IGtleXNpemUsIGN1cnZlNDQ4X2tleSoga2V5KTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTQ0OF9zaGFyZWRfc2VjcmV0KGN1cnZlNDQ4X2tleSogcHJpdmF0ZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZTQ0OF9rZXkqIHB1YmxpY19rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXQsIHdvcmQzMiogb3V0bGVuKTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTQ0OF9zaGFyZWRfc2VjcmV0X2V4KGN1cnZlNDQ4X2tleSogcHJpdmF0ZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZTQ0OF9rZXkqIHB1YmxpY19rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXQsIHdvcmQzMiogb3V0bGVuLCBpbnQgZW5kaWFuKTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTQ0OF9pbml0KGN1cnZlNDQ4X2tleSoga2V5KTsKKworV09MRlNTTF9BUEkKK3ZvaWQgd2NfY3VydmU0NDhfZnJlZShjdXJ2ZTQ0OF9rZXkqIGtleSk7CisKKworLyogcmF3IGtleSBoZWxwZXJzICovCitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlNDQ4X2ltcG9ydF9wcml2YXRlKGNvbnN0IGJ5dGUqIHByaXYsIHdvcmQzMiBwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmU0NDhfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTQ0OF9pbXBvcnRfcHJpdmF0ZV9leChjb25zdCBieXRlKiBwcml2LCB3b3JkMzIgcHJpdlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlNDQ4X2tleSoga2V5LCBpbnQgZW5kaWFuKTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTQ0OF9pbXBvcnRfcHJpdmF0ZV9yYXcoY29uc3QgYnl0ZSogcHJpdiwgd29yZDMyIHByaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogcHViLCB3b3JkMzIgcHViU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlNDQ4X2tleSoga2V5KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmU0NDhfaW1wb3J0X3ByaXZhdGVfcmF3X2V4KGNvbnN0IGJ5dGUqIHByaXYsIHdvcmQzMiBwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHB1Yiwgd29yZDMyIHB1YlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZTQ0OF9rZXkqIGtleSwgaW50IGVuZGlhbik7CitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlNDQ4X2V4cG9ydF9wcml2YXRlX3JhdyhjdXJ2ZTQ0OF9rZXkqIGtleSwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIqIG91dExlbik7CitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlNDQ4X2V4cG9ydF9wcml2YXRlX3Jhd19leChjdXJ2ZTQ0OF9rZXkqIGtleSwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIqIG91dExlbiwgaW50IGVuZGlhbik7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmU0NDhfaW1wb3J0X3B1YmxpYyhjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmU0NDhfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTQ0OF9pbXBvcnRfcHVibGljX2V4KGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZTQ0OF9rZXkqIGtleSwgaW50IGVuZGlhbik7CitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlNDQ4X2NoZWNrX3B1YmxpYyhjb25zdCBieXRlKiBwdWIsIHdvcmQzMiBwdWJTeiwgaW50IGVuZGlhbik7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfY3VydmU0NDhfZXhwb3J0X3B1YmxpYyhjdXJ2ZTQ0OF9rZXkqIGtleSwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dExlbik7CitXT0xGU1NMX0FQSQoraW50IHdjX2N1cnZlNDQ4X2V4cG9ydF9wdWJsaWNfZXgoY3VydmU0NDhfa2V5KiBrZXksIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiogb3V0TGVuLCBpbnQgZW5kaWFuKTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTQ0OF9leHBvcnRfa2V5X3JhdyhjdXJ2ZTQ0OF9rZXkqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBwcml2LCB3b3JkMzIgKnByaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBwdWIsIHdvcmQzMiAqcHViU3opOworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTQ0OF9leHBvcnRfa2V5X3Jhd19leChjdXJ2ZTQ0OF9rZXkqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBwcml2LCB3b3JkMzIgKnByaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBwdWIsIHdvcmQzMiAqcHViU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuZGlhbik7CisvKiBzaXplIGhlbHBlciAqLworV09MRlNTTF9BUEkKK2ludCB3Y19jdXJ2ZTQ0OF9zaXplKGN1cnZlNDQ4X2tleSoga2V5KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIEhBVkVfQ1VSVkU0NDggKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0NVUlZFNDQ4X0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2RlczMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9kZXMzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3NzM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9kZXMzLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qIGRlczMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L2RlczMuaAorKi8KKworI2lmbmRlZiBXT0xGX0NSWVBUX0RFUzNfSAorI2RlZmluZSBXT0xGX0NSWVBUX0RFUzNfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmbmRlZiBOT19ERVMzCisKKyNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorICAgIGRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pICYmIChIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyKQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9maXBzLmg+CisjZW5kaWYgLyogSEFWRV9GSVBTX1ZFUlNJT04gPj0gMiAqLworCisjaWYgZGVmaW5lZChIQVZFX0ZJUFMpICYmIFwKKwkoIWRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pIHx8IChIQVZFX0ZJUFNfVkVSU0lPTiA8IDIpKQorLyogaW5jbHVkZWQgZm9yIGZpcHMgQHdjX2ZpcHMgKi8KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L2RlczMuaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiB0aGVzZSBhcmUgcmVxdWlyZWQgZm9yIEZJUFMgYW5kIG5vbi1GSVBTICovCitlbnVtIHsKKyAgICBERVNfS0VZX1NJWkUgICAgICAgID0gIDgsICAvKiBkZXMgICAgICAgICAgICAgICAgICAgICAqLworICAgIERFUzNfS0VZX1NJWkUgICAgICAgPSAyNCwgIC8qIDMgZGVzIGVkZSAgICAgICAgICAgICAgICovCisgICAgREVTX0lWX1NJWkUgICAgICAgICA9ICA4LCAgLyogc2hvdWxkIGJlIHRoZSBzYW1lIGFzIERFU19CTE9DS19TSVpFICovCit9OworCisKKy8qIGF2b2lkIHJlZGVmaW5pdGlvbiBvZiBzdHJ1Y3RzICovCisjaWYgIWRlZmluZWQoSEFWRV9GSVBTKSB8fCBcCisgICAgKGRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pICYmIChIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyKSkKKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXN5bmMuaD4KKyNlbmRpZgorCitlbnVtIHsKKyAgICBERVNfRU5DX1RZUEUgICAgPSBXQ19DSVBIRVJfREVTLCAgICAgLyogY2lwaGVyIHVuaXF1ZSB0eXBlICovCisgICAgREVTM19FTkNfVFlQRSAgID0gV0NfQ0lQSEVSX0RFUzMsICAgIC8qIGNpcGhlciB1bmlxdWUgdHlwZSAqLworCisgICAgREVTX0JMT0NLX1NJWkUgID0gOCwKKyAgICBERVNfS1NfU0laRSAgICAgPSAzMiwgICAgLyogaW50ZXJuYWwgREVTIGtleSBidWZmZXIgc2l6ZSAqLworCisgICAgREVTX0VOQ1JZUFRJT04gID0gMCwKKyAgICBERVNfREVDUllQVElPTiAgPSAxCit9OworCisjZGVmaW5lIERFU19JVkxFTiA4CisjZGVmaW5lIERFU19LRVlMRU4gOAorI2RlZmluZSBERVMzX0lWTEVOIDgKKyNkZWZpbmUgREVTM19LRVlMRU4gMjQKKworCisjaWYgZGVmaW5lZChTVE0zMl9DUllQVE8pCitlbnVtIHsKKyAgICBERVNfQ0JDID0gMCwKKyAgICBERVNfRUNCID0gMQorfTsKKyNlbmRpZgorCisKKy8qIERFUyBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uICovCit0eXBlZGVmIHN0cnVjdCBEZXMgeworICAgIHdvcmQzMiByZWdbREVTX0JMT0NLX1NJWkUgLyBzaXplb2Yod29yZDMyKV07ICAgICAgLyogZm9yIENCQyBtb2RlICovCisgICAgd29yZDMyIHRtcFtERVNfQkxPQ0tfU0laRSAvIHNpemVvZih3b3JkMzIpXTsgICAgICAvKiBzYW1lICAgICAgICAgKi8KKyAgICB3b3JkMzIga2V5W0RFU19LU19TSVpFXTsKK30gRGVzOworCisKKy8qIERFUzMgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiAqLworc3RydWN0IERlczMgeworICAgIHdvcmQzMiBrZXlbM11bREVTX0tTX1NJWkVdOworICAgIHdvcmQzMiByZWdbREVTX0JMT0NLX1NJWkUgLyBzaXplb2Yod29yZDMyKV07ICAgICAgLyogZm9yIENCQyBtb2RlICovCisgICAgd29yZDMyIHRtcFtERVNfQkxPQ0tfU0laRSAvIHNpemVvZih3b3JkMzIpXTsgICAgICAvKiBzYW1lICAgICAgICAgKi8KKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgV0NfQVNZTkNfREVWIGFzeW5jRGV2OworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGX0NSWVBUT19DQikgfHwgXAorICAgIChkZWZpbmVkKFdPTEZTU0xfQVNZTkNfQ1JZUFQpICYmIGRlZmluZWQoV0NfQVNZTkNfRU5BQkxFXzNERVMpKQorICAgIHdvcmQzMiBkZXZLZXlbREVTM19LRVlMRU4vc2l6ZW9mKHdvcmQzMildOyAvKiByYXcga2V5ICovCisjZW5kaWYKKyNpZmRlZiBXT0xGX0NSWVBUT19DQgorICAgIGludCAgICBkZXZJZDsKKyAgICB2b2lkKiAgZGV2Q3R4OworI2VuZGlmCisgICAgdm9pZCogaGVhcDsKK307CisKKyNpZm5kZWYgV0NfREVTM19UWVBFX0RFRklORUQKKyAgICB0eXBlZGVmIHN0cnVjdCBEZXMzIERlczM7CisgICAgI2RlZmluZSBXQ19ERVMzX1RZUEVfREVGSU5FRAorI2VuZGlmCisjZW5kaWYgLyogSEFWRV9GSVBTICovCisKKworV09MRlNTTF9BUEkgaW50ICB3Y19EZXNfU2V0S2V5KERlcyogZGVzLCBjb25zdCBieXRlKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaXYsIGludCBkaXIpOworV09MRlNTTF9BUEkgdm9pZCB3Y19EZXNfU2V0SVYoRGVzKiBkZXMsIGNvbnN0IGJ5dGUqIGl2KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfRGVzX0NiY0VuY3J5cHQoRGVzKiBkZXMsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeik7CitXT0xGU1NMX0FQSSBpbnQgIHdjX0Rlc19DYmNEZWNyeXB0KERlcyogZGVzLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3opOworV09MRlNTTF9BUEkgaW50ICB3Y19EZXNfRWNiRW5jcnlwdChEZXMqIGRlcywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19EZXMzX0VjYkVuY3J5cHQoRGVzMyogZGVzLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3opOworCisvKiBFQ0IgZGVjcnlwdCBzYW1lIHByb2Nlc3MgYXMgZW5jcnlwdCBidXQgd2l0aCBkZWNyeXB0IGtleSAqLworI2RlZmluZSB3Y19EZXNfRWNiRGVjcnlwdCAgd2NfRGVzX0VjYkVuY3J5cHQKKyNkZWZpbmUgd2NfRGVzM19FY2JEZWNyeXB0IHdjX0RlczNfRWNiRW5jcnlwdAorCitXT0xGU1NMX0FQSSBpbnQgIHdjX0RlczNfU2V0S2V5KERlczMqIGRlcywgY29uc3QgYnl0ZSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpdixpbnQgZGlyKTsKK1dPTEZTU0xfQVBJIGludCAgd2NfRGVzM19TZXRJVihEZXMzKiBkZXMsIGNvbnN0IGJ5dGUqIGl2KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfRGVzM19DYmNFbmNyeXB0KERlczMqIGRlcywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sd29yZDMyIHN6KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfRGVzM19DYmNEZWNyeXB0KERlczMqIGRlcywgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sd29yZDMyIHN6KTsKKworLyogVGhlc2UgYXJlIG9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBlaXRoZXI6CisgIHN0YXRpYyBtZW1vcnkgKFdPTEZTU0xfU1RBVElDX01FTU9SWSkgb3IgYXN5bmNocm9ub3VzIChXT0xGU1NMX0FTWU5DX0NSWVBUKSAqLworV09MRlNTTF9BUEkgaW50ICB3Y19EZXMzSW5pdChEZXMzKiwgdm9pZCosIGludCk7CitXT0xGU1NMX0FQSSB2b2lkIHdjX0RlczNGcmVlKERlczMqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE5PX0RFUzMgKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0RFUzNfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvZGguaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9kaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTNmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvZGguaApAQCAtMCwwICsxLDE0NiBAQAorLyogZGguaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L2RoLmgKKyovCisKKyNpZm5kZWYgV09MRl9DUllQVF9ESF9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfREhfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmbmRlZiBOT19ESAorCisjaWYgZGVmaW5lZChIQVZFX0ZJUFMpICYmIFwKKyAgICBkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiAoSEFWRV9GSVBTX1ZFUlNJT04gPj0gMikKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZmlwcy5oPgorI2VuZGlmIC8qIEhBVkVfRklQU19WRVJTSU9OID49IDIgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ludGVnZXIuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9yYW5kb20uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXN5bmMuaD4KKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBEaFBhcmFtcyB7CisjaWZkZWYgSEFWRV9GRkRIRV9RCisgICAgY29uc3QgYnl0ZSogcTsKKyAgICB3b3JkMzIgICAgICBxX2xlbjsKKyNlbmRpZiAvKiBIQVZFX0ZGREhFX1EgKi8KKyAgICBjb25zdCBieXRlKiBwOworICAgIHdvcmQzMiAgICAgIHBfbGVuOworICAgIGNvbnN0IGJ5dGUqIGc7CisgICAgd29yZDMyICAgICAgZ19sZW47Cit9IERoUGFyYW1zOworCisvKiBEaWZmaWUtSGVsbG1hbiBLZXkgKi8KK3N0cnVjdCBEaEtleSB7CisgICAgbXBfaW50IHAsIGcsIHE7IC8qIGdyb3VwIHBhcmFtZXRlcnMgKi8KKyNpZmRlZiBXT0xGU1NMX0RIX0VYVFJBCisgICAgbXBfaW50IHB1YjsKKyAgICBtcF9pbnQgcHJpdjsKKyNlbmRpZgorICAgIHZvaWQqIGhlYXA7CisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIFdDX0FTWU5DX0RFViBhc3luY0RldjsKKyNlbmRpZgorfTsKKworI2lmbmRlZiBXQ19ESF9UWVBFX0RFRklORUQKKyAgICB0eXBlZGVmIHN0cnVjdCBEaEtleSBEaEtleTsKKyAgICAjZGVmaW5lIFdDX0RIX1RZUEVfREVGSU5FRAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZGREhFXzIwNDgKK1dPTEZTU0xfQVBJIGNvbnN0IERoUGFyYW1zKiB3Y19EaF9mZmRoZTIwNDhfR2V0KHZvaWQpOworI2VuZGlmCisjaWZkZWYgSEFWRV9GRkRIRV8zMDcyCitXT0xGU1NMX0FQSSBjb25zdCBEaFBhcmFtcyogd2NfRGhfZmZkaGUzMDcyX0dldCh2b2lkKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfRkZESEVfNDA5NgorV09MRlNTTF9BUEkgY29uc3QgRGhQYXJhbXMqIHdjX0RoX2ZmZGhlNDA5Nl9HZXQodm9pZCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZGREhFXzYxNDQKK1dPTEZTU0xfQVBJIGNvbnN0IERoUGFyYW1zKiB3Y19EaF9mZmRoZTYxNDRfR2V0KHZvaWQpOworI2VuZGlmCisjaWZkZWYgSEFWRV9GRkRIRV84MTkyCitXT0xGU1NMX0FQSSBjb25zdCBEaFBhcmFtcyogd2NfRGhfZmZkaGU4MTkyX0dldCh2b2lkKTsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdERoS2V5KERoS2V5KiBrZXkpOworV09MRlNTTF9BUEkgaW50IHdjX0luaXREaEtleV9leChEaEtleSoga2V5LCB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworV09MRlNTTF9BUEkgaW50IHdjX0ZyZWVEaEtleShEaEtleSoga2V5KTsKKworV09MRlNTTF9BUEkgaW50IHdjX0RoR2VuZXJhdGVLZXlQYWlyKERoS2V5KiBrZXksIFdDX1JORyogcm5nLCBieXRlKiBwcml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyKiBwcml2U3osIGJ5dGUqIHB1Yiwgd29yZDMyKiBwdWJTeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfRGhBZ3JlZShEaEtleSoga2V5LCBieXRlKiBhZ3JlZSwgd29yZDMyKiBhZ3JlZVN6LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBwcml2LCB3b3JkMzIgcHJpdlN6LCBjb25zdCBieXRlKiBvdGhlclB1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHB1YlN6KTsKKworV09MRlNTTF9BUEkgaW50IHdjX0RoS2V5RGVjb2RlKGNvbnN0IGJ5dGUqIGlucHV0LCB3b3JkMzIqIGluT3V0SWR4LCBEaEtleSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyKTsgLyogd2NfRGhLZXlEZWNvZGUgaXMgaW4gYXNuLmMgKi8KKworV09MRlNTTF9BUEkgaW50IHdjX0RoU2V0S2V5KERoS2V5KiBrZXksIGNvbnN0IGJ5dGUqIHAsIHdvcmQzMiBwU3osIGNvbnN0IGJ5dGUqIGcsCisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgZ1N6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19EaFNldEtleV9leChEaEtleSoga2V5LCBjb25zdCBieXRlKiBwLCB3b3JkMzIgcFN6LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogZywgd29yZDMyIGdTeiwgY29uc3QgYnl0ZSogcSwgd29yZDMyIHFTeik7CisKKyNpZmRlZiBXT0xGU1NMX0RIX0VYVFJBCitXT0xGU1NMX0FQSSBpbnQgd2NfRGhQdWJsaWNLZXlEZWNvZGUoY29uc3QgYnl0ZSogaW5wdXQsIHdvcmQzMiogaW5PdXRJZHgsCisgICAgICAgICAgICAgICAgICAgICAgICBEaEtleSoga2V5LCB3b3JkMzIgaW5Teik7CitXT0xGU1NMX0FQSSBpbnQgd2NfRGhJbXBvcnRLZXlQYWlyKERoS2V5KiBrZXksIGNvbnN0IGJ5dGUqIHByaXYsIHdvcmQzMiBwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHB1Yiwgd29yZDMyIHB1YlN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19EaEV4cG9ydEtleVBhaXIoRGhLZXkqIGtleSwgYnl0ZSogcHJpdiwgd29yZDMyKiBwUHJpdlN6LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogcHViLCB3b3JkMzIqIHBQdWJTeik7CitXT0xGU1NMX0xPQ0FMIGludCB3Y19EaEtleUNvcHkoRGhLZXkqIHNyYywgRGhLZXkqIGRzdCk7CisjZW5kaWYKK1dPTEZTU0xfQVBJIGludCB3Y19EaFNldENoZWNrS2V5KERoS2V5KiBrZXksIGNvbnN0IGJ5dGUqIHAsIHdvcmQzMiBwU3osCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBnLCB3b3JkMzIgZ1N6LCBjb25zdCBieXRlKiBxLCB3b3JkMzIgcVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRydXN0ZWQsIFdDX1JORyogcm5nKTsKK1dPTEZTU0xfQVBJIGludCB3Y19EaFBhcmFtc0xvYWQoY29uc3QgYnl0ZSogaW5wdXQsIHdvcmQzMiBpblN6LCBieXRlKiBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiogcEluT3V0U3osIGJ5dGUqIGcsIHdvcmQzMiogZ0luT3V0U3opOworV09MRlNTTF9BUEkgaW50IHdjX0RoQ2hlY2tQdWJLZXkoRGhLZXkqIGtleSwgY29uc3QgYnl0ZSogcHViLCB3b3JkMzIgcHViU3opOworV09MRlNTTF9BUEkgaW50IHdjX0RoQ2hlY2tQdWJLZXlfZXgoRGhLZXkqIGtleSwgY29uc3QgYnl0ZSogcHViLCB3b3JkMzIgcHViU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogcHJpbWUsIHdvcmQzMiBwcmltZVN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19EaENoZWNrUHViVmFsdWUoY29uc3QgYnl0ZSogcHJpbWUsIHdvcmQzMiBwcmltZVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBwdWIsIHdvcmQzMiBwdWJTeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfRGhDaGVja1ByaXZLZXkoRGhLZXkqIGtleSwgY29uc3QgYnl0ZSogcHJpdiwgd29yZDMyIHB1YlN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19EaENoZWNrUHJpdktleV9leChEaEtleSoga2V5LCBjb25zdCBieXRlKiBwcml2LCB3b3JkMzIgcHViU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogcHJpbWUsIHdvcmQzMiBwcmltZVN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19EaENoZWNrS2V5UGFpcihEaEtleSoga2V5LCBjb25zdCBieXRlKiBwdWIsIHdvcmQzMiBwdWJTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHByaXYsIHdvcmQzMiBwcml2U3opOworV09MRlNTTF9BUEkgaW50IHdjX0RoR2VuZXJhdGVQYXJhbXMoV0NfUk5HICpybmcsIGludCBtb2RTeiwgRGhLZXkgKmRoKTsKK1dPTEZTU0xfQVBJIGludCB3Y19EaEV4cG9ydFBhcmFtc1JhdyhEaEtleSogZGgsIGJ5dGUqIHAsIHdvcmQzMiogcFN6LAorICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBxLCB3b3JkMzIqIHFTeiwgYnl0ZSogZywgd29yZDMyKiBnU3opOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBOT19ESCAqLworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfREhfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2RzYS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2RzYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYjAwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvZHNhLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qIGRzYS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvZHNhLmgKKyovCisKKyNpZm5kZWYgV09MRl9DUllQVF9EU0FfSAorI2RlZmluZSBXT0xGX0NSWVBUX0RTQV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZuZGVmIE5PX0RTQQorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaW50ZWdlci5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3JhbmRvbS5oPgorCisvKiBmb3IgRFNBIHJldmVyc2UgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBJbml0RHNhS2V5IHdjX0luaXREc2FLZXkKKyNkZWZpbmUgRnJlZURzYUtleSB3Y19GcmVlRHNhS2V5CisjZGVmaW5lIERzYVNpZ24gd2NfRHNhU2lnbgorI2RlZmluZSBEc2FWZXJpZnkgd2NfRHNhVmVyaWZ5CisjZGVmaW5lIERzYVB1YmxpY0tleURlY29kZSB3Y19Ec2FQdWJsaWNLZXlEZWNvZGUKKyNkZWZpbmUgRHNhUHJpdmF0ZUtleURlY29kZSB3Y19Ec2FQcml2YXRlS2V5RGVjb2RlCisjZGVmaW5lIERzYUtleVRvRGVyIHdjX0RzYUtleVRvRGVyCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKworZW51bSB7CisgICAgRFNBX1BVQkxJQyAgID0gMCwKKyAgICBEU0FfUFJJVkFURSAgPSAxCit9OworCitlbnVtIHsKKyAgICBEU0FfSEFMRl9TSVpFID0gMjAsICAgLyogciBhbmQgcyBzaXplICAqLworICAgIERTQV9TSUdfU0laRSAgPSA0MCAgICAvKiBzaWduYXR1cmUgc2l6ZSAqLworfTsKKworLyogRFNBICovCit0eXBlZGVmIHN0cnVjdCBEc2FLZXkgeworICAgIG1wX2ludCBwLCBxLCBnLCB5LCB4OworICAgIGludCAgIHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHB1YmxpYyBvciBwcml2YXRlICovCisgICAgdm9pZCogaGVhcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IGhpbnQgKi8KK30gRHNhS2V5OworCitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdERzYUtleShEc2FLZXkqIGtleSk7CitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdERzYUtleV9oKERzYUtleSoga2V5LCB2b2lkKiBoKTsKK1dPTEZTU0xfQVBJIHZvaWQgd2NfRnJlZURzYUtleShEc2FLZXkqIGtleSk7CitXT0xGU1NMX0FQSSBpbnQgd2NfRHNhU2lnbihjb25zdCBieXRlKiBkaWdlc3QsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERzYUtleSoga2V5LCBXQ19STkcqIHJuZyk7CitXT0xGU1NMX0FQSSBpbnQgd2NfRHNhVmVyaWZ5KGNvbnN0IGJ5dGUqIGRpZ2VzdCwgY29uc3QgYnl0ZSogc2lnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEc2FLZXkqIGtleSwgaW50KiBhbnN3ZXIpOworV09MRlNTTF9BUEkgaW50IHdjX0RzYVB1YmxpY0tleURlY29kZShjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHNhS2V5Kiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19Ec2FQcml2YXRlS2V5RGVjb2RlKGNvbnN0IGJ5dGUqIGlucHV0LCB3b3JkMzIqIGluT3V0SWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHNhS2V5Kiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19Ec2FLZXlUb0RlcihEc2FLZXkqIGtleSwgYnl0ZSogb3V0cHV0LCB3b3JkMzIgaW5MZW4pOworV09MRlNTTF9BUEkgaW50IHdjX1NldERzYVB1YmxpY0tleShieXRlKiBvdXRwdXQsIERzYUtleSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3V0TGVuLCBpbnQgd2l0aF9oZWFkZXIpOworV09MRlNTTF9BUEkgaW50IHdjX0RzYUtleVRvUHVibGljRGVyKERzYUtleSoga2V5LCBieXRlKiBvdXRwdXQsIHdvcmQzMiBpbkxlbik7CisKKyNpZmRlZiBXT0xGU1NMX0tFWV9HRU4KK1dPTEZTU0xfQVBJIGludCB3Y19NYWtlRHNhS2V5KFdDX1JORyAqcm5nLCBEc2FLZXkgKmRzYSk7CitXT0xGU1NMX0FQSSBpbnQgd2NfTWFrZURzYVBhcmFtZXRlcnMoV0NfUk5HICpybmcsIGludCBtb2R1bHVzX3NpemUsIERzYUtleSAqZHNhKTsKKyNlbmRpZgorCisvKiByYXcgZXhwb3J0IGZ1bmN0aW9ucyAqLworV09MRlNTTF9BUEkgaW50IHdjX0RzYUltcG9ydFBhcmFtc1JhdyhEc2FLZXkqIGRzYSwgY29uc3QgY2hhciogcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcSwgY29uc3QgY2hhciogZyk7CitXT0xGU1NMX0FQSSBpbnQgd2NfRHNhSW1wb3J0UGFyYW1zUmF3Q2hlY2soRHNhS2V5KiBkc2EsIGNvbnN0IGNoYXIqIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHEsIGNvbnN0IGNoYXIqIGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cnVzdGVkLCBXQ19STkcqIHJuZyk7CitXT0xGU1NMX0FQSSBpbnQgd2NfRHNhRXhwb3J0UGFyYW1zUmF3KERzYUtleSogZHNhLCBieXRlKiBwLCB3b3JkMzIqIHBTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogcSwgd29yZDMyKiBxU3osIGJ5dGUqIGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiogZ1N6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19Ec2FFeHBvcnRLZXlSYXcoRHNhS2V5KiBkc2EsIGJ5dGUqIHgsIHdvcmQzMiogeFN6LCBieXRlKiB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIqIHlTeik7CisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogTk9fRFNBICovCisjZW5kaWYgLyogV09MRl9DUllQVF9EU0FfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvZWNjLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvZWNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkZThkZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9lY2MuaApAQCAtMCwwICsxLDg3NCBAQAorLyogZWNjLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL3dvbGZjcnlwdC9lY2MuaAorKi8KKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfRUNDX0gKKyNkZWZpbmUgV09MRl9DUllQVF9FQ0NfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIEhBVkVfRUNDCisKKyNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorICAgIGRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pICYmIChIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyKQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9maXBzLmg+CisjZW5kaWYgLyogSEFWRV9GSVBTX1ZFUlNJT04gPj0gMiAqLworCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaW50ZWdlci5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3JhbmRvbS5oPgorCisjaWZkZWYgSEFWRV9YOTYzX0tERgorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9oYXNoLmg+CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXN5bmMuaD4KKyAgICAjaWZkZWYgV09MRlNTTF9DRVJUX0dFTgorICAgICAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXNuLmg+CisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF9BVEVDQzUwOEEpIHx8IGRlZmluZWQoV09MRlNTTF9BVEVDQzYwOEEpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvYXRtZWwvYXRtZWwuaD4KKyNlbmRpZiAvKiBXT0xGU1NMX0FURUNDNTA4QSAqLworCisjaWYgZGVmaW5lZChXT0xGU1NMX0NSWVBUT0NFTEwpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvYXJtL2NyeXB0b0NlbGwuaD4KKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9TSUxBQlNfU0VfQUNDRUwKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcG9ydC9zaWxhYnMvc2lsYWJzX2VjYy5oPgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0hBVkVfU1BfRUNDCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NwX2ludC5oPgorI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiBFbmFibGUgY3VydmUgQiBwYXJhbWV0ZXIgaWYgbmVlZGVkICovCisjaWYgZGVmaW5lZChIQVZFX0NPTVBfS0VZKSB8fCBkZWZpbmVkKEVDQ19DQUNIRV9DVVJWRSkKKyAgICAjaWZuZGVmIFVTRV9FQ0NfQl9QQVJBTSAvKiBBbGxvdyBzb21lb25lIHRvIGZvcmNlIGVuYWJsZSAqLworICAgICAgICAjZGVmaW5lIFVTRV9FQ0NfQl9QQVJBTQorICAgICNlbmRpZgorI2VuZGlmCisKKworLyogVXNlIHRoaXMgYXMgdGhlIGtleS0+aWR4IGlmIGEgY3VzdG9tIGVjY19zZXQgaXMgdXNlZCBmb3Iga2V5LT5kcCAqLworI2RlZmluZSBFQ0NfQ1VTVE9NX0lEWCAgICAoLTEpCisKKworLyogRGV0ZXJtaW5lIG1heCBFQ0MgYml0cyBiYXNlZCBvbiBlbmFibGVkIGN1cnZlcyAqLworI2lmIGRlZmluZWQoV09MRkNSWVBUX0hBVkVfU0FLS0UpCisgICAgI2RlZmluZSBNQVhfRUNDX0JJVFMgICAgMTAyNAorI2VsaWYgZGVmaW5lZChIQVZFX0VDQzUyMSkgfHwgZGVmaW5lZChIQVZFX0FMTF9DVVJWRVMpCisgICAgI2RlZmluZSBNQVhfRUNDX0JJVFMgICAgNTIxCisjZWxpZiBkZWZpbmVkKEhBVkVfRUNDNTEyKQorICAgICNkZWZpbmUgTUFYX0VDQ19CSVRTICAgIDUxMgorI2VsaWYgZGVmaW5lZChIQVZFX0VDQzM4NCkKKyAgICAjZGVmaW5lIE1BWF9FQ0NfQklUUyAgICAzODQKKyNlbGlmIGRlZmluZWQoSEFWRV9FQ0MzMjApCisgICAgI2RlZmluZSBNQVhfRUNDX0JJVFMgICAgMzIwCisjZWxpZiAhZGVmaW5lZChOT19FQ0MyNTYpCisgICAgI2RlZmluZSBNQVhfRUNDX0JJVFMgICAgMjU2CisjZWxpZiBkZWZpbmVkKEhBVkVfRUNDMjM5KQorICAgICNkZWZpbmUgTUFYX0VDQ19CSVRTICAgIDIzOQorI2VsaWYgZGVmaW5lZChIQVZFX0VDQzIyNCkKKyAgICAjZGVmaW5lIE1BWF9FQ0NfQklUUyAgICAyMjQKKyNlbGlmIGRlZmluZWQoSEFWRV9FQ0MxOTIpCisgICAgI2RlZmluZSBNQVhfRUNDX0JJVFMgICAgMTkyCisjZWxpZiBkZWZpbmVkKEhBVkVfRUNDMTYwKQorICAgICNkZWZpbmUgTUFYX0VDQ19CSVRTICAgIDE2MAorI2VsaWYgZGVmaW5lZChIQVZFX0VDQzEyOCkKKyAgICAjZGVmaW5lIE1BWF9FQ0NfQklUUyAgICAxMjgKKyNlbGlmIGRlZmluZWQoSEFWRV9FQ0MxMTIpCisgICAgI2RlZmluZSBNQVhfRUNDX0JJVFMgICAgMTEyCisjZW5kaWYKKworLyogY2FsY3VsYXRlIG1heCBFQ0MgYnl0ZXMgKi8KKyNpZiAoKE1BWF9FQ0NfQklUUyAqIDIpICUgOCkgPT0gMAorICAgICNkZWZpbmUgTUFYX0VDQ19CWVRFUyAgICAgKE1BWF9FQ0NfQklUUyAvIDgpCisjZWxzZQorICAgIC8qIGFkZCBieXRlIGlmIG5vdCBhbGlnbmVkICovCisgICAgI2RlZmluZSBNQVhfRUNDX0JZVEVTICAgICAoKE1BWF9FQ0NfQklUUyAvIDgpICsgMSkKKyNlbmRpZgorCisjaWZuZGVmIEVDQ19NQVhfUEFEX1NaCisgICAgLyogRUNDIG1heGltdW0gcGFkZGluZyBzaXplICh3aGVuIE1TQiBpcyBzZXQgZXh0cmEgYnl0ZSByZXF1aXJlZCBmb3IgUiBhbmQgUykgKi8KKyAgICAjZGVmaW5lIEVDQ19NQVhfUEFEX1NaIDIKKyNlbmRpZgorCitlbnVtIHsKKyAgICBFQ0NfUFVCTElDS0VZICAgICAgID0gMSwKKyAgICBFQ0NfUFJJVkFURUtFWSAgICAgID0gMiwKKyAgICBFQ0NfUFJJVkFURUtFWV9PTkxZID0gMywKKyAgICBFQ0NfTUFYTkFNRSAgICAgPSAxNiwgICAvKiBNQVggQ1VSVkUgTkFNRSBMRU5HVEggKi8KKyAgICBTSUdfSEVBREVSX1NaICAgPSAgNywgICAvKiBFQ0Mgc2lnbmF0dXJlIGhlYWRlciBzaXplICgzMCA4MSA4NyAwMiA0MiBbUl0gMDIgNDIgW1NdKSAqLworICAgIEVDQ19CVUZTSVpFICAgICA9IDI1NywgIC8qIGZvciBleHBvcnRlZCBrZXlzIHRlbXAgYnVmZmVyICovCisgICAgRUNDX01JTlNJWkUgICAgID0gRUNDX01JTl9LRVlfU1ovOCwgICAvKiBNSU4gUHJpdmF0ZSBLZXkgc2l6ZSAqLworI2lmZGVmIFdPTEZDUllQVF9IQVZFX1NBS0tFCisgICAgRUNDX01BWFNJWkUgICAgID0gMTI4LCAgLyogTUFYIFByaXZhdGUgS2V5IHNpemUgKi8KKyAgICBFQ0NfTUFYU0laRV9HRU4gPSAxMjgsICAvKiBNQVggQnVmZmVyIHNpemUgcmVxdWlyZWQgd2hlbiBnZW5lcmF0aW5nIEVDQyBrZXlzKi8KKyNlbHNlCisgICAgRUNDX01BWFNJWkUgICAgID0gNjYsICAgLyogTUFYIFByaXZhdGUgS2V5IHNpemUgKi8KKyAgICBFQ0NfTUFYU0laRV9HRU4gPSA3NCwgICAvKiBNQVggQnVmZmVyIHNpemUgcmVxdWlyZWQgd2hlbiBnZW5lcmF0aW5nIEVDQyBrZXlzKi8KKyNlbmRpZgorICAgIEVDQ19NQVhfT0lEX0xFTiA9IDE2LAorICAgIEVDQ19NQVhfU0lHX1NJWkU9ICgoTUFYX0VDQ19CWVRFUyAqIDIpICsgRUNDX01BWF9QQURfU1ogKyBTSUdfSEVBREVSX1NaKSwKKworICAgIC8qIG1heCBjcnlwdG8gaGFyZHdhcmUgc2l6ZSAqLworI2lmIGRlZmluZWQoV09MRlNTTF9BVEVDQzUwOEEpIHx8IGRlZmluZWQoV09MRlNTTF9BVEVDQzYwOEEpCisgICAgRUNDX01BWF9DUllQVE9fSFdfU0laRSA9IEFURUNDX0tFWV9TSVpFLCAvKiBmcm9tIHBvcnQvYXRtZWwvYXRtZWwuaCAqLworICAgIEVDQ19NQVhfQ1JZUFRPX0hXX1BVQktFWV9TSVpFID0gKEFURUNDX0tFWV9TSVpFKjIpLAorI2VsaWYgZGVmaW5lZChQTFVUT05fQ1JZUFRPX0VDQykKKyAgICBFQ0NfTUFYX0NSWVBUT19IV19TSVpFID0gMzIsCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfU0lMQUJTX1NFX0FDQ0VMKQorICAgIEVDQ19NQVhfQ1JZUFRPX0hXX1NJWkUgPSAzMiwKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9DUllQVE9DRUxMKQorICAgICNpZm5kZWYgQ1JZUFRPQ0VMTF9LRVlfU0laRQorICAgICAgICBDUllQVE9DRUxMX0tFWV9TSVpFID0gRUNDX01BWFNJWkUsCisgICAgI2VuZGlmCisgICAgRUNDX01BWF9DUllQVE9fSFdfU0laRSA9IENSWVBUT0NFTExfS0VZX1NJWkUsCisjZW5kaWYKKworICAgIC8qIHBvaW50IGNvbXByZXNzaW9uIHR5cGUgKi8KKyAgICBFQ0NfUE9JTlRfQ09NUF9FVkVOID0gMHgwMiwKKyAgICBFQ0NfUE9JTlRfQ09NUF9PREQgPSAweDAzLAorICAgIEVDQ19QT0lOVF9VTkNPTVAgPSAweDA0LAorCisgICAgLyogU2hhbWlyJ3MgZHVhbCBhZGQgY29uc3RhbnRzICovCisgICAgU0hBTUlSX1BSRUNPTVBfU1ogPSAxNiwKKworI2lmZGVmIFdPTEZfQ1JZUFRPX0NCCisgICAgRUNDX01BWF9JRF9MRU4gICAgPSAzMiwKKyAgICBFQ0NfTUFYX0xBQkVMX0xFTiA9IDMyLAorI2VuZGlmCit9OworCisvKiBDdXJ2ZSBUeXBlcyAqLwordHlwZWRlZiBlbnVtIGVjY19jdXJ2ZV9pZCB7CisgICAgRUNDX0NVUlZFX0lOVkFMSUQgPSAtMSwKKyAgICBFQ0NfQ1VSVkVfREVGID0gMCwgLyogTklTVCBvciBTRUNQICovCisKKyAgICAvKiBOSVNUIFByaW1lIEN1cnZlcyAqLworICAgIEVDQ19TRUNQMTkyUjEsCisgICAgRUNDX1BSSU1FMTkyVjIsCisgICAgRUNDX1BSSU1FMTkyVjMsCisgICAgRUNDX1BSSU1FMjM5VjEsCisgICAgRUNDX1BSSU1FMjM5VjIsCisgICAgRUNDX1BSSU1FMjM5VjMsCisgICAgRUNDX1NFQ1AyNTZSMSwKKworICAgIC8qIFNFQ1AgQ3VydmVzICovCisgICAgRUNDX1NFQ1AxMTJSMSwKKyAgICBFQ0NfU0VDUDExMlIyLAorICAgIEVDQ19TRUNQMTI4UjEsCisgICAgRUNDX1NFQ1AxMjhSMiwKKyAgICBFQ0NfU0VDUDE2MFIxLAorICAgIEVDQ19TRUNQMTYwUjIsCisgICAgRUNDX1NFQ1AyMjRSMSwKKyAgICBFQ0NfU0VDUDM4NFIxLAorICAgIEVDQ19TRUNQNTIxUjEsCisKKyAgICAvKiBLb2JsaXR6ICovCisgICAgRUNDX1NFQ1AxNjBLMSwKKyAgICBFQ0NfU0VDUDE5MksxLAorICAgIEVDQ19TRUNQMjI0SzEsCisgICAgRUNDX1NFQ1AyNTZLMSwKKworICAgIC8qIEJyYWlucG9vbCBDdXJ2ZXMgKi8KKyAgICBFQ0NfQlJBSU5QT09MUDE2MFIxLAorICAgIEVDQ19CUkFJTlBPT0xQMTkyUjEsCisgICAgRUNDX0JSQUlOUE9PTFAyMjRSMSwKKyAgICBFQ0NfQlJBSU5QT09MUDI1NlIxLAorICAgIEVDQ19CUkFJTlBPT0xQMzIwUjEsCisgICAgRUNDX0JSQUlOUE9PTFAzODRSMSwKKyAgICBFQ0NfQlJBSU5QT09MUDUxMlIxLAorCisgICAgLyogVHdpc3RlZCBFZHdhcmRzIEN1cnZlcyAqLworI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorICAgIEVDQ19YMjU1MTksCisjZW5kaWYKKyNpZmRlZiBIQVZFX0NVUlZFNDQ4CisgICAgRUNDX1g0NDgsCisjZW5kaWYKKworI2lmZGVmIFdPTEZDUllQVF9IQVZFX1NBS0tFCisgICAgRUNDX1NBS0tFXzEsCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfQ1VTVE9NX0NVUlZFUworICAgIEVDQ19DVVJWRV9DVVNUT00sCisjZW5kaWYKKyAgICBFQ0NfQ1VSVkVfTUFYCit9IGVjY19jdXJ2ZV9pZDsKKworI2lmZGVmIEhBVkVfT0lEX0VOQ09ESU5HCit0eXBlZGVmIHdvcmQxNiBlY2Nfb2lkX3Q7CisjZWxzZQordHlwZWRlZiBieXRlICAgZWNjX29pZF90OworICAgIC8qIE9JRCBlbmNvZGVkIHdpdGggQVNOIHNjaGVtZToKKyAgICAgICAgZmlyc3QgZWxlbWVudCA9IChvaWRbMF0gKiA0MCkgKyBvaWRbMV0KKyAgICAgICAgaWYgYW55IGVsZW1lbnQgPiAxMjcgdGhlbiBNU0IgMHg4MCBpbmRpY2F0ZXMgYWRkaXRpb25hbCBieXRlICovCisjZW5kaWYKKworCisjaWYgIWRlZmluZWQoV09MRlNTTF9FQ0NfQ1VSVkVfU1RBVElDKSAmJiBkZWZpbmVkKFVTRV9XSU5ET1dTX0FQSSkKKyAgICAvKiBNU0MgZG9lcyBzb21ldGhpbmcgZGlmZmVyZW50IHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZSBhcnJheXMgdGhhbiBHQ0MsCisgICAgICogYW5kIGl0IGNhdXNlcyB0aGUgRklQUyBjaGVja3N1bSB0byBmYWlsLiBJbiB0aGUgY2FzZSBvZiB3aW5kb3dzIGJ1aWxkcywKKyAgICAgKiBzdG9yZSBldmVyeXRoaW5nIGFzIGFycmF5cyBpbnN0ZWFkIG9mIHBvaW50ZXJzIHRvIHN0cmluZ3MuICovCisKKyAgICAjZGVmaW5lIFdPTEZTU0xfRUNDX0NVUlZFX1NUQVRJQworI2VuZGlmCisKKy8qIEVDQyBzZXQgdHlwZSBkZWZpbmVkIGEgR0YocCkgY3VydmUgKi8KKyNpZm5kZWYgV09MRlNTTF9FQ0NfQ1VSVkVfU1RBVElDCit0eXBlZGVmIHN0cnVjdCBlY2Nfc2V0X3R5cGUgeworICAgIGludCBzaXplOyAgICAgICAgICAgICAvKiBUaGUgc2l6ZSBvZiB0aGUgY3VydmUgaW4gb2N0ZXRzICovCisgICAgaW50IGlkOyAgICAgICAgICAgICAgIC8qIGlkIG9mIHRoaXMgY3VydmUgKi8KKyAgICBjb25zdCBjaGFyKiBuYW1lOyAgICAgLyogbmFtZSBvZiB0aGlzIGN1cnZlICovCisgICAgY29uc3QgY2hhciogcHJpbWU7ICAgIC8qIHByaW1lIHRoYXQgZGVmaW5lcyB0aGUgZmllbGQsIGN1cnZlIGlzIGluIChoZXgpICovCisgICAgY29uc3QgY2hhciogQWY7ICAgICAgIC8qIGZpZWxkcyBBIHBhcmFtIChoZXgpICovCisgICAgY29uc3QgY2hhciogQmY7ICAgICAgIC8qIGZpZWxkcyBCIHBhcmFtIChoZXgpICovCisgICAgY29uc3QgY2hhciogb3JkZXI7ICAgIC8qIG9yZGVyIG9mIHRoZSBjdXJ2ZSAoaGV4KSAqLworICAgIGNvbnN0IGNoYXIqIEd4OyAgICAgICAvKiB4IGNvb3JkaW5hdGUgb2YgdGhlIGJhc2UgcG9pbnQgb24gY3VydmUgKGhleCkgKi8KKyAgICBjb25zdCBjaGFyKiBHeTsgICAgICAgLyogeSBjb29yZGluYXRlIG9mIHRoZSBiYXNlIHBvaW50IG9uIGN1cnZlIChoZXgpICovCisgICAgY29uc3QgZWNjX29pZF90KiBvaWQ7CisgICAgd29yZDMyICAgICAgb2lkU3o7CisgICAgd29yZDMyICAgICAgb2lkU3VtOyAgICAvKiBzdW0gb2YgZW5jb2RlZCBPSUQgYnl0ZXMgKi8KKyAgICBpbnQgICAgICAgICBjb2ZhY3RvcjsKK30gZWNjX3NldF90eXBlOworI2Vsc2UKKyNkZWZpbmUgTUFYX0VDQ19OQU1FIDE2CisjZGVmaW5lIE1BWF9FQ0NfU1RSSU5HICgoTUFYX0VDQ19CWVRFUyAqIDIpICsgMSkKKyAgICAvKiBUaGUgdmFsdWVzIGFyZSBzdG9yZWQgYXMgdGV4dCBzdHJpbmdzLiAqLworCit0eXBlZGVmIHN0cnVjdCBlY2Nfc2V0X3R5cGUgeworICAgIGludCBzaXplOyAgICAgICAgICAgICAvKiBUaGUgc2l6ZSBvZiB0aGUgY3VydmUgaW4gb2N0ZXRzICovCisgICAgaW50IGlkOyAgICAgICAgICAgICAgIC8qIGlkIG9mIHRoaXMgY3VydmUgKi8KKyAgICBjb25zdCBjaGFyIG5hbWVbTUFYX0VDQ19OQU1FXTsgICAgIC8qIG5hbWUgb2YgdGhpcyBjdXJ2ZSAqLworICAgIGNvbnN0IGNoYXIgcHJpbWVbTUFYX0VDQ19TVFJJTkddOyAgICAvKiBwcmltZSB0aGF0IGRlZmluZXMgdGhlIGZpZWxkLCBjdXJ2ZSBpcyBpbiAoaGV4KSAqLworICAgIGNvbnN0IGNoYXIgQWZbTUFYX0VDQ19TVFJJTkddOyAgICAgICAvKiBmaWVsZHMgQSBwYXJhbSAoaGV4KSAqLworICAgIGNvbnN0IGNoYXIgQmZbTUFYX0VDQ19TVFJJTkddOyAgICAgICAvKiBmaWVsZHMgQiBwYXJhbSAoaGV4KSAqLworICAgIGNvbnN0IGNoYXIgb3JkZXJbTUFYX0VDQ19TVFJJTkddOyAgICAvKiBvcmRlciBvZiB0aGUgY3VydmUgKGhleCkgKi8KKyAgICBjb25zdCBjaGFyIEd4W01BWF9FQ0NfU1RSSU5HXTsgICAgICAgLyogeCBjb29yZGluYXRlIG9mIHRoZSBiYXNlIHBvaW50IG9uIGN1cnZlIChoZXgpICovCisgICAgY29uc3QgY2hhciBHeVtNQVhfRUNDX1NUUklOR107ICAgICAgIC8qIHkgY29vcmRpbmF0ZSBvZiB0aGUgYmFzZSBwb2ludCBvbiBjdXJ2ZSAoaGV4KSAqLworICAgIGNvbnN0IGVjY19vaWRfdCBvaWRbMTBdOworICAgIHdvcmQzMiAgICAgIG9pZFN6OworICAgIHdvcmQzMiAgICAgIG9pZFN1bTsgICAgLyogc3VtIG9mIGVuY29kZWQgT0lEIGJ5dGVzICovCisgICAgaW50ICAgICAgICAgY29mYWN0b3I7Cit9IGVjY19zZXRfdHlwZTsKKyNlbmRpZgorCisKKyNpZmRlZiBBTFRfRUNDX1NJWkUKKworLyogTm90ZSBvbiBBTFRfRUNDX1NJWkU6CisgKiBUaGUgZmFzdCBtYXRoIGNvZGUgdXNlcyBhbiBhcnJheSBvZiBhIGZpeGVkIHNpemUgdG8gc3RvcmUgdGhlIGJpZyBpbnRlZ2Vycy4KKyAqIEJ5IGRlZmF1bHQsIHRoZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBSU0Ega2V5cy4gVGhlcmUgaXMgYSBzaXplLAorICogRlBfTUFYX0JJVFMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFrZSB0aGUgYXJyYXkgc21hbGxlciB3aGVuIG9uZSB3YW50cyBFQ0MKKyAqIGJ1dCBub3QgUlNBLiBTb21lIHBlb3BsZSB3YW50IGZhc3QgbWF0aCBzaXplZCBmb3IgYm90aCBSU0EgYW5kIEVDQywgd2hlcmUKKyAqIEVDQyB3b24ndCB1c2UgYXMgbXVjaCBhcyBSU0EuIFRoZSBmbGFnIEFMVF9FQ0NfU0laRSBzd2l0Y2hlcyBpbiBhbiBhbHRlcm5hdGUKKyAqIGVjY19wb2ludCBzdHJ1Y3R1cmUgdGhhdCB1c2VzIGFuIGFsdGVybmF0ZSBmcF9pbnQgdGhhdCBoYXMgYSBzaG9ydGVyIGFycmF5CisgKiBvZiBmcF9kaWdpdHMuCisgKgorICogTm93LCB3aXRob3V0IEFMVF9FQ0NfU0laRSwgdGhlIGVjY19wb2ludCBoYXMgdGhyZWUgc2luZ2xlIGl0ZW0gYXJyYXlzIG9mCisgKiBtcF9pbnRzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgcG9pbnQuIFdpdGggQUxUX0VDQ19TSVpFLCB0aGUgY29tcG9uZW50cworICogb2YgdGhlIHBvaW50IGFyZSBwb2ludGVycyB0aGF0IGFyZSBzZXQgdG8gZWFjaCBvZiBhIHRocmVlIGl0ZW0gYXJyYXkgb2YKKyAqIGFsdF9mcF9pbnRzLiBXaGlsZSBhbiBtcF9pbnQgd2lsbCBoYXZlIDQwOTYgYml0cyBvZiBkaWdpdCBpbnNpZGUgdGhlCisgKiBzdHJ1Y3R1cmUsIHRoZSBhbHRfZnBfaW50IHdpbGwgb25seSBoYXZlIDUxMiBiaXRzIGZvciBFQ0MgMjU2LWJpdCBhbmQgCisgKiAxMDU2LWJpdHMgZm9yIEVDQyA1MjEtYml0LiBBIHNpemUgdmFsdWUgd2FzIGFkZGVkIGluIHRoZSBBTFQgY2FzZSwgYXMgd2VsbCwgCisgKiBhbmQgaXMgc2V0IGJ5IG1wX2luaXQoKSBhbmQgYWx0X2ZwX2luaXQoKS4gVGhlIGZ1bmN0aW9ucyBmcF96ZXJvKCkgYW5kIAorICogZnBfY29weSgpIHVzZSB0aGUgc2l6ZSBwYXJhbWV0ZXIuIEFuIGludCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgCisgKiB1c2luZyBpdCBpbnN0ZWFkIG9mIGp1c3QgZnBfemVyb2luZyBpdCwgdGhlIGluaXQgd2lsbCBjYWxsIHplcm8uIFRoZSAKKyAqIEZQX01BWF9CSVRTX0VDQyBkZWZhdWx0cyB0byBjYWxjdWxhdGluZyBiYXNlZCBvbiBNQVhfRUNDX0JJVFMsIGJ1dCAKKyAqIGNhbiBiZSBzZXQgdG8gY2hhbmdlIHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIGluIHRoZSBhbHRlcm5hdGUgRlBfSU5ULgorICoKKyAqIFRoZSBBTFRfRUNDX1NJWkUgb3B0aW9uIG9ubHkgYXBwbGllcyB0byBzdGFjayBiYXNlZCBmYXN0IG1hdGggVVNFX0ZBU1RfTUFUSC4KKyAqLworCisjaWZuZGVmIFVTRV9GQVNUX01BVEgKKyAgICAjZXJyb3IgVVNFX0ZBU1RfTUFUSCBtdXN0IGJlIGRlZmluZWQgdG8gdXNlIEFMVF9FQ0NfU0laRQorI2VuZGlmCisjaWZkZWYgV09MRlNTTF9OT19NQUxMT0MKKyAgICAjZXJyb3IgQUxUX0VDQ19TSVpFIGNhbm5vdCBiZSB1c2VkIHdpdGggbm8gbWFsbG9jIChXT0xGU1NMX05PX01BTExPQykKKyNlbmRpZgorCisvKiBkZXRlcm1pbmUgbWF4IGJpdHMgcmVxdWlyZWQgZm9yIEVDQyBtYXRoICovCisjaWZuZGVmIEZQX01BWF9CSVRTX0VDQworICAgIC8qIG1heCBiaXRzIHJvdW5kZWQgdXAgYnkgOCB0aGVuIGRvdWJsZWQgKi8KKyAgICAvKiAoUk9VTkQ4KE1BWF9FQ0NfQklUUykgKiAyKSAqLworICAgICNkZWZpbmUgRlBfTUFYX0JJVFNfRUNDICgyICogXAorICAgICAgICAoKE1BWF9FQ0NfQklUUyArIERJR0lUX0JJVCAtIDEpIC8gRElHSVRfQklUKSAqIERJR0lUX0JJVCkKKworICAgIC8qIE5vdGU6IEZvciBFQ0MgdmVyaWZ5IG9ubHkgRlBfTUFYX0JJVFNfRUNDIGNhbiBiZSByZWR1Y2VkIHRvOgorICAgICAgICAgICAgIFJPVU5EOChNQVhfRUNDX0JJVFMpICsgUk9VTkQ4KERJR0lUX0JJVCkgKi8KKyNlbmRpZgorCisvKiB2ZXJpZnkgYWxpZ25tZW50ICovCisjaWYgRlBfTUFYX0JJVFNfRUNDICUgQ0hBUl9CSVQKKyAgICAjZXJyb3IgRlBfTUFYX0JJVFNfRUNDIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBDSEFSX0JJVAorI2VuZGlmCisKKy8qIGRldGVybWluZSBidWZmZXIgc2l6ZSAqLworLyogQWRkIG9uZSB0byBhY2NvbW1vZGF0ZSBleHRyYSBkaWdpdCB1c2VkIGJ5IHNwX211bCgpLCBzcF9tdWxtb2QoKSwgc3Bfc3FyKCksIGFuZCBzcF9zcXJtb2QoKS4gKi8KKyNkZWZpbmUgRlBfU0laRV9FQ0MgICAgKChGUF9NQVhfQklUU19FQ0MvRElHSVRfQklUKSArIDEpCisKKworLyogVGhpcyBuZWVkcyB0byBtYXRjaCB0aGUgc2l6ZSBvZiB0aGUgZnBfaW50IHN0cnVjdCwgZXhjZXB0IHRoZQorICogZnBfZGlnaXQgYXJyYXkgd2lsbCBiZSBzaG9ydGVyLiAqLwordHlwZWRlZiBzdHJ1Y3QgYWx0X2ZwX2ludCB7CisgICAgaW50IHVzZWQsIHNpZ24sIHNpemU7CisgICAgbXBfZGlnaXQgZHBbRlBfU0laRV9FQ0NdOworfSBhbHRfZnBfaW50OworI2VuZGlmIC8qIEFMVF9FQ0NfU0laRSAqLworCisjaWZuZGVmIFdDX0VDQ0tFWV9UWVBFX0RFRklORUQKKyAgICB0eXBlZGVmIHN0cnVjdCBlY2Nfa2V5IGVjY19rZXk7CisgICAgI2RlZmluZSBXQ19FQ0NLRVlfVFlQRV9ERUZJTkVECisjZW5kaWYKKworCisvKiBBIHBvaW50IG9uIGFuIEVDQyBjdXJ2ZSwgc3RvcmVkIGluIEphY29iaWFuIGZvcm1hdCBzdWNoIHRoYXQgKHgseSx6KSA9PgorICAgKHgvel4yLCB5L3peMywgMSkgd2hlbiBpbnRlcnByZXRlZCBhcyBhZmZpbmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyNpZm5kZWYgQUxUX0VDQ19TSVpFCisgICAgbXBfaW50IHhbMV07ICAgICAgICAvKiBUaGUgeCBjb29yZGluYXRlICovCisgICAgbXBfaW50IHlbMV07ICAgICAgICAvKiBUaGUgeSBjb29yZGluYXRlICovCisgICAgbXBfaW50IHpbMV07ICAgICAgICAvKiBUaGUgeiBjb29yZGluYXRlICovCisjZWxzZQorICAgIG1wX2ludCogeDsgICAgICAgIC8qIFRoZSB4IGNvb3JkaW5hdGUgKi8KKyAgICBtcF9pbnQqIHk7ICAgICAgICAvKiBUaGUgeSBjb29yZGluYXRlICovCisgICAgbXBfaW50KiB6OyAgICAgICAgLyogVGhlIHogY29vcmRpbmF0ZSAqLworICAgIGFsdF9mcF9pbnQgeHl6WzNdOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9TTUFMTF9TVEFDS19DQUNIRQorICAgIGVjY19rZXkqIGtleTsKKyNlbmRpZgorfSBlY2NfcG9pbnQ7CisKKy8qIEVDQyBGbGFncyAqLworZW51bSB7CisgICAgV0NfRUNDX0ZMQUdfTk9ORSAgICAgPSAweDAwLAorI2lmZGVmIEhBVkVfRUNDX0NESAorICAgIFdDX0VDQ19GTEFHX0NPRkFDVE9SID0gMHgwMSwKKyNlbmRpZgorICAgIFdDX0VDQ19GTEFHX0RFQ19TSUdOID0gMHgwMiwKK307CisKKy8qIEVDQyBub24tYmxvY2tpbmcgKi8KKyNpZmRlZiBXQ19FQ0NfTk9OQkxPQ0sKKyAgICB0eXBlZGVmIHN0cnVjdCBlY2NfbmJfY3R4IHsKKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX0hBVkVfU1BfRUNDKSAmJiBkZWZpbmVkKFdPTEZTU0xfU1BfTk9OQkxPQ0spCisgICAgICAgIHNwX2VjY19jdHhfdCBzcF9jdHg7CisgICAgI2Vsc2UKKyAgICAgICAgLyogYnVpbGQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkICovCisgICAgICAgICNlcnJvciBFQ0Mgbm9uLWJsb2NraW5nIG9ubHkgc3VwcG9ydHMgU1AgKC0tZW5hYmxlLXNwPW5vbmJsb2NrKQorICAgICNlbmRpZgorICAgIH0gZWNjX25iX2N0eF90OworI2VuZGlmIC8qIFdDX0VDQ19OT05CTE9DSyAqLworCisKKy8qIEFuIEVDQyBLZXkgKi8KK3N0cnVjdCBlY2Nfa2V5IHsKKyAgICBpbnQgdHlwZTsgICAgICAgICAgIC8qIFB1YmxpYyBvciBQcml2YXRlICovCisgICAgaW50IGlkeDsgICAgICAgICAgICAvKiBJbmRleCBpbnRvIHRoZSBlY2Nfc2V0c1tdIGZvciB0aGUgcGFyYW1ldGVycyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBjdXJ2ZSBpZiAtMSwgdGhpcyBrZXkgaXMgdXNpbmcgdXNlciBzdXBwbGllZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmUgaW4gZHAgKi8KKyAgICBpbnQgICAgc3RhdGU7CisgICAgd29yZDMyIGZsYWdzOworICAgIGNvbnN0IGVjY19zZXRfdHlwZSogZHA7ICAgICAvKiBkb21haW4gcGFyYW1ldGVycywgZWl0aGVyIHBvaW50cyB0byBOSVNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlcyAoaWR4ID49IDApIG9yIHVzZXIgc3VwcGxpZWQgKi8KKyNpZmRlZiBXT0xGU1NMX0NVU1RPTV9DVVJWRVMKKyAgICBpbnQgZGVhbGxvY1NldDsKKyNlbmRpZgorICAgIHZvaWQqIGhlYXA7ICAgICAgICAgLyogaGVhcCBoaW50ICovCisgICAgZWNjX3BvaW50IHB1YmtleTsgICAvKiBwdWJsaWMga2V5ICovCisgICAgbXBfaW50ICAgIGs7ICAgICAgICAvKiBwcml2YXRlIGtleSAqLworCisjaWZkZWYgV09MRlNTTF9RTlhfQ0FBTQorICAgIHdvcmQzMiBibGFja0tleTsgICAgIC8qIGFkZHJlc3Mgb2Yga2V5IGVuY3J5cHRlZCBhbmQgaW4gc2VjdXJlIG1lbW9yeSAqLworICAgIHdvcmQzMiBzZWN1cmVQdWJLZXk7IC8qIGFkZHJlc3Mgb2YgcHVibGljIGtleSBpbiBzZWN1cmUgbWVtb3J5ICovCisgICAgaW50ICAgIHBhcnROdW07IC8qIHBhcnRpdGlvbiBudW1iZXIqLworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0FURUNDNTA4QSkgfHwgZGVmaW5lZChXT0xGU1NMX0FURUNDNjA4QSkKKyAgICBpbnQgIHNsb3Q7ICAgICAgICAvKiBLZXkgU2xvdCBOdW1iZXIgKC0xIHVua25vd24pICovCisgICAgYnl0ZSBwdWJrZXlfcmF3W0VDQ19NQVhfQ1JZUFRPX0hXX1BVQktFWV9TSVpFXTsKKyNlbmRpZgorI2lmIGRlZmluZWQoUExVVE9OX0NSWVBUT19FQ0MpIHx8IGRlZmluZWQoV09MRl9DUllQVE9fQ0IpCisgICAgaW50IGRldklkOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9TSUxBQlNfU0VfQUNDRUwKKyAgICBzbF9zZV9jb21tYW5kX2NvbnRleHRfdCAgY21kX2N0eDsKKyAgICBzbF9zZV9rZXlfZGVzY3JpcHRvcl90ICAga2V5OworICAgIC8qIFVzZWQgZm9yIFNpTGFicyAicGxhaW50ZXh0IiB3aXRoIHB1YmxpYyBYLCBwdWJsaWMgWSwgYW5kCisgICAgICogcHJpdmF0ZSBEIGNvbmNhdGVuYXRlZC4gVGhlc2UgYXJlIHJlc3BlY3RpdmVseSBhdCBvZmZzZXQgYDBgLAorICAgICAqIG9mZnNldCBga2V5c2l6ZWAsIGFuZCBvZmZzZXQgYDIgKiBrZXlzaXplYC4KKyAgICAgKi8KKyAgICBieXRlIGtleV9yYXdbMyAqIEVDQ19NQVhfQ1JZUFRPX0hXX1NJWkVdOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgbXBfaW50KiByOyAgICAgICAgICAvKiBzaWduL3ZlcmlmeSB0ZW1wcyAqLworICAgIG1wX2ludCogczsKKyAgICBXQ19BU1lOQ19ERVYgYXN5bmNEZXY7CisgICAgI2lmZGVmIEhBVkVfQ0FWSVVNX1YKKyAgICAgICAgbXBfaW50KiBlOyAgICAgIC8qIFNpZ24sIFZlcmlmeSBhbmQgU2hhcmVkIFNlY3JldCAqLworICAgICAgICBtcF9pbnQqIHNpZ25LOworICAgICNlbmRpZgorICAgICNpZmRlZiBXT0xGU1NMX0NFUlRfR0VOCisgICAgICAgIENlcnRTaWduQ3R4IGNlcnRTaWduQ3R4OyAvKiBjb250ZXh0IGluZm8gZm9yIGNlcnQgc2lnbiAoTWFrZVNpZ25hdHVyZSkgKi8KKyAgICAjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX0FTWU5DX0NSWVBUICovCisjaWZkZWYgV09MRl9DUllQVE9fQ0IKKyAgICBieXRlIGlkW0VDQ19NQVhfSURfTEVOXTsKKyAgICBpbnQgIGlkTGVuOworICAgIGNoYXIgbGFiZWxbRUNDX01BWF9MQUJFTF9MRU5dOworICAgIGludCAgbGFiZWxMZW47CisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQ1JZUFRPQ0VMTCkKKyAgICBlY2NfY29udGV4dF90IGN0eDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX0VDRFNBX1NFVF9LKSB8fCBkZWZpbmVkKFdPTEZTU0xfRUNEU0FfU0VUX0tfT05FX0xPT1ApIHx8IFwKKyAgICBkZWZpbmVkKFdPTEZTU0xfRUNEU0FfREVURVJNSU5JU1RJQ19LKQorICAgIG1wX2ludCAqc2lnbl9rOworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0VDRFNBX0RFVEVSTUlOSVNUSUNfSykKKyAgICBieXRlIGRldGVybWluaXN0aWM6MTsKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9TTUFMTF9TVEFDS19DQUNIRQorICAgIG1wX2ludCogdDE7CisgICAgbXBfaW50KiB0MjsKKyNpZmRlZiBBTFRfRUNDX1NJWkUKKyAgICBtcF9pbnQqIHg7CisgICAgbXBfaW50KiB5OworICAgIG1wX2ludCogejsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0RTUAorICAgIHJlbW90ZV9oYW5kbGU2NCBoYW5kbGU7CisjZW5kaWYKKyNpZmRlZiBFQ0NfVElNSU5HX1JFU0lTVEFOVAorICAgIFdDX1JORyogcm5nOworI2VuZGlmCisjaWZkZWYgV0NfRUNDX05PTkJMT0NLCisgICAgZWNjX25iX2N0eF90KiBuYl9jdHg7CisjZW5kaWYKK307CisKKworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgZWNjX2tleSogd2NfZWNjX2tleV9uZXcodm9pZCopOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgdm9pZCB3Y19lY2Nfa2V5X2ZyZWUoZWNjX2tleSopOworCisKKy8qIEVDQyBwcmVkZWZpbmVkIGN1cnZlIHNldHMgICovCitleHRlcm4gY29uc3QgZWNjX3NldF90eXBlIGVjY19zZXRzW107CitleHRlcm4gY29uc3Qgc2l6ZV90IGVjY19zZXRzX2NvdW50OworCitXT0xGU1NMX0FQSQorY29uc3QgY2hhciogd2NfZWNjX2dldF9uYW1lKGludCBjdXJ2ZV9pZCk7CisKKyNpZiAhZGVmaW5lZChXT0xGU1NMX0FURUNDNTA4QSkgJiYgIWRlZmluZWQoV09MRlNTTF9BVEVDQzYwOEEpCisKKyNpZmRlZiBXT0xGU1NMX1BVQkxJQ19FQ0NfQUREX0RCTAorICAgICNkZWZpbmUgRUNDX0FQSSAgICBXT0xGU1NMX0FQSQorI2Vsc2UKKyAgICAjZGVmaW5lIEVDQ19BUEkgICAgV09MRlNTTF9MT0NBTAorI2VuZGlmCisKK0VDQ19BUEkgaW50IGVjY19tdWwyYWRkKGVjY19wb2ludCogQSwgbXBfaW50KiBrQSwKKyAgICAgICAgICAgICAgICBlY2NfcG9pbnQqIEIsIG1wX2ludCoga0IsCisgICAgICAgICAgICAgICAgZWNjX3BvaW50KiBDLCBtcF9pbnQqIGEsIG1wX2ludCogbW9kdWx1cywgdm9pZCogaGVhcCk7CisKK0VDQ19BUEkgaW50IGVjY19tYXAoZWNjX3BvaW50KiwgbXBfaW50KiwgbXBfZGlnaXQpOworRUNDX0FQSSBpbnQgZWNjX21hcF9leChlY2NfcG9pbnQqLCBtcF9pbnQqLCBtcF9kaWdpdCwgaW50IGN0KTsKK0VDQ19BUEkgaW50IGVjY19wcm9qZWN0aXZlX2FkZF9wb2ludChlY2NfcG9pbnQqIFAsIGVjY19wb2ludCogUSwgZWNjX3BvaW50KiBSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2ludCogYSwgbXBfaW50KiBtb2R1bHVzLCBtcF9kaWdpdCBtcCk7CitFQ0NfQVBJIGludCBlY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQoZWNjX3BvaW50KiBQLCBlY2NfcG9pbnQqIFIsIG1wX2ludCogYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9pbnQqIG1vZHVsdXMsIG1wX2RpZ2l0IG1wKTsKKworV09MRlNTTF9MT0NBTAoraW50IGVjY19wcm9qZWN0aXZlX2FkZF9wb2ludF9zYWZlKGVjY19wb2ludCogQSwgZWNjX3BvaW50KiBCLCBlY2NfcG9pbnQqIFIsCisgICAgbXBfaW50KiBhLCBtcF9pbnQqIG1vZHVsdXMsIG1wX2RpZ2l0IG1wLCBpbnQqIGluZmluaXR5KTsKK1dPTEZTU0xfTE9DQUwKK2ludCBlY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnRfc2FmZShlY2NfcG9pbnQqIFAsIGVjY19wb2ludCogUiwgbXBfaW50KiBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2ludCogbW9kdWx1cywgbXBfZGlnaXQgbXApOworCisjZW5kaWYKKworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfbWFrZV9rZXkoV0NfUk5HKiBybmcsIGludCBrZXlzaXplLCBlY2Nfa2V5KiBrZXkpOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfbWFrZV9rZXlfZXgoV0NfUk5HKiBybmcsIGludCBrZXlzaXplLCBlY2Nfa2V5KiBrZXksIGludCBjdXJ2ZV9pZCk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19tYWtlX2tleV9leDIoV0NfUk5HKiBybmcsIGludCBrZXlzaXplLCBlY2Nfa2V5KiBrZXksIGludCBjdXJ2ZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19tYWtlX3B1YihlY2Nfa2V5KiBrZXksIGVjY19wb2ludCogcHViT3V0KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX21ha2VfcHViX2V4KGVjY19rZXkqIGtleSwgZWNjX3BvaW50KiBwdWJPdXQsIFdDX1JORyogcm5nKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2NoZWNrX2tleShlY2Nfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfaXNfcG9pbnQoZWNjX3BvaW50KiBlY3AsIG1wX2ludCogYSwgbXBfaW50KiBiLCBtcF9pbnQqIHByaW1lKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2dldF9nZW5lcmF0b3IoZWNjX3BvaW50KiBlY3AsIGludCBjdXJ2ZV9pZHgpOworCisjaWZkZWYgSEFWRV9FQ0NfREhFCitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19zaGFyZWRfc2VjcmV0KGVjY19rZXkqIHByaXZhdGVfa2V5LCBlY2Nfa2V5KiBwdWJsaWNfa2V5LCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgd29yZDMyKiBvdXRsZW4pOworV09MRlNTTF9MT0NBTAoraW50IHdjX2VjY19zaGFyZWRfc2VjcmV0X2dlbihlY2Nfa2V5KiBwcml2YXRlX2tleSwgZWNjX3BvaW50KiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogb3V0LCB3b3JkMzIgKm91dGxlbik7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19zaGFyZWRfc2VjcmV0X2V4KGVjY19rZXkqIHByaXZhdGVfa2V5LCBlY2NfcG9pbnQqIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXQsIHdvcmQzMiAqb3V0bGVuKTsKKworI2lmIGRlZmluZWQoV09MRlNTTF9BVEVDQzUwOEEpIHx8IGRlZmluZWQoV09MRlNTTF9BVEVDQzYwOEEpIHx8IFwKKyAgICBkZWZpbmVkKFBMVVRPTl9DUllQVE9fRUNDKSB8fCBkZWZpbmVkKFdPTEZTU0xfQ1JZUFRPQ0VMTCkKKyNkZWZpbmUgd2NfZWNjX3NoYXJlZF9zZWNyZXRfc3NoIHdjX2VjY19zaGFyZWRfc2VjcmV0CisjZWxzZQorI2RlZmluZSB3Y19lY2Nfc2hhcmVkX3NlY3JldF9zc2ggd2NfZWNjX3NoYXJlZF9zZWNyZXRfZXggLyogRm9yIGJhY2t3YXJkcyBjb21wYXQgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9FQ0NfREhFICovCisKKyNpZmRlZiBIQVZFX0VDQ19TSUdOCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSQoraW50IHdjX2VjY19zaWduX2hhc2goY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpbmxlbiwgYnl0ZSogb3V0LCB3b3JkMzIgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgIFdDX1JORyogcm5nLCBlY2Nfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2Nfc2lnbl9oYXNoX2V4KGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5sZW4sIFdDX1JORyogcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSoga2V5LCBtcF9pbnQgKnIsIG1wX2ludCAqcyk7CisjaWZkZWYgV09MRlNTTF9FQ0RTQV9ERVRFUk1JTklTVElDX0sKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX3NldF9kZXRlcm1pbmlzdGljKGVjY19rZXkqIGtleSwgYnl0ZSBmbGFnKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2dlbl9kZXRlcm1pbmlzdGljX2soY29uc3QgYnl0ZSogaGFzaCwgd29yZDMyIGhhc2hTeiwKKyAgICAgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoVHlwZSwgbXBfaW50KiBwcml2LCBtcF9pbnQqIGssIG1wX2ludCogb3JkZXIsCisgICAgICAgIHZvaWQqIGhlYXApOworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0VDRFNBX1NFVF9LKSB8fCBkZWZpbmVkKFdPTEZTU0xfRUNEU0FfU0VUX0tfT05FX0xPT1ApCitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19zaWduX3NldF9rKGNvbnN0IGJ5dGUqIGssIHdvcmQzMiBrbGVuLCBlY2Nfa2V5KiBrZXkpOworI2VuZGlmCisjZW5kaWYgLyogSEFWRV9FQ0NfU0lHTiAqLworCisjaWZkZWYgSEFWRV9FQ0NfVkVSSUZZCitXT0xGU1NMX0FQSQoraW50IHdjX2VjY192ZXJpZnlfaGFzaChjb25zdCBieXRlKiBzaWcsIHdvcmQzMiBzaWdsZW4sIGNvbnN0IGJ5dGUqIGhhc2gsCisgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBoYXNobGVuLCBpbnQqIHN0YXQsIGVjY19rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY192ZXJpZnlfaGFzaF9leChtcF9pbnQgKnIsIG1wX2ludCAqcywgY29uc3QgYnl0ZSogaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGhhc2hsZW4sIGludCogc3RhdCwgZWNjX2tleSoga2V5KTsKKyNlbmRpZiAvKiBIQVZFX0VDQ19WRVJJRlkgKi8KKworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfaW5pdChlY2Nfa2V5KiBrZXkpOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfaW5pdF9leChlY2Nfa2V5KiBrZXksIHZvaWQqIGhlYXAsIGludCBkZXZJZCk7CisjaWZkZWYgV09MRl9DUllQVE9fQ0IKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2luaXRfaWQoZWNjX2tleSoga2V5LCB1bnNpZ25lZCBjaGFyKiBpZCwgaW50IGxlbiwgdm9pZCogaGVhcCwKKyAgICAgICAgICAgICAgICAgICBpbnQgZGV2SWQpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfaW5pdF9sYWJlbChlY2Nfa2V5KiBrZXksIGNvbnN0IGNoYXIqIGxhYmVsLCB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9DVVNUT01fQ1VSVkVTCitXT0xGU1NMX0xPQ0FMCit2b2lkIHdjX2VjY19mcmVlX2N1cnZlKGNvbnN0IGVjY19zZXRfdHlwZSogY3VydmUsIHZvaWQqIGhlYXApOworI2VuZGlmCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSQoraW50IHdjX2VjY19mcmVlKGVjY19rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19zZXRfZmxhZ3MoZWNjX2tleSoga2V5LCB3b3JkMzIgZmxhZ3MpOworV09MRlNTTF9BUEkKK3ZvaWQgd2NfZWNjX2ZwX2ZyZWUodm9pZCk7CitXT0xGU1NMX0xPQ0FMCit2b2lkIHdjX2VjY19mcF9pbml0KHZvaWQpOworI2lmZGVmIEVDQ19USU1JTkdfUkVTSVNUQU5UCitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19zZXRfcm5nKGVjY19rZXkqIGtleSwgV0NfUk5HKiBybmcpOworI2VuZGlmCisKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX3NldF9jdXJ2ZShlY2Nfa2V5KiBrZXksIGludCBrZXlzaXplLCBpbnQgY3VydmVfaWQpOworCitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19pc192YWxpZF9pZHgoaW50IG4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZ2V0X2N1cnZlX2lkeChpbnQgY3VydmVfaWQpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZ2V0X2N1cnZlX2lkKGludCBjdXJ2ZV9pZHgpOworI2RlZmluZSB3Y19lY2NfZ2V0X2N1cnZlX25hbWVfZnJvbV9pZCB3Y19lY2NfZ2V0X25hbWUKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2dldF9jdXJ2ZV9zaXplX2Zyb21faWQoaW50IGN1cnZlX2lkKTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZ2V0X2N1cnZlX2lkeF9mcm9tX25hbWUoY29uc3QgY2hhciogY3VydmVOYW1lKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2dldF9jdXJ2ZV9zaXplX2Zyb21fbmFtZShjb25zdCBjaGFyKiBjdXJ2ZU5hbWUpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZ2V0X2N1cnZlX2lkX2Zyb21fbmFtZShjb25zdCBjaGFyKiBjdXJ2ZU5hbWUpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZ2V0X2N1cnZlX2lkX2Zyb21fcGFyYW1zKGludCBmaWVsZFNpemUsCisgICAgICAgIGNvbnN0IGJ5dGUqIHByaW1lLCB3b3JkMzIgcHJpbWVTeiwgY29uc3QgYnl0ZSogQWYsIHdvcmQzMiBBZlN6LAorICAgICAgICBjb25zdCBieXRlKiBCZiwgd29yZDMyIEJmU3osIGNvbnN0IGJ5dGUqIG9yZGVyLCB3b3JkMzIgb3JkZXJTeiwKKyAgICAgICAgY29uc3QgYnl0ZSogR3gsIHdvcmQzMiBHeFN6LCBjb25zdCBieXRlKiBHeSwgd29yZDMyIEd5U3osIGludCBjb2ZhY3Rvcik7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19nZXRfY3VydmVfaWRfZnJvbV9kcF9wYXJhbXMoY29uc3QgZWNjX3NldF90eXBlKiBkcCk7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2dldF9jdXJ2ZV9pZF9mcm9tX29pZChjb25zdCBieXRlKiBvaWQsIHdvcmQzMiBsZW4pOworCitXT0xGU1NMX0FQSSBjb25zdCBlY2Nfc2V0X3R5cGUqIHdjX2VjY19nZXRfY3VydmVfcGFyYW1zKGludCBjdXJ2ZV9pZHgpOworCitXT0xGU1NMX0FQSQorZWNjX3BvaW50KiB3Y19lY2NfbmV3X3BvaW50KHZvaWQpOworV09MRlNTTF9BUEkKK2VjY19wb2ludCogd2NfZWNjX25ld19wb2ludF9oKHZvaWQqIGgpOworV09MRlNTTF9BUEkKK3ZvaWQgd2NfZWNjX2RlbF9wb2ludChlY2NfcG9pbnQqIHApOworV09MRlNTTF9BUEkKK3ZvaWQgd2NfZWNjX2RlbF9wb2ludF9oKGVjY19wb2ludCogcCwgdm9pZCogaCk7CitXT0xGU1NMX0FQSQordm9pZCB3Y19lY2NfZm9yY2V6ZXJvX3BvaW50KGVjY19wb2ludCogcCk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19jb3B5X3BvaW50KGNvbnN0IGVjY19wb2ludCogcCwgZWNjX3BvaW50ICpyKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2NtcF9wb2ludChlY2NfcG9pbnQqIGEsIGVjY19wb2ludCAqYik7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19wb2ludF9pc19hdF9pbmZpbml0eShlY2NfcG9pbnQgKnApOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfcG9pbnRfaXNfb25fY3VydmUoZWNjX3BvaW50ICpwLCBpbnQgY3VydmVfaWR4KTsKKworI2lmICFkZWZpbmVkKFdPTEZTU0xfQVRFQ0M1MDhBKSAmJiAhZGVmaW5lZChXT0xGU1NMX0FURUNDNjA4QSkKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX211bG1vZChjb25zdCBtcF9pbnQqIGssIGVjY19wb2ludCAqRywgZWNjX3BvaW50ICpSLAorICAgICAgICAgICAgICAgICAgbXBfaW50KiBhLCBtcF9pbnQqIG1vZHVsdXMsIGludCBtYXApOworV09MRlNTTF9MT0NBTAoraW50IHdjX2VjY19tdWxtb2RfZXgoY29uc3QgbXBfaW50KiBrLCBlY2NfcG9pbnQgKkcsIGVjY19wb2ludCAqUiwKKyAgICAgICAgICAgICAgICAgIG1wX2ludCogYSwgbXBfaW50KiBtb2R1bHVzLCBpbnQgbWFwLCB2b2lkKiBoZWFwKTsKK1dPTEZTU0xfTE9DQUwKK2ludCB3Y19lY2NfbXVsbW9kX2V4Mihjb25zdCBtcF9pbnQqIGssIGVjY19wb2ludCAqRywgZWNjX3BvaW50ICpSLCBtcF9pbnQqIGEsCisgICAgICAgICAgICAgICAgICAgICAgbXBfaW50KiBtb2R1bHVzLCBtcF9pbnQqIG9yZGVyLCBXQ19STkcqIHJuZywgaW50IG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBoZWFwKTsKKyNlbmRpZiAvKiAhV09MRlNTTF9BVEVDQzUwOEEgKi8KKworCisjaWZkZWYgSEFWRV9FQ0NfS0VZX0VYUE9SVAorLyogQVNOIGtleSBoZWxwZXJzICovCitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19leHBvcnRfeDk2MyhlY2Nfa2V5KiwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dExlbik7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19leHBvcnRfeDk2M19leChlY2Nfa2V5KiwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dExlbiwgaW50IGNvbXByZXNzZWQpOworICAgIC8qIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgd2l0aCBjb21wcmVzc2VkIG9wdGlvbiAqLworI2VuZGlmIC8qIEhBVkVfRUNDX0tFWV9FWFBPUlQgKi8KKworI2lmZGVmIEhBVkVfRUNDX0tFWV9JTVBPUlQKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2ltcG9ydF94OTYzKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGVjY19rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19pbXBvcnRfeDk2M19leChjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLCBlY2Nfa2V5KiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJ2ZV9pZCk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19pbXBvcnRfcHJpdmF0ZV9rZXkoY29uc3QgYnl0ZSogcHJpdiwgd29yZDMyIHByaXZTeiwgY29uc3QgYnl0ZSogcHViLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHB1YlN6LCBlY2Nfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfaW1wb3J0X3ByaXZhdGVfa2V5X2V4KGNvbnN0IGJ5dGUqIHByaXYsIHdvcmQzMiBwcml2U3osCisgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogcHViLCB3b3JkMzIgcHViU3osIGVjY19rZXkqIGtleSwgaW50IGN1cnZlX2lkKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX3JzX3RvX3NpZyhjb25zdCBjaGFyKiByLCBjb25zdCBjaGFyKiBzLCBieXRlKiBvdXQsIHdvcmQzMiogb3V0bGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX3JzX3Jhd190b19zaWcoY29uc3QgYnl0ZSogciwgd29yZDMyIHJTeiwgY29uc3QgYnl0ZSogcywgd29yZDMyIHNTeiwKKyAgICBieXRlKiBvdXQsIHdvcmQzMiogb3V0bGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX3NpZ190b19ycyhjb25zdCBieXRlKiBzaWcsIHdvcmQzMiBzaWdMZW4sIGJ5dGUqIHIsIHdvcmQzMiogckxlbiwKKyAgICAgICAgICAgICAgICAgICBieXRlKiBzLCB3b3JkMzIqIHNMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfaW1wb3J0X3JhdyhlY2Nfa2V5KiBrZXksIGNvbnN0IGNoYXIqIHF4LCBjb25zdCBjaGFyKiBxeSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkLCBjb25zdCBjaGFyKiBjdXJ2ZU5hbWUpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfaW1wb3J0X3Jhd19leChlY2Nfa2V5KiBrZXksIGNvbnN0IGNoYXIqIHF4LCBjb25zdCBjaGFyKiBxeSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkLCBpbnQgY3VydmVfaWQpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfaW1wb3J0X3Vuc2lnbmVkKGVjY19rZXkqIGtleSwgYnl0ZSogcXgsIGJ5dGUqIHF5LAorICAgICAgICAgICAgICAgICAgIGJ5dGUqIGQsIGludCBjdXJ2ZV9pZCk7CisjZW5kaWYgLyogSEFWRV9FQ0NfS0VZX0lNUE9SVCAqLworCisjaWZkZWYgSEFWRV9FQ0NfS0VZX0VYUE9SVAorV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZXhwb3J0X2V4KGVjY19rZXkqIGtleSwgYnl0ZSogcXgsIHdvcmQzMiogcXhMZW4sCisgICAgICAgICAgICAgICAgICAgICBieXRlKiBxeSwgd29yZDMyKiBxeUxlbiwgYnl0ZSogZCwgd29yZDMyKiBkTGVuLAorICAgICAgICAgICAgICAgICAgICAgaW50IGVuY1R5cGUpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZXhwb3J0X3ByaXZhdGVfb25seShlY2Nfa2V5KiBrZXksIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZXhwb3J0X3B1YmxpY19yYXcoZWNjX2tleSoga2V5LCBieXRlKiBxeCwgd29yZDMyKiBxeExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogcXksIHdvcmQzMiogcXlMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZXhwb3J0X3ByaXZhdGVfcmF3KGVjY19rZXkqIGtleSwgYnl0ZSogcXgsIHdvcmQzMiogcXhMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBxeSwgd29yZDMyKiBxeUxlbiwgYnl0ZSogZCwgd29yZDMyKiBkTGVuKTsKKyNlbmRpZiAvKiBIQVZFX0VDQ19LRVlfRVhQT1JUICovCisKKyNpZmRlZiBIQVZFX0VDQ19LRVlfRVhQT1JUCitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19leHBvcnRfcG9pbnRfZGVyX2V4KGNvbnN0IGludCBjdXJ2ZV9pZHgsIGVjY19wb2ludCogcG9pbnQsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIqIG91dExlbiwgaW50IGNvbXByZXNzZWQpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZXhwb3J0X3BvaW50X2Rlcihjb25zdCBpbnQgY3VydmVfaWR4LCBlY2NfcG9pbnQqIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRMZW4pOworV09MRlNTTF9MT0NBTAoraW50IHdjX2VjY19leHBvcnRfcG9pbnRfZGVyX2NvbXByZXNzZWQoY29uc3QgaW50IGN1cnZlX2lkeCwgZWNjX3BvaW50KiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRMZW4pOworI2VuZGlmIC8qIEhBVkVfRUNDX0tFWV9FWFBPUlQgKi8KKworCisjaWZkZWYgSEFWRV9FQ0NfS0VZX0lNUE9SVAorV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfaW1wb3J0X3BvaW50X2Rlcl9leChjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBjdXJ2ZV9pZHgsIGVjY19wb2ludCogcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNob3J0S2V5U2l6ZSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19pbXBvcnRfcG9pbnRfZGVyKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGNvbnN0IGludCBjdXJ2ZV9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX3BvaW50KiBwb2ludCk7CisjZW5kaWYgLyogSEFWRV9FQ0NfS0VZX0lNUE9SVCAqLworCisvKiBzaXplIGhlbHBlciAqLworV09MRlNTTF9BUEkKK2ludCB3Y19lY2Nfc2l6ZShlY2Nfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2Nfc2lnX3NpemVfY2FsYyhpbnQgc3opOworV09MRlNTTF9BUEkKK2ludCB3Y19lY2Nfc2lnX3NpemUoY29uc3QgZWNjX2tleSoga2V5KTsKKworV09MRlNTTF9BUEkKK2ludCB3Y19lY2NfZ2V0X29pZCh3b3JkMzIgb2lkU3VtLCBjb25zdCBieXRlKiogb2lkLCB3b3JkMzIqIG9pZFN6KTsKKworI2lmZGVmIFdPTEZTU0xfQ1VTVE9NX0NVUlZFUworICAgIFdPTEZTU0xfQVBJCisgICAgaW50IHdjX2VjY19zZXRfY3VzdG9tX2N1cnZlKGVjY19rZXkqIGtleSwgY29uc3QgZWNjX3NldF90eXBlKiBkcCk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfRUNDX0VOQ1JZUFQKKy8qIGVjYyBlbmNyeXB0ICovCisKK2VudW0gZWNFbmNBbGdvIHsKKyAgICBlY0FFU18xMjhfQ0JDID0gMSwgIC8qIGRlZmF1bHQgKi8KKyAgICBlY0FFU18yNTZfQ0JDID0gMgorfTsKKworZW51bSBlY0tkZkFsZ28geworICAgIGVjSEtERl9TSEEyNTYgPSAxLCAgLyogZGVmYXVsdCAqLworICAgIGVjSEtERl9TSEExICAgPSAyCit9OworCitlbnVtIGVjTWFjQWxnbyB7CisgICAgZWNITUFDX1NIQTI1NiA9IDEsICAvKiBkZWZhdWx0ICovCisgICAgZWNITUFDX1NIQTEgICA9IDIKK307CisKK2VudW0geworICAgIEtFWV9TSVpFXzEyOCAgICAgPSAxNiwKKyAgICBLRVlfU0laRV8yNTYgICAgID0gMzIsCisgICAgSVZfU0laRV82NCAgICAgICA9ICA4LAorICAgIElWX1NJWkVfMTI4ICAgICAgPSAxNiwKKyAgICBFWENIQU5HRV9TQUxUX1NaID0gMTYsCisgICAgRVhDSEFOR0VfSU5GT19TWiA9IDIzCit9OworCitlbnVtIGVjRmxhZ3MgeworICAgIFJFUV9SRVNQX0NMSUVOVCA9IDEsCisgICAgUkVRX1JFU1BfU0VSVkVSID0gMgorfTsKKworCit0eXBlZGVmIHN0cnVjdCBlY0VuY0N0eCBlY0VuY0N0eDsKKworV09MRlNTTF9BUEkKK2VjRW5jQ3R4KiB3Y19lY2NfY3R4X25ldyhpbnQgZmxhZ3MsIFdDX1JORyogcm5nKTsKK1dPTEZTU0xfQVBJCitlY0VuY0N0eCogd2NfZWNjX2N0eF9uZXdfZXgoaW50IGZsYWdzLCBXQ19STkcqIHJuZywgdm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSQordm9pZCB3Y19lY2NfY3R4X2ZyZWUoZWNFbmNDdHgqKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2N0eF9yZXNldChlY0VuY0N0eCosIFdDX1JORyopOyAgLyogcmVzZXQgZm9yIHVzZSBhZ2FpbiB3L28gYWxsb2MvZnJlZSAqLworCitXT0xGU1NMX0FQSQorY29uc3QgYnl0ZSogd2NfZWNjX2N0eF9nZXRfb3duX3NhbHQoZWNFbmNDdHgqKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2N0eF9zZXRfcGVlcl9zYWx0KGVjRW5jQ3R4KiwgY29uc3QgYnl0ZSogc2FsdCk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19jdHhfc2V0X2luZm8oZWNFbmNDdHgqLCBjb25zdCBieXRlKiBpbmZvLCBpbnQgc3opOworCitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19lbmNyeXB0KGVjY19rZXkqIHByaXZLZXksIGVjY19rZXkqIHB1YktleSwgY29uc3QgYnl0ZSogbXNnLAorICAgICAgICAgICAgICAgIHdvcmQzMiBtc2dTeiwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dFN6LCBlY0VuY0N0eCogY3R4KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2RlY3J5cHQoZWNjX2tleSogcHJpdktleSwgZWNjX2tleSogcHViS2V5LCBjb25zdCBieXRlKiBtc2csCisgICAgICAgICAgICAgICAgd29yZDMyIG1zZ1N6LCBieXRlKiBvdXQsIHdvcmQzMiogb3V0U3osIGVjRW5jQ3R4KiBjdHgpOworCisjZW5kaWYgLyogSEFWRV9FQ0NfRU5DUllQVCAqLworCisjaWZkZWYgSEFWRV9YOTYzX0tERgorV09MRlNTTF9BUEkgaW50IHdjX1g5NjNfS0RGKGVudW0gd2NfSGFzaFR5cGUgdHlwZSwgY29uc3QgYnl0ZSogc2VjcmV0LAorICAgICAgICAgICAgICAgIHdvcmQzMiBzZWNyZXRTeiwgY29uc3QgYnl0ZSogc2luZm8sIHdvcmQzMiBzaW5mb1N6LAorICAgICAgICAgICAgICAgIGJ5dGUqIG91dCwgd29yZDMyIG91dFN6KTsKKyNlbmRpZgorCisjaWZkZWYgRUNDX0NBQ0hFX0NVUlZFCitXT0xGU1NMX0FQSSBpbnQgd2NfZWNjX2N1cnZlX2NhY2hlX2luaXQodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdjX2VjY19jdXJ2ZV9jYWNoZV9mcmVlKHZvaWQpOworI2VuZGlmCisKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWNjX2dlbl9rKFdDX1JORyogcm5nLCBpbnQgc2l6ZSwgbXBfaW50KiBrLCBtcF9pbnQqIG9yZGVyKTsKKworI2lmZGVmIFdPTEZTU0xfRFNQCitXT0xGU1NMX0FQSQoraW50IHdjX2VjY19zZXRfaGFuZGxlKGVjY19rZXkqIGtleSwgcmVtb3RlX2hhbmRsZTY0IGhhbmRsZSk7CitXT0xGU1NMX0xPQ0FMCitpbnQgc3BfZHNwX2VjY192ZXJpZnlfMjU2KHJlbW90ZV9oYW5kbGU2NCBoYW5kbGUsIGNvbnN0IGJ5dGUqIGhhc2gsIHdvcmQzMiBoYXNoTGVuLCBtcF9pbnQqIHBYLAorICAgIG1wX2ludCogcFksIG1wX2ludCogcFosIG1wX2ludCogciwgbXBfaW50KiBzbSwgaW50KiByZXMsIHZvaWQqIGhlYXApOworI2VuZGlmCisKKyNpZmRlZiBXQ19FQ0NfTk9OQkxPQ0sKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfZWNjX3NldF9ub25ibG9jayhlY2Nfa2V5ICprZXksIGVjY19uYl9jdHhfdCogY3R4KTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAgIC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9FQ0MgKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0VDQ19IICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvZWNjc2kuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9lY2NzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NjM1MTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvZWNjc2kuaApAQCAtMCwwICsxLDE3NiBAQAorLyogZWNjc2kuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L2VjY3NpLmgKKyovCisKKworI2lmbmRlZiBXT0xGX0NSWVBUX0VDQ1NJX0gKKyNkZWZpbmUgV09MRl9DUllQVF9FQ0NTSV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgV09MRkNSWVBUX0hBVkVfRUNDU0kKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ludGVnZXIuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9lY2MuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9oYXNoLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaG1hYy5oPgorCisjZGVmaW5lIFdPTEZDUllQVF9FQ0NTSV9LTVMKKyNkZWZpbmUgV09MRkNSWVBUX0VDQ1NJX0NMSUVOVAorCisjZGVmaW5lIE1BWF9FQ0NTSV9CWVRFUyAgKDI1NiAvIDgpCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGxvb3BzIG9mIGF0dGVtcHRpbmcgdG8gZ2VuZXJhdGUga2V5IHBhaXJzIGFuZCBzaWduYXR1cmVzLgorICovCisjaWZuZGVmIEVDQ1NJX01BWF9HRU5fQ09VTlQKKyAgICAjZGVmaW5lIEVDQ1NJX01BWF9HRU5fQ09VTlQgICAgIDEwCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgRWNjc2lLZXlQYXJhbXMgeworICAgIC8qKiBPcmRlciAocSkgb2YgZWxsaXB0aWMgY3VydmUgYXMgYW4gTVAgaW50ZWdlci4gKi8KKyAgICBtcF9pbnQgb3JkZXI7CisjaWZkZWYgV09MRkNSWVBUX0VDQ1NJX0NMSUVOVAorICAgIC8qKiBBIHBhcmFtZXRlciBvZiBlbGxpcHRpYyBjdXJ2ZSBhcyBhbiBNUCBpbnRlZ2VyLiAqLworICAgIG1wX2ludCBhOworICAgIC8qKiBQIHBhcmFtZXRlciBvZiBlbGxpcHRpYyBjdXJ2ZSBhcyBhbiBNUCBpbnRlZ2VyLiAqLworICAgIG1wX2ludCBiOworICAgIC8qKiBQcmltZSBvZiBlbGxpcHRpYyBjdXJ2ZSBhcyBhbiBNUCBpbnRlZ2VyLiAqLworICAgIG1wX2ludCBwcmltZTsKKyNlbmRpZgorICAgIC8qKiBCYXNlIHBvaW50IGZvciBlbGxpcHRpYyBjdXJ2ZSBvcGVyYXRpb25zIGFzIGFuIEVDQyBwb2ludC4gKi8KKyAgICBlY2NfcG9pbnQqIGJhc2U7CisKKyAgICAvKiogQml0IGluZGljYXRlcyBvcmRlciAocSkgaXMgc2V0IGFzIGFuIE1QIGludGVnZXIgaW4gRUNDU0kga2V5LiAqLworICAgIGJ5dGUgaGF2ZU9yZGVyOjE7CisgICAgLyoqIEJpdCBpbmRpY2F0ZXMgQSBpcyBzZXQgYXMgYW4gTVAgaW50ZWdlciBpbiBFQ0NTSSBrZXkuICovCisgICAgYnl0ZSBoYXZlQToxOworICAgIC8qKiBCaXQgaW5kaWNhdGVzIEIgaXMgc2V0IGFzIGFuIE1QIGludGVnZXIgaW4gRUNDU0kga2V5LiAqLworICAgIGJ5dGUgaGF2ZUI6MTsKKyAgICAvKiogQml0IGluZGljYXRlcyBwcmltZSBpcyBzZXQgYXMgYW4gTVAgaW50ZWdlciBpbiBFQ0NTSSBrZXkuICovCisgICAgYnl0ZSBoYXZlUHJpbWU6MTsKKyAgICAvKiogQml0IGluZGljYXRlcyBiYXNlIHBvaW50IGlzIHNldCBhcyBhbiBNUCBpbnRlZ2VyIGluIEVDQ1NJIGtleS4gKi8KKyAgICBieXRlIGhhdmVCYXNlOjE7Cit9IEVjY3NpS2V5UGFyYW1zOworCisvKioKKyAqIEVDQ1NJIGtleS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgRWNjc2lLZXkgeworICAgIC8qKiBFQ0Mga2V5IHRvIHBlcmZvcm0gZWxsaXB0aWMgY3VydmUgb3BlcmF0aW9ucyB3aXRoLiAqLworICAgIGVjY19rZXkgZWNjOworICAgIC8qKiBFQ0Mga2V5IHRvIHBlcmZvcm0gcHVibGljIGtleSBlbGxpcHRpYyBjdXJ2ZSBvcGVyYXRpb25zIHdpdGguICovCisgICAgZWNjX2tleSBwdWJrZXk7CisgICAgLyoqIEVDQyBwYXJhbWV0ZXIgaW4gZm9ybXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBjb21wdXRhdGlvbi4gKi8KKyAgICBFY2NzaUtleVBhcmFtcyBwYXJhbXM7CisjaWZkZWYgV09MRkNSWVBUX0VDQ1NJX0NMSUVOVAorICAgIC8qKiBUZW1wb3JhcnkgTVAgaW50ZWdlciB1c2VkIGR1cmluZyBvcGVyYXRpb25zLi4gKi8KKyAgICBtcF9pbnQgdG1wOworICAgIC8qKiBTZWNyZXQgU2lnbmluZyBLZXkgKi8KKyAgICBtcF9pbnQgc3NrOworICAgIC8qKiBQdWJsaWMgVmFsaWRhdGlvbiBUb2tlbiAoUFZUKSAqLworICAgIGVjY19wb2ludCogcHZ0OworI2VuZGlmCisgICAgLyoqIEdlbmVyaWMgaGFzaCBhbGdvcml0aG0gb2JqZWN0LiAqLworICAgIHdjX0hhc2hBbGcgaGFzaDsKKyAgICAvKiogVGVtcG9yYXJ5IGJ1ZmZlciBmb3IgdXNlIGluIG9wZXJhdGlvbnMuICovCisgICAgYnl0ZSBkYXRhWyhNQVhfRUNDU0lfQllURVMgKiAyKSArIDFdOworI2lmZGVmIFdPTEZDUllQVF9FQ0NTSV9DTElFTlQKKyAgICAvKiogSGFzaCBvZiBpZGVudGl0eSAtIHVzZWQgaW4gc2lnbmluZy92ZXJpZmljYXRpb24uICovCisgICAgYnl0ZSBpZEhhc2hbV0NfTUFYX0RJR0VTVF9TSVpFXTsKKyAgICAvKiogU2l6ZSBvZiBoYXNoIG9mIGlkZW50aXR5IGluIGJ5dGVzLiAqLworICAgIGJ5dGUgaWRIYXNoU3o7CisjZW5kaWYKKyAgICAvKiogSGVhcCBoaW50IGZvciBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLiAqLworICAgIHZvaWQqIGhlYXA7CisgICAgLyoqIEJpdCBpbmRpY2F0ZXMgS1BBSyAocHVibGljIGtleSkgaXMgaW4gbW9udG9nbWVyeSBmb3JtLiAqLworICAgIHdvcmQxNiBrcGFrTW9udDoxOworfSBFY2NzaUtleTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworV09MRlNTTF9BUEkgaW50IHdjX0luaXRFY2NzaUtleShFY2NzaUtleSoga2V5LCB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworV09MRlNTTF9BUEkgaW50IHdjX0luaXRFY2NzaUtleV9leChFY2NzaUtleSoga2V5LCBpbnQga2V5U3osIGludCBjdXJ2ZUlkLAorICAgICAgICB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworV09MRlNTTF9BUEkgdm9pZCB3Y19GcmVlRWNjc2lLZXkoRWNjc2lLZXkqIGtleSk7CisKK1dPTEZTU0xfQVBJIGludCB3Y19NYWtlRWNjc2lLZXkoRWNjc2lLZXkqIGtleSwgV0NfUk5HKiBybmcpOworCitXT0xGU1NMX0FQSSBpbnQgd2NfTWFrZUVjY3NpUGFpcihFY2NzaUtleSoga2V5LCBXQ19STkcqIHJuZywKKyAgICAgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoVHlwZSwgY29uc3QgYnl0ZSogaWQsIHdvcmQzMiBpZFN6LCBtcF9pbnQqIHNzaywKKyAgICAgICAgZWNjX3BvaW50KiBwdnQpOworV09MRlNTTF9BUEkgaW50IHdjX1ZhbGlkYXRlRWNjc2lQYWlyKEVjY3NpS2V5KiBrZXksIGVudW0gd2NfSGFzaFR5cGUgaGFzaFR5cGUsCisgICAgICAgIGNvbnN0IGJ5dGUqIGlkLCB3b3JkMzIgaWRTeiwgY29uc3QgbXBfaW50KiBzc2ssIGVjY19wb2ludCogcHZ0LAorICAgICAgICBpbnQqIHZhbGlkKTsKK1dPTEZTU0xfQVBJIGludCB3Y19WYWxpZGF0ZUVjY3NpUHZ0KEVjY3NpS2V5KiBrZXksIGNvbnN0IGVjY19wb2ludCogcHZ0LAorICAgICAgICBpbnQqIHZhbGlkKTsKK1dPTEZTU0xfQVBJIGludCB3Y19FbmNvZGVFY2NzaVBhaXIoY29uc3QgRWNjc2lLZXkqIGtleSwgbXBfaW50KiBzc2ssCisgICAgICAgIGVjY19wb2ludCogcHZ0LCBieXRlKiBkYXRhLCB3b3JkMzIqIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19FbmNvZGVFY2NzaVNzayhjb25zdCBFY2NzaUtleSoga2V5LCBtcF9pbnQqIHNzaywgYnl0ZSogZGF0YSwKKyAgICAgICAgd29yZDMyKiBzeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfRW5jb2RlRWNjc2lQdnQoY29uc3QgRWNjc2lLZXkqIGtleSwgZWNjX3BvaW50KiBwdnQsCisgICAgICAgIGJ5dGUqIGRhdGEsIHdvcmQzMiogc3osIGludCByYXcpOworV09MRlNTTF9BUEkgaW50IHdjX0RlY29kZUVjY3NpUGFpcihjb25zdCBFY2NzaUtleSoga2V5LCBjb25zdCBieXRlKiBkYXRhLAorICAgICAgICB3b3JkMzIgc3osIG1wX2ludCogc3NrLCBlY2NfcG9pbnQqIHB2dCk7CitXT0xGU1NMX0FQSSBpbnQgd2NfRGVjb2RlRWNjc2lTc2soY29uc3QgRWNjc2lLZXkqIGtleSwgY29uc3QgYnl0ZSogZGF0YSwKKyAgICAgICAgd29yZDMyIHN6LCBtcF9pbnQqIHNzayk7CitXT0xGU1NMX0FQSSBpbnQgd2NfRGVjb2RlRWNjc2lQdnQoY29uc3QgRWNjc2lLZXkqIGtleSwgY29uc3QgYnl0ZSogZGF0YSwKKyAgICAgICAgd29yZDMyIHN6LCBlY2NfcG9pbnQqIHB2dCk7CitXT0xGU1NMX0FQSSBpbnQgd2NfRGVjb2RlRWNjc2lQdnRGcm9tU2lnKGNvbnN0IEVjY3NpS2V5KiBrZXksIGNvbnN0IGJ5dGUqIHNpZywKKyAgICAgICAgd29yZDMyIHN6LCBlY2NfcG9pbnQqIHB2dCk7CisKK1dPTEZTU0xfQVBJIGludCB3Y19FeHBvcnRFY2NzaUtleShFY2NzaUtleSoga2V5LCBieXRlKiBkYXRhLCB3b3JkMzIqIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19JbXBvcnRFY2NzaUtleShFY2NzaUtleSoga2V5LCBjb25zdCBieXRlKiBkYXRhLCB3b3JkMzIgc3opOworCitXT0xGU1NMX0FQSSBpbnQgd2NfRXhwb3J0RWNjc2lQcml2YXRlS2V5KEVjY3NpS2V5KiBrZXksIGJ5dGUqIGRhdGEsIHdvcmQzMiogc3opOworV09MRlNTTF9BUEkgaW50IHdjX0ltcG9ydEVjY3NpUHJpdmF0ZUtleShFY2NzaUtleSoga2V5LCBjb25zdCBieXRlKiBkYXRhLAorICAgICAgICB3b3JkMzIgc3opOworCitXT0xGU1NMX0FQSSBpbnQgd2NfRXhwb3J0RWNjc2lQdWJsaWNLZXkoRWNjc2lLZXkqIGtleSwgYnl0ZSogZGF0YSwgd29yZDMyKiBzeiwKKyAgICAgICAgaW50IHJhdyk7CitXT0xGU1NMX0FQSSBpbnQgd2NfSW1wb3J0RWNjc2lQdWJsaWNLZXkoRWNjc2lLZXkqIGtleSwgY29uc3QgYnl0ZSogZGF0YSwKKyAgICAgICAgd29yZDMyIHN6LCBpbnQgdHJ1c3RlZCk7CisKK1dPTEZTU0xfQVBJIGludCB3Y19IYXNoRWNjc2lJZChFY2NzaUtleSoga2V5LCBlbnVtIHdjX0hhc2hUeXBlIGhhc2hUeXBlLAorICAgICAgICBjb25zdCBieXRlKiBpZCwgd29yZDMyIGlkU3osIGVjY19wb2ludCogcHZ0LCBieXRlKiBoYXNoLCBieXRlKiBoYXNoU3opOworV09MRlNTTF9BUEkgaW50IHdjX1NldEVjY3NpSGFzaChFY2NzaUtleSoga2V5LCBjb25zdCBieXRlKiBoYXNoLCBieXRlIGhhc2hTeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2V0RWNjc2lQYWlyKEVjY3NpS2V5KiBrZXksIGNvbnN0IG1wX2ludCogc3NrLAorICAgICAgICBjb25zdCBlY2NfcG9pbnQqIHB2dCk7CisKK1dPTEZTU0xfQVBJIGludCB3Y19TaWduRWNjc2lIYXNoKEVjY3NpS2V5KiBrZXksIFdDX1JORyogcm5nLAorICAgICAgICBlbnVtIHdjX0hhc2hUeXBlIGhhc2hUeXBlLCBjb25zdCBieXRlKiBtc2csIHdvcmQzMiBtc2dTeiwgYnl0ZSogc2lnLAorICAgICAgICB3b3JkMzIqIHNpZ1N6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19WZXJpZnlFY2NzaUhhc2goRWNjc2lLZXkqIGtleSwgZW51bSB3Y19IYXNoVHlwZSBoYXNoVHlwZSwKKyAgICAgICAgY29uc3QgYnl0ZSogbXNnLCB3b3JkMzIgbXNnU3osIGNvbnN0IGJ5dGUqIHNpZywgd29yZDMyIHNpZ1N6LAorICAgICAgICBpbnQqIHZlcmlmaWVkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZDUllQVF9IQVZFX0VDQ1NJICovCisKKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0VDQ1NJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2VkMjU1MTkuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9lZDI1NTE5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4OTkyMwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9lZDI1NTE5LmgKQEAgLTAsMCArMSwxODMgQEAKKy8qIGVkMjU1MTkuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L2VkMjU1MTkuaAorKi8KKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfRUQyNTUxOV9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfRUQyNTUxOV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgSEFWRV9FRDI1NTE5CisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9mZV9vcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZ2Vfb3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3JhbmRvbS5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NoYTUxMi5oPgorCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc3luYy5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogaW5mbyBhYm91dCBFZERTQSBjdXJ2ZSBzcGVjaWZpY2FsbHkgZWQyNTUxOSwgZGVmaW5lZCBhcyBhbiBlbGxpcHRpYyBjdXJ2ZQorICAgb3ZlciBHRihwKSAqLworLyoKKyAgICAzMiwgICAgICAgICAgICAgICAga2V5IHNpemUKKyAgICAiRUQyNTUxOSIsICAgICAgICAgY3VydmUgbmFtZQorICAgICIyXjI1NS0xOSIsICAgICAgICBwcmltZSBudW1iZXIKKyAgICAiU0hBNTEyIiwgICAgICAgICAgaGFzaCBmdW5jdGlvbgorICAgICItMTIxNjY1LzEyMTY2NiIsICB2YWx1ZSBvZiBkCisqLworCisjZGVmaW5lIEVEMjU1MTlfS0VZX1NJWkUgICAgIDMyIC8qIHByaXZhdGUga2V5IG9ubHkgKi8KKyNkZWZpbmUgRUQyNTUxOV9TSUdfU0laRSAgICAgNjQKKworI2RlZmluZSBFRDI1NTE5X1BVQl9LRVlfU0laRSAzMiAvKiBjb21wcmVzc2VkICovCisvKiBib3RoIHByaXZhdGUgYW5kIHB1YmxpYyBrZXkgKi8KKyNkZWZpbmUgRUQyNTUxOV9QUlZfS0VZX1NJWkUgKEVEMjU1MTlfUFVCX0tFWV9TSVpFK0VEMjU1MTlfS0VZX1NJWkUpCisKKworZW51bSB7CisgICAgRWQyNTUxOSAgICA9IC0xLAorICAgIEVkMjU1MTljdHggPSAwLAorICAgIEVkMjU1MTlwaCAgPSAxLAorfTsKKworI2lmbmRlZiBXQ19FRDI1NTE5S0VZX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IGVkMjU1MTlfa2V5IGVkMjU1MTlfa2V5OworICAgICNkZWZpbmUgV0NfRUQyNTUxOUtFWV9UWVBFX0RFRklORUQKKyNlbmRpZgorCisvKiBBbiBFRDI1NTE5IEtleSAqLworc3RydWN0IGVkMjU1MTlfa2V5IHsKKyAgICBieXRlICAgIHBbRUQyNTUxOV9QVUJfS0VZX1NJWkVdOyAvKiBjb21wcmVzc2VkIHB1YmxpYyBrZXkgKi8KKyAgICBieXRlICAgIGtbRUQyNTUxOV9QUlZfS0VZX1NJWkVdOyAvKiBwcml2YXRlIGtleSA6IDMyIHNlY3JldCAtLSAzMiBwdWJsaWMgKi8KKyNpZmRlZiBGUkVFU0NBTEVfTFRDX0VDQworICAgIC8qIHVuY29tcHJlc3NlZCBwb2ludCBjb29yZGluYXRlcyAqLworICAgIGJ5dGUgcG9pbnRYW0VEMjU1MTlfS0VZX1NJWkVdOyAvKiByZWNvdmVyZWQgWCBjb29yZGluYXRlICovCisgICAgYnl0ZSBwb2ludFlbRUQyNTUxOV9LRVlfU0laRV07IC8qIFkgY29vcmRpbmF0ZSBpcyB0aGUgcHVibGljIGtleSB3aXRoIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgZmluYWwgb2N0ZXQgYWx3YXlzIHplcm8uICovCisjZW5kaWYKKyAgICB3b3JkMTYgcHViS2V5U2V0OjE7CisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIFdDX0FTWU5DX0RFViBhc3luY0RldjsKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRl9DUllQVE9fQ0IpCisgICAgaW50IGRldklkOworI2VuZGlmCit9OworCisKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQyNTUxOV9tYWtlX3B1YmxpYyhlZDI1NTE5X2tleSoga2V5LCB1bnNpZ25lZCBjaGFyKiBwdWJLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgcHViS2V5U3opOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5X21ha2Vfa2V5KFdDX1JORyogcm5nLCBpbnQga2V5c2l6ZSwgZWQyNTUxOV9rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VkMjU1MTlfc2lnbl9tc2coY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpbkxlbiwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyICpvdXRMZW4sIGVkMjU1MTlfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5Y3R4X3NpZ25fbXNnKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiAqb3V0TGVuLCBlZDI1NTE5X2tleSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogY29udGV4dCwgYnl0ZSBjb250ZXh0TGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQyNTUxOXBoX3NpZ25faGFzaChjb25zdCBieXRlKiBoYXNoLCB3b3JkMzIgaGFzaExlbiwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyICpvdXRMZW4sIGVkMjU1MTlfa2V5KiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBjb250ZXh0LCBieXRlIGNvbnRleHRMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5cGhfc2lnbl9tc2coY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpbkxlbiwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgKm91dExlbiwgZWQyNTUxOV9rZXkqIGtleSwgY29uc3QgYnl0ZSogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSBjb250ZXh0TGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQyNTUxOV9zaWduX21zZ19leChjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyICpvdXRMZW4sIGVkMjU1MTlfa2V5KiBrZXksIGJ5dGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBjb250ZXh0LCBieXRlIGNvbnRleHRMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5X3ZlcmlmeV9tc2coY29uc3QgYnl0ZSogc2lnLCB3b3JkMzIgc2lnTGVuLCBjb25zdCBieXRlKiBtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBtc2dMZW4sIGludCogc3RhdCwgZWQyNTUxOV9rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VkMjU1MTljdHhfdmVyaWZ5X21zZyhjb25zdCBieXRlKiBzaWcsIHdvcmQzMiBzaWdMZW4sIGNvbnN0IGJ5dGUqIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG1zZ0xlbiwgaW50KiBzdGF0LCBlZDI1NTE5X2tleSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBjb250ZXh0LCBieXRlIGNvbnRleHRMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5cGhfdmVyaWZ5X2hhc2goY29uc3QgYnl0ZSogc2lnLCB3b3JkMzIgc2lnTGVuLCBjb25zdCBieXRlKiBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgaGFzaExlbiwgaW50KiBzdGF0LCBlZDI1NTE5X2tleSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBjb250ZXh0LCBieXRlIGNvbnRleHRMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5cGhfdmVyaWZ5X21zZyhjb25zdCBieXRlKiBzaWcsIHdvcmQzMiBzaWdMZW4sIGNvbnN0IGJ5dGUqIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgbXNnTGVuLCBpbnQqIHN0YXQsIGVkMjU1MTlfa2V5KiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogY29udGV4dCwgYnl0ZSBjb250ZXh0TGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQyNTUxOV92ZXJpZnlfbXNnX2V4KGNvbnN0IGJ5dGUqIHNpZywgd29yZDMyIHNpZ0xlbiwgY29uc3QgYnl0ZSogbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG1zZ0xlbiwgaW50KiByZXMsIGVkMjU1MTlfa2V5KiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlIHR5cGUsIGNvbnN0IGJ5dGUqIGNvbnRleHQsIGJ5dGUgY29udGV4dExlbik7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQyNTUxOV9pbml0KGVkMjU1MTlfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5X2luaXRfZXgoZWQyNTUxOV9rZXkqIGtleSwgdm9pZCogaGVhcCwgaW50IGRldklkKTsKK1dPTEZTU0xfQVBJCit2b2lkIHdjX2VkMjU1MTlfZnJlZShlZDI1NTE5X2tleSoga2V5KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQyNTUxOV9pbXBvcnRfcHVibGljKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGVkMjU1MTlfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5X2ltcG9ydF9wcml2YXRlX29ubHkoY29uc3QgYnl0ZSogcHJpdiwgd29yZDMyIHByaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWQyNTUxOV9rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VkMjU1MTlfaW1wb3J0X3ByaXZhdGVfa2V5KGNvbnN0IGJ5dGUqIHByaXYsIHdvcmQzMiBwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogcHViLCB3b3JkMzIgcHViU3osIGVkMjU1MTlfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5X2V4cG9ydF9wdWJsaWMoZWQyNTUxOV9rZXkqLCBieXRlKiBvdXQsIHdvcmQzMiogb3V0TGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQyNTUxOV9leHBvcnRfcHJpdmF0ZV9vbmx5KGVkMjU1MTlfa2V5KiBrZXksIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5X2V4cG9ydF9wcml2YXRlKGVkMjU1MTlfa2V5KiBrZXksIGJ5dGUqIG91dCwgd29yZDMyKiBvdXRMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDI1NTE5X2V4cG9ydF9rZXkoZWQyNTUxOV9rZXkqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogcHJpdiwgd29yZDMyICpwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIHB1Yiwgd29yZDMyICpwdWJTeik7CisKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQyNTUxOV9jaGVja19rZXkoZWQyNTUxOV9rZXkqIGtleSk7CisKKy8qIHNpemUgaGVscGVyICovCitXT0xGU1NMX0FQSQoraW50IHdjX2VkMjU1MTlfc2l6ZShlZDI1NTE5X2tleSoga2V5KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQyNTUxOV9wcml2X3NpemUoZWQyNTUxOV9rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VkMjU1MTlfcHViX3NpemUoZWQyNTUxOV9rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VkMjU1MTlfc2lnX3NpemUoZWQyNTUxOV9rZXkqIGtleSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gICAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX0VEMjU1MTkgKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0VEMjU1MTlfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2VkNDQ4LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvZWQ0NDguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDU1ODVhCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2VkNDQ4LmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qIGVkNDQ4LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL3dvbGZjcnlwdC9lZDQ0OC5oCisqLworCisKKyNpZm5kZWYgV09MRl9DUllQVF9FRDQ0OF9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfRUQ0NDhfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIEhBVkVfRUQ0NDgKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ZlXzQ0OC5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2dlXzQ0OC5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3JhbmRvbS5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NoYTMuaD4KKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXN5bmMuaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIGluZm8gYWJvdXQgRWREU0EgY3VydmUgc3BlY2lmaWNhbGx5IGVkNDQ4LCBkZWZpbmVkIGFzIGFuIGVsbGlwdGljIGN1cnZlCisgKiBvdmVyIEdGKHApCisgKgorICogIDU2ICAgICAgICAgICAgICAgICBrZXkgc2l6ZQorICogICJFRDQ0OCIgICAgICAgICAgICBjdXJ2ZSBuYW1lCisgKiAgIjJeNDQ4LTJeMjI0LTEiICAgIHByaW1lIG51bWJlcgorICogICItMzkwODEiICAgICAgICAgICB2YWx1ZSBvZiBkCisgKiAgIlNIQUtFMjU2IiAgICAgICAgIGhhc2ggZnVuY3Rpb24KKyAqLworCisjZGVmaW5lIEVENDQ4X0tFWV9TSVpFICAgICA1NyAgIC8qIHByaXZhdGUga2V5IG9ubHkgKi8KKyNkZWZpbmUgRUQ0NDhfU0lHX1NJWkUgICAgIDExNCAgLyogdHdvIGVsZW1lbnRzICovCisKKyNkZWZpbmUgRUQ0NDhfUFVCX0tFWV9TSVpFIDU3ICAgLyogY29tcHJlc3NlZCAqLworLyogYm90aCBwcml2YXRlIGFuZCBwdWJsaWMga2V5ICovCisjZGVmaW5lIEVENDQ4X1BSVl9LRVlfU0laRSAoRUQ0NDhfUFVCX0tFWV9TSVpFK0VENDQ4X0tFWV9TSVpFKQorCisKK2VudW0geworICAgIEVkNDQ4ICAgID0gMCwKKyAgICBFZDQ0OHBoICA9IDEsCit9OworCisjaWZuZGVmIFdDX0VENDQ4S0VZX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IGVkNDQ4X2tleSBlZDQ0OF9rZXk7CisgICAgI2RlZmluZSBXQ19FRDQ0OEtFWV9UWVBFX0RFRklORUQKKyNlbmRpZgorCisvKiBBbiBFRDQ0OCBLZXkgKi8KK3N0cnVjdCBlZDQ0OF9rZXkgeworICAgIGJ5dGUgICAgcFtFRDQ0OF9QVUJfS0VZX1NJWkVdOyAvKiBjb21wcmVzc2VkIHB1YmxpYyBrZXkgKi8KKyAgICBieXRlICAgIGtbRUQ0NDhfUFJWX0tFWV9TSVpFXTsgLyogcHJpdmF0ZSBrZXkgOiA1NiBzZWNyZXQgLS0gNTYgcHVibGljICovCisjaWZkZWYgRlJFRVNDQUxFX0xUQ19FQ0MKKyAgICAvKiB1bmNvbXByZXNzZWQgcG9pbnQgY29vcmRpbmF0ZXMgKi8KKyAgICBieXRlIHBvaW50WFtFRDQ0OF9LRVlfU0laRV07IC8qIHJlY292ZXJlZCBYIGNvb3JkaW5hdGUgKi8KKyAgICBieXRlIHBvaW50WVtFRDQ0OF9LRVlfU0laRV07IC8qIFkgY29vcmRpbmF0ZSBpcyB0aGUgcHVibGljIGtleSB3aXRoIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgZmluYWwgb2N0ZXQgYWx3YXlzIHplcm8uICovCisjZW5kaWYKKyAgICB3b3JkMTYgcHViS2V5U2V0OjE7CisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIFdDX0FTWU5DX0RFViBhc3luY0RldjsKKyNlbmRpZgorfTsKKworCitXT0xGU1NMX0FQSQoraW50IHdjX2VkNDQ4X21ha2VfcHVibGljKGVkNDQ4X2tleSoga2V5LCB1bnNpZ25lZCBjaGFyKiBwdWJLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHB1YktleVN6KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQ0NDhfbWFrZV9rZXkoV0NfUk5HKiBybmcsIGludCBrZXlzaXplLCBlZDQ0OF9rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VkNDQ4X3NpZ25fbXNnKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqIG91dCwgd29yZDMyICpvdXRMZW4sCisgICAgICAgICAgICAgICAgICAgICAgZWQ0NDhfa2V5KiBrZXksIGNvbnN0IGJ5dGUqIGNvbnRleHQsIGJ5dGUgY29udGV4dExlbik7CitXT0xGU1NMX0FQSQoraW50IHdjX2VkNDQ4cGhfc2lnbl9oYXNoKGNvbnN0IGJ5dGUqIGhhc2gsIHdvcmQzMiBoYXNoTGVuLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyICpvdXRMZW4sIGVkNDQ4X2tleSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGNvbnRleHQsIGJ5dGUgY29udGV4dExlbik7CitXT0xGU1NMX0FQSQoraW50IHdjX2VkNDQ4cGhfc2lnbl9tc2coY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpbkxlbiwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyICpvdXRMZW4sIGVkNDQ4X2tleSoga2V5LCBjb25zdCBieXRlKiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSBjb250ZXh0TGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQ0NDhfdmVyaWZ5X21zZyhjb25zdCBieXRlKiBzaWcsIHdvcmQzMiBzaWdMZW4sIGNvbnN0IGJ5dGUqIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBtc2dMZW4sIGludCogc3RhdCwgZWQ0NDhfa2V5KiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBjb250ZXh0LCBieXRlIGNvbnRleHRMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDQ0OHBoX3ZlcmlmeV9oYXNoKGNvbnN0IGJ5dGUqIHNpZywgd29yZDMyIHNpZ0xlbiwgY29uc3QgYnl0ZSogaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBoYXNoTGVuLCBpbnQqIHN0YXQsIGVkNDQ4X2tleSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogY29udGV4dCwgYnl0ZSBjb250ZXh0TGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQ0NDhwaF92ZXJpZnlfbXNnKGNvbnN0IGJ5dGUqIHNpZywgd29yZDMyIHNpZ0xlbiwgY29uc3QgYnl0ZSogbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgbXNnTGVuLCBpbnQqIHN0YXQsIGVkNDQ4X2tleSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBjb250ZXh0LCBieXRlIGNvbnRleHRMZW4pOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDQ0OF9pbml0KGVkNDQ4X2tleSoga2V5KTsKK1dPTEZTU0xfQVBJCit2b2lkIHdjX2VkNDQ4X2ZyZWUoZWQ0NDhfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDQ0OF9pbXBvcnRfcHVibGljKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGVkNDQ4X2tleSoga2V5KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQ0NDhfaW1wb3J0X3ByaXZhdGVfb25seShjb25zdCBieXRlKiBwcml2LCB3b3JkMzIgcHJpdlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWQ0NDhfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDQ0OF9pbXBvcnRfcHJpdmF0ZV9rZXkoY29uc3QgYnl0ZSogcHJpdiwgd29yZDMyIHByaXZTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogcHViLCB3b3JkMzIgcHViU3osIGVkNDQ4X2tleSoga2V5KTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQ0NDhfZXhwb3J0X3B1YmxpYyhlZDQ0OF9rZXkqLCBieXRlKiBvdXQsIHdvcmQzMiogb3V0TGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQ0NDhfZXhwb3J0X3ByaXZhdGVfb25seShlZDQ0OF9rZXkqIGtleSwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dExlbik7CitXT0xGU1NMX0FQSQoraW50IHdjX2VkNDQ4X2V4cG9ydF9wcml2YXRlKGVkNDQ4X2tleSoga2V5LCBieXRlKiBvdXQsIHdvcmQzMiogb3V0TGVuKTsKK1dPTEZTU0xfQVBJCitpbnQgd2NfZWQ0NDhfZXhwb3J0X2tleShlZDQ0OF9rZXkqIGtleSwgYnl0ZSogcHJpdiwgd29yZDMyICpwcml2U3osCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBwdWIsIHdvcmQzMiAqcHViU3opOworCitXT0xGU1NMX0FQSQoraW50IHdjX2VkNDQ4X2NoZWNrX2tleShlZDQ0OF9rZXkqIGtleSk7CisKKy8qIHNpemUgaGVscGVyICovCitXT0xGU1NMX0FQSQoraW50IHdjX2VkNDQ4X3NpemUoZWQ0NDhfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDQ0OF9wcml2X3NpemUoZWQ0NDhfa2V5KiBrZXkpOworV09MRlNTTF9BUEkKK2ludCB3Y19lZDQ0OF9wdWJfc2l6ZShlZDQ0OF9rZXkqIGtleSk7CitXT0xGU1NMX0FQSQoraW50IHdjX2VkNDQ4X3NpZ19zaXplKGVkNDQ4X2tleSoga2V5KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIEhBVkVfRUQ0NDggKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0VENDQ4X0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9lcnJvci1jcnlwdC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2Vycm9yLWNyeXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2YWMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9lcnJvci1jcnlwdC5oCkBAIC0wLDAgKzEsMjY0IEBACisvKiBlcnJvci1jcnlwdC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvZXJyb3ItY3J5cHQuaAorKi8KKy8qCitERVNDUklQVElPTgorVGhpcyBsaWJyYXJ5IGRlZmluZXMgZXJyb3IgY29kZXMgYW5kIGNvbnRpYW5zIHJvdXRpbmVzIGZvciBzZXR0aW5nIGFuZCBleGFtaW5pbmcKK3RoZSBlcnJvciBzdGF0dXMuCisqLworCisjaWZuZGVmIFdPTEZfQ1JZUFRfRVJST1JfSAorI2RlZmluZSBXT0xGX0NSWVBUX0VSUk9SX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorICAgICghZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgfHwgKEhBVkVfRklQU19WRVJTSU9OIDwgMikpCisJI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvZXJyb3ItY3J5cHQuaD4KKyNlbmRpZiAvKiBIQVZFX0ZJUFMgVjEgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiBlcnJvciBjb2RlcywgYWRkIHN0cmluZyBmb3IgbmV3IGVycm9ycyAhISEgKi8KK2VudW0geworICAgIE1BWF9DT0RFX0UgICAgICAgICA9IC0xMDAsICAvKiBlcnJvcnMgLTEwMSAtIC0yOTkgKi8KKyAgICBPUEVOX1JBTl9FICAgICAgICAgPSAtMTAxLCAgLyogb3BlbmluZyByYW5kb20gZGV2aWNlIGVycm9yICovCisgICAgUkVBRF9SQU5fRSAgICAgICAgID0gLTEwMiwgIC8qIHJlYWRpbmcgcmFuZG9tIGRldmljZSBlcnJvciAqLworICAgIFdJTkNSWVBUX0UgICAgICAgICA9IC0xMDMsICAvKiB3aW5kb3dzIGNyeXB0IGluaXQgZXJyb3IgKi8KKyAgICBDUllQVEdFTl9FICAgICAgICAgPSAtMTA0LCAgLyogd2luZG93cyBjcnlwdCBnZW5lcmF0aW9uIGVycm9yICovCisgICAgUkFOX0JMT0NLX0UgICAgICAgID0gLTEwNSwgIC8qIHJlYWRpbmcgcmFuZG9tIGRldmljZSB3b3VsZCBibG9jayAqLworICAgIEJBRF9NVVRFWF9FICAgICAgICA9IC0xMDYsICAvKiBCYWQgbXV0ZXggb3BlcmF0aW9uICovCisgICAgV0NfVElNRU9VVF9FICAgICAgID0gLTEwNywgIC8qIHRpbWVvdXQgZXJyb3IgKi8KKyAgICBXQ19QRU5ESU5HX0UgICAgICAgPSAtMTA4LCAgLyogd29sZkNyeXB0IG9wZXJhdGlvbiBwZW5kaW5nICh3b3VsZCBibG9jaykgKi8KKyAgICBXQ19OT1RfUEVORElOR19FICAgPSAtMTA5LCAgLyogd29sZkNyeXB0IG9wZXJhdGlvbiBub3QgcGVuZGluZyAqLworCisgICAgTVBfSU5JVF9FICAgICAgICAgID0gLTExMCwgIC8qIG1wX2luaXQgZXJyb3Igc3RhdGUgKi8KKyAgICBNUF9SRUFEX0UgICAgICAgICAgPSAtMTExLCAgLyogbXBfcmVhZCBlcnJvciBzdGF0ZSAqLworICAgIE1QX0VYUFRNT0RfRSAgICAgICA9IC0xMTIsICAvKiBtcF9leHB0bW9kIGVycm9yIHN0YXRlICovCisgICAgTVBfVE9fRSAgICAgICAgICAgID0gLTExMywgIC8qIG1wX3RvX3h4eCBlcnJvciBzdGF0ZSwgY2FuJ3QgY29udmVydCAqLworICAgIE1QX1NVQl9FICAgICAgICAgICA9IC0xMTQsICAvKiBtcF9zdWIgZXJyb3Igc3RhdGUsIGNhbid0IHN1YnRyYWN0ICovCisgICAgTVBfQUREX0UgICAgICAgICAgID0gLTExNSwgIC8qIG1wX2FkZCBlcnJvciBzdGF0ZSwgY2FuJ3QgYWRkICovCisgICAgTVBfTVVMX0UgICAgICAgICAgID0gLTExNiwgIC8qIG1wX211bCBlcnJvciBzdGF0ZSwgY2FuJ3QgbXVsdGlwbHkgKi8KKyAgICBNUF9NVUxNT0RfRSAgICAgICAgPSAtMTE3LCAgLyogbXBfbXVsbW9kIGVycm9yIHN0YXRlLCBjYW4ndCBtdWx0aXBseSBtb2QgKi8KKyAgICBNUF9NT0RfRSAgICAgICAgICAgPSAtMTE4LCAgLyogbXBfbW9kIGVycm9yIHN0YXRlLCBjYW4ndCBtb2QgKi8KKyAgICBNUF9JTlZNT0RfRSAgICAgICAgPSAtMTE5LCAgLyogbXBfaW52bW9kIGVycm9yIHN0YXRlLCBjYW4ndCBpbnYgbW9kICovCisgICAgTVBfQ01QX0UgICAgICAgICAgID0gLTEyMCwgIC8qIG1wX2NtcCBlcnJvciBzdGF0ZSAqLworICAgIE1QX1pFUk9fRSAgICAgICAgICA9IC0xMjEsICAvKiBnb3QgYSBtcCB6ZXJvIHJlc3VsdCwgbm90IGV4cGVjdGVkICovCisKKyAgICBNRU1PUllfRSAgICAgICAgICAgPSAtMTI1LCAgLyogb3V0IG9mIG1lbW9yeSBlcnJvciAqLworICAgIFZBUl9TVEFURV9DSEFOR0VfRSA9IC0xMjYsICAvKiB2YXIgc3RhdGUgbW9kaWZpZWQgYnkgZGlmZmVyZW50IHRocmVhZCAqLworCisgICAgUlNBX1dST05HX1RZUEVfRSAgID0gLTEzMCwgIC8qIFJTQSB3cm9uZyBibG9jayB0eXBlIGZvciBSU0EgZnVuY3Rpb24gKi8KKyAgICBSU0FfQlVGRkVSX0UgICAgICAgPSAtMTMxLCAgLyogUlNBIGJ1ZmZlciBlcnJvciwgb3V0cHV0IHRvbyBzbWFsbCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCB0b28gbGFyZ2UgKi8KKyAgICBCVUZGRVJfRSAgICAgICAgICAgPSAtMTMyLCAgLyogb3V0cHV0IGJ1ZmZlciB0b28gc21hbGwgb3IgaW5wdXQgdG9vIGxhcmdlICovCisgICAgQUxHT19JRF9FICAgICAgICAgID0gLTEzMywgIC8qIHNldHRpbmcgYWxnbyBpZCBlcnJvciAqLworICAgIFBVQkxJQ19LRVlfRSAgICAgICA9IC0xMzQsICAvKiBzZXR0aW5nIHB1YmxpYyBrZXkgZXJyb3IgKi8KKyAgICBEQVRFX0UgICAgICAgICAgICAgPSAtMTM1LCAgLyogc2V0dGluZyBkYXRlIHZhbGlkaXR5IGVycm9yICovCisgICAgU1VCSkVDVF9FICAgICAgICAgID0gLTEzNiwgIC8qIHNldHRpbmcgc3ViamVjdCBuYW1lIGVycm9yICovCisgICAgSVNTVUVSX0UgICAgICAgICAgID0gLTEzNywgIC8qIHNldHRpbmcgaXNzdWVyICBuYW1lIGVycm9yICovCisgICAgQ0FfVFJVRV9FICAgICAgICAgID0gLTEzOCwgIC8qIHNldHRpbmcgQ0EgYmFzaWMgY29uc3RyYWludCB0cnVlIGVycm9yICovCisgICAgRVhURU5TSU9OU19FICAgICAgID0gLTEzOSwgIC8qIHNldHRpbmcgZXh0ZW5zaW9ucyBlcnJvciAqLworCisgICAgQVNOX1BBUlNFX0UgICAgICAgID0gLTE0MCwgIC8qIEFTTiBwYXJzaW5nIGVycm9yLCBpbnZhbGlkIGlucHV0ICovCisgICAgQVNOX1ZFUlNJT05fRSAgICAgID0gLTE0MSwgIC8qIEFTTiB2ZXJzaW9uIGVycm9yLCBpbnZhbGlkIG51bWJlciAqLworICAgIEFTTl9HRVRJTlRfRSAgICAgICA9IC0xNDIsICAvKiBBU04gZ2V0IGJpZyBpbnQgZXJyb3IsIGludmFsaWQgZGF0YSAqLworICAgIEFTTl9SU0FfS0VZX0UgICAgICA9IC0xNDMsICAvKiBBU04ga2V5IGluaXQgZXJyb3IsIGludmFsaWQgaW5wdXQgKi8KKyAgICBBU05fT0JKRUNUX0lEX0UgICAgPSAtMTQ0LCAgLyogQVNOIG9iamVjdCBpZCBlcnJvciwgaW52YWxpZCBpZCAqLworICAgIEFTTl9UQUdfTlVMTF9FICAgICA9IC0xNDUsICAvKiBBU04gdGFnIGVycm9yLCBub3QgbnVsbCAqLworICAgIEFTTl9FWFBFQ1RfMF9FICAgICA9IC0xNDYsICAvKiBBU04gZXhwZWN0IGVycm9yLCBub3QgemVybyAqLworICAgIEFTTl9CSVRTVFJfRSAgICAgICA9IC0xNDcsICAvKiBBU04gYml0IHN0cmluZyBlcnJvciwgd3JvbmcgaWQgKi8KKyAgICBBU05fVU5LTk9XTl9PSURfRSAgPSAtMTQ4LCAgLyogQVNOIG9pZCBlcnJvciwgdW5rbm93biBzdW0gaWQgKi8KKyAgICBBU05fREFURV9TWl9FICAgICAgPSAtMTQ5LCAgLyogQVNOIGRhdGUgZXJyb3IsIGJhZCBzaXplICovCisgICAgQVNOX0JFRk9SRV9EQVRFX0UgID0gLTE1MCwgIC8qIEFTTiBkYXRlIGVycm9yLCBjdXJyZW50IGRhdGUgYmVmb3JlICovCisgICAgQVNOX0FGVEVSX0RBVEVfRSAgID0gLTE1MSwgIC8qIEFTTiBkYXRlIGVycm9yLCBjdXJyZW50IGRhdGUgYWZ0ZXIgKi8KKyAgICBBU05fU0lHX09JRF9FICAgICAgPSAtMTUyLCAgLyogQVNOIHNpZ25hdHVyZSBlcnJvciwgbWlzbWF0Y2hlZCBvaWQgKi8KKyAgICBBU05fVElNRV9FICAgICAgICAgPSAtMTUzLCAgLyogQVNOIHRpbWUgZXJyb3IsIHVua25vd24gdGltZSB0eXBlICovCisgICAgQVNOX0lOUFVUX0UgICAgICAgID0gLTE1NCwgIC8qIEFTTiBpbnB1dCBlcnJvciwgbm90IGVub3VnaCBkYXRhICovCisgICAgQVNOX1NJR19DT05GSVJNX0UgID0gLTE1NSwgIC8qIEFTTiBzaWcgZXJyb3IsIGNvbmZpcm0gZmFpbHVyZSAqLworICAgIEFTTl9TSUdfSEFTSF9FICAgICA9IC0xNTYsICAvKiBBU04gc2lnIGVycm9yLCB1bnN1cHBvcnRlZCBoYXNoIHR5cGUgKi8KKyAgICBBU05fU0lHX0tFWV9FICAgICAgPSAtMTU3LCAgLyogQVNOIHNpZyBlcnJvciwgdW5zdXBwb3J0ZWQga2V5IHR5cGUgKi8KKyAgICBBU05fREhfS0VZX0UgICAgICAgPSAtMTU4LCAgLyogQVNOIGtleSBpbml0IGVycm9yLCBpbnZhbGlkIGlucHV0ICovCisgICAgQVNOX05UUlVfS0VZX0UgICAgID0gLTE1OSwgIC8qIEFTTiBudHJ1IGtleSBkZWNvZGUgZXJyb3IsIGludmFsaWQgaW5wdXQgKi8KKyAgICBBU05fQ1JJVF9FWFRfRSAgICAgPSAtMTYwLCAgLyogQVNOIHVuc3VwcG9ydGVkIGNyaXRpY2FsIGV4dGVuc2lvbiAqLworICAgIEFTTl9BTFRfTkFNRV9FICAgICA9IC0xNjEsICAvKiBBU04gYWx0ZXJuYXRlIG5hbWUgZXJyb3IgKi8KKyAgICBBU05fTk9fUEVNX0hFQURFUiAgPSAtMTYyLCAgLyogQVNOIG5vIFBFTSBoZWFkZXIgZm91bmQgKi8KKworICAgIEVDQ19CQURfQVJHX0UgICAgICA9IC0xNzAsICAvKiBFQ0MgaW5wdXQgYXJndW1lbnQgb2Ygd3JvbmcgdHlwZSAqLworICAgIEFTTl9FQ0NfS0VZX0UgICAgICA9IC0xNzEsICAvKiBBU04gRUNDIGJhZCBpbnB1dCAqLworICAgIEVDQ19DVVJWRV9PSURfRSAgICA9IC0xNzIsICAvKiBVbnN1cHBvcnRlZCBFQ0MgT0lEIGN1cnZlIHR5cGUgKi8KKyAgICBCQURfRlVOQ19BUkcgICAgICAgPSAtMTczLCAgLyogQmFkIGZ1bmN0aW9uIGFyZ3VtZW50IHByb3ZpZGVkICovCisgICAgTk9UX0NPTVBJTEVEX0lOICAgID0gLTE3NCwgIC8qIEZlYXR1cmUgbm90IGNvbXBpbGVkIGluICovCisgICAgVU5JQ09ERV9TSVpFX0UgICAgID0gLTE3NSwgIC8qIFVuaWNvZGUgcGFzc3dvcmQgdG9vIGJpZyAqLworICAgIE5PX1BBU1NXT1JEICAgICAgICA9IC0xNzYsICAvKiBubyBwYXNzd29yZCBwcm92aWRlZCBieSB1c2VyICovCisgICAgQUxUX05BTUVfRSAgICAgICAgID0gLTE3NywgIC8qIGFsdCBuYW1lIHNpemUgcHJvYmxlbSwgdG9vIGJpZyAqLworICAgIEJBRF9PQ1NQX1JFU1BPTkRFUiA9IC0xNzgsICAvKiBtaXNzaW5nIGtleSB1c2FnZSBleHRlbnNpb25zICovCisKKyAgICBBRVNfR0NNX0FVVEhfRSAgICAgPSAtMTgwLCAgLyogQUVTLUdDTSBBdXRoZW50aWNhdGlvbiBjaGVjayBmYWlsdXJlICovCisgICAgQUVTX0NDTV9BVVRIX0UgICAgID0gLTE4MSwgIC8qIEFFUy1DQ00gQXV0aGVudGljYXRpb24gY2hlY2sgZmFpbHVyZSAqLworCisgICAgQVNZTkNfSU5JVF9FICAgICAgID0gLTE4MiwgIC8qIEFzeW5jIEluaXQgdHlwZSBlcnJvciAqLworCisgICAgQ09NUFJFU1NfSU5JVF9FICAgID0gLTE4MywgIC8qIENvbXByZXNzIGluaXQgZXJyb3IgKi8KKyAgICBDT01QUkVTU19FICAgICAgICAgPSAtMTg0LCAgLyogQ29tcHJlc3MgZXJyb3IgKi8KKyAgICBERUNPTVBSRVNTX0lOSVRfRSAgPSAtMTg1LCAgLyogRGVDb21wcmVzcyBpbml0IGVycm9yICovCisgICAgREVDT01QUkVTU19FICAgICAgID0gLTE4NiwgIC8qIERlQ29tcHJlc3MgZXJyb3IgKi8KKworICAgIEJBRF9BTElHTl9FICAgICAgICAgPSAtMTg3LCAgLyogQmFkIGFsaWdubWVudCBmb3Igb3BlcmF0aW9uLCBubyBhbGxvYyAqLworICAgIEFTTl9OT19TSUdORVJfRSAgICAgPSAtMTg4LCAgLyogQVNOIG5vIHNpZ25lciB0byBjb25maXJtIGZhaWx1cmUgKi8KKyAgICBBU05fQ1JMX0NPTkZJUk1fRSAgID0gLTE4OSwgIC8qIEFTTiBDUkwgc2lnbmF0dXJlIGNvbmZpcm0gZmFpbHVyZSAqLworICAgIEFTTl9DUkxfTk9fU0lHTkVSX0UgPSAtMTkwLCAgLyogQVNOIENSTCBubyBzaWduZXIgdG8gY29uZmlybSBmYWlsdXJlICovCisgICAgQVNOX09DU1BfQ09ORklSTV9FICA9IC0xOTEsICAvKiBBU04gT0NTUCBzaWduYXR1cmUgY29uZmlybSBmYWlsdXJlICovCisKKyAgICBCQURfU1RBVEVfRSAgICAgICAgID0gLTE5MiwgIC8qIEJhZCBzdGF0ZSBvcGVyYXRpb24gKi8KKyAgICBCQURfUEFERElOR19FICAgICAgID0gLTE5MywgIC8qIEJhZCBwYWRkaW5nLCBtc2cgbm90IGNvcnJlY3QgbGVuZ3RoICAqLworCisgICAgUkVRX0FUVFJJQlVURV9FICAgICA9IC0xOTQsICAvKiBzZXR0aW5nIGNlcnQgcmVxdWVzdCBhdHRyaWJ1dGVzIGVycm9yICovCisKKyAgICBQS0NTN19PSURfRSAgICAgICAgID0gLTE5NSwgIC8qIFBLQ1MjNywgbWlzbWF0Y2hlZCBPSUQgZXJyb3IgKi8KKyAgICBQS0NTN19SRUNJUF9FICAgICAgID0gLTE5NiwgIC8qIFBLQ1MjNywgcmVjaXBpZW50IGVycm9yICovCisgICAgRklQU19OT1RfQUxMT1dFRF9FICA9IC0xOTcsICAvKiBGSVBTIG5vdCBhbGxvd2VkIGVycm9yICovCisgICAgQVNOX05BTUVfSU5WQUxJRF9FICA9IC0xOTgsICAvKiBBU04gbmFtZSBjb25zdHJhaW50IGVycm9yICovCisKKyAgICBSTkdfRkFJTFVSRV9FICAgICAgID0gLTE5OSwgIC8qIFJORyBGYWlsZWQsIFJlaW5pdGlhbGl6ZSAqLworICAgIEhNQUNfTUlOX0tFWUxFTl9FICAgPSAtMjAwLCAgLyogRklQUyBNb2RlIEhNQUMgTWluaW11bSBLZXkgTGVuZ3RoIGVycm9yICovCisgICAgUlNBX1BBRF9FICAgICAgICAgICA9IC0yMDEsICAvKiBSU0EgUGFkZGluZyBFcnJvciAqLworICAgIExFTkdUSF9PTkxZX0UgICAgICAgPSAtMjAyLCAgLyogUmV0dXJuaW5nIG91dHB1dCBsZW5ndGggb25seSAqLworCisgICAgSU5fQ09SRV9GSVBTX0UgICAgICA9IC0yMDMsICAvKiBJbiBDb3JlIEludGVncml0eSBjaGVjayBmYWlsdXJlICovCisgICAgQUVTX0tBVF9GSVBTX0UgICAgICA9IC0yMDQsICAvKiBBRVMgS0FUIGZhaWx1cmUgKi8KKyAgICBERVMzX0tBVF9GSVBTX0UgICAgID0gLTIwNSwgIC8qIERFUzMgS0FUIGZhaWx1cmUgKi8KKyAgICBITUFDX0tBVF9GSVBTX0UgICAgID0gLTIwNiwgIC8qIEhNQUMgS0FUIGZhaWx1cmUgKi8KKyAgICBSU0FfS0FUX0ZJUFNfRSAgICAgID0gLTIwNywgIC8qIFJTQSBLQVQgZmFpbHVyZSAqLworICAgIERSQkdfS0FUX0ZJUFNfRSAgICAgPSAtMjA4LCAgLyogSEFTSCBEUkJHIEtBVCBmYWlsdXJlICovCisgICAgRFJCR19DT05UX0ZJUFNfRSAgICA9IC0yMDksICAvKiBIQVNIIERSQkcgQ29udGludW91cyB0ZXN0IGZhaWx1cmUgKi8KKyAgICBBRVNHQ01fS0FUX0ZJUFNfRSAgID0gLTIxMCwgIC8qIEFFU0dDTSBLQVQgZmFpbHVyZSAqLworICAgIFRIUkVBRF9TVE9SRV9LRVlfRSAgPSAtMjExLCAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2Uga2V5IGNyZWF0ZSBmYWlsdXJlICovCisgICAgVEhSRUFEX1NUT1JFX1NFVF9FICA9IC0yMTIsICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZSBrZXkgc2V0IGZhaWx1cmUgKi8KKworICAgIE1BQ19DTVBfRkFJTEVEX0UgICAgPSAtMjEzLCAgLyogTUFDIGNvbXBhcmlzb24gZmFpbGVkICovCisgICAgSVNfUE9JTlRfRSAgICAgICAgICA9IC0yMTQsICAvKiBFQ0MgaXMgcG9pbnQgb24gY3VydmUgZmFpbGVkICovCisgICAgRUNDX0lORl9FICAgICAgICAgICA9IC0yMTUsICAvKiBFQ0MgcG9pbnQgaW5maW5pdHkgZXJyb3IgKi8KKyAgICBFQ0NfUFJJVl9LRVlfRSAgICAgID0gLTIxNiwgIC8qIEVDQyBwcml2YXRlIGtleSBub3QgdmFsaWQgZXJyb3IgKi8KKyAgICBFQ0NfT1VUX09GX1JBTkdFX0UgID0gLTIxNywgIC8qIEVDQyBrZXkgY29tcG9uZW50IG91dCBvZiByYW5nZSAqLworCisgICAgU1JQX0NBTExfT1JERVJfRSAgICA9IC0yMTgsICAvKiBTUlAgZnVuY3Rpb24gY2FsbGVkIGluIHRoZSB3cm9uZyBvcmRlci4gKi8KKyAgICBTUlBfVkVSSUZZX0UgICAgICAgID0gLTIxOSwgIC8qIFNSUCBwcm9vZiB2ZXJpZmljYXRpb24gZmFpbGVkLiAqLworICAgIFNSUF9CQURfS0VZX0UgICAgICAgPSAtMjIwLCAgLyogU1JQIGJhZCBlcGhlbWVyYWwgdmFsdWVzLiAqLworCisgICAgQVNOX05PX1NLSUQgICAgICAgICA9IC0yMjEsICAvKiBBU04gbm8gU3ViamVjdCBLZXkgSWRlbnRpZmllciBmb3VuZCAqLworICAgIEFTTl9OT19BS0lEICAgICAgICAgPSAtMjIyLCAgLyogQVNOIG5vIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllciBmb3VuZCAqLworICAgIEFTTl9OT19LRVlVU0FHRSAgICAgPSAtMjIzLCAgLyogQVNOIG5vIEtleSBVc2FnZSBmb3VuZCAqLworICAgIFNLSURfRSAgICAgICAgICAgICAgPSAtMjI0LCAgLyogc2V0dGluZyBTdWJqZWN0IEtleSBJZGVudGlmaWVyIGVycm9yICovCisgICAgQUtJRF9FICAgICAgICAgICAgICA9IC0yMjUsICAvKiBzZXR0aW5nIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllciBlcnJvciAqLworICAgIEtFWVVTQUdFX0UgICAgICAgICAgPSAtMjI2LCAgLyogQmFkIEtleSBVc2FnZSB2YWx1ZSAqLworICAgIENFUlRQT0xJQ0lFU19FICAgICAgPSAtMjI3LCAgLyogc2V0dGluZyBDZXJ0aWZpY2F0ZSBQb2xpY2llcyBlcnJvciAqLworCisgICAgV0NfSU5JVF9FICAgICAgICAgICA9IC0yMjgsICAvKiB3b2xmY3J5cHQgZmFpbGVkIHRvIGluaXRpYWxpemUgKi8KKyAgICBTSUdfVkVSSUZZX0UgICAgICAgID0gLTIyOSwgIC8qIHdvbGZjcnlwdCBzaWduYXR1cmUgdmVyaWZ5IGVycm9yICovCisgICAgQkFEX0NPTkRfRSAgICAgICAgICA9IC0yMzAsICAvKiBCYWQgY29uZGl0aW9uIHZhcmlhYmxlIG9wZXJhdGlvbiAqLworICAgIFNJR19UWVBFX0UgICAgICAgICAgPSAtMjMxLCAgLyogU2lnbmF0dXJlIFR5cGUgbm90IGVuYWJsZWQvYXZhaWxhYmxlICovCisgICAgSEFTSF9UWVBFX0UgICAgICAgICA9IC0yMzIsICAvKiBIYXNoIFR5cGUgbm90IGVuYWJsZWQvYXZhaWxhYmxlICovCisKKyAgICBXQ19LRVlfU0laRV9FICAgICAgID0gLTIzNCwgIC8qIEtleSBzaXplIGVycm9yLCBlaXRoZXIgdG9vIHNtYWxsIG9yIGxhcmdlICovCisgICAgQVNOX0NPVU5UUllfU0laRV9FICA9IC0yMzUsICAvKiBBU04gQ2VydCBHZW4sIGludmFsaWQgY291bnRyeSBjb2RlIHNpemUgKi8KKyAgICBNSVNTSU5HX1JOR19FICAgICAgID0gLTIzNiwgIC8qIFJORyByZXF1aXJlZCBidXQgbm90IHByb3ZpZGVkICovCisgICAgQVNOX1BBVEhMRU5fU0laRV9FICA9IC0yMzcsICAvKiBBU04gQ0EgcGF0aCBsZW5ndGggdG9vIGxhcmdlIGVycm9yICovCisgICAgQVNOX1BBVEhMRU5fSU5WX0UgICA9IC0yMzgsICAvKiBBU04gQ0EgcGF0aCBsZW5ndGggaW52ZXJzaW9uIGVycm9yICovCisKKyAgICBCQURfS0VZV1JBUF9BTEdfRSAgID0gLTIzOSwKKyAgICBCQURfS0VZV1JBUF9JVl9FICAgID0gLTI0MCwgIC8qIERlY3J5cHRlZCBBRVMga2V5IHdyYXAgSVYgaW5jb3JyZWN0ICovCisgICAgV0NfQ0xFQU5VUF9FICAgICAgICA9IC0yNDEsICAvKiB3b2xmY3J5cHQgY2xlYW51cCBmYWlsZWQgKi8KKyAgICBFQ0NfQ0RIX0tBVF9GSVBTX0UgID0gLTI0MiwgIC8qIEVDQyBDREggS25vd24gQW5zd2VyIFRlc3QgZmFpbHVyZSAqLworICAgIERIX0NIRUNLX1BVQl9FICAgICAgPSAtMjQzLCAgLyogREggQ2hlY2sgUHViIEtleSBlcnJvciAqLworICAgIEJBRF9QQVRIX0VSUk9SICAgICAgPSAtMjQ0LCAgLyogQmFkIHBhdGggZm9yIG9wZW5kaXIgKi8KKworICAgIEFTWU5DX09QX0UgICAgICAgICAgPSAtMjQ1LCAgLyogQXN5bmMgb3BlcmF0aW9uIGVycm9yICovCisKKyAgICBFQ0NfUFJJVkFURU9OTFlfRSAgID0gLTI0NiwgIC8qIEludmFsaWQgdXNlIG9mIHByaXZhdGUgb25seSBFQ0Mga2V5Ki8KKyAgICBFWFRLRVlVU0FHRV9FICAgICAgID0gLTI0NywgIC8qIEJhZCBFeHRlbmRlZCBLZXkgVXNhZ2UgdmFsdWUgKi8KKyAgICBXQ19IV19FICAgICAgICAgICAgID0gLTI0OCwgIC8qIEVycm9yIHdpdGggaGFyZHdhcmUgY3J5cHRvIHVzZSAqLworICAgIFdDX0hXX1dBSVRfRSAgICAgICAgPSAtMjQ5LCAgLyogSGFyZHdhcmUgd2FpdGluZyBvbiByZXNvdXJjZSAqLworCisgICAgUFNTX1NBTFRMRU5fRSAgICAgICA9IC0yNTAsICAvKiBQU1MgbGVuZ3RoIG9mIHNhbHQgaXMgdG9vIGxvbmcgZm9yIGhhc2ggKi8KKyAgICBQUklNRV9HRU5fRSAgICAgICAgID0gLTI1MSwgIC8qIEZhaWx1cmUgZmluZGluZyBhIHByaW1lLiAqLworICAgIEJFUl9JTkRFRl9FICAgICAgICAgPSAtMjUyLCAgLyogQ2Fubm90IGRlY29kZSBpbmRlZmluaXRlIGxlbmd0aCBCRVIuICovCisgICAgUlNBX09VVF9PRl9SQU5HRV9FICA9IC0yNTMsICAvKiBDaXBoZXJ0ZXh0IHRvIGRlY3J5cHQgb3V0IG9mIHJhbmdlLiAqLworICAgIFJTQVBTU19QQVRfRklQU19FICAgPSAtMjU0LCAgLyogUlNBLVBTUyBQQVQgZmFpbHVyZSAqLworICAgIEVDRFNBX1BBVF9GSVBTX0UgICAgPSAtMjU1LCAgLyogRUNEU0EgUEFUIGZhaWx1cmUgKi8KKyAgICBESF9LQVRfRklQU19FICAgICAgID0gLTI1NiwgIC8qIERIIEtBVCBmYWlsdXJlICovCisgICAgQUVTQ0NNX0tBVF9GSVBTX0UgICA9IC0yNTcsICAvKiBBRVNDQ00gS0FUIGZhaWx1cmUgKi8KKyAgICBTSEEzX0tBVF9GSVBTX0UgICAgID0gLTI1OCwgIC8qIFNIQS0zIEtBVCBmYWlsdXJlICovCisgICAgRUNESEVfS0FUX0ZJUFNfRSAgICA9IC0yNTksICAvKiBFQ0RIRSBLQVQgZmFpbHVyZSAqLworICAgIEFFU19HQ01fT1ZFUkZMT1dfRSAgPSAtMjYwLCAgLyogQUVTLUdDTSBpbnZvY2F0aW9uIGNvdW50ZXIgb3ZlcmZsb3cuICovCisgICAgQUVTX0NDTV9PVkVSRkxPV19FICA9IC0yNjEsICAvKiBBRVMtQ0NNIGludm9jYXRpb24gY291bnRlciBvdmVyZmxvdy4gKi8KKyAgICBSU0FfS0VZX1BBSVJfRSAgICAgID0gLTI2MiwgIC8qIFJTQSBLZXkgUGFpci1XaXNlIENvbnNpc3RlbmN5IGNoZWNrIGZhaWwuICovCisgICAgREhfQ0hFQ0tfUFJJVl9FICAgICA9IC0yNjMsICAvKiBESCBDaGVjayBQcml2IEtleSBlcnJvciAqLworCisgICAgV0NfQUZBTEdfU09DS19FICAgICA9IC0yNjQsICAvKiBBRl9BTEcgc29ja2V0IGVycm9yICovCisgICAgV0NfREVWQ1JZUFRPX0UgICAgICA9IC0yNjUsICAvKiAvZGV2L2NyeXB0byBlcnJvciAqLworCisgICAgWkxJQl9JTklUX0VSUk9SICAgICA9IC0yNjYsICAgLyogemxpYiBpbml0IGVycm9yICAqLworICAgIFpMSUJfQ09NUFJFU1NfRVJST1IgPSAtMjY3LCAgIC8qIHpsaWIgY29tcHJlc3Npb24gZXJyb3IgICovCisgICAgWkxJQl9ERUNPTVBSRVNTX0VSUk9SID0gLTI2OCwgIC8qIHpsaWIgZGVjb21wcmVzc2lvbiBlcnJvciAgKi8KKworICAgIFBLQ1M3X05PX1NJR05FUl9FICAgPSAtMjY5LCAgLyogTm8gc2lnbmVyIGluIFBLQ1MjNyBzaWduZWQgZGF0YSBtc2cgKi8KKyAgICBXQ19QS0NTN19XQU5UX1JFQURfRT0gLTI3MCwgIC8qIFBLQ1M3IG9wZXJhdGlvbnMgd2FudHMgbW9yZSBpbnB1dCAqLworCisgICAgQ1JZUFRPQ0JfVU5BVkFJTEFCTEU9IC0yNzEsICAvKiBDcnlwdG8gY2FsbGJhY2sgdW5hdmFpbGFibGUgKi8KKyAgICBQS0NTN19TSUdORUVEU19DSEVDSz0gLTI3MiwgIC8qIHNpZ25hdHVyZSBuZWVkcyB2ZXJpZmllZCBieSBjYWxsZXIgKi8KKyAgICBQU1NfU0FMVExFTl9SRUNPVkVSX0U9LTI3MywgIC8qIFBTUyBzbGF0IGxlbmd0aCBub3QgcmVjb3ZlcmFibGUgKi8KKyAgICBDSEFDSEFfUE9MWV9PVkVSRkxPVyA9LTI3NCwgIC8qIENoYUNoYTIwUG9seTEzMDUgbGltaXQgb3ZlcmZsb3cgKi8KKyAgICBBU05fU0VMRl9TSUdORURfRSAgID0gLTI3NSwgIC8qIEFTTiBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSBlcnJvciAqLworICAgIFNBS0tFX1ZFUklGWV9GQUlMX0UgPSAtMjc2LCAgLyogU0FLS0UgZGVyaXZhdGlvbiB2ZXJpZmljYXRpb24gZXJyb3IgKi8KKyAgICBNSVNTSU5HX0lWICAgICAgICAgID0gLTI3NywgIC8qIElWIHdhcyBub3Qgc2V0ICovCisgICAgTUlTU0lOR19LRVkgICAgICAgICA9IC0yNzgsICAvKiBLZXkgd2FzIG5vdCBzZXQgKi8KKyAgICBCQURfTEVOR1RIX0UgICAgICAgID0gLTI3OSwgIC8qIFZhbHVlIG9mIGxlbmd0aCBwYXJhbWV0ZXIgaXMgaW52YWxpZC4gKi8KKworICAgIFdDX0xBU1RfRSAgICAgICAgICAgPSAtMjc5LCAgLyogVXBkYXRlIHRoaXMgdG8gaW5kaWNhdGUgbGFzdCBlcnJvciAqLworICAgIE1JTl9DT0RFX0UgICAgICAgICAgPSAtMzAwICAgLyogZXJyb3JzIC0xMDEgLSAtMjk5ICovCisKKyAgICAvKiBhZGQgbmV3IGNvbXBhbmlvbiBlcnJvciBpZCBzdHJpbmdzIGZvciBhbnkgbmV3IGVycm9yIGNvZGVzCisgICAgICAgd29sZmNyeXB0L3NyYy9lcnJvci5jICEhISAqLworfTsKKworCisjaWZkZWYgTk9fRVJST1JfU1RSSU5HUworICAgICNkZWZpbmUgd2NfR2V0RXJyb3JTdHJpbmcoZXJyb3IpICJubyBzdXBwb3J0IGZvciBlcnJvciBzdHJpbmdzIGJ1aWx0IGluIgorICAgICNkZWZpbmUgd2NfRXJyb3JTdHJpbmcoZXJyLCBidWYpIFwKKyAgICAgICAgKHZvaWQpZXJyOyBYU1RSTkNQWSgoYnVmKSwgd2NfR2V0RXJyb3JTdHJpbmcoKGVycikpLCBcCisgICAgICAgIFdPTEZTU0xfTUFYX0VSUk9SX1NaKTsKKworI2Vsc2UKK1dPTEZTU0xfQVBJIHZvaWQgd2NfRXJyb3JTdHJpbmcoaW50IGVyciwgY2hhciogYnVmZik7CitXT0xGU1NMX0FQSSBjb25zdCBjaGFyKiB3Y19HZXRFcnJvclN0cmluZyhpbnQgZXJyb3IpOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisjZW5kaWYgLyogV09MRl9DUllQVF9FUlJPUl9IICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvZmVfNDQ4LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvZmVfNDQ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlODJjZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9mZV80NDguaApAQCAtMCwwICsxLDEyMSBAQAorLyogZmU0NDhfNDQ4LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKyNpZm5kZWYgV09MRl9DUllQVF9GRV80NDhfSAorI2RlZmluZSBXT0xGX0NSWVBUX0ZFXzQ0OF9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaWYgZGVmaW5lZChIQVZFX0NVUlZFNDQ4KSB8fCBkZWZpbmVkKEhBVkVfRUQ0NDgpCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWYgZGVmaW5lZChIQVZFX19fVUlOVDEyOF9UKSAmJiAhZGVmaW5lZChOT19DVVJWRUQ0NDhfMTI4QklUKQorICAgICNkZWZpbmUgQ1VSVkVENDQ4XzEyOEJJVAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGRlZmF1bHQgdG8gYmUgZmFzdGVyIGJ1dCB0YWtlIG1vcmUgbWVtb3J5ICovCisjaWYgIWRlZmluZWQoQ1VSVkU0NDhfU01BTEwpICYmICFkZWZpbmVkKEVENDQ4X1NNQUxMKQorCisjaWYgZGVmaW5lZChDVVJWRUQ0NDhfMTI4QklUKQorICAgIHR5cGVkZWYgc3dvcmQ2NCBmZTQ0ODsKKyAgICAjaWZuZGVmIFdPTEZTU0xfVUlOVDEyOF9UX0RFRklORUQKKyAgICAgICAgI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fCisgICAgICAgICAgICB0eXBlZGVmIF9fdWludDEyOF90IHVpbnQxMjhfdDsKKyAgICAgICAgICAgIHR5cGVkZWYgX19pbnQxMjhfdCBpbnQxMjhfdDsKKyAgICAgICAgICAgIHR5cGVkZWYgX191aW50MTI4X3Qgd29yZDEyODsKKyAgICAgICAgICAgIHR5cGVkZWYgX19pbnQxMjhfdCBzd29yZDEyODsKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50MTI4X3QgX19hdHRyaWJ1dGVfXyAoKG1vZGUoVEkpKSk7CisgICAgICAgICAgICB0eXBlZGVmIGxvbmcgaW50MTI4X3QgX19hdHRyaWJ1dGVfXyAoKG1vZGUoVEkpKSk7CisgICAgICAgICAgICB0eXBlZGVmIHVpbnQxMjhfdCB3b3JkMTI4OworICAgICAgICAgICAgdHlwZWRlZiBpbnQxMjhfdCBzd29yZDEyODsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9VSU5UMTI4X1RfREVGSU5FRAorICAgICNlbmRpZgorI2Vsc2UKKyAgICB0eXBlZGVmIHN3b3JkMzIgZmU0NDg7CisjZW5kaWYKKworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X2luaXQodm9pZCk7CitXT0xGU1NMX0xPQ0FMIGludCAgY3VydmU0NDgoYnl0ZSogciwgY29uc3QgYnl0ZSogbiwgY29uc3QgYnl0ZSogYSk7CisKKyNpZiAhZGVmaW5lZChDVVJWRUQ0NDhfMTI4QklUKQorV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X3JlZHVjZShmZTQ0OCopOworI2Vsc2UKKyNkZWZpbmUgZmU0NDhfcmVkdWNlKGEpCisjZW5kaWYKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZTQ0OF9uZWcoZmU0NDgqLGNvbnN0IGZlNDQ4Kik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmU0NDhfYWRkKGZlNDQ4KiwgY29uc3QgZmU0NDgqLCBjb25zdCBmZTQ0OCopOworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X3N1YihmZTQ0OCosIGNvbnN0IGZlNDQ4KiwgY29uc3QgZmU0NDgqKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZTQ0OF9tdWwoZmU0NDgqLGNvbnN0IGZlNDQ4Kixjb25zdCBmZTQ0OCopOworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X3NxcihmZTQ0OCosIGNvbnN0IGZlNDQ4Kik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmU0NDhfbXVsMzkwODEoZmU0NDgqLCBjb25zdCBmZTQ0OCopOworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X2ludmVydChmZTQ0OCosIGNvbnN0IGZlNDQ4Kik7CisKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZTQ0OF8wKGZlNDQ4Kik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmU0NDhfMShmZTQ0OCopOworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X2NvcHkoZmU0NDgqLCBjb25zdCBmZTQ0OCopOworV09MRlNTTF9MT0NBTCBpbnQgIGZlNDQ4X2lzbm9uemVybyhjb25zdCBmZTQ0OCopOworV09MRlNTTF9MT0NBTCBpbnQgIGZlNDQ4X2lzbmVnYXRpdmUoY29uc3QgZmU0NDgqKTsKKworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X2Zyb21fYnl0ZXMoZmU0NDgqLGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmU0NDhfdG9fYnl0ZXModW5zaWduZWQgY2hhciAqLCBjb25zdCBmZTQ0OCopOworCitXT0xGU1NMX0xPQ0FMIHZvaWQgZmU0NDhfY21vdihmZTQ0OCosY29uc3QgZmU0NDgqLCBpbnQpOworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X3Bvd18yXzQ0Nl8yMjJfMShmZTQ0OCosY29uc3QgZmU0NDgqKTsKKworI2Vsc2UKKworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X2luaXQodm9pZCk7CitXT0xGU1NMX0xPQ0FMIGludCAgY3VydmU0NDgoYnl0ZSogciwgY29uc3QgYnl0ZSogbiwgY29uc3QgYnl0ZSogYSk7CisKKyNkZWZpbmUgZmU0NDhfcmVkdWNlKGEpCitXT0xGU1NMX0xPQ0FMIHZvaWQgZmU0NDhfbmVnKHdvcmQ4Kixjb25zdCB3b3JkOCopOworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X2FkZCh3b3JkOCosIGNvbnN0IHdvcmQ4KiwgY29uc3Qgd29yZDgqKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZTQ0OF9zdWIod29yZDgqLCBjb25zdCB3b3JkOCosIGNvbnN0IHdvcmQ4Kik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmU0NDhfbXVsKHdvcmQ4Kixjb25zdCB3b3JkOCosY29uc3Qgd29yZDgqKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZTQ0OF9zcXIod29yZDgqLCBjb25zdCB3b3JkOCopOworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X211bDM5MDgxKHdvcmQ4KiwgY29uc3Qgd29yZDgqKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZTQ0OF9pbnZlcnQod29yZDgqLCBjb25zdCB3b3JkOCopOworCitXT0xGU1NMX0xPQ0FMIHZvaWQgZmU0NDhfY29weSh3b3JkOCosIGNvbnN0IHdvcmQ4Kik7CitXT0xGU1NMX0xPQ0FMIGludCAgZmU0NDhfaXNub256ZXJvKGNvbnN0IHdvcmQ4Kik7CisKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZTQ0OF9ub3JtKGJ5dGUgKmEpOworCitXT0xGU1NMX0xPQ0FMIHZvaWQgZmU0NDhfY21vdih3b3JkOCosY29uc3Qgd29yZDgqLCBpbnQpOworV09MRlNTTF9MT0NBTCB2b2lkIGZlNDQ4X3Bvd18yXzQ0Nl8yMjJfMSh3b3JkOCosY29uc3Qgd29yZDgqKTsKKworI2VuZGlmIC8qICFDVVJWRTQ0OF9TTUFMTCB8fCAhRUQ0NDhfU01BTEwgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIEhBVkVfQ1VSVkU0NDggfHwgSEFWRV9FRDQ0OCAqLworCisjZW5kaWYgLyogV09MRl9DUllQVF9GRV80NDhfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2ZlX29wZXJhdGlvbnMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9mZV9vcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkM2FmYQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9mZV9vcGVyYXRpb25zLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qIGZlX29wZXJhdGlvbnMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworI2lmbmRlZiBXT0xGX0NSWVBUX0ZFX09QRVJBVElPTlNfSAorI2RlZmluZSBXT0xGX0NSWVBUX0ZFX09QRVJBVElPTlNfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2V0dGluZ3MuaD4KKworI2lmIGRlZmluZWQoSEFWRV9DVVJWRTI1NTE5KSB8fCBkZWZpbmVkKEhBVkVfRUQyNTUxOSkKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZiBkZWZpbmVkKFVTRV9JTlRFTF9TUEVFRFVQKSAmJiAhZGVmaW5lZChOT19DVVJWRUQyNTUxOV9YNjQpCisgICAgI2RlZmluZSBDVVJWRUQyNTUxOV9YNjQKKyNlbGlmIGRlZmluZWQoSEFWRV9fX1VJTlQxMjhfVCkgJiYgIWRlZmluZWQoTk9fQ1VSVkVEMjU1MTlfMTI4QklUKQorICAgICNkZWZpbmUgQ1VSVkVEMjU1MTlfMTI4QklUCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ1VSVkVEMjU1MTlfWDY0KQorICAgICNkZWZpbmUgQ1VSVkVEMjU1MTlfQVNNXzY0QklUCisgICAgI2RlZmluZSBDVVJWRUQyNTUxOV9BU00KKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9BUk1BU00pCisgICAgI2lmZGVmIF9fYWFyY2g2NF9fCisgICAgICAgICNkZWZpbmUgQ1VSVkVEMjU1MTlfQVNNXzY0QklUCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBDVVJWRUQyNTUxOV9BU01fMzJCSVQKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIENVUlZFRDI1NTE5X0FTTQorI2VuZGlmCisKKy8qCitmZSBtZWFucyBmaWVsZCBlbGVtZW50LgorSGVyZSB0aGUgZmllbGQgaXMgXFovKDJeMjU1LTE5KS4KK0FuIGVsZW1lbnQgdCwgZW50cmllcyB0WzBdLi4udFs5XSwgcmVwcmVzZW50cyB0aGUgaW50ZWdlcgordFswXSsyXjI2IHRbMV0rMl41MSB0WzJdKzJeNzcgdFszXSsyXjEwMiB0WzRdKy4uLisyXjIzMCB0WzldLgorQm91bmRzIG9uIGVhY2ggdFtpXSB2YXJ5IGRlcGVuZGluZyBvbiBjb250ZXh0LgorKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ1VSVkUyNTUxOV9TTUFMTCkgfHwgZGVmaW5lZChFRDI1NTE5X1NNQUxMKQorICAgICNkZWZpbmUgRjI1NTE5X1NJWkUgMzIKKworICAgIFdPTEZTU0xfTE9DQUwgdm9pZCBsbV9jb3B5KGJ5dGUqLCBjb25zdCBieXRlKik7CisgICAgV09MRlNTTF9MT0NBTCB2b2lkIGxtX2FkZChieXRlKiwgY29uc3QgYnl0ZSosIGNvbnN0IGJ5dGUqKTsKKyAgICBXT0xGU1NMX0xPQ0FMIHZvaWQgbG1fc3ViKGJ5dGUqLCBjb25zdCBieXRlKiwgY29uc3QgYnl0ZSopOworICAgIFdPTEZTU0xfTE9DQUwgdm9pZCBsbV9uZWcoYnl0ZSosY29uc3QgYnl0ZSopOworICAgIFdPTEZTU0xfTE9DQUwgdm9pZCBsbV9pbnZlcnQoYnl0ZSosIGNvbnN0IGJ5dGUqKTsKKyAgICBXT0xGU1NMX0xPQ0FMIHZvaWQgbG1fbXVsKGJ5dGUqLGNvbnN0IGJ5dGUqLGNvbnN0IGJ5dGUqKTsKKyNlbmRpZgorCisKKyNpZiAhZGVmaW5lZChGUkVFU0NBTEVfTFRDX0VDQykKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9pbml0KHZvaWQpOworCitXT0xGU1NMX0xPQ0FMIGludCAgY3VydmUyNTUxOShieXRlICogcSwgY29uc3QgYnl0ZSAqIG4sIGNvbnN0IGJ5dGUgKiBwKTsKKyNlbmRpZgorCisvKiBkZWZhdWx0IHRvIGJlIGZhc3RlciBidXQgdGFrZSBtb3JlIG1lbW9yeSAqLworI2lmICFkZWZpbmVkKENVUlZFMjU1MTlfU01BTEwpIHx8ICFkZWZpbmVkKEVEMjU1MTlfU01BTEwpCisKKyNpZmRlZiBDVVJWRUQyNTUxOV9BU01fNjRCSVQKKyAgICB0eXBlZGVmIHN3b3JkNjQgIGZlWzRdOworI2VsaWYgZGVmaW5lZChDVVJWRUQyNTUxOV9BU01fMzJCSVQpCisgICAgdHlwZWRlZiBzd29yZDMyICBmZVs4XTsKKyNlbGlmIGRlZmluZWQoQ1VSVkVEMjU1MTlfMTI4QklUKQorICAgIHR5cGVkZWYgc3dvcmQ2NCAgZmVbNV07CisjZWxzZQorICAgIHR5cGVkZWYgc3dvcmQzMiAgZmVbMTBdOworI2VuZGlmCisKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9jb3B5KGZlLCBjb25zdCBmZSk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfYWRkKGZlLCBjb25zdCBmZSwgY29uc3QgZmUpOworV09MRlNTTF9MT0NBTCB2b2lkIGZlX25lZyhmZSxjb25zdCBmZSk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfc3ViKGZlLCBjb25zdCBmZSwgY29uc3QgZmUpOworV09MRlNTTF9MT0NBTCB2b2lkIGZlX2ludmVydChmZSwgY29uc3QgZmUpOworV09MRlNTTF9MT0NBTCB2b2lkIGZlX211bChmZSxjb25zdCBmZSxjb25zdCBmZSk7CisKKworLyogQmFzZWQgT24gRGFuaWVsIEogQmVybnN0ZWluJ3MgY3VydmUyNTUxOSBhbmQgZWQyNTUxOSBQdWJsaWMgRG9tYWluIHJlZjEwCisgICB3b3JrLiAqLworCitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfMChmZSk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfMShmZSk7CitXT0xGU1NMX0xPQ0FMIGludCAgZmVfaXNub256ZXJvKGNvbnN0IGZlKTsKK1dPTEZTU0xfTE9DQUwgaW50ICBmZV9pc25lZ2F0aXZlKGNvbnN0IGZlKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV90b2J5dGVzKHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgZmUpOworV09MRlNTTF9MT0NBTCB2b2lkIGZlX3NxKGZlLCBjb25zdCBmZSk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfc3EyKGZlLGNvbnN0IGZlKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9mcm9tYnl0ZXMoZmUsY29uc3QgdW5zaWduZWQgY2hhciAqKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9jc3dhcChmZSwgZmUsIGludCk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfbXVsMTIxNjY2KGZlLGZlKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9jbW92KGZlLGNvbnN0IGZlLCBpbnQpOworV09MRlNTTF9MT0NBTCB2b2lkIGZlX3BvdzIyNTIzKGZlLGNvbnN0IGZlKTsKKworLyogNjQgdHlwZSBuZWVkZWQgZm9yIFNIQTUxMiAqLworV09MRlNTTF9MT0NBTCB3b3JkNjQgbG9hZF8zKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluKTsKK1dPTEZTU0xfTE9DQUwgd29yZDY0IGxvYWRfNChjb25zdCB1bnNpZ25lZCBjaGFyICppbik7CisKKyNpZmRlZiBDVVJWRUQyNTUxOV9BU00KK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9nZV90b19wMihmZSByeCwgZmUgcnksIGZlIHJ6LCBjb25zdCBmZSBweCwgY29uc3QgZmUgcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmUgcHosIGNvbnN0IGZlIHB0KTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9nZV90b19wMyhmZSByeCwgZmUgcnksIGZlIHJ6LCBmZSBydCwgY29uc3QgZmUgcHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmUgcHksIGNvbnN0IGZlIHB6LCBjb25zdCBmZSBwdCk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfZ2VfZGJsKGZlIHJ4LCBmZSByeSwgZmUgcnosIGZlIHJ0LCBjb25zdCBmZSBweCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmUgcHksIGNvbnN0IGZlIHB6KTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9nZV9tYWRkKGZlIHJ4LCBmZSByeSwgZmUgcnosIGZlIHJ0LCBjb25zdCBmZSBweCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlIHB5LCBjb25zdCBmZSBweiwgY29uc3QgZmUgcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmZSBxeHkyZCwgY29uc3QgZmUgcXlwbHVzeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlIHF5bWludXN4KTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9nZV9tc3ViKGZlIHJ4LCBmZSByeSwgZmUgcnosIGZlIHJ0LCBjb25zdCBmZSBweCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlIHB5LCBjb25zdCBmZSBweiwgY29uc3QgZmUgcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmZSBxeHkyZCwgY29uc3QgZmUgcXlwbHVzeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlIHF5bWludXN4KTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9nZV9hZGQoZmUgcngsIGZlIHJ5LCBmZSByeiwgZmUgcnQsIGNvbnN0IGZlIHB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmZSBweSwgY29uc3QgZmUgcHosIGNvbnN0IGZlIHB0LCBjb25zdCBmZSBxeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmUgcXQyZCwgY29uc3QgZmUgcXlwbHVzeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmUgcXltaW51c3gpOworV09MRlNTTF9MT0NBTCB2b2lkIGZlX2dlX3N1YihmZSByeCwgZmUgcnksIGZlIHJ6LCBmZSBydCwgY29uc3QgZmUgcHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlIHB5LCBjb25zdCBmZSBweiwgY29uc3QgZmUgcHQsIGNvbnN0IGZlIHF6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmZSBxdDJkLCBjb25zdCBmZSBxeXBsdXN4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmZSBxeW1pbnVzeCk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfY21vdl90YWJsZShmZSogciwgZmUqIGJhc2UsIHNpZ25lZCBjaGFyIGIpOworI2VuZGlmIC8qIENVUlZFRDI1NTE5X0FTTSAqLworI2VuZGlmIC8qICFDVVJWRTI1NTE5X1NNQUxMIHx8ICFFRDI1NTE5X1NNQUxMICovCisKKy8qIFVzZSBsZXNzIG1lbW9yeSBhbmQgb25seSAzMmJpdCB0eXBlcyBvciBsZXNzLCBidXQgaXMgc2xvd2VyCisgICBCYXNlZCBvbiBEYW5pZWwgQmVlcidzIHB1YmxpYyBkb21haW4gd29yay4gKi8KKyNpZiBkZWZpbmVkKENVUlZFMjU1MTlfU01BTEwpIHx8IGRlZmluZWQoRUQyNTUxOV9TTUFMTCkKK3N0YXRpYyBjb25zdCBieXRlIGMyNTUxOV9iYXNlX3hbRjI1NTE5X1NJWkVdID0gezl9Oworc3RhdGljIGNvbnN0IGJ5dGUgZjI1NTE5X3plcm9bRjI1NTE5X1NJWkVdICAgPSB7MH07CitzdGF0aWMgY29uc3QgYnl0ZSBmMjU1MTlfb25lW0YyNTUxOV9TSVpFXSAgICA9IHsxfTsKK3N0YXRpYyBjb25zdCBieXRlIGZwcmltZV96ZXJvW0YyNTUxOV9TSVpFXSAgID0gezB9Oworc3RhdGljIGNvbnN0IGJ5dGUgZnByaW1lX29uZVtGMjU1MTlfU0laRV0gICAgPSB7MX07CisKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9sb2FkKGJ5dGUgKngsIHdvcmQzMiBjKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9ub3JtYWxpemUoYnl0ZSAqeCk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfaW52X19kaXN0aW5jdChieXRlICpyLCBjb25zdCBieXRlICp4KTsKKworLyogQ29uZGl0aW9uYWwgY29weS4gSWYgY29uZGl0aW9uID09IDAsIHRoZW4gemVybyBpcyBjb3BpZWQgdG8gZHN0LiBJZgorICogY29uZGl0aW9uID09IDEsIHRoZW4gb25lIGlzIGNvcGllZCB0byBkc3QuIEFueSBvdGhlciB2YWx1ZSByZXN1bHRzIGluCisgKiB1bmRlZmluZWQgYmVoYXZpb3IuCisgKi8KK1dPTEZTU0xfTE9DQUwgdm9pZCBmZV9zZWxlY3QoYnl0ZSAqZHN0LCBjb25zdCBieXRlICp6ZXJvLCBjb25zdCBieXRlICpvbmUsCisJCSAgIGJ5dGUgY29uZGl0aW9uKTsKKworLyogTXVsdGlwbHkgYSBwb2ludCBieSBhIHNtYWxsIGNvbnN0YW50LiBUaGUgdHdvIHBvaW50ZXJzIGFyZSBub3QKKyAqIHJlcXVpcmVkIHRvIGJlIGRpc3RpbmN0LgorICoKKyAqIFRoZSBjb25zdGFudCBtdXN0IGJlIGxlc3MgdGhhbiAyXjI0LgorICovCitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfbXVsX2MoYnl0ZSAqciwgY29uc3QgYnl0ZSAqYSwgd29yZDMyIGIpOworV09MRlNTTF9MT0NBTCB2b2lkIGZlX211bF9fZGlzdGluY3QoYnl0ZSAqciwgY29uc3QgYnl0ZSAqYSwgY29uc3QgYnl0ZSAqYik7CisKKy8qIENvbXB1dGUgb25lIG9mIHRoZSBzcXVhcmUgcm9vdHMgb2YgdGhlIGZpZWxkIGVsZW1lbnQsIGlmIHRoZSBlbGVtZW50CisgKiBpcyBzcXVhcmUuIFRoZSBvdGhlciBzcXVhcmUgaXMgLXIuCisgKgorICogSWYgdGhlIGlucHV0IGlzIG5vdCBzcXVhcmUsIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhIHZhbGlkIGZpZWxkCisgKiBlbGVtZW50LCBidXQgbm90IHRoZSBjb3JyZWN0IGFuc3dlci4gSWYgeW91IGRvbid0IGFscmVhZHkga25vdyB0aGF0CisgKiB5b3VyIGVsZW1lbnQgaXMgc3F1YXJlLCB5b3Ugc2hvdWxkIHNxdWFyZSB0aGUgcmV0dXJuIHZhbHVlIGFuZCB0ZXN0LgorICovCitXT0xGU1NMX0xPQ0FMIHZvaWQgZmVfc3FydChieXRlICpyLCBjb25zdCBieXRlICp4KTsKKworLyogQ29uZGl0aW9uYWwgY29weS4gSWYgY29uZGl0aW9uID09IDAsIHRoZW4gemVybyBpcyBjb3BpZWQgdG8gZHN0LiBJZgorICogY29uZGl0aW9uID09IDEsIHRoZW4gb25lIGlzIGNvcGllZCB0byBkc3QuIEFueSBvdGhlciB2YWx1ZSByZXN1bHRzIGluCisgKiB1bmRlZmluZWQgYmVoYXZpb3IuCisgKi8KK1dPTEZTU0xfTE9DQUwgdm9pZCBmcHJpbWVfc2VsZWN0KGJ5dGUgKmRzdCwgY29uc3QgYnl0ZSAqemVybywgY29uc3QgYnl0ZSAqb25lLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSBjb25kaXRpb24pOworV09MRlNTTF9MT0NBTCB2b2lkIGZwcmltZV9hZGQoYnl0ZSAqciwgY29uc3QgYnl0ZSAqYSwgY29uc3QgYnl0ZSAqbW9kdWx1cyk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZnByaW1lX3N1YihieXRlICpyLCBjb25zdCBieXRlICphLCBjb25zdCBieXRlICptb2R1bHVzKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmcHJpbWVfbXVsKGJ5dGUgKnIsIGNvbnN0IGJ5dGUgKmEsIGNvbnN0IGJ5dGUgKmIsCisJCSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlICptb2R1bHVzKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBmcHJpbWVfY29weShieXRlICp4LCBjb25zdCBieXRlICphKTsKKworI2VuZGlmIC8qIENVUlZFMjU1MTlfU01BTEwgfHwgRUQyNTUxOV9TTUFMTCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9DVVJWRTI1NTE5IHx8IEhBVkVfRUQyNTUxOSAqLworCisjZW5kaWYgLyogV09MRl9DUllQVF9GRV9PUEVSQVRJT05TX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9maXBzX3Rlc3QuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9maXBzX3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDEzOWZkCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2ZpcHNfdGVzdC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qIGZpcHNfdGVzdC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKyNpZm5kZWYgV09MRl9DUllQVF9GSVBTX1RFU1RfSAorI2RlZmluZSBXT0xGX0NSWVBUX0ZJUFNfVEVTVF9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEtub3duIEFuc3dlciBUZXN0IHN0cmluZyBpbnB1dHMgYXJlIGhleCwgaW50ZXJuYWwgKi8KK1dPTEZTU0xfTE9DQUwgaW50IERvS25vd25BbnN3ZXJUZXN0cyhjaGFyKiwgaW50KTsKKworCisvKiBGSVBTIGZhaWx1cmUgY2FsbGJhY2sgKi8KK3R5cGVkZWYgdm9pZCgqd29sZkNyeXB0X2ZpcHNfY2IpKGludCBvaywgaW50IGVyciwgY29uc3QgY2hhciogaGFzaCk7CisKKy8qIFB1YmxpYyBzZXQgZnVuY3Rpb24gKi8KK1dPTEZTU0xfQVBJIGludCB3b2xmQ3J5cHRfU2V0Q2JfZmlwcyh3b2xmQ3J5cHRfZmlwc19jYiBjYmYpOworCisvKiBQdWJsaWMgZ2V0IHN0YXR1cyBmdW5jdGlvbnMgKi8KK1dPTEZTU0xfQVBJIGludCB3b2xmQ3J5cHRfR2V0U3RhdHVzX2ZpcHModm9pZCk7CitXT0xGU1NMX0FQSSBjb25zdCBjaGFyKiB3b2xmQ3J5cHRfR2V0Q29yZUhhc2hfZmlwcyh2b2lkKTsKKworI2lmZGVmIEhBVkVfRk9SQ0VfRklQU19GQUlMVVJFCisgICAgLyogUHVibGljIGZ1bmN0aW9uIHRvIGZvcmNlIGZhaWx1cmUgbW9kZSBmb3Igb3BlcmF0aW9uYWwgdGVzdGluZyAqLworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmQ3J5cHRfU2V0U3RhdHVzX2ZpcHMoaW50KTsKKyNlbmRpZgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0ZJUFNfVEVTVF9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9nZV80NDguaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9nZV80NDguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZlZGNlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2dlXzQ0OC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qIGdlXzQ0OC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfR0VfNDQ4X0gKKyNkZWZpbmUgV09MRl9DUllQVF9HRV80NDhfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2V0dGluZ3MuaD4KKworI2lmZGVmIEhBVkVfRUQ0NDgKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ZlXzQ0OC5oPgorCisvKgorZ2U0NDggbWVhbnMgZ3JvdXAgZWxlbWVudC4KKworSGVyZSB0aGUgZ3JvdXAgaXMgdGhlIHNldCBvZiBwYWlycyAoeCx5KSBvZiBmaWVsZCBlbGVtZW50cyAoc2VlIGZlLmgpCitzYXRpc2Z5aW5nIC14XjIgKyB5XjIgPSAxICsgZCB4XjJ5XjIKK3doZXJlIGQgPSAtMzkwODEuCisKK1JlcHJlc2VudGF0aW9uczoKKyAgZ2U0NDhfcDIgKHByb2plY3RpdmUpIDogKFg6WTpaKSBzYXRpc2Z5aW5nIHg9WC9aLCB5PVkvWgorICBnZTQ0OF9wcmVjb21wIChhZmZpbmUpOiAoeCx5KQorKi8KKworI2lmZGVmIEVENDQ4X1NNQUxMCisgICAgdHlwZWRlZiBieXRlICAgICBnZTQ0ODsKKyAgICAjZGVmaW5lIEdFNDQ4X1dPUkRTICAgIDU2CisjZWxpZiBkZWZpbmVkKENVUlZFRDQ0OF8xMjhCSVQpCisgICAgdHlwZWRlZiBzd29yZDY0ICBnZTQ0ODsKKyAgICAjZGVmaW5lIEdFNDQ4X1dPUkRTICAgIDgKKyNlbHNlCisgICAgdHlwZWRlZiBzd29yZDMyICBnZTQ0ODsKKyAgICAjZGVmaW5lIEdFNDQ4X1dPUkRTICAgIDE2CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworICBnZTQ0OCBYW0dFNDQ4X1dPUkRTXTsKKyAgZ2U0NDggWVtHRTQ0OF9XT1JEU107CisgIGdlNDQ4IFpbR0U0NDhfV09SRFNdOworfSBnZTQ0OF9wMjsKKworCitXT0xGU1NMX0xPQ0FMIGludCAgZ2U0NDhfY29tcHJlc3Nfa2V5KGJ5dGUqLCBjb25zdCBieXRlKiwgY29uc3QgYnl0ZSopOworV09MRlNTTF9MT0NBTCBpbnQgIGdlNDQ4X2Zyb21fYnl0ZXNfbmVnYXRlX3ZhcnRpbWUoZ2U0NDhfcDIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CisKK1dPTEZTU0xfTE9DQUwgaW50ICBnZTQ0OF9kb3VibGVfc2NhbGFybXVsdF92YXJ0aW1lKGdlNDQ4X3AyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZTQ0OF9wMiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBnZTQ0OF9zY2FsYXJtdWx0X2Jhc2UoZ2U0NDhfcDIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBzYzQ0OF9yZWR1Y2UoYnl0ZSopOworV09MRlNTTF9MT0NBTCB2b2lkIHNjNDQ4X211bGFkZChieXRlKiwgY29uc3QgYnl0ZSosIGNvbnN0IGJ5dGUqLCBjb25zdCBieXRlKik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZ2U0NDhfdG9fYnl0ZXModW5zaWduZWQgY2hhciAqLCBjb25zdCBnZTQ0OF9wMiAqKTsKKworCisjaWZuZGVmIEVENDQ4X1NNQUxMCit0eXBlZGVmIHN0cnVjdCB7CisgIGdlNDQ4IHhbR0U0NDhfV09SRFNdOworICBnZTQ0OCB5W0dFNDQ4X1dPUkRTXTsKK30gZ2U0NDhfcHJlY29tcDsKKworI2VuZGlmIC8qICFFRDQ0OF9TTUFMTCAqLworCisjZW5kaWYgLyogSEFWRV9FRDQ0OCAqLworCisjZW5kaWYgLyogV09MRl9DUllQVF9HRV80NDhfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2dlX29wZXJhdGlvbnMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9nZV9vcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkNzgxNAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9nZV9vcGVyYXRpb25zLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qIGdlX29wZXJhdGlvbnMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworIC8qIEJhc2VkIE9uIERhbmllbCBKIEJlcm5zdGVpbidzIGVkMjU1MTkgUHVibGljIERvbWFpbiByZWYxMCB3b3JrLiAqLworCisjaWZuZGVmIFdPTEZfQ1JZUFRfR0VfT1BFUkFUSU9OU19ICisjZGVmaW5lIFdPTEZfQ1JZUFRfR0VfT1BFUkFUSU9OU19ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaWZkZWYgSEFWRV9FRDI1NTE5CisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9mZV9vcGVyYXRpb25zLmg+CisKKy8qCitnZSBtZWFucyBncm91cCBlbGVtZW50LgorCitIZXJlIHRoZSBncm91cCBpcyB0aGUgc2V0IG9mIHBhaXJzICh4LHkpIG9mIGZpZWxkIGVsZW1lbnRzIChzZWUgZmUuaCkKK3NhdGlzZnlpbmcgLXheMiArIHleMiA9IDEgKyBkIHheMnleMgord2hlcmUgZCA9IC0xMjE2NjUvMTIxNjY2LgorCitSZXByZXNlbnRhdGlvbnM6CisgIGdlX3AyIChwcm9qZWN0aXZlKTogKFg6WTpaKSBzYXRpc2Z5aW5nIHg9WC9aLCB5PVkvWgorICBnZV9wMyAoZXh0ZW5kZWQpOiAoWDpZOlo6VCkgc2F0aXNmeWluZyB4PVgvWiwgeT1ZL1osIFhZPVpUCisgIGdlX3AxcDEgKGNvbXBsZXRlZCk6ICgoWDpaKSwoWTpUKSkgc2F0aXNmeWluZyB4PVgvWiwgeT1ZL1QKKyAgZ2VfcHJlY29tcCAoRHVpZik6ICh5K3gseS14LDJkeHkpCisqLworCisjaWZkZWYgRUQyNTUxOV9TTUFMTAorICB0eXBlZGVmIGJ5dGUgICAgIGdlW0YyNTUxOV9TSVpFXTsKKyNlbGlmIGRlZmluZWQoQ1VSVkVEMjU1MTlfQVNNXzY0QklUKQorICB0eXBlZGVmIHN3b3JkNjQgIGdlWzRdOworI2VsaWYgZGVmaW5lZChDVVJWRUQyNTUxOV9BU01fMzJCSVQpCisgIHR5cGVkZWYgc3dvcmQzMiAgZ2VbOF07CisjZWxpZiBkZWZpbmVkKENVUlZFRDI1NTE5XzEyOEJJVCkKKyAgdHlwZWRlZiBzd29yZDY0ICBnZVs1XTsKKyNlbHNlCisgIHR5cGVkZWYgc3dvcmQzMiAgZ2VbMTBdOworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgZ2UgWDsKKyAgZ2UgWTsKKyAgZ2UgWjsKK30gZ2VfcDI7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgZ2UgWDsKKyAgZ2UgWTsKKyAgZ2UgWjsKKyAgZ2UgVDsKK30gZ2VfcDM7CisKKworV09MRlNTTF9MT0NBTCBpbnQgIGdlX2NvbXByZXNzX2tleShieXRlKiBvdXQsIGNvbnN0IGJ5dGUqIHhJbiwgY29uc3QgYnl0ZSogeUluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBrZXlTeik7CitXT0xGU1NMX0xPQ0FMIGludCAgZ2VfZnJvbWJ5dGVzX25lZ2F0ZV92YXJ0aW1lKGdlX3AzICosY29uc3QgdW5zaWduZWQgY2hhciAqKTsKKworV09MRlNTTF9MT0NBTCBpbnQgIGdlX2RvdWJsZV9zY2FsYXJtdWx0X3ZhcnRpbWUoZ2VfcDIgKixjb25zdCB1bnNpZ25lZCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlX3AzICosY29uc3QgdW5zaWduZWQgY2hhciAqKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBnZV9zY2FsYXJtdWx0X2Jhc2UoZ2VfcDMgKixjb25zdCB1bnNpZ25lZCBjaGFyICopOworV09MRlNTTF9MT0NBTCB2b2lkIHNjX3JlZHVjZShieXRlKiBzKTsKK1dPTEZTU0xfTE9DQUwgdm9pZCBzY19tdWxhZGQoYnl0ZSogcywgY29uc3QgYnl0ZSogYSwgY29uc3QgYnl0ZSogYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogYyk7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZ2VfdG9ieXRlcyh1bnNpZ25lZCBjaGFyICosY29uc3QgZ2VfcDIgKik7CitXT0xGU1NMX0xPQ0FMIHZvaWQgZ2VfcDNfdG9ieXRlcyh1bnNpZ25lZCBjaGFyICosY29uc3QgZ2VfcDMgKik7CisKKworI2lmbmRlZiBFRDI1NTE5X1NNQUxMCit0eXBlZGVmIHN0cnVjdCB7CisgIGdlIFg7CisgIGdlIFk7CisgIGdlIFo7CisgIGdlIFQ7Cit9IGdlX3AxcDE7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgZ2UgeXBsdXN4OworICBnZSB5bWludXN4OworICBnZSB4eTJkOworfSBnZV9wcmVjb21wOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGdlIFlwbHVzWDsKKyAgZ2UgWW1pbnVzWDsKKyAgZ2UgWjsKKyAgZ2UgVDJkOworfSBnZV9jYWNoZWQ7CisKKyNlbmRpZiAvKiAhRUQyNTUxOV9TTUFMTCAqLworCisjZW5kaWYgLyogSEFWRV9FRDI1NTE5ICovCisKKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0dFX09QRVJBVElPTlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2hhc2guaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2YmM3NwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9oYXNoLmgKQEAgLTAsMCArMSwyNTIgQEAKKy8qIGhhc2guaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L2hhc2guaAorKi8KKworI2lmbmRlZiBXT0xGX0NSWVBUX0hBU0hfSAorI2RlZmluZSBXT0xGX0NSWVBUX0hBU0hfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmbmRlZiBOT19NRDUKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvbWQ1Lmg+CisjZW5kaWYKKyNpZm5kZWYgTk9fU0hBCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NoYS5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX1NIQTIyNCkgfHwgIWRlZmluZWQoTk9fU0hBMjU2KQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zaGEyNTYuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9TSEEzODQpIHx8IGRlZmluZWQoV09MRlNTTF9TSEE1MTIpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NoYTUxMi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9CTEFLRTIKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYmxha2UyLmg+CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1NIQTMKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2hhMy5oPgorI2VuZGlmCisjaWZuZGVmIE5PX01ENAorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9tZDQuaD4KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfTUQyCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L21kMi5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0JMQUtFMikgfHwgZGVmaW5lZChIQVZFX0JMQUtFMlMpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2JsYWtlMi5oPgorI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQoTk9fT0xEX1dDX05BTUVTKQorICAgICNkZWZpbmUgTUFYX0RJR0VTVF9TSVpFIFdDX01BWF9ESUdFU1RfU0laRQorI2VuZGlmCisKKworLyogU3VwcG9ydGVkIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZXMgZnJvbSBwYWdlIDQzICovCitlbnVtIHdjX01BQ0FsZ29yaXRobSB7CisgICAgbm9fbWFjLAorICAgIG1kNV9tYWMsCisgICAgc2hhX21hYywKKyAgICBzaGEyMjRfbWFjLAorICAgIHNoYTI1Nl9tYWMsICAgICAvKiBuZWVkcyB0byBtYXRjaCBleHRlcm5hbCBLREZfTWFjQWxnb3JpdGhtICovCisgICAgc2hhMzg0X21hYywKKyAgICBzaGE1MTJfbWFjLAorICAgIHJtZF9tYWMsCisgICAgYmxha2UyYl9tYWMKK307CisKK2VudW0gd2NfSGFzaEZsYWdzIHsKKyAgICBXQ19IQVNIX0ZMQUdfTk9ORSA9ICAgICAweDAwMDAwMDAwLAorICAgIFdDX0hBU0hfRkxBR19XSUxMQ09QWSA9IDB4MDAwMDAwMDEsIC8qIGZsYWcgdG8gaW5kaWNhdGUgaGFzaCB3aWxsIGJlIGNvcGllZCAqLworICAgIFdDX0hBU0hfRkxBR19JU0NPUFkgPSAgIDB4MDAwMDAwMDIsIC8qIGhhc2ggaXMgY29weSAqLworI2lmZGVmIFdPTEZTU0xfU0hBMworICAgIFdDX0hBU0hfU0hBM19LRUNDQUsyNTYgPTB4MDAwMTAwMDAsIC8qIE9sZGVyIEtFQ0NBSzI1NiAqLworI2VuZGlmCit9OworCisjaWZuZGVmIE5PX0hBU0hfV1JBUFBFUgordHlwZWRlZiB1bmlvbiB7CisgICAgI2lmbmRlZiBOT19NRDUKKyAgICAgICAgd2NfTWQ1IG1kNTsKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX1NIQQorICAgICAgICB3Y19TaGEgc2hhOworICAgICNlbmRpZgorICAgICNpZmRlZiBXT0xGU1NMX1NIQTIyNAorICAgICAgICB3Y19TaGEyMjQgc2hhMjI0OworICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fU0hBMjU2CisgICAgICAgIHdjX1NoYTI1NiBzaGEyNTY7CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFdPTEZTU0xfU0hBMzg0CisgICAgICAgIHdjX1NoYTM4NCBzaGEzODQ7CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFdPTEZTU0xfU0hBNTEyCisgICAgICAgIHdjX1NoYTUxMiBzaGE1MTI7CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFdPTEZTU0xfU0hBMworICAgICAgICB3Y19TaGEzIHNoYTM7CisgICAgI2VuZGlmCit9IHdjX0hhc2hBbGc7CisjZW5kaWYgLyogIU5PX0hBU0hfV1JBUFBFUiAqLworCisvKiBGaW5kIGxhcmdlc3QgcG9zc2libGUgZGlnZXN0IHNpemUKKyAgIE5vdGUgaWYgdGhpcyBnZXRzIHVwIHRvIHRoZSBzaXplIG9mIDgwIG9yIG92ZXIgY2hlY2sgc21hbGxzdGFjayBidWlsZCAqLworI2lmIGRlZmluZWQoV09MRlNTTF9TSEEzKQorICAgICNkZWZpbmUgV0NfTUFYX0RJR0VTVF9TSVpFIFdDX1NIQTNfNTEyX0RJR0VTVF9TSVpFCisgICAgI2RlZmluZSBXQ19NQVhfQkxPQ0tfU0laRSAgV0NfU0hBM18yMjRfQkxPQ0tfU0laRSAvKiAyMjQgaXMgdGhlIGxhcmdlc3QgYmxvY2sgc2l6ZSAqLworI2VsaWYgZGVmaW5lZChXT0xGU1NMX1NIQTUxMikKKyAgICAjZGVmaW5lIFdDX01BWF9ESUdFU1RfU0laRSBXQ19TSEE1MTJfRElHRVNUX1NJWkUKKyAgICAjZGVmaW5lIFdDX01BWF9CTE9DS19TSVpFICBXQ19TSEE1MTJfQkxPQ0tfU0laRQorI2VsaWYgZGVmaW5lZChIQVZFX0JMQUtFMikKKyAgICAjZGVmaW5lIFdDX01BWF9ESUdFU1RfU0laRSBCTEFLRTJCX09VVEJZVEVTCisgICAgI2RlZmluZSBXQ19NQVhfQkxPQ0tfU0laRSAgQkxBS0UyQl9CTE9DS0JZVEVTCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfU0hBMzg0KQorICAgICNkZWZpbmUgV0NfTUFYX0RJR0VTVF9TSVpFIFdDX1NIQTM4NF9ESUdFU1RfU0laRQorICAgICNkZWZpbmUgV0NfTUFYX0JMT0NLX1NJWkUgIFdDX1NIQTM4NF9CTE9DS19TSVpFCisjZWxpZiAhZGVmaW5lZChOT19TSEEyNTYpCisgICAgI2RlZmluZSBXQ19NQVhfRElHRVNUX1NJWkUgV0NfU0hBMjU2X0RJR0VTVF9TSVpFCisgICAgI2RlZmluZSBXQ19NQVhfQkxPQ0tfU0laRSAgV0NfU0hBMjU2X0JMT0NLX1NJWkUKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9TSEEyMjQpCisgICAgI2RlZmluZSBXQ19NQVhfRElHRVNUX1NJWkUgV0NfU0hBMjI0X0RJR0VTVF9TSVpFCisgICAgI2RlZmluZSBXQ19NQVhfQkxPQ0tfU0laRSAgV0NfU0hBMjI0X0JMT0NLX1NJWkUKKyNlbGlmICFkZWZpbmVkKE5PX1NIQSkKKyAgICAjZGVmaW5lIFdDX01BWF9ESUdFU1RfU0laRSBXQ19TSEFfRElHRVNUX1NJWkUKKyAgICAjZGVmaW5lIFdDX01BWF9CTE9DS19TSVpFICBXQ19TSEFfQkxPQ0tfU0laRQorI2VsaWYgIWRlZmluZWQoTk9fTUQ1KQorICAgICNkZWZpbmUgV0NfTUFYX0RJR0VTVF9TSVpFIFdDX01ENV9ESUdFU1RfU0laRQorICAgICNkZWZpbmUgV0NfTUFYX0JMT0NLX1NJWkUgIFdDX01ENV9CTE9DS19TSVpFCisjZWxzZQorICAgICNkZWZpbmUgV0NfTUFYX0RJR0VTVF9TSVpFIDY0IC8qIGRlZmF1bHQgdG8gbWF4IHNpemUgb2YgNjQgKi8KKyAgICAjZGVmaW5lIFdDX01BWF9CTE9DS19TSVpFICAxMjgKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTk9fQVNOKSB8fCAhZGVmaW5lZChOT19ESCkgfHwgZGVmaW5lZChIQVZFX0VDQykKK1dPTEZTU0xfQVBJIGludCB3Y19IYXNoR2V0T0lEKGVudW0gd2NfSGFzaFR5cGUgaGFzaF90eXBlKTsKK1dPTEZTU0xfQVBJIGVudW0gd2NfSGFzaFR5cGUgd2NfT2lkR2V0SGFzaChpbnQgb2lkKTsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSBlbnVtIHdjX0hhc2hUeXBlIHdjX0hhc2hUeXBlQ29udmVydChpbnQgaGFzaFR5cGUpOworCisjaWZuZGVmIE5PX0hBU0hfV1JBUFBFUgorCitXT0xGU1NMX0FQSSBpbnQgd2NfSGFzaEdldERpZ2VzdFNpemUoZW51bSB3Y19IYXNoVHlwZSBoYXNoX3R5cGUpOworV09MRlNTTF9BUEkgaW50IHdjX0hhc2hHZXRCbG9ja1NpemUoZW51bSB3Y19IYXNoVHlwZSBoYXNoX3R5cGUpOworV09MRlNTTF9BUEkgaW50IHdjX0hhc2goZW51bSB3Y19IYXNoVHlwZSBoYXNoX3R5cGUsCisgICAgY29uc3QgYnl0ZSogZGF0YSwgd29yZDMyIGRhdGFfbGVuLAorICAgIGJ5dGUqIGhhc2gsIHdvcmQzMiBoYXNoX2xlbik7CisKKy8qIGdlbmVyaWMgaGFzaCBvcGVyYXRpb24gd3JhcHBlcnMgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19IYXNoSW5pdF9leCh3Y19IYXNoQWxnKiBoYXNoLCBlbnVtIHdjX0hhc2hUeXBlIHR5cGUsCisgICAgdm9pZCogaGVhcCwgaW50IGRldklkKTsKK1dPTEZTU0xfQVBJIGludCB3Y19IYXNoSW5pdCh3Y19IYXNoQWxnKiBoYXNoLCBlbnVtIHdjX0hhc2hUeXBlIHR5cGUpOworV09MRlNTTF9BUEkgaW50IHdjX0hhc2hVcGRhdGUod2NfSGFzaEFsZyogaGFzaCwgZW51bSB3Y19IYXNoVHlwZSB0eXBlLAorICAgIGNvbnN0IGJ5dGUqIGRhdGEsIHdvcmQzMiBkYXRhU3opOworV09MRlNTTF9BUEkgaW50IHdjX0hhc2hGaW5hbCh3Y19IYXNoQWxnKiBoYXNoLCBlbnVtIHdjX0hhc2hUeXBlIHR5cGUsCisgICAgYnl0ZSogb3V0KTsKK1dPTEZTU0xfQVBJIGludCB3Y19IYXNoRnJlZSh3Y19IYXNoQWxnKiBoYXNoLCBlbnVtIHdjX0hhc2hUeXBlIHR5cGUpOworCisjaWYgZGVmaW5lZChXT0xGU1NMX0hBU0hfRkxBR1MpIHx8IGRlZmluZWQoV09MRl9DUllQVE9fQ0IpCisgICAgV09MRlNTTF9BUEkgaW50IHdjX0hhc2hTZXRGbGFncyh3Y19IYXNoQWxnKiBoYXNoLCBlbnVtIHdjX0hhc2hUeXBlIHR5cGUsCisgICAgICAgIHdvcmQzMiBmbGFncyk7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX0hhc2hHZXRGbGFncyh3Y19IYXNoQWxnKiBoYXNoLCBlbnVtIHdjX0hhc2hUeXBlIHR5cGUsCisgICAgICAgIHdvcmQzMiogZmxhZ3MpOworI2VuZGlmCisKKyNpZm5kZWYgTk9fTUQ1CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvbWQ1Lmg+CitXT0xGU1NMX0FQSSBpbnQgd2NfTWQ1SGFzaChjb25zdCBieXRlKiBkYXRhLCB3b3JkMzIgbGVuLCBieXRlKiBoYXNoKTsKKyNlbmRpZgorCisjaWZuZGVmIE5PX1NIQQorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NoYS5oPgorV09MRlNTTF9BUEkgaW50IHdjX1NoYUhhc2goY29uc3QgYnl0ZSosIHdvcmQzMiwgYnl0ZSopOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1NIQTIyNAorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NoYTI1Ni5oPgorV09MRlNTTF9BUEkgaW50IHdjX1NoYTIyNEhhc2goY29uc3QgYnl0ZSosIHdvcmQzMiwgYnl0ZSopOworI2VuZGlmIC8qIGRlZmluZWQoV09MRlNTTF9TSEEyMjQpICovCisKKyNpZm5kZWYgTk9fU0hBMjU2CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2hhMjU2Lmg+CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhMjU2SGFzaChjb25zdCBieXRlKiwgd29yZDMyLCBieXRlKik7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfU0hBMzg0CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2hhNTEyLmg+CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhMzg0SGFzaChjb25zdCBieXRlKiwgd29yZDMyLCBieXRlKik7CisjZW5kaWYgLyogZGVmaW5lZChXT0xGU1NMX1NIQTM4NCkgKi8KKworI2lmZGVmIFdPTEZTU0xfU0hBNTEyCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2hhNTEyLmg+CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhNTEySGFzaChjb25zdCBieXRlKiwgd29yZDMyLCBieXRlKik7CisjZW5kaWYgLyogV09MRlNTTF9TSEE1MTIgKi8KKworI2lmZGVmIFdPTEZTU0xfU0hBMworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NoYTMuaD4KK1dPTEZTU0xfQVBJIGludCB3Y19TaGEzXzIyNEhhc2goY29uc3QgYnl0ZSosIHdvcmQzMiwgYnl0ZSopOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTNfMjU2SGFzaChjb25zdCBieXRlKiwgd29yZDMyLCBieXRlKik7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhM18zODRIYXNoKGNvbnN0IGJ5dGUqLCB3b3JkMzIsIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEzXzUxMkhhc2goY29uc3QgYnl0ZSosIHdvcmQzMiwgYnl0ZSopOworI2lmZGVmIFdPTEZTU0xfU0hBS0UyNTYKK1dPTEZTU0xfQVBJIGludCB3Y19TaGFrZTI1Nkhhc2goY29uc3QgYnl0ZSosIHdvcmQzMiwgYnl0ZSosIHdvcmQzMik7CisjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX1NIQTMgKi8KKworI2VuZGlmIC8qICFOT19IQVNIX1dSQVBQRVIgKi8KKworZW51bSBtYXhfcHJmIHsKKyNpZmRlZiBIQVZFX0ZGREhFXzgxOTIKKyAgICBNQVhfUFJGX0hBTEYgICAgICAgID0gNTE2LCAvKiBNYXhpbXVtIGhhbGYgc2VjcmV0IGxlbiAqLworI2VsaWYgZGVmaW5lZChIQVZFX0ZGREhFXzYxNDQpCisgICAgTUFYX1BSRl9IQUxGICAgICAgICA9IDM4OCwgLyogTWF4aW11bSBoYWxmIHNlY3JldCBsZW4gKi8KKyNlbHNlCisgICAgTUFYX1BSRl9IQUxGICAgICAgICA9IDI2MCwgLyogTWF4aW11bSBoYWxmIHNlY3JldCBsZW4gKi8KKyNlbmRpZgorICAgIE1BWF9QUkZfTEFCU0VFRCAgICAgPSAxMjgsIC8qIE1heGltdW0gbGFiZWwgKyBzZWVkIGxlbiAqLworICAgIE1BWF9QUkZfRElHICAgICAgICAgPSAyMjQgIC8qIE1heGltdW0gZGlnZXN0IGxlbiAgICAgICovCit9OworCisjaWZkZWYgV09MRlNTTF9IQVZFX1BSRgorV09MRlNTTF9BUEkgaW50IHdjX1BSRihieXRlKiByZXN1bHQsIHdvcmQzMiByZXNMZW4sIGNvbnN0IGJ5dGUqIHNlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgd29yZDMyIHNlY0xlbiwgY29uc3QgYnl0ZSogc2VlZCwgd29yZDMyIHNlZWRMZW4sIGludCBoYXNoLAorICAgICAgICAgICAgICAgICAgICB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworV09MRlNTTF9BUEkgaW50IHdjX1BSRl9UTFN2MShieXRlKiBkaWdlc3QsIHdvcmQzMiBkaWdMZW4sIGNvbnN0IGJ5dGUqIHNlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgd29yZDMyIHNlY0xlbiwgY29uc3QgYnl0ZSogbGFiZWwsIHdvcmQzMiBsYWJMZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHNlZWQsIHdvcmQzMiBzZWVkTGVuLCB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworV09MRlNTTF9BUEkgaW50IHdjX1BSRl9UTFMoYnl0ZSogZGlnZXN0LCB3b3JkMzIgZGlnTGVuLCBjb25zdCBieXRlKiBzZWNyZXQsCisgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBzZWNMZW4sIGNvbnN0IGJ5dGUqIGxhYmVsLCB3b3JkMzIgbGFiTGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBzZWVkLCB3b3JkMzIgc2VlZExlbiwgaW50IHVzZUF0TGVhc3RTaGEyNTYsCisgICAgICAgICAgICAgICAgICAgIGludCBoYXNoX3R5cGUsIHZvaWQqIGhlYXAsIGludCBkZXZJZCk7CisjZW5kaWYgLyogV09MRlNTTF9IQVZFX1BSRiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogV09MRl9DUllQVF9IQVNIX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9oYzEyOC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2hjMTI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5M2EyNAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9oYzEyOC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIGhjMTI4LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL3dvbGZjcnlwdC9oYzEyOC5oCisqLworCisKKyNpZm5kZWYgV09MRl9DUllQVF9IQzEyOF9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfSEMxMjhfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmbmRlZiBOT19IQzEyOAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCitlbnVtIHsKKwlIQzEyOF9FTkNfVFlQRSA9ICBXQ19DSVBIRVJfSEMxMjgsICAgICAvKiBjaXBoZXIgdW5pcXVlIHR5cGUgKi8KK307CisKKy8qIEhDLTEyOCBzdHJlYW0gY2lwaGVyICovCit0eXBlZGVmIHN0cnVjdCBIQzEyOCB7CisgICAgd29yZDMyIFRbMTAyNF07ICAgICAgICAgICAgIC8qIFBbaV0gPSBUW2ldOyAgUVtpXSA9IFRbMTAyNCArIGkgXTsgKi8KKyAgICB3b3JkMzIgWFsxNl07CisgICAgd29yZDMyIFlbMTZdOworICAgIHdvcmQzMiBjb3VudGVyMTAyNDsgICAgICAgICAvKiBjb3VudGVyMTAyNCA9IGkgbW9kIDEwMjQgYXQgdGhlIGl0aCBzdGVwICovCisgICAgd29yZDMyIGtleVs4XTsKKyAgICB3b3JkMzIgaXZbOF07CisjaWZkZWYgWFNUUkVBTV9BTElHTgorICAgIHZvaWQqICBoZWFwOyAgLyogaGVhcCBoaW50LCBjdXJyZW50bHkgWE1BTExPQyBvbmx5IHVzZWQgd2l0aCBhbGlnbmluZyAqLworI2VuZGlmCit9IEhDMTI4OworCisKK1dPTEZTU0xfQVBJIGludCB3Y19IYzEyOF9Qcm9jZXNzKEhDMTI4KiwgYnl0ZSosIGNvbnN0IGJ5dGUqLCB3b3JkMzIpOworV09MRlNTTF9BUEkgaW50IHdjX0hjMTI4X1NldEtleShIQzEyOCosIGNvbnN0IGJ5dGUqIGtleSwgY29uc3QgYnl0ZSogaXYpOworCitXT0xGU1NMX0xPQ0FMIGludCB3Y19IYzEyOF9TZXRIZWFwKEhDMTI4KiBjdHgsIHZvaWQqIGhlYXApOworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9IQzEyOCAqLworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfSEMxMjhfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvaG1hYy5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2htYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGQxMmE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2htYWMuaApAQCAtMCwwICsxLDIxNCBAQAorLyogaG1hYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvaG1hYy5oCisqLworCisjaWZuZGVmIE5PX0hNQUMKKworI2lmbmRlZiBXT0xGX0NSWVBUX0hNQUNfSAorI2RlZmluZSBXT0xGX0NSWVBUX0hNQUNfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaGFzaC5oPgorCisjaWYgZGVmaW5lZChIQVZFX0ZJUFMpICYmIFwKKwkoIWRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pIHx8IChIQVZFX0ZJUFNfVkVSU0lPTiA8IDIpKQorLyogZm9yIGZpcHMgQHdjX2ZpcHMgKi8KKyAgICAjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9obWFjLmg+CisgICAgI2RlZmluZSBXQ19ITUFDX0JMT0NLX1NJWkUgSE1BQ19CTE9DS19TSVpFCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChIQVZFX0ZJUFMpICYmIFwKKwlkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiAoSEFWRV9GSVBTX1ZFUlNJT04gPj0gMikKKwkjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZmlwcy5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGF2b2lkIHJlZGVmaW5pdGlvbiBvZiBzdHJ1Y3RzICovCisjaWYgIWRlZmluZWQoSEFWRV9GSVBTKSB8fCBcCisgICAgKGRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pICYmIChIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyKSkKKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXN5bmMuaD4KKyNlbmRpZgorCisjaWZuZGVmIE5PX09MRF9XQ19OQU1FUworICAgICNkZWZpbmUgSE1BQ19CTE9DS19TSVpFIFdDX0hNQUNfQkxPQ0tfU0laRQorI2VuZGlmCisKKyNkZWZpbmUgV0NfSE1BQ19JTk5FUl9IQVNIX0tFWUVEX1NXICAgICAxCisjZGVmaW5lIFdDX0hNQUNfSU5ORVJfSEFTSF9LRVlFRF9ERVYgICAgMgorCitlbnVtIHsKKyAgICBITUFDX0ZJUFNfTUlOX0tFWSA9IDE0LCAgIC8qIDExMiBiaXQga2V5IGxlbmd0aCBtaW5pbXVtICovCisKKyAgICBJUEFEICAgID0gMHgzNiwKKyAgICBPUEFEICAgID0gMHg1QywKKworLyogSWYgYW55IGhhc2ggaXMgbm90IGVuYWJsZWQsIGFkZCB0aGUgSUQgaGVyZS4gKi8KKyNpZmRlZiBOT19NRDUKKyAgICBXQ19NRDUgICAgID0gV0NfSEFTSF9UWVBFX01ENSwKKyNlbmRpZgorI2lmZGVmIE5PX1NIQQorICAgIFdDX1NIQSAgICAgPSBXQ19IQVNIX1RZUEVfU0hBLAorI2VuZGlmCisjaWZkZWYgTk9fU0hBMjU2CisgICAgV0NfU0hBMjU2ICA9IFdDX0hBU0hfVFlQRV9TSEEyNTYsCisjZW5kaWYKKyNpZm5kZWYgV09MRlNTTF9TSEE1MTIKKyAgICBXQ19TSEE1MTIgID0gV0NfSEFTSF9UWVBFX1NIQTUxMiwKKyNlbmRpZgorI2lmbmRlZiBXT0xGU1NMX1NIQTM4NAorICAgIFdDX1NIQTM4NCAgPSBXQ19IQVNIX1RZUEVfU0hBMzg0LAorI2VuZGlmCisjaWZuZGVmIFdPTEZTU0xfU0hBMjI0CisgICAgV0NfU0hBMjI0ICA9IFdDX0hBU0hfVFlQRV9TSEEyMjQsCisjZW5kaWYKKyNpZm5kZWYgV09MRlNTTF9TSEEzCisgICAgV0NfU0hBM18yMjQgPSBXQ19IQVNIX1RZUEVfU0hBM18yMjQsCisgICAgV0NfU0hBM18yNTYgPSBXQ19IQVNIX1RZUEVfU0hBM18yNTYsCisgICAgV0NfU0hBM18zODQgPSBXQ19IQVNIX1RZUEVfU0hBM18zODQsCisgICAgV0NfU0hBM181MTIgPSBXQ19IQVNIX1RZUEVfU0hBM181MTIsCisjZW5kaWYKKyNpZmRlZiBIQVZFX1BLQ1MxMQorICAgIEhNQUNfTUFYX0lEX0xFTiAgICA9IDMyLAorICAgIEhNQUNfTUFYX0xBQkVMX0xFTiA9IDMyLAorI2VuZGlmCit9OworCisvKiBTZWxlY3QgdGhlIGxhcmdlc3QgYXZhaWxhYmxlIGhhc2ggZm9yIHRoZSBidWZmZXIgc2l6ZS4gKi8KKyNkZWZpbmUgV0NfSE1BQ19CTE9DS19TSVpFIFdDX01BWF9CTE9DS19TSVpFCisKKyNpZiAhZGVmaW5lZChXT0xGU1NMX1NIQTMpICYmICFkZWZpbmVkKFdPTEZTU0xfU0hBNTEyKSAmJiBcCisgICAgIWRlZmluZWQoV09MRlNTTF9TSEEzODQpICYmIGRlZmluZWQoTk9fU0hBMjU2KSAmJiBcCisgICAgZGVmaW5lZChXT0xGU1NMX1NIQTIyNCkgJiYgZGVmaW5lZChOT19TSEEpICYmIGRlZmluZWQoTk9fTUQ1KQorICAgICNlcnJvciAiWW91IGhhdmUgdG8gaGF2ZSBzb21lIGtpbmQgb2YgaGFzaCBpZiB5b3Ugd2FudCB0byB1c2UgSE1BQy4iCisjZW5kaWYKKworCisvKiBoYXNoIHVuaW9uICovCit0eXBlZGVmIHVuaW9uIHsKKyNpZm5kZWYgTk9fTUQ1CisgICAgd2NfTWQ1IG1kNTsKKyNlbmRpZgorI2lmbmRlZiBOT19TSEEKKyAgICB3Y19TaGEgc2hhOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9TSEEyMjQKKyAgICB3Y19TaGEyMjQgc2hhMjI0OworI2VuZGlmCisjaWZuZGVmIE5PX1NIQTI1NgorICAgIHdjX1NoYTI1NiBzaGEyNTY7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1NIQTM4NAorICAgIHdjX1NoYTM4NCBzaGEzODQ7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1NIQTUxMgorICAgIHdjX1NoYTUxMiBzaGE1MTI7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1NIQTMKKyAgICB3Y19TaGEzIHNoYTM7CisjZW5kaWYKK30gd2NfSG1hY19IYXNoOworCisvKiBIbWFjIGRpZ2VzdCAqLworc3RydWN0IEhtYWMgeworICAgIHdjX0htYWNfSGFzaCAgICBoYXNoOworICAgIHdvcmQzMiAgaXBhZFtXQ19ITUFDX0JMT0NLX1NJWkUgIC8gc2l6ZW9mKHdvcmQzMildOyAgLyogc2FtZSBibG9jayBzaXplIGFsbCovCisgICAgd29yZDMyICBvcGFkW1dDX0hNQUNfQkxPQ0tfU0laRSAgLyBzaXplb2Yod29yZDMyKV07CisgICAgd29yZDMyICBpbm5lckhhc2hbV0NfTUFYX0RJR0VTVF9TSVpFIC8gc2l6ZW9mKHdvcmQzMildOworICAgIHZvaWQqICAgaGVhcDsgICAgICAgICAgICAgICAgIC8qIGhlYXAgaGludCAqLworICAgIGJ5dGUgICAgbWFjVHlwZTsgICAgICAgICAgICAgIC8qIG1kNSBzaGEgb3Igc2hhMjU2ICovCisgICAgYnl0ZSAgICBpbm5lckhhc2hLZXllZDsgICAgICAgLyoga2V5ZWQgZmxhZyAqLworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICBXQ19BU1lOQ19ERVYgYXN5bmNEZXY7CisjZW5kaWYgLyogV09MRlNTTF9BU1lOQ19DUllQVCAqLworI2lmZGVmIFdPTEZfQ1JZUFRPX0NCCisgICAgaW50ICAgICBkZXZJZDsKKyAgICB2b2lkKiAgIGRldkN0eDsKKyAgICBjb25zdCBieXRlKiBrZXlSYXc7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1BLQ1MxMQorICAgIGJ5dGUgICAgaWRbSE1BQ19NQVhfSURfTEVOXTsKKyAgICBpbnQgICAgIGlkTGVuOworICAgIGNoYXIgICAgbGFiZWxbSE1BQ19NQVhfTEFCRUxfTEVOXTsKKyAgICBpbnQgICAgIGxhYmVsTGVuOworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0FTWU5DX0NSWVBUKSB8fCBkZWZpbmVkKFdPTEZfQ1JZUFRPX0NCKQorICAgIHdvcmQxNiAga2V5TGVuOyAgICAgICAgICAvKiBobWFjIGtleSBsZW5ndGggKGtleSBpbiBpcGFkKSAqLworI2VuZGlmCit9OworCisjaWZuZGVmIFdDX0hNQUNfVFlQRV9ERUZJTkVECisgICAgdHlwZWRlZiBzdHJ1Y3QgSG1hYyBIbWFjOworICAgICNkZWZpbmUgV0NfSE1BQ19UWVBFX0RFRklORUQKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBIQVZFX0ZJUFMgKi8KKworLyogZG9lcyBpbml0ICovCitXT0xGU1NMX0FQSSBpbnQgd2NfSG1hY1NldEtleShIbWFjKiwgaW50IHR5cGUsIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGtleVN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19IbWFjVXBkYXRlKEhtYWMqLCBjb25zdCBieXRlKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19IbWFjRmluYWwoSG1hYyosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19IbWFjU2l6ZUJ5VHlwZShpbnQgdHlwZSk7CisKK1dPTEZTU0xfQVBJIGludCB3Y19IbWFjSW5pdChIbWFjKiBobWFjLCB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworI2lmZGVmIEhBVkVfUEtDUzExCitXT0xGU1NMX0FQSSBpbnQgd2NfSG1hY0luaXRfSWQoSG1hYyogaG1hYywgYnl0ZSogaWQsIGludCBsZW4sIHZvaWQqIGhlYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldklkKTsKK1dPTEZTU0xfQVBJIGludCB3Y19IbWFjSW5pdF9MYWJlbChIbWFjKiBobWFjLCBjb25zdCBjaGFyKiBsYWJlbCwgdm9pZCogaGVhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV2SWQpOworI2VuZGlmCitXT0xGU1NMX0FQSSB2b2lkIHdjX0htYWNGcmVlKEhtYWMqKTsKKworV09MRlNTTF9BUEkgaW50IHdvbGZTU0xfR2V0SG1hY01heFNpemUodm9pZCk7CisKK1dPTEZTU0xfTE9DQUwgaW50IF9Jbml0SG1hYyhIbWFjKiBobWFjLCBpbnQgdHlwZSwgdm9pZCogaGVhcCk7CisKKyNpZmRlZiBIQVZFX0hLREYKKworV09MRlNTTF9BUEkgaW50IHdjX0hLREZfRXh0cmFjdChpbnQgdHlwZSwgY29uc3QgYnl0ZSogc2FsdCwgd29yZDMyIHNhbHRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW5LZXksIHdvcmQzMiBpbktleVN6LCBieXRlKiBvdXQpOworV09MRlNTTF9BUEkgaW50IHdjX0hLREZfRXhwYW5kKGludCB0eXBlLCBjb25zdCBieXRlKiBpbktleSwgd29yZDMyIGluS2V5U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW5mbywgd29yZDMyIGluZm9TeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXQsICAgICAgICB3b3JkMzIgb3V0U3opOworCitXT0xGU1NMX0FQSSBpbnQgd2NfSEtERihpbnQgdHlwZSwgY29uc3QgYnl0ZSogaW5LZXksIHdvcmQzMiBpbktleVN6LAorICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBzYWx0LCB3b3JkMzIgc2FsdFN6LAorICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbmZvLCB3b3JkMzIgaW5mb1N6LAorICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXQsIHdvcmQzMiBvdXRTeik7CisKKyNlbmRpZiAvKiBIQVZFX0hLREYgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfSE1BQ19IICovCisKKyNlbmRpZiAvKiBOT19ITUFDICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9pZGVhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvaWRlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTM4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvaWRlYS5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qIGlkZWEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L2lkZWEuaAorKi8KKworI2lmbmRlZiBXT0xGX0NSWVBUX0lERUFfSAorI2RlZmluZSBXT0xGX0NSWVBUX0lERUFfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIEhBVkVfSURFQQorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCitlbnVtIHsKKyAgICBJREVBX01PRFVMTyAgICAgPSAweDEwMDAxLCAgICAgICAgICAgICAvKiAyXjE2KzEgKi8KKyAgICBJREVBXzJFWFAxNiAgICAgPSAweDEwMDAwLCAgICAgICAgICAgICAvKiAyXjE2ICovCisgICAgSURFQV9NQVNLICAgICAgID0gMHhGRkZGLCAgICAgICAgICAgICAgLyogMTYgYml0cyBzZXQgdG8gb25lICovCisgICAgSURFQV9ST1VORFMgICAgID0gOCwgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHJvdW5kcyBmb3IgSURFQSAqLworICAgIElERUFfU0tfTlVNICAgICA9ICg2KklERUFfUk9VTkRTICsgNCksIC8qIG51bWJlciBvZiBzdWJrZXlzICovCisgICAgSURFQV9LRVlfU0laRSAgID0gMTYsICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBrZXkgaW4gYnl0ZXMgKi8KKyAgICBJREVBX0JMT0NLX1NJWkUgPSA4LCAgICAgICAgICAgICAgICAgICAvKiBzaXplIG9mIElERUEgYmxvY2tzIGluIGJ5dGVzICovCisgICAgSURFQV9JVl9TSVpFICAgID0gOCwgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBJREVBIElWIGluIGJ5dGVzICovCisgICAgSURFQV9FTkNSWVBUSU9OID0gMCwKKyAgICBJREVBX0RFQ1JZUFRJT04gPSAxCit9OworCisvKiBJREVBIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gKi8KK3R5cGVkZWYgc3RydWN0IElkZWEgeworICAgIHdvcmQzMiAgcmVnW0lERUFfQkxPQ0tfU0laRSAvIHNpemVvZih3b3JkMzIpXTsgLyogZm9yIENCQyBtb2RlICovCisgICAgd29yZDMyICB0bXBbSURFQV9CTE9DS19TSVpFIC8gc2l6ZW9mKHdvcmQzMildOyAvKiBmb3IgQ0JDIG1vZGUgKi8KKyAgICB3b3JkMTYgIHNrZXlbSURFQV9TS19OVU1dOyAvKiA4MzIgYml0cyBleHBhbmRlZCBrZXkgKi8KK30gSWRlYTsKKworV09MRlNTTF9BUEkgaW50IHdjX0lkZWFTZXRLZXkoSWRlYSAqaWRlYSwgY29uc3QgYnl0ZSoga2V5LCB3b3JkMTYga2V5U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlICppdiwgaW50IGRpcik7CitXT0xGU1NMX0FQSSBpbnQgd2NfSWRlYVNldElWKElkZWEgKmlkZWEsIGNvbnN0IGJ5dGUqIGl2KTsKK1dPTEZTU0xfQVBJIGludCB3Y19JZGVhQ2lwaGVyKElkZWEgKmlkZWEsIGJ5dGUqIG91dCwgY29uc3QgYnl0ZSogaW4pOworV09MRlNTTF9BUEkgaW50IHdjX0lkZWFDYmNFbmNyeXB0KElkZWEgKmlkZWEsIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIGxlbik7CitXT0xGU1NMX0FQSSBpbnQgd2NfSWRlYUNiY0RlY3J5cHQoSWRlYSAqaWRlYSwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgbGVuKTsKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX0lERUEgKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0lERUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L2ludGVnZXIuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9pbnRlZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1ZjU1YwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9pbnRlZ2VyLmgKQEAgLTAsMCArMSw0MTYgQEAKKy8qIGludGVnZXIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworLyoKKyAqIEJhc2VkIG9uIHB1YmxpYyBkb21haW4gTGliVG9tTWF0aCAwLjM4IGJ5IFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BpYWh1LmNhLAorICogaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfSU5URUdFUl9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfSU5URUdFUl9ICisKKy8qIG1heSBvcHRpb25hbGx5IHVzZSBmYXN0IG1hdGggaW5zdGVhZCwgbm90IHlldCBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtcyBhbmQKKyAgIG1heSBub3QgYmUgZmFzdGVyIG9uIGFsbAorKi8KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPiAgICAgICAvKiB3aWxsIHNldCBNUF94eEJJVCBpZiBub3QgZGVmYXVsdCAqLworI2lmIGRlZmluZWQoV09MRlNTTF9TUF9NQVRIKSB8fCBkZWZpbmVkKFdPTEZTU0xfU1BfTUFUSF9BTEwpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NwX2ludC5oPgorI2VsaWYgZGVmaW5lZChVU0VfRkFTVF9NQVRIKQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90Zm0uaD4KKyNlbHNlCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9yYW5kb20uaD4KKworI2lmbmRlZiBDSEFSX0JJVAorICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfTElOVVhLTSkKKyAgICAgICAgI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorICAgICNlbHNlCisgICAgICAgICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvbXBpX2NsYXNzLmg+CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKworLyogQysrIGNvbXBpbGVycyBkb24ndCBsaWtlIGFzc2lnbmluZyB2b2lkICogdG8gbXBfZGlnaXQgKiAqLworI2RlZmluZSAgT1BUX0NBU1QoeCkgICh4ICopCisKKyNlbGlmIGRlZmluZWQoX1NIMykKKworLyogU3VwZXJIIFNIMyBjb21waWxlciBkb2Vzbid0IGxpa2UgYXNzaWduaW5nIHZvaSogdG8gbXBfZGlnaXQqICovCisjZGVmaW5lICBPUFRfQ0FTVCh4KSAgKHggKikKKworI2Vsc2UKKworLyogQyBvbiB0aGUgb3RoZXIgaGFuZCBkb2Vzbid0IGNhcmUgKi8KKyNkZWZpbmUgIE9QVF9DQVNUKHgpCisKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisKKy8qIGRldGVjdCA2NC1iaXQgbW9kZSBpZiBwb3NzaWJsZSAqLworI2lmIChkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pKSAmJiAhKGRlZmluZWQgKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9fY2xhbmdfXykpCisgICAjaWYgIShkZWZpbmVkKE1QXzY0QklUKSAmJiBkZWZpbmVkKE1QXzE2QklUKSAmJiBkZWZpbmVkKE1QXzhCSVQpKQorICAgICAgI2RlZmluZSBNUF82NEJJVAorICAgI2VuZGlmCisjZW5kaWYKKy8qIGlmIGludGVsIGNvbXBpbGVyIGRvZXNuJ3QgcHJvdmlkZSAxMjggYml0IHR5cGUgZG9uJ3QgdHVybiBvbiA2NGJpdCAqLworI2lmIGRlZmluZWQoTVBfNjRCSVQpICYmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgIWRlZmluZWQoSEFWRV9fX1VJTlQxMjhfVCkKKyAgICAjdW5kZWYgTVBfNjRCSVQKKyNlbmRpZgorCisKKy8qIGFsbG93IHVzZXIgdG8gZGVmaW5lIG9uIG1wX2RpZ2l0LCBtcF93b3JkLCBESUdJVF9CSVQgdHlwZXMgKi8KKyNpZm5kZWYgV09MRlNTTF9CSUdJTlRfVFlQRVMKKworLyogc29tZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLgorICoKKyAqIEEgIm1wX2RpZ2l0IiBtdXN0IGJlIGFibGUgdG8gaG9sZCBESUdJVF9CSVQgKyAxIGJpdHMKKyAqIEEgIm1wX3dvcmQiIG11c3QgYmUgYWJsZSB0byBob2xkIDIqRElHSVRfQklUICsgMSBiaXRzCisgKgorICogQXQgdGhlIHZlcnkgbGVhc3QgYSBtcF9kaWdpdCBtdXN0IGJlIGFibGUgdG8gaG9sZCA3IGJpdHMKKyAqIFthbnkgc2l6ZSBiZXlvbmQgdGhhdCBpcyBvayBwcm92aWRlZCBpdCBkb2Vzbid0IG92ZXJmbG93IHRoZSBkYXRhIHR5cGVdCisgKi8KKyNpZmRlZiBNUF84QklUCisgICAvKiA4LWJpdCAqLworICAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgbXBfZGlnaXQ7CisgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICBtcF93b3JkOworICAgLyogZG9uJ3QgZGVmaW5lIERJR0lUX0JJVCwgc28gaXRzIGNhbGN1bGF0ZWQgYmVsb3cgKi8KKyNlbGlmIGRlZmluZWQoTVBfMTZCSVQpCisgICAvKiAxNi1iaXQgKi8KKyAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgIG1wX2RpZ2l0OworICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfd29yZDsKKyAgIC8qIGRvbid0IGRlZmluZSBESUdJVF9CSVQsIHNvIGl0cyBjYWxjdWxhdGVkIGJlbG93ICovCisjZWxpZiBkZWZpbmVkKE5PXzY0QklUKQorICAgLyogMzItYml0IGZvcmNlZCB0byAxNi1iaXQgKi8KKyAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgIG1wX2RpZ2l0OworICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgbXBfd29yZDsKKyAgICNkZWZpbmUgRElHSVRfQklUICAgICAgICAgIDEyCisjZWxpZiBkZWZpbmVkKE1QXzY0QklUKQorICAgLyogNjQtYml0ICovCisgICAvKiBmb3IgR0NDIG9ubHkgb24gc3VwcG9ydGVkIHBsYXRmb3JtcyAqLworICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgbXBfZGlnaXQ7ICAvKiA2NCBiaXQgdHlwZSwgMTI4IHVzZXMgbW9kZShUSSkgKi8KKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgIG1wX3dvcmQgX19hdHRyaWJ1dGVfXyAoKG1vZGUoVEkpKSk7CisgICAjZGVmaW5lIERJR0lUX0JJVCAgICAgICAgICA2MAorI2Vsc2UKKyAgIC8qIDMyLWJpdCBkZWZhdWx0IGNhc2UgKi8KKworICAgI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQorICAgICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0ICAgdWxvbmc2NDsKKyAgICNlbHNlCisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bG9uZzY0OworICAgI2VuZGlmCisKKyAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgIG1wX2RpZ2l0OyAgLyogbG9uZyBjb3VsZCBiZSA2NCBub3csIGNoYW5nZWQgVEFPICovCisgICB0eXBlZGVmIHVsb25nNjQgICAgICAgICAgICBtcF93b3JkOworCisgICAjaWZkZWYgTVBfMzFCSVQKKyAgICAgIC8qIHRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRoYXQgdXNlcyAzMS1iaXQgZGlnaXRzICovCisgICAgICAjZGVmaW5lIERJR0lUX0JJVCAgICAgICAgICAzMQorICAgI2Vsc2UKKyAgICAgIC8qIGRlZmF1bHQgY2FzZSBpcyAyOC1iaXQgZGlnaXRzLCBkZWZpbmVzIE1QXzI4QklUIGFzIGEgaGFuZHkgdGVzdCBtYWNybyAqLworICAgICAgI2RlZmluZSBESUdJVF9CSVQgICAgICAgICAgMjgKKyAgICAgICNkZWZpbmUgTVBfMjhCSVQKKyAgICNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX0JJR0lOVF9UWVBFUyAqLworCisvKiBvdGhlcndpc2UgdGhlIGJpdHMgcGVyIGRpZ2l0IGlzIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBzaXplIG9mCisgICBhIG1wX2RpZ2l0ICovCisjaWZuZGVmIERJR0lUX0JJVAorICAgI2RlZmluZSBESUdJVF9CSVQgKChpbnQpKChDSEFSX0JJVCAqIHNpemVvZihtcF9kaWdpdCkgLSAxKSkpCisgICAgICAvKiBiaXRzIHBlciBkaWdpdCAqLworI2VuZGlmCisKKyNkZWZpbmUgTVBfRElHSVRfQklUICAgICBESUdJVF9CSVQKKyNkZWZpbmUgTVBfTUFTSyAgICAgICAgICAoKCgobXBfZGlnaXQpMSk8PCgobXBfZGlnaXQpRElHSVRfQklUKSktKChtcF9kaWdpdCkxKSkKKyNkZWZpbmUgTVBfRElHSVRfTUFYICAgICBNUF9NQVNLCisKKy8qIGVxdWFsaXRpZXMgKi8KKyNkZWZpbmUgTVBfTFQgICAgICAgIC0xICAgLyogbGVzcyB0aGFuICovCisjZGVmaW5lIE1QX0VRICAgICAgICAgMCAgIC8qIGVxdWFsIHRvICovCisjZGVmaW5lIE1QX0dUICAgICAgICAgMSAgIC8qIGdyZWF0ZXIgdGhhbiAqLworCisjZGVmaW5lIE1QX1pQT1MgICAgICAgMCAgIC8qIHBvc2l0aXZlIGludGVnZXIgKi8KKyNkZWZpbmUgTVBfTkVHICAgICAgICAxICAgLyogbmVnYXRpdmUgKi8KKworI2RlZmluZSBNUF9PS0FZICAgICAgIDAgICAvKiBvayByZXN1bHQgKi8KKyNkZWZpbmUgTVBfTUVNICAgICAgICAtMiAgLyogb3V0IG9mIG1lbSAqLworI2RlZmluZSBNUF9WQUwgICAgICAgIC0zICAvKiBpbnZhbGlkIGlucHV0ICovCisjZGVmaW5lIE1QX05PVF9JTkYgICAgLTQgIC8qIHBvaW50IG5vdCBhdCBpbmZpbml0eSAqLworI2RlZmluZSBNUF9SQU5HRSAgICAgIE1QX05PVF9JTkYKKworI2RlZmluZSBNUF9ZRVMgICAgICAgIDEgICAvKiB5ZXMgcmVzcG9uc2UgKi8KKyNkZWZpbmUgTVBfTk8gICAgICAgICAwICAgLyogbm8gcmVzcG9uc2UgKi8KKworLyogUHJpbWFsaXR5IGdlbmVyYXRpb24gZmxhZ3MgKi8KKyNkZWZpbmUgTFRNX1BSSU1FX0JCUyAgICAgIDB4MDAwMSAvKiBCQlMgc3R5bGUgcHJpbWUgKi8KKyNkZWZpbmUgTFRNX1BSSU1FX1NBRkUgICAgIDB4MDAwMiAvKiBTYWZlIHByaW1lIChwLTEpLzIgPT0gcHJpbWUgKi8KKyNkZWZpbmUgTFRNX1BSSU1FXzJNU0JfT04gIDB4MDAwOCAvKiBmb3JjZSAybmQgTVNCIHRvIDEgKi8KKwordHlwZWRlZiBpbnQgICAgICAgICAgIG1wX2VycjsKKworLyogZGVmaW5lIHRoaXMgdG8gdXNlIGxvd2VyIG1lbW9yeSB1c2FnZSByb3V0aW5lcyAoZXhwdG1vZHMgbW9zdGx5KSAqLworI2RlZmluZSBNUF9MT1dfTUVNCisKKy8qIGRlZmF1bHQgcHJlY2lzaW9uICovCisjaWZuZGVmIE1QX1BSRUMKKyAgICNpZm5kZWYgTVBfTE9XX01FTQorICAgICAgI2RlZmluZSBNUF9QUkVDICAgICAgICAgICAgICAgICAzMiAgICAgLyogZGVmYXVsdCBkaWdpdHMgb2YgcHJlY2lzaW9uICovCisgICAjZWxzZQorICAgICAgI2RlZmluZSBNUF9QUkVDICAgICAgICAgICAgICAgICAxICAgICAgLyogZGVmYXVsdCBkaWdpdHMgb2YgcHJlY2lzaW9uICovCisgICAjZW5kaWYKKyNlbmRpZgorCisvKiBzaXplIG9mIGNvbWJhIGFycmF5cywgc2hvdWxkIGJlIGF0IGxlYXN0IDIgKiAyKiooQklUU19QRVJfV09SRCAtCisgICBCSVRTX1BFUl9ESUdJVCoyKSAqLworI2RlZmluZSBNUF9XQVJSQVkgICgobXBfd29yZCkxIDw8IChzaXplb2YobXBfd29yZCkgKiBDSEFSX0JJVCAtIDIgKiBESUdJVF9CSVQgKyAxKSkKKworI2lmZGVmIEhBVkVfV09MRl9CSUdJTlQKKyAgICAvKiByYXcgYmlnIGludGVnZXIgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBXQ19CSUdJTlQgeworICAgICAgICBieXRlKiAgIGJ1ZjsKKyAgICAgICAgd29yZDMyICBsZW47CisgICAgICAgIHZvaWQqICAgaGVhcDsKKyAgICB9IFdDX0JJR0lOVDsKKyAgICAjZGVmaW5lIFdPTEZfQklHSU5UX0RFRklORUQKKyNlbmRpZgorCisvKiB0aGUgbXBfaW50IHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgbXBfaW50IHsKKyAgICBpbnQgdXNlZCwgYWxsb2MsIHNpZ247CisgICAgbXBfZGlnaXQgKmRwOworCisjaWZkZWYgSEFWRV9XT0xGX0JJR0lOVAorICAgIHN0cnVjdCBXQ19CSUdJTlQgcmF3OyAvKiB1bnNpZ25lZCBiaW5hcnkgKGJpZyBlbmRpYW4pICovCisjZW5kaWYKK30gbXBfaW50OworCisvKiB3b2xmIGJpZyBpbnQgYW5kIGNvbW1vbiBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC93b2xmbWF0aC5oPgorCisKKy8qIGNhbGxiYWNrIGZvciBtcF9wcmltZV9yYW5kb20sIHNob3VsZCBmaWxsIGRzdCB3aXRoIHJhbmRvbSBieXRlcyBhbmQgcmV0dXJuCisgICBob3cgbWFueSByZWFkIFt1cCB0byBsZW5dICovCit0eXBlZGVmIGludCBsdG1fcHJpbWVfY2FsbGJhY2sodW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLCB2b2lkICpkYXQpOworCisKKyNkZWZpbmUgVVNFRChtKSAgICAoKG0pLT51c2VkKQorI2RlZmluZSBESUdJVChtLGspICgobSktPmRwWyhrKV0pCisjZGVmaW5lIFNJR04obSkgICAgKChtKS0+c2lnbikKKworCisvKiAtLS0+IEJhc2ljIE1hbmlwdWxhdGlvbnMgPC0tLSAqLworI2RlZmluZSBtcF9pc3plcm8oYSkgKCgoYSktPnVzZWQgPT0gMCkgPyBNUF9ZRVMgOiBNUF9OTykKKyNkZWZpbmUgbXBfaXNvbmUoYSkgXAorICAgICgoKCgoYSktPnVzZWQgPT0gMSkpICYmICgoYSktPmRwWzBdID09IDF1KSAmJiAoKGEpLT5zaWduID09IE1QX1pQT1MpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1QX1lFUyA6IE1QX05PKQorI2RlZmluZSBtcF9pc2V2ZW4oYSkgXAorICAgICgoKGEpLT51c2VkID4gMCAmJiAoKChhKS0+ZHBbMF0gJiAxdSkgPT0gMHUpKSA/IE1QX1lFUyA6IE1QX05PKQorI2RlZmluZSBtcF9pc29kZChhKSBcCisgICAgKCgoYSktPnVzZWQgPiAwICYmICgoKGEpLT5kcFswXSAmIDF1KSA9PSAxdSkpID8gTVBfWUVTIDogTVBfTk8pCisjZGVmaW5lIG1wX2lzbmVnKGEpICAoKChhKS0+c2lnbiAhPSBNUF9aUE9TKSA/IE1QX1lFUyA6IE1QX05PKQorI2RlZmluZSBtcF9pc3dvcmQoYSwgdykgXAorICAgICgoKChhKS0+dXNlZCA9PSAxKSAmJiAoKGEpLT5kcFswXSA9PSB3KSkgfHwgKCh3ID09IDApICYmICgoYSktPnVzZWQgPT0gMCkpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTVBfWUVTIDogTVBfTk8pCisKKy8qIG51bWJlciBvZiBwcmltZXMgKi8KKyNpZmRlZiBNUF84QklUCisgICAjZGVmaW5lIFBSSU1FX1NJWkUgICAgICAzMQorI2Vsc2UKKyAgICNkZWZpbmUgUFJJTUVfU0laRSAgICAgIDI1NgorI2VuZGlmCisKKyNpZm5kZWYgTUFYX0lOVk1PRF9TWgorICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfTVlTUUxfQ09NUEFUSUJMRSkKKyAgICAgICAgI2RlZmluZSBNQVhfSU5WTU9EX1NaIDgxOTIKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIE1BWF9JTlZNT0RfU1ogNDA5NgorICAgICNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgbXBfcHJpbWVfcmFuZG9tKGEsIHQsIHNpemUsIGJicywgY2IsIGRhdCkgXAorICAgbXBfcHJpbWVfcmFuZG9tX2V4KGEsIHQsICgoc2l6ZSkgKiA4KSArIDEsIChiYnM9PTEpP0xUTV9QUklNRV9CQlM6MCwgY2IsIGRhdCkKKworI2RlZmluZSBtcF9yZWFkX21hZyhtcCwgc3RyLCBsZW4pIG1wX3JlYWRfdW5zaWduZWRfYmluKChtcCksIChzdHIpLCAobGVuKSkKKyNkZWZpbmUgbXBfbWFnX3NpemUobXApICAgICAgICAgICBtcF91bnNpZ25lZF9iaW5fc2l6ZShtcCkKKyNkZWZpbmUgbXBfdG9tYWcobXAsIHN0cikgICAgICAgICBtcF90b191bnNpZ25lZF9iaW4oKG1wKSwgKHN0cikpCisKKyNkZWZpbmUgTVBfUkFESVhfQklOICAyCisjZGVmaW5lIE1QX1JBRElYX09DVCAgOAorI2RlZmluZSBNUF9SQURJWF9ERUMgIDEwCisjZGVmaW5lIE1QX1JBRElYX0hFWCAgMTYKKyNkZWZpbmUgTVBfUkFESVhfTUFYICA2NAorCisjZGVmaW5lIG1wX3RvYmluYXJ5KE0sIFMpICBtcF90b3JhZGl4KChNKSwgKFMpLCBNUF9SQURJWF9CSU4pCisjZGVmaW5lIG1wX3Rvb2N0YWwoTSwgUykgICBtcF90b3JhZGl4KChNKSwgKFMpLCBNUF9SQURJWF9PQ1QpCisjZGVmaW5lIG1wX3RvZGVjaW1hbChNLCBTKSBtcF90b3JhZGl4KChNKSwgKFMpLCBNUF9SQURJWF9ERUMpCisjZGVmaW5lIG1wX3RvaGV4KE0sIFMpICAgICBtcF90b3JhZGl4KChNKSwgKFMpLCBNUF9SQURJWF9IRVgpCisKKyNkZWZpbmUgc19tcF9tdWwoYSwgYiwgYykgc19tcF9tdWxfZGlncyhhLCBiLCBjLCAoYSktPnVzZWQgKyAoYiktPnVzZWQgKyAxKQorCisjaWYgZGVmaW5lZChIQVZFX0VDQykgfHwgZGVmaW5lZChXT0xGU1NMX0tFWV9HRU4pIHx8IGRlZmluZWQoSEFWRV9DT01QX0tFWSkgfHwgXAorICAgIGRlZmluZWQoV09MRlNTTF9ERUJVR19NQVRIKSB8fCBkZWZpbmVkKERFQlVHX1dPTEZTU0wpCitleHRlcm4gY29uc3QgY2hhciAqbXBfc19ybWFwOworI2VuZGlmCisKKy8qIDYgZnVuY3Rpb25zIG5lZWRlZCBieSBSc2EgKi8KK01QX0FQSSBpbnQgIG1wX2luaXQgKG1wX2ludCAqIGEpOworTVBfQVBJIHZvaWQgbXBfY2xlYXIgKG1wX2ludCAqIGEpOworTVBfQVBJIHZvaWQgbXBfZnJlZSAobXBfaW50ICogYSk7CitNUF9BUEkgdm9pZCBtcF9mb3JjZXplcm8obXBfaW50ICogYSk7CitNUF9BUEkgaW50ICBtcF91bnNpZ25lZF9iaW5fc2l6ZShjb25zdCBtcF9pbnQgKiBhKTsKK01QX0FQSSBpbnQgIG1wX3JlYWRfdW5zaWduZWRfYmluIChtcF9pbnQgKiBhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYyk7CitNUF9BUEkgaW50ICBtcF90b191bnNpZ25lZF9iaW5fYXRfcG9zKGludCB4LCBtcF9pbnQgKnQsIHVuc2lnbmVkIGNoYXIgKmIpOworTVBfQVBJIGludCAgbXBfdG9fdW5zaWduZWRfYmluIChtcF9pbnQgKiBhLCB1bnNpZ25lZCBjaGFyICpiKTsKK01QX0FQSSBpbnQgIG1wX3RvX3Vuc2lnbmVkX2Jpbl9sZW4obXBfaW50ICogYSwgdW5zaWduZWQgY2hhciAqYiwgaW50IGMpOworTVBfQVBJIGludCAgbXBfZXhwdG1vZCAobXBfaW50ICogRywgbXBfaW50ICogWCwgbXBfaW50ICogUCwgbXBfaW50ICogWSk7CitNUF9BUEkgaW50ICBtcF9leHB0bW9kX2V4IChtcF9pbnQgKiBHLCBtcF9pbnQgKiBYLCBpbnQgZGlnaXRzLCBtcF9pbnQgKiBQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfaW50ICogWSk7CisvKiBlbmQgZnVuY3Rpb25zIG5lZWRlZCBieSBSc2EgKi8KKworLyogZnVuY3Rpb25zIGFkZGVkIHRvIHN1cHBvcnQgYWJvdmUgbmVlZGVkLCByZW1vdmVkIFRPT00gYW5kIEtBUkFUU1VCQSAqLworTVBfQVBJIGludCAgbXBfY291bnRfYml0cyAoY29uc3QgbXBfaW50ICogYSk7CitNUF9BUEkgaW50ICBtcF9sZWFkaW5nX2JpdCAobXBfaW50ICogYSk7CitNUF9BUEkgaW50ICBtcF9pbml0X2NvcHkgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpOworTVBfQVBJIGludCAgbXBfY29weSAoY29uc3QgbXBfaW50ICogYSwgbXBfaW50ICogYik7CitNUF9BUEkgaW50ICBtcF9ncm93IChtcF9pbnQgKiBhLCBpbnQgc2l6ZSk7CitNUF9BUEkgaW50ICBtcF9kaXZfMmQgKG1wX2ludCAqIGEsIGludCBiLCBtcF9pbnQgKiBjLCBtcF9pbnQgKiBkKTsKK01QX0FQSSB2b2lkIG1wX3plcm8gKG1wX2ludCAqIGEpOworTVBfQVBJIHZvaWQgbXBfY2xhbXAgKG1wX2ludCAqIGEpOworTVBfQVBJIHZvaWQgbXBfZXhjaCAobXBfaW50ICogYSwgbXBfaW50ICogYik7CitNUF9BUEkgaW50ICBtcF9jb25kX3N3YXBfY3QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIGludCBjLCBpbnQgbSk7CitNUF9BUEkgdm9pZCBtcF9yc2hkIChtcF9pbnQgKiBhLCBpbnQgYik7CitNUF9BUEkgdm9pZCBtcF9yc2hiIChtcF9pbnQgKiBhLCBpbnQgYik7CitNUF9BUEkgaW50ICBtcF9tb2RfMmQgKG1wX2ludCAqIGEsIGludCBiLCBtcF9pbnQgKiBjKTsKK01QX0FQSSBpbnQgIG1wX211bF8yZCAobXBfaW50ICogYSwgaW50IGIsIG1wX2ludCAqIGMpOworTVBfQVBJIGludCAgbXBfbHNoZCAobXBfaW50ICogYSwgaW50IGIpOworTVBfQVBJIGludCAgbXBfYWJzIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKTsKK01QX0FQSSBpbnQgIG1wX2ludm1vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYyk7CitpbnQgIGZhc3RfbXBfaW52bW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKTsKK01QX0FQSSBpbnQgIG1wX2ludm1vZF9zbG93IChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKTsKK01QX0FQSSBpbnQgIG1wX2NtcF9tYWcgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpOworTVBfQVBJIGludCAgbXBfY21wIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKTsKK01QX0FQSSBpbnQgIG1wX2NtcF9kKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIpOworTVBfQVBJIGludCAgbXBfc2V0IChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiKTsKK01QX0FQSSBpbnQgIG1wX2lzX2JpdF9zZXQgKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIpOworTVBfQVBJIGludCAgbXBfbW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKTsKK01QX0FQSSBpbnQgIG1wX2RpdihtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBtcF9pbnQgKiBkKTsKK01QX0FQSSBpbnQgIG1wX2Rpdl8yKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpOworTVBfQVBJIGludCAgbXBfZGl2XzJfbW9kX2N0IChtcF9pbnQqIGEsIG1wX2ludCogYiwgbXBfaW50KiBjKTsKK01QX0FQSSBpbnQgIG1wX2FkZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYyk7CitpbnQgIHNfbXBfYWRkIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKTsKK2ludCAgc19tcF9zdWIgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpOworTVBfQVBJIGludCAgbXBfc3ViIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKTsKK01QX0FQSSBpbnQgIG1wX3JlZHVjZV9pc18ya19sKG1wX2ludCAqYSk7CitNUF9BUEkgaW50ICBtcF9yZWR1Y2VfaXNfMmsobXBfaW50ICphKTsKK01QX0FQSSBpbnQgIG1wX2RyX2lzX21vZHVsdXMobXBfaW50ICphKTsKK01QX0FQSSBpbnQgIG1wX2V4cHRtb2RfZmFzdCAobXBfaW50ICogRywgbXBfaW50ICogWCwgbXBfaW50ICogUCwgbXBfaW50ICogWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KTsKK01QX0FQSSBpbnQgIG1wX2V4cHRtb2RfYmFzZV8yIChtcF9pbnQgKiBYLCBtcF9pbnQgKiBQLCBtcF9pbnQgKiBZKTsKKyNkZWZpbmUgbXBfZXhwdG1vZF9uY3QoRyxYLFAsWSkgICAgbXBfZXhwdG1vZF9mYXN0KEcsWCxQLFksMCkKK01QX0FQSSBpbnQgIG1wX21vbnRnb21lcnlfc2V0dXAgKG1wX2ludCAqIG4sIG1wX2RpZ2l0ICogcmhvKTsKK2ludCAgZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZSAobXBfaW50ICogeCwgbXBfaW50ICogbiwgbXBfZGlnaXQgcmhvKTsKK01QX0FQSSBpbnQgIG1wX21vbnRnb21lcnlfcmVkdWNlIChtcF9pbnQgKiB4LCBtcF9pbnQgKiBuLCBtcF9kaWdpdCByaG8pOworI2RlZmluZSBtcF9tb250Z29tZXJ5X3JlZHVjZV9leCh4LCBuLCByaG8sIGN0KSBtcF9tb250Z29tZXJ5X3JlZHVjZSAoeCwgbiwgcmhvKQorTVBfQVBJIHZvaWQgbXBfZHJfc2V0dXAobXBfaW50ICphLCBtcF9kaWdpdCAqZCk7CitNUF9BUEkgaW50ICBtcF9kcl9yZWR1Y2UgKG1wX2ludCAqIHgsIG1wX2ludCAqIG4sIG1wX2RpZ2l0IGspOworTVBfQVBJIGludCAgbXBfcmVkdWNlXzJrKG1wX2ludCAqYSwgbXBfaW50ICpuLCBtcF9kaWdpdCBkKTsKK2ludCAgZmFzdF9zX21wX211bF9oaWdoX2RpZ3MgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIGludCBkaWdzKTsKK2ludCAgc19tcF9tdWxfaGlnaF9kaWdzIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBpbnQgZGlncyk7CitNUF9BUEkgaW50ICBtcF9yZWR1Y2VfMmtfc2V0dXBfbChtcF9pbnQgKmEsIG1wX2ludCAqZCk7CitNUF9BUEkgaW50ICBtcF9yZWR1Y2VfMmtfbChtcF9pbnQgKmEsIG1wX2ludCAqbiwgbXBfaW50ICpkKTsKK01QX0FQSSBpbnQgIG1wX3JlZHVjZSAobXBfaW50ICogeCwgbXBfaW50ICogbSwgbXBfaW50ICogbXUpOworTVBfQVBJIGludCAgbXBfcmVkdWNlX3NldHVwIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKTsKK2ludCAgc19tcF9leHB0bW9kIChtcF9pbnQgKiBHLCBtcF9pbnQgKiBYLCBtcF9pbnQgKiBQLCBtcF9pbnQgKiBZLCBpbnQgcmVkbW9kZSk7CitNUF9BUEkgaW50ICBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbiAobXBfaW50ICogYSwgbXBfaW50ICogYik7CitpbnQgIHNfbXBfbXVsX2RpZ3MgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIGludCBkaWdzKTsKK2ludCAgc19tcF9zcXIgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpOworaW50ICBmYXN0X3NfbXBfbXVsX2RpZ3MgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIGludCBkaWdzKTsKK2ludCAgZmFzdF9zX21wX3NxciAobXBfaW50ICogYSwgbXBfaW50ICogYik7CitNUF9BUEkgaW50ICBtcF9pbml0X3NpemUgKG1wX2ludCAqIGEsIGludCBzaXplKTsKK01QX0FQSSBpbnQgIG1wX2Rpdl8zIChtcF9pbnQgKiBhLCBtcF9pbnQgKmMsIG1wX2RpZ2l0ICogZCk7CitNUF9BUEkgaW50ICBtcF9tdWxfMihtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKTsKK01QX0FQSSBpbnQgIG1wX211bCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYyk7CitNUF9BUEkgaW50ICBtcF9zcXIgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpOworTVBfQVBJIGludCAgbXBfbXVsbW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBtcF9pbnQgKiBkKTsKK01QX0FQSSBpbnQgIG1wX3N1Ym1vZCAobXBfaW50KiBhLCBtcF9pbnQqIGIsIG1wX2ludCogYywgbXBfaW50KiBkKTsKK01QX0FQSSBpbnQgIG1wX2FkZG1vZCAobXBfaW50KiBhLCBtcF9pbnQqIGIsIG1wX2ludCogYywgbXBfaW50KiBkKTsKK01QX0FQSSBpbnQgIG1wX3N1Ym1vZF9jdCAobXBfaW50KiBhLCBtcF9pbnQqIGIsIG1wX2ludCogYywgbXBfaW50KiBkKTsKK01QX0FQSSBpbnQgIG1wX2FkZG1vZF9jdCAobXBfaW50KiBhLCBtcF9pbnQqIGIsIG1wX2ludCogYywgbXBfaW50KiBkKTsKK01QX0FQSSBpbnQgIG1wX211bF9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjKTsKK01QX0FQSSBpbnQgIG1wXzJleHB0IChtcF9pbnQgKiBhLCBpbnQgYik7CitNUF9BUEkgaW50ICBtcF9zZXRfYml0IChtcF9pbnQgKiBhLCBpbnQgYik7CitNUF9BUEkgaW50ICBtcF9yZWR1Y2VfMmtfc2V0dXAobXBfaW50ICphLCBtcF9kaWdpdCAqZCk7CitNUF9BUEkgaW50ICBtcF9hZGRfZCAobXBfaW50KiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQqIGMpOworTVBfQVBJIGludCAgbXBfc2V0X2ludCAobXBfaW50ICogYSwgdW5zaWduZWQgbG9uZyBiKTsKK01QX0FQSSBpbnQgIG1wX3N1Yl9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjKTsKKy8qIGVuZCBzdXBwb3J0IGFkZGVkIGZ1bmN0aW9ucyAqLworCisvKiBhZGRlZCAqLworTVBfQVBJIGludCBtcF9pbml0X211bHRpKG1wX2ludCogYSwgbXBfaW50KiBiLCBtcF9pbnQqIGMsIG1wX2ludCogZCwgbXBfaW50KiBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2ludCogZik7CitNUF9BUEkgaW50IG1wX3RvcmFkaXggKG1wX2ludCAqYSwgY2hhciAqc3RyLCBpbnQgcmFkaXgpOworTVBfQVBJIGludCBtcF9yYWRpeF9zaXplIChtcF9pbnQgKiBhLCBpbnQgcmFkaXgsIGludCAqc2l6ZSk7CisKKyNpZmRlZiBXT0xGU1NMX0RFQlVHX01BVEgKKyAgICBNUF9BUEkgdm9pZCBtcF9kdW1wKGNvbnN0IGNoYXIqIGRlc2MsIG1wX2ludCogYSwgYnl0ZSB2ZXJib3NlKTsKKyNlbHNlCisgICAgI2RlZmluZSBtcF9kdW1wKGRlc2MsIGEsIHZlcmJvc2UpCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9FQ0MpIHx8IGRlZmluZWQoV09MRlNTTF9LRVlfR0VOKSB8fCAhZGVmaW5lZChOT19SU0EpIHx8IFwKKyAgICAhZGVmaW5lZChOT19EU0EpIHx8ICFkZWZpbmVkKE5PX0RIKQorICAgIE1QX0FQSSBpbnQgbXBfc3FybW9kKG1wX2ludCogYSwgbXBfaW50KiBiLCBtcF9pbnQqIGMpOworI2VuZGlmCisjaWYgIWRlZmluZWQoTk9fRFNBKSB8fCBkZWZpbmVkKEhBVkVfRUNDKQorICAgIE1QX0FQSSBpbnQgbXBfcmVhZF9yYWRpeChtcF9pbnQqIGEsIGNvbnN0IGNoYXIqIHN0ciwgaW50IHJhZGl4KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX0tFWV9HRU4pIHx8ICFkZWZpbmVkKE5PX1JTQSkgfHwgIWRlZmluZWQoTk9fRFNBKSB8fCAhZGVmaW5lZChOT19ESCkKKyAgICBNUF9BUEkgaW50IG1wX3ByaW1lX2lzX3ByaW1lIChtcF9pbnQgKiBhLCBpbnQgdCwgaW50ICpyZXN1bHQpOworICAgIE1QX0FQSSBpbnQgbXBfcHJpbWVfaXNfcHJpbWVfZXggKG1wX2ludCAqIGEsIGludCB0LCBpbnQgKnJlc3VsdCwgV0NfUk5HKik7CisjZW5kaWYgLyogV09MRlNTTF9LRVlfR0VOIE5PX1JTQSBOT19EU0EgTk9fREggKi8KKyNpZmRlZiBXT0xGU1NMX0tFWV9HRU4KKyAgICBNUF9BUEkgaW50IG1wX2djZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYyk7CisgICAgTVBfQVBJIGludCBtcF9sY20gKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpOworICAgIE1QX0FQSSBpbnQgbXBfcmFuZF9wcmltZShtcF9pbnQqIE4sIGludCBsZW4sIFdDX1JORyogcm5nLCB2b2lkKiBoZWFwKTsKKyNlbmRpZgorCitNUF9BUEkgaW50IG1wX2NudF9sc2IobXBfaW50ICphKTsKK01QX0FQSSBpbnQgbXBfbW9kX2QobXBfaW50KiBhLCBtcF9kaWdpdCBiLCBtcF9kaWdpdCogYyk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICB9CisjZW5kaWYKKworCisjZW5kaWYgLyogVVNFX0ZBU1RfTUFUSCAqLworCisjZW5kaWYgIC8qIFdPTEZfQ1JZUFRfSU5URUdFUl9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9sb2dnaW5nLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvbG9nZ2luZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MjE4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvbG9nZ2luZy5oCkBAIC0wLDAgKzEsMjA2IEBACisvKiBsb2dnaW5nLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL3dvbGZjcnlwdC9sb2dnaW5nLmgKKyovCisKKworLyogc3VibWl0dGVkIGJ5IGVvZiAqLworCisKKyNpZm5kZWYgV09MRlNTTF9MT0dHSU5HX0gKKyNkZWZpbmUgV09MRlNTTF9MT0dHSU5HX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKworZW51bSB3Y19Mb2dMZXZlbHMgeworICAgIEVSUk9SX0xPRyA9IDAsCisgICAgSU5GT19MT0csCisgICAgRU5URVJfTE9HLAorICAgIExFQVZFX0xPRywKKyAgICBPVEhFUl9MT0cKK307CisKKyNpZmRlZiBXT0xGU1NMX0ZVTkNfVElNRQorLyogV0FSTklORzogVGhpcyBjb2RlIGlzIG9ubHkgdG8gYmUgdXNlZCBmb3IgZGVidWdnaW5nIHBlcmZvcm1hbmNlLgorICogICAgICAgICAgVGhlIGNvZGUgaXMgbm90IHRocmVhZC1zYWZlLgorICogICAgICAgICAgRG8gbm90IHVzZSBXT0xGU1NMX0ZVTkNfVElNRSBpbiBwcm9kdWN0aW9uIGNvZGUuCisgKi8KK2VudW0gd2NfRnVuY051bSB7CisgICAgV0NfRlVOQ19IRUxMT19SRVFVRVNUX1NFTkQgPSAwLAorICAgIFdDX0ZVTkNfSEVMTE9fUkVRVUVTVF9ETywKKyAgICBXQ19GVU5DX0NMSUVOVF9IRUxMT19TRU5ELAorICAgIFdDX0ZVTkNfQ0xJRU5UX0hFTExPX0RPLAorICAgIFdDX0ZVTkNfU0VSVkVSX0hFTExPX1NFTkQsCisgICAgV0NfRlVOQ19TRVJWRVJfSEVMTE9fRE8sCisgICAgV0NfRlVOQ19FTkNSWVBURURfRVhURU5TSU9OU19TRU5ELAorICAgIFdDX0ZVTkNfRU5DUllQVEVEX0VYVEVOU0lPTlNfRE8sCisgICAgV0NfRlVOQ19DRVJUSUZJQ0FURV9SRVFVRVNUX1NFTkQsCisgICAgV0NfRlVOQ19DRVJUSUZJQ0FURV9SRVFVRVNUX0RPLAorICAgIFdDX0ZVTkNfQ0VSVElGSUNBVEVfU0VORCwKKyAgICBXQ19GVU5DX0NFUlRJRklDQVRFX0RPLAorICAgIFdDX0ZVTkNfQ0VSVElGSUNBVEVfVkVSSUZZX1NFTkQsCisgICAgV0NfRlVOQ19DRVJUSUZJQ0FURV9WRVJJRllfRE8sCisgICAgV0NfRlVOQ19GSU5JU0hFRF9TRU5ELAorICAgIFdDX0ZVTkNfRklOSVNIRURfRE8sCisgICAgV0NfRlVOQ19LRVlfVVBEQVRFX1NFTkQsCisgICAgV0NfRlVOQ19LRVlfVVBEQVRFX0RPLAorICAgIFdDX0ZVTkNfRUFSTFlfREFUQV9TRU5ELAorICAgIFdDX0ZVTkNfRUFSTFlfREFUQV9ETywKKyAgICBXQ19GVU5DX05FV19TRVNTSU9OX1RJQ0tFVF9TRU5ELAorICAgIFdDX0ZVTkNfTkVXX1NFU1NJT05fVElDS0VUX0RPLAorICAgIFdDX0ZVTkNfU0VSVkVSX0hFTExPX0RPTkVfU0VORCwKKyAgICBXQ19GVU5DX1NFUlZFUl9IRUxMT19ET05FX0RPLAorICAgIFdDX0ZVTkNfVElDS0VUX1NFTkQsCisgICAgV0NfRlVOQ19USUNLRVRfRE8sCisgICAgV0NfRlVOQ19DTElFTlRfS0VZX0VYQ0hBTkdFX1NFTkQsCisgICAgV0NfRlVOQ19DTElFTlRfS0VZX0VYQ0hBTkdFX0RPLAorICAgIFdDX0ZVTkNfQ0VSVElGSUNBVEVfU1RBVFVTX1NFTkQsCisgICAgV0NfRlVOQ19DRVJUSUZJQ0FURV9TVEFUVVNfRE8sCisgICAgV0NfRlVOQ19TRVJWRVJfS0VZX0VYQ0hBTkdFX1NFTkQsCisgICAgV0NfRlVOQ19TRVJWRVJfS0VZX0VYQ0hBTkdFX0RPLAorICAgIFdDX0ZVTkNfRU5EX09GX0VBUkxZX0RBVEFfU0VORCwKKyAgICBXQ19GVU5DX0VORF9PRl9FQVJMWV9EQVRBX0RPLAorICAgIFdDX0ZVTkNfQ09VTlQKK307CisjZW5kaWYKKwordHlwZWRlZiB2b2lkICgqd29sZlNTTF9Mb2dnaW5nX2NiKShjb25zdCBpbnQgbG9nTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0IGxvZ01lc3NhZ2UpOworCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZXRMb2dnaW5nQ2Iod29sZlNTTF9Mb2dnaW5nX2NiIGxvZ19mdW5jdGlvbik7CitXT0xGU1NMX0FQSSB3b2xmU1NMX0xvZ2dpbmdfY2Igd29sZlNTTF9HZXRMb2dnaW5nQ2Iodm9pZCk7CisKKy8qIHR1cm4gbG9nZ2luZyBvbiwgb25seSBpZiBjb21waWxlZCBpbiAqLworV09MRlNTTF9BUEkgaW50ICB3b2xmU1NMX0RlYnVnZ2luZ19PTih2b2lkKTsKKy8qIHR1cm4gbG9nZ2luZyBvZmYgKi8KK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9EZWJ1Z2dpbmdfT0ZGKHZvaWQpOworCisjaWZkZWYgSEFWRV9XQ19JTlRST1NQRUNUSU9OCisgICAgV09MRlNTTF9BUEkgY29uc3QgY2hhciAqd29sZlNTTF9jb25maWd1cmVfYXJncyh2b2lkKTsKKyAgICBXT0xGU1NMX0FQSSBjb25zdCBjaGFyICp3b2xmU1NMX2dsb2JhbF9jZmxhZ3Modm9pZCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChERUJVR19XT0xGU1NMX1ZFUkJPU0UpCisgICAgV09MRlNTTF9MT0NBTCBpbnQgd2NfTG9nZ2luZ0luaXQodm9pZCk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgd2NfTG9nZ2luZ0NsZWFudXAodm9pZCk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgd2NfQWRkRXJyb3JOb2RlKGludCBlcnJvciwgaW50IGxpbmUsIGNoYXIqIGJ1ZiwKKyAgICAgICAgICAgIGNoYXIqIGZpbGUpOworICAgIFdPTEZTU0xfTE9DQUwgaW50IHdjX1BlZWtFcnJvck5vZGUoaW50IGluZGV4LCBjb25zdCBjaGFyICoqZmlsZSwKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKipyZWFzb24sIGludCAqbGluZSk7CisgICAgV09MRlNTTF9MT0NBTCB2b2lkIHdjX1JlbW92ZUVycm9yTm9kZShpbnQgaW5kZXgpOworICAgIFdPTEZTU0xfTE9DQUwgdm9pZCB3Y19DbGVhckVycm9yTm9kZXModm9pZCk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgd2NfUHVsbEVycm9yTm9kZShjb25zdCBjaGFyICoqZmlsZSwgY29uc3QgY2hhciAqKnJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxpbmUpOworICAgIFdPTEZTU0xfQVBJICAgaW50IHdjX1NldExvZ2dpbmdIZWFwKHZvaWQqIGgpOworICAgIFdPTEZTU0xfQVBJICAgaW50IHdjX0VSUl9yZW1vdmVfc3RhdGUodm9pZCk7CisgICAgI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKE5PX1NURElPX0ZJTEVTWVNURU0pCisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQgd2NfRVJSX3ByaW50X2Vycm9yc19mcChYRklMRSBmcCk7CisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQgd2NfRVJSX3ByaW50X2Vycm9yc19jYihpbnQgKCpjYikoY29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgdm9pZCAqdSksIHZvaWQgKnUpOworICAgICNlbmRpZgorI2VuZGlmIC8qIE9QRU5TU0xfRVhUUkEgfHwgREVCVUdfV09MRlNTTF9WRVJCT1NFICovCisKKyNpZmRlZiBXT0xGU1NMX0ZVTkNfVElNRQorICAgIC8qIFdBUk5JTkc6IFRoaXMgY29kZSBpcyBvbmx5IHRvIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBwZXJmb3JtYW5jZS4KKyAgICAgKiAgICAgICAgICBUaGUgY29kZSBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgICogICAgICAgICAgRG8gbm90IHVzZSBXT0xGU1NMX0ZVTkNfVElNRSBpbiBwcm9kdWN0aW9uIGNvZGUuCisgICAgICovCisgICAgV09MRlNTTF9BUEkgdm9pZCBXT0xGU1NMX1NUQVJUKGludCBmdW5jTnVtKTsKKyAgICBXT0xGU1NMX0FQSSB2b2lkIFdPTEZTU0xfRU5EKGludCBmdW5jTnVtKTsKKyAgICBXT0xGU1NMX0FQSSB2b2lkIFdPTEZTU0xfVElNRShpbnQgY291bnQpOworI2Vsc2UKKyAgICAjZGVmaW5lIFdPTEZTU0xfU1RBUlQobikKKyAgICAjZGVmaW5lIFdPTEZTU0xfRU5EKG4pCisgICAgI2RlZmluZSBXT0xGU1NMX1RJTUUobikKKyNlbmRpZgorCisjaWYgZGVmaW5lZChERUJVR19XT0xGU1NMKSAmJiAhZGVmaW5lZChXT0xGU1NMX0RFQlVHX0VSUk9SU19PTkxZKQorICAgICNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgI2lmIGRlZmluZWQoSU5USU1FX1JUT1MpCisgICAgICAgICAgICAjZGVmaW5lIF9fZnVuY19fIE5VTEwKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNkZWZpbmUgX19mdW5jX18gX19GVU5DVElPTl9fCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorCisgICAgLyogYSBpcyBwcmVwZW5kZWQgdG8gbSBhbmQgYiBpcyBhcHBlbmRlZCwgY3JlYXRpbmcgYSBsb2cgbXNnIGEgKyBtICsgYiAqLworICAgICNkZWZpbmUgV09MRlNTTF9MT0dfQ0FUKGEsIG0sIGIpICNhICIgIiBtICIgIiAgI2IKKworICAgIFdPTEZTU0xfQVBJIHZvaWQgV09MRlNTTF9FTlRFUihjb25zdCBjaGFyKiBtc2cpOworICAgIFdPTEZTU0xfQVBJIHZvaWQgV09MRlNTTF9MRUFWRShjb25zdCBjaGFyKiBtc2csIGludCByZXQpOworICAgICNkZWZpbmUgV09MRlNTTF9TVFVCKG0pIFwKKyAgICAgICAgV09MRlNTTF9NU0coV09MRlNTTF9MT0dfQ0FUKHdvbGZTU0wgU3R1YiwgbSwgbm90IGltcGxlbWVudGVkKSkKKyAgICBXT0xGU1NMX0FQSSBpbnQgV09MRlNTTF9JU19ERUJVR19PTih2b2lkKTsKKworICAgIFdPTEZTU0xfQVBJIHZvaWQgV09MRlNTTF9NU0coY29uc3QgY2hhciogbXNnKTsKKyAgICBXT0xGU1NMX0FQSSB2b2lkIFdPTEZTU0xfQlVGRkVSKGNvbnN0IGJ5dGUqIGJ1ZmZlciwgd29yZDMyIGxlbmd0aCk7CisKKyNlbHNlCisKKyAgICAjZGVmaW5lIFdPTEZTU0xfRU5URVIobSkKKyAgICAjZGVmaW5lIFdPTEZTU0xfTEVBVkUobSwgcikKKyAgICAjZGVmaW5lIFdPTEZTU0xfU1RVQihtKQorICAgICNkZWZpbmUgV09MRlNTTF9JU19ERUJVR19PTigpIDAKKworICAgICNkZWZpbmUgV09MRlNTTF9NU0cobSkKKyAgICAjZGVmaW5lIFdPTEZTU0xfQlVGRkVSKGIsIGwpCisKKyNlbmRpZiAvKiBERUJVR19XT0xGU1NMICYmICFXT0xGU1NMX0RFQlVHX0VSUk9SU19PTkxZICovCisKKyNpZiBkZWZpbmVkKERFQlVHX1dPTEZTU0wpIHx8IGRlZmluZWQoT1BFTlNTTF9BTEwpIHx8IGRlZmluZWQoV09MRlNTTF9OR0lOWCkgfHxcCisgICAgZGVmaW5lZChXT0xGU1NMX0hBUFJPWFkpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQSkKKworICAgICNpZiAoIWRlZmluZWQoTk9fRVJST1JfUVVFVUUpICYmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgJiYgIWRlZmluZWQoX1dJTjMyKSlcCisgICAgICAgIHx8IGRlZmluZWQoREVCVUdfV09MRlNTTF9WRVJCT1NFKQorICAgICAgICBXT0xGU1NMX0FQSSB2b2lkIFdPTEZTU0xfRVJST1JfTElORShpbnQgZXJyLCBjb25zdCBjaGFyKiBmdW5jLCB1bnNpZ25lZCBpbnQgbGluZSwKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGUsIHZvaWQqIGN0eCk7CisgICAgICAgICNkZWZpbmUgV09MRlNTTF9FUlJPUih4KSBcCisgICAgICAgICAgICBXT0xGU1NMX0VSUk9SX0xJTkUoKHgpLCBfX2Z1bmNfXywgX19MSU5FX18sIF9fRklMRV9fLCBOVUxMKQorICAgICNlbHNlCisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQgV09MRlNTTF9FUlJPUihpbnQgZXJyKTsKKyAgICAjZW5kaWYKKyAgICBXT0xGU1NMX0FQSSB2b2lkIFdPTEZTU0xfRVJST1JfTVNHKGNvbnN0IGNoYXIqIG1zZyk7CisKKyNlbHNlCisgICAgI2RlZmluZSBXT0xGU1NMX0VSUk9SKGUpCisgICAgI2RlZmluZSBXT0xGU1NMX0VSUk9SX01TRyhtKQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NUQUNLX1NJWkVfVkVSQk9TRQorICAgIGV4dGVybiBXT0xGU1NMX0FQSSBUSFJFQURfTFNfVCB1bnNpZ25lZCBjaGFyICpTdGFja1NpemVDaGVja19teVN0YWNrOworICAgIGV4dGVybiBXT0xGU1NMX0FQSSBUSFJFQURfTFNfVCBzaXplX3QgU3RhY2tTaXplQ2hlY2tfc3RhY2tTaXplOworICAgIGV4dGVybiBXT0xGU1NMX0FQSSBUSFJFQURfTFNfVCBzaXplX3QgU3RhY2tTaXplQ2hlY2tfc3RhY2tTaXplSFdNOworICAgIGV4dGVybiBXT0xGU1NMX0FQSSBUSFJFQURfTFNfVCBzaXplX3QgKlN0YWNrU2l6ZUNoZWNrX3N0YWNrU2l6ZUhXTV9wdHI7CisgICAgZXh0ZXJuIFdPTEZTU0xfQVBJIFRIUkVBRF9MU19UIHZvaWQgKlN0YWNrU2l6ZUNoZWNrX3N0YWNrT2Zmc2V0UG9pbnRlcjsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfTE9HR0lOR19IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9tZDIuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9tZDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWViNGY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L21kMi5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qIG1kMi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvbWQyLmgKKyovCisKKworI2lmbmRlZiBXT0xGX0NSWVBUX01EMl9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfTUQyX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZmRlZiBXT0xGU1NMX01EMgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBpbiBieXRlcyAqLworZW51bSB7CisgICAgTUQyICAgICAgICAgICAgID0gIFdDX0hBU0hfVFlQRV9NRDIsCisgICAgTUQyX0JMT0NLX1NJWkUgID0gMTYsCisgICAgTUQyX0RJR0VTVF9TSVpFID0gMTYsCisgICAgTUQyX1BBRF9TSVpFICAgID0gMTYsCisgICAgTUQyX1hfU0laRSAgICAgID0gNDgKK307CisKKworLyogTWQyIGRpZ2VzdCAqLwordHlwZWRlZiBzdHJ1Y3QgTWQyIHsKKyAgICB3b3JkMzIgIGNvdW50OyAgIC8qIGJ5dGVzICUgUEFEX1NJWkUgICovCisgICAgYnl0ZSAgICBYW01EMl9YX1NJWkVdOworICAgIGJ5dGUgICAgQ1tNRDJfQkxPQ0tfU0laRV07CisgICAgYnl0ZSAgICBidWZmZXJbTUQyX0JMT0NLX1NJWkVdOworfSBNZDI7CisKKworV09MRlNTTF9BUEkgdm9pZCB3Y19Jbml0TWQyKE1kMiopOworV09MRlNTTF9BUEkgdm9pZCB3Y19NZDJVcGRhdGUoTWQyKiwgY29uc3QgYnl0ZSosIHdvcmQzMik7CitXT0xGU1NMX0FQSSB2b2lkIHdjX01kMkZpbmFsKE1kMiosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIGludCAgd2NfTWQySGFzaChjb25zdCBieXRlKiwgd29yZDMyLCBieXRlKik7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZTU0xfTUQyICovCisjZW5kaWYgLyogV09MRl9DUllQVF9NRDJfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvbWQ0LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvbWQ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyMDNkOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9tZDQuaApAQCAtMCwwICsxLDY3IEBACisvKiBtZDQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L21kNC5oCisqLworCisjaWZuZGVmIFdPTEZfQ1JZUFRfTUQ0X0gKKyNkZWZpbmUgV09MRl9DUllQVF9NRDRfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmbmRlZiBOT19NRDQKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogaW4gYnl0ZXMgKi8KK2VudW0geworICAgIE1ENCAgICAgICAgICAgICA9ICBXQ19IQVNIX1RZUEVfTUQ0LAorICAgIE1ENF9CTE9DS19TSVpFICA9IDY0LAorICAgIE1ENF9ESUdFU1RfU0laRSA9IDE2LAorICAgIE1ENF9QQURfU0laRSAgICA9IDU2Cit9OworCisKKy8qIE1ENCBkaWdlc3QgKi8KK3R5cGVkZWYgc3RydWN0IE1kNCB7CisgICAgd29yZDMyICBidWZmTGVuOyAgIC8qIGluIGJ5dGVzICAgICAgICAgICovCisgICAgd29yZDMyICBsb0xlbjsgICAgIC8qIGxlbmd0aCBpbiBieXRlcyAgICovCisgICAgd29yZDMyICBoaUxlbjsgICAgIC8qIGxlbmd0aCBpbiBieXRlcyAgICovCisgICAgd29yZDMyICBkaWdlc3RbTUQ0X0RJR0VTVF9TSVpFIC8gc2l6ZW9mKHdvcmQzMildOworICAgIHdvcmQzMiAgYnVmZmVyW01ENF9CTE9DS19TSVpFICAvIHNpemVvZih3b3JkMzIpXTsKK30gTWQ0OworCisKK1dPTEZTU0xfQVBJIHZvaWQgd2NfSW5pdE1kNChNZDQqKTsKK1dPTEZTU0xfQVBJIHZvaWQgd2NfTWQ0VXBkYXRlKE1kNCosIGNvbnN0IGJ5dGUqLCB3b3JkMzIpOworV09MRlNTTF9BUEkgdm9pZCB3Y19NZDRGaW5hbChNZDQqLCBieXRlKik7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE5PX01ENCAqLworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfTUQ0X0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L21kNS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjkxNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvbWQ1LmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qIG1kNS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvbWQ1LmgKKyovCisKKworI2lmbmRlZiBXT0xGX0NSWVBUX01ENV9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfTUQ1X0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZm5kZWYgTk9fTUQ1CisKKyNpZmRlZiBIQVZFX0ZJUFMKKyAgICAjZGVmaW5lIHdjX0luaXRNZDUgICBJbml0TWQ1CisgICAgI2RlZmluZSB3Y19NZDVVcGRhdGUgTWQ1VXBkYXRlCisgICAgI2RlZmluZSB3Y19NZDVGaW5hbCAgTWQ1RmluYWwKKyAgICAjZGVmaW5lIHdjX01kNUhhc2ggICBNZDVIYXNoCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5PX09MRF9NRDVfTkFNRSkKKyAgICAjZGVmaW5lIE1ENSAgICAgICAgICAgICBXQ19NRDUKKyNlbmRpZgorCisjaWZuZGVmIE5PX09MRF9XQ19OQU1FUworICAgICNkZWZpbmUgTWQ1ICAgICAgICAgICAgIHdjX01kNQorICAgICNkZWZpbmUgTUQ1X0JMT0NLX1NJWkUgIFdDX01ENV9CTE9DS19TSVpFCisgICAgI2RlZmluZSBNRDVfRElHRVNUX1NJWkUgV0NfTUQ1X0RJR0VTVF9TSVpFCisgICAgI2RlZmluZSBXQ19NRDVfUEFEX1NJWkUgV0NfTUQ1X1BBRF9TSVpFCisjZW5kaWYKKworLyogaW4gYnl0ZXMgKi8KK2VudW0geworICAgIFdDX01ENSAgICAgICAgICAgICA9ICBXQ19IQVNIX1RZUEVfTUQ1LAorICAgIFdDX01ENV9CTE9DS19TSVpFICA9IDY0LAorICAgIFdDX01ENV9ESUdFU1RfU0laRSA9IDE2LAorICAgIFdDX01ENV9QQURfU0laRSAgICA9IDU2Cit9OworCisKKyNpZmRlZiBXT0xGU1NMX01JQ1JPQ0hJUF9QSUMzMk1aCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvcGljMzIvcGljMzJtei1jcnlwdC5oPgorI2VuZGlmCisjaWZkZWYgU1RNMzJfSEFTSAorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9wb3J0L3N0L3N0bTMyLmg+CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2FzeW5jLmg+CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfVElfSEFTSAorICAgICNpbmNsdWRlICJ3b2xmc3NsL3dvbGZjcnlwdC9wb3J0L3RpL3RpLWhhc2guaCIKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9JTVg2X0NBQU0pICYmICFkZWZpbmVkKFdPTEZTU0xfUU5YX0NBQU0pCisgICAgI2luY2x1ZGUgIndvbGZzc2wvd29sZmNyeXB0L3BvcnQvY2FhbS93b2xmY2FhbV9zaGEuaCIKKyNlbHNlCisKKy8qIE1ENSBkaWdlc3QgKi8KK3R5cGVkZWYgc3RydWN0IHdjX01kNSB7CisjaWZkZWYgU1RNMzJfSEFTSAorICAgIFNUTTMyX0hBU0hfQ29udGV4dCBzdG1DdHg7CisjZWxzZQorICAgIHdvcmQzMiAgYnVmZkxlbjsgICAvKiBpbiBieXRlcyAgICAgICAgICAqLworICAgIHdvcmQzMiAgbG9MZW47ICAgICAvKiBsZW5ndGggaW4gYnl0ZXMgICAqLworICAgIHdvcmQzMiAgaGlMZW47ICAgICAvKiBsZW5ndGggaW4gYnl0ZXMgICAqLworICAgIHdvcmQzMiAgYnVmZmVyW1dDX01ENV9CTE9DS19TSVpFICAvIHNpemVvZih3b3JkMzIpXTsKKyNpZmRlZiBXT0xGU1NMX1BJQzMyTVpfSEFTSAorICAgIHdvcmQzMiAgZGlnZXN0W1BJQzMyX0RJR0VTVF9TSVpFIC8gc2l6ZW9mKHdvcmQzMildOworI2Vsc2UKKyAgICB3b3JkMzIgIGRpZ2VzdFtXQ19NRDVfRElHRVNUX1NJWkUgLyBzaXplb2Yod29yZDMyKV07CisjZW5kaWYKKyAgICB2b2lkKiAgIGhlYXA7CisjaWZkZWYgV09MRlNTTF9QSUMzMk1aX0hBU0gKKyAgICBoYXNoVXBkQ2FjaGUgY2FjaGU7IC8qIGNhY2hlIGZvciB1cGRhdGVzICovCisjZW5kaWYKKyNlbmRpZiAvKiBTVE0zMl9IQVNIICovCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIFdDX0FTWU5DX0RFViBhc3luY0RldjsKKyNlbmRpZiAvKiBXT0xGU1NMX0FTWU5DX0NSWVBUICovCisjaWYgZGVmaW5lZChXT0xGU1NMX0hBU0hfRkxBR1MpIHx8IGRlZmluZWQoV09MRl9DUllQVE9fQ0IpCisgICAgd29yZDMyIGZsYWdzOyAvKiBlbnVtIHdjX0hhc2hGbGFncyBpbiBoYXNoLmggKi8KKyNlbmRpZgorfSB3Y19NZDU7CisKKyNlbmRpZiAvKiBXT0xGU1NMX1RJX0hBU0ggKi8KKworV09MRlNTTF9BUEkgaW50IHdjX0luaXRNZDUod2NfTWQ1Kik7CitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdE1kNV9leCh3Y19NZDUqLCB2b2lkKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3Y19NZDVVcGRhdGUod2NfTWQ1KiwgY29uc3QgYnl0ZSosIHdvcmQzMik7CitXT0xGU1NMX0FQSSBpbnQgd2NfTWQ1RmluYWwod2NfTWQ1KiwgYnl0ZSopOworV09MRlNTTF9BUEkgdm9pZCB3Y19NZDVGcmVlKHdjX01kNSopOworI2lmZGVmIE9QRU5TU0xfRVhUUkEKK1dPTEZTU0xfQVBJIGludCB3Y19NZDVUcmFuc2Zvcm0od2NfTWQ1KiwgY29uc3QgYnl0ZSopOworI2VuZGlmCisKK1dPTEZTU0xfQVBJIGludCAgd2NfTWQ1R2V0SGFzaCh3Y19NZDUqLCBieXRlKik7CitXT0xGU1NMX0FQSSBpbnQgIHdjX01kNUNvcHkod2NfTWQ1Kiwgd2NfTWQ1Kik7CisKKyNpZmRlZiBXT0xGU1NMX1BJQzMyTVpfSEFTSAorV09MRlNTTF9BUEkgdm9pZCB3Y19NZDVTaXplU2V0KHdjX01kNSogbWQ1LCB3b3JkMzIgbGVuKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX0hBU0hfRkxBR1MpIHx8IGRlZmluZWQoV09MRl9DUllQVE9fQ0IpCisgICAgV09MRlNTTF9BUEkgaW50IHdjX01kNVNldEZsYWdzKHdjX01kNSogbWQ1LCB3b3JkMzIgZmxhZ3MpOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19NZDVHZXRGbGFncyh3Y19NZDUqIG1kNSwgd29yZDMyKiBmbGFncyk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE5PX01ENSAqLworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfTUQ1X0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9tZW1fdHJhY2suaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9tZW1fdHJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjJlZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L21lbV90cmFjay5oCkBAIC0wLDAgKzEsNDIzIEBACisvKiBtZW1fdHJhY2suaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworLyogVGhlIG1lbW9yeSB0cmFja2VyIG92ZXJyaWRlcyB0aGUgd29sZlNTTCBtZW1vcnkgY2FsbGJhY2sgc3lzdGVtIGFuZCB1c2VzIGEKKyAqIHN0YXRpYyB0byB0cmFjayB0aGUgdG90YWwsIHBlYWsgYW5kIGN1cnJlbnRseSBhbGxvY2F0ZWQgYnl0ZXMuCisgKgorICogSWYgeW91IGFyZSBhbHJlYWR5IHVzaW5nIHRoZSBtZW1vcnkgY2FsbGJhY2tzIHRoZW4gZW5hYmxpbmcgdGhpcyB3aWxsCisgKiBvdmVycmlkZSB0aGUgbWVtb3J5IGNhbGxiYWNrcyBhbmQgcHJldmVudCB5b3VyIG1lbW9yeSBjYWxsYmFja3MgZnJvbQorICogd29ya2luZy4gVGhpcyBhc3N1bWVzIG1hbGxvYygpIGFuZCBmcmVlKCkgYXJlIGF2YWlsYWJsZS4gRmVlbCBmcmVlIHRvCisgKiBjdXN0b21pemUgdGhpcyBmb3IgeW91ciBuZWVkcy4KKworICogVGhlIGVuYWJsZSB0aGlzIGZlYXR1cmUgZGVmaW5lIHRoZSBmb2xsb3dpbmc6CisgKiAjZGVmaW5lIFVTRV9XT0xGU1NMX01FTU9SWQorICogI2RlZmluZSBXT0xGU1NMX1RSQUNLX01FTU9SWQorICoKKyAqIE9uIHN0YXJ0dXAgY2FsbDoKKyAqIEluaXRNZW1vcnlUcmFja2VyKCk7CisgKgorICogV2hlbiByZWFkeSB0byBkdW1wIHRoZSBtZW1vcnkgcmVwb3J0IGNhbGw6CisgKiBTaG93TWVtb3J5VHJhY2tlcigpOworICoKKyAqIFJlcG9ydCBleGFtcGxlOgorICogdG90YWwgICBBbGxvY3MgPSAgICAgICAyMjgKKyAqIHRvdGFsICAgQnl0ZXMgID0gICAgIDkzNDQyCisgKiBwZWFrICAgIEJ5dGVzICA9ICAgICAgODg0MAorICogY3VycmVudCBCeXRlcyAgPSAgICAgICAgIDAKKyAqCisgKgorICogWW91IGNhbiBhbHNvOgorICogI2RlZmluZSBXT0xGU1NMX0RFQlVHX01FTU9SWQorICoKKyAqIFRvIHByaW50IGV2ZXJ5IGFsbG9jL2ZyZWUgYWxvbmcgd2l0aCB0aGUgZnVuY3Rpb24gYW5kIGxpbmUgbnVtYmVyLgorICogRXhhbXBsZSBvdXRwdXQ6CisgKiBBbGxvYzogMHg3ZmExNGE1MDAwMTAgLT4gMTIwIGF0IHdjX0luaXRSbmc6NDk2CisgKiBGcmVlOiAweDdmYTE0YTUwMDAxMCAtPiAxMjAgYXQgd2NfRnJlZVJuZzo2MDYKKyAqLworCisKKyNpZm5kZWYgV09MRlNTTF9NRU1fVFJBQ0tfSAorI2RlZmluZSBXT0xGU1NMX01FTV9UUkFDS19ICisKKyNpZiBkZWZpbmVkKFVTRV9XT0xGU1NMX01FTU9SWSkgJiYgIWRlZmluZWQoV09MRlNTTF9TVEFUSUNfTUVNT1JZKQorCisgICAgI2luY2x1ZGUgIndvbGZzc2wvd29sZmNyeXB0L2xvZ2dpbmcuaCIKKworICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfVFJBQ0tfTUVNT1JZKQorICAgICAgICAjZGVmaW5lIERPX01FTV9TVEFUUworICAgICAgICAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19NQUNIX18pCisgICAgICAgICAgICAjZGVmaW5lIERPX01FTV9MSVNUCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorCisKKyAgICB0eXBlZGVmIHN0cnVjdCBtZW1vcnlTdGF0cyB7CisgICAgICAgIGxvbmcgdG90YWxBbGxvY3M7ICAgICAvKiBudW1iZXIgb2YgYWxsb2NhdGlvbnMgKi8KKyAgICAgICAgbG9uZyB0b3RhbERlYWxsb2NzOyAgIC8qIG51bWJlciBvZiBkZWFsbG9jYXRpb25zICovCisgICAgICAgIGxvbmcgdG90YWxCeXRlczsgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkICovCisgICAgICAgIGxvbmcgcGVha0J5dGVzOyAgICAgICAvKiBjb25jdXJyZW50IG1heCBieXRlcyAqLworICAgICAgICBsb25nIGN1cnJlbnRCeXRlczsgICAgLyogdG90YWwgY3VycmVudCBieXRlcyBpbiB1c2UgKi8KKyNpZmRlZiBXT0xGU1NMX1RSQUNLX01FTU9SWV9WRVJCT1NFCisgICAgICAgIGxvbmcgcGVha0FsbG9jc1RyaXBPZG9tZXRlcjsgLyogcGVhayBudW1iZXIgb2YgY29uY3VycmVudCBhbGxvY2F0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdWJqZWN0IHRvIHJlc2V0IGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogd29sZkNyeXB0X2hlYXBfcGVha19jaGVja3BvaW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgbG9uZyBwZWFrQnl0ZXNUcmlwT2RvbWV0ZXI7IC8qIHBlYWsgY29uY3VycmVudCBieXRlcywgc3ViamVjdCB0byByZXNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnkgd29sZkNyeXB0X2hlYXBfcGVha19jaGVja3BvaW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2VuZGlmCisgICAgfSBtZW1vcnlTdGF0czsKKworICAgIHR5cGVkZWYgc3RydWN0IG1lbUhpbnQgeworICAgICAgICBzaXplX3QgdGhpc1NpemU7ICAgICAgLyogc2l6ZSBvZiB0aGlzIG1lbW9yeSAqLworCisgICAgI2lmZGVmIERPX01FTV9MSVNUCisgICAgICAgIHN0cnVjdCBtZW1IaW50KiBuZXh0OworICAgICAgICBzdHJ1Y3QgbWVtSGludCogcHJldjsKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfREVCVUdfTUVNT1JZCisgICAgICAgICAgICBjb25zdCBjaGFyKiBmdW5jOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmU7CisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorICAgICAgICB2b2lkKiAgdGhpc01lbW9yeTsgICAgLyogYWN0dWFsIG1lbW9yeSBmb3IgdXNlciAqLworICAgIH0gbWVtSGludDsKKworICAgIHR5cGVkZWYgc3RydWN0IG1lbW9yeVRyYWNrIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgbWVtSGludCBoaW50OworICAgICAgICAgICAgYnl0ZSAgICBhbGlnbml0W3NpemVvZihtZW1IaW50KSArICgoMTYtMSkgJiB+KDE2LTEpKV07IC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHN0cm9uZyBhbGlnbm1lbnQgKi8KKyAgICAgICAgfSB1OworICAgIH0gbWVtb3J5VHJhY2s7CisKKyNpZmRlZiBET19NRU1fTElTVAorICAgIC8qIHRyYWNrIGFsbG9jYXRpb25zIGFuZCByZXBvcnQgYXQgZW5kICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgbWVtb3J5TGlzdCB7CisgICAgICAgIG1lbUhpbnQqIGhlYWQ7CisgICAgICAgIG1lbUhpbnQqIHRhaWw7CisgICAgICAgIHdvcmQzMiAgIGNvdW50OworICAgIH0gbWVtb3J5TGlzdDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX1RSQUNLX01FTU9SWSkKKyAgICBzdGF0aWMgbWVtb3J5U3RhdHMgb3VyTWVtU3RhdHM7CisKKyAgICAjaWZkZWYgRE9fTUVNX0xJU1QKKyAgICAgICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyAgICAgICAgc3RhdGljIG1lbW9yeUxpc3Qgb3VyTWVtTGlzdDsKKyAgICAgICAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBtZW1Mb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyAgICAjZW5kaWYKKyNlbmRpZgorCisKKyAgICAvKiBpZiBkZWZpbmVkIHRvIG5vdCB1c2luZyBpbmxpbmUgdGhlbiBkZWNsYXJlIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKyAgICAjaWZkZWYgTk9fSU5MSU5FCisgICAgICAgICNkZWZpbmUgV0NfU1RBVElDCisJCSNpZmRlZiBXT0xGU1NMX0RFQlVHX01FTU9SWQorCQkJV09MRlNTTF9MT0NBTCB2b2lkKiBUcmFja01hbGxvYyhzaXplX3Qgc3osIGNvbnN0IGNoYXIqIGZ1bmMsIHVuc2lnbmVkIGludCBsaW5lKTsKKwkJCVdPTEZTU0xfTE9DQUwgdm9pZCBUcmFja0ZyZWUodm9pZCogcHRyLCBjb25zdCBjaGFyKiBmdW5jLCB1bnNpZ25lZCBpbnQgbGluZSk7CisJCQlXT0xGU1NMX0xPQ0FMIHZvaWQqIFRyYWNrUmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzeiwgY29uc3QgY2hhciogZnVuYywgdW5zaWduZWQgaW50IGxpbmUpOworCQkjZWxzZQorCQkJV09MRlNTTF9MT0NBTCB2b2lkKiBUcmFja01hbGxvYyhzaXplX3Qgc3opOworCQkJV09MRlNTTF9MT0NBTCB2b2lkIFRyYWNrRnJlZSh2b2lkKiBwdHIpOworCQkJV09MRlNTTF9MT0NBTCB2b2lkKiBUcmFja1JlYWxsb2Modm9pZCogcHRyLCBzaXplX3Qgc3opOworCQkjZW5kaWYKKyAgICAgICAgV09MRlNTTF9MT0NBTCBpbnQgSW5pdE1lbW9yeVRyYWNrZXIodm9pZCk7CisgICAgICAgIFdPTEZTU0xfTE9DQUwgdm9pZCBTaG93TWVtb3J5VHJhY2tlcih2b2lkKTsKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIFdDX1NUQVRJQyBzdGF0aWMKKyAgICAjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfREVCVUdfTUVNT1JZCisgICAgV0NfU1RBVElDIFdDX0lOTElORSB2b2lkKiBUcmFja01hbGxvYyhzaXplX3Qgc3osIGNvbnN0IGNoYXIqIGZ1bmMsIHVuc2lnbmVkIGludCBsaW5lKQorI2Vsc2UKKyAgICBXQ19TVEFUSUMgV0NfSU5MSU5FIHZvaWQqIFRyYWNrTWFsbG9jKHNpemVfdCBzeikKKyNlbmRpZgorICAgIHsKKyAgICAgICAgbWVtb3J5VHJhY2sqIG10OworICAgICAgICBtZW1IaW50KiBoZWFkZXI7CisKKyAgICAgICAgaWYgKHN6ID09IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBtdCA9IChtZW1vcnlUcmFjayopbWFsbG9jKHNpemVvZihtZW1vcnlUcmFjaykgKyBzeik7CisgICAgICAgIGlmIChtdCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgaGVhZGVyID0gJm10LT51LmhpbnQ7CisgICAgICAgIGhlYWRlci0+dGhpc1NpemUgICA9IHN6OworICAgICAgICBoZWFkZXItPnRoaXNNZW1vcnkgPSAoYnl0ZSopbXQgKyBzaXplb2YobWVtb3J5VHJhY2spOworCisgICAgI2lmZGVmIFdPTEZTU0xfREVCVUdfTUVNT1JZCisgICAgI2lmZGVmIFdPTEZTU0xfREVCVUdfTUVNT1JZX1BSSU5UCisgICAgICAgIHByaW50ZigiQWxsb2M6ICVwIC0+ICV1IGF0ICVzOiVkXG4iLCBoZWFkZXItPnRoaXNNZW1vcnksICh3b3JkMzIpc3osIGZ1bmMsIGxpbmUpOworICAgICNlbHNlCisgICAgICAgICh2b2lkKWZ1bmM7CisgICAgICAgICh2b2lkKWxpbmU7CisgICAgI2VuZGlmCisgICAgI2VuZGlmCisKKyAgICAjaWZkZWYgRE9fTUVNX1NUQVRTCisgICAgICAgIG91ck1lbVN0YXRzLnRvdGFsQWxsb2NzKys7CisgICAgICAgIG91ck1lbVN0YXRzLnRvdGFsQnl0ZXMgICArPSBzejsKKyAgICAgICAgb3VyTWVtU3RhdHMuY3VycmVudEJ5dGVzICs9IHN6OworICAgICAgICAjaWZkZWYgV09MRlNTTF9UUkFDS19NRU1PUllfVkVSQk9TRQorICAgICAgICBpZiAob3VyTWVtU3RhdHMucGVha0FsbG9jc1RyaXBPZG9tZXRlciA8IG91ck1lbVN0YXRzLnRvdGFsQWxsb2NzIC0gb3VyTWVtU3RhdHMudG90YWxEZWFsbG9jcykKKyAgICAgICAgICAgIG91ck1lbVN0YXRzLnBlYWtBbGxvY3NUcmlwT2RvbWV0ZXIgPSBvdXJNZW1TdGF0cy50b3RhbEFsbG9jcyAtIG91ck1lbVN0YXRzLnRvdGFsRGVhbGxvY3M7CisgICAgICAgIGlmIChvdXJNZW1TdGF0cy5wZWFrQnl0ZXNUcmlwT2RvbWV0ZXIgPCBvdXJNZW1TdGF0cy5jdXJyZW50Qnl0ZXMpIHsKKyAgICAgICAgICAgIG91ck1lbVN0YXRzLnBlYWtCeXRlc1RyaXBPZG9tZXRlciA9IG91ck1lbVN0YXRzLmN1cnJlbnRCeXRlczsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBpZiAob3VyTWVtU3RhdHMuY3VycmVudEJ5dGVzID4gb3VyTWVtU3RhdHMucGVha0J5dGVzKQorICAgICAgICAgICAgICAgIG91ck1lbVN0YXRzLnBlYWtCeXRlcyA9IG91ck1lbVN0YXRzLmN1cnJlbnRCeXRlczsKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfVFJBQ0tfTUVNT1JZX1ZFUkJPU0UKKyAgICAgICAgfQorICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgRE9fTUVNX0xJU1QKKyAgICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jaygmbWVtTG9jaykgPT0gMCkgeworICAgICAgICAjaWZkZWYgV09MRlNTTF9ERUJVR19NRU1PUlkKKyAgICAgICAgICAgIGhlYWRlci0+ZnVuYyA9IGZ1bmM7CisgICAgICAgICAgICBoZWFkZXItPmxpbmUgPSBsaW5lOworICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgLyogU2V0dXAgZXZlbnQgKi8KKyAgICAgICAgICAgIGhlYWRlci0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgICBpZiAob3VyTWVtTGlzdC50YWlsID09IE5VTEwpICB7CisgICAgICAgICAgICAgICAgb3VyTWVtTGlzdC5oZWFkID0gaGVhZGVyOworICAgICAgICAgICAgICAgIGhlYWRlci0+cHJldiA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXJNZW1MaXN0LnRhaWwtPm5leHQgPSBoZWFkZXI7CisgICAgICAgICAgICAgICAgaGVhZGVyLT5wcmV2ID0gb3VyTWVtTGlzdC50YWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3VyTWVtTGlzdC50YWlsID0gaGVhZGVyOyAgICAgIC8qIGFkZCB0byB0aGUgZW5kIGVpdGhlciB3YXkgKi8KKyAgICAgICAgICAgIG91ck1lbUxpc3QuY291bnQrKzsKKworICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm1lbUxvY2spOworICAgICAgICB9CisgICAgI2VuZGlmCisKKyAgICAgICAgcmV0dXJuIGhlYWRlci0+dGhpc01lbW9yeTsKKyAgICB9CisKKworI2lmZGVmIFdPTEZTU0xfREVCVUdfTUVNT1JZCisgICAgV0NfU1RBVElDIFdDX0lOTElORSB2b2lkIFRyYWNrRnJlZSh2b2lkKiBwdHIsIGNvbnN0IGNoYXIqIGZ1bmMsIHVuc2lnbmVkIGludCBsaW5lKQorI2Vsc2UKKyAgICBXQ19TVEFUSUMgV0NfSU5MSU5FIHZvaWQgVHJhY2tGcmVlKHZvaWQqIHB0cikKKyNlbmRpZgorICAgIHsKKyAgICAgICAgbWVtb3J5VHJhY2sqIG10OworICAgICAgICBtZW1IaW50KiBoZWFkZXI7CisgICAgICAgIHNpemVfdCBzejsKKworICAgICAgICBpZiAocHRyID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG10ID0gKG1lbW9yeVRyYWNrKikoKGJ5dGUqKXB0ciAtIHNpemVvZihtZW1vcnlUcmFjaykpOworICAgICAgICBoZWFkZXIgPSAmbXQtPnUuaGludDsKKyAgICAgICAgc3ogPSBoZWFkZXItPnRoaXNTaXplOworCisgICAgI2lmZGVmIERPX01FTV9MSVNUCisgICAgICAgIGlmIChwdGhyZWFkX211dGV4X2xvY2soJm1lbUxvY2spID09IDApIAorICAgICAgICB7CisgICAgI2VuZGlmCisKKyAgICAjaWZkZWYgRE9fTUVNX1NUQVRTCisgICAgICAgICAgICBvdXJNZW1TdGF0cy5jdXJyZW50Qnl0ZXMgLT0gaGVhZGVyLT50aGlzU2l6ZTsKKyAgICAgICAgICAgIG91ck1lbVN0YXRzLnRvdGFsRGVhbGxvY3MrKzsKKyAgICAjZW5kaWYKKworICAgICNpZmRlZiBET19NRU1fTElTVAorICAgICAgICAgICAgaWYgKGhlYWRlciA9PSBvdXJNZW1MaXN0LmhlYWQgJiYgaGVhZGVyID09IG91ck1lbUxpc3QudGFpbCkgeworICAgICAgICAgICAgICAgIG91ck1lbUxpc3QuaGVhZCA9IE5VTEw7CisgICAgICAgICAgICAgICAgb3VyTWVtTGlzdC50YWlsID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGhlYWRlciA9PSBvdXJNZW1MaXN0LmhlYWQpIHsKKyAgICAgICAgICAgICAgICBvdXJNZW1MaXN0LmhlYWQgPSBoZWFkZXItPm5leHQ7CisgICAgICAgICAgICAgICAgb3VyTWVtTGlzdC5oZWFkLT5wcmV2ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGhlYWRlciA9PSBvdXJNZW1MaXN0LnRhaWwpIHsKKyAgICAgICAgICAgICAgICBvdXJNZW1MaXN0LnRhaWwgPSBoZWFkZXItPnByZXY7CisgICAgICAgICAgICAgICAgb3VyTWVtTGlzdC50YWlsLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1lbUhpbnQqIG5leHQgPSBoZWFkZXItPm5leHQ7CisgICAgICAgICAgICAgICAgbWVtSGludCogcHJldiA9IGhlYWRlci0+cHJldjsKKyAgICAgICAgICAgICAgICBpZiAobmV4dCkKKyAgICAgICAgICAgICAgICAgICAgbmV4dC0+cHJldiA9IHByZXY7CisgICAgICAgICAgICAgICAgaWYgKHByZXYpCisgICAgICAgICAgICAgICAgICAgIHByZXYtPm5leHQgPSBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3VyTWVtTGlzdC5jb3VudC0tOworCisgICAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbWVtTG9jayk7CisgICAgICAgIH0KKyAgICAjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfREVCVUdfTUVNT1JZCisjaWZkZWYgV09MRlNTTF9ERUJVR19NRU1PUllfUFJJTlQKKyAgICAgICAgcHJpbnRmKCJGcmVlOiAlcCAtPiAldSBhdCAlczolZFxuIiwgcHRyLCAod29yZDMyKXN6LCBmdW5jLCBsaW5lKTsKKyNlbHNlCisgICAgICAgICh2b2lkKWZ1bmM7CisgICAgICAgICh2b2lkKWxpbmU7CisjZW5kaWYKKyNlbmRpZgorICAgICAgICAodm9pZClzejsKKworICAgICAgICBmcmVlKG10KTsKKyAgICB9CisKKworI2lmZGVmIFdPTEZTU0xfREVCVUdfTUVNT1JZCisgICAgV0NfU1RBVElDIFdDX0lOTElORSB2b2lkKiBUcmFja1JlYWxsb2Modm9pZCogcHRyLCBzaXplX3Qgc3osIGNvbnN0IGNoYXIqIGZ1bmMsIHVuc2lnbmVkIGludCBsaW5lKQorI2Vsc2UKKyAgICBXQ19TVEFUSUMgV0NfSU5MSU5FIHZvaWQqIFRyYWNrUmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzeikKKyNlbmRpZgorICAgIHsKKyAgICAjaWZkZWYgV09MRlNTTF9ERUJVR19NRU1PUlkKKyAgICAgICAgdm9pZCogcmV0ID0gVHJhY2tNYWxsb2Moc3osIGZ1bmMsIGxpbmUpOworICAgICNlbHNlCisgICAgICAgIHZvaWQqIHJldCA9IFRyYWNrTWFsbG9jKHN6KTsKKyAgICAjZW5kaWYKKworICAgICAgICBpZiAocHRyKSB7CisgICAgICAgICAgICAvKiBpZiByZWFsbG9jIGlzIGJpZ2dlciwgZG9uJ3Qgb3ZlcnJlYWQgb2xkIHB0ciAqLworICAgICAgICAgICAgbWVtb3J5VHJhY2sqIG10OworICAgICAgICAgICAgbWVtSGludCogaGVhZGVyOworCisgICAgICAgICAgICBtdCA9IChtZW1vcnlUcmFjayopKChieXRlKilwdHIgLSBzaXplb2YobWVtb3J5VHJhY2spKTsKKyAgICAgICAgICAgIGhlYWRlciA9ICZtdC0+dS5oaW50OworCisgICAgICAgICAgICBpZiAoaGVhZGVyLT50aGlzU2l6ZSA8IHN6KQorICAgICAgICAgICAgICAgIHN6ID0gaGVhZGVyLT50aGlzU2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXQgJiYgcHRyKQorICAgICAgICAgICAgWE1FTUNQWShyZXQsIHB0ciwgc3opOworCisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfREVCVUdfTUVNT1JZCisgICAgICAgICAgICBUcmFja0ZyZWUocHRyLCBmdW5jLCBsaW5lKTsKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgIFRyYWNrRnJlZShwdHIpOworICAgICAgICAjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisjaWZkZWYgV09MRlNTTF9UUkFDS19NRU1PUlkKKyAgICBzdGF0aWMgd29sZlNTTF9NYWxsb2NfY2IgbWZEZWZhdWx0ID0gTlVMTDsKKyAgICBzdGF0aWMgd29sZlNTTF9GcmVlX2NiIGZmRGVmYXVsdCA9IE5VTEw7CisgICAgc3RhdGljIHdvbGZTU0xfUmVhbGxvY19jYiByZkRlZmF1bHQgPSBOVUxMOworCisgICAgV0NfU1RBVElDIFdDX0lOTElORSBpbnQgSW5pdE1lbW9yeVRyYWNrZXIodm9pZCkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgcmV0ID0gd29sZlNTTF9HZXRBbGxvY2F0b3JzKCZtZkRlZmF1bHQsICZmZkRlZmF1bHQsICZyZkRlZmF1bHQpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgcHJpbnRmKCJ3b2xmU1NMIEdldEFsbG9jYXRvcnMgZmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdHNcbiIpOworICAgICAgICB9CisgICAgICAgIHJldCA9IHdvbGZTU0xfU2V0QWxsb2NhdG9ycyhUcmFja01hbGxvYywgVHJhY2tGcmVlLCBUcmFja1JlYWxsb2MpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgcHJpbnRmKCJ3b2xmU1NMIFNldEFsbG9jYXRvcnMgZmFpbGVkIGZvciB0cmFjayBtZW1vcnlcbiIpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCisgICAgI2lmZGVmIERPX01FTV9MSVNUCisgICAgICAgIGlmIChwdGhyZWFkX211dGV4X2xvY2soJm1lbUxvY2spID09IDApCisgICAgICAgIHsKKyAgICAjZW5kaWYKKworICAgICNpZmRlZiBET19NRU1fU1RBVFMKKyAgICAgICAgb3VyTWVtU3RhdHMudG90YWxBbGxvY3MgID0gMDsKKyAgICAgICAgb3VyTWVtU3RhdHMudG90YWxEZWFsbG9jcyA9IDA7CisgICAgICAgIG91ck1lbVN0YXRzLnRvdGFsQnl0ZXMgICA9IDA7CisgICAgICAgIG91ck1lbVN0YXRzLnBlYWtCeXRlcyAgICA9IDA7CisgICAgICAgIG91ck1lbVN0YXRzLmN1cnJlbnRCeXRlcyA9IDA7CisjaWZkZWYgV09MRlNTTF9UUkFDS19NRU1PUllfVkVSQk9TRQorICAgICAgICBvdXJNZW1TdGF0cy5wZWFrQWxsb2NzVHJpcE9kb21ldGVyID0gMDsKKyAgICAgICAgb3VyTWVtU3RhdHMucGVha0J5dGVzVHJpcE9kb21ldGVyICAgID0gMDsKKyNlbmRpZgorICAgICNlbmRpZgorCisgICAgI2lmZGVmIERPX01FTV9MSVNUCisgICAgICAgIFhNRU1TRVQoJm91ck1lbUxpc3QsIDAsIHNpemVvZihvdXJNZW1MaXN0KSk7CisKKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm1lbUxvY2spOworICAgICAgICB9CisgICAgI2VuZGlmCisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBXQ19TVEFUSUMgV0NfSU5MSU5FIHZvaWQgU2hvd01lbW9yeVRyYWNrZXIodm9pZCkKKyAgICB7CisgICAgI2lmZGVmIERPX01FTV9MSVNUCisgICAgICAgIGlmIChwdGhyZWFkX211dGV4X2xvY2soJm1lbUxvY2spID09IDApCisgICAgICAgIHsKKyAgICAjZW5kaWYKKworICAgICNpZmRlZiBET19NRU1fU1RBVFMKKyAgICAgICAgcHJpbnRmKCJ0b3RhbCAgIEFsbG9jcyAgID0gJTlsZFxuIiwgb3VyTWVtU3RhdHMudG90YWxBbGxvY3MpOworICAgICAgICBwcmludGYoInRvdGFsICAgRGVhbGxvY3MgPSAlOWxkXG4iLCBvdXJNZW1TdGF0cy50b3RhbERlYWxsb2NzKTsKKyAgICAgICAgcHJpbnRmKCJ0b3RhbCAgIEJ5dGVzICAgID0gJTlsZFxuIiwgb3VyTWVtU3RhdHMudG90YWxCeXRlcyk7CisgICAgICAgIHByaW50ZigicGVhayAgICBCeXRlcyAgICA9ICU5bGRcbiIsIG91ck1lbVN0YXRzLnBlYWtCeXRlcyk7CisgICAgICAgIHByaW50ZigiY3VycmVudCBCeXRlcyAgICA9ICU5bGRcbiIsIG91ck1lbVN0YXRzLmN1cnJlbnRCeXRlcyk7CisgICAgI2VuZGlmCisKKyAgICAjaWZkZWYgRE9fTUVNX0xJU1QKKyAgICAgICAgaWYgKG91ck1lbUxpc3QuY291bnQgPiAwKSB7CisgICAgICAgICAgICAvKiBwcmludCBsaXN0IG9mIGFsbG9jYXRpb25zICovCisgICAgICAgICAgICBtZW1IaW50KiBoZWFkZXI7CisgICAgICAgICAgICBmb3IgKGhlYWRlciA9IG91ck1lbUxpc3QuaGVhZDsgaGVhZGVyICE9IE5VTEw7IGhlYWRlciA9IGhlYWRlci0+bmV4dCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiTGVhazogUHRyICVwLCBTaXplICV1IgorICAgICAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX0RFQlVHX01FTU9SWQorICAgICAgICAgICAgICAgICAgICAiLCBGdW5jICVzLCBMaW5lICVkIgorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICAiXG4iLAorICAgICAgICAgICAgICAgICAgICAoYnl0ZSopaGVhZGVyICsgc2l6ZW9mKG1lbUhpbnQpLCAodW5zaWduZWQgaW50KWhlYWRlci0+dGhpc1NpemUKKyAgICAgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9ERUJVR19NRU1PUlkKKyAgICAgICAgICAgICAgICAgICAgLCBoZWFkZXItPmZ1bmMsIGhlYWRlci0+bGluZQorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbWVtTG9jayk7CisgICAgICAgIH0KKyAgICAjZW5kaWYKKyAgICB9CisKKyAgICBXQ19TVEFUSUMgV0NfSU5MSU5FIGludCBDbGVhbnVwTWVtb3J5VHJhY2tlcih2b2lkKQorICAgIHsKKyAgICAgICAgLyogcmVzdG9yZSBkZWZhdWx0IGFsbG9jYXRvcnMgKi8KKyAgICAgICAgcmV0dXJuIHdvbGZTU0xfU2V0QWxsb2NhdG9ycyhtZkRlZmF1bHQsIGZmRGVmYXVsdCwgcmZEZWZhdWx0KTsKKyAgICB9CisjZW5kaWYKKworI2VuZGlmIC8qIFVTRV9XT0xGU1NMX01FTU9SWSAqLworCisjZW5kaWYgLyogV09MRlNTTF9NRU1fVFJBQ0tfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvbWVtb3J5LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlMzYwOQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9tZW1vcnkuaApAQCAtMCwwICsxLDIzNyBAQAorLyogbWVtb3J5LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKy8qIHN1Ym1pdHRlZCBieSBlb2YgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvbWVtb3J5LmgKKyovCisKKyNpZm5kZWYgV09MRlNTTF9NRU1PUllfSAorI2RlZmluZSBXT0xGU1NMX01FTU9SWV9ICisKKyNpZiAhZGVmaW5lZChTVFJJTkdfVVNFUikgJiYgIWRlZmluZWQoV09MRlNTTF9MSU5VWEtNKQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfRk9SQ0VfTUFMTE9DX0ZBSUxfVEVTVAorICAgIFdPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9TZXRNZW1GYWlsQ291bnQoaW50IG1lbUZhaWxDb3VudCk7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfU1RBVElDX01FTU9SWQorICAgICNpZmRlZiBXT0xGU1NMX0RFQlVHX01FTU9SWQorICAgICAgICB0eXBlZGVmIHZvaWQgKigqd29sZlNTTF9NYWxsb2NfY2IpKHNpemVfdCBzaXplLCB2b2lkKiBoZWFwLCBpbnQgdHlwZSwgY29uc3QgY2hhciogZnVuYywgdW5zaWduZWQgaW50IGxpbmUpOworICAgICAgICB0eXBlZGVmIHZvaWQgKCp3b2xmU1NMX0ZyZWVfY2IpKHZvaWQgKnB0ciwgdm9pZCogaGVhcCwgaW50IHR5cGUsIGNvbnN0IGNoYXIqIGZ1bmMsIHVuc2lnbmVkIGludCBsaW5lKTsKKyAgICAgICAgdHlwZWRlZiB2b2lkICooKndvbGZTU0xfUmVhbGxvY19jYikodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCogaGVhcCwgaW50IHR5cGUsIGNvbnN0IGNoYXIqIGZ1bmMsIHVuc2lnbmVkIGludCBsaW5lKTsKKyAgICAgICAgV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9NYWxsb2Moc2l6ZV90IHNpemUsIHZvaWQqIGhlYXAsIGludCB0eXBlLCBjb25zdCBjaGFyKiBmdW5jLCB1bnNpZ25lZCBpbnQgbGluZSk7CisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfRnJlZSh2b2lkICpwdHIsIHZvaWQqIGhlYXAsIGludCB0eXBlLCBjb25zdCBjaGFyKiBmdW5jLCB1bnNpZ25lZCBpbnQgbGluZSk7CisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplLCB2b2lkKiBoZWFwLCBpbnQgdHlwZSwgY29uc3QgY2hhciogZnVuYywgdW5zaWduZWQgaW50IGxpbmUpOworICAgICNlbHNlCisgICAgICAgIHR5cGVkZWYgdm9pZCAqKCp3b2xmU1NMX01hbGxvY19jYikoc2l6ZV90IHNpemUsIHZvaWQqIGhlYXAsIGludCB0eXBlKTsKKyAgICAgICAgdHlwZWRlZiB2b2lkICgqd29sZlNTTF9GcmVlX2NiKSh2b2lkICpwdHIsIHZvaWQqIGhlYXAsIGludCB0eXBlKTsKKyAgICAgICAgdHlwZWRlZiB2b2lkICooKndvbGZTU0xfUmVhbGxvY19jYikodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCogaGVhcCwgaW50IHR5cGUpOworICAgICAgICBXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX01hbGxvYyhzaXplX3Qgc2l6ZSwgdm9pZCogaGVhcCwgaW50IHR5cGUpOworICAgICAgICBXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0ZyZWUodm9pZCAqcHRyLCB2b2lkKiBoZWFwLCBpbnQgdHlwZSk7CisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplLCB2b2lkKiBoZWFwLCBpbnQgdHlwZSk7CisgICAgI2VuZGlmIC8qIFdPTEZTU0xfREVCVUdfTUVNT1JZICovCisjZWxzZQorICAgICNpZmRlZiBXT0xGU1NMX0RFQlVHX01FTU9SWQorICAgICAgICB0eXBlZGVmIHZvaWQgKigqd29sZlNTTF9NYWxsb2NfY2IpKHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBmdW5jLCB1bnNpZ25lZCBpbnQgbGluZSk7CisgICAgICAgIHR5cGVkZWYgdm9pZCAoKndvbGZTU0xfRnJlZV9jYikodm9pZCAqcHRyLCBjb25zdCBjaGFyKiBmdW5jLCB1bnNpZ25lZCBpbnQgbGluZSk7CisgICAgICAgIHR5cGVkZWYgdm9pZCAqKCp3b2xmU1NMX1JlYWxsb2NfY2IpKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIGZ1bmMsIHVuc2lnbmVkIGludCBsaW5lKTsKKworICAgICAgICAvKiBQdWJsaWMgaW4gY2FzZSB1c2VyIGFwcCB3YW50cyB0byB1c2UgWE1BTExPQy9YRlJFRSAqLworICAgICAgICBXT0xGU1NMX0FQSSB2b2lkKiB3b2xmU1NMX01hbGxvYyhzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogZnVuYywgdW5zaWduZWQgaW50IGxpbmUpOworICAgICAgICBXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX0ZyZWUodm9pZCAqcHRyLCBjb25zdCBjaGFyKiBmdW5jLCB1bnNpZ25lZCBpbnQgbGluZSk7CisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBmdW5jLCB1bnNpZ25lZCBpbnQgbGluZSk7CisgICAgI2Vsc2UKKyAgICAgICAgdHlwZWRlZiB2b2lkICooKndvbGZTU0xfTWFsbG9jX2NiKShzaXplX3Qgc2l6ZSk7CisgICAgICAgIHR5cGVkZWYgdm9pZCAoKndvbGZTU0xfRnJlZV9jYikodm9pZCAqcHRyKTsKKyAgICAgICAgdHlwZWRlZiB2b2lkICooKndvbGZTU0xfUmVhbGxvY19jYikodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisgICAgICAgIC8qIFB1YmxpYyBpbiBjYXNlIHVzZXIgYXBwIHdhbnRzIHRvIHVzZSBYTUFMTE9DL1hGUkVFICovCisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfTWFsbG9jKHNpemVfdCBzaXplKTsKKyAgICAgICAgV09MRlNTTF9BUEkgdm9pZCAgd29sZlNTTF9GcmVlKHZvaWQgKnB0cik7CisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKyAgICAjZW5kaWYgLyogV09MRlNTTF9ERUJVR19NRU1PUlkgKi8KKyNlbmRpZiAvKiBXT0xGU1NMX1NUQVRJQ19NRU1PUlkgKi8KKworLyogUHVibGljIGdldC9zZXQgZnVuY3Rpb25zICovCitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TZXRBbGxvY2F0b3JzKHdvbGZTU0xfTWFsbG9jX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0ZyZWVfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfUmVhbGxvY19jYik7CitXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9HZXRBbGxvY2F0b3JzKHdvbGZTU0xfTWFsbG9jX2NiKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9GcmVlX2NiKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9SZWFsbG9jX2NiKik7CisKKyNpZmRlZiBXT0xGU1NMX1NUQVRJQ19NRU1PUlkKKyAgICAjZGVmaW5lIFdPTEZTU0xfU1RBVElDX1RJTUVPVVQgMQorICAgICNpZm5kZWYgV09MRlNTTF9TVEFUSUNfQUxJR04KKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1NUQVRJQ19BTElHTiAxNgorICAgICNlbmRpZgorICAgICNpZm5kZWYgV09MRk1FTV9NQVhfQlVDS0VUUworICAgICAgICAjZGVmaW5lIFdPTEZNRU1fTUFYX0JVQ0tFVFMgIDkKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIFdPTEZNRU1fREVGX0JVQ0tFVFMgIDkgICAgIC8qIG51bWJlciBvZiBkZWZhdWx0IG1lbW9yeSBibG9ja3MgKi8KKyAgICAjaWZuZGVmIFdPTEZNRU1fSU9fU1oKKyAgICAgICAgI2RlZmluZSBXT0xGTUVNX0lPX1NaICAgICAgICAxNjk5MiAvKiAxNiBieXRlIGFsaWduZWQgKi8KKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIFdPTEZNRU1fQlVDS0VUUworICAgICAgICAjaWZuZGVmIFNFU1NJT05fQ0VSVFMKKyAgICAgICAgICAgIC8qIGRlZmF1bHQgc2l6ZSBvZiBjaHVua3Mgb2YgbWVtb3J5IHRvIHNlcGFyYXRlIGludG8gKi8KKyAgICAgICAgICAgICNpZm5kZWYgTEFSR0VTVF9NRU1fQlVDS0VUCisgICAgICAgICAgICAgICAgI2RlZmluZSBMQVJHRVNUX01FTV9CVUNLRVQgMTYxMjgKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgI2RlZmluZSBXT0xGTUVNX0JVQ0tFVFMgNjQsMTI4LDI1Niw1MTIsMTAyNCwyNDMyLDM0NTYsNDU0NCxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQVJHRVNUX01FTV9CVUNLRVQKKyAgICAgICAgI2VsaWYgZGVmaW5lZCAoT1BFTlNTTF9FWFRSQSkKKyAgICAgICAgICAgIC8qIGV4dHJhIHN0b3JhZ2UgaW4gc3RydWN0cyBmb3IgbXVsdGlwbGUgYXR0cmlidXRlcyBhbmQgb3JkZXIgKi8KKyAgICAgICAgICAgICNpZm5kZWYgTEFSR0VTVF9NRU1fQlVDS0VUCisgICAgICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBMQVJHRVNUX01FTV9CVUNLRVQgMzA0MDAKKyAgICAgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIExBUkdFU1RfTUVNX0JVQ0tFVCAyNTYwMAorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAjZGVmaW5lIFdPTEZNRU1fQlVDS0VUUyA2NCwxMjgsMjU2LDUxMiwxMDI0LDI0MzIsMzM2MCw0NDgwLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExBUkdFU1RfTUVNX0JVQ0tFVAorICAgICAgICAjZWxpZiBkZWZpbmVkIChXT0xGU1NMX0NFUlRfRVhUKQorICAgICAgICAgICAgLyogY2VydGlmaWNhdGUgZXh0ZW5zaW9ucyByZXF1aXJlcyAyNGsgZm9yIHRoZSBTU0wgc3RydWN0ICovCisgICAgICAgICAgICAjaWZuZGVmIExBUkdFU1RfTUVNX0JVQ0tFVAorICAgICAgICAgICAgICAgICNkZWZpbmUgTEFSR0VTVF9NRU1fQlVDS0VUIDI0NTc2CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICNkZWZpbmUgV09MRk1FTV9CVUNLRVRTIDY0LDEyOCwyNTYsNTEyLDEwMjQsMjQzMiwzNDU2LDQ1NDQsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEFSR0VTVF9NRU1fQlVDS0VUCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAvKiBpbmNyZWFzZSAyM2sgZm9yIG9iamVjdCBtZW1iZXIgb2YgV09MRlNTTF9YNTA5X05BTUVfRU5UUlkgKi8KKyAgICAgICAgICAgICNpZm5kZWYgTEFSR0VTVF9NRU1fQlVDS0VUCisgICAgICAgICAgICAgICAgI2RlZmluZSBMQVJHRVNUX01FTV9CVUNLRVQgMjM0NDAKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgI2RlZmluZSBXT0xGTUVNX0JVQ0tFVFMgNjQsMTI4LDI1Niw1MTIsMTAyNCwyNDMyLDM0NTYsNDU0NCxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQVJHRVNUX01FTV9CVUNLRVQKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBXT0xGTUVNX0RJU1QKKyAgICAgICAgI2lmbmRlZiBXT0xGU1NMX1NUQVRJQ19NRU1PUllfU01BTEwKKyAgICAgICAgICAgICNkZWZpbmUgV09MRk1FTV9ESVNUICAgIDQ5LDEwLDYsMTQsNSw2LDksMSwxCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAvKiBMb3cgcmVzb3VyY2UgYW5kIG5vdCBSU0EgKi8KKyAgICAgICAgICAgICNkZWZpbmUgV09MRk1FTV9ESVNUICAgIDI5LCA3LDYsIDksNCw0LDAsMCwwCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorCisgICAgLyogZmxhZ3MgZm9yIGxvYWRpbmcgc3RhdGljIG1lbW9yeSAob25lIGhvdCBiaXQpICovCisgICAgI2RlZmluZSBXT0xGTUVNX0dFTkVSQUwgICAgICAgMHgwMQorICAgICNkZWZpbmUgV09MRk1FTV9JT19QT09MICAgICAgIDB4MDIKKyAgICAjZGVmaW5lIFdPTEZNRU1fSU9fUE9PTF9GSVhFRCAweDA0CisgICAgI2RlZmluZSBXT0xGTUVNX1RSQUNLX1NUQVRTICAgMHgwOAorCisgICAgI2lmbmRlZiBXT0xGU1NMX01FTV9HVUFSRAorICAgICNkZWZpbmUgV09MRlNTTF9NRU1fR1VBUkQKKyAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9NRU1fU1RBVFMgICAgICBXT0xGU1NMX01FTV9TVEFUUzsKKyAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9NRU1fQ09OTl9TVEFUUyBXT0xGU1NMX01FTV9DT05OX1NUQVRTOworICAgICNlbmRpZgorCisgICAgc3RydWN0IFdPTEZTU0xfTUVNX0NPTk5fU1RBVFMgeworICAgICAgICB3b3JkMzIgcGVha01lbTsgICAvKiBwZWFrIG1lbW9yeSB1c2FnZSAgICAqLworICAgICAgICB3b3JkMzIgY3VyTWVtOyAgICAvKiBjdXJyZW50IG1lbW9yeSB1c2FnZSAqLworICAgICAgICB3b3JkMzIgcGVha0FsbG9jOyAvKiBwZWFrIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworICAgICAgICB3b3JkMzIgY3VyQWxsb2M7ICAvKiBjdXJyZW50IG1lbW9yeSBhbGxvY2F0aW9ucyAqLworICAgICAgICB3b3JkMzIgdG90YWxBbGxvYzsvKiB0b3RhbCBtZW1vcnkgYWxsb2NhdGlvbnMgZm9yIGxpZmV0aW1lICovCisgICAgICAgIHdvcmQzMiB0b3RhbEZyOyAgIC8qIHRvdGFsIGZyZWVzIGZvciBsaWZldGltZSAqLworICAgIH07CisKKyAgICBzdHJ1Y3QgV09MRlNTTF9NRU1fU1RBVFMgeworICAgICAgICB3b3JkMzIgY3VyQWxsb2M7ICAvKiBjdXJyZW50IG1lbW9yeSBhbGxvY2F0aW9ucyAqLworICAgICAgICB3b3JkMzIgdG90YWxBbGxvYzsvKiB0b3RhbCBtZW1vcnkgYWxsb2NhdGlvbnMgZm9yIGxpZmV0aW1lICovCisgICAgICAgIHdvcmQzMiB0b3RhbEZyOyAgIC8qIHRvdGFsIGZyZWVzIGZvciBsaWZldGltZSAqLworICAgICAgICB3b3JkMzIgdG90YWxVc2U7ICAvKiB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IHVzZWQgaW4gYmxvY2tzICovCisgICAgICAgIHdvcmQzMiBhdmFJTzsgICAgIC8qIGF2YWlsYWJsZSBJTyBzcGVjaWZpYyBwb29scyAqLworICAgICAgICB3b3JkMzIgbWF4SGE7ICAgICAvKiBtYXggbnVtYmVyIG9mIGNvbmN1cnJlbnQgaGFuZHNoYWtlcyBhbGxvd2VkICovCisgICAgICAgIHdvcmQzMiBtYXhJTzsgICAgIC8qIG1heCBudW1iZXIgb2YgY29uY3VycmVudCBJTyBjb25uZWN0aW9ucyBhbGxvd2VkICovCisgICAgICAgIHdvcmQzMiBibG9ja1N6W1dPTEZNRU1fTUFYX0JVQ0tFVFNdOyAvKiBibG9jayBzaXplcyBpbiBzdGFja3MgKi8KKyAgICAgICAgd29yZDMyIGF2YUJsb2NrW1dPTEZNRU1fTUFYX0JVQ0tFVFNdOy8qIGF2YSBibG9jayBzaXplcyAqLworICAgICAgICB3b3JkMzIgdXNlZEJsb2NrW1dPTEZNRU1fTUFYX0JVQ0tFVFNdOworICAgICAgICBpbnQgICAgZmxhZzsgLyogZmxhZyB1c2VkICovCisgICAgfTsKKworICAgIHR5cGVkZWYgc3RydWN0IHdjX01lbW9yeSB3Y19NZW1vcnk7IC8qIGludGVybmFsIHN0cnVjdHVyZSBmb3IgbWVtIGJ1Y2tldCAqLworICAgIHR5cGVkZWYgc3RydWN0IFdPTEZTU0xfSEVBUCB7CisgICAgICAgIHdjX01lbW9yeSogYXZhW1dPTEZNRU1fTUFYX0JVQ0tFVFNdOworICAgICAgICB3Y19NZW1vcnkqIGlvOyAgICAgICAgICAgICAgICAgIC8qIGxpc3Qgb2YgYnVmZmVycyB0byB1c2UgZm9yIElPICovCisgICAgICAgIHdvcmQzMiAgICAgbWF4SGE7ICAgICAgICAgICAgICAgLyogbWF4IGNvbmN1cnJlbnQgaGFuZHNoYWtlcyAqLworICAgICAgICB3b3JkMzIgICAgIGN1ckhhOworICAgICAgICB3b3JkMzIgICAgIG1heElPOyAgICAgICAgICAgICAgIC8qIG1heCBjb25jdXJyZW50IElPIGNvbm5lY3Rpb25zICovCisgICAgICAgIHdvcmQzMiAgICAgY3VySU87CisgICAgICAgIHdvcmQzMiAgICAgc2l6ZUxpc3RbV09MRk1FTV9NQVhfQlVDS0VUU107LyogbWVtb3J5IHNpemVzIGluIGF2YSBsaXN0ICovCisgICAgICAgIHdvcmQzMiAgICAgZGlzdExpc3RbV09MRk1FTV9NQVhfQlVDS0VUU107LyogZ2VuZXJhbCBkaXN0cmlidXRpb24gKi8KKyAgICAgICAgd29yZDMyICAgICBpblVzZTsgLyogYW1vdW50IG9mIG1lbW9yeSBjdXJyZW50bHkgaW4gdXNlICovCisgICAgICAgIHdvcmQzMiAgICAgaW9Vc2U7CisgICAgICAgIHdvcmQzMiAgICAgYWxsb2M7IC8qIHRvdGFsIG51bWJlciBvZiBhbGxvY3MgKi8KKyAgICAgICAgd29yZDMyICAgICBmckFsYzsgLyogdG90YWwgbnVtYmVyIG9mIGZyZWVzICAqLworICAgICAgICBpbnQgICAgICAgIGZsYWc7CisgICAgICAgIHdvbGZTU0xfTXV0ZXggbWVtb3J5X211dGV4OworICAgIH0gV09MRlNTTF9IRUFQOworCisgICAgLyogc3RydWN0dXJlIHBhc3NlZCBpbnRvIFhNQUxMT0MgYXMgaGVhcCBoaW50CisgICAgICogaGF2aW5nIHRoaXMgYWJzdHJhY3Rpb24gYWxsb3dzIHRyYWNraW5nIHN0YXRpc3RpY3Mgb2YgaW5kaXZpZHVhbCBzc2wncworICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IFdPTEZTU0xfSEVBUF9ISU5UIHsKKyAgICAgICAgV09MRlNTTF9IRUFQKiAgICAgICAgICAgbWVtb3J5OworICAgICAgICBXT0xGU1NMX01FTV9DT05OX1NUQVRTKiBzdGF0czsgIC8qIGhvbGQgaW5kaXZpZHVhbCBjb25uZWN0aW9uIHN0YXRzICovCisgICAgICAgIHdjX01lbW9yeSogIG91dEJ1ZjsgLyogc2V0IGlmIHVzaW5nIGZpeGVkIGlvIGJ1ZmZlcnMgKi8KKyAgICAgICAgd2NfTWVtb3J5KiAgaW5CdWY7CisgICAgICAgIGJ5dGUgICAgICAgIGhhRmxhZzsgLyogZmxhZyB1c2VkIGZvciBjaGVja2luZyBoYW5kc2hha2UgY291bnQgKi8KKyAgICB9IFdPTEZTU0xfSEVBUF9ISU5UOworCisgICAgV09MRlNTTF9BUEkgaW50IHdjX0xvYWRTdGF0aWNNZW1vcnkoV09MRlNTTF9IRUFQX0hJTlQqKiBwSGludCwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQgaW50IHN6LCBpbnQgZmxhZywgaW50IG1heCk7CisKKyAgICBXT0xGU1NMX0xPQ0FMIGludCB3b2xmU1NMX2luaXRfbWVtb3J5X2hlYXAoV09MRlNTTF9IRUFQKiBoZWFwKTsKKyAgICBXT0xGU1NMX0xPQ0FMIGludCB3b2xmU1NMX2xvYWRfc3RhdGljX21lbW9yeShieXRlKiBidWZmZXIsIHdvcmQzMiBzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWcsIFdPTEZTU0xfSEVBUCogaGVhcCk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgd29sZlNTTF9HZXRNZW1TdGF0cyhXT0xGU1NMX0hFQVAqIGhlYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX01FTV9TVEFUUyogc3RhdHMpOworICAgIFdPTEZTU0xfTE9DQUwgaW50IFNldEZpeGVkSU8oV09MRlNTTF9IRUFQKiBoZWFwLCB3Y19NZW1vcnkqKiBpbyk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgRnJlZUZpeGVkSU8oV09MRlNTTF9IRUFQKiBoZWFwLCB3Y19NZW1vcnkqKiBpbyk7CisKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9TdGF0aWNCdWZmZXJTeihieXRlKiBidWZmZXIsIHdvcmQzMiBzeiwgaW50IGZsYWcpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX01lbW9yeVBhZGRpbmdTeih2b2lkKTsKKyNlbmRpZiAvKiBXT0xGU1NMX1NUQVRJQ19NRU1PUlkgKi8KKworI2lmZGVmIFdPTEZTU0xfU1RBQ0tfTE9HCisgICAgV09MRlNTTF9BUEkgdm9pZCBfX2F0dHJpYnV0ZV9fKChub19pbnN0cnVtZW50X2Z1bmN0aW9uKSkKKyAgICAgICAgICAgIF9fY3lnX3Byb2ZpbGVfZnVuY19lbnRlcih2b2lkICpmdW5jLCAgdm9pZCAqY2FsbGVyKTsKKyAgICBXT0xGU1NMX0FQSSB2b2lkIF9fYXR0cmlidXRlX18oKG5vX2luc3RydW1lbnRfZnVuY3Rpb24pKQorICAgICAgICAgICAgX19jeWdfcHJvZmlsZV9mdW5jX2V4aXQodm9pZCAqZnVuYywgdm9pZCAqY2FsbGVyKTsKKyNlbmRpZiAvKiBXT0xGU1NMX1NUQUNLX0xPRyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZTU0xfTUVNT1JZX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L21pc2MuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9taXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4Njg4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9taXNjLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qIG1pc2MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisvKgorCitERVNDUklQVElPTgorVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgYXJpdGhtZXRpYy1zaGlmdCByaWdodCwgbGVmdCwgYnl0ZSBzd2FwcGluZywgWE9SLAorbWFza2luZyBhbmQgY2xlYXJpbmcgbWVtb3J5IGxvZ2ljLgorCisqLworI2lmbmRlZiBXT0xGX0NSWVBUX01JU0NfSAorI2RlZmluZSBXT0xGX0NSWVBUX01JU0NfSAorCisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKworI2lmZGVmIE5PX0lOTElORQorV09MRlNTTF9MT0NBTAord29yZDMyIHJvdGxGaXhlZCh3b3JkMzIsIHdvcmQzMik7CitXT0xGU1NMX0xPQ0FMCit3b3JkMzIgcm90ckZpeGVkKHdvcmQzMiwgd29yZDMyKTsKKworI2lmZGVmIFdDX1JDMgorV09MRlNTTF9MT0NBTAord29yZDE2IHJvdGxGaXhlZDE2KHdvcmQxNiwgd29yZDE2KTsKK1dPTEZTU0xfTE9DQUwKK3dvcmQxNiByb3RyRml4ZWQxNih3b3JkMTYsIHdvcmQxNik7CisjZW5kaWYKKworV09MRlNTTF9MT0NBTAord29yZDMyIEJ5dGVSZXZlcnNlV29yZDMyKHdvcmQzMik7CitXT0xGU1NMX0xPQ0FMCit2b2lkICAgQnl0ZVJldmVyc2VXb3Jkcyh3b3JkMzIqLCBjb25zdCB3b3JkMzIqLCB3b3JkMzIpOworCitXT0xGU1NMX0xPQ0FMCit2b2lkIFhvcldvcmRzT3V0KHdvbGZzc2xfd29yZCogciwgY29uc3Qgd29sZnNzbF93b3JkKiBhLCBjb25zdCB3b2xmc3NsX3dvcmQqIGIsCisgICAgICAgICAgICAgICAgIHdvcmQzMiBuKTsKK1dPTEZTU0xfTE9DQUwKK3ZvaWQgeG9yYnVmb3V0KHZvaWQqLCBjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCosIHdvcmQzMik7CitXT0xGU1NMX0xPQ0FMCit2b2lkIFhvcldvcmRzKHdvbGZzc2xfd29yZCosIGNvbnN0IHdvbGZzc2xfd29yZCosIHdvcmQzMik7CitXT0xGU1NMX0xPQ0FMCit2b2lkIHhvcmJ1Zih2b2lkKiwgY29uc3Qgdm9pZCosIHdvcmQzMik7CisKK1dPTEZTU0xfTE9DQUwKK3ZvaWQgRm9yY2VaZXJvKGNvbnN0IHZvaWQqLCB3b3JkMzIpOworCitXT0xGU1NMX0xPQ0FMCitpbnQgQ29uc3RhbnRDb21wYXJlKGNvbnN0IGJ5dGUqLCBjb25zdCBieXRlKiwgaW50KTsKKworI2lmZGVmIFdPUkQ2NF9BVkFJTEFCTEUKK1dPTEZTU0xfTE9DQUwKK3dvcmQ2NCByb3RsRml4ZWQ2NCh3b3JkNjQsIHdvcmQ2NCk7CitXT0xGU1NMX0xPQ0FMCit3b3JkNjQgcm90ckZpeGVkNjQod29yZDY0LCB3b3JkNjQpOworCitXT0xGU1NMX0xPQ0FMCit3b3JkNjQgQnl0ZVJldmVyc2VXb3JkNjQod29yZDY0KTsKK1dPTEZTU0xfTE9DQUwKK3ZvaWQgICBCeXRlUmV2ZXJzZVdvcmRzNjQod29yZDY0KiwgY29uc3Qgd29yZDY0Kiwgd29yZDMyKTsKKyNlbmRpZiAvKiBXT1JENjRfQVZBSUxBQkxFICovCisKKyNpZm5kZWYgV09MRlNTTF9IQVZFX01JTgorICAgICNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQobWluKSAvKiBzbyBpZmRlZiBjaGVjayBwYXNzZXMgKi8KKyAgICAgICAgI2RlZmluZSBtaW4gbWluCisgICAgI2VuZGlmCisgICAgV09MRlNTTF9MT0NBTCB3b3JkMzIgbWluKHdvcmQzMiBhLCB3b3JkMzIgYik7CisjZW5kaWYKKworI2lmbmRlZiBXT0xGU1NMX0hBVkVfTUFYCisgICAgI2lmIGRlZmluZWQoSEFWRV9GSVBTKSAmJiAhZGVmaW5lZChtYXgpIC8qIHNvIGlmZGVmIGNoZWNrIHBhc3NlcyAqLworICAgICAgICAjZGVmaW5lIG1heCBtYXgKKyAgICAjZW5kaWYKKyAgICBXT0xGU1NMX0xPQ0FMIHdvcmQzMiBtYXgod29yZDMyIGEsIHdvcmQzMiBiKTsKKyNlbmRpZiAvKiBXT0xGU1NMX0hBVkVfTUFYICovCisKKwordm9pZCBjMzJ0bzI0KHdvcmQzMiBpbiwgd29yZDI0IG91dCk7Cit2b2lkIGMxNnRvYSh3b3JkMTYgdTE2LCBieXRlKiBjKTsKK3ZvaWQgYzMydG9hKHdvcmQzMiB1MzIsIGJ5dGUqIGMpOwordm9pZCBjMjR0bzMyKGNvbnN0IHdvcmQyNCB1MjQsIHdvcmQzMiogdTMyKTsKK3ZvaWQgYXRvMTYoY29uc3QgYnl0ZSogYywgd29yZDE2KiB1MTYpOwordm9pZCBhdG8yNChjb25zdCBieXRlKiBjLCB3b3JkMzIqIHUyNCk7Cit2b2lkIGF0bzMyKGNvbnN0IGJ5dGUqIGMsIHdvcmQzMiogdTMyKTsKK3dvcmQzMiBidG9pKGJ5dGUgYik7CisKKworV09MRlNTTF9MT0NBTCBieXRlIGN0TWFza0dUKGludCBhLCBpbnQgYik7CitXT0xGU1NMX0xPQ0FMIGJ5dGUgY3RNYXNrR1RFKGludCBhLCBpbnQgYik7CitXT0xGU1NMX0xPQ0FMIGludCAgY3RNYXNrSW50R1RFKGludCBhLCBpbnQgYik7CitXT0xGU1NMX0xPQ0FMIGJ5dGUgY3RNYXNrTFQoaW50IGEsIGludCBiKTsKK1dPTEZTU0xfTE9DQUwgYnl0ZSBjdE1hc2tMVEUoaW50IGEsIGludCBiKTsKK1dPTEZTU0xfTE9DQUwgYnl0ZSBjdE1hc2tFcShpbnQgYSwgaW50IGIpOworV09MRlNTTF9MT0NBTCB3b3JkMTYgY3RNYXNrMTZHVChpbnQgYSwgaW50IGIpOworV09MRlNTTF9MT0NBTCB3b3JkMTYgY3RNYXNrMTZHVEUoaW50IGEsIGludCBiKTsKK1dPTEZTU0xfTE9DQUwgd29yZDE2IGN0TWFzazE2TFQoaW50IGEsIGludCBiKTsKK1dPTEZTU0xfTE9DQUwgd29yZDE2IGN0TWFzazE2TFRFKGludCBhLCBpbnQgYik7CitXT0xGU1NMX0xPQ0FMIHdvcmQxNiBjdE1hc2sxNkVxKGludCBhLCBpbnQgYik7CitXT0xGU1NMX0xPQ0FMIGJ5dGUgY3RNYXNrTm90RXEoaW50IGEsIGludCBiKTsKK1dPTEZTU0xfTE9DQUwgYnl0ZSBjdE1hc2tTZWwoYnl0ZSBtLCBieXRlIGEsIGJ5dGUgYik7CitXT0xGU1NMX0xPQ0FMIGludCAgY3RNYXNrU2VsSW50KGJ5dGUgbSwgaW50IGEsIGludCBiKTsKK1dPTEZTU0xfTE9DQUwgYnl0ZSBjdFNldExURShpbnQgYSwgaW50IGIpOworCisjZW5kaWYgLyogTk9fSU5MSU5FICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgIC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisKKyNlbmRpZiAvKiBXT0xGX0NSWVBUX01JU0NfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvbXBpX2NsYXNzLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvbXBpX2NsYXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0YWNjMgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9tcGlfY2xhc3MuaApAQCAtMCwwICsxLDEwMjEgQEAKKy8qIG1waV9jbGFzcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKyNpZiAhKGRlZmluZWQoTFRNMSkgJiYgZGVmaW5lZChMVE0yKSAmJiBkZWZpbmVkKExUTTMpKQorI2lmIGRlZmluZWQoTFRNMikKKyNkZWZpbmUgTFRNMworI2VuZGlmCisjaWYgZGVmaW5lZChMVE0xKQorI2RlZmluZSBMVE0yCisjZW5kaWYKKyNkZWZpbmUgTFRNMQorCisjaWYgZGVmaW5lZChMVE1fQUxMKQorI2RlZmluZSBCTl9FUlJPUl9DCisjZGVmaW5lIEJOX0ZBU1RfTVBfSU5WTU9EX0MKKyNkZWZpbmUgQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DCisjZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfRElHU19DCisjZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfSElHSF9ESUdTX0MKKyNkZWZpbmUgQk5fRkFTVF9TX01QX1NRUl9DCisjZGVmaW5lIEJOX01QXzJFWFBUX0MKKyNkZWZpbmUgQk5fTVBfQUJTX0MKKyNkZWZpbmUgQk5fTVBfQUREX0MKKyNkZWZpbmUgQk5fTVBfQUREX0RfQworI2RlZmluZSBCTl9NUF9BRERNT0RfQworI2RlZmluZSBCTl9NUF9BTkRfQworI2RlZmluZSBCTl9NUF9DTEFNUF9DCisjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQworI2RlZmluZSBCTl9NUF9DTVBfQworI2RlZmluZSBCTl9NUF9DTVBfRF9DCisjZGVmaW5lIEJOX01QX0NNUF9NQUdfQworI2RlZmluZSBCTl9NUF9DTlRfTFNCX0MKKyNkZWZpbmUgQk5fTVBfQ09QWV9DCisjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQworI2RlZmluZSBCTl9NUF9ESVZfQworI2RlZmluZSBCTl9NUF9ESVZfMl9DCisjZGVmaW5lIEJOX01QX0RJVl8yRF9DCisjZGVmaW5lIEJOX01QX0RJVl8zX0MKKyNkZWZpbmUgQk5fTVBfRElWX0RfQworI2RlZmluZSBCTl9NUF9EUl9JU19NT0RVTFVTX0MKKyNkZWZpbmUgQk5fTVBfRFJfUkVEVUNFX0MKKyNkZWZpbmUgQk5fTVBfRFJfU0VUVVBfQworI2RlZmluZSBCTl9NUF9FWENIX0MKKyNkZWZpbmUgQk5fTVBfRVhQVF9EX0MKKyNkZWZpbmUgQk5fTVBfRVhQVE1PRF9CQVNFXzIKKyNkZWZpbmUgQk5fTVBfRVhQVE1PRF9DCisjZGVmaW5lIEJOX01QX0VYUFRNT0RfRkFTVF9DCisjZGVmaW5lIEJOX01QX0VYVEVVQ0xJRF9DCisjZGVmaW5lIEJOX01QX0ZSRUFEX0MKKyNkZWZpbmUgQk5fTVBfRldSSVRFX0MKKyNkZWZpbmUgQk5fTVBfR0NEX0MKKyNkZWZpbmUgQk5fTVBfR0VUX0lOVF9DCisjZGVmaW5lIEJOX01QX0dST1dfQworI2RlZmluZSBCTl9NUF9JTklUX0MKKyNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKKyNkZWZpbmUgQk5fTVBfSU5JVF9NVUxUSV9DCisjZGVmaW5lIEJOX01QX0lOSVRfU0VUX0MKKyNkZWZpbmUgQk5fTVBfSU5JVF9TRVRfSU5UX0MKKyNkZWZpbmUgQk5fTVBfSU5JVF9TSVpFX0MKKyNkZWZpbmUgQk5fTVBfSU5WTU9EX0MKKyNkZWZpbmUgQk5fTVBfSU5WTU9EX1NMT1dfQworI2RlZmluZSBCTl9NUF9JU19TUVVBUkVfQworI2RlZmluZSBCTl9NUF9KQUNPQklfQworI2RlZmluZSBCTl9NUF9LQVJBVFNVQkFfTVVMX0MKKyNkZWZpbmUgQk5fTVBfS0FSQVRTVUJBX1NRUl9DCisjZGVmaW5lIEJOX01QX0xDTV9DCisjZGVmaW5lIEJOX01QX0xTSERfQworI2RlZmluZSBCTl9NUF9NT0RfQworI2RlZmluZSBCTl9NUF9NT0RfMkRfQworI2RlZmluZSBCTl9NUF9NT0RfRF9DCisjZGVmaW5lIEJOX01QX01PTlRHT01FUllfQ0FMQ19OT1JNQUxJWkFUSU9OX0MKKyNkZWZpbmUgQk5fTVBfTU9OVEdPTUVSWV9SRURVQ0VfQworI2RlZmluZSBCTl9NUF9NT05UR09NRVJZX1NFVFVQX0MKKyNkZWZpbmUgQk5fTVBfTVVMX0MKKyNkZWZpbmUgQk5fTVBfTVVMXzJfQworI2RlZmluZSBCTl9NUF9NVUxfMkRfQworI2RlZmluZSBCTl9NUF9NVUxfRF9DCisjZGVmaW5lIEJOX01QX01VTE1PRF9DCisjZGVmaW5lIEJOX01QX05fUk9PVF9DCisjZGVmaW5lIEJOX01QX05FR19DCisjZGVmaW5lIEJOX01QX09SX0MKKyNkZWZpbmUgQk5fTVBfUFJJTUVfRkVSTUFUX0MKKyNkZWZpbmUgQk5fTVBfUFJJTUVfSVNfRElWSVNJQkxFX0MKKyNkZWZpbmUgQk5fTVBfUFJJTUVfSVNfUFJJTUVfQworI2RlZmluZSBCTl9NUF9QUklNRV9NSUxMRVJfUkFCSU5fQworI2RlZmluZSBCTl9NUF9QUklNRV9ORVhUX1BSSU1FX0MKKyNkZWZpbmUgQk5fTVBfUFJJTUVfUkFCSU5fTUlMTEVSX1RSSUFMU19DCisjZGVmaW5lIEJOX01QX1BSSU1FX1JBTkRPTV9FWF9DCisjZGVmaW5lIEJOX01QX1JBRElYX1NJWkVfQworI2RlZmluZSBCTl9NUF9SQURJWF9TTUFQX0MKKyNkZWZpbmUgQk5fTVBfUkFORF9DCisjZGVmaW5lIEJOX01QX1JFQURfUkFESVhfQworI2RlZmluZSBCTl9NUF9SRUFEX1NJR05FRF9CSU5fQworI2RlZmluZSBCTl9NUF9SRUFEX1VOU0lHTkVEX0JJTl9DCisjZGVmaW5lIEJOX01QX1JFRFVDRV9DCisjZGVmaW5lIEJOX01QX1JFRFVDRV8yS19DCisjZGVmaW5lIEJOX01QX1JFRFVDRV8yS19MX0MKKyNkZWZpbmUgQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0MKKyNkZWZpbmUgQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0xfQworI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfQworI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfTF9DCisjZGVmaW5lIEJOX01QX1JFRFVDRV9TRVRVUF9DCisjZGVmaW5lIEJOX01QX1JTSERfQworI2RlZmluZSBCTl9NUF9TRVRfQworI2RlZmluZSBCTl9NUF9TRVRfSU5UX0MKKyNkZWZpbmUgQk5fTVBfU0hSSU5LX0MKKyNkZWZpbmUgQk5fTVBfU0lHTkVEX0JJTl9TSVpFX0MKKyNkZWZpbmUgQk5fTVBfU1FSX0MKKyNkZWZpbmUgQk5fTVBfU1FSTU9EX0MKKyNkZWZpbmUgQk5fTVBfU1FSVF9DCisjZGVmaW5lIEJOX01QX1NVQl9DCisjZGVmaW5lIEJOX01QX1NVQl9EX0MKKyNkZWZpbmUgQk5fTVBfU1VCTU9EX0MKKyNkZWZpbmUgQk5fTVBfVE9fU0lHTkVEX0JJTl9DCisjZGVmaW5lIEJOX01QX1RPX1NJR05FRF9CSU5fTl9DCisjZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DCisjZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9OX0MKKyNkZWZpbmUgQk5fTVBfVE9PTV9NVUxfQworI2RlZmluZSBCTl9NUF9UT09NX1NRUl9DCisjZGVmaW5lIEJOX01QX1RPUkFESVhfQworI2RlZmluZSBCTl9NUF9UT1JBRElYX05fQworI2RlZmluZSBCTl9NUF9VTlNJR05FRF9CSU5fU0laRV9DCisjZGVmaW5lIEJOX01QX1hPUl9DCisjZGVmaW5lIEJOX01QX1pFUk9fQworI2RlZmluZSBCTl9QUklNRV9UQUJfQworI2RlZmluZSBCTl9SRVZFUlNFX0MKKyNkZWZpbmUgQk5fU19NUF9BRERfQworI2RlZmluZSBCTl9TX01QX0VYUFRNT0RfQworI2RlZmluZSBCTl9TX01QX01VTF9ESUdTX0MKKyNkZWZpbmUgQk5fU19NUF9NVUxfSElHSF9ESUdTX0MKKyNkZWZpbmUgQk5fU19NUF9TUVJfQworI2RlZmluZSBCTl9TX01QX1NVQl9DCisjZGVmaW5lIEJOQ09SRV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fRVJST1JfQykKKyAgICNkZWZpbmUgQk5fTVBfRVJST1JfVE9fU1RSSU5HX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9GQVNUX01QX0lOVk1PRF9DKQorICAgI2RlZmluZSBCTl9NUF9JU0VWRU5fQworICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX01PRF9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8yX0MKKyAgICNkZWZpbmUgQk5fTVBfSVNPRERfQworICAgI2RlZmluZSBCTl9NUF9TVUJfQworICAgI2RlZmluZSBCTl9NUF9DTVBfQworICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DKQorICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9GQVNUX1NfTVBfTVVMX0RJR1NfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DKQorICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX0ZBU1RfU19NUF9TUVJfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF8yRVhQVF9DKQorICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQUJTX0MpCisgICAjZGVmaW5lIEJOX01QX0NPUFlfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0FERF9DKQorICAgI2RlZmluZSBCTl9TX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9NQUdfQworICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQUREX0RfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX1NVQl9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0FERE1PRF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfQUREX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9NT0RfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0FORF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQ0xBTVBfQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9DTEVBUl9DKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0NMRUFSX01VTFRJX0MpCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9DTVBfQykKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQ01QX0RfQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9DTVBfTUFHX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQ05UX0xTQl9DKQorICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0NPUFlfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQ09VTlRfQklUU19DKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0RJVl9DKQorICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCisgICAjZGVmaW5lIEJOX01QX0FCU19DCisgICAjZGVmaW5lIEJOX01QX01VTF8yRF9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8yRF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfU0laRV9DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9MU0hEX0MKKyAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCisgICAjZGVmaW5lIEJOX01QX01VTF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfRElWXzJfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9ESVZfMkRfQykKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9SU0hEX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9ESVZfM19DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfRElWX0RfQykKKyAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8yRF9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8zX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9TSVpFX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0RSX0lTX01PRFVMVVNfQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9EUl9SRURVQ0VfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9EUl9TRVRVUF9DKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0VYQ0hfQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9FWFBUX0RfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfU1FSX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9NVUxfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0VYUFRNT0RfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCisgICAjZGVmaW5lIEJOX01QX0lOVk1PRF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyAgICNkZWZpbmUgQk5fTVBfQUJTX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfTF9DCisgICAjZGVmaW5lIEJOX1NfTVBfRVhQVE1PRF9DCisgICAjZGVmaW5lIEJOX01QX0RSX0lTX01PRFVMVVNfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfQworICAgI2RlZmluZSBCTl9NUF9JU09ERF9DCisgICAjZGVmaW5lIEJOX01QX0VYUFRNT0RfRkFTVF9DCisgICAjZGVmaW5lIEJOX01QX0VYUFRNT0RfQkFTRV8yCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfRVhQVE1PRF9GQVNUX0MpCisgICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQworICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9NT05UR09NRVJZX1NFVFVQX0MKKyAgICNkZWZpbmUgQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DCisgICAjZGVmaW5lIEJOX01QX01PTlRHT01FUllfUkVEVUNFX0MKKyAgICNkZWZpbmUgQk5fTVBfRFJfU0VUVVBfQworICAgI2RlZmluZSBCTl9NUF9EUl9SRURVQ0VfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfMktfU0VUVVBfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfMktfQworICAgI2RlZmluZSBCTl9NUF9NT05UR09NRVJZX0NBTENfTk9STUFMSVpBVElPTl9DCisgICAjZGVmaW5lIEJOX01QX01VTE1PRF9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9DCisgICAjZGVmaW5lIEJOX01QX01PRF9DCisgICAjZGVmaW5lIEJOX01QX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9TUVJfQworICAgI2RlZmluZSBCTl9NUF9NVUxfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9FWFRFVUNMSURfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9NVUxUSV9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9DCisgICAjZGVmaW5lIEJOX01QX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9ESVZfQworICAgI2RlZmluZSBCTl9NUF9NVUxfQworICAgI2RlZmluZSBCTl9NUF9TVUJfQworICAgI2RlZmluZSBCTl9NUF9ORUdfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0ZSRUFEX0MpCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9TX1JNQVBfQworICAgI2RlZmluZSBCTl9NUF9NVUxfRF9DCisgICAjZGVmaW5lIEJOX01QX0FERF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX0RfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0ZXUklURV9DKQorICAgI2RlZmluZSBCTl9NUF9SQURJWF9TSVpFX0MKKyAgICNkZWZpbmUgQk5fTVBfVE9SQURJWF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfR0NEX0MpCisgICAjZGVmaW5lIEJOX01QX0lTWkVST19DCisgICAjZGVmaW5lIEJOX01QX0FCU19DCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9DTlRfTFNCX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX01VTF8yRF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9HRVRfSU5UX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfR1JPV19DKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0lOSVRfQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9JTklUX0NPUFlfQykKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfSU5JVF9NVUxUSV9DKQorICAgI2RlZmluZSBCTl9NUF9FUlJfQworICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0lOSVRfU0VUX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9TRVRfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0lOSVRfU0VUX0lOVF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0lOVF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfSU5JVF9TSVpFX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0lOVk1PRF9DKQorICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JU09ERF9DCisgICAjZGVmaW5lIEJOX0ZBU1RfTVBfSU5WTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5WTU9EX1NMT1dfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0lOVk1PRF9TTE9XX0MpCisgICAjZGVmaW5lIEJOX01QX0lTWkVST19DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfTVVMVElfQworICAgI2RlZmluZSBCTl9NUF9NT0RfQworICAgI2RlZmluZSBCTl9NUF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfSVNFVkVOX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJfQworICAgI2RlZmluZSBCTl9NUF9JU09ERF9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfSVNfU1FVQVJFX0MpCisgICAjZGVmaW5lIEJOX01QX01PRF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9TRVRfSU5UX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfR0VUX0lOVF9DCisgICAjZGVmaW5lIEJOX01QX1NRUlRfQworICAgI2RlZmluZSBCTl9NUF9TUVJfQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0pBQ09CSV9DKQorICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCisgICAjZGVmaW5lIEJOX01QX0lTWkVST19DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX0NOVF9MU0JfQworICAgI2RlZmluZSBCTl9NUF9ESVZfMkRfQworICAgI2RlZmluZSBCTl9NUF9NT0RfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfS0FSQVRTVUJBX01VTF9DKQorICAgI2RlZmluZSBCTl9NUF9NVUxfQworICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0xTSERfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfS0FSQVRTVUJBX1NRUl9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX1NRUl9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX1NfTVBfQUREX0MKKyAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9MQ01fQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9NVUxUSV9DCisgICAjZGVmaW5lIEJOX01QX0dDRF9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9NQUdfQworICAgI2RlZmluZSBCTl9NUF9ESVZfQworICAgI2RlZmluZSBCTl9NUF9NVUxfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTFNIRF9DKQorICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTU9EX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9ESVZfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX01PRF8yRF9DKQorICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9NT0RfRF9DKQorICAgI2RlZmluZSBCTl9NUF9ESVZfRF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTU9OVEdPTUVSWV9DQUxDX05PUk1BTElaQVRJT05fQykKKyAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCisgICAjZGVmaW5lIEJOX01QXzJFWFBUX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMXzJfQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fU19NUF9TVUJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX01PTlRHT01FUllfUkVEVUNFX0MpCisgICAjZGVmaW5lIEJOX0ZBU1RfTVBfTU9OVEdPTUVSWV9SRURVQ0VfQworICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworICAgI2RlZmluZSBCTl9NUF9SU0hEX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9NT05UR09NRVJZX1NFVFVQX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTVVMX0MpCisgICAjZGVmaW5lIEJOX01QX1RPT01fTVVMX0MKKyAgICNkZWZpbmUgQk5fTVBfS0FSQVRTVUJBX01VTF9DCisgICAjZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfRElHU19DCisgICAjZGVmaW5lIEJOX1NfTVBfTVVMX0MKKyAgICNkZWZpbmUgQk5fU19NUF9NVUxfRElHU19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTVVMXzJfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTVVMXzJEX0MpCisgICAjZGVmaW5lIEJOX01QX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9NVUxfRF9DKQorICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX01VTE1PRF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9NT0RfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX05fUk9PVF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX0VYUFRfRF9DCisgICAjZGVmaW5lIEJOX01QX01VTF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX01VTF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX0MKKyAgICNkZWZpbmUgQk5fTVBfU1VCX0RfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX05FR19DKQorICAgI2RlZmluZSBCTl9NUF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9PUl9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfRkVSTUFUX0MpCisgICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCisgICAjZGVmaW5lIEJOX01QX0VYUFRNT0RfQworICAgI2RlZmluZSBCTl9NUF9DTVBfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfSVNfRElWSVNJQkxFX0MpCisgICAjZGVmaW5lIEJOX01QX01PRF9EX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9QUklNRV9JU19QUklNRV9DKQorICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCisgICAjZGVmaW5lIEJOX01QX1BSSU1FX0lTX0RJVklTSUJMRV9DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9TRVRfQworICAgI2RlZmluZSBCTl9NUF9QUklNRV9NSUxMRVJfUkFCSU5fQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfTUlMTEVSX1JBQklOX0MpCisgICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfU1VCX0RfQworICAgI2RlZmluZSBCTl9NUF9DTlRfTFNCX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfRVhQVE1PRF9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9DCisgICAjZGVmaW5lIEJOX01QX1NRUk1PRF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9QUklNRV9ORVhUX1BSSU1FX0MpCisgICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfU1VCX0RfQworICAgI2RlZmluZSBCTl9NUF9JU0VWRU5fQworICAgI2RlZmluZSBCTl9NUF9NT0RfRF9DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9BRERfRF9DCisgICAjZGVmaW5lIEJOX01QX1BSSU1FX01JTExFUl9SQUJJTl9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9QUklNRV9SQUJJTl9NSUxMRVJfVFJJQUxTX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfUkFORE9NX0VYX0MpCisgICAjZGVmaW5lIEJOX01QX1JFQURfVU5TSUdORURfQklOX0MKKyAgICNkZWZpbmUgQk5fTVBfUFJJTUVfSVNfUFJJTUVfQworICAgI2RlZmluZSBCTl9NUF9TVUJfRF9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8yX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMXzJfQworICAgI2RlZmluZSBCTl9NUF9BRERfRF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkFESVhfU0laRV9DKQorICAgI2RlZmluZSBCTl9NUF9DT1VOVF9CSVRTX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWX0RfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkFESVhfU01BUF9DKQorICAgI2RlZmluZSBCTl9NUF9TX1JNQVBfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1JBTkRfQykKKyAgICNkZWZpbmUgQk5fTVBfWkVST19DCisgICAjZGVmaW5lIEJOX01QX0FERF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVBRF9SQURJWF9DKQorICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfU19STUFQX0MKKyAgICNkZWZpbmUgQk5fTVBfUkFESVhfU01BUF9DCisgICAjZGVmaW5lIEJOX01QX01VTF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQUREX0RfQworICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1JFQURfU0lHTkVEX0JJTl9DKQorICAgI2RlZmluZSBCTl9NUF9SRUFEX1VOU0lHTkVEX0JJTl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVBRF9VTlNJR05FRF9CSU5fQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9NVUxfMkRfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFX0MpCisgICAjZGVmaW5lIEJOX01QX1JFRFVDRV9TRVRVUF9DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX1JTSERfQworICAgI2RlZmluZSBCTl9NUF9NVUxfQworICAgI2RlZmluZSBCTl9TX01QX01VTF9ISUdIX0RJR1NfQworICAgI2RlZmluZSBCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DCisgICAjZGVmaW5lIEJOX01QX01PRF8yRF9DCisgICAjZGVmaW5lIEJOX1NfTVBfTVVMX0RJR1NfQworICAgI2RlZmluZSBCTl9NUF9TVUJfQworICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9DCisgICAjZGVmaW5lIEJOX01QX0xTSERfQworICAgI2RlZmluZSBCTl9NUF9BRERfQworICAgI2RlZmluZSBCTl9NUF9DTVBfQworICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9SRURVQ0VfMktfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCisgICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQworICAgI2RlZmluZSBCTl9NUF9ESVZfMkRfQworICAgI2RlZmluZSBCTl9NUF9NVUxfRF9DCisgICAjZGVmaW5lIEJOX1NfTVBfQUREX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1JFRFVDRV8yS19MX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9DT1VOVF9CSVRTX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMX0MKKyAgICNkZWZpbmUgQk5fU19NUF9BRERfQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fU19NUF9TVUJfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9DT1VOVF9CSVRTX0MKKyAgICNkZWZpbmUgQk5fTVBfMkVYUFRfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisgICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9SRURVQ0VfMktfU0VUVVBfTF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfMkVYUFRfQworICAgI2RlZmluZSBCTl9NUF9DT1VOVF9CSVRTX0MKKyAgICNkZWZpbmUgQk5fU19NUF9TVUJfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFX0lTXzJLX0MpCisgICAjZGVmaW5lIEJOX01QX1JFRFVDRV8yS19DCisgICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1JFRFVDRV9JU18yS19MX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFX1NFVFVQX0MpCisgICAjZGVmaW5lIEJOX01QXzJFWFBUX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9SU0hEX0MpCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1NFVF9DKQorICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TRVRfSU5UX0MpCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9NVUxfMkRfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfU0hSSU5LX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfU0lHTkVEX0JJTl9TSVpFX0MpCisgICAjZGVmaW5lIEJOX01QX1VOU0lHTkVEX0JJTl9TSVpFX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TUVJfQykKKyAgICNkZWZpbmUgQk5fTVBfVE9PTV9TUVJfQworICAgI2RlZmluZSBCTl9NUF9LQVJBVFNVQkFfU1FSX0MKKyAgICNkZWZpbmUgQk5fRkFTVF9TX01QX1NRUl9DCisgICAjZGVmaW5lIEJOX1NfTVBfU1FSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TUVJNT0RfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCisgICAjZGVmaW5lIEJOX01QX1NRUl9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TUVJUX0MpCisgICAjZGVmaW5lIEJOX01QX05fUk9PVF9DCisgICAjZGVmaW5lIEJOX01QX0lTWkVST19DCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9SU0hEX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWX0MKKyAgICNkZWZpbmUgQk5fTVBfQUREX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJfQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fTVBfRVhDSF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TVUJfQykKKyAgICNkZWZpbmUgQk5fU19NUF9BRERfQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fU19NUF9TVUJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1NVQl9EX0MpCisgICAjZGVmaW5lIEJOX01QX0dST1dfQworICAgI2RlZmluZSBCTl9NUF9BRERfRF9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TVUJNT0RfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9UT19TSUdORURfQklOX0MpCisgICAjZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfVE9fU0lHTkVEX0JJTl9OX0MpCisgICAjZGVmaW5lIEJOX01QX1NJR05FRF9CSU5fU0laRV9DCisgICAjZGVmaW5lIEJOX01QX1RPX1NJR05FRF9CSU5fQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9ESVZfMkRfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfVE9fVU5TSUdORURfQklOX05fQykKKyAgICNkZWZpbmUgQk5fTVBfVU5TSUdORURfQklOX1NJWkVfQworICAgI2RlZmluZSBCTl9NUF9UT19VTlNJR05FRF9CSU5fQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1RPT01fTVVMX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfTVVMVElfQworICAgI2RlZmluZSBCTl9NUF9NT0RfMkRfQworICAgI2RlZmluZSBCTl9NUF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCisgICAjZGVmaW5lIEJOX01QX01VTF9DCisgICAjZGVmaW5lIEJOX01QX01VTF8yX0MKKyAgICNkZWZpbmUgQk5fTVBfQUREX0MKKyAgICNkZWZpbmUgQk5fTVBfU1VCX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJfQworICAgI2RlZmluZSBCTl9NUF9NVUxfMkRfQworICAgI2RlZmluZSBCTl9NUF9NVUxfRF9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8zX0MKKyAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX01VTFRJX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9UT09NX1NRUl9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX1JTSERfQworICAgI2RlZmluZSBCTl9NUF9TUVJfQworICAgI2RlZmluZSBCTl9NUF9NVUxfMl9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8yX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMX0RfQworICAgI2RlZmluZSBCTl9NUF9ESVZfM19DCisgICAjZGVmaW5lIEJOX01QX0xTSERfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfVE9SQURJWF9DKQorICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9ESVZfRF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyAgICNkZWZpbmUgQk5fTVBfU19STUFQX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9UT1JBRElYX05fQykKKyAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWX0RfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisgICAjZGVmaW5lIEJOX01QX1NfUk1BUF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfVU5TSUdORURfQklOX1NJWkVfQykKKyAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfWE9SX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyAgICNkZWZpbmUgQk5fTVBfRVhDSF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9aRVJPX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fUFJJTUVfVEFCX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fUkVWRVJTRV9DKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX1NfTVBfQUREX0MpCisgICAjZGVmaW5lIEJOX01QX0dST1dfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fU19NUF9FWFBUTU9EX0MpCisgICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQworICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfU0VUVVBfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfMktfU0VUVVBfTF9DCisgICAjZGVmaW5lIEJOX01QX1JFRFVDRV8yS19MX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX1NRUl9DCisgICAjZGVmaW5lIEJOX01QX01VTF9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX1NfTVBfTVVMX0RJR1NfQykKKyAgICNkZWZpbmUgQk5fRkFTVF9TX01QX01VTF9ESUdTX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9TSVpFX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX1NfTVBfTVVMX0hJR0hfRElHU19DKQorICAgI2RlZmluZSBCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfU0laRV9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyAgICNkZWZpbmUgQk5fTVBfRVhDSF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9TX01QX1NRUl9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fU19NUF9TVUJfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTkNPUkVfQykKKyNlbmRpZgorCisjaWZkZWYgTFRNMworI2RlZmluZSBMVE1fTEFTVAorI2VuZGlmCisjaW5jbHVkZSAibXBpX3N1cGVyY2xhc3MuaCIKKyNpbmNsdWRlICJtcGlfY2xhc3MuaCIKKyNlbHNlCisjZGVmaW5lIExUTV9MQVNUCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L21waV9zdXBlcmNsYXNzLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvbXBpX3N1cGVyY2xhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWViYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L21waV9zdXBlcmNsYXNzLmgKQEAgLTAsMCArMSw5NiBAQAorLyogbXBpX3N1cGVyY2xhc3MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworCisvKiBzdXBlciBjbGFzcyBmaWxlIGZvciBQSyBhbGdvcyAqLworCisvKiBkZWZhdWx0IC4uLiBpbmNsdWRlIGFsbCBNUEkgKi8KKyNkZWZpbmUgTFRNX0FMTAorCisvKiBSU0Egb25seSAoZG9lcyBub3Qgc3VwcG9ydCBESC9EU0EvRUNDKSAqLworLyogI2RlZmluZSBTQ19SU0FfMSAqLworCisvKiBGb3IgcmVmZXJlbmNlLi4uLiBPbiBhbiBBdGhsb242NCBvcHRpbWl6aW5nIGZvciBzcGVlZC4uLgorCisgICBMVE0ncyBtcGkubyB3aXRoIGFsbCBmdW5jdGlvbnMgW3N0cmlwZWRdIGlzIDE0MktpQiBpbiBzaXplLgorCisqLworCisvKiBXb3JrcyBmb3IgUlNBIG9ubHksIG1waS5vIGlzIDY4S2lCICovCisjaWZkZWYgU0NfUlNBXzEKKyAgICNkZWZpbmUgQk5fTVBfU0hSSU5LX0MKKyAgICNkZWZpbmUgQk5fTVBfTENNX0MKKyAgICNkZWZpbmUgQk5fTVBfUFJJTUVfUkFORE9NX0VYX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5WTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfR0NEX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQURETU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfRVhQVE1PRF9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9JTlRfQworICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQworICAgI2RlZmluZSBCTl9NUF9VTlNJR05FRF9CSU5fU0laRV9DCisgICAjZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DCisgICAjZGVmaW5lIEJOX01QX01PRF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfUFJJTUVfUkFCSU5fTUlMTEVSX1RSSUFMU19DCisgICAjZGVmaW5lIEJOX1JFVkVSU0VfQworICAgI2RlZmluZSBCTl9QUklNRV9UQUJfQworCisgICAvKiBvdGhlciBtb2RpZmllcnMgKi8KKyAgICNkZWZpbmUgQk5fTVBfRElWX1NNQUxMICAgICAgICAgICAgICAgICAgICAvKiBTbG93ZXIgZGl2aXNpb24sIG5vdCBjcml0aWNhbCAqLworCisgICAvKiBoZXJlIHdlIGFyZSBvbiB0aGUgbGFzdCBwYXNzIHNvIHdlIHR1cm4gdGhpbmdzIG9mZi4gIFRoZSBmdW5jdGlvbnMgY2xhc3NlcyBhcmUgc3RpbGwgdGhlcmUKKyAgICAqIGJ1dCB3ZSByZW1vdmUgdGhlbSBzcGVjaWZpY2FsbHkgZnJvbSB0aGUgYnVpbGQuICBUaGlzIGFsc28gaW52b2tlcyB0d2Vha3MgaW4gZnVuY3Rpb25zCisgICAgKiBsaWtlIHJlbW92aW5nIHN1cHBvcnQgZm9yIGV2ZW4gbW9kdWxpLCBldGMuLi4KKyAgICAqLworI2lmZGVmIExUTV9MQVNUCisgICAjdW5kZWYgIEJOX01QX1RPT01fTVVMX0MKKyAgICN1bmRlZiAgQk5fTVBfVE9PTV9TUVJfQworICAgI3VuZGVmICBCTl9NUF9LQVJBVFNVQkFfTVVMX0MKKyAgICN1bmRlZiAgQk5fTVBfS0FSQVRTVUJBX1NRUl9DCisgICAjdW5kZWYgIEJOX01QX1JFRFVDRV9DCisgICAjdW5kZWYgIEJOX01QX1JFRFVDRV9TRVRVUF9DCisgICAjdW5kZWYgIEJOX01QX0RSX0lTX01PRFVMVVNfQworICAgI3VuZGVmICBCTl9NUF9EUl9TRVRVUF9DCisgICAjdW5kZWYgIEJOX01QX0RSX1JFRFVDRV9DCisgICAjdW5kZWYgIEJOX01QX1JFRFVDRV9JU18yS19DCisgICAjdW5kZWYgIEJOX01QX1JFRFVDRV8yS19TRVRVUF9DCisgICAjdW5kZWYgIEJOX01QX1JFRFVDRV8yS19DCisgICAjdW5kZWYgIEJOX1NfTVBfRVhQVE1PRF9DCisgICAjdW5kZWYgIEJOX01QX0RJVl8zX0MKKyAgICN1bmRlZiAgQk5fU19NUF9NVUxfSElHSF9ESUdTX0MKKyAgICN1bmRlZiAgQk5fRkFTVF9TX01QX01VTF9ISUdIX0RJR1NfQworICAgI3VuZGVmICBCTl9GQVNUX01QX0lOVk1PRF9DCisKKyAgIC8qIFRvIHNhZmVseSB1bmRlZmluZSB0aGVzZSB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgeW91ciBSU0Ega2V5IHdvbid0IGV4Y2VlZCB0aGUgQ29tYmEgdGhyZXNob2xkCisgICAgKiB3aGljaCBpcyByb3VnaGx5IDI1NSBkaWdpdHMgWzcxNDAgYml0cyBmb3IgMzItYml0IG1hY2hpbmVzLCAxNTMwMCBiaXRzIGZvciA2NC1iaXQgbWFjaGluZXNdCisgICAgKiB3aGljaCBtZWFucyByb3VnaGx5IHNwZWFraW5nIHlvdSBjYW4gaGFuZGxlIHVwIHRvIDI1MzYtYml0IFJTQSBrZXlzIHdpdGggdGhlc2UgZGVmaW5lZCB3aXRob3V0CisgICAgKiB0cm91YmxlLgorICAgICovCisgICAjdW5kZWYgIEJOX1NfTVBfTVVMX0RJR1NfQworICAgI3VuZGVmICBCTl9TX01QX1NRUl9DCisgICAjdW5kZWYgIEJOX01QX01PTlRHT01FUllfUkVEVUNFX0MKKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3BrY3MxMi5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3BrY3MxMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOGIzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvcGtjczEyLmgKQEAgLTAsMCArMSw3NCBAQAorLyogcGtjczEyLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKyNpZm5kZWYgV09MRl9DUllQVF9QS0NTMTJfSAorI2RlZmluZSBXT0xGX0NSWVBUX1BLQ1MxMl9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZuZGVmIFdPTEZTU0xfVFlQRVNfREVGSU5FRCAvKiBkbyBub3QgcmVkZWNsYXJlIGZyb20gc3NsLmggKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBXQ19QS0NTMTIgV0NfUEtDUzEyOworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFdDX0RlckNlcnRMaXN0IHsgLyogZGVyZWZlcmVuY2VkIGluIHNzbC5jICovCisgICAgYnl0ZSogYnVmZmVyOworICAgIHdvcmQzMiBidWZmZXJTejsKKyAgICBzdHJ1Y3QgV0NfRGVyQ2VydExpc3QqIG5leHQ7Cit9IFdDX0RlckNlcnRMaXN0OworCisvKiBkZWZhdWx0IHZhbHVlcyBmb3IgY3JlYXRpbmcgUEtDUzEyICovCitlbnVtIHsKKyAgICBXQ19QS0NTMTJfSVRUX0RFRkFVTFQgPSAyMDQ4LAorICAgIFdDX1BLQ1MxMl9WRVJTSU9OX0RFRkFVTFQgPSAzLAorICAgIFdDX1BLQ1MxMl9NQUNfREVGQVVMVCA9IDEsCit9OworCitXT0xGU1NMX0FQSSBXQ19QS0NTMTIqIHdjX1BLQ1MxMl9uZXcodm9pZCk7CitXT0xGU1NMX0FQSSB2b2lkIHdjX1BLQ1MxMl9mcmVlKFdDX1BLQ1MxMiogcGtjczEyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19kMmlfUEtDUzEyKGNvbnN0IGJ5dGUqIGRlciwgd29yZDMyIGRlclN6LCBXQ19QS0NTMTIqIHBrY3MxMik7CitXT0xGU1NMX0FQSSBpbnQgd2NfaTJkX1BLQ1MxMihXQ19QS0NTMTIqIHBrY3MxMiwgYnl0ZSoqIGRlciwgaW50KiBkZXJTeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfUEtDUzEyX3BhcnNlKFdDX1BLQ1MxMiogcGtjczEyLCBjb25zdCBjaGFyKiBwc3csCisgICAgICAgIGJ5dGUqKiBwa2V5LCB3b3JkMzIqIHBrZXlTeiwgYnl0ZSoqIGNlcnQsIHdvcmQzMiogY2VydFN6LAorICAgICAgICBXQ19EZXJDZXJ0TGlzdCoqIGNhKTsKK1dPTEZTU0xfTE9DQUwgaW50IHdjX1BLQ1MxMl92ZXJpZnlfZXgoV0NfUEtDUzEyKiBwa2NzMTIsCisgICAgICAgIGNvbnN0IGJ5dGUqIHBzdywgd29yZDMyIHBzd1N6KTsKK1dPTEZTU0xfQVBJIFdDX1BLQ1MxMiogd2NfUEtDUzEyX2NyZWF0ZShjaGFyKiBwYXNzLCB3b3JkMzIgcGFzc1N6LAorICAgICAgICBjaGFyKiBuYW1lLCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwgYnl0ZSogY2VydCwgd29yZDMyIGNlcnRTeiwKKyAgICAgICAgV0NfRGVyQ2VydExpc3QqIGNhLCBpbnQgbmlkS2V5LCBpbnQgbmlkQ2VydCwgaW50IGl0ZXIsIGludCBtYWNJdGVyLAorICAgICAgICBpbnQga2V5VHlwZSwgdm9pZCogaGVhcCk7CisKKworV09MRlNTTF9MT0NBTCBpbnQgd2NfUEtDUzEyX1NldEhlYXAoV0NfUEtDUzEyKiBwa2NzMTIsIHZvaWQqIGhlYXApOworV09MRlNTTF9MT0NBTCB2b2lkKiB3Y19QS0NTMTJfR2V0SGVhcChXQ19QS0NTMTIqIHBrY3MxMik7CisKK1dPTEZTU0xfTE9DQUwgdm9pZCB3Y19GcmVlQ2VydExpc3QoV0NfRGVyQ2VydExpc3QqIGxpc3QsIHZvaWQqIGhlYXApOworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogV09MRl9DUllQVF9QS0NTMTJfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvcGtjczcuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9wa2NzNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjRlODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvcGtjczcuaApAQCAtMCwwICsxLDUwMSBAQAorLyogcGtjczcuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L3BrY3M3LmgKKyovCisKKyNpZm5kZWYgV09MRl9DUllQVF9QS0NTN19ICisjZGVmaW5lIFdPTEZfQ1JZUFRfUEtDUzdfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIEhBVkVfUEtDUzcKKworI2lmbmRlZiBOT19BU04KKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXNuLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc25fcHVibGljLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcmFuZG9tLmg+CisjaWZuZGVmIE5PX0FFUworICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hZXMuaD4KKyNlbmRpZgorI2lmbmRlZiBOT19ERVMzCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2RlczMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3djX2VuY3J5cHQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogTWF4IG51bWJlciBvZiBjZXJ0aWZpY2F0ZXMgdGhhdCBQS0NTNyBzdHJ1Y3R1cmUgY2FuIHBhcnNlICovCisjaWZuZGVmIE1BWF9QS0NTN19DRVJUUworI2lmZGVmIE9QRU5TU0xfQUxMCisgICAgI2RlZmluZSBNQVhfUEtDUzdfQ0VSVFMgMTUKKyNlbHNlCisgICAgI2RlZmluZSBNQVhfUEtDUzdfQ0VSVFMgNAorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBNQVhfT1JJX1RZUEVfU1oKKyAgICAjZGVmaW5lIE1BWF9PUklfVFlQRV9TWiAgTUFYX09JRF9TWgorI2VuZGlmCisjaWZuZGVmIE1BWF9PUklfVkFMVUVfU1oKKyAgICAjZGVmaW5lIE1BWF9PUklfVkFMVUVfU1ogNTEyCisjZW5kaWYKKworI2lmbmRlZiBNQVhfU0lHTkVEX0FUVFJJQlNfU1oKKyAgICAjZGVmaW5lIE1BWF9TSUdORURfQVRUUklCU19TWiA3CisjZW5kaWYKKworI2lmbmRlZiBNQVhfQVVUSF9BVFRSSUJTX1NaCisgICAgI2RlZmluZSBNQVhfQVVUSF9BVFRSSUJTX1NaIDcKKyNlbmRpZgorCisjaWZuZGVmIE1BWF9VTkFVVEhfQVRUUklCU19TWgorICAgICNkZWZpbmUgTUFYX1VOQVVUSF9BVFRSSUJTX1NaIDcKKyNlbmRpZgorCisvKiBQS0NTIzcgY29udGVudCB0eXBlcywgcmVmIFJGQyAyMzE1IChTZWN0aW9uIDE0KSAqLworZW51bSBQS0NTN19UWVBFUyB7CisgICAgUEtDUzdfTVNHICAgICAgICAgICAgICAgICA9IDY1MCwgIC8qIDEuMi44NDAuMTEzNTQ5LjEuNyAgICovCisgICAgREFUQSAgICAgICAgICAgICAgICAgICAgICA9IDY1MSwgIC8qIDEuMi44NDAuMTEzNTQ5LjEuNy4xICovCisgICAgU0lHTkVEX0RBVEEgICAgICAgICAgICAgICA9IDY1MiwgIC8qIDEuMi44NDAuMTEzNTQ5LjEuNy4yICovCisgICAgRU5WRUxPUEVEX0RBVEEgICAgICAgICAgICA9IDY1MywgIC8qIDEuMi44NDAuMTEzNTQ5LjEuNy4zICovCisgICAgU0lHTkVEX0FORF9FTlZFTE9QRURfREFUQSA9IDY1NCwgIC8qIDEuMi44NDAuMTEzNTQ5LjEuNy40ICovCisgICAgRElHRVNURURfREFUQSAgICAgICAgICAgICA9IDY1NSwgIC8qIDEuMi44NDAuMTEzNTQ5LjEuNy41ICovCisgICAgRU5DUllQVEVEX0RBVEEgICAgICAgICAgICA9IDY1NiwgIC8qIDEuMi44NDAuMTEzNTQ5LjEuNy42ICovCisjaWYgZGVmaW5lZChIQVZFX0xJQlopICYmICFkZWZpbmVkKE5PX1BLQ1M3X0NPTVBSRVNTRURfREFUQSkKKyAgICBDT01QUkVTU0VEX0RBVEEgICAgICAgICAgID0gNjc4LCAgLyogMS4yLjg0MC4xMTM1NDkuMS45LjE2LjEuOSwgIFJGQyAzMjc0ICovCisjZW5kaWYKKyAgICBGSVJNV0FSRV9QS0dfREFUQSAgICAgICAgID0gNjg1LCAgLyogMS4yLjg0MC4xMTM1NDkuMS45LjE2LjEuMTYsIFJGQyA0MTA4ICovCisgICAgQVVUSF9FTlZFTE9QRURfREFUQSAgICAgICA9IDY5MiAgIC8qIDEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjIzLCBSRkMgNTA4MyAqLworfTsKKworZW51bSBQS0NTN19TVEFURSB7CisgICAgV0NfUEtDUzdfU1RBUlQgPSAwLAorCisgICAgLyogZGVjb2RlIGVuY3J5cHRlZCAqLworICAgIFdDX1BLQ1M3X1NUQUdFMiwKKyAgICBXQ19QS0NTN19TVEFHRTMsCisgICAgV0NfUEtDUzdfU1RBR0U0LAorICAgIFdDX1BLQ1M3X1NUQUdFNSwKKyAgICBXQ19QS0NTN19TVEFHRTYsCisKKyAgICBXQ19QS0NTN19WRVJJRllfU1RBR0UyLAorICAgIFdDX1BLQ1M3X1ZFUklGWV9TVEFHRTMsCisgICAgV0NfUEtDUzdfVkVSSUZZX1NUQUdFNCwKKyAgICBXQ19QS0NTN19WRVJJRllfU1RBR0U1LAorICAgIFdDX1BLQ1M3X1ZFUklGWV9TVEFHRTYsCisKKyAgICAvKiBwYXJzZSBpbmZvIHNldCAqLworICAgIFdDX1BLQ1M3X0lORk9TRVRfU1RBUlQsCisgICAgV0NfUEtDUzdfSU5GT1NFVF9CRVIsCisgICAgV0NfUEtDUzdfSU5GT1NFVF9TVEFHRTEsCisgICAgV0NfUEtDUzdfSU5GT1NFVF9TVEFHRTIsCisgICAgV0NfUEtDUzdfSU5GT1NFVF9FTkQsCisKKyAgICAvKiBkZWNvZGUgZW52ZWxvcGVkIGRhdGEgKi8KKyAgICBXQ19QS0NTN19FTlZfMiwKKyAgICBXQ19QS0NTN19FTlZfMywKKyAgICBXQ19QS0NTN19FTlZfNCwKKyAgICBXQ19QS0NTN19FTlZfNSwKKworICAgIC8qIGRlY29kZSBhdXRoIGVudmVsb3BlZCAqLworICAgIFdDX1BLQ1M3X0FVVEhFTlZfMiwKKyAgICBXQ19QS0NTN19BVVRIRU5WXzMsCisgICAgV0NfUEtDUzdfQVVUSEVOVl80LAorICAgIFdDX1BLQ1M3X0FVVEhFTlZfNSwKKyAgICBXQ19QS0NTN19BVVRIRU5WXzYsCisgICAgV0NfUEtDUzdfQVVUSEVOVl9BVFJCLAorICAgIFdDX1BLQ1M3X0FVVEhFTlZfQVRSQkVORCwKKyAgICBXQ19QS0NTN19BVVRIRU5WXzcsCisKKyAgICAvKiBkZWNyeXB0aW9uIHN0YXRlIHR5cGVzICovCisgICAgV0NfUEtDUzdfREVDUllQVF9LVFJJLAorICAgIFdDX1BLQ1M3X0RFQ1JZUFRfS1RSSV8yLAorICAgIFdDX1BLQ1M3X0RFQ1JZUFRfS1RSSV8zLAorCisKKyAgICBXQ19QS0NTN19ERUNSWVBUX0tBUkksCisgICAgV0NfUEtDUzdfREVDUllQVF9LRUtSSSwKKyAgICBXQ19QS0NTN19ERUNSWVBUX1BXUkksCisgICAgV0NfUEtDUzdfREVDUllQVF9PUkksCisKKyAgICBXQ19QS0NTN19ERUNSWVBUX0RPTkUsCisKK307CisKK2VudW0gUGtjczdfTWlzYyB7CisgICAgUEtDUzdfTk9OQ0VfU1ogICAgICAgID0gMTYsCisgICAgTUFYX0VOQ1JZUFRFRF9LRVlfU1ogID0gNTEyLCAgICAvKiBtYXggZW5jLiBrZXkgc2l6ZSwgUlNBIDw9IDQwOTYgKi8KKyAgICBNQVhfQ09OVEVOVF9LRVlfTEVOICAgPSAzMiwgICAgIC8qIGhpZ2hlc3QgY3VycmVudCBjaXBoZXIgaXMgQUVTLTI1Ni1DQkMgKi8KKyAgICBNQVhfQ09OVEVOVF9JVl9TSVpFICAgPSAxNiwgICAgIC8qIGhpZ2hlc3QgY3VycmVudCBpcyBBRVMxMjggKi8KKyNpZm5kZWYgTk9fQUVTCisgICAgTUFYX0NPTlRFTlRfQkxPQ0tfTEVOID0gQUVTX0JMT0NLX1NJWkUsCisjZWxzZQorICAgIE1BWF9DT05URU5UX0JMT0NLX0xFTiA9IERFU19CTE9DS19TSVpFLAorI2VuZGlmCisgICAgTUFYX1JFQ0lQX1NaICAgICAgICAgID0gTUFYX1ZFUlNJT05fU1ogKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9TRVFfU1ogKyBBU05fTkFNRV9NQVggKyBNQVhfU05fU1ogKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9TRVFfU1ogKyBNQVhfQUxHT19TWiArIDEgKyBNQVhfRU5DUllQVEVEX0tFWV9TWiwKK307CisKK2VudW0gQ21zX09wdGlvbnMgeworICAgIENNU19TS0lEID0gMSwKKyAgICBDTVNfSVNTVUVSX0FORF9TRVJJQUxfTlVNQkVSID0gMiwKK307CisjZGVmaW5lIERFR0VORVJBVEVfU0lEIDMKKworLyogQ01TL1BLQ1MjNyBSZWNpcGllbnRJbmZvIHR5cGVzLCBSRkMgNTY1MiwgU2VjdGlvbiA2LjIgKi8KK2VudW0gUGtjczdfUmVjaXBpZW50SW5mb19UeXBlcyB7CisgICAgUEtDUzdfS1RSSSAgPSAwLAorICAgIFBLQ1M3X0tBUkkgID0gMSwKKyAgICBQS0NTN19LRUtSSSA9IDIsCisgICAgUEtDUzdfUFdSSSAgPSAzLAorICAgIFBLQ1M3X09SSSAgID0gNAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgUEtDUzdBdHRyaWIgeworICAgIGNvbnN0IGJ5dGUqIG9pZDsKKyAgICB3b3JkMzIgb2lkU3o7CisgICAgY29uc3QgYnl0ZSogdmFsdWU7CisgICAgd29yZDMyIHZhbHVlU3o7Cit9IFBLQ1M3QXR0cmliOworCisKK3R5cGVkZWYgc3RydWN0IFBLQ1M3RGVjb2RlZEF0dHJpYiB7CisgICAgc3RydWN0IFBLQ1M3RGVjb2RlZEF0dHJpYiogbmV4dDsKKyAgICBieXRlKiBvaWQ7CisgICAgd29yZDMyIG9pZFN6OworICAgIGJ5dGUqIHZhbHVlOworICAgIHdvcmQzMiB2YWx1ZVN6OworfSBQS0NTN0RlY29kZWRBdHRyaWI7CisKK3R5cGVkZWYgc3RydWN0IFBLQ1M3U3RhdGUgUEtDUzdTdGF0ZTsKK3R5cGVkZWYgc3RydWN0IFBrY3M3Q2VydCBQa2NzN0NlcnQ7Cit0eXBlZGVmIHN0cnVjdCBQa2NzN0VuY29kZWRSZWNpcCBQa2NzN0VuY29kZWRSZWNpcDsKK3R5cGVkZWYgc3RydWN0IFBLQ1M3IFBLQ1M3OwordHlwZWRlZiBzdHJ1Y3QgUEtDUzcgUEtDUzdfU0lHTkVEOwordHlwZWRlZiBzdHJ1Y3QgUEtDUzdTaWduZXJJbmZvIFBLQ1M3U2lnbmVySW5mbzsKKworLyogT3RoZXJSZWNpcGllbnRJbmZvIGRlY3J5cHQgY2FsbGJhY2sgcHJvdG90eXBlICovCit0eXBlZGVmIGludCAoKkNhbGxiYWNrT3JpRGVjcnlwdCkoUEtDUzcqIHBrY3M3LCBieXRlKiBvcmlUeXBlLCB3b3JkMzIgb3JpVHlwZVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG9yaVZhbHVlLCB3b3JkMzIgb3JpVmFsdWVTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBkZWNyeXB0ZWRLZXksIHdvcmQzMiogZGVjcnlwdGVkS2V5U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY3R4KTsKK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tPcmlFbmNyeXB0KShQS0NTNyogcGtjczcsIGJ5dGUqIGNlaywgd29yZDMyIGNla1N6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG9yaVR5cGUsIHdvcmQzMiogb3JpVHlwZVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG9yaVZhbHVlLCB3b3JkMzIqIG9yaVZhbHVlU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY3R4KTsKK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tEZWNyeXB0Q29udGVudCkoUEtDUzcqIHBrY3M3LCBpbnQgZW5jcnlwdE9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogaXYsIGludCBpdlN6LCBieXRlKiBhYWQsIHdvcmQzMiBhYWRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogYXV0aFRhZywgd29yZDMyIGF1dGhUYWdTeiwgYnl0ZSogaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpblN6LCBieXRlKiBvdXQsIHZvaWQqIGN0eCk7Cit0eXBlZGVmIGludCAoKkNhbGxiYWNrV3JhcENFSykoUEtDUzcqIHBrY3M3LCBieXRlKiBjZWssIHdvcmQzMiBjZWtTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBrZXlJZCwgd29yZDMyIGtleUlkU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogb3JpZ2luS2V5LCB3b3JkMzIgb3JpZ2luS2V5U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogb3V0LCB3b3JkMzIgb3V0U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleVdyYXBBbGdvLCBpbnQgdHlwZSwgaW50IGRpcik7CisKKyNpZiBkZWZpbmVkKEhBVkVfUEtDUzdfUlNBX1JBV19TSUdOX0NBTExCQUNLKSAmJiAhZGVmaW5lZChOT19SU0EpCisvKiBSU0Egc2lnbiByYXcgZGlnZXN0IGNhbGxiYWNrLCB1c2VyIGJ1aWxkcyBEaWdlc3RJbmZvICovCit0eXBlZGVmIGludCAoKkNhbGxiYWNrUnNhU2lnblJhd0RpZ2VzdCkoUEtDUzcqIHBrY3M3LCBieXRlKiBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBkaWdlc3RTeiwgYnl0ZSogb3V0LCB3b3JkMzIgb3V0U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIHByaXZhdGVLZXksIHdvcmQzMiBwcml2YXRlS2V5U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXZJZCwgaW50IGhhc2hPSUQpOworI2VuZGlmCisKKy8qIFB1YmxpYyBTdHJ1Y3R1cmUgV2FybmluZzoKKyAqIEV4aXN0aW5nIG1lbWJlcnMgbXVzdCBub3QgYmUgY2hhbmdlZCB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSEKKyAqLworc3RydWN0IFBLQ1M3IHsKKyAgICBXQ19STkcqIHJuZzsKKyAgICBQS0NTN0F0dHJpYiogc2lnbmVkQXR0cmliczsKKyAgICBieXRlKiAgY29udGVudDsgICAgICAgICAgICAgICAvKiBpbm5lciBjb250ZW50LCBub3Qgb3duZXIgICAgICAgICAgICAgKi8KKyAgICBieXRlKiAgY29udGVudER5bmFtaWM7ICAgICAgICAvKiBjb250ZW50IGlmIGNvbnN0cnVjdGVkIE9DVEVUX1NUUklORyAgKi8KKyAgICBieXRlKiAgc2luZ2xlQ2VydDsgICAgICAgICAgICAvKiByZWNpcGllbnQgY2VydCwgREVSLCBub3Qgb3duZXIgICAgICAgKi8KKyAgICBjb25zdCBieXRlKiBpc3N1ZXI7ICAgICAgICAgICAvKiBpc3N1ZXIgbmFtZSBvZiBzaW5nbGVDZXJ0ICAgICAgICAgICAgKi8KKyAgICBieXRlKiAgcHJpdmF0ZUtleTsgICAgICAgICAgICAvKiBwcml2YXRlIGtleSwgREVSLCBub3Qgb3duZXIgICAgICAgICAgKi8KKyAgICB2b2lkKiAgaGVhcDsgICAgICAgICAgICAgICAgICAvKiBoZWFwIGhpbnQgZm9yIGR5bmFtaWMgbWVtb3J5ICAgICAgICAgKi8KKyNpZmRlZiBBU05fQkVSX1RPX0RFUgorICAgIGJ5dGUqICBkZXI7ICAgICAgICAgICAgICAgICAgIC8qIERFUiBlbmNvZGVkIHZlcnNpb24gb2YgbWVzc2FnZSAgICAgICAqLworICAgIHdvcmQzMiBkZXJTejsKKyNlbmRpZgorICAgIGJ5dGUqICBjZXJ0W01BWF9QS0NTN19DRVJUU107CisKKyAgICAvKiBFbmNyeXB0ZWQtZGF0YSBDb250ZW50IFR5cGUgKi8KKyAgICBieXRlKiAgICAgICAgZW5jcnlwdGlvbktleTsgICAgICAgICAvKiBibG9jayBjaXBoZXIgZW5jcnlwdGlvbiBrZXkgKi8KKyAgICBQS0NTN0F0dHJpYiogdW5wcm90ZWN0ZWRBdHRyaWJzOyAgICAvKiBvcHRpb25hbCAqLworICAgIFBLQ1M3RGVjb2RlZEF0dHJpYiogZGVjb2RlZEF0dHJpYjsgIC8qIGxpbmtlZCBsaXN0IG9mIGRlY29kZWQgYXR0cmlicyAqLworCisgICAgLyogRW52ZWxvcGVkLWRhdGEgb3B0aW9uYWwgdWttLCBub3Qgb3duZXIgKi8KKyAgICBieXRlKiAgdWttOworICAgIHdvcmQzMiB1a21TejsKKworICAgIHdvcmQzMiBlbmNyeXB0aW9uS2V5U3o7ICAgICAgIC8qIHNpemUgb2Yga2V5IGJ1ZmZlciwgYnl0ZXMgKi8KKyAgICB3b3JkMzIgdW5wcm90ZWN0ZWRBdHRyaWJzU3o7CisgICAgd29yZDMyIGNvbnRlbnRTejsgICAgICAgICAgICAgLyogY29udGVudCBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgd29yZDMyIHNpbmdsZUNlcnRTejsgICAgICAgICAgLyogc2l6ZSBvZiByZWNpcGllbnQgY2VydCBidWZmZXIsIGJ5dGVzICovCisgICAgd29yZDMyIGlzc3VlclN6OyAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGlzc3VlciBuYW1lICAgICAgICAgICAgICAgICovCisgICAgd29yZDMyIGlzc3VlclNuU3o7ICAgICAgICAgICAgLyogbGVuZ3RoIG9mIHNlcmlhbCBudW1iZXIgICAgICAgICAgICAgICovCisKKyAgICB3b3JkMzIgcHVibGljS2V5U3o7CisgICAgd29yZDMyIHB1YmxpY0tleU9JRDsgICAgICAgICAgLyoga2V5IE9JRCAoUlNBaywgRUNEU0FrLCBldGMpICovCisgICAgd29yZDMyIHByaXZhdGVLZXlTejsgICAgICAgICAgLyogc2l6ZSBvZiBwcml2YXRlIGtleSBidWZmZXIsIGJ5dGVzICAgICovCisgICAgd29yZDMyIHNpZ25lZEF0dHJpYnNTejsKKyAgICBpbnQgY29udGVudE9JRDsgICAgICAgICAgICAgICAvKiBQS0NTIzcgY29udGVudCB0eXBlIE9JRCBzdW0gICAgICAgICAgKi8KKyAgICBpbnQgaGFzaE9JRDsKKyAgICBpbnQgZW5jcnlwdE9JRDsgICAgICAgICAgICAgICAvKiBrZXkgZW5jcnlwdGlvbiBhbGdvcml0aG0gT0lEICAgICAgICAgKi8KKyAgICBpbnQga2V5V3JhcE9JRDsgICAgICAgICAgICAgICAvKiBrZXkgd3JhcCBhbGdvcml0aG0gT0lEICAgICAgICAgICAgICAgKi8KKyAgICBpbnQga2V5QWdyZWVPSUQ7ICAgICAgICAgICAgICAvKiBrZXkgYWdyZWVtZW50IGFsZ29yaXRobSBPSUQgICAgICAgICAgKi8KKyAgICBpbnQgZGV2SWQ7ICAgICAgICAgICAgICAgICAgICAvKiBkZXZpY2UgSUQgZm9yIEhXIGJhc2VkIHByaXZhdGUga2V5ICAgKi8KKyAgICBieXRlIGlzc3Vlckhhc2hbS0VZSURfU0laRV07ICAvKiBoYXNoIG9mIGFsbCBhbHQgTmFtZXMgICAgICAgICAgICAgICAgKi8KKyAgICBieXRlIGlzc3VlclNuW01BWF9TTl9TWl07ICAgICAvKiBzaW5nbGVDZXJ0J3Mgc2VyaWFsIG51bWJlciAgICAgICAgICAgKi8KKyAgICBieXRlIHB1YmxpY0tleVtNQVhfUlNBX0lOVF9TWiArIE1BWF9SU0FfRV9TWl07IC8qIE1BWCBSU0Ega2V5IHNpemUgKG0gKyBlKSovCisgICAgd29yZDMyIGNlcnRTeltNQVhfUEtDUzdfQ0VSVFNdOworCisgICAgIC8qIGZsYWdzIC0gdXAgdG8gMTYtYml0cyAqLworICAgIHdvcmQxNiBpc0R5bmFtaWM6MTsKKyAgICB3b3JkMTYgbm9EZWdlbmVyYXRlOjE7IC8qIGFsbG93IGRlZ2VuZXJhdGUgY2FzZSBpbiB2ZXJpZnkgZnVuY3Rpb24gKi8KKyAgICB3b3JkMTYgZGV0YWNoZWQ6MTsgICAgIC8qIGdlbmVyYXRlIGRldGFjaGVkIFNpZ25lZERhdGEgc2lnbmF0dXJlIGJ1bmRsZXMgKi8KKworICAgIGJ5dGUgY29udGVudFR5cGVbTUFYX09JRF9TWl07IC8qIGN1c3RvbSBjb250ZW50VHlwZSBieXRlIGFycmF5ICovCisgICAgd29yZDMyIGNvbnRlbnRUeXBlU3o7ICAgICAgICAgLyogc2l6ZSBvZiBjb250ZW50VHlwZSwgYnl0ZXMgKi8KKworICAgIGludCBzaWRUeXBlOyAgICAgICAgICAgICAgICAgIC8qIFNpZ25lcklkZW50aWZpZXIgdHlwZSB0byB1c2UsIG9mIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQa2NzN19TaWduZXJJZGVudGlmaWVyX1R5cGVzLCBkZWZhdWx0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lEX0lTU1VFUl9BTkRfU0VSSUFMX05VTUJFUiAqLworICAgIGJ5dGUgaXNzdWVyU3ViaktleUlkW0tFWUlEX1NJWkVdOyAgLyogU3ViamVjdEtleUlkZW50aWZpZXIgb2Ygc2luZ2xlQ2VydCAgKi8KKyAgICBQa2NzN0NlcnQqIGNlcnRMaXN0OyAgICAgICAgICAvKiBjZXJ0aWZpY2F0ZXMgbGlzdCBmb3IgU2lnbmVkRGF0YSBzZXQgKi8KKyAgICBQa2NzN0VuY29kZWRSZWNpcCogcmVjaXBMaXN0OyAvKiByZWNpcGllbnRzIGxpc3QgKi8KKyAgICBieXRlKiBjZWs7ICAgICAgICAgICAgICAgICAgICAvKiBjb250ZW50IGVuY3J5cHRpb24ga2V5LCByYW5kb20sIGR5bmFtaWMgKi8KKyAgICB3b3JkMzIgY2VrU3o7ICAgICAgICAgICAgICAgICAvKiBzaXplIG9mIGNlaywgYnl0ZXMgKi8KKyAgICBieXRlKiBwYXNzOyAgICAgICAgICAgICAgICAgICAvKiBwYXNzd29yZCwgZm9yIFBXUkkgZGVjcnlwdGlvbiAqLworICAgIHdvcmQzMiBwYXNzU3o7ICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgcGFzcywgYnl0ZXMgKi8KKyAgICBpbnQga2VrRW5jcnlwdE9JRDsgICAgICAgICAgICAvKiBLRUsgZW5jcnlwdGlvbiBhbGdvcml0aG0gT0lEICovCisKKyAgICBDYWxsYmFja09yaUVuY3J5cHQgb3JpRW5jcnlwdENiOyAgLyogT1JJIGVuY3J5cHQgY2FsbGJhY2sgKi8KKyAgICBDYWxsYmFja09yaURlY3J5cHQgb3JpRGVjcnlwdENiOyAgLyogT1JJIGRlY3J5cHQgY2FsbGJhY2sgKi8KKyAgICB2b2lkKiBvcmlFbmNyeXB0Q3R4OyAgICAgICAgICAgICAgLyogT1JJIGVuY3J5cHQgdXNlciBjb250ZXh0IHB0ciAqLworICAgIHZvaWQqIG9yaURlY3J5cHRDdHg7ICAgICAgICAgICAgICAvKiBPUkkgZGVjcnlwdCB1c2VyIGNvbnRleHQgcHRyICovCisKKyAgICBQS0NTN0F0dHJpYiogYXV0aEF0dHJpYnM7ICAgICAvKiBhdXRoZW50aWNhdGVkIGF0dHJpYnMgKi8KKyAgICB3b3JkMzIgYXV0aEF0dHJpYnNTejsKKyAgICBQS0NTN0F0dHJpYiogdW5hdXRoQXR0cmliczsgICAvKiB1bmF1dGhlbnRpY2F0ZWQgYXR0cmlicyAqLworICAgIHdvcmQzMiB1bmF1dGhBdHRyaWJzU3o7CisKKyNpZm5kZWYgTk9fUEtDUzdfU1RSRUFNCisgICAgUEtDUzdTdGF0ZSogc3RyZWFtOworI2VuZGlmCisgICAgd29yZDMyIHN0YXRlOworCisgICAgd29yZDE2IHNraXBEZWZhdWx0U2lnbmVkQXR0cmliczoxOyAvKiBza2lwIGFkZGluZyBkZWZhdWx0IHNpZ25lZCBhdHRyaWJzICovCisKKyAgICBieXRlIHZlcnNpb247IC8qIDEgZm9yIFJGQyAyMzE1IGFuZCAzIGZvciBSRkMgNDEwOCAqLworICAgIFBLQ1M3U2lnbmVySW5mbyogc2lnbmVySW5mbzsKKyAgICBDYWxsYmFja0RlY3J5cHRDb250ZW50IGRlY3J5cHRpb25DYjsKKyAgICBDYWxsYmFja1dyYXBDRUsgICAgICAgIHdyYXBDRUtDYjsKKyAgICB2b2lkKiAgICAgICAgICAgIGRlY3J5cHRpb25DdHg7CisKKyAgICBieXRlKiBzaWduYXR1cmU7CisgICAgYnl0ZSogcGxhaW5EaWdlc3Q7CisgICAgYnl0ZSogcGtjczdEaWdlc3Q7CisgICAgd29yZDMyIHNpZ25hdHVyZVN6OworICAgIHdvcmQzMiBwbGFpbkRpZ2VzdFN6OworICAgIHdvcmQzMiBwa2NzN0RpZ2VzdFN6OworCisjaWYgZGVmaW5lZChIQVZFX1BLQ1M3X1JTQV9SQVdfU0lHTl9DQUxMQkFDSykgJiYgIWRlZmluZWQoTk9fUlNBKQorICAgIENhbGxiYWNrUnNhU2lnblJhd0RpZ2VzdCByc2FTaWduUmF3RGlnZXN0Q2I7CisjZW5kaWYKKworICAgIC8qIHVzZWQgYnkgRGVjb2RlRW52ZWxvcGVkRGF0YSB3aXRoIG11bHRpcGxlIGVuY3J5cHRlZCBjb250ZW50cyAqLworICAgIGJ5dGUqICBjYWNoZWRFbmNyeXB0ZWRDb250ZW50OworICAgIHdvcmQzMiBjYWNoZWRFbmNyeXB0ZWRDb250ZW50U3o7CisgICAgLyogISEgTkVXIERBVEEgTUVNQkVSUyBNVVNUIEJFIEFEREVEIEFUIEVORCAhISAqLworfTsKKworV09MRlNTTF9BUEkgUEtDUzcqIHdjX1BLQ1M3X05ldyh2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19Jbml0KFBLQ1M3KiBwa2NzNywgdm9pZCogaGVhcCwgaW50IGRldklkKTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfSW5pdFdpdGhDZXJ0KFBLQ1M3KiBwa2NzNywgYnl0ZSogZGVyLCB3b3JkMzIgZGVyU3opOworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19BZGRDZXJ0aWZpY2F0ZShQS0NTNyogcGtjczcsIGJ5dGUqIGRlciwgd29yZDMyIGRlclN6KTsKK1dPTEZTU0xfQVBJIHZvaWQgd2NfUEtDUzdfRnJlZShQS0NTNyogcGtjczcpOworCitXT0xGU1NMX0FQSSBpbnQgd2NfUEtDUzdfR2V0QXR0cmlidXRlVmFsdWUoUEtDUzcqIHBrY3M3LCBjb25zdCBieXRlKiBvaWQsCisgICAgICAgIHdvcmQzMiBvaWRTeiwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dFN6KTsKKworV09MRlNTTF9BUEkgaW50IHdjX1BLQ1M3X1NldFNpZ25lcklkZW50aWZpZXJUeXBlKFBLQ1M3KiBwa2NzNywgaW50IHR5cGUpOworV09MRlNTTF9BUEkgaW50IHdjX1BLQ1M3X1NldENvbnRlbnRUeXBlKFBLQ1M3KiBwa2NzNywgYnl0ZSogY29udGVudFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19QS0NTN19HZXRQYWRTaXplKHdvcmQzMiBpbnB1dFN6LCB3b3JkMzIgYmxvY2tTeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfUEtDUzdfUGFkRGF0YShieXRlKiBpbiwgd29yZDMyIGluU3osIGJ5dGUqIG91dCwgd29yZDMyIG91dFN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGJsb2NrU3opOworCisvKiBDTVMvUEtDUyM3IERhdGEgKi8KK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfRW5jb2RlRGF0YShQS0NTNyogcGtjczcsIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBvdXRwdXRTeik7CisKKy8qIENNUy9QS0NTIzcgU2lnbmVkRGF0YSAqLworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19TZXREZXRhY2hlZChQS0NTNyogcGtjczcsIHdvcmQxNiBmbGFnKTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfTm9EZWZhdWx0U2lnbmVkQXR0cmlicyhQS0NTNyogcGtjczcpOworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19FbmNvZGVTaWduZWREYXRhKFBLQ1M3KiBwa2NzNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG91dHB1dCwgd29yZDMyIG91dHB1dFN6KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfRW5jb2RlU2lnbmVkRGF0YV9leChQS0NTNyogcGtjczcsIGNvbnN0IGJ5dGUqIGhhc2hCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgaGFzaFN6LCBieXRlKiBvdXRwdXRIZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyKiBvdXRwdXRIZWFkU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXRwdXRGb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyKiBvdXRwdXRGb290U3opOworV09MRlNTTF9BUEkgdm9pZCB3Y19QS0NTN19BbGxvd0RlZ2VuZXJhdGUoUEtDUzcqIHBrY3M3LCB3b3JkMTYgZmxhZyk7CitXT0xGU1NMX0FQSSBpbnQgIHdjX1BLQ1M3X1ZlcmlmeVNpZ25lZERhdGEoUEtDUzcqIHBrY3M3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogcGtpTXNnLCB3b3JkMzIgcGtpTXNnU3opOworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19WZXJpZnlTaWduZWREYXRhX2V4KFBLQ1M3KiBwa2NzNywgY29uc3QgYnl0ZSogaGFzaEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBoYXNoU3osIGJ5dGUqIHBraU1zZ0hlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgcGtpTXNnSGVhZFN6LCBieXRlKiBwa2lNc2dGb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHBraU1zZ0Zvb3RTeik7CisKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfR2V0U2lnbmVyU0lEKFBLQ1M3KiBwa2NzNywgYnl0ZSogb3V0LCB3b3JkMzIqIG91dFN6KTsKKworLyogQ01TIHNpbmdsZS1zaG90IEFQSSBmb3IgU2lnbmVkIEZpcm13YXJlUGtnRGF0YSAqLworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19FbmNvZGVTaWduZWRGUEQoUEtDUzcqIHBrY3M3LCBieXRlKiBwcml2YXRlS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHByaXZhdGVLZXlTeiwgaW50IHNpZ25PSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFzaE9JRCwgYnl0ZSogY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBjb250ZW50U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQS0NTN0F0dHJpYiogc2lnbmVkQXR0cmlicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBzaWduZWRBdHRyaWJzU3osIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBvdXRwdXRTeik7CisjaWZuZGVmIE5PX1BLQ1M3X0VOQ1JZUFRFRF9EQVRBCisvKiBDTVMgc2luZ2xlLXNob3QgQVBJIGZvciBTaWduZWQgRW5jcnlwdGVkIEZpcm13YXJlUGtnRGF0YSAqLworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19FbmNvZGVTaWduZWRFbmNyeXB0ZWRGUEQoUEtDUzcqIHBrY3M3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogZW5jcnlwdEtleSwgd29yZDMyIGVuY3J5cHRLZXlTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIHByaXZhdGVLZXksIHdvcmQzMiBwcml2YXRlS2V5U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5jcnlwdE9JRCwgaW50IHNpZ25PSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFzaE9JRCwgYnl0ZSogY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBjb250ZW50U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQS0NTN0F0dHJpYiogdW5wcm90ZWN0ZWRBdHRyaWJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHVucHJvdGVjdGVkQXR0cmlic1N6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEtDUzdBdHRyaWIqIHNpZ25lZEF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgc2lnbmVkQXR0cmlic1N6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogb3V0cHV0LCB3b3JkMzIgb3V0cHV0U3opOworI2VuZGlmIC8qIE5PX1BLQ1M3X0VOQ1JZUFRFRF9EQVRBICovCisjaWYgZGVmaW5lZChIQVZFX0xJQlopICYmICFkZWZpbmVkKE5PX1BLQ1M3X0NPTVBSRVNTRURfREFUQSkKKy8qIENNUyBzaW5nbGUtc2hvdCBBUEkgZm9yIFNpZ25lZCBDb21wcmVzc2VkIEZpcm13YXJlUGtnRGF0YSAqLworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19FbmNvZGVTaWduZWRDb21wcmVzc2VkRlBEKFBLQ1M3KiBwa2NzNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIHByaXZhdGVLZXksIHdvcmQzMiBwcml2YXRlS2V5U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2lnbk9JRCwgaW50IGhhc2hPSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBjb250ZW50LCB3b3JkMzIgY29udGVudFN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEtDUzdBdHRyaWIqIHNpZ25lZEF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgc2lnbmVkQXR0cmlic1N6LCBieXRlKiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgb3V0cHV0U3opOworCisjaWZuZGVmIE5PX1BLQ1M3X0VOQ1JZUFRFRF9EQVRBCisvKiBDTVMgc2luZ2xlLXNob3QgQVBJIGZvciBTaWduZWQgRW5jcnlwdGVkIENvbXByZXNzZWQgRmlybXdhcmVQa2dEYXRhICovCitXT0xGU1NMX0FQSSBpbnQgIHdjX1BLQ1M3X0VuY29kZVNpZ25lZEVuY3J5cHRlZENvbXByZXNzZWRGUEQoUEtDUzcqIHBrY3M3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogZW5jcnlwdEtleSwgd29yZDMyIGVuY3J5cHRLZXlTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIHByaXZhdGVLZXksIHdvcmQzMiBwcml2YXRlS2V5U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5jcnlwdE9JRCwgaW50IHNpZ25PSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFzaE9JRCwgYnl0ZSogY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBjb250ZW50U3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQS0NTN0F0dHJpYiogdW5wcm90ZWN0ZWRBdHRyaWJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHVucHJvdGVjdGVkQXR0cmlic1N6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEtDUzdBdHRyaWIqIHNpZ25lZEF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgc2lnbmVkQXR0cmlic1N6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogb3V0cHV0LCB3b3JkMzIgb3V0cHV0U3opOworI2VuZGlmIC8qICFOT19QS0NTN19FTkNSWVBURURfREFUQSAqLworI2VuZGlmIC8qIEhBVkVfTElCWiAmJiAhTk9fUEtDUzdfQ09NUFJFU1NFRF9EQVRBICovCisKKy8qIEVudmVsb3BlZERhdGEgYW5kIEF1dGhFbnZlbG9wZWREYXRhIFJlY2lwaWVudEluZm8gZnVuY3Rpb25zICovCitXT0xGU1NMX0FQSSBpbnQgIHdjX1BLQ1M3X0FkZFJlY2lwaWVudF9LVFJJKFBLQ1M3KiBwa2NzNywgY29uc3QgYnl0ZSogY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBjZXJ0U3osIGludCBvcHRpb25zKTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfQWRkUmVjaXBpZW50X0tBUkkoUEtDUzcqIHBrY3M3LCBjb25zdCBieXRlKiBjZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGNlcnRTeiwgaW50IGtleVdyYXBPSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5QWdyZWVPSUQsIGJ5dGUqIHVrbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiB1a21TeiwgaW50IG9wdGlvbnMpOworCitXT0xGU1NMX0FQSSBpbnQgIHdjX1BLQ1M3X1NldEtleShQS0NTNyogcGtjczcsIGJ5dGUqIGtleSwgd29yZDMyIGtleVN6KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfQWRkUmVjaXBpZW50X0tFS1JJKFBLQ1M3KiBwa2NzNywgaW50IGtleVdyYXBPSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBrZWssIHdvcmQzMiBrZWtTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIGtleUlELCB3b3JkMzIga2V5SWRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHRpbWVQdHIsIGJ5dGUqIG90aGVyT0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG90aGVyT0lEU3osIGJ5dGUqIG90aGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG90aGVyU3osIGludCBvcHRpb25zKTsKKworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19TZXRQYXNzd29yZChQS0NTNyogcGtjczcsIGJ5dGUqIHBhc3N3ZCwgd29yZDMyIHBMZW4pOworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19BZGRSZWNpcGllbnRfUFdSSShQS0NTNyogcGtjczcsIGJ5dGUqIHBhc3N3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBwTGVuLCBieXRlKiBzYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHNhbHRTeiwgaW50IGtkZk9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmZPSUQsIGludCBpdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtla0VuY3J5cHRPSUQsIGludCBvcHRpb25zKTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfU2V0T3JpRW5jcnlwdEN0eChQS0NTNyogcGtjczcsIHZvaWQqIGN0eCk7CitXT0xGU1NMX0FQSSBpbnQgIHdjX1BLQ1M3X1NldE9yaURlY3J5cHRDdHgoUEtDUzcqIHBrY3M3LCB2b2lkKiBjdHgpOworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19TZXRPcmlEZWNyeXB0Q2IoUEtDUzcqIHBrY3M3LCBDYWxsYmFja09yaURlY3J5cHQgY2IpOworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19BZGRSZWNpcGllbnRfT1JJKFBLQ1M3KiBwa2NzNywgQ2FsbGJhY2tPcmlFbmNyeXB0IGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25zKTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfU2V0V3JhcENFS0NiKFBLQ1M3KiBwa2NzNywKKyAgICAgICAgQ2FsbGJhY2tXcmFwQ0VLIHdyYXBDRUtDYik7CisKKyNpZiBkZWZpbmVkKEhBVkVfUEtDUzdfUlNBX1JBV19TSUdOX0NBTExCQUNLKSAmJiAhZGVmaW5lZChOT19SU0EpCitXT0xGU1NMX0FQSSBpbnQgIHdjX1BLQ1M3X1NldFJzYVNpZ25SYXdEaWdlc3RDYihQS0NTNyogcGtjczcsCisgICAgICAgIENhbGxiYWNrUnNhU2lnblJhd0RpZ2VzdCBjYik7CisjZW5kaWYKKworLyogQ01TL1BLQ1MjNyBFbnZlbG9wZWREYXRhICovCitXT0xGU1NMX0FQSSBpbnQgIHdjX1BLQ1M3X0VuY29kZUVudmVsb3BlZERhdGEoUEtDUzcqIHBrY3M3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogb3V0cHV0LCB3b3JkMzIgb3V0cHV0U3opOworV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19EZWNvZGVFbnZlbG9wZWREYXRhKFBLQ1M3KiBwa2NzNywgYnl0ZSogcGtpTXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHBraU1zZ1N6LCBieXRlKiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgb3V0cHV0U3opOworCisvKiBDTVMvUEtDUyM3IEF1dGhFbnZlbG9wZWREYXRhICovCitXT0xGU1NMX0FQSSBpbnQgIHdjX1BLQ1M3X0VuY29kZUF1dGhFbnZlbG9wZWREYXRhKFBLQ1M3KiBwa2NzNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG91dHB1dCwgd29yZDMyIG91dHB1dFN6KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfRGVjb2RlQXV0aEVudmVsb3BlZERhdGEoUEtDUzcqIHBrY3M3LCBieXRlKiBwa2lNc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgcGtpTXNnU3osIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBvdXRwdXRTeik7CisKKy8qIENNUy9QS0NTIzcgRW5jcnlwdGVkRGF0YSAqLworI2lmbmRlZiBOT19QS0NTN19FTkNSWVBURURfREFUQQorV09MRlNTTF9BUEkgaW50ICB3Y19QS0NTN19FbmNvZGVFbmNyeXB0ZWREYXRhKFBLQ1M3KiBwa2NzNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG91dHB1dCwgd29yZDMyIG91dHB1dFN6KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfRGVjb2RlRW5jcnlwdGVkRGF0YShQS0NTNyogcGtjczcsIGJ5dGUqIHBraU1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBwa2lNc2dTeiwgYnl0ZSogb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG91dHB1dFN6KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUEtDUzdfU2V0RGVjb2RlRW5jcnlwdGVkQ2IoUEtDUzcqIHBrY3M3LAorICAgICAgICBDYWxsYmFja0RlY3J5cHRDb250ZW50IGRlY3J5cHRpb25DYik7CitXT0xGU1NMX0FQSSBpbnQgIHdjX1BLQ1M3X1NldERlY29kZUVuY3J5cHRlZEN0eChQS0NTNyogcGtjczcsIHZvaWQqIGN0eCk7CisjZW5kaWYgLyogTk9fUEtDUzdfRU5DUllQVEVEX0RBVEEgKi8KKworLyogQ01TL1BLQ1MjNyBDb21wcmVzc2VkRGF0YSAqLworI2lmIGRlZmluZWQoSEFWRV9MSUJaKSAmJiAhZGVmaW5lZChOT19QS0NTN19DT01QUkVTU0VEX0RBVEEpCitXT0xGU1NMX0FQSSBpbnQgd2NfUEtDUzdfRW5jb2RlQ29tcHJlc3NlZERhdGEoUEtDUzcqIHBrY3M3LCBieXRlKiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG91dHB1dFN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19QS0NTN19EZWNvZGVDb21wcmVzc2VkRGF0YShQS0NTNyogcGtjczcsIGJ5dGUqIHBraU1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgcGtpTXNnU3osIGJ5dGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgb3V0cHV0U3opOworI2VuZGlmIC8qIEhBVkVfTElCWiAmJiAhTk9fUEtDUzdfQ09NUFJFU1NFRF9EQVRBICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX1BLQ1M3ICovCisjZW5kaWYgLyogV09MRl9DUllQVF9QS0NTN19IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9wb2x5MTMwNS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3BvbHkxMzA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlMGIzYQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9wb2x5MTMwNS5oCkBAIC0wLDAgKzEsMTM4IEBACisvKiBwb2x5MTMwNS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvcG9seTEzMDUuaAorKi8KKworI2lmbmRlZiBXT0xGX0NSWVBUX1BPTFkxMzA1X0gKKyNkZWZpbmUgV09MRl9DUllQVF9QT0xZMTMwNV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgSEFWRV9QT0xZMTMwNQorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBhdXRvIGRldGVjdCBiZXR3ZWVuIDMyYml0IC8gNjRiaXQgKi8KKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKSAmJiBkZWZpbmVkKF9fTFA2NF9fKQorI2RlZmluZSBXQ19IQVNfU0laRU9GX0lOVDEyOF82NEJJVAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9NX1g2NCkKKyNkZWZpbmUgV0NfSEFTX01TVkNfNjRCSVQKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19MUDY0X18pICYmIFwKKyAgICAgICAgKChfX0dOVUNfXyA+IDQpIHx8ICgoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDQpKSkpCisjZGVmaW5lIFdDX0hBU19HQ0NfNF80XzY0QklUCisjZW5kaWYKKworI2lmZGVmIFVTRV9JTlRFTF9TUEVFRFVQCisjZWxpZiAoZGVmaW5lZChXQ19IQVNfU0laRU9GX0lOVDEyOF82NEJJVCkgfHwgZGVmaW5lZChXQ19IQVNfTVNWQ182NEJJVCkgfHwgIFwKKyAgICAgICBkZWZpbmVkKFdDX0hBU19HQ0NfNF80XzY0QklUKSkKKyNkZWZpbmUgUE9MWTEzMDU2NAorI2Vsc2UKKyNkZWZpbmUgUE9MWTEzMDUzMgorI2VuZGlmCisKK2VudW0geworICAgIFBPTFkxMzA1ID0gNywKKyAgICBQT0xZMTMwNV9CTE9DS19TSVpFID0gMTYsCisgICAgUE9MWTEzMDVfRElHRVNUX1NJWkUgPSAxNiwKK307CisKKyNkZWZpbmUgV0NfUE9MWTEzMDVfUEFEX1NaIDE2CisjZGVmaW5lIFdDX1BPTFkxMzA1X01BQ19TWiAxNgorCisvKiBQb2x5MTMwNSBzdGF0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgUG9seTEzMDUgeworI2lmZGVmIFVTRV9JTlRFTF9TUEVFRFVQCisgICAgd29yZDY0IHJbM107CisgICAgd29yZDY0IGhbM107CisgICAgd29yZDY0IHBhZFsyXTsKKyAgICB3b3JkNjQgaGhbMjBdOworICAgIHdvcmQzMiByMVs4XTsKKyAgICB3b3JkMzIgcjJbOF07CisgICAgd29yZDMyIHIzWzhdOworICAgIHdvcmQzMiByNFs4XTsKKyAgICB3b3JkNjQgaG1bMTZdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzgqUE9MWTEzMDVfQkxPQ0tfU0laRV07CisgICAgc2l6ZV90IGxlZnRvdmVyOworICAgIHVuc2lnbmVkIGNoYXIgZmluaXNoZWQ7CisgICAgdW5zaWduZWQgY2hhciBzdGFydGVkOworI2Vsc2UKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQVJNQVNNKSAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorICAgIEFMSUdOMTI4IHdvcmQzMiByWzVdOworICAgIEFMSUdOMTI4IHdvcmQzMiByXzJbNV07IC8vIHJeMgorICAgIEFMSUdOMTI4IHdvcmQzMiByXzRbNV07IC8vIHJeNAorICAgIEFMSUdOMTI4IHdvcmQzMiBoWzVdOworICAgIHdvcmQzMiBwYWRbNF07CisgICAgd29yZDY0IGxlZnRvdmVyOworI2Vsc2UKKyNpZiBkZWZpbmVkKFBPTFkxMzA1NjQpCisgICAgd29yZDY0IHJbM107CisgICAgd29yZDY0IGhbM107CisgICAgd29yZDY0IHBhZFsyXTsKKyNlbHNlCisgICAgd29yZDMyIHJbNV07CisgICAgd29yZDMyIGhbNV07CisgICAgd29yZDMyIHBhZFs0XTsKKyNlbmRpZgorICAgIHNpemVfdCBsZWZ0b3ZlcjsKKyNlbmRpZiAvKiBXT0xGU1NMX0FSTUFTTSAqLworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW1BPTFkxMzA1X0JMT0NLX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgZmluaXNoZWQ7CisjZW5kaWYKK30gUG9seTEzMDU7CisKKy8qIGRvZXMgaW5pdCAqLworCitXT0xGU1NMX0FQSSBpbnQgd2NfUG9seTEzMDVTZXRLZXkoUG9seTEzMDUqIHBvbHkxMzA1LCBjb25zdCBieXRlKiBrZXksCisgICAgd29yZDMyIGt5U3opOworV09MRlNTTF9BUEkgaW50IHdjX1BvbHkxMzA1VXBkYXRlKFBvbHkxMzA1KiBwb2x5MTMwNSwgY29uc3QgYnl0ZSosIHdvcmQzMik7CitXT0xGU1NMX0FQSSBpbnQgd2NfUG9seTEzMDVGaW5hbChQb2x5MTMwNSogcG9seTEzMDUsIGJ5dGUqIHRhZyk7CisKKy8qIEFFQUQgRnVuY3Rpb25zICovCitXT0xGU1NMX0FQSSBpbnQgd2NfUG9seTEzMDVfUGFkKFBvbHkxMzA1KiBjdHgsIHdvcmQzMiBsZW5Ub1BhZCk7CitXT0xGU1NMX0FQSSBpbnQgd2NfUG9seTEzMDVfRW5jb2RlU2l6ZXMoUG9seTEzMDUqIGN0eCwgd29yZDMyIGFhZFN6LAorICAgIHdvcmQzMiBkYXRhU3opOworI2lmZGVmIFdPUkQ2NF9BVkFJTEFCTEUKK1dPTEZTU0xfQVBJIGludCB3Y19Qb2x5MTMwNV9FbmNvZGVTaXplczY0KFBvbHkxMzA1KiBjdHgsIHdvcmQ2NCBhYWRTeiwKKyAgICAgd29yZDY0IGRhdGFTeik7CisjZW5kaWYKK1dPTEZTU0xfQVBJIGludCB3Y19Qb2x5MTMwNV9NQUMoUG9seTEzMDUqIGN0eCwgY29uc3QgYnl0ZSogYWRkaXRpb25hbCwKKyAgICB3b3JkMzIgYWRkU3osIGNvbnN0IGJ5dGUqIGlucHV0LCB3b3JkMzIgc3osIGJ5dGUqIHRhZywgd29yZDMyIHRhZ1N6KTsKKworI2lmIGRlZmluZWQoX19hYXJjaDY0X18gKSAmJiBkZWZpbmVkKFdPTEZTU0xfQVJNQVNNKQordm9pZCBwb2x5MTMwNV9ibG9ja3MoUG9seTEzMDUqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnl0ZXMpOwordm9pZCBwb2x5MTMwNV9ibG9jayhQb2x5MTMwNSogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICptKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9QT0xZMTMwNSAqLworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfUE9MWTEzMDVfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3B3ZGJhc2VkLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvcHdkYmFzZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQyYWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3B3ZGJhc2VkLmgKQEAgLTAsMCArMSw3NyBAQAorLyogcHdkYmFzZWQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L3B3ZGJhc2VkLmgKKyovCisKKyNpZm5kZWYgV09MRl9DUllQVF9QV0RCQVNFRF9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfUFdEQkFTRURfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmbmRlZiBOT19QV0RCQVNFRAorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgKiBoYXNoVHlwZSByZW5hbWVkIHRvIHR5cGVIIHRvIGF2b2lkIHNoYWRvd2luZyBnbG9iYWwgZGVjbGFyYXRpb24gaGVyZToKKyAqIHdvbGZzc2wvd29sZmNyeXB0L2Fzbi5oIGxpbmUgMTczIGluIGVudW0gT2lkX1R5cGVzCisgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19QQktERjFfZXgoYnl0ZSoga2V5LCBpbnQga2V5TGVuLCBieXRlKiBpdiwgaW50IGl2TGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHBhc3N3ZCwgaW50IHBhc3N3ZExlbiwgCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogc2FsdCwgaW50IHNhbHRMZW4sIGludCBpdGVyYXRpb25zLCAKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFzaFR5cGUsIHZvaWQqIGhlYXApOworV09MRlNTTF9BUEkgaW50IHdjX1BCS0RGMShieXRlKiBvdXRwdXQsIGNvbnN0IGJ5dGUqIHBhc3N3ZCwgaW50IHBMZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogc2FsdCwgaW50IHNMZW4sIGludCBpdGVyYXRpb25zLCBpbnQga0xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZUgpOworV09MRlNTTF9BUEkgaW50IHdjX1BCS0RGMl9leChieXRlKiBvdXRwdXQsIGNvbnN0IGJ5dGUqIHBhc3N3ZCwgaW50IHBMZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHNhbHQsIGludCBzTGVuLCBpbnQgaXRlcmF0aW9ucywgaW50IGtMZW4sCisgICAgICAgICAgICAgICAgICAgIGludCB0eXBlSCwgdm9pZCogaGVhcCwgaW50IGRldklkKTsKK1dPTEZTU0xfQVBJIGludCB3Y19QQktERjIoYnl0ZSogb3V0cHV0LCBjb25zdCBieXRlKiBwYXNzd2QsIGludCBwTGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHNhbHQsIGludCBzTGVuLCBpbnQgaXRlcmF0aW9ucywgaW50IGtMZW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGVIKTsKK1dPTEZTU0xfQVBJIGludCB3Y19QS0NTMTJfUEJLREYoYnl0ZSogb3V0cHV0LCBjb25zdCBieXRlKiBwYXNzd2QsIGludCBwTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHNhbHQsIGludCBzTGVuLCBpbnQgaXRlcmF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga0xlbiwgaW50IHR5cGVILCBpbnQgcHVycG9zZSk7CitXT0xGU1NMX0FQSSBpbnQgd2NfUEtDUzEyX1BCS0RGX2V4KGJ5dGUqIG91dHB1dCwgY29uc3QgYnl0ZSogcGFzc3dkLGludCBwYXNzTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBzYWx0LCBpbnQgc2FsdExlbiwgaW50IGl0ZXJhdGlvbnMsIGludCBrTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFzaFR5cGUsIGludCBpZCwgdm9pZCogaGVhcCk7CisKKyNpZmRlZiBIQVZFX1NDUllQVAorV09MRlNTTF9BUEkgaW50IHdjX3NjcnlwdChieXRlKiBvdXRwdXQsIGNvbnN0IGJ5dGUqIHBhc3N3ZCwgaW50IHBhc3NMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHNhbHQsIGludCBzYWx0TGVuLCBpbnQgY29zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrU2l6ZSwgaW50IHBhcmFsbGVsLCBpbnQgZGtMZW4pOworV09MRlNTTF9BUEkgaW50IHdjX3NjcnlwdF9leChieXRlKiBvdXRwdXQsIGNvbnN0IGJ5dGUqIHBhc3N3ZCwgaW50IHBhc3NMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHNhbHQsIGludCBzYWx0TGVuLCB3b3JkMzIgaXRlcmF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrU2l6ZSwgaW50IHBhcmFsbGVsLCBpbnQgZGtMZW4pOworI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE5PX1BXREJBU0VEICovCisjZW5kaWYgLyogV09MRl9DUllQVF9QV0RCQVNFRF9IICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvcmFiYml0LmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvcmFiYml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2YjczNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9yYWJiaXQuaApAQCAtMCwwICsxLDczIEBACisvKiByYWJiaXQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L3JhYmJpdC5oCisqLworCisKKyNpZm5kZWYgV09MRl9DUllQVF9SQUJCSVRfSAorI2RlZmluZSBXT0xGX0NSWVBUX1JBQkJJVF9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZuZGVmIE5PX1JBQkJJVAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKK2VudW0geworCVJBQkJJVF9FTkNfVFlQRSAgPSA1ICAgICAvKiBjaXBoZXIgdW5pcXVlIHR5cGUgKi8KK307CisKKworLyogUmFiYml0IENvbnRleHQgKi8KK3R5cGVkZWYgc3RydWN0IFJhYmJpdEN0eCB7CisgICAgd29yZDMyIHhbOF07CisgICAgd29yZDMyIGNbOF07CisgICAgd29yZDMyIGNhcnJ5OworfSBSYWJiaXRDdHg7CisKKworLyogUmFiYml0IHN0cmVhbSBjaXBoZXIgKi8KK3R5cGVkZWYgc3RydWN0IFJhYmJpdCB7CisgICAgUmFiYml0Q3R4IG1hc3RlckN0eDsKKyAgICBSYWJiaXRDdHggd29ya0N0eDsKKyNpZmRlZiBYU1RSRUFNX0FMSUdOCisgICAgdm9pZCogIGhlYXA7ICAvKiBoZWFwIGhpbnQsIGN1cnJlbnRseSBYTUFMTE9DIG9ubHkgdXNlZCB3aXRoIGFsaWduaW5nICovCisjZW5kaWYKK30gUmFiYml0OworCisKK1dPTEZTU0xfQVBJIGludCB3Y19SYWJiaXRQcm9jZXNzKFJhYmJpdCosIGJ5dGUqLCBjb25zdCBieXRlKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19SYWJiaXRTZXRLZXkoUmFiYml0KiwgY29uc3QgYnl0ZSoga2V5LCBjb25zdCBieXRlKiBpdik7CisKK1dPTEZTU0xfTE9DQUwgaW50IHdjX1JhYmJpdF9TZXRIZWFwKFJhYmJpdCogY3R4LCB2b2lkKiBoZWFwKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE5PX1JBQkJJVCAqLworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfUkFCQklUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3JhbmRvbS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3JhbmRvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NmVhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvcmFuZG9tLmgKQEAgLTAsMCArMSwyNjEgQEAKKy8qIHJhbmRvbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvcmFuZG9tLmgKKyovCisKKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfUkFORE9NX0gKKyNkZWZpbmUgV09MRl9DUllQVF9SQU5ET01fSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmIGRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgJiYgKEhBVkVfRklQU19WRVJTSU9OID49IDIpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ZpcHMuaD4KKyNlbmRpZiAvKiBIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyICovCisKKy8qIGluY2x1ZGVkIGZvciBmaXBzIEB3Y19maXBzICovCisjaWYgZGVmaW5lZChIQVZFX0ZJUFMpICYmIFwKKyAgICAgICAgKCFkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSB8fCAoSEFWRV9GSVBTX1ZFUlNJT04gPCAyKSkKKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3JhbmRvbS5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyAvKiBNYXhpbXVtIGdlbmVyYXRlIGJsb2NrIGxlbmd0aCAqLworI2lmbmRlZiBSTkdfTUFYX0JMT0NLX0xFTgorICAgICNpZmRlZiBIQVZFX0lOVEVMX1FBCisgICAgICAgICNkZWZpbmUgUk5HX01BWF9CTE9DS19MRU4gKDB4RkZGRmwpCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBSTkdfTUFYX0JMT0NLX0xFTiAoMHgxMDAwMGwpCisgICAgI2VuZGlmCisjZW5kaWYKKworLyogU2l6ZSBvZiB0aGUgQlJCRyBzZWVkICovCisjaWZuZGVmIERSQkdfU0VFRF9MRU4KKyAgICAjZGVmaW5lIERSQkdfU0VFRF9MRU4gKDQ0MC84KQorI2VuZGlmCisKKworI2lmICFkZWZpbmVkKENVU1RPTV9SQU5EX1RZUEUpCisgICAgLyogVG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB0aGUgZGVmYXVsdCBpcyBieXRlICovCisgICAgI2RlZmluZSBDVVNUT01fUkFORF9UWVBFICAgIGJ5dGUKKyNlbmRpZgorCisvKiBtYWtlIHN1cmUgSGFzaCBEUkJHIGlzIGVuYWJsZWQsIHVubGVzcyBXQ19OT19IQVNIRFJCRyBpcyBkZWZpbmVkCisgICAgb3IgQ1VTVE9NX1JBTkRfR0VORVJBVEVfQkxPQ0sgaXMgZGVmaW5lZCAqLworI2lmICFkZWZpbmVkKFdDX05PX0hBU0hEUkJHKSAmJiAhZGVmaW5lZChDVVNUT01fUkFORF9HRU5FUkFURV9CTE9DSykKKyAgICAjdW5kZWYgIEhBVkVfSEFTSERSQkcKKyAgICAjZGVmaW5lIEhBVkVfSEFTSERSQkcKKyAgICAjaWZuZGVmIFdDX1JFU0VFRF9JTlRFUlZBTAorICAgICAgICAjZGVmaW5lIFdDX1JFU0VFRF9JTlRFUlZBTCAoMTAwMDAwMCkKKyAgICAjZW5kaWYKKyNlbmRpZgorCisKKy8qIGF2b2lkIHJlZGVmaW5pdGlvbiBvZiBzdHJ1Y3RzICovCisjaWYgIWRlZmluZWQoSEFWRV9GSVBTKSB8fCBcCisgICAgKGRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pICYmIChIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyKSkKKworLyogUk5HIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgc291cmNlcyAoaW4gb3JkZXIpOgorICogMS4gQ1VTVE9NX1JBTkRfR0VORVJBVEVfQkxPQ0s6IERlZmluZXMgbmFtZSBvZiBmdW5jdGlvbiBhcyBSTkcgc291cmNlIGFuZAorICogICAgIGJ5cGFzc2VzIHRoZSBvcHRpb25zIGJlbG93LgorICogMi4gSEFWRV9JTlRFTF9SRFJBTkQ6IFVzZXMgdGhlIEludGVsIFJEUkFORCBpZiBzdXBwb3J0ZWQgYnkgQ1BVLgorICogMy4gSEFWRV9IQVNIRFJCRyAocmVxdWlyZXMgU0hBMjU2IGVuYWJsZWQpOiBVc2VzIFNIQTI1NiBiYXNlZCBQLVJORworICogICAgIHNlZWRlZCB2aWEgd2NfR2VuZXJhdGVTZWVkLiBUaGlzIGlzIHRoZSBkZWZhdWx0IHNvdXJjZS4KKyAqLworCisgLyogU2VlZCBzb3VyY2UgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgb25lIG9mIHRoZXNlOgorICAgICAgQ1VTVE9NX1JBTkRfR0VORVJBVEVfU0VFRAorICAgICAgQ1VTVE9NX1JBTkRfR0VORVJBVEVfU0VFRF9PUworICAgICAgQ1VTVE9NX1JBTkRfR0VORVJBVEUgKi8KKworCisjaWYgZGVmaW5lZChDVVNUT01fUkFORF9HRU5FUkFURV9CTE9DSykKKyAgICAvKiBUbyB1c2UgZGVmaW5lIHRoZSBmb2xsb3dpbmc6CisgICAgICogI2RlZmluZSBDVVNUT01fUkFORF9HRU5FUkFURV9CTE9DSyBteVJuZ0Z1bmMKKyAgICAgKiBleHRlcm4gaW50IG15Um5nRnVuYyhieXRlKiBvdXRwdXQsIHdvcmQzMiBzeik7CisgICAgICovCisjZWxpZiBkZWZpbmVkKEhBVkVfSEFTSERSQkcpCisgICAgI2lmZGVmIE5PX1NIQTI1NgorICAgICAgICAjZXJyb3IgIkhhc2ggRFJCRyByZXF1aXJlcyBTSEEtMjU2LiIKKyAgICAjZW5kaWYgLyogTk9fU0hBMjU2ICovCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NoYTI1Ni5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1dOUikKKyAgICAgLyogYWxsb3cgd2hpdGV3b29kIGFzIGRpcmVjdCBSTkcgc291cmNlIHVzaW5nIHdjX0dlbmVyYXRlU2VlZCBkaXJlY3RseSAqLworI2VsaWYgZGVmaW5lZChIQVZFX0lOVEVMX1JEUkFORCkKKyAgICAvKiBJbnRlbCBSRFJBTkQgb3IgUkRTRUVEICovCisjZWxpZiAhZGVmaW5lZChXQ19OT19STkcpCisgICAgI2Vycm9yIE5vIFJORyBzb3VyY2UgZGVmaW5lZCEKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9XTlIKKyAgICAjaW5jbHVkZSA8d25yLmg+CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXN5bmMuaD4KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKFVTRV9XSU5ET1dTX0FQSSkKKyAgICAjaWYgZGVmaW5lZChfV0lONjQpCisgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBQcm92aWRlckhhbmRsZTsKKyAgICAgICAgLyogdHlwZSBIQ1JZUFRQUk9WLCBhdm9pZCAjaW5jbHVkZSA8d2luZG93cy5oPiAqLworICAgICNlbHNlCisgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBQcm92aWRlckhhbmRsZTsKKyAgICAjZW5kaWYKKyNlbmRpZgorCisKKy8qIE9TIHNwZWNpZmljIHNlZWRlciAqLwordHlwZWRlZiBzdHJ1Y3QgT1NfU2VlZCB7CisgICAgI2lmIGRlZmluZWQoVVNFX1dJTkRPV1NfQVBJKQorICAgICAgICBQcm92aWRlckhhbmRsZSBoYW5kbGU7CisgICAgI2Vsc2UKKyAgICAgICAgaW50IGZkOworICAgICNlbmRpZgorICAgICNpZiBkZWZpbmVkKFdPTEZfQ1JZUFRPX0NCKQorICAgICAgICBpbnQgZGV2SWQ7CisgICAgI2VuZGlmCit9IE9TX1NlZWQ7CisKKworI2lmbmRlZiBXQ19STkdfVFlQRV9ERUZJTkVEIC8qIGd1YXJkIG9uIHJlZGVjbGFyYXRpb24gKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBXQ19STkcgV0NfUk5HOworICAgICNkZWZpbmUgV0NfUk5HX1RZUEVfREVGSU5FRAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0hBU0hEUkJHCitzdHJ1Y3QgRFJCR19pbnRlcm5hbCB7CisgICAgd29yZDMyIHJlc2VlZEN0cjsKKyAgICB3b3JkMzIgbGFzdEJsb2NrOworICAgIGJ5dGUgVltEUkJHX1NFRURfTEVOXTsKKyAgICBieXRlIENbRFJCR19TRUVEX0xFTl07CisjaWYgZGVmaW5lZChXT0xGU1NMX0FTWU5DX0NSWVBUKSB8fCBkZWZpbmVkKFdPTEZfQ1JZUFRPX0NCKQorICAgIHZvaWQqIGhlYXA7CisgICAgaW50IGRldklkOworI2VuZGlmCisgICAgYnl0ZSAgIG1hdGNoQ291bnQ7CisjaWZkZWYgV09MRlNTTF9TTUFMTF9TVEFDS19DQUNIRQorICAgIHdjX1NoYTI1NiBzaGEyNTY7CisjZW5kaWYKK307CisjZW5kaWYKKworLyogUk5HIGNvbnRleHQgKi8KK3N0cnVjdCBXQ19STkcgeworICAgIE9TX1NlZWQgc2VlZDsKKyAgICB2b2lkKiBoZWFwOworI2lmZGVmIEhBVkVfSEFTSERSQkcKKyAgICAvKiBIYXNoLWJhc2VkIERldGVybWluaXN0aWMgUmFuZG9tIEJpdCBHZW5lcmF0b3IgKi8KKyAgICBzdHJ1Y3QgRFJCRyogZHJiZzsKKyNpZiBkZWZpbmVkKFdPTEZTU0xfTk9fTUFMTE9DKSAmJiAhZGVmaW5lZChXT0xGU1NMX1NUQVRJQ19NRU1PUlkpCisgICAgc3RydWN0IERSQkdfaW50ZXJuYWwgZHJiZ19kYXRhOworI2VuZGlmCisgICAgYnl0ZSBzdGF0dXM7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgV0NfQVNZTkNfREVWIGFzeW5jRGV2OworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0FTWU5DX0NSWVBUKSB8fCBkZWZpbmVkKFdPTEZfQ1JZUFRPX0NCKQorICAgIGludCBkZXZJZDsKKyNlbmRpZgorfTsKKworI2VuZGlmIC8qIE5PIEZJUFMgb3IgaGF2ZSBGSVBTIHYyKi8KKworLyogTk9fT0xEX1JOR05BTUUgcmVtb3ZlcyBSTkcgc3RydWN0IG5hbWUgdG8gcHJldmVudCBwb3NzaWJsZSB0eXBlIGNvbmZsaWN0cywKKyAqIGNhbid0IGJlIHVzZWQgd2l0aCBDVGFvQ3J5cHQgRklQUyAqLworI2lmICFkZWZpbmVkKE5PX09MRF9STkdOQU1FKSAmJiAhZGVmaW5lZChIQVZFX0ZJUFMpCisgICAgI2RlZmluZSBSTkcgV0NfUk5HCisjZW5kaWYKKworCitXT0xGU1NMX0xPQ0FMCitpbnQgd2NfR2VuZXJhdGVTZWVkKE9TX1NlZWQqIG9zLCBieXRlKiBzZWVkLCB3b3JkMzIgc3opOworCisKKyNpZmRlZiBIQVZFX1dOUgorICAgIC8qIFdoaXRld29vZCBuZXRSYW5kb20gY2xpZW50IGxpYnJhcnkgKi8KKyAgICBXT0xGU1NMX0FQSSBpbnQgIHdjX0luaXROZXRSYW5kb20oY29uc3QgY2hhciosIHducl9obWFjX2tleSwgaW50KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgIHdjX0ZyZWVOZXRSYW5kb20odm9pZCk7CisjZW5kaWYgLyogSEFWRV9XTlIgKi8KKworCitXT0xGU1NMX0FCSSBXT0xGU1NMX0FQSSBXQ19STkcqIHdjX3JuZ19uZXcoYnl0ZSosIHdvcmQzMiwgdm9pZCopOworV09MRlNTTF9BQkkgV09MRlNTTF9BUEkgdm9pZCB3Y19ybmdfZnJlZShXQ19STkcqKTsKKworCisjaWZuZGVmIFdDX05PX1JORworV09MRlNTTF9BUEkgaW50ICB3Y19Jbml0Um5nKFdDX1JORyopOworV09MRlNTTF9BUEkgaW50ICB3Y19Jbml0Um5nX2V4KFdDX1JORyogcm5nLCB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworV09MRlNTTF9BUEkgaW50ICB3Y19Jbml0Um5nTm9uY2UoV0NfUk5HKiBybmcsIGJ5dGUqIG5vbmNlLCB3b3JkMzIgbm9uY2VTeik7CitXT0xGU1NMX0FQSSBpbnQgIHdjX0luaXRSbmdOb25jZV9leChXQ19STkcqIHJuZywgYnl0ZSogbm9uY2UsIHdvcmQzMiBub25jZVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogaGVhcCwgaW50IGRldklkKTsKK1dPTEZTU0xfQUJJIFdPTEZTU0xfQVBJIGludCB3Y19STkdfR2VuZXJhdGVCbG9jayhXQ19STkcqLCBieXRlKiwgd29yZDMyIHN6KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUk5HX0dlbmVyYXRlQnl0ZShXQ19STkcqLCBieXRlKik7CitXT0xGU1NMX0FQSSBpbnQgIHdjX0ZyZWVSbmcoV0NfUk5HKik7CisjZWxzZQorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2Vycm9yLWNyeXB0Lmg+CisjZGVmaW5lIHdjX0luaXRSbmcocm5nKSBOT1RfQ09NUElMRURfSU4KKyNkZWZpbmUgd2NfSW5pdFJuZ19leChybmcsIGgsIGQpIE5PVF9DT01QSUxFRF9JTgorI2RlZmluZSB3Y19Jbml0Um5nTm9uY2Uocm5nLCBuLCBzKSBOT1RfQ09NUElMRURfSU4KKyNkZWZpbmUgd2NfSW5pdFJuZ05vbmNlX2V4KHJuZywgbiwgcywgaCwgZCkgTk9UX0NPTVBJTEVEX0lOCisjaWYgZGVmaW5lZChfX2doc19fKSB8fCBkZWZpbmVkKFdDX05PX1JOR19TSU1QTEUpCisvKiBzb21lIG9sZGVyIGNvbXBpbGVycyBkbyBub3QgbGlrZSBtYWNybyBmdW5jdGlvbiBpbiBleHByZXNzaW9uICovCisjZGVmaW5lIHdjX1JOR19HZW5lcmF0ZUJsb2NrKHJuZywgYiwgcykgTk9UX0NPTVBJTEVEX0lOCisjZWxzZQorI2RlZmluZSB3Y19STkdfR2VuZXJhdGVCbG9jayhybmcsIGIsIHMpICh7KHZvaWQpcm5nOyAodm9pZCliOyAodm9pZClzOyBOT1RfQ09NUElMRURfSU47fSkKKyNlbmRpZgorI2RlZmluZSB3Y19STkdfR2VuZXJhdGVCeXRlKHJuZywgYikgTk9UX0NPTVBJTEVEX0lOCisjZGVmaW5lIHdjX0ZyZWVSbmcocm5nKSAodm9pZClOT1RfQ09NUElMRURfSU4KKyNlbmRpZgorCisKKworI2lmZGVmIEhBVkVfSEFTSERSQkcKKyAgICBXT0xGU1NMX0xPQ0FMIGludCB3Y19STkdfRFJCR19SZXNlZWQoV0NfUk5HKiBybmcsIGNvbnN0IGJ5dGUqIGVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIGVudHJvcHlTeik7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX1JOR19UZXN0U2VlZChjb25zdCBieXRlKiBzZWVkLCB3b3JkMzIgc2VlZFN6KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfUk5HX0hlYWx0aFRlc3QoaW50IHJlc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBlbnRyb3B5QSwgd29yZDMyIGVudHJvcHlBU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogZW50cm9weUIsIHdvcmQzMiBlbnRyb3B5QlN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIG91dHB1dCwgd29yZDMyIG91dHB1dFN6KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfUk5HX0hlYWx0aFRlc3RfZXgoaW50IHJlc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBub25jZSwgd29yZDMyIG5vbmNlU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogZW50cm9weUEsIHdvcmQzMiBlbnRyb3B5QVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGVudHJvcHlCLCB3b3JkMzIgZW50cm9weUJTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBvdXRwdXQsIHdvcmQzMiBvdXRwdXRTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworI2VuZGlmIC8qIEhBVkVfSEFTSERSQkcgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfUkFORE9NX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3JjMi5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3JjMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTY0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvcmMyLmgKQEAgLTAsMCArMSw2OCBAQAorLyogcmMyLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisjaWZuZGVmIFdPTEZfQ1JZUFRfUkMyX0gKKyNkZWZpbmUgV09MRl9DUllQVF9SQzJfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIFdDX1JDMgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCitlbnVtIHsKKyAgICBSQzJfTUFYX0tFWV9TSVpFID0gMTI4LCAvKiBtYXggZWZmZWN0aXZlIGtleSBzaXplLCBvY3RldHMgKi8KKyAgICBSQzJfQkxPQ0tfU0laRSAgID0gOAorfTsKKworLyogUkMyIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gKi8KK3R5cGVkZWYgc3RydWN0IFJjMiB7CisgICAgQUxJR04xNiB3b3JkMTYga2V5W1JDMl9NQVhfS0VZX1NJWkUvMl07CisgICAgQUxJR04xNiB3b3JkMzIgcmVnW1JDMl9CTE9DS19TSVpFIC8gc2l6ZW9mKHdvcmQzMildOyAgICAvKiBmb3IgQ0JDIG1vZGUgKi8KKyAgICBBTElHTjE2IHdvcmQzMiB0bXBbUkMyX0JMT0NLX1NJWkUgLyBzaXplb2Yod29yZDMyKV07ICAgIC8qIHNhbWUgICAgICAgICAqLworICAgIHdvcmQzMiBrZXlsZW47ICAgICAgLyoga2V5IGxlbmd0aCwgb2N0ZXRzICovCisgICAgd29yZDMyIGJpdHM7ICAgICAgICAvKiBlZmZlY3RpdmUga2V5IGxlbmd0aCwgYml0cyAqLworfSBSYzI7CisKK1dPTEZTU0xfQVBJIGludCB3Y19SYzJTZXRLZXkoUmMyKiByYzIsIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaXYsIHdvcmQzMiBiaXRzKTsKK1dPTEZTU0xfQVBJIGludCB3Y19SYzJTZXRJVihSYzIqIHJjMiwgY29uc3QgYnl0ZSogaXYpOworCisvKiBSQzItRUNCICovCitXT0xGU1NMX0FQSSBpbnQgd2NfUmMyRWNiRW5jcnlwdChSYzIqIHJjMiwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfUmMyRWNiRGVjcnlwdChSYzIqIHJjMiwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeik7CisKKy8qIFJDMi1DQkMgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19SYzJDYmNFbmNyeXB0KFJjMiogcmMyLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19SYzJDYmNEZWNyeXB0KFJjMiogcmMyLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpbiwgd29yZDMyIHN6KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIFdDX1JDMiAqLworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfUkMyX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9yaXBlbWQuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9yaXBlbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTRjNmIzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3JpcGVtZC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIHJpcGVtZC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvcmlwZW1kLmgKKyovCisKKyNpZm5kZWYgV09MRl9DUllQVF9SSVBFTURfSAorI2RlZmluZSBXT0xGX0NSWVBUX1JJUEVNRF9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZkZWYgV09MRlNTTF9SSVBFTUQKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiBpbiBieXRlcyAqLworZW51bSB7CisgICAgUklQRU1EICAgICAgICAgICAgID0gIDMsICAgIC8qIGhhc2ggdHlwZSB1bmlxdWUgKi8KKyAgICBSSVBFTURfQkxPQ0tfU0laRSAgPSA2NCwKKyAgICBSSVBFTURfRElHRVNUX1NJWkUgPSAyMCwKKyAgICBSSVBFTURfUEFEX1NJWkUgICAgPSA1NgorfTsKKworCisvKiBSaXBlTWQgMTYwIGRpZ2VzdCAqLwordHlwZWRlZiBzdHJ1Y3QgUmlwZU1kIHsKKyAgICB3b3JkMzIgIGJ1ZmZMZW47ICAgLyogaW4gYnl0ZXMgICAgICAgICAgKi8KKyAgICB3b3JkMzIgIGxvTGVuOyAgICAgLyogbGVuZ3RoIGluIGJ5dGVzICAgKi8KKyAgICB3b3JkMzIgIGhpTGVuOyAgICAgLyogbGVuZ3RoIGluIGJ5dGVzICAgKi8KKyAgICB3b3JkMzIgIGRpZ2VzdFtSSVBFTURfRElHRVNUX1NJWkUgLyBzaXplb2Yod29yZDMyKV07CisgICAgd29yZDMyICBidWZmZXJbUklQRU1EX0JMT0NLX1NJWkUgIC8gc2l6ZW9mKHdvcmQzMildOworfSBSaXBlTWQ7CisKKworV09MRlNTTF9BUEkgaW50IHdjX0luaXRSaXBlTWQoUmlwZU1kKik7CitXT0xGU1NMX0FQSSBpbnQgd2NfUmlwZU1kVXBkYXRlKFJpcGVNZCosIGNvbnN0IGJ5dGUqLCB3b3JkMzIpOworV09MRlNTTF9BUEkgaW50IHdjX1JpcGVNZEZpbmFsKFJpcGVNZCosIGJ5dGUqKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogV09MRlNTTF9SSVBFTUQgKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX1JJUEVNRF9IICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvcnNhLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvcnNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2NDM1MQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9yc2EuaApAQCAtMCwwICsxLDM4OCBAQAorLyogcnNhLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL3dvbGZjcnlwdC9yc2EuaAorKi8KKworLyoKKworREVTQ1JJUFRJT04KK1RoaXMgbGlicmFyeSBwcm92aWRlcyB0aGUgaW50ZXJmYWNlIHRvIHRoZSBSU0EuCitSU0Ega2V5cyBjYW4gYmUgdXNlZCB0byBlbmNyeXB0LCBkZWNyeXB0LCBzaWduIGFuZCB2ZXJpZnkgZGF0YS4KKworKi8KKyNpZm5kZWYgV09MRl9DUllQVF9SU0FfSAorI2RlZmluZSBXT0xGX0NSWVBUX1JTQV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorCisjaWZuZGVmIE5PX1JTQQorCisKKy8qIFJTQSBkZWZhdWx0IGV4cG9uZW50ICovCisjaWZuZGVmIFdDX1JTQV9FWFBPTkVOVAorICAgICNkZWZpbmUgV0NfUlNBX0VYUE9ORU5UIDY1NTM3TAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdDX1JTQV9OT05CTE9DSykKKyAgICAvKiBlbmFibGUgc3VwcG9ydCBmb3IgZmFzdCBtYXRoIGJhc2VkIG5vbi1ibG9ja2luZyBleHB0bW9kICovCisgICAgLyogdGhpcyBzcGxpdHMgdGhlIFJTQSBmdW5jdGlvbiBpbnRvIG1hbnkgc21hbGxlciBvcGVyYXRpb25zICovCisgICAgI2lmbmRlZiBVU0VfRkFTVF9NQVRICisgICAgICAgICNlcnJvciBSU0Egbm9uLWJsb2NraW5nIG1vZGUgb25seSBzdXBwb3J0ZWQgdXNpbmcgZmFzdCBtYXRoCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBURk1fVElNSU5HX1JFU0lTVEFOVAorICAgICAgI2Vycm9yIFJTQSBub24tYmxvY2tpbmcgbW9kZSBvbmx5IHN1cHBvcnRlZCB3aXRoIHRpbWluZyByZXNpc3RhbmNlIGVuYWJsZWQKKyAgICAjZW5kaWYKKworICAgIC8qIFJTQSBib3VuZHMgY2hlY2sgaXMgbm90IHN1cHBvcnRlZCB3aXRoIFJTQSBub24tYmxvY2tpbmcgbW9kZSAqLworICAgICN1bmRlZiAgTk9fUlNBX0JPVU5EU19DSEVDSworICAgICNkZWZpbmUgTk9fUlNBX0JPVU5EU19DSEVDSworI2VuZGlmCisKKy8qIGFsbG93IGZvciB1c2VyIHRvIHBsdWcgaW4gb3duIGNyeXB0byAqLworI2lmICFkZWZpbmVkKEhBVkVfRklQUykgJiYgKGRlZmluZWQoSEFWRV9VU0VSX1JTQSkgfHwgZGVmaW5lZChIQVZFX0ZBU1RfUlNBKSkKKyAgICAjaW5jbHVkZSAidXNlcl9yc2EuaCIKKyNlbHNlCisKKyNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorCSghZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgfHwgKEhBVkVfRklQU19WRVJTSU9OIDwgMikpCisvKiBmb3IgZmlwcyBAd2NfZmlwcyAqLworI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvcnNhLmg+CisjaWYgZGVmaW5lZChDWUFTU0xfS0VZX0dFTikgJiYgIWRlZmluZWQoV09MRlNTTF9LRVlfR0VOKQorICAgICNkZWZpbmUgV09MRlNTTF9LRVlfR0VOCisjZW5kaWYKKyNlbHNlCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ludGVnZXIuaD4KKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcmFuZG9tLmg+CisjZW5kaWYgLyogSEFWRV9GSVBTICYmIEhBVkVfRklQU19WRVJJT04gMSAqLworI2lmIGRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisJZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgJiYgKEhBVkVfRklQU19WRVJTSU9OID49IDIpCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZmlwcy5oPgorI2VuZGlmCisKKy8qIGhlYWRlciBmaWxlIG5lZWRlZCBmb3IgT0FFUCBwYWRkaW5nICovCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaGFzaC5oPgorCisjaWZkZWYgV09MRlNTTF9YSUxJTlhfQ1JZUFQKKyNpbmNsdWRlICJ4c2VjdXJlX3JzYS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQ1JZUFRPQ0VMTCkKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcG9ydC9hcm0vY3J5cHRvQ2VsbC5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKK2VudW0geworICAgIFJTQV9NSU5fU0laRSA9IDUxMiwKKyAgICBSU0FfTUFYX1NJWkUgPSA0MDk2LAorfTsKKworLyogYXZvaWQgcmVkZWZpbml0aW9uIG9mIHN0cnVjdHMgKi8KKyNpZiAhZGVmaW5lZChIQVZFX0ZJUFMpIHx8IFwKKyAgICAoZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgJiYgKEhBVkVfRklQU19WRVJTSU9OID49IDIpKQorCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc3luYy5oPgorICAgICNpZmRlZiBXT0xGU1NMX0NFUlRfR0VOCisgICAgICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc24uaD4KKyAgICAjZW5kaWYKKyNlbmRpZgorCitlbnVtIHsKKyAgICBSU0FfUFVCTElDICAgPSAwLAorICAgIFJTQV9QUklWQVRFICA9IDEsCisKKyAgICBSU0FfVFlQRV9VTktOT1dOICAgID0gLTEsCisgICAgUlNBX1BVQkxJQ19FTkNSWVBUICA9IDAsCisgICAgUlNBX1BVQkxJQ19ERUNSWVBUICA9IDEsCisgICAgUlNBX1BSSVZBVEVfRU5DUllQVCA9IDIsCisgICAgUlNBX1BSSVZBVEVfREVDUllQVCA9IDMsCisKKyAgICBSU0FfQkxPQ0tfVFlQRV8xID0gMSwKKyAgICBSU0FfQkxPQ0tfVFlQRV8yID0gMiwKKworICAgIFJTQV9NSU5fUEFEX1NaICAgPSAxMSwgICAgIC8qIHNlcGFyYXRvciArIDAgKyBwYWQgdmFsdWUgKyA4IHBhZHMgKi8KKworICAgIFJTQV9QU1NfUEFEX1NaID0gOCwKKyAgICBSU0FfUFNTX1NBTFRfTUFYX1NaID0gNjIsCisKKyNpZmRlZiBPUEVOU1NMX0VYVFJBCisgICAgUlNBX1BLQ1MxX1BBRERJTkdfU0laRSA9IDExLAorICAgIFJTQV9QS0NTMV9PQUVQX1BBRERJTkdfU0laRSA9IDQyLCAvKiAoMiAqIGhhc2hsZW4oU0hBLTEpKSArIDIgKi8KKyNlbmRpZgorI2lmZGVmIFdDX1JTQV9QU1MKKyAgICBSU0FfUFNTX1BBRF9URVJNID0gMHhCQywKKyNlbmRpZgorCisgICAgUlNBX1BTU19TQUxUX0xFTl9ERUZBVUxUICA9IC0xLAorI2lmZGVmIFdPTEZTU0xfUFNTX1NBTFRfTEVOX0RJU0NPVkVSCisgICAgUlNBX1BTU19TQUxUX0xFTl9ESVNDT1ZFUiA9IC0yLAorI2VuZGlmCisKKyNpZmRlZiBXT0xGX0NSWVBUT19DQgorICAgIFJTQV9NQVhfSURfTEVOICAgICAgPSAzMiwKKyAgICBSU0FfTUFYX0xBQkVMX0xFTiAgID0gMzIsCisjZW5kaWYKK307CisKKyNpZmRlZiBXQ19SU0FfTk9OQkxPQ0sKK3R5cGVkZWYgc3RydWN0IFJzYU5iIHsKKyAgICBleHB0TW9kTmJfdCBleHB0bW9kOyAvKiBub24tYmxvY2sgZXhwdF9tb2QgKi8KKyAgICBtcF9pbnQgdG1wOworfSBSc2FOYjsKKyNlbmRpZgorCisvKiBSU0EgKi8KK3N0cnVjdCBSc2FLZXkgeworICAgIG1wX2ludCBuLCBlOworI2lmbmRlZiBXT0xGU1NMX1JTQV9QVUJMSUNfT05MWQorICAgIG1wX2ludCBkLCBwLCBxOworI2lmIGRlZmluZWQoV09MRlNTTF9LRVlfR0VOKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8ICFkZWZpbmVkKFJTQV9MT1dfTUVNKQorICAgIG1wX2ludCBkUCwgZFEsIHU7CisjZW5kaWYKKyNlbmRpZgorICAgIHZvaWQqIGhlYXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB1c2VyIG1lbW9yeSBvdmVycmlkZXMgKi8KKyAgICBieXRlKiBkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZW1wIGJ1ZmZlciBmb3IgYXN5bmMgUlNBICovCisgICAgaW50ICAgdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHVibGljIG9yIHByaXZhdGUgKi8KKyAgICBpbnQgICBzdGF0ZTsKKyAgICB3b3JkMzIgZGF0YUxlbjsKKyNpZmRlZiBXQ19SU0FfQkxJTkRJTkcKKyAgICBXQ19STkcqIHJuZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgUHJpdmF0ZURlY3J5cHQgYmxpbmRpbmcgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZfQ1JZUFRPX0NCCisgICAgaW50ICAgZGV2SWQ7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgV0NfQVNZTkNfREVWIGFzeW5jRGV2OworICAgICNpZmRlZiBXT0xGU1NMX0NFUlRfR0VOCisgICAgICAgIENlcnRTaWduQ3R4IGNlcnRTaWduQ3R4OyAvKiBjb250ZXh0IGluZm8gZm9yIGNlcnQgc2lnbiAoTWFrZVNpZ25hdHVyZSkgKi8KKyAgICAjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX0FTWU5DX0NSWVBUICovCisjaWZkZWYgV09MRlNTTF9YSUxJTlhfQ1JZUFQKKyAgICB3b3JkMzIgcHViRXhwOyAvKiB0byBrZWVwIHZhbHVlcyBpbiBzY29wZSB0aGV5IGFyZSBoZXJlIGluIHN0cnVjdCAqLworICAgIGJ5dGUqICBtb2Q7CisgICAgWFNlY3VyZV9Sc2EgeFJzYTsKKyNlbmRpZgorI2lmZGVmIFdPTEZfQ1JZUFRPX0NCCisgICAgYnl0ZSBpZFtSU0FfTUFYX0lEX0xFTl07CisgICAgaW50ICBpZExlbjsKKyAgICBjaGFyIGxhYmVsW1JTQV9NQVhfTEFCRUxfTEVOXTsKKyAgICBpbnQgIGxhYmVsTGVuOworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0FTWU5DX0NSWVBUKSB8fCAhZGVmaW5lZChXT0xGU1NMX1JTQV9WRVJJRllfSU5MSU5FKQorICAgIGJ5dGUgICBkYXRhSXNBbGxvYzsKKyNlbmRpZgorI2lmZGVmIFdDX1JTQV9OT05CTE9DSworICAgIFJzYU5iKiBuYjsKKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfQUZBTEdfWElMSU5YX1JTQQorICAgIGludCBhbEZkOworICAgIGludCByZEZkOworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0NSWVBUT0NFTEwpCisgICAgcnNhX2NvbnRleHRfdCBjdHg7CisjZW5kaWYKK307CisKKyNpZm5kZWYgV0NfUlNBS0VZX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IFJzYUtleSBSc2FLZXk7CisgICAgI2RlZmluZSBXQ19SU0FLRVlfVFlQRV9ERUZJTkVECisjZW5kaWYKKworI2VuZGlmIC8qSEFWRV9GSVBTICovCisKK1dPTEZTU0xfQVBJIGludCAgd2NfSW5pdFJzYUtleShSc2FLZXkqIGtleSwgdm9pZCogaGVhcCk7CitXT0xGU1NMX0FQSSBpbnQgIHdjX0luaXRSc2FLZXlfZXgoUnNhS2V5KiBrZXksIHZvaWQqIGhlYXAsIGludCBkZXZJZCk7CitXT0xGU1NMX0FQSSBpbnQgIHdjX0ZyZWVSc2FLZXkoUnNhS2V5KiBrZXkpOworI2lmZGVmIFdPTEZfQ1JZUFRPX0NCCitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdFJzYUtleV9JZChSc2FLZXkqIGtleSwgdW5zaWduZWQgY2hhciogaWQsIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBoZWFwLCBpbnQgZGV2SWQpOworV09MRlNTTF9BUEkgaW50IHdjX0luaXRSc2FLZXlfTGFiZWwoUnNhS2V5KiBrZXksIGNvbnN0IGNoYXIqIGxhYmVsLCB2b2lkKiBoZWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldklkKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgaW50ICB3Y19DaGVja1JzYUtleShSc2FLZXkqIGtleSk7CisjaWZkZWYgV09MRlNTTF9YSUxJTlhfQ1JZUFQKK1dPTEZTU0xfTE9DQUwgaW50IHdjX0luaXRSc2FIdyhSc2FLZXkqIGtleSk7CisjZW5kaWYgLyogV09MRlNTTF9YSUxJTlhfQ1JZUFQgKi8KKworV09MRlNTTF9BUEkgaW50ICB3Y19Sc2FGdW5jdGlvbihjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIqIG91dExlbiwgaW50IHR5cGUsIFJzYUtleSoga2V5LCBXQ19STkcqIHJuZyk7CisKK1dPTEZTU0xfQVBJIGludCAgd2NfUnNhUHVibGljRW5jcnlwdChjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgb3V0TGVuLCBSc2FLZXkqIGtleSwgV0NfUk5HKiBybmcpOworV09MRlNTTF9BUEkgaW50ICB3Y19Sc2FQcml2YXRlRGVjcnlwdElubGluZShieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJzYUtleSoga2V5KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUnNhUHJpdmF0ZURlY3J5cHQoY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpbkxlbiwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBvdXRMZW4sIFJzYUtleSoga2V5KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUnNhU1NMX1NpZ24oY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpbkxlbiwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBvdXRMZW4sIFJzYUtleSoga2V5LCBXQ19STkcqIHJuZyk7CitXT0xGU1NMX0FQSSBpbnQgIHdjX1JzYVBTU19TaWduKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG91dExlbiwgZW51bSB3Y19IYXNoVHlwZSBoYXNoLCBpbnQgbWdmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSc2FLZXkqIGtleSwgV0NfUk5HKiBybmcpOworV09MRlNTTF9BUEkgaW50ICB3Y19Sc2FQU1NfU2lnbl9leChjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBvdXRMZW4sIGVudW0gd2NfSGFzaFR5cGUgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1nZiwgaW50IHNhbHRMZW4sIFJzYUtleSoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQ19STkcqIHJuZyk7CitXT0xGU1NMX0FQSSBpbnQgIHdjX1JzYVNTTF9WZXJpZnlJbmxpbmUoYnl0ZSogaW4sIHdvcmQzMiBpbkxlbiwgYnl0ZSoqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJzYUtleSoga2V5KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUnNhU1NMX1ZlcmlmeShjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgb3V0TGVuLCBSc2FLZXkqIGtleSk7CitXT0xGU1NMX0FQSSBpbnQgIHdjX1JzYVNTTF9WZXJpZnlfZXgoY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpbkxlbiwgYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIG91dExlbiwgUnNhS2V5KiBrZXksIGludCBwYWRfdHlwZSk7CitXT0xGU1NMX0FQSSBpbnQgIHdjX1JzYVNTTF9WZXJpZnlfZXgyKGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBvdXRMZW4sIFJzYUtleSoga2V5LCBpbnQgcGFkX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHdjX0hhc2hUeXBlIGhhc2gpOworV09MRlNTTF9BUEkgaW50ICB3Y19Sc2FQU1NfVmVyaWZ5SW5saW5lKGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoLCBpbnQgbWdmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJzYUtleSoga2V5KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUnNhUFNTX1ZlcmlmeUlubGluZV9leChieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gd2NfSGFzaFR5cGUgaGFzaCwgaW50IG1nZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2FsdExlbiwgUnNhS2V5KiBrZXkpOworV09MRlNTTF9BUEkgaW50ICB3Y19Sc2FQU1NfVmVyaWZ5KGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgb3V0TGVuLCBlbnVtIHdjX0hhc2hUeXBlIGhhc2gsIGludCBtZ2YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnNhS2V5KiBrZXkpOworV09MRlNTTF9BUEkgaW50ICB3Y19Sc2FQU1NfVmVyaWZ5X2V4KGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sIGJ5dGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgb3V0TGVuLCBlbnVtIHdjX0hhc2hUeXBlIGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1nZiwgaW50IHNhbHRMZW4sIFJzYUtleSoga2V5KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUnNhUFNTX0NoZWNrUGFkZGluZyhjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiBzaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZDMyIHNpZ1N6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gd2NfSGFzaFR5cGUgaGFzaFR5cGUpOworV09MRlNTTF9BUEkgaW50ICB3Y19Sc2FQU1NfQ2hlY2tQYWRkaW5nX2V4KGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogc2lnLCB3b3JkMzIgc2lnU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2FsdExlbiwgaW50IGJpdHMpOworV09MRlNTTF9BUEkgaW50ICB3Y19Sc2FQU1NfVmVyaWZ5Q2hlY2tJbmxpbmUoYnl0ZSogaW4sIHdvcmQzMiBpbkxlbiwgYnl0ZSoqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBkaWdlc3QsIHdvcmQzMiBkaWdlbnRMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoLCBpbnQgbWdmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJzYUtleSoga2V5KTsKK1dPTEZTU0xfQVBJIGludCAgd2NfUnNhUFNTX1ZlcmlmeUNoZWNrKGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogb3V0LCB3b3JkMzIgb3V0TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGRpZ2VzdCwgd29yZDMyIGRpZ2VzdExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHdjX0hhc2hUeXBlIGhhc2gsIGludCBtZ2YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnNhS2V5KiBrZXkpOworCitXT0xGU1NMX0FQSSBpbnQgIHdjX1JzYUVuY3J5cHRTaXplKGNvbnN0IFJzYUtleSoga2V5KTsKKworI2lmICFkZWZpbmVkKEhBVkVfRklQUykgfHwgXAorCShkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiAoSEFWRV9GSVBTX1ZFUlNJT04gPj0gMikpCisvKiB0byBhdm9pZCBhc24gZHVwbGljYXRlIHN5bWJvbHMgQHdjX2ZpcHMgKi8KK1dPTEZTU0xfQVBJIGludCAgd2NfUnNhUHJpdmF0ZUtleURlY29kZShjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJzYUtleSosIHdvcmQzMik7CitXT0xGU1NMX0FQSSBpbnQgIHdjX1JzYVB1YmxpY0tleURlY29kZShjb25zdCBieXRlKiBpbnB1dCwgd29yZDMyKiBpbk91dElkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJzYUtleSosIHdvcmQzMik7CitXT0xGU1NMX0FQSSBpbnQgIHdjX1JzYVB1YmxpY0tleURlY29kZVJhdyhjb25zdCBieXRlKiBuLCB3b3JkMzIgblN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGUsIHdvcmQzMiBlU3osIFJzYUtleSoga2V5KTsKKyNpZmRlZiBXT0xGU1NMX0tFWV9HRU4KKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfUnNhS2V5VG9EZXIoUnNhS2V5KiwgYnl0ZSogb3V0cHV0LCB3b3JkMzIgaW5MZW4pOworI2VuZGlmCisKKyNpZmRlZiBXQ19SU0FfQkxJTkRJTkcKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfUnNhU2V0Uk5HKFJzYUtleSoga2V5LCBXQ19STkcqIHJuZyk7CisjZW5kaWYKKyNpZmRlZiBXQ19SU0FfTk9OQkxPQ0sKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfUnNhU2V0Tm9uQmxvY2soUnNhS2V5KiBrZXksIFJzYU5iKiBuYik7CisgICAgI2lmZGVmIFdDX1JTQV9OT05CTE9DS19USU1FCisgICAgV09MRlNTTF9BUEkgaW50IHdjX1JzYVNldE5vbkJsb2NrVGltZShSc2FLZXkqIGtleSwgd29yZDMyIG1heEJsb2NrVXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIgY3B1TUh6KTsKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvKgorICAgY2hvaWNlIG9mIHBhZGRpbmcgYWRkZWQgYWZ0ZXIgZmlwcywgc28gbm90IGF2YWlsYWJsZSB3aGVuIHVzaW5nIGZpcHMgUlNBCisgKi8KKworLyogTWFzayBHZW5lcmF0aW9uIEZ1bmN0aW9uIElkZW50aWZpZXJzICovCisjZGVmaW5lIFdDX01HRjFOT05FICAgMAorI2RlZmluZSBXQ19NR0YxU0hBMSAgIDI2CisjZGVmaW5lIFdDX01HRjFTSEEyMjQgNAorI2RlZmluZSBXQ19NR0YxU0hBMjU2IDEKKyNkZWZpbmUgV0NfTUdGMVNIQTM4NCAyCisjZGVmaW5lIFdDX01HRjFTSEE1MTIgMworCisvKiBQYWRkaW5nIHR5cGVzICovCisjZGVmaW5lIFdDX1JTQV9QS0NTVjE1X1BBRCAwCisjZGVmaW5lIFdDX1JTQV9PQUVQX1BBRCAgICAxCisjZGVmaW5lIFdDX1JTQV9QU1NfUEFEICAgICAyCisjZGVmaW5lIFdDX1JTQV9OT19QQUQgICAgICAzCisKK1dPTEZTU0xfQVBJIGludCAgd2NfUnNhUHVibGljRW5jcnlwdF9leChjb25zdCBieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgd29yZDMyIG91dExlbiwgUnNhS2V5KiBrZXksIFdDX1JORyogcm5nLCBpbnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICBlbnVtIHdjX0hhc2hUeXBlIGhhc2gsIGludCBtZ2YsIGJ5dGUqIGxhYmVsLCB3b3JkMzIgbGFibGVTeik7CitXT0xGU1NMX0FQSSBpbnQgIHdjX1JzYVByaXZhdGVEZWNyeXB0X2V4KGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5MZW4sCisgICAgICAgICAgICAgICAgICAgYnl0ZSogb3V0LCB3b3JkMzIgb3V0TGVuLCBSc2FLZXkqIGtleSwgaW50IHR5cGUsCisgICAgICAgICAgICAgICAgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoLCBpbnQgbWdmLCBieXRlKiBsYWJlbCwgd29yZDMyIGxhYmxlU3opOworV09MRlNTTF9BUEkgaW50ICB3Y19Sc2FQcml2YXRlRGVjcnlwdElubGluZV9leChieXRlKiBpbiwgd29yZDMyIGluTGVuLAorICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqKiBvdXQsIFJzYUtleSoga2V5LCBpbnQgdHlwZSwgZW51bSB3Y19IYXNoVHlwZSBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgIGludCBtZ2YsIGJ5dGUqIGxhYmVsLCB3b3JkMzIgbGFibGVTeik7CisjaWYgZGVmaW5lZChXQ19SU0FfRElSRUNUKSB8fCBkZWZpbmVkKFdDX1JTQV9OT19QQURESU5HKQorV09MRlNTTF9BUEkgaW50IHdjX1JzYURpcmVjdChieXRlKiBpbiwgd29yZDMyIGluTGVuLCBieXRlKiBvdXQsIHdvcmQzMiogb3V0U3osCisgICAgICAgICAgICAgICAgICAgUnNhS2V5KiBrZXksIGludCB0eXBlLCBXQ19STkcqIHJuZyk7CisjZW5kaWYKKworI2VuZGlmIC8qIEhBVkVfRklQUyAqLworCitXT0xGU1NMX0FQSSBpbnQgIHdjX1JzYUZsYXR0ZW5QdWJsaWNLZXkoUnNhS2V5KiwgYnl0ZSosIHdvcmQzMiosIGJ5dGUqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMzIqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19Sc2FFeHBvcnRLZXkoUnNhS2V5KiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIGUsIHdvcmQzMiogZVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBuLCB3b3JkMzIqIG5TeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSogZCwgd29yZDMyKiBkU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIHAsIHdvcmQzMiogcFN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBxLCB3b3JkMzIqIHFTeik7CisKK1dPTEZTU0xfQVBJIGludCB3Y19Sc2FLZXlUb1B1YmxpY0RlcihSc2FLZXkqLCBieXRlKiBvdXRwdXQsIHdvcmQzMiBpbkxlbik7CisKKyNpZmRlZiBXT0xGU1NMX0tFWV9HRU4KKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfTWFrZVJzYUtleShSc2FLZXkqIGtleSwgaW50IHNpemUsIGxvbmcgZSwgV0NfUk5HKiBybmcpOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19DaGVja1Byb2JhYmxlUHJpbWVfZXgoY29uc3QgYnl0ZSogcCwgd29yZDMyIHBTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHEsIHdvcmQzMiBxU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBlLCB3b3JkMzIgZVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5sZW4sIGludCogaXNQcmltZSwgV0NfUk5HKiBybmcpOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19DaGVja1Byb2JhYmxlUHJpbWUoY29uc3QgYnl0ZSogcCwgd29yZDMyIHBTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIHEsIHdvcmQzMiBxU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBlLCB3b3JkMzIgZVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5sZW4sIGludCogaXNQcmltZSk7CisjZW5kaWYKKworV09MRlNTTF9MT0NBTCBpbnQgd2NfUnNhUGFkX2V4KGNvbnN0IGJ5dGUqIGlucHV0LCB3b3JkMzIgaW5wdXRMZW4sIGJ5dGUqIHBrY3NCbG9jaywKKyAgICAgICAgd29yZDMyIHBrY3NCbG9ja0xlbiwgYnl0ZSBwYWRWYWx1ZSwgV0NfUk5HKiBybmcsIGludCBwYWRUeXBlLAorICAgICAgICBlbnVtIHdjX0hhc2hUeXBlIGhUeXBlLCBpbnQgbWdmLCBieXRlKiBvcHRMYWJlbCwgd29yZDMyIGxhYmVsTGVuLAorICAgICAgICBpbnQgc2FsdExlbiwgaW50IGJpdHMsIHZvaWQqIGhlYXApOworV09MRlNTTF9MT0NBTCBpbnQgd2NfUnNhVW5QYWRfZXgoYnl0ZSogcGtjc0Jsb2NrLCB3b3JkMzIgcGtjc0Jsb2NrTGVuLCBieXRlKiogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlIHBhZFZhbHVlLCBpbnQgcGFkVHlwZSwgZW51bSB3Y19IYXNoVHlwZSBoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1nZiwgYnl0ZSogb3B0TGFiZWwsIHdvcmQzMiBsYWJlbExlbiwgaW50IHNhbHRMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzLCB2b2lkKiBoZWFwKTsKKworV09MRlNTTF9MT0NBTCBpbnQgd2NfaGFzaDJtZ2YoZW51bSB3Y19IYXNoVHlwZSBoVHlwZSk7CisKKyNlbmRpZiAvKiBIQVZFX1VTRVJfUlNBICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBOT19SU0EgKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX1JTQV9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9zYWtrZS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3Nha2tlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmYzMxNAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9zYWtrZS5oCkBAIC0wLDAgKzEsMjI4IEBACisvKiBzYWtrZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvc2Fra2UuaAorKi8KKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfU0FLS0VfSAorI2RlZmluZSBXT0xGX0NSWVBUX1NBS0tFX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZmRlZiBXT0xGQ1JZUFRfSEFWRV9TQUtLRQorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaW50ZWdlci5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2VjYy5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2hhc2guaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9obWFjLmg+CisKKyNkZWZpbmUgV09MRkNSWVBUX1NBS0tFX0tNUworI2RlZmluZSBXT0xGQ1JZUFRfU0FLS0VfQ0xJRU5UCisKKyNkZWZpbmUgU0FLS0VfSURfTUFYX1NJWkUgICAgICAgMTI4CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGxvb3BzIG9mIGF0dGVtcHRpbmcgdG8gZ2VuZXJhdGUgYSBrZXkuICovCisjaWZuZGVmIFNBS0tFX01BWF9HRU5fQ09VTlQKKyAgICAjZGVmaW5lIFNBS0tFX01BWF9HRU5fQ09VTlQgICAgIDEwCisjZW5kaWYKKworCisvKiogTVAgaW50ZWdlciBpbiBwcm9qZWN0aXZlIGZvcm0uICovCit0eXBlZGVmIGVjY19wb2ludCBtcF9wcm9qOworCisvKiogU0FLS0UgRUNDIHBhcmFtZXRlcnMgaW4gdXNhYmxlIGZvcm1hdC4gKi8KK3R5cGVkZWYgc3RydWN0IFNha2tlS2V5UGFyYW1zIHsKKyAgICAvKiogUHJpbWUgYXMgYW4gTVAgaW50ZWdlci4gKi8KKyAgICBtcF9pbnQgcHJpbWU7CisgICAgLyoqIFEgKG9yZGVyKSBhcyBhbiBNUCBpbnRlZ2VyLiAqLworICAgIG1wX2ludCBxOworICAgIC8qKiBHIChwYWlyaW5nIGJhc2UpIGFzIGFuIE1QIGludGVnZXIuICovCisgICAgbXBfaW50IGc7CisgICAgLyoqIFRlbXBvcmFyeSBNUCBpbnRlZ2VyIHVzZWQgZHVyaW5nIG9wZXJhdGlvbnMuICovCisgICAgbXBfaW50IGE7CisgICAgLyoqIEJhc2UgcG9pbnQgZm9yIGVsbGlwdGljIGN1cnZlIG9wZXJhdGlvbnMgYXMgYW4gRUNDIHBvaW50LiAqLworICAgIGVjY19wb2ludCogYmFzZTsKKworICAgIC8qKiBCaXQgaW5kaWNhdGUgcHJpbWUgaXMgc2V0IGFzIGFuIE1QIGludGVnZXIgaW4gU0FLS0Uga2V5LiAqLworICAgIGJ5dGUgaGF2ZVByaW1lOjE7CisgICAgLyoqIEJpdCBpbmRpY2F0ZXMgcSAob3JkZXIpIGlzIHNldCBhcyBhbiBNUCBpbnRlZ2VyIGluIFNBS0tFIGtleS4gKi8KKyAgICBieXRlIGhhdmVROjE7CisgICAgLyoqIEJpdCBpbmRpY2F0ZXMgZyAocGFpcmluZyBiYXNlKSBpcyBzZXQgYXMgYW4gTVAgaW50ZWdlciBpbiBTQUtLRSBrZXkuICovCisgICAgYnl0ZSBoYXZlRzoxOworICAgIC8qKiBCaXQgaW5kaWNhdGVzIGEgaXMgc2V0IGFzIGFuIE1QIGludGVnZXIgaW4gU0FLS0Uga2V5LiAqLworICAgIGJ5dGUgaGF2ZUE6MTsKKyAgICAvKiogQml0IGluZGljYXRlcyBiYXNlIHBvaW50IGlzIHNldCBhcyBhbiBFQ0MgcG9pbnQgaW4gU0FLS0Uga2V5LiAqLworICAgIGJ5dGUgaGF2ZUJhc2U6MTsKK30gU2Fra2VLZXlQYXJhbXM7CisKKy8qKiBUZW1wb3JhcnkgdmFsdWVzIHRvIHVzZSBpbiBTQUtLRSBjYWxjdWxhdGlvbnMuICovCit0eXBlZGVmIHN0cnVjdCBTYWtrZUtleVRtcCB7CisgICAgLyoqIFRlbXBvcmFyeSBNUCBpbnRlZ2VyIHVzZWQgZHVyaW5nIG9wZXJhdGlvbnMuICovCisgICAgbXBfaW50IG0xOworICAgIC8qKiBUZW1wb3JhcnkgTVAgaW50ZWdlciB1c2VkIGR1cmluZyBvcGVyYXRpb25zLiAqLworICAgIG1wX2ludCBtMjsKKworI2lmZGVmIFdPTEZDUllQVF9TQUtLRV9DTElFTlQKKyAgICAvKiogVGVtcG9yYXJ5IGVsbGlwdGljIGN1cnZlIHBvaW50IGZvciB1c2UgaW4gb3BlcmF0aW9ucy4gKi8KKyAgICBlY2NfcG9pbnQqIHAxOworICAgIC8qKiBUZW1wb3JhcnkgZWxsaXB0aWMgY3VydmUgcG9pbnQgZm9yIHVzZSBpbiBvcGVyYXRpb25zLiAqLworICAgIGVjY19wb2ludCogcDI7CisgICAgLyoqIFRlbXBvcmFyeSBNUCBwcm9qZWN0aXZlIGludGVnZXIgZm9yIHVzZSBpbiBvcGVyYXRpb25zLiAqLworICAgIG1wX3Byb2oqIHAzOworI2VuZGlmCit9IFNha2tlS2V5VG1wOworCisjaWZkZWYgV09MRkNSWVBUX1NBS0tFX0NMSUVOVAorLyoqIFNBS0tFIGRhdGEgZm9yIHRoZSBpbnRlcm1lZGlhdGUgcG9pbnQgSS4gKi8KK3R5cGVkZWYgc3RydWN0IFNha2tlS2V5UG9pbnRJIHsKKyAgICAvKiogVGVtcG9yYXJ5IGVsbGlwdGljIGN1cnZlIHBvaW50IGZvciB1c2UgaW4gb3BlcmF0aW9ucy4gKi8KKyAgICBlY2NfcG9pbnQqIGk7CisgICAgLyoqIFRhYmxlIGFzc29jaWF0ZWQgd2l0aCBwb2ludCBJLiAqLworICAgIGJ5dGUqIHRhYmxlOworICAgIC8qKiBMZW5ndGggb2YgdGFibGUgKi8KKyAgICBpbnQgdGFibGVMZW47CisgICAgLyoqIElkZW50aXR5IGFzc29jaWF0ZWQgd2l0aCBwb2ludCBJLiAqLworICAgIGJ5dGUgaWRbU0FLS0VfSURfTUFYX1NJWkVdOworICAgIC8qKiBTaXplIG9mIGlkZW50aXR5IGFzc29jaWF0ZWQgd2l0aCBwb2ludCBJLiAqLworICAgIHdvcmQxNiBpZFN6OworfSBTYWtrZUtleVBvaW50STsKKworLyoqIFNBS0tFIGRhdGEgZm9yIHRoZSBSZWNlaXZlciBTZWNyZXQgS2V5IChSU0spLiAqLwordHlwZWRlZiBzdHJ1Y3QgU2Fra2VLZXlSc2sgeworICAgIC8qKiBSU0sgKFJlY2VpdmVyIFNlY3JldCBLZXkpLiAqLworICAgIGVjY19wb2ludCogcnNrOworICAgIC8qKiBUYWJsZSBhc3NvY2lhdGVkIHdpdGggcG9pbnQgSS4gKi8KKyAgICBieXRlKiB0YWJsZTsKKyAgICAvKiogTGVuZ3RoIG9mIHRhYmxlICovCisgICAgaW50IHRhYmxlTGVuOworICAgIC8qKiBJbmRpY2F0ZXMgd2hldGhlciBhbiBSU0sgdmFsdWUgaGFzIGJlZW4gc2V0LiAqLworICAgIGJ5dGUgc2V0OjE7Cit9IFNha2tlS2V5UnNrOworI2VuZGlmCisKKy8qKgorICogU0FLS0Uga2V5LgorICovCit0eXBlZGVmIHN0cnVjdCBTYWtrZUtleSB7CisgICAgLyoqIEVDQyBrZXkgdG8gcGVyZm9ybSBlbGxpcHRpYyBjdXJ2ZSBvcGVyYXRpb25zIHdpdGguICovCisgICAgZWNjX2tleSBlY2M7CisKKyAgICAvKiogRUNDIHBhcmFtZXRlciBpbiBmb3JtcyB0aGF0IGNhbiBiZSB1c2VkIGluIGNvbXB1dGF0aW9uLiAqLworICAgIFNha2tlS2V5UGFyYW1zIHBhcmFtczsKKyAgICAvKiogVGVtcG9yYXJpZXMgdXNlZCBkdXJpbmcgY2FsY3VsYXRpb25zLiAqLworICAgIFNha2tlS2V5VG1wIHRtcDsKKworI2lmZGVmIFdPTEZDUllQVF9TQUtLRV9DTElFTlQKKyAgICAvKiogRGF0YSByZWxhdGluZyB0byB0aGUgUlNLIChSZWNlaXZlciBTZWNyZXQgS2V5KS4gKi8KKyAgICBTYWtrZUtleVJzayByc2s7CisgICAgLyoqIElkZW50aXR5IHRvIHBlcmZvcm0gb3BlcmF0aW9ucyB3aXRoLiAqLworICAgIGJ5dGUgaWRbU0FLS0VfSURfTUFYX1NJWkVdOworICAgIC8qKiBTaXplIG9mIGlkZW50aXR5IGluIGJ5dGVzLiAqLworICAgIHdvcmQxNiBpZFN6OworCisgICAgLyoqIERhdGEgcmVsYXRpbmcgdG8gdGhlIGludGVybWVkaWF0ZSBwb2ludCBJLiAqLworICAgIFNha2tlS2V5UG9pbnRJIGk7CisKKyAgICAvKiogR2VuZXJpYyBoYXNoIGFsZ29yaXRobSBvYmplY3QuICovCisgICAgd2NfSGFzaEFsZyBoYXNoOworICAgIC8qKiBUZW1wb3JhcnkgYnVmZmVyIGZvciB1c2UgaW4gb3BlcmF0aW9ucy4gKi8KKyAgICBieXRlIGRhdGFbKE1BWF9FQ0NfQllURVMgKiAyKSArIDFdOworI2VuZGlmCisKKyAgICAvKiogSGVhcCBoaW50IGZvciBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLiAqLworICAgIHZvaWQqIGhlYXA7CisKKyAgICAvKiogQml0IGluZGljYXRlcyBaLCBwdWJsaWMga2V5LCBpcyBpbiBtb250Z29tZXJ5IGZvcm0uICovCisgICAgYnl0ZSB6TW9udDoxOworICAgIC8qKiBCaXQgaW5kaWNhdGUgTVAgaW50ZWdlcnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiAqLworICAgIGJ5dGUgbXBJbml0OjE7Cit9IFNha2tlS2V5OworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdFNha2tlS2V5KFNha2tlS2V5KiBrZXksIHZvaWQqIGhlYXAsIGludCBkZXZJZCk7CitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdFNha2tlS2V5X2V4KFNha2tlS2V5KiBrZXksIGludCBrZXlTaXplLCBpbnQgY3VydmVJZCwKKyAgICAgICAgdm9pZCogaGVhcCwgaW50IGRldklkKTsKK1dPTEZTU0xfQVBJIHZvaWQgd2NfRnJlZVNha2tlS2V5KFNha2tlS2V5KiBrZXkpOworCitXT0xGU1NMX0FQSSBpbnQgd2NfTWFrZVNha2tlS2V5KFNha2tlS2V5KiBrZXksIFdDX1JORyogcm5nKTsKK1dPTEZTU0xfQVBJIGludCB3Y19NYWtlU2Fra2VQdWJsaWNLZXkoU2Fra2VLZXkqIGtleSwgZWNjX3BvaW50KiBwdWIpOworCitXT0xGU1NMX0FQSSBpbnQgd2NfTWFrZVNha2tlUnNrKFNha2tlS2V5KiBrZXksIGNvbnN0IGJ5dGUqIGlkLCB3b3JkMTYgaWRTeiwKKyAgICAgICAgZWNjX3BvaW50KiByc2spOworV09MRlNTTF9BUEkgaW50IHdjX1ZhbGlkYXRlU2Fra2VSc2soU2Fra2VLZXkqIGtleSwgY29uc3QgYnl0ZSogaWQsIHdvcmQxNiBpZFN6LAorICAgICAgICBlY2NfcG9pbnQqIHJzaywgaW50KiB2YWxpZCk7CisKK1dPTEZTU0xfQVBJIGludCB3Y19FeHBvcnRTYWtrZUtleShTYWtrZUtleSoga2V5LCBieXRlKiBkYXRhLCB3b3JkMzIqIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19JbXBvcnRTYWtrZUtleShTYWtrZUtleSoga2V5LCBjb25zdCBieXRlKiBkYXRhLCB3b3JkMzIgc3opOworV09MRlNTTF9BUEkgaW50IHdjX0V4cG9ydFNha2tlUHJpdmF0ZUtleShTYWtrZUtleSoga2V5LCBieXRlKiBkYXRhLCB3b3JkMzIqIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19JbXBvcnRTYWtrZVByaXZhdGVLZXkoU2Fra2VLZXkqIGtleSwgY29uc3QgYnl0ZSogZGF0YSwKKyAgICAgICAgd29yZDMyIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19FeHBvcnRTYWtrZVB1YmxpY0tleShTYWtrZUtleSoga2V5LCBieXRlKiBkYXRhLAorICAgICAgICB3b3JkMzIqIHN6LCBpbnQgcmF3KTsKK1dPTEZTU0xfQVBJIGludCB3Y19JbXBvcnRTYWtrZVB1YmxpY0tleShTYWtrZUtleSoga2V5LCBjb25zdCBieXRlKiBkYXRhLAorICAgICAgICB3b3JkMzIgc3osIGludCB0cnVzdGVkKTsKKworV09MRlNTTF9BUEkgaW50IHdjX0VuY29kZVNha2tlUnNrKGNvbnN0IFNha2tlS2V5KiBrZXksIGVjY19wb2ludCogcnNrLAorICAgICAgICBieXRlKiBvdXQsIHdvcmQzMiogc3osIGludCByYXcpOworV09MRlNTTF9BUEkgaW50IHdjX0RlY29kZVNha2tlUnNrKGNvbnN0IFNha2tlS2V5KiBrZXksIGNvbnN0IGJ5dGUqIGRhdGEsCisgICAgICAgIHdvcmQzMiBzeiwgZWNjX3BvaW50KiByc2spOworV09MRlNTTF9BUEkgaW50IHdjX0ltcG9ydFNha2tlUnNrKFNha2tlS2V5KiBrZXksIGNvbnN0IGJ5dGUqIGRhdGEsIHdvcmQzMiBzeik7CisKK1dPTEZTU0xfQVBJIGludCB3Y19HZXRTYWtrZUF1dGhTaXplKFNha2tlS2V5KiBrZXksIHdvcmQxNiogYXV0aFN6KTsKKworV09MRlNTTF9BUEkgaW50IHdjX1NldFNha2tlSWRlbnRpdHkoU2Fra2VLZXkqIGtleSwgY29uc3QgYnl0ZSogaWQsIHdvcmQxNiBpZFN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19NYWtlU2Fra2VQb2ludEkoU2Fra2VLZXkqIGtleSwgY29uc3QgYnl0ZSogaWQsIHdvcmQxNiBpZFN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19HZXRTYWtrZVBvaW50SShTYWtrZUtleSoga2V5LCBieXRlKiBkYXRhLCB3b3JkMzIqIHN6KTsKK1dPTEZTU0xfQVBJIGludCB3Y19TZXRTYWtrZVBvaW50SShTYWtrZUtleSoga2V5LCBjb25zdCBieXRlKiBpZCwgd29yZDE2IGlkU3osCisgICAgICAgIGNvbnN0IGJ5dGUqIGRhdGEsIHdvcmQzMiBzeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfR2VuZXJhdGVTYWtrZVBvaW50SVRhYmxlKFNha2tlS2V5KiBrZXksIGJ5dGUqIHRhYmxlLAorICAgICAgICB3b3JkMzIqIGxlbik7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2V0U2Fra2VQb2ludElUYWJsZShTYWtrZUtleSoga2V5LCBieXRlKiB0YWJsZSwgd29yZDMyIGxlbik7CitXT0xGU1NMX0FQSSBpbnQgd2NfQ2xlYXJTYWtrZVBvaW50SVRhYmxlKFNha2tlS2V5KiBrZXkpOworCitXT0xGU1NMX0FQSSBpbnQgd2NfTWFrZVNha2tlRW5jYXBzdWxhdGVkU1NWKFNha2tlS2V5KiBrZXksCisgICAgICAgIGVudW0gd2NfSGFzaFR5cGUgaGFzaFR5cGUsIGJ5dGUqIHNzdiwgd29yZDE2IHNzdlN6LCBieXRlKiBhdXRoLAorICAgICAgICB3b3JkMTYqIGF1dGhTeik7CisKK1dPTEZTU0xfQVBJIGludCB3Y19HZW5lcmF0ZVNha2tlUnNrVGFibGUoY29uc3QgU2Fra2VLZXkqIGtleSwKKyAgICAgICAgY29uc3QgZWNjX3BvaW50KiByc2ssIGJ5dGUqIHRhYmxlLCB3b3JkMzIqIGxlbik7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2V0U2Fra2VSc2soU2Fra2VLZXkqIGtleSwgY29uc3QgZWNjX3BvaW50KiByc2ssIGJ5dGUqIHRhYmxlLAorICAgICAgICB3b3JkMzIgbGVuKTsKKworV09MRlNTTF9BUEkgaW50IHdjX0dlbmVyYXRlU2Fra2VTU1YoU2Fra2VLZXkqIGtleSwgV0NfUk5HKiBybmcsIGJ5dGUqIHNzdiwKKyAgICAgICAgd29yZDE2KiBzc3ZTeik7CitXT0xGU1NMX0FQSSBpbnQgd2NfRGVyaXZlU2Fra2VTU1YoU2Fra2VLZXkqIGtleSwgZW51bSB3Y19IYXNoVHlwZSBoYXNoVHlwZSwKKyAgICAgICAgYnl0ZSogc3N2LCB3b3JkMTYgc3N2U3osIGNvbnN0IGJ5dGUqIGF1dGgsCisgICAgICAgIHdvcmQxNiBhdXRoU3opOworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogV09MRkNSWVBUX0hBVkVfU0FLS0UgKi8KKworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfU0FLS0VfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvc2V0dGluZ3MuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhM2RmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvc2V0dGluZ3MuaApAQCAtMCwwICsxLDI0OTQgQEAKKy8qIHNldHRpbmdzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKy8qIFBsYWNlIE9TIHNwZWNpZmljIHByZXByb2Nlc3NvciBmbGFncywgZGVmaW5lcywgaW5jbHVkZXMgaGVyZSwgd2lsbCBiZQorICAgaW5jbHVkZWQgaW50byBldmVyeSBmaWxlIGJlY2F1c2UgdHlwZXMuaCBpbmNsdWRlcyBpdCAqLworCisKKyNpZm5kZWYgV09MRl9DUllQVF9TRVRUSU5HU19ICisjZGVmaW5lIFdPTEZfQ1JZUFRfU0VUVElOR1NfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBUaGlzIGZsYWcgYWxsb3dzIHdvbGZTU0wgdG8gaW5jbHVkZSBvcHRpb25zLmggaW5zdGVhZCBvZiBoYXZpbmcgY2xpZW50CisgKiBwcm9qZWN0cyBkbyBpdCB0aGVtc2VsdmVzLiBUaGlzIHNob3VsZCAqTkVWRVIqIGJlIGRlZmluZWQgd2hlbiBidWlsZGluZworICogd29sZlNTTCBhcyBpdCBjYW4gY2F1c2UgaGFyZCB0byBkZWJ1ZyBwcm9ibGVtcy4gKi8KKyNpZmRlZiBFWFRFUk5BTF9PUFRTX09QRU5WUE4KKyNpbmNsdWRlIDx3b2xmc3NsL29wdGlvbnMuaD4KKyNlbmRpZgorCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIElQSE9ORSAqLworLyogI2RlZmluZSBJUEhPTkUgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBUaHJlYWRYICovCisvKiAjZGVmaW5lIFRIUkVBRFggKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBNaWNyaXVtIHVDL09TLUlJSSAqLworLyogI2RlZmluZSBNSUNSSVVNICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgRGVvcyBSVE9TKi8KKy8qICNkZWZpbmUgV09MRlNTTF9ERU9TKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBNYmVkICovCisvKiAjZGVmaW5lIE1CRUQgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBNaWNyb2NoaXAgUElDMzIgZXRoZXJuZXQgc3RhcnRlciBraXQgKi8KKy8qICNkZWZpbmUgTUlDUk9DSElQX1BJQzMyICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgTWljcm9jaGlwIFRDUC9JUCBzdGFjaywgdmVyc2lvbiA1ICovCisvKiAjZGVmaW5lIE1JQ1JPQ0hJUF9UQ1BJUF9WNSAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIE1pY3JvY2hpcCBUQ1AvSVAgc3RhY2ssIHZlcnNpb24gNiBvciBsYXRlciAqLworLyogI2RlZmluZSBNSUNST0NISVBfVENQSVAgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBhYm92ZSBNaWNyb2NoaXAgVENQL0lQIGRlZmluZXMgd2l0aCBCU0QgQVBJICovCisvKiAjZGVmaW5lIE1JQ1JPQ0hJUF9UQ1BJUF9CU0RfQVBJICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgUElDMzJNWiBDcnlwdG8gRW5naW5lICovCisvKiAjZGVmaW5lIFdPTEZTU0xfTUlDUk9DSElQX1BJQzMyTVogKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBGcmVlUlRPUyAqLworLyogI2RlZmluZSBGUkVFUlRPUyAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIEZyZWVSVE9TKyBUQ1AgKi8KKy8qICNkZWZpbmUgRlJFRVJUT1NfVENQICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgRnJlZVJUT1MgV2luZG93cyBTaW11bGF0b3IgKi8KKy8qICNkZWZpbmUgRlJFRVJUT1NfV0lOU0lNICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgUlRJUCAqLworLyogI2RlZmluZSBFQlNORVQgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBsd2lwICovCisvKiAjZGVmaW5lIFdPTEZTU0xfTFdJUCAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIHdvbGZTU0wgZm9yIGEgZ2FtZSBjb25zb2xlICovCisvKiAjZGVmaW5lIFdPTEZTU0xfR0FNRV9CVUlMRCAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIHdvbGZTU0wgZm9yIExTUiAqLworLyogI2RlZmluZSBXT0xGU1NMX0xTUiAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciBGcmVlc2NhbGUgQ2xhc3NpYyBNUVggdmVyc2lvbiA1LjAgKi8KKy8qICNkZWZpbmUgRlJFRVNDQUxFX01RWF81XzAgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBmb3IgRnJlZXNjYWxlIENsYXNzaWMgTVFYIHZlcnNpb24gNC4wICovCisvKiAjZGVmaW5lIEZSRUVTQ0FMRV9NUVhfNF8wICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgZm9yIEZyZWVzY2FsZSBDbGFzc2ljIE1RWC9SVENTL01GUyAqLworLyogI2RlZmluZSBGUkVFU0NBTEVfTVFYICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgZm9yIEZyZWVzY2FsZSBLU0RLIE1RWC9SVENTL01GUyAqLworLyogI2RlZmluZSBGUkVFU0NBTEVfS1NES19NUVggKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBmb3IgRnJlZXNjYWxlIEtTREsgQmFyZSBNZXRhbCAqLworLyogI2RlZmluZSBGUkVFU0NBTEVfS1NES19CTSAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciBGcmVlc2NhbGUgS1NESyBGcmVlUlRPUywgKi8KKy8qIChvbGQgbmFtZSBGUkVFU0NBTEVfRlJFRV9SVE9TKSAqLworLyogI2RlZmluZSBGUkVFU0NBTEVfS1NES19GUkVFUlRPUyAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIFNUTTMyRjIgKi8KKy8qICNkZWZpbmUgV09MRlNTTF9TVE0zMkYyICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgU1RNMzJGNCAqLworLyogI2RlZmluZSBXT0xGU1NMX1NUTTMyRjQgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBTVE0zMkZMICovCisvKiAjZGVmaW5lIFdPTEZTU0xfU1RNMzJGTCAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIFNUTTMyRjcgKi8KKy8qICNkZWZpbmUgV09MRlNTTF9TVE0zMkY3ICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgUUwgU0VQIHNldHRpbmdzICovCisvKiAjZGVmaW5lIFdPTEZTU0xfUUwgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBmb3IgRVJPQUQgKi8KKy8qICNkZWZpbmUgV09MRlNTTF9FUk9BRCAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciBJQVIgRVdBUk0gKi8KKy8qICNkZWZpbmUgV09MRlNTTF9JQVJfQVJNICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgZm9yIFJvd2xleSBDcm9zc1dvcmtzIEFSTSAqLworLyogI2RlZmluZSBXT0xGU1NMX1JPV0xFWV9BUk0gKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBUSS1SVE9TIHNldHRpbmdzICovCisvKiAjZGVmaW5lIFdPTEZTU0xfVElSVE9TICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgd2l0aCBQaWNvVENQICovCisvKiAjZGVmaW5lIFdPTEZTU0xfUElDT1RDUCAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciBQaWNvVENQIGRlbW8gYnVuZGxlICovCisvKiAjZGVmaW5lIFdPTEZTU0xfUElDT1RDUF9ERU1PICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgZm9yIHVJVFJPTjQgICovCisvKiAjZGVmaW5lIFdPTEZTU0xfdUlUUk9ONCAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciB1VC1LZXJuZWwgKi8KKy8qICNkZWZpbmUgV09MRlNTTF91VEtFUk5FTDIgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBNYXggU3RyZW5ndGggYnVpbGQgKi8KKy8qICNkZWZpbmUgV09MRlNTTF9NQVhfU1RSRU5HVEggKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBmb3IgVnhXb3JrcyAqLworLyogI2RlZmluZSBXT0xGU1NMX1ZYV09SS1MgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBmb3IgTm9yZGljIG5SRjV4IHBsYXRmb3JtICovCisvKiAjZGVmaW5lIFdPTEZTU0xfTlJGNXggKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSB0byBlbmFibGUgZGVwcmVjYXRlZCBsZXNzIHNlY3VyZSBzdGF0aWMgREggc3VpdGVzICovCisvKiAjZGVmaW5lIFdPTEZTU0xfU1RBVElDX0RIICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgdG8gZW5hYmxlIGRlcHJlY2F0ZWQgbGVzcyBzZWN1cmUgc3RhdGljIFJTQSBzdWl0ZXMgKi8KKy8qICNkZWZpbmUgV09MRlNTTF9TVEFUSUNfUlNBICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgZm9yIEFSRFVJTk8gKi8KKy8qIFVuY29tbWVudCBib3RoIGxpbmVzIGlmIGJ1aWxkaW5nIGZvciBBUkRVSU5PIG9uIElOVEVMX0dBTElMRU8gKi8KKy8qICNkZWZpbmUgV09MRlNTTF9BUkRVSU5PICovCisvKiAjZGVmaW5lIElOVEVMX0dBTElMRU8gKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSB0byBlbmFibGUgYXN5bmNocm9ub3VzIGNyeXB0byBXQ19QRU5ESU5HX0UgKi8KKy8qICNkZWZpbmUgV09MRlNTTF9BU1lOQ19DUllQVCAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciB1VGFza2VyICovCisvKiAjZGVmaW5lIFdPTEZTU0xfVVRBU0tFUiAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciBlbWJPUyAqLworLyogI2RlZmluZSBXT0xGU1NMX0VNQk9TICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgZm9yIFJJT1QtT1MgKi8KKy8qICNkZWZpbmUgV09MRlNTTF9SSU9UX09TICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgZm9yIHVzaW5nIFhJTElOWCBoYXJkZW5lZCBjcnlwdG8gKi8KKy8qICNkZWZpbmUgV09MRlNTTF9YSUxJTlhfQ1JZUFQgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBmb3IgdXNpbmcgWElMSU5YICovCisvKiAjZGVmaW5lIFdPTEZTU0xfWElMSU5YICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgYnVpbGRpbmcgZm9yIFdJQ0VEIFN0dWRpby4gKi8KKy8qICNkZWZpbmUgV09MRlNTTF9XSUNFRCAgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBmb3IgTnVjbGV1cyAxLjIgKi8KKy8qICNkZWZpbmUgV09MRlNTTF9OVUNMRVVTXzFfMiAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciB1c2luZyBBcGFjaGUgbXluZXd0ICovCisvKiAjZGVmaW5lIFdPTEZTU0xfQVBBQ0hFX01ZTkVXVCAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciB1c2luZyBFU1AtSURGICovCisvKiAjZGVmaW5lIFdPTEZTU0xfRVNQSURGICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgRXNwcmVzc2lmIEVTUDMyLVdST09NLTMyICovCisvKiAjZGVmaW5lIFdPTEZTU0xfRVNQV1JPT00zMiAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIEVzcHJlc3NpZiBFU1AzMi1XUk9PTS0zMlNFICovCisvKiAjZGVmaW5lIFdPTEZTU0xfRVNQV1JPT00zMlNFICovCisKKy8qIFVuY29tbWVudCBuZXh0IGxpbmUgaWYgdXNpbmcgQVJNIENSWVBUT0NFTEwqLworLyogI2RlZmluZSBXT0xGU1NMX0NSWVBUT0NFTEwgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBSRU5FU0FTIFRTSVAgKi8KKy8qICNkZWZpbmUgV09MRlNTTF9SRU5FU0FTX1RTSVAgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiB1c2luZyBSRU5FU0FTIFJYNjROICovCisvKiAjZGVmaW5lIFdPTEZTU0xfUkVORVNBU19SWDY1TiAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIHVzaW5nIFNvbGFyaXMgT1MqLworLyogI2RlZmluZSBXT0xGU1NMX1NPTEFSSVMgKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBmb3IgTGludXggS2VybmVsIE1vZHVsZSAqLworLyogI2RlZmluZSBXT0xGU1NMX0xJTlVYS00gKi8KKworLyogVW5jb21tZW50IG5leHQgbGluZSBpZiBidWlsZGluZyBmb3IgZGV2a2l0UHJvICovCisvKiAjZGVmaW5lIERFVktJVFBSTyAqLworCisvKiBVbmNvbW1lbnQgbmV4dCBsaW5lIGlmIGJ1aWxkaW5nIGZvciBEb2xwaGluIEVtdWxhdG9yICovCisvKiAjZGVmaW5lIERPTFBISU5fRU1VTEFUT1IgKi8KKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3Zpc2liaWxpdHkuaD4KKworI2lmZGVmIFdPTEZTU0xfVVNFUl9TRVRUSU5HUworICAgICNpbmNsdWRlICJ1c2VyX3NldHRpbmdzLmgiCisjZWxpZiBkZWZpbmVkKFVTRV9IQUxfRFJJVkVSKSAmJiAhZGVmaW5lZChIQVZFX0NPTkZJR19IKQorICAgIC8qIFNUTSBDb25maWd1cmF0aW9uIEZpbGUgKGdlbmVyYXRlZCBieSBDdWJlTVgpICovCisgICAgI2luY2x1ZGUgIndvbGZTU0wuSS1DVUJFLXdvbGZTU0xfY29uZi5oIgorI2VuZGlmCisKKy8qIG1ha2Ugc3VyZSBvbGQgUk5HIG5hbWUgaXMgdXNlZCB3aXRoIENUYW9DcnlwdCBGSVBTICovCisjaWZkZWYgSEFWRV9GSVBTCisgICAgI2lmICFkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSB8fCAoSEFWRV9GSVBTX1ZFUlNJT04gPCAyKQorICAgICAgICAjZGVmaW5lIFdDX1JORyBSTkcKKyAgICAjZWxzZQorICAgICAgICAjaWZuZGVmIFdPTEZTU0xfU1RNMzJMNAorICAgICAgICAgICAgI2RlZmluZSBSTkcgV0NfUk5HCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorICAgIC8qIGJsaW5kaW5nIGFkZHMgQVBJIG5vdCBhdmFpbGFibGUgeWV0IGluIEZJUFMgbW9kZSAqLworICAgICN1bmRlZiBXQ19SU0FfQkxJTkRJTkcKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX01fWDY0KSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0FFU0dDTSkgJiYgZGVmaW5lZChXT0xGU1NMX0FFU05JKQorCisvKiBUaGUgX01fWDY0IG1hY3JvIGlzIHdoYXQncyB1c2VkIGluIHRoZSBoZWFkZXJzIGZvciBNU0MgdG8gdGVsbCBpZiBpdAorICogaGFzIHRoZSA2NC1iaXQgdmVyc2lvbnMgb2YgdGhlIDEyOC1iaXQgaW50ZWdlcnMgYXZhaWxhYmxlLiBJZiBvbmUgaXMKKyAqIGJ1aWxkaW5nIG9uIDMyLWJpdCBXaW5kb3dzIHdpdGggQUVTLU5JLCB0dXJuIG9mZiB0aGUgQUVTLUdDTWxvb3AKKyAqIHVucm9sbGluZy4gKi8KKworICAgICNkZWZpbmUgQUVTX0dDTV9BRVNOSV9OT19VTlJPTEwKKyNlbmRpZgorCisjaWZkZWYgSVBIT05FCisgICAgI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKKyNlbmRpZgorCisjaWZkZWYgVEhSRUFEWAorICAgICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUWAorICAgICNpZmRlZiBORUVEX1RIUkVBRFhfVFlQRVMKKyAgICAgICAgI2luY2x1ZGUgPHR5cGVzLmg+CisgICAgI2VuZGlmCisgICAgI2luY2x1ZGUgPG54X2FwaS5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfRVNQSURGKQorICAgICNkZWZpbmUgRlJFRVJUT1MKKyAgICAjZGVmaW5lIFdPTEZTU0xfTFdJUAorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKKyAgICAjZGVmaW5lIE5PX1dPTEZTU0xfRElSCisgICAgI2RlZmluZSBXT0xGU1NMX05PX0NVUlJESVIKKworICAgICNkZWZpbmUgVEZNX1RJTUlOR19SRVNJU1RBTlQKKyAgICAjZGVmaW5lIEVDQ19USU1JTkdfUkVTSVNUQU5UCisgICAgI2RlZmluZSBXQ19SU0FfQkxJTkRJTkcKKworI2lmIGRlZmluZWQoV09MRlNTTF9FU1BXUk9PTTMyKSB8fCBkZWZpbmVkKFdPTEZTU0xfRVNQV1JPT00zMlNFKQorICAgI2lmbmRlZiBOT19FU1AzMldST09NMzJfQ1JZUFQKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX0VTUDMyV1JPT00zMl9DUllQVAorICAgICAgICAjaWYgZGVmaW5lZChFU1AzMl9VU0VfUlNBX1BSSU1JVElWRSkgJiYgXAorICAgICAgICAgICAgIWRlZmluZWQoTk9fV09MRlNTTF9FU1AzMldST09NMzJfQ1JZUFRfUlNBX1BSSSkKKyAgICAgICAgICAgICNkZWZpbmUgV09MRlNTTF9FU1AzMldST09NMzJfQ1JZUFRfUlNBX1BSSQorICAgICAgICAgICAgI2RlZmluZSBVU0VfRkFTVF9NQVRICisgICAgICAgICAgICAjZGVmaW5lIFdPTEZTU0xfU01BTExfU1RBQ0sKKyAgICAgICAgI2VuZGlmCisgICAjZW5kaWYKKyNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfRVNQSURGICovCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfUkVORVNBU19UU0lQKQorICAgICNkZWZpbmUgVFNJUF9UTFNfSE1BQ19LRVlfSU5ERVhfV09SRFNJWkUgNjQKKyAgICAjZGVmaW5lIFRTSVBfVExTX01BU1RFUlNFQ1JFVF9TSVpFICAgICAgIDgwICAgLyogMjAgd29yZHMgKi8KKyAgICAjZGVmaW5lIFRTSVBfVExTX0VOQ1BVQktFWV9TWl9CWV9DRVJUVlJGWSA1NjAgLyogaW4gYnl0ZSAgKi8KKyAgICAjaWYgIWRlZmluZWQoTk9fUkVORVNBU19UU0lQX0NSWVBUKSAmJiBkZWZpbmVkKFdPTEZTU0xfUkVORVNBU19SWDY1TikKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1JFTkVTQVNfVFNJUF9DUllQVAorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfUkVORVNBU19UU0lQX1RMUworICAgICAgICAjZGVmaW5lIFdPTEZTU0xfUkVORVNBU19UU0lQX1RMU19BRVNfQ1JZUFQKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX1JFTkVTQVNfUkE2TTNHKSB8fCBkZWZpbmVkKFdPTEZTU0xfUkVORVNBU19SQTZNMykKKyAgICAvKiBzZXR0aW5ncyBpbiB1c2VyX3NldHRpbmdzLmggKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0xXSVBfTkFUSVZFKSAvKiB1c2luZyBMd0lQIG5hdGl2ZSBUQ1Agc29ja2V0ICovCisgICAgI2RlZmluZSBXT0xGU1NMX0xXSVAKKyAgICAjZGVmaW5lIE5PX1dSSVRFVgorICAgICNkZWZpbmUgU0lOR0xFX1RIUkVBREVECisgICAgI2RlZmluZSBXT0xGU1NMX1VTRVJfSU8KKyAgICAjZGVmaW5lIE5PX0ZJTEVTWVNURU0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX0NPTlRJS0kpCisgICAgI2luY2x1ZGUgPGNvbnRpa2kuaD4KKyAgICAjZGVmaW5lIFdPTEZTU0xfVUlQCisgICAgI2RlZmluZSBOT19XT0xGU1NMX01FTU9SWQorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBTSU5HTEVfVEhSRUFERUQKKyAgICAjZGVmaW5lIFdPTEZTU0xfVVNFUl9JTworICAgICNkZWZpbmUgTk9fRklMRVNZU1RFTQorICAgICNkZWZpbmUgQ1VTVE9NX1JBTkRfVFlQRSB1aW50MTZfdAorICAgICNkZWZpbmUgQ1VTVE9NX1JBTkRfR0VORVJBVEUgcmFuZG9tX3JhbmQKKyAgICBzdGF0aWMgaW5saW5lIHdvcmQzMiBMb3dSZXNUaW1lcih2b2lkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNsb2NrX3NlY29uZHMoKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF9JQVJfQVJNKSB8fCBkZWZpbmVkKFdPTEZTU0xfUk9XTEVZX0FSTSkKKyAgICAjZGVmaW5lIE5PX01BSU5fRFJJVkVSCisgICAgI2RlZmluZSBTSU5HTEVfVEhSRUFERUQKKyAgICAjaWYgIWRlZmluZWQoVVNFX0NFUlRfQlVGRkVSU18yMDQ4KSAmJiAhZGVmaW5lZChVU0VfQ0VSVF9CVUZGRVJTXzQwOTYpCisgICAgICAgICNkZWZpbmUgVVNFX0NFUlRfQlVGRkVSU18xMDI0CisgICAgI2VuZGlmCisgICAgI2RlZmluZSBCRU5DSF9FTUJFRERFRAorICAgICNkZWZpbmUgTk9fRklMRVNZU1RFTQorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBXT0xGU1NMX1VTRVJfSU8KKyAgICAjZGVmaW5lIEJFTkNIX0VNQkVEREVECisjZW5kaWYKKworI2lmZGVmIE1JQ1JPQ0hJUF9QSUMzMgorICAgIC8qICNkZWZpbmUgV09MRlNTTF9NSUNST0NISVBfUElDMzJNWiAqLworICAgICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4CisgICAgI2RlZmluZSBTSU5HTEVfVEhSRUFERUQKKyAgICAjaWZuZGVmIE1JQ1JPQ0hJUF9UQ1BJUF9CU0RfQVBJCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9VU0VSX0lPCisgICAgI2VuZGlmCisgICAgI2RlZmluZSBOT19XUklURVYKKyAgICAjZGVmaW5lIE5PX0RFVl9SQU5ET00KKyAgICAjZGVmaW5lIE5PX0ZJTEVTWVNURU0KKyAgICAjZGVmaW5lIFVTRV9GQVNUX01BVEgKKyAgICAjZGVmaW5lIFRGTV9USU1JTkdfUkVTSVNUQU5UCisgICAgI2RlZmluZSBOT19CSUdfSU5UCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfTUlDUk9DSElQX1BJQzMyTVoKKyAgICAjZGVmaW5lIFdPTEZTU0xfSEFWRV9NSU4KKyAgICAjZGVmaW5lIFdPTEZTU0xfSEFWRV9NQVgKKworICAgICNpZm5kZWYgTk9fUElDMzJNWl9DUllQVAorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfUElDMzJNWl9DUllQVAorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fUElDMzJNWl9STkcKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1BJQzMyTVpfUk5HCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19QSUMzMk1aX0hBU0gKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1BJQzMyTVpfSEFTSAorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBNSUNST0NISVBfVENQSVBfVjUKKyAgICAvKiBpbmNsdWRlIHRpbWVyIGZ1bmN0aW9ucyAqLworICAgICNpbmNsdWRlICJUQ1BJUCBTdGFjay9UQ1BJUC5oIgorI2VuZGlmCisKKyNpZmRlZiBNSUNST0NISVBfVENQSVAKKyAgICAvKiBpbmNsdWRlIHRpbWVyLCBOVFAgZnVuY3Rpb25zICovCisgICAgI2lmZGVmIE1JQ1JPQ0hJUF9NUExBQl9IQVJNT05ZCisgICAgICAgICNpbmNsdWRlICJ0Y3BpcC90Y3BpcC5oIgorICAgICNlbHNlCisgICAgICAgICNpbmNsdWRlICJzeXN0ZW0vc3lzdGVtX3NlcnZpY2VzLmgiCisgICAgICAgICNpbmNsdWRlICJ0Y3BpcC9zbnRwLmgiCisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfQVRFQ0M1MDhBCisgICAgLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKyNpZm5kZWYgV09MRlNTTF9BVEVDQ19OT19FQ0RIX0VOQworICAgICNkZWZpbmUgV09MRlNTTF9BVEVDQ19FQ0RIX0VOQworI2VuZGlmCisgICAgI2lmZGVmIFdPTEZTU0xfQVRFQ0M1MDhBX0RFQlVHCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9BVEVDQ19ERUJVRworICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBNQkVECisgICAgI2RlZmluZSBXT0xGU1NMX1VTRVJfSU8KKyAgICAjZGVmaW5lIE5PX0ZJTEVTWVNURU0KKyAgICAjZGVmaW5lIE5PX0NFUlRTCisgICAgI2lmICFkZWZpbmVkKFVTRV9DRVJUX0JVRkZFUlNfMjA0OCkgJiYgIWRlZmluZWQoVVNFX0NFUlRfQlVGRkVSU180MDk2KQorICAgICAgICAjZGVmaW5lIFVTRV9DRVJUX0JVRkZFUlNfMTAyNAorICAgICNlbmRpZgorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBOT19ERVZfUkFORE9NCisgICAgI2RlZmluZSBOT19TSEE1MTIKKyAgICAjZGVmaW5lIE5PX0RICisgICAgLyogQWxsb3dzIHVzZSBvZiBESCB3aXRoIGZpeGVkIHBvaW50cyBpZiB1bmNvbW1lbnRlZCBhbmQgTk9fREggaXMgcmVtb3ZlZCAqLworICAgIC8qIFdPTEZTU0xfREhfQ09OU1QgKi8KKyAgICAjZGVmaW5lIE5PX0RTQQorICAgICNkZWZpbmUgTk9fSEMxMjgKKyAgICAjZGVmaW5lIEhBVkVfRUNDCisgICAgI2RlZmluZSBOT19TRVNTSU9OX0NBQ0hFCisgICAgI2RlZmluZSBXT0xGU1NMX0NNU0lTX1JUT1MKKyNlbmRpZgorCisKKyNpZmRlZiBXT0xGU1NMX0VST0FECisgICAgI2RlZmluZSBGUkVFU0NBTEVfTVFYCisgICAgI2RlZmluZSBGUkVFU0NBTEVfTU1DQVUKKyAgICAjZGVmaW5lIFNJTkdMRV9USFJFQURFRAorICAgICNkZWZpbmUgTk9fU1RESU9fRklMRVNZU1RFTQorICAgICNkZWZpbmUgV09MRlNTTF9MRUFOUFNLCisgICAgI2RlZmluZSBIQVZFX05VTExfQ0lQSEVSCisgICAgI2RlZmluZSBOT19PTERfVExTCisgICAgI2RlZmluZSBOT19BU04KKyAgICAjZGVmaW5lIE5PX0JJR19JTlQKKyAgICAjZGVmaW5lIE5PX1JTQQorICAgICNkZWZpbmUgTk9fRFNBCisgICAgI2RlZmluZSBOT19ESAorICAgIC8qIEFsbG93cyB1c2Ugb2YgREggd2l0aCBmaXhlZCBwb2ludHMgaWYgdW5jb21tZW50ZWQgYW5kIE5PX0RIIGlzIHJlbW92ZWQgKi8KKyAgICAvKiBXT0xGU1NMX0RIX0NPTlNUICovCisgICAgI2RlZmluZSBOT19DRVJUUworICAgICNkZWZpbmUgTk9fUFdEQkFTRUQKKyAgICAjZGVmaW5lIE5PX0RFUzMKKyAgICAjZGVmaW5lIE5PX01ENAorICAgICNkZWZpbmUgTk9fUkM0CisgICAgI2RlZmluZSBOT19NRDUKKyAgICAjZGVmaW5lIE5PX1NFU1NJT05fQ0FDSEUKKyAgICAjZGVmaW5lIE5PX01BSU5fRFJJVkVSCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfUElDT1RDUAorICAgICNpZm5kZWYgZXJybm8KKyAgICAgICAgI2RlZmluZSBlcnJubyBwaWNvX2VycgorICAgICNlbmRpZgorICAgICNpbmNsdWRlICJwaWNvX2RlZmluZXMuaCIKKyAgICAjaW5jbHVkZSAicGljb19zdGFjay5oIgorICAgICNpbmNsdWRlICJwaWNvX2NvbnN0YW50cy5oIgorICAgICNpbmNsdWRlICJwaWNvX3Byb3RvY29sLmgiCisgICAgI2RlZmluZSBDVVNUT01fUkFORF9HRU5FUkFURSBwaWNvX3JhbmQKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9QSUNPVENQX0RFTU8KKyAgICAjZGVmaW5lIFdPTEZTU0xfU1RNMzIKKyAgICAjZGVmaW5lIFVTRV9GQVNUX01BVEgKKyAgICAjZGVmaW5lIFRGTV9USU1JTkdfUkVTSVNUQU5UCisgICAgI2RlZmluZSBYTUFMTE9DKHMsIGgsIHR5cGUpICBQSUNPX1pBTExPQygocykpCisgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0eXBlKSAgICBQSUNPX0ZSRUUoKHApKQorICAgICNkZWZpbmUgU0lOR0xFX1RIUkVBREVECisgICAgI2RlZmluZSBOT19XUklURVYKKyAgICAjZGVmaW5lIFdPTEZTU0xfVVNFUl9JTworICAgICNkZWZpbmUgTk9fREVWX1JBTkRPTQorICAgICNkZWZpbmUgTk9fRklMRVNZU1RFTQorI2VuZGlmCisKKyNpZmRlZiBGUkVFUlRPU19XSU5TSU0KKyAgICAjZGVmaW5lIEZSRUVSVE9TCisgICAgI2RlZmluZSBVU0VfV0lORE9XU19BUEkKKyNlbmRpZgorCisKKyNpZmRlZiBXT0xGU1NMX1ZYV09SS1MKKyAgICAvKiBWeFdvcmtzIHNpbXVsYXRvciBpbmNvcnJlY3RseSBkZXRlY3RzIGJ1aWxkaW5nIGZvciBpMzg2ICovCisgICAgI2lmZGVmIFZYV09SS1NfU0lNCisgICAgICAgICNkZWZpbmUgVEZNX05PX0FTTQorICAgICNlbmRpZgorICAgIC8qIEZvciBWeFdvcmtzIHB0aHJlYWRzIHdyYXBwZXJzIGZvciBtdXRleGVzIHVuY29tbWVudCB0aGUgbmV4dCBsaW5lLiAqLworICAgIC8qICNkZWZpbmUgV09MRlNTTF9QVEhSRUFEUyAqLworICAgICNkZWZpbmUgV09MRlNTTF9IQVZFX01JTgorICAgICNkZWZpbmUgV09MRlNTTF9IQVZFX01BWAorICAgICNkZWZpbmUgVVNFX0ZBU1RfTUFUSAorICAgICNkZWZpbmUgVEZNX1RJTUlOR19SRVNJU1RBTlQKKyAgICAjZGVmaW5lIE5PX01BSU5fRFJJVkVSCisgICAgI2RlZmluZSBOT19ERVZfUkFORE9NCisgICAgI2RlZmluZSBOT19XUklURVYKKyAgICAjZGVmaW5lIEhBVkVfU1RSSU5HU19ICisjZW5kaWYKKworCisjaWZkZWYgV09MRlNTTF9BUkRVSU5PCisgICAgI2RlZmluZSBOT19XUklURVYKKyAgICAjZGVmaW5lIE5PX1dPTEZTU0xfRElSCisgICAgI2RlZmluZSBTSU5HTEVfVEhSRUFERUQKKyAgICAjZGVmaW5lIE5PX0RFVl9SQU5ET00KKyAgICAjaWZuZGVmIElOVEVMX0dBTElMRU8gLyogR2FsaWxlbyBoYXMgdGltZS5oIGNvbXBhdGliaWxpdHkgKi8KKyAgICAgICAgI2RlZmluZSBUSU1FX09WRVJSSURFUworICAgICAgICAjaWZuZGVmIFhUSU1FCisgICAgICAgICAgICAjZXJyb3IgIk11c3QgZGVmaW5lIFhUSU1FIGV4dGVybmFsbHkgc2VlIHBvcnRpbmcgZ3VpZGUiCisgICAgICAgICAgICAjZXJyb3IgImh0dHBzOi8vd3d3LndvbGZzc2wuY29tL2RvY3MvcG9ydGluZy1ndWlkZS8iCisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIFhHTVRJTUUKKyAgICAgICAgICAgICNlcnJvciAiTXVzdCBkZWZpbmUgWEdNVElNRSBleHRlcm5hbGx5IHNlZSBwb3J0aW5nIGd1aWRlIgorICAgICAgICAgICAgI2Vycm9yICJodHRwczovL3d3dy53b2xmc3NsLmNvbS9kb2NzL3BvcnRpbmctZ3VpZGUvIgorICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIFdPTEZTU0xfVVNFUl9JTworICAgICNkZWZpbmUgSEFWRV9FQ0MKKyAgICAjZGVmaW5lIE5PX0RICisgICAgI2RlZmluZSBOT19TRVNTSU9OX0NBQ0hFCisjZW5kaWYKKworCisjaWZkZWYgV09MRlNTTF9VVEFTS0VSCisgICAgLyogdVRhc2tlciBjb25maWd1cmF0aW9uIC0gdXNlZCBmb3IgZm5SYW5kb20oKSAqLworICAgICNpbmNsdWRlICJjb25maWcuaCIKKworICAgICNkZWZpbmUgU0lOR0xFX1RIUkVBREVECisgICAgI2RlZmluZSBOT19XT0xGU1NMX0RJUgorICAgICNkZWZpbmUgV09MRlNTTF9IQVZFX01JTgorICAgICNkZWZpbmUgTk9fV1JJVEVWCisKKyAgICAjZGVmaW5lIEhBVkVfRUNDCisgICAgI2RlZmluZSBBTFRfRUNDX1NJWkUKKyAgICAjZGVmaW5lIFVTRV9GQVNUX01BVEgKKyAgICAjZGVmaW5lIFRGTV9USU1JTkdfUkVTSVNUQU5UCisgICAgI2RlZmluZSBFQ0NfVElNSU5HX1JFU0lTVEFOVAorCisgICAgLyogdXNlZCBpbiB3b2xmQ3J5cHQgdGVzdCAqLworICAgICNkZWZpbmUgTk9fTUFJTl9EUklWRVIKKyAgICAjZGVmaW5lIFVTRV9DRVJUX0JVRkZFUlNfMjA0OAorCisgICAgLyogdVRhc2tlciBwb3J0IHVzZXMgUkFXIHNvY2tldHMsIHVzZSBJL08gY2FsbGJhY2tzCisgICAgICogU2VlIHdvbGZTU0wgdVRhc2tlciBleGFtcGxlIGZvciBzYW1wbGUgY2FsbGJhY2tzICovCisgICAgI2RlZmluZSBXT0xGU1NMX1VTRVJfSU8KKworICAgIC8qIHVUYXNrZXIgZmlsZXN5c3RlbSBub3QgcG9ydGVkICAqLworICAgICNkZWZpbmUgTk9fRklMRVNZU1RFTQorCisgICAgLyogdVRhc2tlciBSTkcgaXMgYWJzdHJhY3RlZCwgY2FsbHMgSFcgUk5HIHdoZW4gYXZhaWxhYmxlICovCisgICAgI2RlZmluZSBDVVNUT01fUkFORF9HRU5FUkFURSAgICBmblJhbmRvbQorICAgICNkZWZpbmUgQ1VTVE9NX1JBTkRfVFlQRSAgICAgICAgdW5zaWduZWQgc2hvcnQKKworICAgIC8qIHVzZXIgbmVlZHMgdG8gZGVmaW5lIFhUSU1FIHRvIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMKKyAgICAgKiBzZWNvbmRzIHNpbmNlIFVuaXggZXBvY2ggKi8KKyAgICAjaWZuZGVmIFhUSU1FCisgICAgICAgICNlcnJvciBYVElNRSBtdXN0IGJlIGRlZmluZWQgaW4gd29sZlNTTCBzZXR0aW5ncy5oCisgICAgICAgIC8qICNkZWZpbmUgWFRJTUUgZm5TZWNvbmRzU2luY2VFcG9jaCAqLworICAgICNlbmRpZgorCisgICAgLyogdXNlIHVUYXNrZXIgc3RkIGxpYnJhcnkgcmVwbGFjZW1lbnRzIHdoZXJlIGF2YWlsYWJsZSAqLworICAgICNkZWZpbmUgU1RSSU5HX1VTRVIKKyAgICAjZGVmaW5lIFhNRU1DUFkoZCxzLGwpICAgICAgICAgdU1lbWNweSgoZCksKHMpLChsKSkKKyAgICAjZGVmaW5lIFhNRU1TRVQoYixjLGwpICAgICAgICAgdU1lbXNldCgoYiksKGMpLChsKSkKKyAgICAjZGVmaW5lIFhNRU1DTVAoczEsczIsbikgICAgICAgdU1lbWNtcCgoczEpLChzMiksKG4pKQorICAgICNkZWZpbmUgWE1FTU1PVkUoZCxzLGwpICAgICAgICBtZW1tb3ZlKChkKSwocyksKGwpKQorCisgICAgI2RlZmluZSBYU1RSTEVOKHMxKSAgICAgICAgICAgIHVTdHJsZW4oKHMxKSkKKyAgICAjZGVmaW5lIFhTVFJOQ1BZKHMxLHMyLG4pICAgICAgc3RybmNweSgoczEpLChzMiksKG4pKQorICAgICNkZWZpbmUgWFNUUlNUUihzMSxzMikgICAgICAgICBzdHJzdHIoKHMxKSwoczIpKQorICAgICNkZWZpbmUgWFNUUk5TVFIoczEsczIsbikgICAgICBteXN0cm5zdHIoKHMxKSwoczIpLChuKSkKKyAgICAjZGVmaW5lIFhTVFJOQ01QKHMxLHMyLG4pICAgICAgc3RybmNtcCgoczEpLChzMiksKG4pKQorICAgICNkZWZpbmUgWFNUUk5DQVQoczEsczIsbikgICAgICBzdHJuY2F0KChzMSksKHMyKSwobikpCisgICAgI2RlZmluZSBYU1RSTkNBU0VDTVAoczEsczIsbikgIF9zdHJuaWNtcCgoczEpLChzMiksKG4pKQorICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9FWFQpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgXAorICAgICAgICAgICAgfHwgZGVmaW5lZChIQVZFX0FMUE4pCisgICAgICAgICNkZWZpbmUgWFNUUlRPSyAgICAgICAgICAgIHN0cnRva19yCisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfRU1CT1MKKyAgICAjZGVmaW5lIE5PX0ZJTEVTWVNURU0gICAgICAgICAgIC8qIE5vdCBwb3J0ZWQgYXQgdGhpcyB0aW1lICovCisgICAgI2RlZmluZSBVU0VfQ0VSVF9CVUZGRVJTXzIwNDggICAvKiB1c2Ugd2hlbiBOT19GSUxFU1lTVEVNICovCisgICAgI2RlZmluZSBOT19NQUlOX0RSSVZFUgorICAgICNkZWZpbmUgTk9fUkM0CisgICAgI2RlZmluZSBTSU5HTEVfVEhSRUFERUQgICAgICAgICAvKiBOb3QgcG9ydGVkIGF0IHRoaXMgdGltZSAqLworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1JJT1RfT1MKKyAgICAjZGVmaW5lIE5PX1dSSVRFVgorICAgICNkZWZpbmUgVEZNX05PX0FTTQorICAgICNkZWZpbmUgTk9fRklMRVNZU1RFTQorICAgICNkZWZpbmUgVVNFX0NFUlRfQlVGRkVSU18yMDQ4CisgICAgI2lmIGRlZmluZWQoV09MRlNTTF9HTlJDKSAmJiAhZGVmaW5lZChXT0xGU1NMX0RUTFMpCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9EVExTCisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfQ0hJQklPUworICAgIC8qIENoaWJpT1MgZGVmaW5pdGlvbnMuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB3aXRoIGNoaWJpT1MuICovCisgICAgI2luY2x1ZGUgIndvbGZzc2xfY2hpYmlvcy5oIgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1BCCisgICAgLyogUEIgaXMgdXNpbmcgb2xkZXIgMS4yIHZlcnNpb24gb2YgTnVjbGV1cyAqLworICAgICN1bmRlZiBXT0xGU1NMX05VQ0xFVVMKKyAgICAjZGVmaW5lIFdPTEZTU0xfTlVDTEVVU18xXzIKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9OVUNMRVVTXzFfMgorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBOT19XT0xGU1NMX0RJUgorCisgICAgI2lmICFkZWZpbmVkKE5PX0FTTl9USU1FKSAmJiAhZGVmaW5lZChVU0VSX1RJTUUpCisgICAgICAgICNlcnJvciBVc2VyIG11c3QgZGVmaW5lIFhUSU1FLCBzZWUgbWFudWFsCisgICAgI2VuZGlmCisKKyAgICAjaWYgIWRlZmluZWQoWE1BTExPQ19PVkVSUklERSkgJiYgIWRlZmluZWQoWE1BTExPQ19VU0VSKQorICAgICAgICBleHRlcm4gdm9pZCogbnVjbGV1c19tYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCB2b2lkKiBoZWFwLCBpbnQgdHlwZSk7CisgICAgICAgIGV4dGVybiB2b2lkKiBudWNsZXVzX3JlYWxsb2Modm9pZCogcHRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQqIGhlYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUpOworICAgICAgICBleHRlcm4gdm9pZCAgbnVjbGV1c19mcmVlKHZvaWQqIHB0ciwgdm9pZCogaGVhcCwgaW50IHR5cGUpOworCisgICAgICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0eXBlKSAgbnVjbGV1c19tYWxsb2MoKHMpLCAoaCksICh0eXBlKSkKKyAgICAgICAgI2RlZmluZSBYUkVBTExPQyhwLCBuLCBoLCB0KSBudWNsZXVzX3JlYWxsb2MoKHApLCAobiksIChoKSwgKHQpKQorICAgICAgICAjZGVmaW5lIFhGUkVFKHAsIGgsIHR5cGUpICAgIG51Y2xldXNfZnJlZSgocCksIChoKSwgKHR5cGUpKQorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX05SRjV4CisgICAgICAgICNkZWZpbmUgU0laRU9GX0xPTkcgNAorICAgICAgICAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorICAgICAgICAjZGVmaW5lIE5PX0RFVl9SQU5ET00KKyAgICAgICAgI2RlZmluZSBOT19GSUxFU1lTVEVNCisgICAgICAgICNkZWZpbmUgTk9fTUFJTl9EUklWRVIKKyAgICAgICAgI2RlZmluZSBOT19XUklURVYKKyAgICAgICAgI2RlZmluZSBTSU5HTEVfVEhSRUFERUQKKyAgICAgICAgI2RlZmluZSBVU0VfRkFTVF9NQVRICisgICAgICAgICNkZWZpbmUgVEZNX1RJTUlOR19SRVNJU1RBTlQKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX05SRjUxCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9VU0VSX0lPCisgICAgICAgICNkZWZpbmUgTk9fU0VTU0lPTl9DQUNIRQorI2VuZGlmCisKKy8qIE1pY3JpdW0gd2lsbCB1c2UgVmlzdWFsIFN0dWRpbyBmb3IgY29tcGlsYXRpb24gYnV0IG5vdCB0aGUgV2luMzIgQVBJICovCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKE1JQ1JJVU0pICYmICFkZWZpbmVkKEZSRUVSVE9TKSAmJiBcCisgICAgIWRlZmluZWQoRlJFRVJUT1NfVENQKSAmJiAhZGVmaW5lZChFQlNORVQpICYmICFkZWZpbmVkKFdPTEZTU0xfRVJPQUQpICYmIFwKKyAgICAhZGVmaW5lZChXT0xGU1NMX1VUQVNLRVIpICYmICFkZWZpbmVkKElOVElNRV9SVE9TKQorICAgICNkZWZpbmUgVVNFX1dJTkRPV1NfQVBJCisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF91SVRST040KQorCisjZGVmaW5lIFhNQUxMT0NfVVNFUgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2RlZmluZSBJVFJPTl9QT09MX1NJWkUgMTAyNCoyMAorZXh0ZXJuIGludCB1SVRST040X21pbml0KHNpemVfdCBwb29sc3opIDsKK2V4dGVybiB2b2lkICp1SVRST040X21hbGxvYyhzaXplX3Qgc3opIDsKK2V4dGVybiB2b2lkICp1SVRST040X3JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IHN6KSA7CitleHRlcm4gdm9pZCB1SVRST040X2ZyZWUodm9pZCAqcCkgOworCisjZGVmaW5lIFhNQUxMT0Moc3osIGhlYXAsIHR5cGUpICAgICB1SVRST040X21hbGxvYyhzeikKKyNkZWZpbmUgWFJFQUxMT0MocCwgc3osIGhlYXAsIHR5cGUpIHVJVFJPTjRfcmVhbGxvYyhwLCBzeikKKyNkZWZpbmUgWEZSRUUocCwgaGVhcCwgdHlwZSkgICAgICAgIHVJVFJPTjRfZnJlZShwKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfdVRLRVJORUwyKQorICAjaWZuZGVmIE5PX1RLRVJORUxfTUVNX1BPT0wKKyAgICAjZGVmaW5lIFhNQUxMT0NfT1ZFUlJJREUKKyAgICBpbnQgICB1VEtlcm5lbF9pbml0X21wb29sKHVuc2lnbmVkIGludCBzeik7IC8qIGluaXRpYWxpemluZyBtYWxsb2MgcG9vbCAqLworICAgIHZvaWQqIHVUS2VybmVsX21hbGxvYyh1bnNpZ25lZCBpbnQgc3opOworICAgIHZvaWQqIHVUS2VybmVsX3JlYWxsb2Modm9pZCAqcCwgdW5zaWduZWQgaW50IHN6KTsKKyAgICB2b2lkICB1VEtlcm5lbF9mcmVlKHZvaWQgKnApOworICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0eXBlKSAgdVRLZXJuZWxfbWFsbG9jKChzKSkKKyAgICAjZGVmaW5lIFhSRUFMTE9DKHAsIG4sIGgsIHQpIHVUS2VybmVsX3JlYWxsb2MoKHApLCAobikpCisgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0eXBlKSAgICB1VEtlcm5lbF9mcmVlKChwKSkKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBOT19TVERJT19GR0VUU19SRU1BUAorICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgICNpbmNsdWRlICJ0bS90bW9uaXRvci5oIgorCisgICAgLyogc3RhdGljIGNoYXIqIGdldHMoY2hhciAqYnVmZik7ICovCisgICAgc3RhdGljIGNoYXIqIGZnZXRzKGNoYXIgKmJ1ZmYsIGludCBzeiwgWEZJTEUgZnApIHsKKyAgICAgICAgY2hhciAqIHMgPSBidWZmOworICAgICAgICAqcyA9ICdcMCc7CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAqcyA9IHRtX2dldGNoYXIoLTEpOworICAgICAgICAgICAgdG1fcHV0Y2hhcigqcyk7CisgICAgICAgICAgICBpZiAoKnMgPT0gJ1xyJykgeworICAgICAgICAgICAgICAgIHRtX3B1dGNoYXIoJ1xuJyk7CisgICAgICAgICAgICAgICAgKnMgPSAnXDAnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcysrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWZmOworICAgIH0KKyAgI2VuZGlmIC8qICFOT19TVERJT19GR0VUU19SRU1BUCAqLworI2VuZGlmCisKKworI2lmIGRlZmluZWQoV09MRlNTTF9MRUFOUFNLKSAmJiAhZGVmaW5lZChYTUFMTE9DX1VTRVIpICYmIFwKKyAgICAgICAgIWRlZmluZWQoTk9fV09MRlNTTF9NRU1PUlkpCisgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0eXBlKSAgbWFsbG9jKChzKSkKKyAgICAjZGVmaW5lIFhGUkVFKHAsIGgsIHR5cGUpICAgIGZyZWUoKHApKQorICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgcmVhbGxvYygocCksIChuKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYTUFMTE9DX1VTRVIpICYmIGRlZmluZWQoU1NOX0JVSUxESU5HX0xJQllBU1NMKQorICAgICN1bmRlZiAgWE1BTExPQworICAgICNkZWZpbmUgWE1BTExPQyAgICAgeWFYTUFMTE9DCisgICAgI3VuZGVmICBYRlJFRQorICAgICNkZWZpbmUgWEZSRUUgICAgICAgeWFYRlJFRQorICAgICN1bmRlZiAgWFJFQUxMT0MKKyAgICAjZGVmaW5lIFhSRUFMTE9DICAgIHlhWFJFQUxMT0MKKyNlbmRpZgorCisKKyNpZmRlZiBGUkVFUlRPUworICAgICNpbmNsdWRlICJGcmVlUlRPUy5oIgorCisgICAgI2lmICFkZWZpbmVkKFhNQUxMT0NfVVNFUikgJiYgIWRlZmluZWQoTk9fV09MRlNTTF9NRU1PUlkpICYmIFwKKyAgICAgICAgIWRlZmluZWQoV09MRlNTTF9TVEFUSUNfTUVNT1JZKQorICAgICAgICAjZGVmaW5lIFhNQUxMT0MocywgaCwgdHlwZSkgIHB2UG9ydE1hbGxvYygocykpCisgICAgICAgICNkZWZpbmUgWEZSRUUocCwgaCwgdHlwZSkgICAgdlBvcnRGcmVlKChwKSkKKyAgICAgICAgLyogRnJlZVJUT1MgcHZQb3J0UmVhbGxvYygpIGltcGxlbWVudGF0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3dvbGZTU0wvd29sZnNzbC1mcmVlcnRvcy9wdWxsLzMvZmlsZXMgKi8KKyAgICAgICAgI2lmICFkZWZpbmVkKFVTRV9GQVNUX01BVEgpIHx8IGRlZmluZWQoSEFWRV9FRDI1NTE5KSB8fCBcCisgICAgICAgICAgICBkZWZpbmVkKEhBVkVfRUQ0NDgpCisgICAgICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX0VTUElERikKKyAgICAgICAgICAgICAgICAvKkluIElERiwgcmVhbGxvYyhwLCBuKSBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgICAgICAgICAgaGVhcF9jYXBzX3JlYWxsb2MocCwgcywgTUFMTE9DX0NBUF84QklUKSAqLworICAgICAgICAgICAgICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgcmVhbGxvYygocCksIChuKSkKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBYUkVBTExPQyhwLCBuLCBoLCB0KSBwdlBvcnRSZWFsbG9jKChwKSwgKG4pKQorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorCisgICAgI2lmbmRlZiBOT19XUklURVYKKyAgICAgICAgI2RlZmluZSBOT19XUklURVYKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEhBVkVfU0hBNTEyCisgICAgICAgICNpZm5kZWYgTk9fU0hBNTEyCisgICAgICAgICAgICAjZGVmaW5lIE5PX1NIQTUxMgorICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEhBVkVfREgKKyAgICAgICAgI2lmbmRlZiBOT19ESAorICAgICAgICAgICAgI2RlZmluZSBOT19ESAorICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0RTQQorICAgICAgICAjZGVmaW5lIE5PX0RTQQorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fSEMxMjgKKyAgICAgICAgI2RlZmluZSBOT19IQzEyOAorICAgICNlbmRpZgorCisgICAgI2lmbmRlZiBTSU5HTEVfVEhSRUFERUQKKyAgICAgICAgI2luY2x1ZGUgInNlbXBoci5oIgorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBGUkVFUlRPU19UQ1AKKyAgICAjaWYgIWRlZmluZWQoTk9fV09MRlNTTF9NRU1PUlkpICYmICFkZWZpbmVkKFhNQUxMT0NfVVNFUikgJiYgXAorICAgICAgICAhZGVmaW5lZChXT0xGU1NMX1NUQVRJQ19NRU1PUlkpCisgICAgICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0eXBlKSAgcHZQb3J0TWFsbG9jKChzKSkKKyAgICAgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0eXBlKSAgICB2UG9ydEZyZWUoKHApKQorICAgICNlbmRpZgorCisgICAgI2RlZmluZSBXT0xGU1NMX0dFTlNFRURfRk9SVEVTVAorCisgICAgI2RlZmluZSBOT19XT0xGU1NMX0RJUgorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBVU0VfRkFTVF9NQVRICisgICAgI2RlZmluZSBURk1fVElNSU5HX1JFU0lTVEFOVAorICAgICNkZWZpbmUgTk9fTUFJTl9EUklWRVIKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9USVJUT1MKKyAgICAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBOT19XT0xGU1NMX0RJUgorICAgICNkZWZpbmUgVVNFX0ZBU1RfTUFUSAorICAgICNkZWZpbmUgVEZNX1RJTUlOR19SRVNJU1RBTlQKKyAgICAjZGVmaW5lIEVDQ19USU1JTkdfUkVTSVNUQU5UCisgICAgI2RlZmluZSBXQ19SU0FfQkxJTkRJTkcKKyAgICAjZGVmaW5lIE5PX0RFVl9SQU5ET00KKyAgICAjZGVmaW5lIE5PX0ZJTEVTWVNURU0KKyAgICAjZGVmaW5lIFVTRV9DRVJUX0JVRkZFUlNfMjA0OAorICAgICNkZWZpbmUgTk9fRVJST1JfU1RSSU5HUworICAgIC8qIFVuY29tbWVudCB0aGlzIHNldHRpbmcgaWYgeW91ciB0b29sY2hhaW4gZG9lcyBub3Qgb2ZmZXIgdGltZS5oIGhlYWRlciAqLworICAgIC8qICNkZWZpbmUgVVNFUl9USU1FICovCisgICAgI2RlZmluZSBIQVZFX0VDQworICAgICNkZWZpbmUgSEFWRV9BTFBOCisgICAgI2RlZmluZSBVU0VfV09MRl9TVFJUT0sgLyogdXNlIHdpdGggSEFWRV9BTFBOICovCisgICAgI2RlZmluZSBIQVZFX1RMU19FWFRFTlNJT05TCisgICAgI2RlZmluZSBIQVZFX0FFU0dDTQorICAgICNpZmRlZiBXT0xGU1NMX1RJX0NSWVBUCisgICAgICAgICNkZWZpbmUgTk9fR0NNX0VOQ1JZUFRfRVhUUkEKKyAgICAgICAgI2RlZmluZSBOT19QVUJMSUNfR0NNX1NFVF9JVgorICAgICAgICAjZGVmaW5lIE5PX1BVQkxJQ19DQ01fU0VUX05PTkNFCisgICAgI2VuZGlmCisgICAgI2RlZmluZSBIQVZFX1NVUFBPUlRFRF9DVVJWRVMKKyAgICAjZGVmaW5lIEFMVF9FQ0NfU0laRQorCisgICAgI2lmZGVmIF9fSUFSX1NZU1RFTVNfSUNDX18KKyAgICAgICAgI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDg5CisgICAgI2VsaWYgIWRlZmluZWQoX19HTlVDX18pCisgICAgICAgIC8qIFN1cHByZXNzIHRoZSBzc2xwcm8gd2FybmluZyAqLworICAgICAgICAjcHJhZ21hIGRpYWdfc3VwcHJlc3M9MTEKKyAgICAjZW5kaWYKKworICAgICNpbmNsdWRlIDx0aS9zeXNiaW9zL2hhbC9TZWNvbmRzLmg+CisjZW5kaWYKKworI2lmZGVmIEVCU05FVAorICAgICNpbmNsdWRlICJydGlwLmgiCisKKyAgICAvKiAjZGVmaW5lIERFQlVHX1dPTEZTU0wgKi8KKyAgICAjZGVmaW5lIE5PX1dPTEZTU0xfRElSICAvKiB0YmQgKi8KKworICAgICNpZiAoUE9MTE9TKQorICAgICAgICAjZGVmaW5lIFNJTkdMRV9USFJFQURFRAorICAgICNlbmRpZgorCisgICAgI2lmIChSVFBMQVRGT1JNKQorICAgICAgICAjaWYgKCFSVFBfTElUVExFX0VORElBTikKKyAgICAgICAgICAgICNkZWZpbmUgQklHX0VORElBTl9PUkRFUgorICAgICAgICAjZW5kaWYKKyAgICAjZWxzZQorICAgICAgICAjaWYgKCFLU19MSVRUTEVfRU5ESUFOKQorICAgICAgICAgICAgI2RlZmluZSBCSUdfRU5ESUFOX09SREVSCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorCisgICAgI2lmIChXSU5NU1AzKQorICAgICAgICAjdW5kZWYgU0laRU9GX0xPTkcKKyAgICAgICAgI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKKyAgICAjZWxzZQorICAgICAgICAjaWYgIWRlZmluZWQoU0laRU9GX0xPTkcpICYmICFkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpCisgICAgICAgICAgICAjZXJyb3Igc2V0dGluZ3MuaCAtIHBsZWFzZSBpbXBsZW1lbnQgU0laRU9GX0xPTkcgYW5kIFNJWkVPRl9MT05HX0xPTkcKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisKKyAgICAjZGVmaW5lIFhNQUxMT0MocywgaCwgdHlwZSkgKCh2b2lkICopcnRwX21hbGxvYygocyksIFNTTF9QUk9fTUFMTE9DKSkKKyAgICAjZGVmaW5lIFhGUkVFKHAsIGgsIHR5cGUpIChydHBfZnJlZShwKSkKKyAgICAjZGVmaW5lIFhSRUFMTE9DKHAsIG4sIGgsIHQpIChydHBfcmVhbGxvYygocCksIChuKSkpCisKKyAgICAjaWYgKFdJTk1TUDMpCisgICAgICAgICNkZWZpbmUgWFNUUk5DQVNFQ01QKHMxLHMyLG4pICBfc3RybmljbXAoKHMxKSwoczIpLChuKSkKKyAgICAjZWxzZQorICAgICAgICAjaWZuZGVmIFhTVFJOQ0FTRUNNUAorICAgICAgICAgICAgI2Vycm9yIHNldHRpbmdzLmggLSBwbGVhc2UgaW1wbGVtZW50IFhTVFJOQ0FTRUNNUCAtIG5lZWRlZCBmb3IgSEFWRV9FQ0MKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisKKyAgICAjZGVmaW5lIFdPTEZTU0xfSEFWRV9NQVgKKyAgICAjZGVmaW5lIFdPTEZTU0xfSEFWRV9NSU4KKworICAgICNkZWZpbmUgVVNFX0ZBU1RfTUFUSAorICAgICNkZWZpbmUgVEZNX1RJTUlOR19SRVNJU1RBTlQKKyAgICAjZGVmaW5lIFdDX1JTQV9CTElORElORworICAgICNkZWZpbmUgRUNDX1RJTUlOR19SRVNJU1RBTlQKKworICAgICNkZWZpbmUgSEFWRV9FQ0MKKworI2VuZGlmIC8qIEVCU05FVCAqLworCisjaWZkZWYgV09MRlNTTF9HQU1FX0JVSUxECisgICAgI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKKyAgICAjaWYgZGVmaW5lZChfX1BQVSkgfHwgZGVmaW5lZChfX1hFTk9OKQorICAgICAgICAjZGVmaW5lIEJJR19FTkRJQU5fT1JERVIKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9MU1IKKyAgICAjZGVmaW5lIEhBVkVfV0VCU0VSVkVSCisgICAgI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKKyAgICAjZGVmaW5lIFdPTEZTU0xfTE9XX01FTU9SWQorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBOT19TSEE1MTIKKyAgICAjZGVmaW5lIE5PX0RICisgICAgLyogQWxsb3dzIHVzZSBvZiBESCB3aXRoIGZpeGVkIHBvaW50cyBpZiB1bmNvbW1lbnRlZCBhbmQgTk9fREggaXMgcmVtb3ZlZCAqLworICAgIC8qIFdPTEZTU0xfREhfQ09OU1QgKi8KKyAgICAjZGVmaW5lIE5PX0RTQQorICAgICNkZWZpbmUgTk9fSEMxMjgKKyAgICAjZGVmaW5lIE5PX0RFVl9SQU5ET00KKyAgICAjZGVmaW5lIE5PX1dPTEZTU0xfRElSCisgICAgI2RlZmluZSBOT19SQUJCSVQKKyAgICAjaWZuZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAgICAgI2RlZmluZSBMU1JfRlMKKyAgICAgICAgI2luY2x1ZGUgImluYy9od190eXBlcy5oIgorICAgICAgICAjaW5jbHVkZSAiZnMuaCIKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIFdPTEZTU0xfTFdJUAorICAgICNpbmNsdWRlIDxlcnJuby5oPiAgLyogZm9yIHRjcCBlcnJubyAqLworICAgICNkZWZpbmUgV09MRlNTTF9TQUZFUlRPUworICAgICNpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCisgICAgICAgIC8qIGVudW0gdXNlcyBlbnVtICovCisgICAgICAgICNwcmFnbWEgZGlhZ19zdXBwcmVzcz1QYTA4OQorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1NBRkVSVE9TCisgICAgI2lmbmRlZiBTSU5HTEVfVEhSRUFERUQKKyAgICAgICAgI2luY2x1ZGUgIlNhZmVSVE9TL3NlbXBoci5oIgorICAgICNlbmRpZgorICAgICNpZm5kZWYgV09MRlNTTF9OT19NQUxMT0MKKyAgICAgICAgI2luY2x1ZGUgIlNhZmVSVE9TL2hlYXAuaCIKKyAgICAjZW5kaWYKKyAgICAjaWYgIWRlZmluZWQoWE1BTExPQ19VU0VSKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX01FTU9SWSkgJiYgXAorICAgICAgICAhZGVmaW5lZChXT0xGU1NMX1NUQVRJQ19NRU1PUlkpCisgICAgICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0eXBlKSAgcHZQb3J0TWFsbG9jKChzKSkKKyAgICAgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0eXBlKSAgICB2UG9ydEZyZWUoKHApKQorCisgICAgICAgIC8qIEZyZWVSVE9TIHB2UG9ydFJlYWxsb2MoKSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS93b2xmU1NML3dvbGZzc2wtZnJlZXJ0b3MvcHVsbC8zL2ZpbGVzICovCisgICAgICAgICNpZiAhZGVmaW5lZChVU0VfRkFTVF9NQVRIKSB8fCBkZWZpbmVkKEhBVkVfRUQyNTUxOSkgfHwgXAorICAgICAgICAgICAgZGVmaW5lZChIQVZFX0VENDQ4KQorICAgICAgICAgICAgI2RlZmluZSBYUkVBTExPQyhwLCBuLCBoLCB0KSBwdlBvcnRSZWFsbG9jKChwKSwgKG4pKQorICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9MT1dfTUVNT1JZCisgICAgI3VuZGVmICBSU0FfTE9XX01FTQorICAgICNkZWZpbmUgUlNBX0xPV19NRU0KKyAgICAjdW5kZWYgIFdPTEZTU0xfU01BTExfU1RBQ0sKKyAgICAjZGVmaW5lIFdPTEZTU0xfU01BTExfU1RBQ0sKKyAgICAjdW5kZWYgIFRGTV9USU1JTkdfUkVTSVNUQU5UCisgICAgI2RlZmluZSBURk1fVElNSU5HX1JFU0lTVEFOVAorI2VuZGlmCisKKy8qIFRvIHN1cHBvcnQgc3RvcmluZyBzb21lIG9mIHRoZSBsYXJnZSBjb25zdGFudCB0YWJsZXMgaW4gZmxhc2ggbWVtb3J5IHJhdGhlciB0aGFuIFNSQU0uCisgICBVc2VmdWwgZm9yIHByb2Nlc3NvcnMgdGhhdCBoYXZlIGxpbWl0ZWQgU1JBTSwgc3VjaCBhcyB0aGUgQVZSIGZhbWlseSBvZiBtaWNyb3Ryb2xsZXJzLiAqLworI2lmZGVmIFdPTEZTU0xfVVNFX0ZMQVNITUVNCisgICAgLyogVGhpcyBpcyBzdXBwb3J0ZWQgb24gdGhlIGF2ci1nY2MgY29tcGlsZXIsIGZvciBtb3JlIGluZm9ybWF0aW9uIHNlZToKKyAgICAgICAgIGh0dHBzOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCAqLworICAgICNkZWZpbmUgRkxBU0hfUVVBTElGSUVSIF9fZmxhc2gKKworICAgIC8qIENvcHkgZGF0YSBvdXQgb2YgZmxhc2ggbWVtb3J5IGFuZCBpbnRvIFNSQU0gKi8KKyAgICAjZGVmaW5lIFhNRU1DUFlfUChwZGVzdCwgcHNyYywgc2l6ZSkgbWVtY3B5X1AoKHBkZXN0KSwgKHBzcmMpLCAoc2l6ZSkpCisjZWxzZQorICAgICNkZWZpbmUgRkxBU0hfUVVBTElGSUVSCisjZW5kaWYKKworI2lmZGVmIEZSRUVTQ0FMRV9NUVhfNV8wCisgICAgLyogdXNlIG5vcm1hbCBGcmVlc2NhbGUgTVFYIHBvcnQsIGJ1dCB3aXRoIG1pbm9yIGNoYW5nZXMgZm9yIDUuMCAqLworICAgICNkZWZpbmUgRlJFRVNDQUxFX01RWAorI2VuZGlmCisKKyNpZmRlZiBGUkVFU0NBTEVfTVFYXzRfMAorICAgIC8qIHVzZSBub3JtYWwgRnJlZXNjYWxlIE1RWCBwb3J0LCBidXQgd2l0aCBtaW5vciBjaGFuZ2VzIGZvciA0LjAgKi8KKyAgICAjZGVmaW5lIEZSRUVTQ0FMRV9NUVgKKyNlbmRpZgorCisjaWZkZWYgRlJFRVNDQUxFX01RWAorICAgICNkZWZpbmUgRlJFRVNDQUxFX0NPTU1PTgorICAgICNpbmNsdWRlICJtcXguaCIKKyAgICAjaWZuZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAgICAgI2luY2x1ZGUgIm1mcy5oIgorICAgICAgICAjaWYgKGRlZmluZWQoTVFYX1VTRV9JT19PTEQpICYmIE1RWF9VU0VfSU9fT0xEKSB8fCBcCisgICAgICAgICAgICBkZWZpbmVkKEZSRUVTQ0FMRV9NUVhfNV8wKQorICAgICAgICAgICAgI2luY2x1ZGUgImZpby5oIgorICAgICAgICAgICAgI2RlZmluZSBOT19TVERJT19GSUxFU1lTVEVNCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAjaW5jbHVkZSAibmlvLmgiCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorICAgICNpZm5kZWYgU0lOR0xFX1RIUkVBREVECisgICAgICAgICNpbmNsdWRlICJtdXRleC5oIgorICAgICNlbmRpZgorCisgICAgI2lmICFkZWZpbmVkKFhNQUxMT0NfT1ZFUlJJREUpICYmICFkZWZpbmVkKFhNQUxMT0NfVVNFUikKKyAgICAgICAgI2RlZmluZSBYTUFMTE9DX09WRVJSSURFCisgICAgICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0KSAgICAodm9pZCAqKV9tZW1fYWxsb2Nfc3lzdGVtKChzKSkKKyAgICAgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0KSAgICAgIHt2b2lkKiB4cCA9IChwKTsgaWYgKCh4cCkpIF9tZW1fZnJlZSgoeHApKTt9CisgICAgICAgIC8qIE5vdGU6IE1RWCBoYXMgbm8gcmVhbGxvYywgdXNpbmcgZmFzdG1hdGggYWJvdmUgKi8KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgVVNFX0ZBU1RfTUFUSAorICAgICAgICAvKiBVbmRlZiBmaXJzdCB0byBhdm9pZCByZS1kZWZpbml0aW9uIGlmIHVzZXJfc2V0dGluZ3MuaCBkZWZpbmVzICovCisgICAgICAgICN1bmRlZiBURk1fVElNSU5HX1JFU0lTVEFOVAorICAgICAgICAjZGVmaW5lIFRGTV9USU1JTkdfUkVTSVNUQU5UCisgICAgICAgICN1bmRlZiBFQ0NfVElNSU5HX1JFU0lTVEFOVAorICAgICAgICAjZGVmaW5lIEVDQ19USU1JTkdfUkVTSVNUQU5UCisgICAgICAgICN1bmRlZiBXQ19SU0FfQkxJTkRJTkcKKyAgICAgICAgI2RlZmluZSBXQ19SU0FfQkxJTkRJTkcKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRlJFRVNDQUxFX0tTREtfTVFYCisgICAgI2RlZmluZSBGUkVFU0NBTEVfQ09NTU9OCisgICAgI2luY2x1ZGUgPG1xeC5oPgorICAgICNpZm5kZWYgTk9fRklMRVNZU1RFTQorICAgICAgICAjaWYgKGRlZmluZWQoTVFYX1VTRV9JT19PTEQpICYmIE1RWF9VU0VfSU9fT0xEKSB8fCBcCisgICAgICAgICAgICBkZWZpbmVkKEZSRUVTQ0FMRV9NUVhfNV8wKQorICAgICAgICAgICAgI2luY2x1ZGUgPGZpby5oPgorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8bmlvLmg+CisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorICAgICNpZm5kZWYgU0lOR0xFX1RIUkVBREVECisgICAgICAgICNpbmNsdWRlIDxtdXRleC5oPgorICAgICNlbmRpZgorCisgICAgI2RlZmluZSBYTUFMTE9DKHMsIGgsIHQpICAgICh2b2lkICopX21lbV9hbGxvY19zeXN0ZW0oKHMpKQorICAgICNkZWZpbmUgWEZSRUUocCwgaCwgdCkgICAgICB7dm9pZCogeHAgPSAocCk7IGlmICgoeHApKSBfbWVtX2ZyZWUoKHhwKSk7fQorICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgX21lbV9yZWFsbG9jKChwKSwgKG4pKSAvKiBzaW5jZSBNUVggNC4xLjIgKi8KKworICAgICNkZWZpbmUgTVFYX0ZJTEVfUFRSIEZJTEUgKgorICAgICNkZWZpbmUgSU9fU0VFS19TRVQgIFNFRUtfU0VUCisgICAgI2RlZmluZSBJT19TRUVLX0VORCAgU0VFS19FTkQKKyNlbmRpZiAvKiBGUkVFU0NBTEVfS1NES19NUVggKi8KKworI2lmIGRlZmluZWQoRlJFRVNDQUxFX0ZSRUVfUlRPUykgfHwgZGVmaW5lZChGUkVFU0NBTEVfS1NES19GUkVFUlRPUykKKyAgICAjZGVmaW5lIE5PX0ZJTEVTWVNURU0KKyAgICAjZGVmaW5lIFdPTEZTU0xfQ1JZUFRfSFdfTVVURVggMQorCisgICAgI2lmICFkZWZpbmVkKFhNQUxMT0NfVVNFUikgJiYgIWRlZmluZWQoTk9fV09MRlNTTF9NRU1PUlkpCisgICAgICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0eXBlKSAgcHZQb3J0TWFsbG9jKChzKSkKKyAgICAgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0eXBlKSAgICB2UG9ydEZyZWUoKHApKQorICAgICNlbmRpZgorCisgICAgLy8jZGVmaW5lIFVTRVJfVElDS1MKKyAgICAvKiBBbGxvd3MgdXNlIG9mIERIIHdpdGggZml4ZWQgcG9pbnRzIGlmIHVuY29tbWVudGVkIGFuZCBOT19ESCBpcyByZW1vdmVkICovCisgICAgLyogV09MRlNTTF9ESF9DT05TVCAqLworICAgICNkZWZpbmUgV09MRlNTTF9MV0lQCisgICAgI2RlZmluZSBGUkVFUlRPU19UQ1AKKworICAgICNkZWZpbmUgRlJFRVNDQUxFX0ZSRUVfUlRPUworICAgICNkZWZpbmUgRlJFRVJUT1NfU09DS0VUX0VSUk9SICggLTEgKQorICAgICNkZWZpbmUgRlJFRVJUT1NfRVdPVUxEQkxPQ0sgKCAtMiApCisgICAgI2RlZmluZSBGUkVFUlRPU19FSU5WQUwgKCAtNCApCisgICAgI2RlZmluZSBGUkVFUlRPU19FQUREUk5PVEFWQUlMICggLTUgKQorICAgICNkZWZpbmUgRlJFRVJUT1NfRUFERFJJTlVTRSAoIC02ICkKKyAgICAjZGVmaW5lIEZSRUVSVE9TX0VOT0JVRlMgKCAtNyApCisgICAgI2RlZmluZSBGUkVFUlRPU19FTk9QUk9UT09QVCAoIC04ICkKKyNlbmRpZiAvKiBGUkVFU0NBTEVfRlJFRV9SVE9TIHx8IEZSRUVTQ0FMRV9LU0RLX0ZSRUVSVE9TICovCisKKyNpZmRlZiBGUkVFU0NBTEVfS1NES19CTQorICAgICNkZWZpbmUgRlJFRVNDQUxFX0NPTU1PTgorICAgICNkZWZpbmUgV09MRlNTTF9VU0VSX0lPCisgICAgI2RlZmluZSBTSU5HTEVfVEhSRUFERUQKKyAgICAjZGVmaW5lIE5PX0ZJTEVTWVNURU0KKyAgICAjaWZuZGVmIFRJTUVfT1ZFUlJJREVTCisgICAgICAgICNkZWZpbmUgVVNFUl9USUNLUworICAgICNlbmRpZgorI2VuZGlmIC8qIEZSRUVTQ0FMRV9LU0RLX0JNICovCisKKyNpZmRlZiBGUkVFU0NBTEVfQ09NTU9OCisgICAgI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKKworICAgIC8qIGRpc2FibGUgZmVhdHVyZXMgKi8KKyAgICAjdW5kZWYgIE5PX1dSSVRFVgorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI3VuZGVmICBOT19ERVZfUkFORE9NCisgICAgI2RlZmluZSBOT19ERVZfUkFORE9NCisgICAgI3VuZGVmICBOT19SQUJCSVQKKyAgICAjZGVmaW5lIE5PX1JBQkJJVAorICAgICN1bmRlZiAgTk9fV09MRlNTTF9ESVIKKyAgICAjZGVmaW5lIE5PX1dPTEZTU0xfRElSCisgICAgI3VuZGVmICBOT19SQzQKKyAgICAjZGVmaW5lIE5PX1JDNAorCisgICAgLyogZW5hYmxlIGZlYXR1cmVzICovCisgICAgI3VuZGVmICBVU0VfRkFTVF9NQVRICisgICAgI2RlZmluZSBVU0VfRkFTVF9NQVRICisKKyAgICAjZGVmaW5lIFVTRV9DRVJUX0JVRkZFUlNfMjA0OAorICAgICNkZWZpbmUgQkVOQ0hfRU1CRURERUQKKworICAgICNkZWZpbmUgVEZNX1RJTUlOR19SRVNJU1RBTlQKKyAgICAjZGVmaW5lIEVDQ19USU1JTkdfUkVTSVNUQU5UCisKKyAgICAjdW5kZWYgIEhBVkVfRUNDCisgICAgI2lmbmRlZiBXT0xGQ1JZUFRfRklQU19SQU5ECisgICAgI2RlZmluZSBIQVZFX0VDQworICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fQUVTCisgICAgICAgICN1bmRlZiAgSEFWRV9BRVNDQ00KKyAgICAgICAgI2RlZmluZSBIQVZFX0FFU0NDTQorICAgICAgICAjdW5kZWYgIEhBVkVfQUVTR0NNCisgICAgICAgICNkZWZpbmUgSEFWRV9BRVNHQ00KKyAgICAgICAgI3VuZGVmICBXT0xGU1NMX0FFU19DT1VOVEVSCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9BRVNfQ09VTlRFUgorICAgICAgICAjdW5kZWYgIFdPTEZTU0xfQUVTX0RJUkVDVAorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQUVTX0RJUkVDVAorICAgICNlbmRpZgorCisgICAgI2lmZGVmIEZSRUVTQ0FMRV9LU0RLXzFfMworICAgICAgICAjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyAgICAjZWxpZiAhZGVmaW5lZChGUkVFU0NBTEVfTVFYKQorICAgICAgICAvKiBDbGFzc2ljIE1RWCBkb2VzIG5vdCBoYXZlIGZzbF9jb21tb24uaCAqLworICAgICAgICAjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorICAgICNlbmRpZgorCisgICAgLyogcmFuZG9tIHNlZWQgKi8KKyAgICAjZGVmaW5lIE5PX09MRF9STkdOQU1FCisgICAgI2lmICAgZGVmaW5lZChGUkVFU0NBTEVfTk9fUk5HKQorICAgICAgICAvKiBub3RoaW5nIHRvIGRlZmluZSAqLworICAgICNlbGlmIGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX1RSTkdfQ09VTlQpICYmIChGU0xfRkVBVFVSRV9TT0NfVFJOR19DT1VOVCA+IDApCisgICAgICAgICNkZWZpbmUgRlJFRVNDQUxFX0tTREtfMl8wX1RSTkcKKyAgICAjZWxpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19STkdfQ09VTlQpICYmIChGU0xfRkVBVFVSRV9TT0NfUk5HX0NPVU5UID4gMCkKKyAgICAgICAgI2lmZGVmIEZSRUVTQ0FMRV9LU0RLXzFfMworICAgICAgICAgICAgI2luY2x1ZGUgImZzbF9ybmdhX2RyaXZlci5oIgorICAgICAgICAgICAgI2RlZmluZSBGUkVFU0NBTEVfUk5HQQorICAgICAgICAgICAgI2RlZmluZSBSTkdBX0lOU1RBTkNFICgwKQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2RlZmluZSBGUkVFU0NBTEVfS1NES18yXzBfUk5HQQorICAgICAgICAjZW5kaWYKKyAgICAjZWxpZiAhZGVmaW5lZChGUkVFU0NBTEVfS1NES19CTSkgJiYgIWRlZmluZWQoRlJFRVNDQUxFX0ZSRUVfUlRPUykgJiYgIWRlZmluZWQoRlJFRVNDQUxFX0tTREtfRlJFRVJUT1MpCisgICAgICAgICNkZWZpbmUgRlJFRVNDQUxFX1JOR0EKKyAgICAgICAgI2RlZmluZSBSTkdBX0lOU1RBTkNFICgwKQorICAgICAgICAvKiBkZWZhdWx0aW5nIHRvIEs3MCBSTkdBLCB1c2VyIHNob3VsZCBjaGFuZ2UgaWYgZGlmZmVyZW50ICovCisgICAgICAgIC8qICNkZWZpbmUgRlJFRVNDQUxFX0s1M19STkdCICovCisgICAgICAgICNkZWZpbmUgRlJFRVNDQUxFX0s3MF9STkdBCisgICAgI2VuZGlmCisKKyAgICAvKiBIVyBjcnlwdG8gKi8KKyAgICAvKiBhdXRvbWF0aWMgZW5hYmxlIGJhc2VkIG9uIEtpbmV0aXMgZmVhdHVyZSAqLworICAgIC8qIGlmIGNhc2UgbWFudWFsIHNlbGVjdGlvbiBpcyByZXF1aXJlZCwgZm9yIGV4YW1wbGUgZm9yIGJlbmNobWFya2luZyBwdXJwb3NlcywKKyAgICAgKiBqdXN0IGRlZmluZSBGUkVFU0NBTEVfVVNFX01NQ0FVIG9yIEZSRUVTQ0FMRV9VU0VfTFRDIG9yIG5vbmUgb2YgdGhlc2UgdHdvIG1hY3JvcyAoZm9yIHNvZnR3YXJlIG9ubHkpCisgICAgICogYm90aCBjYW4gYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNseSBhcyBMVEMgaGFzIHByaW9yaXR5IG92ZXIgTU1DQVUgaW4gc291cmNlIGNvZGUuCisgICAgICovCisgICAgLyogI2RlZmluZSBGU0xfSFdfQ1JZUFRPX01BTlVBTF9TRUxFQ1RJT04gKi8KKyAgICAjaWZuZGVmIEZTTF9IV19DUllQVE9fTUFOVUFMX1NFTEVDVElPTgorICAgICAgICAjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfTU1DQVVfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19NTUNBVV9DT1VOVAorICAgICAgICAgICAgI2RlZmluZSBGUkVFU0NBTEVfVVNFX01NQ0FVCisgICAgICAgICNlbmRpZgorCisgICAgICAgICNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19MVENfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19MVENfQ09VTlQKKyAgICAgICAgICAgICNkZWZpbmUgRlJFRVNDQUxFX1VTRV9MVEMKKyAgICAgICAgI2VuZGlmCisgICAgI2Vsc2UKKyAgICAgICAgLyogI2RlZmluZSBGUkVFU0NBTEVfVVNFX01NQ0FVICovCisgICAgICAgIC8qICNkZWZpbmUgRlJFRVNDQUxFX1VTRV9MVEMgKi8KKyAgICAjZW5kaWYKKyNlbmRpZiAvKiBGUkVFU0NBTEVfQ09NTU9OICovCisKKy8qIENsYXNzaWMgcHJlLUtTREsgbW1DQVUgbGlicmFyeSAqLworI2lmZGVmIEZSRUVTQ0FMRV9VU0VfTU1DQVVfQ0xBU1NJQworICAgICNkZWZpbmUgRlJFRVNDQUxFX1VTRV9NTUNBVQorICAgICNkZWZpbmUgRlJFRVNDQUxFX01NQ0FVX0NMQVNTSUMKKyAgICAjZGVmaW5lIEZSRUVTQ0FMRV9NTUNBVV9DTEFTU0lDX1NIQQorI2VuZGlmCisKKy8qIEtTREsgbW1DQVUgbGlicmFyeSAqLworI2lmZGVmIEZSRUVTQ0FMRV9VU0VfTU1DQVUKKyAgICAvKiBBRVMgYW5kIERFUyAqLworICAgICNkZWZpbmUgRlJFRVNDQUxFX01NQ0FVCisgICAgLyogTUQ1LCBTSEEtMSBhbmQgU0hBLTI1NiAqLworICAgICNkZWZpbmUgRlJFRVNDQUxFX01NQ0FVX1NIQQorI2VuZGlmIC8qIEZSRUVTQ0FMRV9VU0VfTU1DQVUgKi8KKworI2lmZGVmIEZSRUVTQ0FMRV9VU0VfTFRDCisgICAgI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0xUQ19DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0xUQ19DT1VOVAorICAgICAgICAjZGVmaW5lIEZSRUVTQ0FMRV9MVEMKKyAgICAgICAgI2RlZmluZSBMVENfQkFTRSBMVEMwCisKKyAgICAgICAgI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTCisgICAgICAgICAgICAjZGVmaW5lIEZSRUVTQ0FMRV9MVENfREVTCisgICAgICAgICNlbmRpZgorCisgICAgICAgICNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfR0NNKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0dDTQorICAgICAgICAgICAgI2RlZmluZSBGUkVFU0NBTEVfTFRDX0FFU19HQ00KKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAgICAgICAgICAjZGVmaW5lIEZSRUVTQ0FMRV9MVENfU0hBCisgICAgICAgICNlbmRpZgorCisgICAgICAgICNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBCisgICAgICAgICAgICAjaWZuZGVmIFdPTEZDUllQVF9GSVBTX1JBTkQKKyAgICAgICAgICAgICNkZWZpbmUgRlJFRVNDQUxFX0xUQ19FQ0MKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgI2RlZmluZSBGUkVFU0NBTEVfTFRDX1RGTQorCisgICAgICAgICAgICAvKiB0aGUgTFRDIFBLSEEgaGFyZHdhcmUgbGltaXQgaXMgMjA0OCBiaXRzICgyNTYgYnl0ZXMpIGZvciBpbnRlZ2VyIGFyaXRobWV0aWMuCisgICAgICAgICAgICAgICB0aGUgTFRDX01BWF9JTlRfQllURVMgZGVmaW5lcyB0aGUgc2l6ZSBvZiBsb2NhbCB2YXJpYWJsZXMgdGhhdCBob2xkIGJpZyBpbnRlZ2Vycy4gKi8KKyAgICAgICAgICAgIC8qIHNpemUgaXMgbXVsdGlwbGljYXRpb24gb2YgMiBiaWcgaW50cyAqLworICAgICAgICAgICAgI2lmICFkZWZpbmVkKE5PX1JTQSkgfHwgIWRlZmluZWQoTk9fREgpCisgICAgICAgICAgICAgICAgI2RlZmluZSBMVENfTUFYX0lOVF9CWVRFUyAgICgyNTYqMikKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBMVENfTUFYX0lOVF9CWVRFUyAgICg0OCoyKQorICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgIC8qIFRoaXMgRlJFRVNDQUxFX0xUQ19URk1fUlNBXzQwOTZfRU5BQkxFIG1hY3JvIGNhbiBiZSBkZWZpbmVkLgorICAgICAgICAgICAgICogSW4gc3VjaCBhIGNhc2UgYm90aCBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgYWxnb3JpdGhtCisgICAgICAgICAgICAgKiBmb3IgVEZNIGlzIGxpbmtlZCBpbi4gVGhlIGRlY2lzaW9uIGZvciB3aGljaCBhbGdvcml0aG0gaXMgdXNlZCBpcyBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgICAqIGZyb20gc2l6ZSBvZiBpbnB1dHMuIElmIGlucHV0cyBhbmQgcmVzdWx0IGNhbiBmaXQgaW50byBMVEMgKHNlZSBMVENfTUFYX0lOVF9CWVRFUykKKyAgICAgICAgICAgICAqIHRoZW4gd2UgY2FsbCBoYXJkd2FyZSBhbGdvcml0aG0sIG90aGVyd2lzZSB3ZSBjYWxsIHNvZnR3YXJlIGFsZ29yaXRobS4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBDaGluZXNlIHJlbWluZGVyIHRoZW9yZW0gaXMgdXNlZCB0byBicmVhayBSU0EgNDA5NiBleHBvbmVudGlhdGlvbnMgKGJvdGggcHVibGljIGFuZCBwcml2YXRlIGtleSkKKyAgICAgICAgICAgICAqIGludG8gc2V2ZXJhbCBjb21wdXRhdGlvbnMgd2l0aCAyMDQ4LWJpdCBtb2R1bHVzIGFuZCBleHBvbmVudHMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qICNkZWZpbmUgRlJFRVNDQUxFX0xUQ19URk1fUlNBXzQwOTZfRU5BQkxFICovCisKKyAgICAgICAgICAgIC8qIEVDQy0zODQsIEVDQy0yNTYsIEVDQy0yMjQgYW5kIEVDQy0xOTIgaGF2ZSBiZWVuIGVuYWJsZWQgd2l0aCBMVEMgUEtIQSBhY2NlbGVyYXRpb24gKi8KKyAgICAgICAgICAgICNpZmRlZiBIQVZFX0VDQworICAgICAgICAgICAgICAgICN1bmRlZiAgRUNDX1RJTUlOR19SRVNJU1RBTlQKKyAgICAgICAgICAgICAgICAjZGVmaW5lIEVDQ19USU1JTkdfUkVTSVNUQU5UCisKKyAgICAgICAgICAgICAgICAvKiB0aGUgTFRDIFBLSEEgaGFyZHdhcmUgbGltaXQgaXMgNTEyIGJpdHMgKDY0IGJ5dGVzKSBmb3IgRUNDLgorICAgICAgICAgICAgICAgICAgIHRoZSBMVENfTUFYX0VDQ19CSVRTIGRlZmluZXMgdGhlIHNpemUgb2YgbG9jYWwgdmFyaWFibGVzIHRoYXQgaG9sZCBFQ0MgcGFyYW1ldGVycworICAgICAgICAgICAgICAgICAgIGFuZCBwb2ludCBjb29yZGluYXRlcyAqLworICAgICAgICAgICAgICAgICNpZm5kZWYgTFRDX01BWF9FQ0NfQklUUworICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIExUQ19NQVhfRUNDX0JJVFMgKDM4NCkKKyAgICAgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBjdXJ2ZXMgdXAgdG8gMzg0IGJpdHMgKi8KKyAgICAgICAgICAgICAgICAjaWYgIWRlZmluZWQoRUNDX1VTRVJfQ1VSVkVTKSAmJiAhZGVmaW5lZChIQVZFX0FMTF9DVVJWRVMpCisgICAgICAgICAgICAgICAgICAgICNkZWZpbmUgRUNDX1VTRVJfQ1VSVkVTCisgICAgICAgICAgICAgICAgICAgICNkZWZpbmUgSEFWRV9FQ0MxOTIKKyAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBIQVZFX0VDQzIyNAorICAgICAgICAgICAgICAgICAgICAjdW5kZWYgIE5PX0VDQzI1NgorICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIEhBVkVfRUNDMzg0CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisjZW5kaWYgLyogRlJFRVNDQUxFX1VTRV9MVEMgKi8KKworI2lmZGVmIEZSRUVTQ0FMRV9MVENfVEZNX1JTQV80MDk2X0VOQUJMRQorICAgICN1bmRlZiAgVVNFX0NFUlRfQlVGRkVSU180MDk2CisgICAgI2RlZmluZSBVU0VfQ0VSVF9CVUZGRVJTXzQwOTYKKyAgICAjdW5kZWYgIEZQX01BWF9CSVRTCisgICAgI2RlZmluZSBGUF9NQVhfQklUUyAoODE5MikKKyAgICAjdW5kZWYgIFNQX0lOVF9CSVRTCisgICAgI2RlZmluZSBTUF9JTlRfQklUUyAoNDA5NikKKworICAgICN1bmRlZiAgTk9fREgKKyAgICAjZGVmaW5lIE5PX0RICisgICAgI3VuZGVmICBOT19EU0EKKyAgICAjZGVmaW5lIE5PX0RTQQorI2VuZGlmIC8qIEZSRUVTQ0FMRV9MVENfVEZNX1JTQV80MDk2X0VOQUJMRSAqLworCisvKiBpZiBMVEMgaGFzIEFFUyBlbmdpbmUgYnV0IGRvZXNuJ3QgaGF2ZSBHQ00sIHVzZSBzb2Z0d2FyZSB3aXRoIExUQyBBRVMgRUNCIG1vZGUgKi8KKyNpZiBkZWZpbmVkKEZSRUVTQ0FMRV9VU0VfTFRDKSAmJiAhZGVmaW5lZChGUkVFU0NBTEVfTFRDX0FFU19HQ00pCisgICAgI2RlZmluZSBHQ01fVEFCTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX1NUTTMyRjIpIHx8IGRlZmluZWQoV09MRlNTTF9TVE0zMkY0KSB8fCBcCisgICAgZGVmaW5lZChXT0xGU1NMX1NUTTMyRjcpIHx8IGRlZmluZWQoV09MRlNTTF9TVE0zMkYxKSB8fCBcCisgICAgZGVmaW5lZChXT0xGU1NMX1NUTTMyTDQpIHx8IGRlZmluZWQoV09MRlNTTF9TVE0zMkw1KSB8fCBcCisgICAgZGVmaW5lZChXT0xGU1NMX1NUTTMyV0IpIHx8IGRlZmluZWQoV09MRlNTTF9TVE0zMkg3KSB8fCBcCisgICAgZGVmaW5lZChXT0xGU1NMX1NUTTMyRzApCisKKyAgICAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorICAgICNpZm5kZWYgQ0hBUl9CSVQKKyAgICAgICNkZWZpbmUgQ0hBUl9CSVQgOAorICAgICNlbmRpZgorICAgICNkZWZpbmUgTk9fREVWX1JBTkRPTQorICAgICNkZWZpbmUgTk9fV09MRlNTTF9ESVIKKyAgICAjdW5kZWYgIE5PX1JBQkJJVAorICAgICNkZWZpbmUgTk9fUkFCQklUCisgICAgI2lmbmRlZiBOT19TVE0zMl9STkcKKyAgICAgICAgI3VuZGVmICBTVE0zMl9STkcKKyAgICAgICAgI2RlZmluZSBTVE0zMl9STkcKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfU1RNMzJGNDI3X1JORworICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMyZjQyN3h4LmgiCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fU1RNMzJfQ1JZUFRPCisgICAgICAgICN1bmRlZiAgU1RNMzJfQ1JZUFRPCisgICAgICAgICNkZWZpbmUgU1RNMzJfQ1JZUFRPCisKKyAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9TVE0zMkw0KSB8fCBkZWZpbmVkKFdPTEZTU0xfU1RNMzJMNSkgfHwgXAorICAgICAgICAgICAgZGVmaW5lZChXT0xGU1NMX1NUTTMyV0IpCisgICAgICAgICAgICAjZGVmaW5lIE5PX0FFU18xOTIgLyogaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCAxOTItYml0ICovCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fU1RNMzJfSEFTSAorICAgICAgICAjdW5kZWYgIFNUTTMyX0hBU0gKKyAgICAgICAgI2RlZmluZSBTVE0zMl9IQVNICisgICAgI2VuZGlmCisgICAgI2lmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0lDQ0FSTV9fKQorICAgICAgICAjZGVmaW5lIEtFSUxfSU5UUklOU0lDUworICAgICNlbmRpZgorICAgICNkZWZpbmUgTk9fT0xEX1JOR05BTUUKKyAgICAjaWZkZWYgV09MRlNTTF9TVE0zMl9DVUJFTVgKKyAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9TVE0zMkYxKQorICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMyZjF4eF9oYWwuaCIKKyAgICAgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1NUTTMyRjIpCisgICAgICAgICAgICAjaW5jbHVkZSAic3RtMzJmMnh4X2hhbC5oIgorICAgICAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfU1RNMzJMNSkKKyAgICAgICAgICAgICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsLmgiCisgICAgICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9TVE0zMkw0KQorICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMybDR4eF9oYWwuaCIKKyAgICAgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1NUTTMyRjQpCisgICAgICAgICAgICAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbC5oIgorICAgICAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfU1RNMzJGNykKKyAgICAgICAgICAgICNpbmNsdWRlICJzdG0zMmY3eHhfaGFsLmgiCisgICAgICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9TVE0zMkYxKQorICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMyZjF4eF9oYWwuaCIKKyAgICAgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1NUTTMySDcpCisgICAgICAgICAgICAjaW5jbHVkZSAic3RtMzJoN3h4X2hhbC5oIgorICAgICAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfU1RNMzJXQikKKyAgICAgICAgICAgICNpbmNsdWRlICJzdG0zMndieHhfaGFsLmgiCisgICAgICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9TVE0zMkcwKQorICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMyZzB4eF9oYWwuaCIKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfQ1VCRU1YX1VTRV9MTCkgJiYgZGVmaW5lZChXT0xGU1NMX1NUTTMyTDQpCisgICAgICAgICAgICAjaW5jbHVkZSAic3RtMzJsNHh4X2xsX3JuZy5oIgorICAgICAgICAjZW5kaWYKKworICAgICAgICAjaWZuZGVmIFNUTTMyX0hBTF9USU1FT1VUCisgICAgICAgICAgICAjZGVmaW5lIFNUTTMyX0hBTF9USU1FT1VUICAgMHhGRgorICAgICAgICAjZW5kaWYKKyAgICAjZWxzZQorICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1NUTTMyRjIpCisgICAgICAgICAgICAjaW5jbHVkZSAic3RtMzJmMnh4LmgiCisgICAgICAgICAgICAjaWZkZWYgU1RNMzJfQ1JZUFRPCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMyZjJ4eF9jcnlwLmgiCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICNpZmRlZiBTVE0zMl9IQVNICisgICAgICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMyZjJ4eF9oYXNoLmgiCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1NUTTMyRjQpCisgICAgICAgICAgICAjaW5jbHVkZSAic3RtMzJmNHh4LmgiCisgICAgICAgICAgICAjaWZkZWYgU1RNMzJfQ1JZUFRPCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMyZjR4eF9jcnlwLmgiCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICNpZmRlZiBTVE0zMl9IQVNICisgICAgICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMyZjR4eF9oYXNoLmgiCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1NUTTMyTDUpCisgICAgICAgICAgICAjaW5jbHVkZSAic3RtMzJsNXh4LmgiCisgICAgICAgICAgICAjaWZkZWYgU1RNMzJfQ1JZUFRPCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMybDV4eF9jcnlwLmgiCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICNpZmRlZiBTVE0zMl9IQVNICisgICAgICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMybDV4eF9oYXNoLmgiCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1NUTTMyTDQpCisgICAgICAgICAgICAjaW5jbHVkZSAic3RtMzJsNHh4LmgiCisgICAgICAgICAgICAjaWZkZWYgU1RNMzJfQ1JZUFRPCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMybDR4eF9jcnlwLmgiCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICNpZmRlZiBTVE0zMl9IQVNICisgICAgICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMybDR4eF9oYXNoLmgiCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1NUTTMyRjcpCisgICAgICAgICAgICAjaW5jbHVkZSAic3RtMzJmN3h4LmgiCisgICAgICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9TVE0zMkg3KQorICAgICAgICAgICAgI2luY2x1ZGUgInN0bTMyaDd4eC5oIgorICAgICAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfU1RNMzJGMSkKKyAgICAgICAgICAgICNpbmNsdWRlICJzdG0zMmYxeHguaCIKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmIC8qIFdPTEZTU0xfU1RNMzJfQ1VCRU1YICovCisjZW5kaWYgLyogV09MRlNTTF9TVE0zMkYyIHx8IFdPTEZTU0xfU1RNMzJGNCB8fCBXT0xGU1NMX1NUTTMyTDQgfHwgCisgICAgICAgICAgV09MRlNTTF9TVE0zMkw1IHx8IFdPTEZTU0xfU1RNMzJGNyB8fCBXT0xGU1NMX1NUTVdCIHx8IAorICAgICAgICAgIFdPTEZTU0xfU1RNMzJINyB8fCBXT0xGU1NMX1NUTTMyRzAgKi8KKyNpZmRlZiBXT0xGU1NMX0RFT1MKKyAgICAjaW5jbHVkZSA8ZGVvcy5oPgorICAgICNpbmNsdWRlIDx0aW1lb3V0Lmg+CisgICAgI2luY2x1ZGUgPHNvY2tldGFwaS5oPgorICAgICNpbmNsdWRlIDxsd2lwLXNvY2tldC5oPgorICAgICNpbmNsdWRlIDxtZW0uaD4KKyAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPiAvKiBmb3IgcmFuZF9yOiBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKyAgICAjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBzbnByaW50ZiAqLworCisgICAgLyogdXNlIGV4dGVybmFsIG1lbW9yeSBYTUFMTE9DLCBYRlJFRSBhbmQgWFJFQUxMT0MgZnVuY3Rpb25zICovCisgICAgI2RlZmluZSBYTUFMTE9DX1VTRVIKKworICAgIC8qIGRpc2FibGUgZmFsbC1iYWNrIGNhc2UsIG1hbGxvYywgcmVhbGxvYyBhbmQgZnJlZSBhcmUgdW5hdmFpbGFibGUgKi8KKyAgICAjZGVmaW5lIFdPTEZTU0xfTk9fTUFMTE9DCisKKyAgICAvKiBmaWxlIHN5c3RlbSBoYXMgbm90IGJlZW4gcG9ydGVkIHNpbmNlIGl0IGlzIGEgc2VwYXJhdGUgcHJvZHVjdC4gKi8KKworICAgICNkZWZpbmUgTk9fRklMRVNZU1RFTQorCisgICAgI2lmZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAgICAgI2RlZmluZSBOT19XT0xGU1NMX0RJUgorICAgICAgICAjZGVmaW5lIE5PX1dSSVRFVgorICAgICNlbmRpZgorCisgICAgI2RlZmluZSBVU0VfRkFTVF9NQVRICisgICAgI2RlZmluZSBURk1fVElNSU5HX1JFU0lTVEFOVAorICAgICNkZWZpbmUgRUNDX1RJTUlOR19SRVNJU1RBTlQKKyAgICAjZGVmaW5lIFdDX1JTQV9CTElORElORworCisgICAgI2RlZmluZSBIQVZFX0VDQworICAgICNkZWZpbmUgVEZNX0VDQzE5MgorICAgICNkZWZpbmUgVEZNX0VDQzIyNAorICAgICNkZWZpbmUgVEZNX0VDQzI1NgorICAgICNkZWZpbmUgVEZNX0VDQzM4NAorICAgICNkZWZpbmUgVEZNX0VDQzUyMQorCisgICAgI2RlZmluZSBIQVZFX1RMU19FWFRFTlNJT05TCisgICAgI2RlZmluZSBIQVZFX1NVUFBPUlRFRF9DVVJWRVMKKyAgICAjZGVmaW5lIEhBVkVfRVhURU5ERURfTUFTVEVSCisKKyAgICAjaWYgKF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfQklHX0VORElBTl9fKQorICAgICAgICAjZGVmaW5lIEJJR19FTkRJQU5fT1JERVIKKyAgICAjZWxzZQorICAgICAgICAjdW5kZWYgIEJJR19FTkRJQU5fT1JERVIKKyAgICAgICAgI2RlZmluZSBMSVRUTEVfRU5ESUFOX09SREVSCisgICAgI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9ERU9TKi8KKworI2lmZGVmIE1JQ1JJVU0KKyAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgI2luY2x1ZGUgPG9zLmg+CisgICAgI2lmIGRlZmluZWQoUlRPU19NT0RVTEVfTkVUX0FWQUlMKSB8fCAoQVBQX0NGR19UQ1BJUF9FTiA9PSBERUZfRU5BQkxFRCkKKyAgICAgICAgI2luY2x1ZGUgPG5ldF9jZmcuaD4KKyAgICAgICAgI2luY2x1ZGUgPG5ldF9zb2NrLmg+CisgICAgICAgICNpZiAoT1NfVkVSU0lPTiA8IDUwMDAwKQorICAgICAgICAgICAgI2luY2x1ZGUgPG5ldF9lcnIuaD4KKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisgICAgI2luY2x1ZGUgPGxpYl9tZW0uaD4KKyAgICAjaW5jbHVkZSA8bGliX21hdGguaD4KKyAgICAjaW5jbHVkZSA8bGliX3N0ci5oPgorICAgICNpbmNsdWRlICA8c3RkaW8uaD4KKyAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyAgICAjZGVmaW5lIFVTRV9GQVNUX01BVEgKKyAgICAjZGVmaW5lIFRGTV9USU1JTkdfUkVTSVNUQU5UCisgICAgI2RlZmluZSBFQ0NfVElNSU5HX1JFU0lTVEFOVAorICAgICNkZWZpbmUgV0NfUlNBX0JMSU5ESU5HCisgICAgI2RlZmluZSBIQVZFX0hBU0hEUkJHCisKKyAgICAjZGVmaW5lIEhBVkVfRUNDCisgICAgI2RlZmluZSBBTFRfRUNDX1NJWkUKKyAgICAjZGVmaW5lIFRGTV9FQ0MxOTIKKyAgICAjZGVmaW5lIFRGTV9FQ0MyMjQKKyAgICAjZGVmaW5lIFRGTV9FQ0MyNTYKKyAgICAjZGVmaW5lIFRGTV9FQ0MzODQKKyAgICAjZGVmaW5lIFRGTV9FQ0M1MjEKKworICAgICNkZWZpbmUgTk9fUkM0CisgICAgI2RlZmluZSBIQVZFX1RMU19FWFRFTlNJT05TCisgICAgI2RlZmluZSBIQVZFX1NVUFBPUlRFRF9DVVJWRVMKKyAgICAjZGVmaW5lIEhBVkVfRVhURU5ERURfTUFTVEVSCisKKyAgICAjZGVmaW5lIE5PX1dPTEZTU0xfRElSCisgICAgI2RlZmluZSBOT19XUklURVYKKworICAgICNpZiAhIGRlZmluZWQoV09MRlNTTF9TSUxBQlNfU0VfQUNDRUwpICYmICFkZWZpbmVkKENVU1RPTV9SQU5EX0dFTkVSQVRFKQorICAgICAgICAjZGVmaW5lIENVU1RPTV9SQU5EX1RZUEUgICAgIFJBTkRfTkJSCisgICAgICAgICNkZWZpbmUgQ1VTVE9NX1JBTkRfR0VORVJBVEUgTWF0aF9SYW5kCisgICAgI2VuZGlmCisgICAgI2RlZmluZSBTVFJJTkdfVVNFUgorICAgICNkZWZpbmUgWFNUUkxFTihwc3RyKSAoKENQVV9TSVpFX1QpU3RyX0xlbigoQ1BVX0NIQVIgKikocHN0cikpKQorICAgICNkZWZpbmUgWFNUUk5DUFkocHN0cl9kZXN0LCBwc3RyX3NyYywgbGVuX21heCkgXAorICAgICAgICAgICAgICAgICAgICAoKENQVV9DSEFSICopU3RyX0NvcHlfTigoQ1BVX0NIQVIgKikocHN0cl9kZXN0KSwgXAorICAgICAgICAgICAgICAgICAgICAgKENQVV9DSEFSICopKHBzdHJfc3JjKSwgKENQVV9TSVpFX1QpKGxlbl9tYXgpKSkKKyAgICAjZGVmaW5lIFhTVFJOQ01QKHBzdHJfMSwgcHN0cl8yLCBsZW5fbWF4KSBcCisgICAgICAgICAgICAgICAgICAgICgoQ1BVX0lOVDE2UylTdHJfQ21wX04oKENQVV9DSEFSICopKHBzdHJfMSksIFwKKyAgICAgICAgICAgICAgICAgICAgIChDUFVfQ0hBUiAqKShwc3RyXzIpLCAoQ1BVX1NJWkVfVCkobGVuX21heCkpKQorICAgICNkZWZpbmUgWFNUUk5DQVNFQ01QKHBzdHJfMSwgcHN0cl8yLCBsZW5fbWF4KSBcCisgICAgICAgICAgICAgICAgICAgICgoQ1BVX0lOVDE2UylTdHJfQ21wSWdub3JlQ2FzZV9OKChDUFVfQ0hBUiAqKShwc3RyXzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAoQ1BVX0NIQVIgKikocHN0cl8yKSwgKENQVV9TSVpFX1QpKGxlbl9tYXgpKSkKKyAgICAjZGVmaW5lIFhTVFJTVFIocHN0ciwgcHN0cl9zcmNoKSBcCisgICAgICAgICAgICAgICAgICAgICgoQ1BVX0NIQVIgKilTdHJfU3RyKChDUFVfQ0hBUiAqKShwc3RyKSwgXAorICAgICAgICAgICAgICAgICAgICAgKENQVV9DSEFSICopKHBzdHJfc3JjaCkpKQorICAgICNkZWZpbmUgWFNUUk5TVFIocHN0ciwgcHN0cl9zcmNoLCBsZW5fbWF4KSBcCisgICAgICAgICAgICAgICAgICAgICgoQ1BVX0NIQVIgKilTdHJfU3RyX04oKENQVV9DSEFSICopKHBzdHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAoQ1BVX0NIQVIgKikocHN0cl9zcmNoKSwoQ1BVX1NJWkVfVCkobGVuX21heCkpKQorICAgICNkZWZpbmUgWFNUUk5DQVQocHN0cl9kZXN0LCBwc3RyX2NhdCwgbGVuX21heCkgXAorICAgICAgICAgICAgICAgICAgICAoKENQVV9DSEFSICopU3RyX0NhdF9OKChDUFVfQ0hBUiAqKShwc3RyX2Rlc3QpLCBcCisgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQ1BVX0NIQVIgKikocHN0cl9jYXQpLChDUFVfU0laRV9UKShsZW5fbWF4KSkpCisgICAgI2RlZmluZSBYTUVNU0VUKHBtZW0sIGRhdGFfdmFsLCBzaXplKSBcCisgICAgICAgICAgICAgICAgICAgICgodm9pZClNZW1fU2V0KCh2b2lkICopKHBtZW0pLCBcCisgICAgICAgICAgICAgICAgICAgIChDUFVfSU5UMDhVKSAoZGF0YV92YWwpLCBcCisgICAgICAgICAgICAgICAgICAgIChDUFVfU0laRV9UKShzaXplKSkpCisgICAgI2RlZmluZSBYTUVNQ1BZKHBkZXN0LCBwc3JjLCBzaXplKSAoKHZvaWQpTWVtX0NvcHkoKHZvaWQgKikocGRlc3QpLCBcCisgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKShwc3JjKSwgKENQVV9TSVpFX1QpKHNpemUpKSkKKworICAgICNpZiAoT1NfVkVSU0lPTiA8IDUwMDAwKQorICAgICAgICAjZGVmaW5lIFhNRU1DTVAocG1lbV8xLCBwbWVtXzIsIHNpemUpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAoKChDUFVfQk9PTEVBTilNZW1fQ21wKCh2b2lkICopKHBtZW1fMSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKShwbWVtXzIpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgKENQVV9TSVpFX1QpKHNpemUpKSkgPyBERUZfTk8gOiBERUZfWUVTKQorICAgICNlbHNlCisgICAgICAvKiBXb3JrIGFyb3VuZCBmb3IgTWljcml1bSBPUyB2ZXJzaW9uIDUuOCBjaGFuZ2UgaW4gYmVoYXZpb3IKKyAgICAgICAqIHRoYXQgcmV0dXJucyBERUZfTk8gZm9yIDAgc2l6ZSBjb21wYXJlCisgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSBYTUVNQ01QKHBtZW1fMSwgcG1lbV8yLCBzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICgoIChzaXplIDwgMSApIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgoQ1BVX0JPT0xFQU4pTWVtX0NtcCgodm9pZCAqKShwbWVtXzEpLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKShwbWVtXzIpLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ1BVX1NJWkVfVCkoc2l6ZSkpID09IERFRl9ZRVMpKSAgIFwKKyAgICAgICAgICAgICA/IDAgOiAxKQorICAgICAgICAjZGVmaW5lIFhTTlBSSU5URiBzbnByaW50ZgorICAgICNlbmRpZgorCisgICAgI2RlZmluZSBYTUVNTU9WRSBYTUVNQ1BZCisKKyAgICAjaWYgKE9TX0NGR19NVVRFWF9FTiA9PSBERUZfRElTQUJMRUQpCisgICAgICAgICNkZWZpbmUgU0lOR0xFX1RIUkVBREVECisgICAgI2VuZGlmCisKKyAgICAjaWYgKENQVV9DRkdfRU5ESUFOX1RZUEUgPT0gQ1BVX0VORElBTl9UWVBFX0JJRykKKyAgICAgICAgI2RlZmluZSBCSUdfRU5ESUFOX09SREVSCisgICAgI2Vsc2UKKyAgICAgICAgI3VuZGVmICBCSUdfRU5ESUFOX09SREVSCisgICAgICAgICNkZWZpbmUgTElUVExFX0VORElBTl9PUkRFUgorICAgICNlbmRpZgorI2VuZGlmIC8qIE1JQ1JJVU0gKi8KKworI2lmIGRlZmluZWQoc3VuKSB8fCBkZWZpbmVkKF9fc3VuKQorIyBpZiBkZWZpbmVkKF9fU1ZSNCkgfHwgZGVmaW5lZChfX3N2cjRfXykKKyAgICAvKiBTb2xhcmlzICovCisgICAgI2lmbmRlZiBXT0xGU1NMX1NPTEFSSVMKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1NPTEFSSVMKKyAgICAjZW5kaWYKKyMgZWxzZQorICAgIC8qIFN1bk9TICovCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfU09MQVJJUworICAgIC8qIEF2b2lkIG5hbWluZyBjbGFzaCB3aXRoIGZwX3plcm8gZnJvbSBtYXRoLmggPiBpZWVmcC5oICovCisgICAgI2RlZmluZSBXT0xGU1NMX0RIX0NPTlNUCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfTUNGNTQ0MVgKKyAgICAjZGVmaW5lIEJJR19FTkRJQU5fT1JERVIKKyAgICAjaWZuZGVmIFNJWkVPRl9MT05HCisgICAgICAgICNkZWZpbmUgU0laRU9GX0xPTkcgNAorICAgICNlbmRpZgorICAgICNpZm5kZWYgU0laRU9GX0xPTkdfTE9ORworICAgICAgICAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1FMCisgICAgI2lmbmRlZiBXT0xGU1NMX1NFUAorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfU0VQCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBPUEVOU1NMX0VYVFJBCisgICAgICAgICNkZWZpbmUgT1BFTlNTTF9FWFRSQQorICAgICNlbmRpZgorICAgICNpZm5kZWYgU0VTU0lPTl9DRVJUUworICAgICAgICAjZGVmaW5lIFNFU1NJT05fQ0VSVFMKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEhBVkVfQUVTQ0NNCisgICAgICAgICNkZWZpbmUgSEFWRV9BRVNDQ00KKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEFUT01JQ19VU0VSCisgICAgICAgICNkZWZpbmUgQVRPTUlDX1VTRVIKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIFdPTEZTU0xfREVSX0xPQUQKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX0RFUl9MT0FECisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBLRUVQX1BFRVJfQ0VSVAorICAgICAgICAjZGVmaW5lIEtFRVBfUEVFUl9DRVJUCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBIQVZFX0VDQworICAgICAgICAjZGVmaW5lIEhBVkVfRUNDCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBTRVNTSU9OX0lOREVYCisgICAgICAgICNkZWZpbmUgU0VTU0lPTl9JTkRFWAorICAgICNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfUUwgKi8KKworCisjaWYgZGVmaW5lZChXT0xGU1NMX1hJTElOWCkKKyAgICAjZGVmaW5lIE5PX1dPTEZTU0xfRElSCisgICAgI2RlZmluZSBOT19ERVZfUkFORE9NCisgICAgI2RlZmluZSBIQVZFX0FFU0dDTQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfWElMSU5YX0NSWVBUKSB8fCBkZWZpbmVkKFdPTEZTU0xfQUZBTEdfWElMSU5YKQorICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfQVJNQVNNKQorICAgICAgICAjZXJyb3IgY2FuIG5vdCB1c2UgYm90aCBBUk12OCBpbnN0cnVjdGlvbnMgYW5kIFhJTElOWCBoYXJkZW5lZCBjcnlwdG8KKyAgICAjZW5kaWYKKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1NIQTMpCisgICAgICAgIC8qIG9ubHkgU0hBMy0zODQgaXMgc3VwcG9ydGVkICovCisgICAgICAgICN1bmRlZiBXT0xGU1NMX05PU0hBM18yMjQKKyAgICAgICAgI3VuZGVmIFdPTEZTU0xfTk9TSEEzXzI1NgorICAgICAgICAjdW5kZWYgV09MRlNTTF9OT1NIQTNfNTEyCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9OT1NIQTNfMjI0CisgICAgICAgICNkZWZpbmUgV09MRlNTTF9OT1NIQTNfMjU2CisgICAgICAgICNkZWZpbmUgV09MRlNTTF9OT1NIQTNfNTEyCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFdPTEZTU0xfQUZBTEdfWElMSU5YX0FFUworICAgICAgICAjdW5kZWYgIFdPTEZTU0xfQUVTX0RJUkVDVAorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQUVTX0RJUkVDVAorICAgICNlbmRpZgorI2VuZGlmIC8qKFdPTEZTU0xfWElMSU5YX0NSWVBUKSovCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQVBBQ0hFX01ZTkVXVCkKKyAgICAjaW5jbHVkZSAib3Mvb3NfbWFsbG9jLmgiCisgICAgI2lmICFkZWZpbmVkKFdPTEZTU0xfTFdJUCkKKyAgICAgICAgI2luY2x1ZGUgPG1uX3NvY2tldC9tbl9zb2NrZXQuaD4KKyAgICAjZW5kaWYKKworICAgICNpZiAhZGVmaW5lZChTSVpFT0ZfTE9ORykKKyAgICAgICAgI2RlZmluZSBTSVpFT0ZfTE9ORyA0CisgICAgI2VuZGlmCisgICAgI2lmICFkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpCisgICAgICAgICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4CisgICAgI2VuZGlmCisgICAgI2lmIChfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXykKKyAgICAgICAgI2RlZmluZSBCSUdfRU5ESUFOX09SREVSCisgICAgI2Vsc2UKKyAgICAgICAgI3VuZGVmICBCSUdfRU5ESUFOX09SREVSCisgICAgICAgICNkZWZpbmUgTElUVExFX0VORElBTl9PUkRFUgorICAgICNlbmRpZgorICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgI2RlZmluZSBXT0xGU1NMX1VTRVJfSU8KKyAgICAjZGVmaW5lIFNJTkdMRV9USFJFQURFRAorICAgICNkZWZpbmUgTk9fREVWX1JBTkRPTQorICAgICNkZWZpbmUgTk9fREgKKyAgICAjZGVmaW5lIE5PX1dPTEZTU0xfRElSCisgICAgI2RlZmluZSBOT19FUlJPUl9TVFJJTkdTCisgICAgI2RlZmluZSBIQVZFX0VDQworICAgICNkZWZpbmUgTk9fU0VTU0lPTl9DQUNIRQorICAgICNkZWZpbmUgTk9fRVJST1JfU1RSSU5HUworICAgICNkZWZpbmUgWE1BTExPQ19VU0VSCisgICAgI2RlZmluZSBYTUFMTE9DKHN6LCBoZWFwLCB0eXBlKSAgICAgb3NfbWFsbG9jKHN6KQorICAgICNkZWZpbmUgWFJFQUxMT0MocCwgc3osIGhlYXAsIHR5cGUpIG9zX3JlYWxsb2MocCwgc3opCisgICAgI2RlZmluZSBYRlJFRShwLCBoZWFwLCB0eXBlKSAgICAgICAgb3NfZnJlZShwKQorCisjZW5kaWYgLyooV09MRlNTTF9BUEFDSEVfTVlORVdUKSovCisKKyNpZmRlZiBXT0xGU1NMX1pFUEhZUgorICAgICNpbmNsdWRlIDx6ZXBoeXIuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3ByaW50ay5oPgorICAgICNpbmNsdWRlIDxzeXMvdXRpbC5oPgorICAgICNpbmNsdWRlIDxzdGRsaWIuaD4KKworICAgICNkZWZpbmUgV09MRlNTTF9ESF9DT05TVAorICAgICNkZWZpbmUgV09MRlNTTF9IQVZFX01BWAorICAgICNkZWZpbmUgTk9fV1JJVEVWCisKKyAgICAjZGVmaW5lIFVTRV9GTEFUX0JFTkNITUFSS19ICisgICAgI2RlZmluZSBVU0VfRkxBVF9URVNUX0gKKyAgICAjZGVmaW5lIEVYSVRfRkFJTFVSRSAxCisgICAgI2RlZmluZSBNQUlOX05PX0FSR1MKKworICAgIHZvaWQgKnpfcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKyAgICAjZGVmaW5lIHJlYWxsb2MgICB6X3JlYWxsb2MKKworICAgICNpZm5kZWYgQ09ORklHX05FVF9TT0NLRVRTX1BPU0lYX05BTUVTCisgICAgI2RlZmluZSBDT05GSUdfTkVUX1NPQ0tFVFNfUE9TSVhfTkFNRVMKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9JTVg2CisgICAgI2lmbmRlZiBTSVpFT0ZfTE9OR19MT05HCisgICAgICAgICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4CisgICAgI2VuZGlmCisjZW5kaWYKKworLyogaWYgZGVmaW5lZCB0dXJuIG9uIGFsbCBDQUFNIHN1cHBvcnQgKi8KKyNpZmRlZiBXT0xGU1NMX0lNWDZfQ0FBTQorICAgICN1bmRlZiAgV09MRlNTTF9JTVg2X0NBQU1fUk5HCisgICAgI2RlZmluZSBXT0xGU1NMX0lNWDZfQ0FBTV9STkcKKworICAgICN1bmRlZiAgV09MRlNTTF9JTVg2X0NBQU1fQkxPQgorICAgICNkZWZpbmUgV09MRlNTTF9JTVg2X0NBQU1fQkxPQgorCisjaWYgZGVmaW5lZChIQVZFX0FFU0dDTSkgfHwgZGVmaW5lZChXT0xGU1NMX0FFU19YVFMpCisgICAgLyogbGFyZ2UgcGVyZm9ybWFuY2UgZ2FpbiB3aXRoIEhBVkVfQUVTX0VDQiBkZWZpbmVkICovCisgICAgI3VuZGVmIEhBVkVfQUVTX0VDQgorICAgICNkZWZpbmUgSEFWRV9BRVNfRUNCCisKKyAgICAvL0BUT0RPIHVzZWQgZm9yIG5vdyB1bnRpbCBwbHVnZ2luZyBpbiBjYWFtIGFlcyB1c2Ugd2l0aCBxbngKKyAgICAjdW5kZWYgV09MRlNTTF9BRVNfRElSRUNUCisgICAgI2RlZmluZSBXT0xGU1NMX0FFU19ESVJFQ1QKKyNlbmRpZgorI2VuZGlmCisKKy8qIElmIERDUCBpcyB1c2VkIHdpdGhvdXQgU0lOR0xFX1RIUkVBREVELCBlbmZvcmNlIFdPTEZTU0xfQ1JZUFRfSFdfTVVURVggKi8KKyNpZiBkZWZpbmVkKFdPTEZTU0xfSU1YUlRfRENQKSAmJiAhZGVmaW5lZChTSU5HTEVfVEhSRUFERUQpCisgICAgI3VuZGVmIFdPTEZTU0xfQ1JZUFRfSFdfTVVURVgKKyAgICAjZGVmaW5lIFdPTEZTU0xfQ1JZUFRfSFdfTVVURVggMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChYTUFMTE9DX1VTRVIpICYmICFkZWZpbmVkKE1JQ1JJVU1fTUFMTE9DKSAmJiBcCisgICAgIWRlZmluZWQoV09MRlNTTF9MRUFOUFNLKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX01FTU9SWSkgJiYgXAorICAgICFkZWZpbmVkKFhNQUxMT0NfT1ZFUlJJREUpCisgICAgI2RlZmluZSBVU0VfV09MRlNTTF9NRU1PUlkKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpICYmICFkZWZpbmVkKE5PX0NFUlRTKQorICAgICN1bmRlZiAgS0VFUF9QRUVSX0NFUlQKKyAgICAjZGVmaW5lIEtFRVBfUEVFUl9DRVJUCisjZW5kaWYKKworCisvKiBzdHJlYW0gY2lwaGVycyBleGNlcHQgYXJjNCBuZWVkIDMyYml0IGFsaWdubWVudCwgaW50ZWwgb2sgd2l0aG91dCAqLworI2lmbmRlZiBYU1RSRUFNX0FMSUdOCisgICAgI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX2kzODZfXykKKyAgICAgICAgI2RlZmluZSBOT19YU1RSRUFNX0FMSUdOCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBYU1RSRUFNX0FMSUdOCisgICAgI2VuZGlmCisjZW5kaWYKKworLyogd3JpdGUgZHVwIGNhbm5vdCBiZSB1c2VkIHdpdGggc2VjdXJlIHJlbmVnb3RpYXRpb24gYmVjYXVzZSB3cml0ZSBkdXAKKyAqIG1ha2Ugd3JpdGUgc2lkZSB3cml0ZSBvbmx5IGFuZCByZWFkIHNpZGUgcmVhZCBvbmx5ICovCisjaWYgZGVmaW5lZChIQVZFX1dSSVRFX0RVUCkgJiYgZGVmaW5lZChIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9OKQorICAgICNlcnJvciAiV1JJVEUgRFVQIGFuZCBTRUNVUkUgUkVORUdPVElBVElPTiBjYW5ub3QgYm90aCBiZSBvbiIKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9TR1gKKyAgICAjaWZkZWYgX01TQ19WRVIKKyAgICAgICAgI2RlZmluZSBOT19SQzQKKyAgICAgICAgI2lmbmRlZiBIQVZFX0ZJUFMKKyAgICAgICAgICAgICNkZWZpbmUgV09MRkNSWVBUX09OTFkKKyAgICAgICAgICAgICNkZWZpbmUgTk9fREVTMworICAgICAgICAgICAgI2RlZmluZSBOT19TSEEKKyAgICAgICAgICAgICNkZWZpbmUgTk9fTUQ1CisgICAgICAgICNlbHNlCisgICAgICAgICAgICAjZGVmaW5lIFRGTV9USU1JTkdfUkVTSVNUQU5UCisgICAgICAgICAgICAjZGVmaW5lIE5PX1dPTEZTU0xfRElSCisgICAgICAgICAgICAjZGVmaW5lIE5PX1dSSVRFVgorICAgICAgICAgICAgI2RlZmluZSBOT19NQUlOX0RSSVZFUgorICAgICAgICAgICAgI2RlZmluZSBXT0xGU1NMX0xPR19QUklOVEYKKyAgICAgICAgICAgICNkZWZpbmUgV09MRlNTTF9ESF9DT05TVAorICAgICAgICAjZW5kaWYKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIEhBVkVfRUNDCisgICAgICAgICNkZWZpbmUgTk9fV1JJVEVWCisgICAgICAgICNkZWZpbmUgTk9fTUFJTl9EUklWRVIKKyAgICAgICAgI2RlZmluZSBVU0VSX1RJQ0tTCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9MT0dfUFJJTlRGCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9ESF9DT05TVAorICAgICNlbmRpZiAvKiBfTVNDX1ZFUiAqLworICAgICNpZiAhZGVmaW5lZChIQVZFX0ZJUFMpICYmICFkZWZpbmVkKE5PX1JTQSkKKyAgICAgICAgI2RlZmluZSBXQ19SU0FfQkxJTkRJTkcKKyAgICAjZW5kaWYKKworICAgICNkZWZpbmUgTk9fRklMRVNZU1RFTQorICAgICNkZWZpbmUgRUNDX1RJTUlOR19SRVNJU1RBTlQKKyAgICAjZGVmaW5lIFRGTV9USU1JTkdfUkVTSVNUQU5UCisgICAgI2RlZmluZSBTSU5HTEVfVEhSRUFERUQKKyAgICAjZGVmaW5lIE5PX0FTTl9USU1FIC8qIGNhbiBub3QgdXNlIGhlYWRlcnMgc3VjaCBhcyB3aW5kb3dzLmggKi8KKyAgICAjZGVmaW5lIEhBVkVfQUVTR0NNCisgICAgI2RlZmluZSBVU0VfQ0VSVF9CVUZGRVJTXzIwNDgKKyAgICAjZGVmaW5lIFVTRV9GQVNUX01BVEgKKyNlbmRpZiAvKiBXT0xGU1NMX1NHWCAqLworCisvKiBGcmVlU2NhbGUgTU1DQVUgaGFyZHdhcmUgY3J5cHRvIGhhcyA0IGJ5dGUgYWxpZ25tZW50LgorICAgSG93ZXZlciwgS1NESyBmc2xfbW1jYXUuaCBnaXZlcyBBUEkgd2l0aCBubyBhbGlnbm1lbnQKKyAgIHJlcXVpcmVtZW50cyAoNCBieXRlIGFsaWdubWVudCBpcyBtYW5hZ2VkIGludGVybmFsbHkgYnkgZnNsX21tY2F1LmMpICovCisjaWZkZWYgRlJFRVNDQUxFX01NQ0FVCisgICAgI2lmZGVmIEZSRUVTQ0FMRV9NTUNBVV9DTEFTU0lDCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9NTUNBVV9BTElHTk1FTlQgNAorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9NTUNBVV9BTElHTk1FTlQgMAorICAgICNlbmRpZgorI2VuZGlmCisKKy8qIGlmIHVzaW5nIGhhcmR3YXJlIGNyeXB0byBhbmQgaGF2ZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBzcGVjaWZ5IHRoZQorICAgcmVxdWlyZW1lbnQgaGVyZS4gIFRoZSByZWNvcmQgaGVhZGVyIG9mIFNTTC9UTFMgd2lsbCBwcmV2ZW50IGVhc3kgYWxpZ25tZW50LgorICAgVGhpcyBoaW50IHRyaWVzIHRvIGhlbHAgYXMgbXVjaCBhcyBwb3NzaWJsZS4gICovCisjaWZuZGVmIFdPTEZTU0xfR0VORVJBTF9BTElHTk1FTlQKKyAgICAjaWZkZWYgV09MRlNTTF9BRVNOSQorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfR0VORVJBTF9BTElHTk1FTlQgMTYKKyAgICAjZWxpZiBkZWZpbmVkKFhTVFJFQU1fQUxJR04pCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9HRU5FUkFMX0FMSUdOTUVOVCAgNAorICAgICNlbGlmIGRlZmluZWQoRlJFRVNDQUxFX01NQ0FVKSB8fCBkZWZpbmVkKEZSRUVTQ0FMRV9NTUNBVV9DTEFTU0lDKQorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfR0VORVJBTF9BTElHTk1FTlQgIFdPTEZTU0xfTU1DQVVfQUxJR05NRU5UCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX0dFTkVSQUxfQUxJR05NRU5UICAwCisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF9HRU5FUkFMX0FMSUdOTUVOVCkgJiYgKFdPTEZTU0xfR0VORVJBTF9BTElHTk1FTlQgPiAwKQorICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgICAjZGVmaW5lIFhHRU5fQUxJR04gX19kZWNsc3BlYyhhbGlnbihXT0xGU1NMX0dFTkVSQUxfQUxJR05NRU5UKSkKKyAgICAjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorICAgICAgICAjZGVmaW5lIFhHRU5fQUxJR04gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChXT0xGU1NMX0dFTkVSQUxfQUxJR05NRU5UKSkpCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBYR0VOX0FMSUdOCisgICAgI2VuZGlmCisjZWxzZQorICAgICNkZWZpbmUgWEdFTl9BTElHTgorI2VuZGlmCisKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyAgICAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZToyMjU5KSAvKiBleHBsaWNpdCBjYXN0cyB0byBzbWFsbGVyIHNpemVzLCBkaXNhYmxlICovCisjZW5kaWYKKworLyogdXNlciBjYW4gc3BlY2lmeSB3aGF0IGN1cnZlcyB0aGV5IHdhbnQgd2l0aCBFQ0NfVVNFUl9DVVJWRVMgb3RoZXJ3aXNlCisgKiBhbGwgY3VydmVzIGFyZSBvbiBieSBkZWZhdWx0IGZvciBub3cgKi8KKyNpZm5kZWYgRUNDX1VTRVJfQ1VSVkVTCisgICAgI2lmICFkZWZpbmVkKFdPTEZTU0xfU1BfTUFUSCkgJiYgIWRlZmluZWQoSEFWRV9BTExfQ1VSVkVTKQorICAgICAgICAjZGVmaW5lIEhBVkVfQUxMX0NVUlZFUworICAgICNlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBtaW5pbXVtIGFsbG93ZWQgRUNDIGtleSBzaXplICovCisvKiBOb3RlOiAyMjQtYml0cyBpcyBlcXVpdmVsYW50IHRvIDIwNDgtYml0IFJTQSAqLworI2lmbmRlZiBFQ0NfTUlOX0tFWV9TWgorICAgICNpZmRlZiBXT0xGU1NMX01JTl9FQ0NfQklUUworICAgICAgICAjZGVmaW5lIEVDQ19NSU5fS0VZX1NaIFdPTEZTU0xfTUlOX0VDQ19CSVRTCisgICAgI2Vsc2UKKyAgICAgICAgI2lmIGRlZmluZWQoSEFWRV9GSVBTKSAmJiBkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiBIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyCisgICAgICAgICAgICAvKiBGSVBTdjIgYW5kIHJlYWR5IChmb3Igbm93KSBpbmNsdWRlcyAxOTItYml0IHN1cHBvcnQgKi8KKyAgICAgICAgICAgICNkZWZpbmUgRUNDX01JTl9LRVlfU1ogMTkyCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAjZGVmaW5lIEVDQ19NSU5fS0VZX1NaIDIyNAorICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvKiBFQ0MgQ29uZmlncyAqLworI2lmZGVmIEhBVkVfRUNDCisgICAgLyogQnkgZGVmYXVsdCBlbmFibGUgU2lnbiwgVmVyaWZ5LCBESEUsIEtleSBJbXBvcnQgYW5kIEtleSBFeHBvcnQgdW5sZXNzIGV4cGxpY2l0bHkgZGlzYWJsZWQgKi8KKyAgICAjaWYgIWRlZmluZWQoTk9fRUNDX1NJR04pICYmIFwKKyAgICAgICAgICAgICghZGVmaW5lZChFQ0NfVElNSU5HX1JFU0lTVEFOVCkgfHwgXAorICAgICAgICAgICAgKGRlZmluZWQoRUNDX1RJTUlOR19SRVNJU1RBTlQpICYmICFkZWZpbmVkKFdDX05PX1JORykpKQorICAgICAgICAjdW5kZWYgSEFWRV9FQ0NfU0lHTgorICAgICAgICAjZGVmaW5lIEhBVkVfRUNDX1NJR04KKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0VDQ19WRVJJRlkKKyAgICAgICAgI3VuZGVmIEhBVkVfRUNDX1ZFUklGWQorICAgICAgICAjZGVmaW5lIEhBVkVfRUNDX1ZFUklGWQorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fRUNDX0NIRUNLX0tFWQorICAgICAgICAjdW5kZWYgSEFWRV9FQ0NfQ0hFQ0tfS0VZCisgICAgICAgICNkZWZpbmUgSEFWRV9FQ0NfQ0hFQ0tfS0VZCisgICAgI2VuZGlmCisgICAgI2lmICFkZWZpbmVkKE5PX0VDQ19ESEUpICYmICFkZWZpbmVkKFdDX05PX1JORykKKyAgICAgICAgI3VuZGVmIEhBVkVfRUNDX0RIRQorICAgICAgICAjZGVmaW5lIEhBVkVfRUNDX0RIRQorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fRUNDX0tFWV9JTVBPUlQKKyAgICAgICAgI3VuZGVmIEhBVkVfRUNDX0tFWV9JTVBPUlQKKyAgICAgICAgI2RlZmluZSBIQVZFX0VDQ19LRVlfSU1QT1JUCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19FQ0NfS0VZX0VYUE9SVAorICAgICAgICAjdW5kZWYgSEFWRV9FQ0NfS0VZX0VYUE9SVAorICAgICAgICAjZGVmaW5lIEhBVkVfRUNDX0tFWV9FWFBPUlQKKyAgICAjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0VDQyAqLworCisvKiBDdXJ2ZTI1NTE5IENvbmZpZ3MgKi8KKyNpZmRlZiBIQVZFX0NVUlZFMjU1MTkKKyAgICAvKiBCeSBkZWZhdWx0IGVuYWJsZSBzaGFyZWQgc2VjcmV0LCBrZXkgZXhwb3J0IGFuZCBpbXBvcnQgKi8KKyAgICAjaWZuZGVmIE5PX0NVUlZFMjU1MTlfU0hBUkVEX1NFQ1JFVAorICAgICAgICAjdW5kZWYgSEFWRV9DVVJWRTI1NTE5X1NIQVJFRF9TRUNSRVQKKyAgICAgICAgI2RlZmluZSBIQVZFX0NVUlZFMjU1MTlfU0hBUkVEX1NFQ1JFVAorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fQ1VSVkUyNTUxOV9LRVlfRVhQT1JUCisgICAgICAgICN1bmRlZiBIQVZFX0NVUlZFMjU1MTlfS0VZX0VYUE9SVAorICAgICAgICAjZGVmaW5lIEhBVkVfQ1VSVkUyNTUxOV9LRVlfRVhQT1JUCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19DVVJWRTI1NTE5X0tFWV9JTVBPUlQKKyAgICAgICAgI3VuZGVmIEhBVkVfQ1VSVkUyNTUxOV9LRVlfSU1QT1JUCisgICAgICAgICNkZWZpbmUgSEFWRV9DVVJWRTI1NTE5X0tFWV9JTVBPUlQKKyAgICAjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0NVUlZFMjU1MTkgKi8KKworLyogRWQyNTUxOSBDb25maWdzICovCisjaWZkZWYgSEFWRV9FRDI1NTE5CisgICAgLyogQnkgZGVmYXVsdCBlbmFibGUgc2lnbiwgdmVyaWZ5LCBrZXkgZXhwb3J0IGFuZCBpbXBvcnQgKi8KKyAgICAjaWZuZGVmIE5PX0VEMjU1MTlfU0lHTgorICAgICAgICAjdW5kZWYgSEFWRV9FRDI1NTE5X1NJR04KKyAgICAgICAgI2RlZmluZSBIQVZFX0VEMjU1MTlfU0lHTgorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fRUQyNTUxOV9WRVJJRlkKKyAgICAgICAgI3VuZGVmIEhBVkVfRUQyNTUxOV9WRVJJRlkKKyAgICAgICAgI2RlZmluZSBIQVZFX0VEMjU1MTlfVkVSSUZZCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19FRDI1NTE5X0tFWV9FWFBPUlQKKyAgICAgICAgI3VuZGVmIEhBVkVfRUQyNTUxOV9LRVlfRVhQT1JUCisgICAgICAgICNkZWZpbmUgSEFWRV9FRDI1NTE5X0tFWV9FWFBPUlQKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0VEMjU1MTlfS0VZX0lNUE9SVAorICAgICAgICAjdW5kZWYgSEFWRV9FRDI1NTE5X0tFWV9JTVBPUlQKKyAgICAgICAgI2RlZmluZSBIQVZFX0VEMjU1MTlfS0VZX0lNUE9SVAorICAgICNlbmRpZgorI2VuZGlmIC8qIEhBVkVfRUQyNTUxOSAqLworCisvKiBDdXJ2ZTQ0OCBDb25maWdzICovCisjaWZkZWYgSEFWRV9DVVJWRTQ0OAorICAgIC8qIEJ5IGRlZmF1bHQgZW5hYmxlIHNoYXJlZCBzZWNyZXQsIGtleSBleHBvcnQgYW5kIGltcG9ydCAqLworICAgICNpZm5kZWYgTk9fQ1VSVkU0NDhfU0hBUkVEX1NFQ1JFVAorICAgICAgICAjdW5kZWYgSEFWRV9DVVJWRTQ0OF9TSEFSRURfU0VDUkVUCisgICAgICAgICNkZWZpbmUgSEFWRV9DVVJWRTQ0OF9TSEFSRURfU0VDUkVUCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19DVVJWRTQ0OF9LRVlfRVhQT1JUCisgICAgICAgICN1bmRlZiBIQVZFX0NVUlZFNDQ4X0tFWV9FWFBPUlQKKyAgICAgICAgI2RlZmluZSBIQVZFX0NVUlZFNDQ4X0tFWV9FWFBPUlQKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0NVUlZFNDQ4X0tFWV9JTVBPUlQKKyAgICAgICAgI3VuZGVmIEhBVkVfQ1VSVkU0NDhfS0VZX0lNUE9SVAorICAgICAgICAjZGVmaW5lIEhBVkVfQ1VSVkU0NDhfS0VZX0lNUE9SVAorICAgICNlbmRpZgorI2VuZGlmIC8qIEhBVkVfQ1VSVkU0NDggKi8KKworLyogRWQ0NDggQ29uZmlncyAqLworI2lmZGVmIEhBVkVfRUQ0NDgKKyAgICAvKiBCeSBkZWZhdWx0IGVuYWJsZSBzaWduLCB2ZXJpZnksIGtleSBleHBvcnQgYW5kIGltcG9ydCAqLworICAgICNpZm5kZWYgTk9fRUQ0NDhfU0lHTgorICAgICAgICAjdW5kZWYgSEFWRV9FRDQ0OF9TSUdOCisgICAgICAgICNkZWZpbmUgSEFWRV9FRDQ0OF9TSUdOCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19FRDQ0OF9WRVJJRlkKKyAgICAgICAgI3VuZGVmIEhBVkVfRUQ0NDhfVkVSSUZZCisgICAgICAgICNkZWZpbmUgSEFWRV9FRDQ0OF9WRVJJRlkKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0VENDQ4X0tFWV9FWFBPUlQKKyAgICAgICAgI3VuZGVmIEhBVkVfRUQ0NDhfS0VZX0VYUE9SVAorICAgICAgICAjZGVmaW5lIEhBVkVfRUQ0NDhfS0VZX0VYUE9SVAorICAgICNlbmRpZgorICAgICNpZm5kZWYgTk9fRUQ0NDhfS0VZX0lNUE9SVAorICAgICAgICAjdW5kZWYgSEFWRV9FRDQ0OF9LRVlfSU1QT1JUCisgICAgICAgICNkZWZpbmUgSEFWRV9FRDQ0OF9LRVlfSU1QT1JUCisgICAgI2VuZGlmCisjZW5kaWYgLyogSEFWRV9FRDQ0OCAqLworCisvKiBBRVMgQ29uZmlnICovCisjaWZuZGVmIE5PX0FFUworICAgIC8qIEJ5IGRlZmF1bHQgZW5hYmxlIGFsbCBBRVMga2V5IHNpemVzLCBkZWNyeXB0aW9uIGFuZCBDQkMgKi8KKyAgICAjaWZuZGVmIEFFU19NQVhfS0VZX1NJWkUKKyAgICAgICAgI3VuZGVmICBBRVNfTUFYX0tFWV9TSVpFCisgICAgICAgICNkZWZpbmUgQUVTX01BWF9LRVlfU0laRSAgICAyNTYKKyAgICAjZW5kaWYKKworICAgICNpZm5kZWYgTk9fQUVTXzEyOAorICAgICAgICAjdW5kZWYgIFdPTEZTU0xfQUVTXzEyOAorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQUVTXzEyOAorICAgICNlbmRpZgorICAgICNpZiAhZGVmaW5lZChOT19BRVNfMTkyKSAmJiBBRVNfTUFYX0tFWV9TSVpFID49IDE5MgorICAgICAgICAjdW5kZWYgIFdPTEZTU0xfQUVTXzE5MgorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQUVTXzE5MgorICAgICNlbmRpZgorICAgICNpZiAhZGVmaW5lZChOT19BRVNfMjU2KSAmJiBBRVNfTUFYX0tFWV9TSVpFID49IDI1NgorICAgICAgICAjdW5kZWYgIFdPTEZTU0xfQUVTXzI1NgorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQUVTXzI1NgorICAgICNlbmRpZgorICAgICNpZiAhZGVmaW5lZChXT0xGU1NMX0FFU18xMjgpICYmIGRlZmluZWQoSEFWRV9FQ0NfRU5DUllQVCkKKyAgICAgICAgI3dhcm5pbmcgSEFWRV9FQ0NfRU5DUllQVCB1c2VzIEFFUyAxMjggYml0IGtleXMKKyAgICAgI2VuZGlmCisKKyAgICAjaWZuZGVmIE5PX0FFU19ERUNSWVBUCisgICAgICAgICN1bmRlZiAgSEFWRV9BRVNfREVDUllQVAorICAgICAgICAjZGVmaW5lIEhBVkVfQUVTX0RFQ1JZUFQKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0FFU19DQkMKKyAgICAgICAgI3VuZGVmICBIQVZFX0FFU19DQkMKKyAgICAgICAgI2RlZmluZSBIQVZFX0FFU19DQkMKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgV09MRlNTTF9BRVNfWFRTCisgICAgICAgIC8qIEFFUy1YVFMgbWFrZXMgY2FsbHMgdG8gQUVTIGRpcmVjdCBmdW5jdGlvbnMgKi8KKyAgICAgICAgI2lmbmRlZiBXT0xGU1NMX0FFU19ESVJFQ1QKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX0FFU19ESVJFQ1QKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFdPTEZTU0xfQUVTX0NGQgorICAgICAgICAvKiBBRVMtQ0ZCIG1ha2VzIGNhbGxzIHRvIEFFUyBkaXJlY3QgZnVuY3Rpb25zICovCisgICAgICAgICNpZm5kZWYgV09MRlNTTF9BRVNfRElSRUNUCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9BRVNfRElSRUNUCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBkZWZpbmVkKFdPTEZTU0xfTk9fVExTMTIpKSB8fCBcCisgICAgKCFkZWZpbmVkKEhBVkVfQUVTX0NCQykgJiYgZGVmaW5lZChOT19ERVMzKSAmJiBkZWZpbmVkKE5PX1JDNCkgJiYgXAorICAgICAhZGVmaW5lZChIQVZFX0NBTUVMTElBKSAmJiAhZGVmaW5lZChIQVZFX0lERUEpICYmIFwKKyAgICAgIWRlZmluZWQoSEFWRV9OVUxMX0NJUEhFUikgJiYgIWRlZmluZWQoSEFWRV9IQzEyOCkpCisgICAgI2RlZmluZSBXT0xGU1NMX0FFQURfT05MWQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOT19ESCkgJiYgIWRlZmluZWQoSEFWRV9GRkRIRSkKKyAgICAjaWYgZGVmaW5lZChIQVZFX0ZGREhFXzIwNDgpIHx8IGRlZmluZWQoSEFWRV9GRkRIRV8zMDcyKSB8fCBcCisgICAgICAgICAgICBkZWZpbmVkKEhBVkVfRkZESEVfNDA5NikgfHwgZGVmaW5lZChIQVZFX0ZGREhFXzYxNDQpIHx8IFwKKyAgICAgICAgICAgIGRlZmluZWQoSEFWRV9GRkRIRV84MTkyKQorICAgICAgICAjZGVmaW5lIEhBVkVfRkZESEUKKyAgICAjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9GRkRIRV84MTkyKQorICAgICNkZWZpbmUgTUlOX0ZGREhFX0ZQX01BWF9CSVRTIDE2Mzg0CisjZWxpZiBkZWZpbmVkKEhBVkVfRkZESEVfNjE0NCkKKyAgICAjZGVmaW5lIE1JTl9GRkRIRV9GUF9NQVhfQklUUyAxMjI4OAorI2VsaWYgZGVmaW5lZChIQVZFX0ZGREhFXzQwOTYpCisgICAgI2RlZmluZSBNSU5fRkZESEVfRlBfTUFYX0JJVFMgODE5MgorI2VsaWYgZGVmaW5lZChIQVZFX0ZGREhFXzMwNzIpCisgICAgI2RlZmluZSBNSU5fRkZESEVfRlBfTUFYX0JJVFMgNjE0NAorI2VsaWYgZGVmaW5lZChIQVZFX0ZGREhFXzIwNDgpCisgICAgI2RlZmluZSBNSU5fRkZESEVfRlBfTUFYX0JJVFMgNDA5NgorI2Vsc2UKKyAgICAjZGVmaW5lIE1JTl9GRkRIRV9GUF9NQVhfQklUUyAwCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfRkZESEUpICYmIGRlZmluZWQoRlBfTUFYX0JJVFMpCisgICAgI2lmIE1JTl9GRkRIRV9GUF9NQVhfQklUUyA+IEZQX01BWF9CSVRTCisgICAgICAgICNlcnJvciAiRkZESEUgcGFyYW1ldGVycyBhcmUgdG9vIGxhcmdlIGZvciBGUF9NQVhfQklUIGFzIHNldCIKKyAgICAjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9GRkRIRSkgJiYgZGVmaW5lZChTUF9JTlRfQklUUykKKyAgICAjaWYgTUlOX0ZGREhFX0ZQX01BWF9CSVRTID4gU1BfSU5UX0JJVFMgKiAyCisgICAgICAgICNlcnJvciAiRkZESEUgcGFyYW1ldGVycyBhcmUgdG9vIGxhcmdlIGZvciBTUF9JTlRfQklUIGFzIHNldCIKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvKiBpZiBkZXNrdG9wIHR5cGUgc3lzdGVtIGFuZCBmYXN0bWF0aCBpbmNyZWFzZSBkZWZhdWx0IG1heCBiaXRzICovCisjaWYgZGVmaW5lZChXT0xGU1NMX1g4Nl82NF9CVUlMRCkgfHwgZGVmaW5lZChXT0xGU1NMX0FBUkNINjRfQlVJTEQpCisgICAgI2lmIGRlZmluZWQoVVNFX0ZBU1RfTUFUSCkgJiYgIWRlZmluZWQoRlBfTUFYX0JJVFMpCisgICAgICAgICNpZiBNSU5fRkZESEVfRlBfTUFYX0JJVFMgPD0gODE5MgorICAgICAgICAgICAgI2RlZmluZSBGUF9NQVhfQklUUyA4MTkyCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAjZGVmaW5lIEZQX01BWF9CSVRTIE1JTl9GRkRIRV9GUF9NQVhfQklUUworICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1NQX01BVEhfQUxMKSAmJiAhZGVmaW5lZChTUF9JTlRfQklUUykKKyAgICAgICAgI2lmIE1JTl9GRkRIRV9GUF9NQVhfQklUUyA8PSA4MTkyCisgICAgICAgICAgICAjZGVmaW5lIFNQX0lOVF9CSVRTIDQwOTYKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNkZWZpbmUgUFNfSU5UX0JJVFMgTUlOX0ZGREhFX0ZQX01BWF9CSVRTIC8gMgorICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvKiBJZiB1c2luZyB0aGUgbWF4IHN0cmVuZ3RoIGJ1aWxkLCBlbnN1cmUgT0xEIFRMUyBpcyBkaXNhYmxlZC4gKi8KKyNpZmRlZiBXT0xGU1NMX01BWF9TVFJFTkdUSAorICAgICN1bmRlZiBOT19PTERfVExTCisgICAgI2RlZmluZSBOT19PTERfVExTCisjZW5kaWYKKworCisvKiBEZWZhdWx0IEFFUyBtaW5pbXVtIGF1dGggdGFnIHN6LCBhbGxvdyB1c2VyIHRvIG92ZXJyaWRlICovCisjaWZuZGVmIFdPTEZTU0xfTUlOX0FVVEhfVEFHX1NaCisgICAgI2RlZmluZSBXT0xGU1NMX01JTl9BVVRIX1RBR19TWiAxMgorI2VuZGlmCisKKworLyogc25pZmZlciByZXF1aXJlczoKKyAqIHN0YXRpYyBSU0EgY2lwaGVyIHN1aXRlcworICogc2Vzc2lvbiBzdGF0cyBhbmQgcGVhayBzdGF0cworICovCisjaWZkZWYgV09MRlNTTF9TTklGRkVSCisgICAgI2lmbmRlZiBXT0xGU1NMX1NUQVRJQ19SU0EKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1NUQVRJQ19SU0EKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIFdPTEZTU0xfU1RBVElDX0RICisgICAgICAgICNkZWZpbmUgV09MRlNTTF9TVEFUSUNfREgKKyAgICAjZW5kaWYKKyAgICAvKiBBbGxvdyBvcHRpb24gdG8gYmUgZGlzYWJsZWQuICovCisgICAgI2lmbmRlZiBXT0xGU1NMX05PX1NFU1NJT05fU1RBVFMKKyAgICAgICAgI2lmbmRlZiBXT0xGU1NMX1NFU1NJT05fU1RBVFMKKyAgICAgICAgICAgICNkZWZpbmUgV09MRlNTTF9TRVNTSU9OX1NUQVRTCisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIFdPTEZTU0xfUEVBS19TRVNTSU9OUworICAgICAgICAgICAgI2RlZmluZSBXT0xGU1NMX1BFQUtfU0VTU0lPTlMKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisjZW5kaWYKKworLyogRGVjb2RlIFB1YmxpYyBLZXkgZXh0cmFzIG9uIGJ5IGRlZmF1bHQsIHVzZXIgY2FuIHR1cm4gb2ZmIHdpdGgKKyAqIFdPTEZTU0xfTk9fREVDT0RFX0VYVFJBICovCisjaWZuZGVmIFdPTEZTU0xfTk9fREVDT0RFX0VYVFJBCisgICAgI2lmbmRlZiBSU0FfREVDT0RFX0VYVFJBCisgICAgICAgICNkZWZpbmUgUlNBX0RFQ09ERV9FWFRSQQorICAgICNlbmRpZgorICAgICNpZm5kZWYgRUNDX0RFQ09ERV9FWFRSQQorICAgICAgICAjZGVmaW5lIEVDQ19ERUNPREVfRVhUUkEKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvKiBDIFNoYXJwIHdyYXBwZXIgZGVmaW5lcyAqLworI2lmZGVmIEhBVkVfQ1NIQVJQCisgICAgI2lmbmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX0RUTFMKKyAgICAjZW5kaWYKKyAgICAjdW5kZWYgTk9fUFNLCisgICAgI3VuZGVmIE5PX1NIQTI1NgorICAgICN1bmRlZiBOT19ESAorI2VuZGlmCisKKy8qIEFzeW5jaHJvbm91cyBDcnlwdG8gKi8KKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgLyogTWFrZSBzdXJlIHdvbGYgZXZlbnRzIGFyZSBlbmFibGVkICovCisgICAgI3VuZGVmIEhBVkVfV09MRl9FVkVOVAorICAgICNkZWZpbmUgSEFWRV9XT0xGX0VWRU5UCisKKyAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVF9URVNUCisgICAgICAgICNkZWZpbmUgV0NfQVNZTkNfREVWX1NJWkUgMTY4CisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBXQ19BU1lOQ19ERVZfU0laRSAzMzYKKyAgICAjZW5kaWYKKworICAgICNpZiAhZGVmaW5lZChIQVZFX0NBVklVTSkgJiYgIWRlZmluZWQoSEFWRV9JTlRFTF9RQSkgJiYgXAorICAgICAgICAhZGVmaW5lZChXT0xGU1NMX0FTWU5DX0NSWVBUX1RFU1QpCisgICAgICAgICNlcnJvciBObyBhc3luYyBoYXJkd2FyZSBkZWZpbmVkIHdpdGggV09MRlNTTF9BU1lOQ19DUllQVCEKKyAgICAjZW5kaWYKKworICAgIC8qIEVuYWJsZSBFQ0NfQ0FDSEVfQ1VSVkUgZm9yIEFTWU5DICovCisgICAgI2lmICFkZWZpbmVkKEVDQ19DQUNIRV9DVVJWRSkKKyAgICAgICAgI2RlZmluZSBFQ0NfQ0FDSEVfQ1VSVkUKKyAgICAjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX0FTWU5DX0NSWVBUICovCisjaWZuZGVmIFdDX0FTWU5DX0RFVl9TSVpFCisgICAgI2RlZmluZSBXQ19BU1lOQ19ERVZfU0laRSAwCisjZW5kaWYKKworLyogbGVhbnRscyBjaGVja3MgKi8KKyNpZmRlZiBXT0xGU1NMX0xFQU5UTFMKKyAgICAjaWZuZGVmIEhBVkVfRUNDCisgICAgICAgICNlcnJvciBsZWFudGxzIGJ1aWxkIG5lZWRzIEVDQworICAgICNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfTEVBTlRMUyovCisKKy8qIHJlc3RyaWN0aW9uIHdpdGggc3RhdGljIG1lbW9yeSAqLworI2lmZGVmIFdPTEZTU0xfU1RBVElDX01FTU9SWQorICAgICNpZiBkZWZpbmVkKEhBVkVfSU9fUE9PTCkgfHwgZGVmaW5lZChYTUFMTE9DX1VTRVIpIHx8IGRlZmluZWQoTk9fV09MRlNTTF9NRU1PUlkpCisgICAgICAgICAjZXJyb3Igc3RhdGljIG1lbW9yeSBjYW5ub3QgYmUgdXNlZCB3aXRoIEhBVkVfSU9fUE9PTCwgWE1BTExPQ19VU0VSIG9yIE5PX1dPTEZTU0xfTUVNT1JZCisgICAgI2VuZGlmCisgICAgI2lmICFkZWZpbmVkKFdPTEZTU0xfU1BfTk9fTUFMTE9DKSAmJiBcCisgICAgICAgICFkZWZpbmVkKFVTRV9GQVNUX01BVEgpICYmICFkZWZpbmVkKE5PX0JJR19JTlQpCisgICAgICAgICAjZXJyb3IgVGhlIHN0YXRpYyBtZW1vcnkgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBmYXN0IG1hdGggb3IgU1Agd2l0aCBubyBtYWxsb2MKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgV09MRlNTTF9TTUFMTF9TVEFDSworICAgICAgICAjZXJyb3Igc3RhdGljIG1lbW9yeSBkb2VzIG5vdCBzdXBwb3J0IHNtYWxsIHN0YWNrIHBsZWFzZSB1bmRlZmluZQorICAgICNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfU1RBVElDX01FTU9SWSAqLworCisjaWZkZWYgSEFWRV9BRVNfS0VZV1JBUAorICAgICNpZm5kZWYgV09MRlNTTF9BRVNfRElSRUNUCisgICAgICAgICNlcnJvciBBRVMga2V5IHdyYXAgcmVxdWlyZXMgQUVTIGRpcmVjdCBwbGVhc2UgZGVmaW5lIFdPTEZTU0xfQUVTX0RJUkVDVAorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BLQ1M3CisgICAgI2lmIGRlZmluZWQoTk9fQUVTKSAmJiBkZWZpbmVkKE5PX0RFUzMpCisgICAgICAgICNlcnJvciBQS0NTNyBuZWVkcyBlaXRoZXIgQUVTIG9yIDNERVMgZW5hYmxlZCwgcGxlYXNlIGVuYWJsZSBvbmUKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEhBVkVfQUVTX0tFWVdSQVAKKyAgICAgICAgI2Vycm9yIFBLQ1M3IHJlcXVpcmVzIEFFUyBrZXkgd3JhcCBwbGVhc2UgZGVmaW5lIEhBVkVfQUVTX0tFWVdSQVAKKyAgICAjZW5kaWYKKyAgICAjaWYgZGVmaW5lZChIQVZFX0VDQykgJiYgIWRlZmluZWQoSEFWRV9YOTYzX0tERikKKyAgICAgICAgI2Vycm9yIFBLQ1M3IHJlcXVpcmVzIFg5NjMgS0RGIHBsZWFzZSBkZWZpbmUgSEFWRV9YOTYzX0tERgorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTk9fUEtDUzEyCisgICAgI3VuZGVmICBIQVZFX1BLQ1MxMgorICAgICNkZWZpbmUgSEFWRV9QS0NTMTIKKyNlbmRpZgorCisjaWZuZGVmIE5PX1BLQ1M4CisgICAgI3VuZGVmICBIQVZFX1BLQ1M4CisgICAgI2RlZmluZSBIQVZFX1BLQ1M4CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5PX1BCS0RGMSkgfHwgZGVmaW5lZChXT0xGU1NMX0VOQ1JZUFRFRF9LRVlTKSB8fCBkZWZpbmVkKEhBVkVfUEtDUzgpIHx8IGRlZmluZWQoSEFWRV9QS0NTMTIpCisgICAgI3VuZGVmICBIQVZFX1BCS0RGMQorICAgICNkZWZpbmUgSEFWRV9QQktERjEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTk9fUEJLREYyKSB8fCBkZWZpbmVkKEhBVkVfUEtDUzcpIHx8IGRlZmluZWQoSEFWRV9TQ1JZUFQpCisgICAgI3VuZGVmICBIQVZFX1BCS0RGMgorICAgICNkZWZpbmUgSEFWRV9QQktERjIKKyNlbmRpZgorCisKKyNpZiAhZGVmaW5lZChXT0xGQ1JZUFRfT05MWSkgJiYgIWRlZmluZWQoTk9fT0xEX1RMUykgJiYgXAorICAgICAgICAoZGVmaW5lZChOT19TSEEpIHx8IGRlZmluZWQoTk9fTUQ1KSkKKyAgICAjZXJyb3Igb2xkIFRMUyByZXF1aXJlcyBNRDUgYW5kIFNIQQorI2VuZGlmCisKKy8qIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworI2lmIGRlZmluZWQoVEVTVF9JUFY2KSAmJiAhZGVmaW5lZChXT0xGU1NMX0lQVjYpCisgICAgI2RlZmluZSBXT0xGU1NMX0lQVjYKKyNlbmRpZgorCisKKyNpZmRlZiBXT0xGU1NMX0xJTlVYS00KKyAgICAjaWZuZGVmIE5PX0RFVl9SQU5ET00KKyAgICAgICAgI2RlZmluZSBOT19ERVZfUkFORE9NCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19XUklURVYKKyAgICAgICAgI2RlZmluZSBOT19XUklURVYKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAgICAgI2RlZmluZSBOT19GSUxFU1lTVEVNCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19TVERJT19GSUxFU1lTVEVNCisgICAgICAgICNkZWZpbmUgTk9fU1RESU9fRklMRVNZU1RFTQorICAgICNlbmRpZgorICAgICNpZm5kZWYgV09MRlNTTF9OT19TT0NLCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9OT19TT0NLCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBXT0xGU1NMX0RIX0NPTlNUCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9ESF9DT05TVAorICAgICNlbmRpZgorICAgICNpZm5kZWYgV09MRlNTTF9VU0VSX0lPCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9VU0VSX0lPCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBVU0VfV09MRl9TVFJUT0sKKyAgICAgICAgI2RlZmluZSBVU0VfV09MRl9TVFJUT0sKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIFdPTEZTU0xfU1BfRElWX1dPUkRfSEFMRgorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfU1BfRElWX1dPUkRfSEFMRgorICAgICNlbmRpZgorICAgICNpZm5kZWYgV09MRlNTTF9PTERfUFJJTUVfQ0hFQ0sKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX09MRF9QUklNRV9DSEVDSworICAgICNlbmRpZgorICAgICNpZm5kZWYgV09MRlNTTF9URVNUX1NVQlJPVVRJTkUKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1RFU1RfU1VCUk9VVElORSBzdGF0aWMKKyAgICAjZW5kaWYKKyAgICAjdW5kZWYgSEFWRV9TVFJJTkdTX0gKKyAgICAjdW5kZWYgSEFWRV9FUlJOT19ICisgICAgI3VuZGVmIEhBVkVfVEhSRUFEX0xTCisgICAgI3VuZGVmIFdPTEZTU0xfSEFWRV9NSU4KKyAgICAjdW5kZWYgV09MRlNTTF9IQVZFX01BWAorICAgICNkZWZpbmUgU0laRU9GX0xPTkcgICAgICAgICA4CisgICAgI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HICAgIDgKKyAgICAjZGVmaW5lIENIQVJfQklUICAgICAgICAgICAgOAorICAgICNpZm5kZWYgV09MRlNTTF9TUF9ESVZfNjQKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1NQX0RJVl82NAorICAgICNlbmRpZgorICAgICNpZm5kZWYgV09MRlNTTF9TUF9ESVZfV09SRF9IQUxGCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9TUF9ESVZfV09SRF9IQUxGCisgICAgI2VuZGlmCisjZW5kaWYKKworCisvKiBQbGFjZSBhbnkgb3RoZXIgZmxhZ3Mgb3IgZGVmaW5lcyBoZXJlICovCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfTVlTUUxfQ09NUEFUSUJMRSkgJiYgZGVmaW5lZChfV0lOMzIpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZGVmaW5lZChIQVZFX0dNVElNRV9SKQorICAgICN1bmRlZiBIQVZFX0dNVElNRV9SIC8qIGRvbid0IHRydXN0IG1hY3JvIHdpdGggd2luZG93cyAqLworI2VuZGlmIC8qIFdPTEZTU0xfTVlTUUxfQ09NUEFUSUJMRSAqLworCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgfHwgZGVmaW5lZChXT0xGU1NMX05HSU5YKSB8fCBkZWZpbmVkKFdPTEZTU0xfSEFQUk9YWSkgXAorIHx8IGRlZmluZWQoSEFWRV9MSUdIVFkpCisgICAgI2RlZmluZSBTU0xfT1BfTk9fQ09NUFJFU1NJT04gICAgU1NMX09QX05PX0NPTVBSRVNTSU9OCisgICAgI2RlZmluZSBPUEVOU1NMX05PX0VOR0lORQorICAgICNkZWZpbmUgWDUwOV9DSEVDS19GTEFHX0FMV0FZU19DSEVDS19TVUJKRUNUCisgICAgI2lmbmRlZiBPUEVOU1NMX0VYVFJBCisgICAgICAgICNkZWZpbmUgT1BFTlNTTF9FWFRSQQorICAgICNlbmRpZgorICAgICNpZm5kZWYgSEFWRV9TRVNTSU9OX1RJQ0tFVAorICAgICAgICAjZGVmaW5lIEhBVkVfU0VTU0lPTl9USUNLRVQKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEhBVkVfT0NTUAorICAgICAgICAjZGVmaW5lIEhBVkVfT0NTUAorICAgICNlbmRpZgorICAgICNpZm5kZWYgS0VFUF9PVVJfQ0VSVAorICAgICAgICAjZGVmaW5lIEtFRVBfT1VSX0NFUlQKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEhBVkVfU05JCisgICAgICAgICNkZWZpbmUgSEFWRV9TTkkKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TTkkKKyAgICAjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUgNTUKKyNlbmRpZgorCisKKy8qIGJvdGggQ1VSVkUgYW5kIEVEIHNtYWxsIG1hdGggc2hvdWxkIGJlIGVuYWJsZWQgKi8KKyNpZmRlZiBDVVJWRUQyNTUxOV9TTUFMTAorICAgICAgICAjZGVmaW5lIENVUlZFMjU1MTlfU01BTEwKKyAgICAgICAgI2RlZmluZSBFRDI1NTE5X1NNQUxMCisjZW5kaWYKKworLyogYm90aCBDVVJWRSBhbmQgRUQgc21hbGwgbWF0aCBzaG91bGQgYmUgZW5hYmxlZCAqLworI2lmZGVmIENVUlZFRDQ0OF9TTUFMTAorICAgICAgICAjZGVmaW5lIENVUlZFNDQ4X1NNQUxMCisgICAgICAgICNkZWZpbmUgRUQ0NDhfU01BTEwKKyNlbmRpZgorCisKKyNpZm5kZWYgV09MRlNTTF9BTEVSVF9DT1VOVF9NQVgKKyAgICAjZGVmaW5lIFdPTEZTU0xfQUxFUlRfQ09VTlRfTUFYIDUKKyNlbmRpZgorCisvKiB3YXJuaW5nIGZvciBub3QgdXNpbmcgaGFyZGVuIGJ1aWxkIG9wdGlvbnMgKGRlZmF1bHQgd2l0aCAuL2NvbmZpZ3VyZSkgKi8KKyNpZm5kZWYgV0NfTk9fSEFSREVOCisgICAgI2lmIChkZWZpbmVkKFVTRV9GQVNUX01BVEgpICYmICFkZWZpbmVkKFRGTV9USU1JTkdfUkVTSVNUQU5UKSkgfHwgXAorICAgICAgICAoZGVmaW5lZChIQVZFX0VDQykgJiYgIWRlZmluZWQoRUNDX1RJTUlOR19SRVNJU1RBTlQpKSB8fCBcCisgICAgICAgICghZGVmaW5lZChOT19SU0EpICYmICFkZWZpbmVkKFdDX1JTQV9CTElORElORykgJiYgIWRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgICAgICAgICAhZGVmaW5lZChXQ19OT19STkcpKQorCisgICAgICAgICNpZm5kZWYgX01TQ19WRVIKKyAgICAgICAgICAgICN3YXJuaW5nICJGb3IgdGltaW5nIHJlc2lzdGFuY2UgLyBzaWRlLWNoYW5uZWwgYXR0YWNrIHByZXZlbnRpb24gY29uc2lkZXIgdXNpbmcgaGFyZGVuIG9wdGlvbnMiCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAjcHJhZ21hIG1lc3NhZ2UoIldhcm5pbmc6IEZvciB0aW1pbmcgcmVzaXN0YW5jZSAvIHNpZGUtY2hhbm5lbCBhdHRhY2sgcHJldmVudGlvbiBjb25zaWRlciB1c2luZyBoYXJkZW4gb3B0aW9ucyIpCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE5PX09MRF9XQ19OQU1FUykgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBKQorICAgIC8qIGFkZGVkIHRvIGhhdmUgY29tcGF0aWJpbGl0eSB3aXRoIFNIQTI1NigpICovCisgICAgI2lmICFkZWZpbmVkKE5PX09MRF9TSEFfTkFNRVMpICYmICghZGVmaW5lZChIQVZFX0ZJUFMpIHx8IFwKKyAgICAgICAgICAgIChkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiAoSEFWRV9GSVBTX1ZFUlNJT04gPiAyKSkpCisgICAgICAgICNkZWZpbmUgTk9fT0xEX1NIQV9OQU1FUworICAgICNlbmRpZgorICAgICNpZiAhZGVmaW5lZChOT19PTERfTUQ1X05BTUUpICYmICghZGVmaW5lZChIQVZFX0ZJUFMpIHx8IFwKKyAgICAgICAgICAgIChkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiAoSEFWRV9GSVBTX1ZFUlNJT04gPiAyKSkpCisgICAgICAgICNkZWZpbmUgTk9fT0xEX01ENV9OQU1FCisgICAgI2VuZGlmCisjZW5kaWYKKworLyogc3dpdGNoIGZvciBjb21wYXRpYmlsaXR5IGxheWVyIGZ1bmN0aW9uYWxpdHkuIEhhcyBzdWJwYXJ0cyBpLmUuIEJJTy9YNTA5CisgKiBXaGVuIG9wZW5zc2xleHRyYSBpcyBlbmFibGVkIGFsbCBzdWJwYXJ0cyBzaG91bGQgYmUgdHVybmVkIG9uLiAqLworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgICAjdW5kZWYgIE9QRU5TU0xfRVhUUkFfWDUwOV9TTUFMTAorICAgICNkZWZpbmUgT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMCisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSAqLworCisvKiBzdXBwb3J0IGZvciBjb252ZXJ0aW5nIERFUiB0byBQRU0gKi8KKyNpZiAoZGVmaW5lZChXT0xGU1NMX0tFWV9HRU4pICYmICFkZWZpbmVkKFdPTEZTU0xfTk9fREVSX1RPX1BFTSkpIHx8IFwKKyAgICBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9HRU4pIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQSkKKyAgICAjdW5kZWYgIFdPTEZTU0xfREVSX1RPX1BFTQorICAgICNkZWZpbmUgV09MRlNTTF9ERVJfVE9fUEVNCisjZW5kaWYKKworLyoga2VlcCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBlbmFibGluZyBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXkgKi8KKyNpZm5kZWYgV09MRlNTTF9FTkNSWVBURURfS0VZUworICAgICNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoT1BFTlNTTF9FWFRSQV9YNTA5X1NNQUxMKSB8fCBcCisgICAgICAgIGRlZmluZWQoSEFWRV9XRUJTRVJWRVIpCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9FTkNSWVBURURfS0VZUworICAgICNlbmRpZgorI2VuZGlmCisKKy8qIHN1cHBvcnQgZm9yIGRpc2FibGluZyBQRU0gdG8gREVSICovCisjaWYgIWRlZmluZWQoV09MRlNTTF9OT19QRU0pICYmICFkZWZpbmVkKE5PX0NPRElORykKKyAgICAjdW5kZWYgIFdPTEZTU0xfUEVNX1RPX0RFUgorICAgICNkZWZpbmUgV09MRlNTTF9QRU1fVE9fREVSCisjZW5kaWYKKworLyogUGFydHMgb2YgdGhlIG9wZW5zc2wgY29tcGF0aWJpbGl0eSBsYXllciByZXF1aXJlIHBlZXIgY2VydHMgKi8KKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSB8fCBkZWZpbmVkKFdPTEZTU0xfTkdJTlgpIHx8IGRlZmluZWQoV09MRlNTTF9IQVBST1hZKSBcCisgfHwgZGVmaW5lZChIQVZFX0xJR0hUWSkKKyAgICAjdW5kZWYgIEtFRVBfUEVFUl9DRVJUCisgICAgI2RlZmluZSBLRUVQX1BFRVJfQ0VSVAorI2VuZGlmCisKKy8qIFJBVyBoYXNoIGZ1bmN0aW9uIEFQSXMgYXJlIG5vdCBpbXBsZW1lbnRlZCAqLworI2lmIGRlZmluZWQoV09MRlNTTF9BUk1BU00pIHx8IGRlZmluZWQoV09MRlNTTF9BRkFMR19IQVNIKQorICAgICN1bmRlZiAgV09MRlNTTF9OT19IQVNIX1JBVworICAgICNkZWZpbmUgV09MRlNTTF9OT19IQVNIX1JBVworI2VuZGlmCisKKy8qIFhDaGFjaGEgbm90IGltcGxlbWVudGVkIHdpdGggQVJNIGFzc2VtYmx5IENoYUNoYSAqLworI2lmIGRlZmluZWQoV09MRlNTTF9BUk1BU00pCisgICAgI3VuZGVmIEhBVkVfWENIQUNIQQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChXT0xGU1NMX1NIQTM4NCkgJiYgIWRlZmluZWQoV09MRlNTTF9TSEE1MTIpICYmIGRlZmluZWQoTk9fQUVTKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmluZWQoV09MRlNTTF9TSEEzKQorICAgICN1bmRlZiAgV09MRlNTTF9OT19XT1JENjRfT1BTCisgICAgI2RlZmluZSBXT0xGU1NMX05PX1dPUkQ2NF9PUFMKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV09MRkNSWVBUX09OTFkpICYmICFkZWZpbmVkKFdPTEZTU0xfTk9fVExTMTIpCisgICAgI3VuZGVmICBXT0xGU1NMX0hBVkVfUFJGCisgICAgI2RlZmluZSBXT0xGU1NMX0hBVkVfUFJGCisjZW5kaWYKKworI2lmIGRlZmluZWQoTk9fQUVTKSAmJiBkZWZpbmVkKE5PX0RFUzMpICYmICFkZWZpbmVkKEhBVkVfQ0FNRUxMSUEpICYmIFwKKyAgICAgICAhZGVmaW5lZChXT0xGU1NMX0hBVkVfUFJGKSAmJiBkZWZpbmVkKE5PX1BXREJBU0VEKSAmJiAhZGVmaW5lZChIQVZFX0lERUEpCisgICAgI3VuZGVmICBXT0xGU1NMX05PX1hPUl9PUFMKKyAgICAjZGVmaW5lIFdPTEZTU0xfTk9fWE9SX09QUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE5PX0FTTikgJiYgZGVmaW5lZChXT0xGQ1JZUFRfT05MWSkKKyAgICAjdW5kZWYgIFdPTEZTU0xfTk9fSU5UX0VOQ09ERQorICAgICNkZWZpbmUgV09MRlNTTF9OT19JTlRfRU5DT0RFCisgICAgI3VuZGVmICBXT0xGU1NMX05PX0lOVF9ERUNPREUKKyAgICAjZGVmaW5lIFdPTEZTU0xfTk9fSU5UX0RFQ09ERQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZDUllQVF9PTkxZKSAmJiBkZWZpbmVkKFdPTEZTU0xfUlNBX1ZFUklGWV9PTkxZKSAmJiBcCisgICAgZGVmaW5lZChXQ19OT19SU0FfT0FFUCkKKyAgICAjdW5kZWYgIFdPTEZTU0xfTk9fQ1RfT1BTCisgICAgI2RlZmluZSBXT0xGU1NMX05PX0NUX09QUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZDUllQVF9PTkxZKSAmJiBkZWZpbmVkKE5PX0FFUykgJiYgIWRlZmluZWQoSEFWRV9DVVJWRTI1NTE5KSAmJiBcCisgICAgICAgICFkZWZpbmVkKEhBVkVfQ1VSVkU0NDgpICYmIGRlZmluZWQoV0NfTk9fUk5HKSAmJiBkZWZpbmVkKFdDX05PX1JTQV9PQUVQKQorICAgICN1bmRlZiAgV09MRlNTTF9OT19DT05TVF9DTVAKKyAgICAjZGVmaW5lIFdPTEZTU0xfTk9fQ09OU1RfQ01QCisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRkNSWVBUX09OTFkpICYmIGRlZmluZWQoTk9fQUVTKSAmJiAhZGVmaW5lZChXT0xGU1NMX1NIQTM4NCkgJiYgXAorICAgICFkZWZpbmVkKFdPTEZTU0xfU0hBNTEyKSAmJiBkZWZpbmVkKFdDX05PX1JORykgJiYgXAorICAgIChkZWZpbmVkKFdPTEZTU0xfU1BfTUFUSCkgfHwgZGVmaW5lZChXT0xGU1NMX1NQX01BVEhfQUxMKSkgJiYgXAorICAgIGRlZmluZWQoV09MRlNTTF9SU0FfUFVCTElDX09OTFkpCisgICAgI3VuZGVmICBXT0xGU1NMX05PX0ZPUkNFX1pFUk8KKyAgICAjZGVmaW5lIFdPTEZTU0xfTk9fRk9SQ0VfWkVSTworI2VuZGlmCisKKy8qIERldGVjdCBvbGQgY3J5cHRvZGV2IG5hbWUgKi8KKyNpZiBkZWZpbmVkKFdPTEZfQ1JZUFRPX0RFVikgJiYgIWRlZmluZWQoV09MRl9DUllQVE9fQ0IpCisgICAgI2RlZmluZSBXT0xGX0NSWVBUT19DQgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIGRlZmluZWQoV09MRlNTTF9OT19TSUdBTEcpCisgICAgI2Vycm9yIFRMUyAxLjMgcmVxdWlyZXMgdGhlIFNpZ25hdHVyZSBBbGdvcml0aG1zIGV4dGVuc2lvbiB0byBiZSBlbmFibGVkCisjZW5kaWYKKworI2lmbmRlZiBOT19XT0xGU1NMX0JBU0U2NF9ERUNPREUKKyAgICAjZGVmaW5lIFdPTEZTU0xfQkFTRTY0X0RFQ09ERQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfRVhfREFUQSkgfHwgZGVmaW5lZChGT1JUUkVTUykKKyAgICAjZGVmaW5lIE1BWF9FWF9EQVRBIDUgIC8qIGFsbG93IGZvciBmaXZlIGl0ZW1zIG9mIGV4X2RhdGEgKi8KKyNlbmRpZgorCisjaWZkZWYgTk9fV09MRlNTTF9TTUFMTF9TVEFDSworICAgICN1bmRlZiBXT0xGU1NMX1NNQUxMX1NUQUNLCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfU01BTExfU1RBQ0tfU1RBVElDCisgICAgI3VuZGVmIFdPTEZTU0xfU01BTExfU1RBQ0tfU1RBVElDCisgICAgI2RlZmluZSBXT0xGU1NMX1NNQUxMX1NUQUNLX1NUQVRJQyBzdGF0aWMKKyNlbHNlCisgICAgI2RlZmluZSBXT0xGU1NMX1NNQUxMX1NUQUNLX1NUQVRJQworI2VuZGlmCisKKy8qIFRoZSBjbGllbnQgc2Vzc2lvbiBjYWNoZSByZXF1aXJlcyB0aW1lIGZvciB0aW1lb3V0ICovCisjaWYgZGVmaW5lZChOT19BU05fVElNRSkgJiYgIWRlZmluZWQoTk9fU0VTU0lPTl9DQUNIRSkKKyAgICAjZGVmaW5lIE5PX1NFU1NJT05fQ0FDSEUKKyNlbmRpZgorCisvKiBVc2Ugc3RhdGljIEVDQyBzdHJ1Y3RzIGZvciBQb3NpdGlvbiBJbmRlcGVuZGFudCBDb2RlIChQSUMpICovCisjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSAmJiBkZWZpbmVkKF9fUk9QSV9fKQorICAgICNkZWZpbmUgV09MRlNTTF9FQ0NfQ1VSVkVfU1RBVElDCisgICAgI2RlZmluZSBXT0xGU1NMX05BTUVTX1NUQVRJQworICAgICNkZWZpbmUgV09MRlNTTF9OT19DT05TVENIQVJDT05TVAorI2VuZGlmCisKKy8qIEZJUFMgdjEgZG9lcyBub3Qgc3VwcG9ydCBUTFMgdjEuMyAocmVxdWlyZXMgUlNBIFBTUyBhbmQgSEtERikgKi8KKyNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pCisgICAgI3VuZGVmIFdDX1JTQV9QU1MKKyAgICAjdW5kZWYgV09MRlNTTF9UTFMxMworI2VuZGlmCisKKy8qIEZvciBGSVBTdjIgbWFrZSBzdXJlIHRoZSBFQ0RTQSBlbmNvZGluZyBhbGxvd3MgZXh0cmEgYnl0ZXMKKyAqIGJ1dCBtYWtlIHN1cmUgdXNlcnMgY29uc2lkZXIgZW5hYmxpbmcgaXQgKi8KKyNpZiAhZGVmaW5lZChOT19TVFJJQ1RfRUNEU0FfTEVOKSAmJiBkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorICAgICAgICBkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiAoSEFWRV9GSVBTX1ZFUlNJT04gPj0gMikKKyAgICAvKiBFQ0RTQSBsZW5ndGggY2hlY2tzIG9mZiBieSBkZWZhdWx0IGZvciBDQVZQIHRlc3RpbmcKKyAgICAgKiBjb25zaWRlciBlbmFibGluZyBzdHJpY3QgY2hlY2tzIGluIHByb2R1Y3Rpb24gKi8KKyAgICAjZGVmaW5lIE5PX1NUUklDVF9FQ0RTQV9MRU4KKyNlbmRpZgorCisvKiBEbyBub3QgYWxsb3cgdXNpbmcgc21hbGwgc3RhY2sgd2l0aCBubyBtYWxsb2MgKi8KKyNpZiBkZWZpbmVkKFdPTEZTU0xfTk9fTUFMTE9DKSAmJiBcCisgICAgKGRlZmluZWQoV09MRlNTTF9TTUFMTF9TVEFDSykgfHwgZGVmaW5lZChXT0xGU1NMX1NNQUxMX1NUQUNLX0NBQ0hFKSkKKyAgICAjZXJyb3IgU21hbGwgc3RhY2sgY2Fubm90IGJlIHVzZWQgd2l0aCBubyBtYWxsb2MgKFdPTEZTU0xfTk9fTUFMTE9DKQorI2VuZGlmCisKKy8qIEVuYWJsZSBESCBFeHRyYSBmb3IgUVQsIG9wZW5zc2wgYWxsLCBvcGVuc3NoIGFuZCBzdGF0aWMgZXBoZW1lcmFsICovCisvKiBBbGxvd3MgZXhwb3J0L2ltcG9ydCBvZiBESCBrZXkgYW5kIHBhcmFtcyBhcyBERVIgKi8KKyNpZiAhZGVmaW5lZChOT19ESCkgJiYgIWRlZmluZWQoV09MRlNTTF9ESF9FWFRSQSkgJiYgXAorICAgIChkZWZpbmVkKFdPTEZTU0xfUVQpIHx8IGRlZmluZWQoT1BFTlNTTF9BTEwpIHx8IGRlZmluZWQoV09MRlNTTF9PUEVOU1NIKSB8fCBcCisgICAgIGRlZmluZWQoV09MRlNTTF9TVEFUSUNfRVBIRU1FUkFMKSkKKyAgICAjZGVmaW5lIFdPTEZTU0xfREhfRVhUUkEKKyNlbmRpZgorCisvKiBESCBFeHRyYSBpcyBub3Qgc3VwcG9ydGVkIG9uIEZJUFMgdjEgb3IgdjIgKGlzIG1pc3NpbmcgRGhLZXkgLnB1Yi8ucHJpdikgKi8KKyNpZiBkZWZpbmVkKFdPTEZTU0xfREhfRVhUUkEpICYmIGRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgICAgICghZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgfHwgSEFWRV9GSVBTX1ZFUlNJT04gPD0gMikKKyAgICAjdW5kZWYgV09MRlNTTF9ESF9FWFRSQQorI2VuZGlmCisKKy8qIENoZWNrIGZvciBpbnNlY3VyZSBidWlsZCBjb21iaW5hdGlvbjoKKyAqIHNlY3VyZSByZW5lZ290aWF0aW9uICAgW2VuYWJsZWRdCisgKiBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IFtkaXNhYmxlZF0KKyAqIHNlc3Npb24gcmVzdW1wdGlvbiAgICAgW2VuYWJsZWRdCisgKi8KKyNpZiBkZWZpbmVkKEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04pICYmICFkZWZpbmVkKEhBVkVfRVhURU5ERURfTUFTVEVSKSAmJiBcCisgICAgKGRlZmluZWQoSEFWRV9TRVNTSU9OX1RJQ0tFVCkgfHwgIWRlZmluZWQoTk9fU0VTU0lPTl9DQUNIRSkpCisgICAgLyogc2VjdXJlIHJlbmVnb3RpYXRpb24gcmVxdWlyZXMgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCB3aXRoIHJlc3VtcHRpb24gKi8KKyAgICAjaWZuZGVmIF9NU0NfVkVSCisgICAgICAgICN3YXJuaW5nIEV4dGVuZGVkIG1hc3RlciBzZWNyZXQgbXVzdCBiZSBlbmFibGVkIHdpdGggc2VjdXJlIHJlbmVnb3RpYXRpb24gYW5kIHNlc3Npb24gcmVzdW1wdGlvbgorICAgICNlbHNlCisgICAgICAgICNwcmFnbWEgbWVzc2FnZSgiV2FybmluZzogRXh0ZW5kZWQgbWFzdGVyIHNlY3JldCBtdXN0IGJlIGVuYWJsZWQgd2l0aCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBhbmQgc2Vzc2lvbiByZXN1bXB0aW9uIikKKyAgICAjZW5kaWYKKworICAgIC8qIE5vdGU6ICItLWVuYWJsZS1yZW5lZ290aWF0aW9uLWluZGljYXRpb24iICgiSEFWRV9SRU5FR09USUFUSU9OX0lORElDQVRJT04iKQorICAgICAqIG9ubHkgc2VuZHMgdGhlIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiwgYnV0IGlzIG5vdCBhY3R1YWxseSBzdXBwb3J0ZWQuIAorICAgICAqIFRoaXMgd2FzIGFkZGVkIGJlY2F1c2Ugc29tZSBUTFMgcGVlcnMgcmVxdWlyZWQgaXQgZXZlbiBpZiBub3QgdXNlZCwgc28gd2UgY2FsbCAKKyAgICAgKiB0aGlzICIoRkFLRSBTZWN1cmUgUmVuZWdvdGlhdGlvbikiCisgICAgICovCisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3NoYS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3NoYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNTVmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvc2hhLmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qIHNoYS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvc2hhLmgKKyovCisKKworI2lmbmRlZiBXT0xGX0NSWVBUX1NIQV9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfU0hBX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisKKyNpZm5kZWYgTk9fU0hBCisKKyNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorICAgIGRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pICYmIChIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyKQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9maXBzLmg+CisjZW5kaWYgLyogSEFWRV9GSVBTX1ZFUlNJT04gPj0gMiAqLworCisjaWYgZGVmaW5lZChIQVZFX0ZJUFMpICYmIFwKKwkoIWRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pIHx8IChIQVZFX0ZJUFNfVkVSU0lPTiA8IDIpKQorI2RlZmluZSB3Y19TaGEgICAgICAgICAgICAgU2hhCisjZGVmaW5lIFdDX1NIQSAgICAgICAgICAgICBTSEEKKyNkZWZpbmUgV0NfU0hBX0JMT0NLX1NJWkUgIFNIQV9CTE9DS19TSVpFCisjZGVmaW5lIFdDX1NIQV9ESUdFU1RfU0laRSBTSEFfRElHRVNUX1NJWkUKKyNkZWZpbmUgV0NfU0hBX1BBRF9TSVpFICAgIFNIQV9QQURfU0laRQorCisvKiBmb3IgZmlwcyBAd2NfZmlwcyAqLworI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvc2hhLmg+CisjZW5kaWYKKworI2lmZGVmIEZSRUVTQ0FMRV9MVENfU0hBCisgICAgI2luY2x1ZGUgImZzbF9sdGMuaCIKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9JTVhSVF9EQ1AKKwkjaW5jbHVkZSAiZnNsX2RjcC5oIgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGF2b2lkIHJlZGVmaW5pdGlvbiBvZiBzdHJ1Y3RzICovCisjaWYgIWRlZmluZWQoSEFWRV9GSVBTKSB8fCBcCisgICAgKGRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pICYmIChIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyKSkKKworI2lmZGVmIFdPTEZTU0xfTUlDUk9DSElQX1BJQzMyTVoKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcG9ydC9waWMzMi9waWMzMm16LWNyeXB0Lmg+CisjZW5kaWYKKyNpZmRlZiBTVE0zMl9IQVNICisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvc3Qvc3RtMzIuaD4KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXN5bmMuaD4KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfRVNQMzJXUk9PTTMyX0NSWVBUCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvRXNwcmVzc2lmL2VzcDMyLWNyeXB0Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfU0lMQUJTX1NFX0FDQ0VMKQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9wb3J0L3NpbGFicy9zaWxhYnNfaGFzaC5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOT19PTERfU0hBX05BTUVTKQorICAgICNkZWZpbmUgU0hBICAgICAgICAgICAgIFdDX1NIQQorI2VuZGlmCisKKyNpZm5kZWYgTk9fT0xEX1dDX05BTUVTCisgICAgI2RlZmluZSBTaGEgICAgICAgICAgICAgd2NfU2hhCisgICAgI2RlZmluZSBTSEFfQkxPQ0tfU0laRSAgV0NfU0hBX0JMT0NLX1NJWkUKKyAgICAjZGVmaW5lIFNIQV9ESUdFU1RfU0laRSBXQ19TSEFfRElHRVNUX1NJWkUKKyAgICAjZGVmaW5lIFNIQV9QQURfU0laRSAgICBXQ19TSEFfUEFEX1NJWkUKKyNlbmRpZgorCisvKiBpbiBieXRlcyAqLworZW51bSB7CisgICAgV0NfU0hBICAgICAgICAgICAgICA9ICBXQ19IQVNIX1RZUEVfU0hBLAorICAgIFdDX1NIQV9CTE9DS19TSVpFICAgPSA2NCwKKyAgICBXQ19TSEFfRElHRVNUX1NJWkUgID0gMjAsCisgICAgV0NfU0hBX1BBRF9TSVpFICAgICA9IDU2Cit9OworCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfVElfSEFTSCkKKyAgICAjaW5jbHVkZSAid29sZnNzbC93b2xmY3J5cHQvcG9ydC90aS90aS1oYXNoLmgiCisKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9JTVg2X0NBQU0pICYmICFkZWZpbmVkKFdPTEZTU0xfUU5YX0NBQU0pCisgICAgI2luY2x1ZGUgIndvbGZzc2wvd29sZmNyeXB0L3BvcnQvY2FhbS93b2xmY2FhbV9zaGEuaCIKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9SRU5FU0FTX1RTSVBfQ1JZUFQpICYmIFwKKyAgICFkZWZpbmVkKE5PX1dPTEZTU0xfUkVORVNBU19UU0lQX0NSWVBUX0hBU0gpCisgICAgI2luY2x1ZGUgIndvbGZzc2wvd29sZmNyeXB0L3BvcnQvUmVuZXNhcy9yZW5lc2FzLXRzaXAtY3J5cHQuaCIKKyNlbHNlCisKKy8qIFNoYSBkaWdlc3QgKi8KK3N0cnVjdCB3Y19TaGEgeworI2lmZGVmIEZSRUVTQ0FMRV9MVENfU0hBCisgICAgICAgIGx0Y19oYXNoX2N0eF90IGN0eDsKKyNlbGlmIGRlZmluZWQoU1RNMzJfSEFTSCkKKyAgICAgICAgU1RNMzJfSEFTSF9Db250ZXh0IHN0bUN0eDsKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9TSUxBQlNfU0VfQUNDRUwpCisgICAgICAgIHdjX3NpbGFic19zaGFfdCBzaWxhYnNDdHg7CisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfSU1YUlRfRENQKQorICAgICAgICBkY3BfaGFuZGxlX3QgaGFuZGxlOworICAgICAgICBkY3BfaGFzaF9jdHhfdCBjdHg7CisjZWxzZQorICAgICAgICB3b3JkMzIgIGJ1ZmZMZW47ICAgLyogaW4gYnl0ZXMgICAgICAgICAgKi8KKyAgICAgICAgd29yZDMyICBsb0xlbjsgICAgIC8qIGxlbmd0aCBpbiBieXRlcyAgICovCisgICAgICAgIHdvcmQzMiAgaGlMZW47ICAgICAvKiBsZW5ndGggaW4gYnl0ZXMgICAqLworICAgICAgICB3b3JkMzIgIGJ1ZmZlcltXQ19TSEFfQkxPQ0tfU0laRSAgLyBzaXplb2Yod29yZDMyKV07CisgICAgI2lmZGVmIFdPTEZTU0xfUElDMzJNWl9IQVNICisgICAgICAgIHdvcmQzMiAgZGlnZXN0W1BJQzMyX0RJR0VTVF9TSVpFIC8gc2l6ZW9mKHdvcmQzMildOworICAgICNlbHNlCisgICAgICAgIHdvcmQzMiAgZGlnZXN0W1dDX1NIQV9ESUdFU1RfU0laRSAvIHNpemVvZih3b3JkMzIpXTsKKyAgICAjZW5kaWYKKyAgICAgICAgdm9pZCogICBoZWFwOworICAgICNpZmRlZiBXT0xGU1NMX1BJQzMyTVpfSEFTSAorICAgICAgICBoYXNoVXBkQ2FjaGUgY2FjaGU7IC8qIGNhY2hlIGZvciB1cGRhdGVzICovCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgV0NfQVNZTkNfREVWIGFzeW5jRGV2OworICAgICNlbmRpZiAvKiBXT0xGU1NMX0FTWU5DX0NSWVBUICovCisgICAgI2lmZGVmIFdPTEZfQ1JZUFRPX0NCCisgICAgICAgIGludCAgICBkZXZJZDsKKyAgICAgICAgdm9pZCogIGRldkN0eDsgLyogZ2VuZXJpYyBjcnlwdG8gY2FsbGJhY2sgY29udGV4dCAqLworICAgICNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0VTUDMyV1JPT00zMl9DUllQVCkgJiYgXAorICAgIWRlZmluZWQoTk9fV09MRlNTTF9FU1AzMldST09NMzJfQ1JZUFRfSEFTSCkKKyAgICBXQ19FU1AzMlNIQSBjdHg7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfSEFTSF9GTEFHUykgfHwgZGVmaW5lZChXT0xGX0NSWVBUT19DQikKKyAgICB3b3JkMzIgZmxhZ3M7IC8qIGVudW0gd2NfSGFzaEZsYWdzIGluIGhhc2guaCAqLworI2VuZGlmCit9OworCisjaWZuZGVmIFdDX1NIQV9UWVBFX0RFRklORUQKKyAgICB0eXBlZGVmIHN0cnVjdCB3Y19TaGEgd2NfU2hhOworICAgICNkZWZpbmUgV0NfU0hBX1RZUEVfREVGSU5FRAorI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX1RJX0hBU0ggKi8KKworCisjZW5kaWYgLyogSEFWRV9GSVBTICovCisKK1dPTEZTU0xfQVBJIGludCB3Y19Jbml0U2hhKHdjX1NoYSopOworV09MRlNTTF9BUEkgaW50IHdjX0luaXRTaGFfZXgod2NfU2hhKiBzaGEsIHZvaWQqIGhlYXAsIGludCBkZXZJZCk7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhVXBkYXRlKHdjX1NoYSosIGNvbnN0IGJ5dGUqLCB3b3JkMzIpOworV09MRlNTTF9BUEkgaW50IHdjX1NoYUZpbmFsUmF3KHdjX1NoYSosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGFGaW5hbCh3Y19TaGEqLCBieXRlKik7CitXT0xGU1NMX0FQSSB2b2lkIHdjX1NoYUZyZWUod2NfU2hhKik7CisKK1dPTEZTU0xfQVBJIGludCB3Y19TaGFHZXRIYXNoKHdjX1NoYSosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGFDb3B5KHdjX1NoYSosIHdjX1NoYSopOworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkKK1dPTEZTU0xfQVBJIGludCB3Y19TaGFUcmFuc2Zvcm0od2NfU2hhKiwgY29uc3QgYnl0ZSopOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1BJQzMyTVpfSEFTSAorV09MRlNTTF9BUEkgdm9pZCB3Y19TaGFTaXplU2V0KHdjX1NoYSogc2hhLCB3b3JkMzIgbGVuKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX0hBU0hfRkxBR1MpIHx8IGRlZmluZWQoV09MRl9DUllQVE9fQ0IpCisgICAgV09MRlNTTF9BUEkgaW50IHdjX1NoYVNldEZsYWdzKHdjX1NoYSogc2hhLCB3b3JkMzIgZmxhZ3MpOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19TaGFHZXRGbGFncyh3Y19TaGEqIHNoYSwgd29yZDMyKiBmbGFncyk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE5PX1NIQSAqLworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfU0hBX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3NoYTI1Ni5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3NoYTI1Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NzQ0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvc2hhMjU2LmgKQEAgLTAsMCArMSwyODIgQEAKKy8qIHNoYTI1Ni5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvc2hhMjU2LmgKKyovCisKKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfU0hBMjU2X0gKKyNkZWZpbmUgV09MRl9DUllQVF9TSEEyNTZfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmbmRlZiBOT19TSEEyNTYKKworI2lmIGRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgJiYgKEhBVkVfRklQU19WRVJTSU9OID49IDIpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ZpcHMuaD4KKyNlbmRpZiAvKiBIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyICovCisKKyNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorCSghZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgfHwgKEhBVkVfRklQU19WRVJTSU9OIDwgMikpCisgICAgI2RlZmluZSB3Y19TaGEyNTYgICAgICAgICAgICAgU2hhMjU2CisgICAgI2RlZmluZSBXQ19TSEEyNTYgICAgICAgICAgICAgU0hBMjU2CisgICAgI2RlZmluZSBXQ19TSEEyNTZfQkxPQ0tfU0laRSAgU0hBMjU2X0JMT0NLX1NJWkUKKyAgICAjZGVmaW5lIFdDX1NIQTI1Nl9ESUdFU1RfU0laRSBTSEEyNTZfRElHRVNUX1NJWkUKKyAgICAjZGVmaW5lIFdDX1NIQTI1Nl9QQURfU0laRSAgICBTSEEyNTZfUEFEX1NJWkUKKworICAgICNpZmRlZiBXT0xGU1NMX1NIQTIyNAorICAgICAgICAjZGVmaW5lIHdjX1NoYTIyNCAgICAgICAgICAgICBTaGEyMjQKKyAgICAgICAgI2RlZmluZSBXQ19TSEEyMjQgICAgICAgICAgICAgU0hBMjI0CisgICAgICAgICNkZWZpbmUgV0NfU0hBMjI0X0JMT0NLX1NJWkUgIFNIQTIyNF9CTE9DS19TSVpFCisgICAgICAgICNkZWZpbmUgV0NfU0hBMjI0X0RJR0VTVF9TSVpFIFNIQTIyNF9ESUdFU1RfU0laRQorICAgICAgICAjZGVmaW5lIFdDX1NIQTIyNF9QQURfU0laRSAgICBTSEEyMjRfUEFEX1NJWkUKKyAgICAjZW5kaWYKKworICAgIC8qIGZvciBmaXBzIEB3Y19maXBzICovCisgICAgI2luY2x1ZGUgPGN5YXNzbC9jdGFvY3J5cHQvc2hhMjU2Lmg+CisjZW5kaWYKKworI2lmZGVmIEZSRUVTQ0FMRV9MVENfU0hBCisgICAgI2luY2x1ZGUgImZzbF9sdGMuaCIKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9JTVhSVF9EQ1AKKwkjaW5jbHVkZSAiZnNsX2RjcC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfUFNPQzZfQ1JZUFRPKQorI2luY2x1ZGUgImN5X2NyeXB0b19jb3JlX3NoYS5oIgorI2luY2x1ZGUgImN5X2RldmljZV9oZWFkZXJzLmgiCisjaW5jbHVkZSAiY3lfY3J5cHRvX2NvbW1vbi5oIgorI2luY2x1ZGUgImN5X2NyeXB0b19jb3JlLmgiCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogYXZvaWQgcmVkZWZpbml0aW9uIG9mIHN0cnVjdHMgKi8KKyNpZiAhZGVmaW5lZChIQVZFX0ZJUFMpIHx8IFwKKyAgICAoZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgJiYgKEhBVkVfRklQU19WRVJTSU9OID49IDIpKQorCisjaWZkZWYgV09MRlNTTF9NSUNST0NISVBfUElDMzJNWgorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9wb3J0L3BpYzMyL3BpYzMybXotY3J5cHQuaD4KKyNlbmRpZgorI2lmZGVmIFNUTTMyX0hBU0gKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcG9ydC9zdC9zdG0zMi5oPgorI2VuZGlmCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hc3luYy5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0RFVkNSWVBUTykgJiYgZGVmaW5lZChXT0xGU1NMX0RFVkNSWVBUT19IQVNIKQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9wb3J0L2RldmNyeXB0by93Y19kZXZjcnlwdG8uaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9FU1AzMldST09NMzJfQ1JZUFQpCisgICAgI2luY2x1ZGUgIndvbGZzc2wvd29sZmNyeXB0L3BvcnQvRXNwcmVzc2lmL2VzcDMyLWNyeXB0LmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfQ1JZUFRPQ0VMTCkKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcG9ydC9hcm0vY3J5cHRvQ2VsbC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX1NJTEFCU19TRV9BQ0NFTCkKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcG9ydC9zaWxhYnMvc2lsYWJzX2hhc2guaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIFNIQTI1Nl9OT0lOTElORSBfX2RlY2xzcGVjKG5vaW5saW5lKQorI2VsaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSB8fCBkZWZpbmVkKF9fR05VQ19fKQorICAgICNkZWZpbmUgU0hBMjU2X05PSU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKyNlbHNlCisgICAgI2RlZmluZSBTSEEyNTZfTk9JTkxJTkUKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTk9fT0xEX1NIQV9OQU1FUykKKyAgICAjZGVmaW5lIFNIQTI1NiAgICAgICAgICAgICBXQ19TSEEyNTYKKyNlbmRpZgorCisjaWZuZGVmIE5PX09MRF9XQ19OQU1FUworICAgICNkZWZpbmUgU2hhMjU2ICAgICAgICAgICAgIHdjX1NoYTI1NgorICAgICNkZWZpbmUgU0hBMjU2X0JMT0NLX1NJWkUgIFdDX1NIQTI1Nl9CTE9DS19TSVpFCisgICAgI2RlZmluZSBTSEEyNTZfRElHRVNUX1NJWkUgV0NfU0hBMjU2X0RJR0VTVF9TSVpFCisgICAgI2RlZmluZSBTSEEyNTZfUEFEX1NJWkUgICAgV0NfU0hBMjU2X1BBRF9TSVpFCisjZW5kaWYKKworLyogaW4gYnl0ZXMgKi8KK2VudW0geworICAgIFdDX1NIQTI1NiAgICAgICAgICAgICAgPSAgV0NfSEFTSF9UWVBFX1NIQTI1NiwKKyAgICBXQ19TSEEyNTZfQkxPQ0tfU0laRSAgID0gNjQsCisgICAgV0NfU0hBMjU2X0RJR0VTVF9TSVpFICA9IDMyLAorICAgIFdDX1NIQTI1Nl9QQURfU0laRSAgICAgPSA1NgorfTsKKworCisjaWZkZWYgV09MRlNTTF9USV9IQVNICisgICAgI2luY2x1ZGUgIndvbGZzc2wvd29sZmNyeXB0L3BvcnQvdGkvdGktaGFzaC5oIgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX0lNWDZfQ0FBTSkgJiYgIWRlZmluZWQoV09MRlNTTF9RTlhfQ0FBTSkKKyAgICAjaW5jbHVkZSAid29sZnNzbC93b2xmY3J5cHQvcG9ydC9jYWFtL3dvbGZjYWFtX3NoYS5oIgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX0FGQUxHX0hBU0gpCisgICAgI2luY2x1ZGUgIndvbGZzc2wvd29sZmNyeXB0L3BvcnQvYWZfYWxnL2FmYWxnX2hhc2guaCIKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9SRU5FU0FTX1RTSVBfQ1JZUFQpICYmIFwKKyAgICFkZWZpbmVkKE5PX1dPTEZTU0xfUkVORVNBU19UU0lQX0NSWVBUX0hBU0gpCisgICAgI2luY2x1ZGUgIndvbGZzc2wvd29sZmNyeXB0L3BvcnQvUmVuZXNhcy9yZW5lc2FzLXRzaXAtY3J5cHQuaCIKKyNlbHNlCisKKy8qIHdjX1NoYTI1NiBkaWdlc3QgKi8KK3N0cnVjdCB3Y19TaGEyNTYgeworI2lmZGVmIEZSRUVTQ0FMRV9MVENfU0hBCisgICAgbHRjX2hhc2hfY3R4X3QgY3R4OworI2VsaWYgZGVmaW5lZChTVE0zMl9IQVNIX1NIQTIpCisgICAgU1RNMzJfSEFTSF9Db250ZXh0IHN0bUN0eDsKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9TSUxBQlNfU0VfQUNDRUwpCisgIHdjX3NpbGFic19zaGFfdCBzaWxhYnNDdHg7CisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfSU1YUlRfRENQKQorICAgIGRjcF9oYW5kbGVfdCBoYW5kbGU7CisgICAgZGNwX2hhc2hfY3R4X3QgY3R4OworI2VsaWYgZGVmaW5lZChXT0xGU1NMX1BTT0M2X0NSWVBUTykKKyAgICBjeV9zdGNfY3J5cHRvX3NoYV9zdGF0ZV90IGhhc2hfc3RhdGU7CisgICAgY3lfZW5fY3J5cHRvX3NoYV9tb2RlX3Qgc2hhX21vZGU7CisgICAgY3lfc3RjX2NyeXB0b192Ml9zaGEyNTZfYnVmZmVyc190IHNoYV9idWZmZXJzOworI2Vsc2UKKyAgICAvKiBhbGlnbm1lbnQgb24gZGlnZXN0IGFuZCBidWZmZXIgc3BlZWRzIHVwIEFSTXY4IGNyeXB0byBvcGVyYXRpb25zICovCisgICAgQUxJR04xNiB3b3JkMzIgIGRpZ2VzdFtXQ19TSEEyNTZfRElHRVNUX1NJWkUgLyBzaXplb2Yod29yZDMyKV07CisgICAgQUxJR04xNiB3b3JkMzIgIGJ1ZmZlcltXQ19TSEEyNTZfQkxPQ0tfU0laRSAgLyBzaXplb2Yod29yZDMyKV07CisgICAgd29yZDMyICBidWZmTGVuOyAgIC8qIGluIGJ5dGVzICAgICAgICAgICovCisgICAgd29yZDMyICBsb0xlbjsgICAgIC8qIGxlbmd0aCBpbiBieXRlcyAgICovCisgICAgd29yZDMyICBoaUxlbjsgICAgIC8qIGxlbmd0aCBpbiBieXRlcyAgICovCisgICAgdm9pZCogICBoZWFwOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9QSUMzMk1aX0hBU0gKKyAgICBoYXNoVXBkQ2FjaGUgY2FjaGU7IC8qIGNhY2hlIGZvciB1cGRhdGVzICovCisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgV0NfQVNZTkNfREVWIGFzeW5jRGV2OworI2VuZGlmIC8qIFdPTEZTU0xfQVNZTkNfQ1JZUFQgKi8KKyNpZmRlZiBXT0xGU1NMX1NNQUxMX1NUQUNLX0NBQ0hFCisgICAgd29yZDMyKiBXOworI2VuZGlmIC8qICFGUkVFU0NBTEVfTFRDX1NIQSAmJiAhU1RNMzJfSEFTSF9TSEEyICovCisjaWZkZWYgV09MRlNTTF9ERVZDUllQVE9fSEFTSAorICAgIFdDX0NSWVBUT0RFViBjdHg7CisgICAgYnl0ZSogIG1zZzsKKyAgICB3b3JkMzIgdXNlZDsKKyAgICB3b3JkMzIgbGVuOworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX0VTUDMyV1JPT00zMl9DUllQVCkgJiYgXAorICAgIWRlZmluZWQoTk9fV09MRlNTTF9FU1AzMldST09NMzJfQ1JZUFRfSEFTSCkKKyAgICBXQ19FU1AzMlNIQSBjdHg7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0NSWVBUT0NFTEwKKyAgICBDUllTX0hBU0hVc2VyQ29udGV4dF90IGN0eDsKKyNlbmRpZgorI2lmZGVmIFdPTEZfQ1JZUFRPX0NCCisgICAgaW50ICAgIGRldklkOworICAgIHZvaWQqICBkZXZDdHg7IC8qIGdlbmVyaWMgY3J5cHRvIGNhbGxiYWNrIGNvbnRleHQgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9IQVNIX0ZMQUdTKSB8fCBkZWZpbmVkKFdPTEZfQ1JZUFRPX0NCKQorICAgIHdvcmQzMiBmbGFnczsgLyogZW51bSB3Y19IYXNoRmxhZ3MgaW4gaGFzaC5oICovCisjZW5kaWYKK307CisKKyNpZm5kZWYgV0NfU0hBMjU2X1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IHdjX1NoYTI1NiB3Y19TaGEyNTY7CisgICAgI2RlZmluZSBXQ19TSEEyNTZfVFlQRV9ERUZJTkVECisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX0ZJUFMgKi8KKworV09MRlNTTF9BUEkgaW50IHdjX0luaXRTaGEyNTYod2NfU2hhMjU2Kik7CitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdFNoYTI1Nl9leCh3Y19TaGEyNTYqLCB2b2lkKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEyNTZVcGRhdGUod2NfU2hhMjU2KiwgY29uc3QgYnl0ZSosIHdvcmQzMik7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhMjU2RmluYWxSYXcod2NfU2hhMjU2KiwgYnl0ZSopOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTI1NkZpbmFsKHdjX1NoYTI1NiosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIHZvaWQgd2NfU2hhMjU2RnJlZSh3Y19TaGEyNTYqKTsKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpCitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhMjU2VHJhbnNmb3JtKHdjX1NoYTI1NiosIGNvbnN0IGJ5dGUqKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgaW50IHdjX1NoYTI1NkdldEhhc2god2NfU2hhMjU2KiwgYnl0ZSopOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTI1NkNvcHkod2NfU2hhMjU2KiBzcmMsIHdjX1NoYTI1NiogZHN0KTsKKworI2lmZGVmIFdPTEZTU0xfUElDMzJNWl9IQVNICitXT0xGU1NMX0FQSSB2b2lkIHdjX1NoYTI1NlNpemVTZXQod2NfU2hhMjU2Kiwgd29yZDMyKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX0hBU0hfRkxBR1MpIHx8IGRlZmluZWQoV09MRl9DUllQVE9fQ0IpCisgICAgV09MRlNTTF9BUEkgaW50IHdjX1NoYTI1NlNldEZsYWdzKHdjX1NoYTI1Niogc2hhMjU2LCB3b3JkMzIgZmxhZ3MpOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19TaGEyNTZHZXRGbGFncyh3Y19TaGEyNTYqIHNoYTI1Niwgd29yZDMyKiBmbGFncyk7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfU0hBMjI0CisvKiBhdm9pZCByZWRlZmluaXRpb24gb2Ygc3RydWN0cyAqLworI2lmICFkZWZpbmVkKEhBVkVfRklQUykgfHwgXAorICAgIChkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiAoSEFWRV9GSVBTX1ZFUlNJT04gPj0gMikpCisKKyNpZiAhZGVmaW5lZChOT19PTERfU0hBX05BTUVTKQorICAgICNkZWZpbmUgU0hBMjI0ICAgICAgICAgICAgIFdDX1NIQTIyNAorI2VuZGlmCisKKyNpZm5kZWYgTk9fT0xEX1dDX05BTUVTCisgICAgI2RlZmluZSBTaGEyMjQgICAgICAgICAgICAgd2NfU2hhMjI0CisgICAgI2RlZmluZSBTSEEyMjRfQkxPQ0tfU0laRSAgV0NfU0hBMjI0X0JMT0NLX1NJWkUKKyAgICAjZGVmaW5lIFNIQTIyNF9ESUdFU1RfU0laRSBXQ19TSEEyMjRfRElHRVNUX1NJWkUKKyAgICAjZGVmaW5lIFNIQTIyNF9QQURfU0laRSAgICBXQ19TSEEyMjRfUEFEX1NJWkUKKyNlbmRpZgorCisvKiBpbiBieXRlcyAqLworZW51bSB7CisgICAgV0NfU0hBMjI0ICAgICAgICAgICAgICA9ICAgV0NfSEFTSF9UWVBFX1NIQTIyNCwKKyAgICBXQ19TSEEyMjRfQkxPQ0tfU0laRSAgID0gICBXQ19TSEEyNTZfQkxPQ0tfU0laRSwKKyAgICBXQ19TSEEyMjRfRElHRVNUX1NJWkUgID0gICAyOCwKKyAgICBXQ19TSEEyMjRfUEFEX1NJWkUgICAgID0gICBXQ19TSEEyNTZfUEFEX1NJWkUKK307CisKKworI2lmbmRlZiBXQ19TSEEyMjRfVFlQRV9ERUZJTkVECisgICAgdHlwZWRlZiBzdHJ1Y3Qgd2NfU2hhMjU2IHdjX1NoYTIyNDsKKyAgICAjZGVmaW5lIFdDX1NIQTIyNF9UWVBFX0RFRklORUQKKyNlbmRpZgorI2VuZGlmIC8qIEhBVkVfRklQUyAqLworCitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdFNoYTIyNCh3Y19TaGEyMjQqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19Jbml0U2hhMjI0X2V4KHdjX1NoYTIyNCosIHZvaWQqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTIyNFVwZGF0ZSh3Y19TaGEyMjQqLCBjb25zdCBieXRlKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEyMjRGaW5hbCh3Y19TaGEyMjQqLCBieXRlKik7CitXT0xGU1NMX0FQSSB2b2lkIHdjX1NoYTIyNEZyZWUod2NfU2hhMjI0Kik7CisKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEyMjRHZXRIYXNoKHdjX1NoYTIyNCosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEyMjRDb3B5KHdjX1NoYTIyNCogc3JjLCB3Y19TaGEyMjQqIGRzdCk7CisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfSEFTSF9GTEFHUykgfHwgZGVmaW5lZChXT0xGX0NSWVBUT19DQikKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfU2hhMjI0U2V0RmxhZ3Mod2NfU2hhMjI0KiBzaGEyMjQsIHdvcmQzMiBmbGFncyk7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX1NoYTIyNEdldEZsYWdzKHdjX1NoYTIyNCogc2hhMjI0LCB3b3JkMzIqIGZsYWdzKTsKKyNlbmRpZgorCisjZW5kaWYgLyogV09MRlNTTF9TSEEyMjQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE5PX1NIQTI1NiAqLworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfU0hBMjU2X0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3NoYTMuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9zaGEzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzNDdiMAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9zaGEzLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qIHNoYTMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworI2lmbmRlZiBXT0xGX0NSWVBUX1NIQTNfSAorI2RlZmluZSBXT0xGX0NSWVBUX1NIQTNfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmZGVmIFdPTEZTU0xfU0hBMworCisjaWZkZWYgSEFWRV9GSVBTCisgICAgLyogZm9yIGZpcHMgQHdjX2ZpcHMgKi8KKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZmlwcy5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2FzeW5jLmg+CisjZW5kaWYKKworLyogaW4gYnl0ZXMgKi8KK2VudW0geworICAgIFdDX1NIQTNfMjI0ICAgICAgICAgICAgICA9IFdDX0hBU0hfVFlQRV9TSEEzXzIyNCwKKyAgICBXQ19TSEEzXzIyNF9ESUdFU1RfU0laRSAgPSAyOCwKKyAgICBXQ19TSEEzXzIyNF9DT1VOVCAgICAgICAgPSAxOCwKKworICAgIFdDX1NIQTNfMjU2ICAgICAgICAgICAgICA9IFdDX0hBU0hfVFlQRV9TSEEzXzI1NiwKKyAgICBXQ19TSEEzXzI1Nl9ESUdFU1RfU0laRSAgPSAzMiwKKyAgICBXQ19TSEEzXzI1Nl9DT1VOVCAgICAgICAgPSAxNywKKworICAgIFdDX1NIQTNfMzg0ICAgICAgICAgICAgICA9IFdDX0hBU0hfVFlQRV9TSEEzXzM4NCwKKyAgICBXQ19TSEEzXzM4NF9ESUdFU1RfU0laRSAgPSA0OCwKKyAgICBXQ19TSEEzXzM4NF9DT1VOVCAgICAgICAgPSAxMywKKworICAgIFdDX1NIQTNfNTEyICAgICAgICAgICAgICA9IFdDX0hBU0hfVFlQRV9TSEEzXzUxMiwKKyAgICBXQ19TSEEzXzUxMl9ESUdFU1RfU0laRSAgPSA2NCwKKyAgICBXQ19TSEEzXzUxMl9DT1VOVCAgICAgICAgPSAgOSwKKworI2lmICFkZWZpbmVkKEhBVkVfU0VMRlRFU1QpIHx8IFwKKyAgICBkZWZpbmVkKEhBVkVfU0VMRlRFU1RfVkVSU0lPTikgJiYgKEhBVkVfU0VMRlRFU1RfVkVSU0lPTiA+PSAyKQorICAgIC8qIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgSE1BQywgbm90IFNIQS0zIGRpcmVjdGx5LgorICAgICAqIFRoZXkgY29tZSBmcm9tIGZyb20gRklQUyBQVUIgMjAyLiAqLworICAgIFdDX1NIQTNfMjI0X0JMT0NLX1NJWkUgPSAxNDQsCisgICAgV0NfU0hBM18yNTZfQkxPQ0tfU0laRSA9IDEzNiwKKyAgICBXQ19TSEEzXzM4NF9CTE9DS19TSVpFID0gMTA0LAorICAgIFdDX1NIQTNfNTEyX0JMT0NLX1NJWkUgPSA3MiwKKyNlbmRpZgorfTsKKworI2lmbmRlZiBOT19PTERfV0NfTkFNRVMKKyAgICAjZGVmaW5lIFNIQTNfMjI0ICAgICAgICAgICAgIFdDX1NIQTNfMjI0CisgICAgI2RlZmluZSBTSEEzXzIyNF9ESUdFU1RfU0laRSBXQ19TSEEzXzIyNF9ESUdFU1RfU0laRQorICAgICNkZWZpbmUgU0hBM18yNTYgICAgICAgICAgICAgV0NfU0hBM18yNTYKKyAgICAjZGVmaW5lIFNIQTNfMjU2X0RJR0VTVF9TSVpFIFdDX1NIQTNfMjU2X0RJR0VTVF9TSVpFCisgICAgI2RlZmluZSBTSEEzXzM4NCAgICAgICAgICAgICBXQ19TSEEzXzM4NAorICAgICNkZWZpbmUgU0hBM18zODRfRElHRVNUX1NJWkUgV0NfU0hBM18zODRfRElHRVNUX1NJWkUKKyAgICAjZGVmaW5lIFNIQTNfNTEyICAgICAgICAgICAgIFdDX1NIQTNfNTEyCisgICAgI2RlZmluZSBTSEEzXzUxMl9ESUdFU1RfU0laRSBXQ19TSEEzXzUxMl9ESUdFU1RfU0laRQorICAgICNkZWZpbmUgU2hhMyB3Y19TaGEzCisjZW5kaWYKKworCisKKyNpZmRlZiBXT0xGU1NMX1hJTElOWF9DUllQVAorICAgICNpbmNsdWRlICJ3b2xmc3NsL3dvbGZjcnlwdC9wb3J0L3hpbGlueC94aWwtc2hhMy5oIgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX0FGQUxHX1hJTElOWF9TSEEzKQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9wb3J0L2FmX2FsZy9hZmFsZ19oYXNoLmg+CisjZWxzZQorCisvKiBTaGEzIGRpZ2VzdCAqLworc3RydWN0IHdjX1NoYTMgeworICAgIC8qIFN0YXRlIGRhdGEgdGhhdCBpcyBwcm9jZXNzZWQgZm9yIGVhY2ggYmxvY2suICovCisgICAgd29yZDY0IHNbMjVdOworICAgIC8qIFVucHJvY2Vzc2VkIG1lc3NhZ2UgZGF0YS4gKi8KKyAgICBieXRlICAgdFsyMDBdOworICAgIC8qIEluZGV4IGludG8gdW5wcm9jZXNzZWQgZGF0YSB0byBwbGFjZSBuZXh0IG1lc3NhZ2UgYnl0ZS4gKi8KKyAgICBieXRlICAgaTsKKworICAgIHZvaWQqICBoZWFwOworCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIFdDX0FTWU5DX0RFViBhc3luY0RldjsKKyNlbmRpZiAvKiBXT0xGU1NMX0FTWU5DX0NSWVBUICovCisjaWYgZGVmaW5lZChXT0xGU1NMX0hBU0hfRkxBR1MpIHx8IGRlZmluZWQoV09MRl9DUllQVE9fQ0IpCisgICAgd29yZDMyIGZsYWdzOyAvKiBlbnVtIHdjX0hhc2hGbGFncyBpbiBoYXNoLmggKi8KKyNlbmRpZgorfTsKKworI2lmbmRlZiBXQ19TSEEzX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IHdjX1NoYTMgd2NfU2hhMzsKKyAgICAjZGVmaW5lIFdDX1NIQTNfVFlQRV9ERUZJTkVECisjZW5kaWYKKworI2VuZGlmCisKK3R5cGVkZWYgd2NfU2hhMyB3Y19TaGFrZTsKKworCitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdFNoYTNfMjI0KHdjX1NoYTMqLCB2b2lkKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEzXzIyNF9VcGRhdGUod2NfU2hhMyosIGNvbnN0IGJ5dGUqLCB3b3JkMzIpOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTNfMjI0X0ZpbmFsKHdjX1NoYTMqLCBieXRlKik7CitXT0xGU1NMX0FQSSB2b2lkIHdjX1NoYTNfMjI0X0ZyZWUod2NfU2hhMyopOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTNfMjI0X0dldEhhc2god2NfU2hhMyosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEzXzIyNF9Db3B5KHdjX1NoYTMqIHNyYywgd2NfU2hhMyogZHN0KTsKKworV09MRlNTTF9BUEkgaW50IHdjX0luaXRTaGEzXzI1Nih3Y19TaGEzKiwgdm9pZCosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhM18yNTZfVXBkYXRlKHdjX1NoYTMqLCBjb25zdCBieXRlKiwgd29yZDMyKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEzXzI1Nl9GaW5hbCh3Y19TaGEzKiwgYnl0ZSopOworV09MRlNTTF9BUEkgdm9pZCB3Y19TaGEzXzI1Nl9GcmVlKHdjX1NoYTMqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEzXzI1Nl9HZXRIYXNoKHdjX1NoYTMqLCBieXRlKik7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhM18yNTZfQ29weSh3Y19TaGEzKiBzcmMsIHdjX1NoYTMqIGRzdCk7CisKK1dPTEZTU0xfQVBJIGludCB3Y19Jbml0U2hhM18zODQod2NfU2hhMyosIHZvaWQqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTNfMzg0X1VwZGF0ZSh3Y19TaGEzKiwgY29uc3QgYnl0ZSosIHdvcmQzMik7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhM18zODRfRmluYWwod2NfU2hhMyosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIHZvaWQgd2NfU2hhM18zODRfRnJlZSh3Y19TaGEzKik7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhM18zODRfR2V0SGFzaCh3Y19TaGEzKiwgYnl0ZSopOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTNfMzg0X0NvcHkod2NfU2hhMyogc3JjLCB3Y19TaGEzKiBkc3QpOworCitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdFNoYTNfNTEyKHdjX1NoYTMqLCB2b2lkKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEzXzUxMl9VcGRhdGUod2NfU2hhMyosIGNvbnN0IGJ5dGUqLCB3b3JkMzIpOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTNfNTEyX0ZpbmFsKHdjX1NoYTMqLCBieXRlKik7CitXT0xGU1NMX0FQSSB2b2lkIHdjX1NoYTNfNTEyX0ZyZWUod2NfU2hhMyopOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTNfNTEyX0dldEhhc2god2NfU2hhMyosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEzXzUxMl9Db3B5KHdjX1NoYTMqIHNyYywgd2NfU2hhMyogZHN0KTsKKworV09MRlNTTF9BUEkgaW50IHdjX0luaXRTaGFrZTI1Nih3Y19TaGFrZSosIHZvaWQqLCBpbnQpOworV09MRlNTTF9BUEkgaW50IHdjX1NoYWtlMjU2X1VwZGF0ZSh3Y19TaGFrZSosIGNvbnN0IGJ5dGUqLCB3b3JkMzIpOworV09MRlNTTF9BUEkgaW50IHdjX1NoYWtlMjU2X0ZpbmFsKHdjX1NoYWtlKiwgYnl0ZSosIHdvcmQzMik7CitXT0xGU1NMX0FQSSB2b2lkIHdjX1NoYWtlMjU2X0ZyZWUod2NfU2hha2UqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGFrZTI1Nl9Db3B5KHdjX1NoYWtlKiBzcmMsIHdjX1NoYTMqIGRzdCk7CisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfSEFTSF9GTEFHUykgfHwgZGVmaW5lZChXT0xGX0NSWVBUT19DQikKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfU2hhM19TZXRGbGFncyh3Y19TaGEzKiBzaGEzLCB3b3JkMzIgZmxhZ3MpOworICAgIFdPTEZTU0xfQVBJIGludCB3Y19TaGEzX0dldEZsYWdzKHdjX1NoYTMqIHNoYTMsIHdvcmQzMiogZmxhZ3MpOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX1NIQTMgKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX1NIQTNfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvc2hhNTEyLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvc2hhNTEyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkYTUyZQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9zaGE1MTIuaApAQCAtMCwwICsxLDI1NiBAQAorLyogc2hhNTEyLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL3dvbGZjcnlwdC9zaGE1MTIuaAorKi8KKworCisjaWZuZGVmIFdPTEZfQ1JZUFRfU0hBNTEyX0gKKyNkZWZpbmUgV09MRl9DUllQVF9TSEE1MTJfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaD4KKworI2lmIGRlZmluZWQoV09MRlNTTF9TSEE1MTIpIHx8IGRlZmluZWQoV09MRlNTTF9TSEEzODQpCisKKworI2lmIGRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgJiYgKEhBVkVfRklQU19WRVJTSU9OID49IDIpCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ZpcHMuaD4KKyNlbmRpZiAvKiBIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyICovCisKKyNpZiBkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorCSghZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgfHwgKEhBVkVfRklQU19WRVJTSU9OIDwgMikpCisgICAgI2lmZGVmIFdPTEZTU0xfU0hBNTEyCisgICAgICAgICNkZWZpbmUgd2NfU2hhNTEyICAgICAgICAgICAgIFNoYTUxMgorICAgICAgICAjZGVmaW5lIFdDX1NIQTUxMiAgICAgICAgICAgICBTSEE1MTIKKyAgICAgICAgI2RlZmluZSBXQ19TSEE1MTJfQkxPQ0tfU0laRSAgU0hBNTEyX0JMT0NLX1NJWkUKKyAgICAgICAgI2RlZmluZSBXQ19TSEE1MTJfRElHRVNUX1NJWkUgU0hBNTEyX0RJR0VTVF9TSVpFCisgICAgICAgICNkZWZpbmUgV0NfU0hBNTEyX1BBRF9TSVpFICAgIFNIQTUxMl9QQURfU0laRQorICAgICNlbmRpZiAvKiBXT0xGU1NMX1NIQTUxMiAqLworICAgICNpZmRlZiBXT0xGU1NMX1NIQTM4NAorICAgICAgICAjZGVmaW5lIHdjX1NoYTM4NCAgICAgICAgICAgICBTaGEzODQKKyAgICAgICAgI2RlZmluZSBXQ19TSEEzODQgICAgICAgICAgICAgU0hBMzg0CisgICAgICAgICNkZWZpbmUgV0NfU0hBMzg0X0JMT0NLX1NJWkUgIFNIQTM4NF9CTE9DS19TSVpFCisgICAgICAgICNkZWZpbmUgV0NfU0hBMzg0X0RJR0VTVF9TSVpFIFNIQTM4NF9ESUdFU1RfU0laRQorICAgICAgICAjZGVmaW5lIFdDX1NIQTM4NF9QQURfU0laRSAgICBTSEEzODRfUEFEX1NJWkUKKyAgICAjZW5kaWYgLyogV09MRlNTTF9TSEEzODQgKi8KKworICAgICNkZWZpbmUgQ1lBU1NMX1NIQTUxMgorICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfU0hBMzg0KQorICAgICAgICAjZGVmaW5lIENZQVNTTF9TSEEzODQKKyAgICAjZW5kaWYKKwkvKiBmb3IgZmlwcyBAd2NfZmlwcyAqLworICAgICNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3NoYTUxMi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGF2b2lkIHJlZGVmaW5pdGlvbiBvZiBzdHJ1Y3RzICovCisjaWYgIWRlZmluZWQoSEFWRV9GSVBTKSB8fCBcCisgICAgKGRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pICYmIChIQVZFX0ZJUFNfVkVSU0lPTiA+PSAyKSkKKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvYXN5bmMuaD4KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfRVNQMzJXUk9PTTMyX0NSWVBUCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvRXNwcmVzc2lmL2VzcDMyLWNyeXB0Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfU0lMQUJTX1NFX0FDQ0VMKQorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9wb3J0L3NpbGFicy9zaWxhYnNfaGFzaC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX1BTT0M2X0NSWVBUTykKKyAgICAjaW5jbHVkZSAiY3lfY3J5cHRvX2NvcmVfc2hhLmgiCisgICAgI2luY2x1ZGUgImN5X2RldmljZV9oZWFkZXJzLmgiCisgICAgI2luY2x1ZGUgImN5X2NyeXB0b19jb21tb24uaCIKKyAgICAjaW5jbHVkZSAiY3lfY3J5cHRvX2NvcmUuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIFNIQTUxMl9OT0lOTElORSBfX2RlY2xzcGVjKG5vaW5saW5lKQorI2VsaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSB8fCBkZWZpbmVkKF9fR05VQ19fKQorICAgICNkZWZpbmUgU0hBNTEyX05PSU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKyNlbHNlCisgICAgI2RlZmluZSBTSEE1MTJfTk9JTkxJTkUKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9TSEE1MTIKKworI2lmICFkZWZpbmVkKE5PX09MRF9TSEFfTkFNRVMpCisgICAgI2RlZmluZSBTSEE1MTIgICAgICAgICAgICAgV0NfU0hBNTEyCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5PX09MRF9XQ19OQU1FUykKKyAgICAjZGVmaW5lIFNoYTUxMiAgICAgICAgICAgICB3Y19TaGE1MTIKKyAgICAjZGVmaW5lIFNIQTUxMl9CTE9DS19TSVpFICBXQ19TSEE1MTJfQkxPQ0tfU0laRQorICAgICNkZWZpbmUgU0hBNTEyX0RJR0VTVF9TSVpFIFdDX1NIQTUxMl9ESUdFU1RfU0laRQorICAgICNkZWZpbmUgU0hBNTEyX1BBRF9TSVpFICAgIFdDX1NIQTUxMl9QQURfU0laRQorI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX1NIQTUxMiAqLworCisvKiBpbiBieXRlcyAqLworZW51bSB7CisjaWZkZWYgV09MRlNTTF9TSEE1MTIKKyAgICBXQ19TSEE1MTIgICAgICAgICAgICAgID0gICBXQ19IQVNIX1RZUEVfU0hBNTEyLAorI2VuZGlmCisgICAgV0NfU0hBNTEyX0JMT0NLX1NJWkUgICA9IDEyOCwKKyAgICBXQ19TSEE1MTJfRElHRVNUX1NJWkUgID0gIDY0LAorICAgIFdDX1NIQTUxMl9QQURfU0laRSAgICAgPSAxMTIKK307CisKKworI2lmIGRlZmluZWQoV09MRlNTTF9JTVg2X0NBQU0pICYmICFkZWZpbmVkKFdPTEZTU0xfUU5YX0NBQU0pCisgICAgI2luY2x1ZGUgIndvbGZzc2wvd29sZmNyeXB0L3BvcnQvY2FhbS93b2xmY2FhbV9zaGEuaCIKKyNlbHNlCisvKiB3Y19TaGE1MTIgZGlnZXN0ICovCitzdHJ1Y3Qgd2NfU2hhNTEyIHsKKyNpZmRlZiBXT0xGU1NMX1BTT0M2X0NSWVBUTworICAgIGN5X3N0Y19jcnlwdG9fc2hhX3N0YXRlX3QgaGFzaF9zdGF0ZTsKKyAgICBjeV9lbl9jcnlwdG9fc2hhX21vZGVfdCBzaGFfbW9kZTsKKyAgICBjeV9zdGNfY3J5cHRvX3YyX3NoYTUxMl9idWZmZXJzX3Qgc2hhX2J1ZmZlcnM7CisjZWxzZQorICAgIHdvcmQ2NCAgZGlnZXN0W1dDX1NIQTUxMl9ESUdFU1RfU0laRSAvIHNpemVvZih3b3JkNjQpXTsKKyAgICB3b3JkNjQgIGJ1ZmZlcltXQ19TSEE1MTJfQkxPQ0tfU0laRSAgLyBzaXplb2Yod29yZDY0KV07CisgICAgd29yZDMyICBidWZmTGVuOyAgIC8qIGluIGJ5dGVzICAgICAgICAgICovCisgICAgd29yZDY0ICBsb0xlbjsgICAgIC8qIGxlbmd0aCBpbiBieXRlcyAgICovCisgICAgd29yZDY0ICBoaUxlbjsgICAgIC8qIGxlbmd0aCBpbiBieXRlcyAgICovCisgICAgdm9pZCogICBoZWFwOworI2lmZGVmIFVTRV9JTlRFTF9TUEVFRFVQCisgICAgY29uc3QgYnl0ZSogZGF0YTsKKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICBXQ19BU1lOQ19ERVYgYXN5bmNEZXY7CisjZW5kaWYgLyogV09MRlNTTF9BU1lOQ19DUllQVCAqLworI2lmZGVmIFdPTEZTU0xfU01BTExfU1RBQ0tfQ0FDSEUKKyAgICB3b3JkNjQqIFc7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfRVNQMzJXUk9PTTMyX0NSWVBUKSAmJiBcCisgICAhZGVmaW5lZChOT19XT0xGU1NMX0VTUDMyV1JPT00zMl9DUllQVF9IQVNIKQorICAgIFdDX0VTUDMyU0hBIGN0eDsKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9TSUxBQlNfU0VfQUNDRUwpCisgIHdjX3NpbGFic19zaGFfdCBzaWxhYnNDdHg7CisjZW5kaWYKKyNpZmRlZiBXT0xGX0NSWVBUT19DQgorICAgIGludCAgICBkZXZJZDsKKyAgICB2b2lkKiAgZGV2Q3R4OyAvKiBnZW5lcmljIGNyeXB0byBjYWxsYmFjayBjb250ZXh0ICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfSEFTSF9GTEFHUykgfHwgZGVmaW5lZChXT0xGX0NSWVBUT19DQikKKyAgICB3b3JkMzIgZmxhZ3M7IC8qIGVudW0gd2NfSGFzaEZsYWdzIGluIGhhc2guaCAqLworI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9QU09DNl9DUllQVE8gKi8KK307CisKKyNpZm5kZWYgV0NfU0hBNTEyX1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IHdjX1NoYTUxMiB3Y19TaGE1MTI7CisgICAgI2RlZmluZSBXQ19TSEE1MTJfVFlQRV9ERUZJTkVECisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9GSVBTICovCisKKyNpZmRlZiBXT0xGU1NMX0FSTUFTTQorV09MRlNTTF9MT0NBTCB2b2lkIFRyYW5zZm9ybV9TaGE1MTJfTGVuKHdjX1NoYTUxMiogc2hhNTEyLCBjb25zdCBieXRlKiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQzMiBsZW4pOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1NIQTUxMgorCisKK1dPTEZTU0xfQVBJIGludCB3Y19Jbml0U2hhNTEyKHdjX1NoYTUxMiopOworV09MRlNTTF9BUEkgaW50IHdjX0luaXRTaGE1MTJfZXgod2NfU2hhNTEyKiwgdm9pZCosIGludCk7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhNTEyVXBkYXRlKHdjX1NoYTUxMiosIGNvbnN0IGJ5dGUqLCB3b3JkMzIpOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTUxMkZpbmFsUmF3KHdjX1NoYTUxMiosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGE1MTJGaW5hbCh3Y19TaGE1MTIqLCBieXRlKik7CitXT0xGU1NMX0FQSSB2b2lkIHdjX1NoYTUxMkZyZWUod2NfU2hhNTEyKik7CisKK1dPTEZTU0xfQVBJIGludCB3Y19TaGE1MTJHZXRIYXNoKHdjX1NoYTUxMiosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGE1MTJDb3B5KHdjX1NoYTUxMiogc3JjLCB3Y19TaGE1MTIqIGRzdCk7CisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfSEFTSF9GTEFHUykgfHwgZGVmaW5lZChXT0xGX0NSWVBUT19DQikKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfU2hhNTEyU2V0RmxhZ3Mod2NfU2hhNTEyKiBzaGE1MTIsIHdvcmQzMiBmbGFncyk7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX1NoYTUxMkdldEZsYWdzKHdjX1NoYTUxMiogc2hhNTEyLCB3b3JkMzIqIGZsYWdzKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKQorV09MRlNTTF9BUEkgaW50IHdjX1NoYTUxMlRyYW5zZm9ybSh3Y19TaGE1MTIqIHNoYSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSk7CisjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX1NIQTUxMiAqLworCisjaWYgZGVmaW5lZChXT0xGU1NMX1NIQTM4NCkKKworLyogYXZvaWQgcmVkZWZpbml0aW9uIG9mIHN0cnVjdHMgKi8KKyNpZiAhZGVmaW5lZChIQVZFX0ZJUFMpIHx8IFwKKyAgICAoZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgJiYgKEhBVkVfRklQU19WRVJTSU9OID49IDIpKQorCisjaWYgIWRlZmluZWQoTk9fT0xEX1NIQV9OQU1FUykKKyAgICAjZGVmaW5lIFNIQTM4NCAgICAgICAgICAgICBXQ19TSEEzODQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTk9fT0xEX1dDX05BTUVTKQorICAgICNkZWZpbmUgU2hhMzg0ICAgICAgICAgICAgIHdjX1NoYTM4NAorICAgICNkZWZpbmUgU0hBMzg0X0JMT0NLX1NJWkUgIFdDX1NIQTM4NF9CTE9DS19TSVpFCisgICAgI2RlZmluZSBTSEEzODRfRElHRVNUX1NJWkUgV0NfU0hBMzg0X0RJR0VTVF9TSVpFCisgICAgI2RlZmluZSBTSEEzODRfUEFEX1NJWkUgICAgV0NfU0hBMzg0X1BBRF9TSVpFCisjZW5kaWYKKworLyogaW4gYnl0ZXMgKi8KK2VudW0geworICAgIFdDX1NIQTM4NCAgICAgICAgICAgICAgPSAgIFdDX0hBU0hfVFlQRV9TSEEzODQsCisgICAgV0NfU0hBMzg0X0JMT0NLX1NJWkUgICA9ICAgV0NfU0hBNTEyX0JMT0NLX1NJWkUsCisgICAgV0NfU0hBMzg0X0RJR0VTVF9TSVpFICA9ICAgNDgsCisgICAgV0NfU0hBMzg0X1BBRF9TSVpFICAgICA9ICAgV0NfU0hBNTEyX1BBRF9TSVpFCit9OworCisKKyNpZm5kZWYgV0NfU0hBMzg0X1RZUEVfREVGSU5FRAorICAgIHR5cGVkZWYgc3RydWN0IHdjX1NoYTUxMiB3Y19TaGEzODQ7CisgICAgI2RlZmluZSBXQ19TSEEzODRfVFlQRV9ERUZJTkVECisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0ZJUFMgKi8KKworV09MRlNTTF9BUEkgaW50IHdjX0luaXRTaGEzODQod2NfU2hhMzg0Kik7CitXT0xGU1NMX0FQSSBpbnQgd2NfSW5pdFNoYTM4NF9leCh3Y19TaGEzODQqLCB2b2lkKiwgaW50KTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaGEzODRVcGRhdGUod2NfU2hhMzg0KiwgY29uc3QgYnl0ZSosIHdvcmQzMik7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2hhMzg0RmluYWxSYXcod2NfU2hhMzg0KiwgYnl0ZSopOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTM4NEZpbmFsKHdjX1NoYTM4NCosIGJ5dGUqKTsKK1dPTEZTU0xfQVBJIHZvaWQgd2NfU2hhMzg0RnJlZSh3Y19TaGEzODQqKTsKKworV09MRlNTTF9BUEkgaW50IHdjX1NoYTM4NEdldEhhc2god2NfU2hhMzg0KiwgYnl0ZSopOworV09MRlNTTF9BUEkgaW50IHdjX1NoYTM4NENvcHkod2NfU2hhMzg0KiBzcmMsIHdjX1NoYTM4NCogZHN0KTsKKworI2lmIGRlZmluZWQoV09MRlNTTF9IQVNIX0ZMQUdTKSB8fCBkZWZpbmVkKFdPTEZfQ1JZUFRPX0NCKQorICAgIFdPTEZTU0xfQVBJIGludCB3Y19TaGEzODRTZXRGbGFncyh3Y19TaGEzODQqIHNoYTM4NCwgd29yZDMyIGZsYWdzKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfU2hhMzg0R2V0RmxhZ3Mod2NfU2hhMzg0KiBzaGEzODQsIHdvcmQzMiogZmxhZ3MpOworI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGU1NMX1NIQTM4NCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogV09MRlNTTF9TSEE1MTIgfHwgV09MRlNTTF9TSEEzODQgKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX1NIQTUxMl9IICovCisKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9zaWduYXR1cmUuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9zaWduYXR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2M0MTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3NpZ25hdHVyZS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qIHNpZ25hdHVyZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvc2lnbmF0dXJlLmgKKyovCisKKworI2lmbmRlZiBXT0xGX0NSWVBUX1NJR05BVFVSRV9ICisjZGVmaW5lIFdPTEZfQ1JZUFRfU0lHTkFUVVJFX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaGFzaC5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3JhbmRvbS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCitlbnVtIHdjX1NpZ25hdHVyZVR5cGUgeworICAgIFdDX1NJR05BVFVSRV9UWVBFX05PTkUgPSAwLAorICAgIFdDX1NJR05BVFVSRV9UWVBFX0VDQyA9IDEsCisgICAgV0NfU0lHTkFUVVJFX1RZUEVfUlNBID0gMiwKKyAgICBXQ19TSUdOQVRVUkVfVFlQRV9SU0FfV19FTkMgPSAzLCAvKiBBZGRzIERFUiBoZWFkZXIgdmlhIHdjX0VuY29kZVNpZ25hdHVyZSAqLworfTsKKworV09MRlNTTF9BUEkgaW50IHdjX1NpZ25hdHVyZUdldFNpemUoZW51bSB3Y19TaWduYXR1cmVUeXBlIHNpZ190eXBlLAorICAgIGNvbnN0IHZvaWQqIGtleSwgd29yZDMyIGtleV9sZW4pOworCitXT0xGU1NMX0FQSSBpbnQgd2NfU2lnbmF0dXJlVmVyaWZ5SGFzaCgKKyAgICBlbnVtIHdjX0hhc2hUeXBlIGhhc2hfdHlwZSwgZW51bSB3Y19TaWduYXR1cmVUeXBlIHNpZ190eXBlLAorICAgIGNvbnN0IGJ5dGUqIGhhc2hfZGF0YSwgd29yZDMyIGhhc2hfbGVuLAorICAgIGNvbnN0IGJ5dGUqIHNpZywgd29yZDMyIHNpZ19sZW4sCisgICAgY29uc3Qgdm9pZCoga2V5LCB3b3JkMzIga2V5X2xlbik7CisKK1dPTEZTU0xfQVBJIGludCB3Y19TaWduYXR1cmVWZXJpZnkoCisgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoX3R5cGUsIGVudW0gd2NfU2lnbmF0dXJlVHlwZSBzaWdfdHlwZSwKKyAgICBjb25zdCBieXRlKiBkYXRhLCB3b3JkMzIgZGF0YV9sZW4sCisgICAgY29uc3QgYnl0ZSogc2lnLCB3b3JkMzIgc2lnX2xlbiwKKyAgICBjb25zdCB2b2lkKiBrZXksIHdvcmQzMiBrZXlfbGVuKTsKKworV09MRlNTTF9BUEkgaW50IHdjX1NpZ25hdHVyZUdlbmVyYXRlSGFzaCgKKyAgICBlbnVtIHdjX0hhc2hUeXBlIGhhc2hfdHlwZSwgZW51bSB3Y19TaWduYXR1cmVUeXBlIHNpZ190eXBlLAorICAgIGNvbnN0IGJ5dGUqIGhhc2hfZGF0YSwgd29yZDMyIGhhc2hfbGVuLAorICAgIGJ5dGUqIHNpZywgd29yZDMyICpzaWdfbGVuLAorICAgIGNvbnN0IHZvaWQqIGtleSwgd29yZDMyIGtleV9sZW4sIFdDX1JORyogcm5nKTsKK1dPTEZTU0xfQVBJIGludCB3Y19TaWduYXR1cmVHZW5lcmF0ZUhhc2hfZXgoCisgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoX3R5cGUsIGVudW0gd2NfU2lnbmF0dXJlVHlwZSBzaWdfdHlwZSwKKyAgICBjb25zdCBieXRlKiBoYXNoX2RhdGEsIHdvcmQzMiBoYXNoX2xlbiwKKyAgICBieXRlKiBzaWcsIHdvcmQzMiAqc2lnX2xlbiwKKyAgICBjb25zdCB2b2lkKiBrZXksIHdvcmQzMiBrZXlfbGVuLCBXQ19STkcqIHJuZywgaW50IHZlcmlmeSk7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2lnbmF0dXJlR2VuZXJhdGUoCisgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoX3R5cGUsIGVudW0gd2NfU2lnbmF0dXJlVHlwZSBzaWdfdHlwZSwKKyAgICBjb25zdCBieXRlKiBkYXRhLCB3b3JkMzIgZGF0YV9sZW4sCisgICAgYnl0ZSogc2lnLCB3b3JkMzIgKnNpZ19sZW4sCisgICAgY29uc3Qgdm9pZCoga2V5LCB3b3JkMzIga2V5X2xlbiwKKyAgICBXQ19STkcqIHJuZyk7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2lnbmF0dXJlR2VuZXJhdGVfZXgoCisgICAgZW51bSB3Y19IYXNoVHlwZSBoYXNoX3R5cGUsIGVudW0gd2NfU2lnbmF0dXJlVHlwZSBzaWdfdHlwZSwKKyAgICBjb25zdCBieXRlKiBkYXRhLCB3b3JkMzIgZGF0YV9sZW4sCisgICAgYnl0ZSogc2lnLCB3b3JkMzIgKnNpZ19sZW4sCisgICAgY29uc3Qgdm9pZCoga2V5LCB3b3JkMzIga2V5X2xlbiwKKyAgICBXQ19STkcqIHJuZywgaW50IHZlcmlmeSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGX0NSWVBUX1NJR05BVFVSRV9IICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvc3JwLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvc3JwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmMWY0YQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC9zcnAuaApAQCAtMCwwICsxLDMxMSBAQAorLyogc3JwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiEKKyAgICBcZmlsZSB3b2xmc3NsL3dvbGZjcnlwdC9zcnAuaAorKi8KKworI2lmZGVmIFdPTEZDUllQVF9IQVZFX1NSUAorCisjaWZuZGVmIFdPTEZDUllQVF9TUlBfSAorI2RlZmluZSBXT0xGQ1JZUFRfU1JQX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2hhLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2hhMjU2Lmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2hhNTEyLmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvaW50ZWdlci5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBTZWxlY3QgdGhlIGxhcmdlc3QgYXZhaWxhYmxlIGhhc2ggZm9yIHRoZSBidWZmZXIgc2l6ZS4gKi8KKyNpZiBkZWZpbmVkKFdPTEZTU0xfU0hBNTEyKQorICAgICNkZWZpbmUgU1JQX01BWF9ESUdFU1RfU0laRSBXQ19TSEE1MTJfRElHRVNUX1NJWkUKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9TSEEzODQpCisgICAgI2RlZmluZSBTUlBfTUFYX0RJR0VTVF9TSVpFIFdDX1NIQTM4NF9ESUdFU1RfU0laRQorI2VsaWYgIWRlZmluZWQoTk9fU0hBMjU2KQorICAgICNkZWZpbmUgU1JQX01BWF9ESUdFU1RfU0laRSBXQ19TSEEyNTZfRElHRVNUX1NJWkUKKyNlbGlmICFkZWZpbmVkKE5PX1NIQSkKKyAgICAjZGVmaW5lIFNSUF9NQVhfRElHRVNUX1NJWkUgV0NfU0hBX0RJR0VTVF9TSVpFCisjZWxzZQorICAgICNlcnJvciAiWW91IGhhdmUgdG8gaGF2ZSBzb21lIGtpbmQgb2YgU0hBIGhhc2ggaWYgeW91IHdhbnQgdG8gdXNlIFNSUC4iCisjZW5kaWYKKworLyogU2V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBiaXRzIGFjY2VwdGFibGUgaW4gYW4gU1JQIG1vZHVsdXMgKi8KKyNkZWZpbmUgU1JQX01PRFVMVVNfTUlOX0JJVFMgNTEyCisKKy8qIFNldCB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyBhY2NlcHRhYmxlIGZvciBwcml2YXRlIGtleXMgKFJGQyA1MDU0KSAqLworI2RlZmluZSBTUlBfUFJJVkFURV9LRVlfTUlOX0JJVFMgMjU2CisKKy8qIHNhbHQgc2l6ZSBmb3IgU1JQIHBhc3N3b3JkICovCisjZGVmaW5lIFNSUF9TQUxUX1NJWkUgIDE2CisKKy8qKgorICogU1JQIHNpZGUsIGNsaWVudCBvciBzZXJ2ZXIuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgU1JQX0NMSUVOVF9TSURFICA9IDAsCisgICAgU1JQX1NFUlZFUl9TSURFICA9IDEsCit9IFNycFNpZGU7CisKKy8qKgorICogU1JQIGhhc2ggdHlwZSwgU0hBWzF8MjU2fDM4NHw1MTJdLgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBTUlBfVFlQRV9TSEEgICAgPSAxLAorICAgICAgICBTUlBfVFlQRV9TSEEyNTYgPSAyLAorICAgICAgICBTUlBfVFlQRV9TSEEzODQgPSAzLAorICAgICAgICBTUlBfVFlQRV9TSEE1MTIgPSA0LAorfSBTcnBUeXBlOworCisKKy8qKgorICogU1JQIGhhc2ggc3RydWN0LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgYnl0ZSB0eXBlOworICAgIHVuaW9uIHsKKyAgICAgICAgI2lmbmRlZiBOT19TSEEKKyAgICAgICAgICAgIHdjX1NoYSBzaGE7CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIE5PX1NIQTI1NgorICAgICAgICAgICAgd2NfU2hhMjU2IHNoYTI1NjsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZmRlZiBXT0xGU1NMX1NIQTM4NAorICAgICAgICAgICAgd2NfU2hhMzg0IHNoYTM4NDsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZmRlZiBXT0xGU1NMX1NIQTUxMgorICAgICAgICAgICAgd2NfU2hhNTEyIHNoYTUxMjsKKyAgICAgICAgI2VuZGlmCisgICAgfSBkYXRhOworfSBTcnBIYXNoOworCit0eXBlZGVmIHN0cnVjdCBTcnAgeworICAgIFNycFNpZGUgc2lkZTsgICAgICAgICAgICAgICAgICAgLyoqPCBDbGllbnQgb3IgU2VydmVyLCBAc2VlIFNycFNpZGUuICAgICAgKi8KKyAgICBTcnBUeXBlIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qKjwgSGFzaCB0eXBlLCBAc2VlIFNycFR5cGUuICAgICAgICAgICAgICovCisgICAgYnl0ZSogICB1c2VyOyAgICAgICAgICAgICAgICAgICAvKio8IFVzZXJuYW1lLCBsb2dpbi4gICAgICAgICAgICAgICAgICAgICAqLworICAgIHdvcmQzMiAgdXNlclN6OyAgICAgICAgICAgICAgICAgLyoqPCBVc2VybmFtZSBsZW5ndGguICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBieXRlKiAgIHNhbHQ7ICAgICAgICAgICAgICAgICAgIC8qKjwgU21hbGwgc2FsdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgd29yZDMyICBzYWx0U3o7ICAgICAgICAgICAgICAgICAvKio8IFNhbHQgbGVuZ3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIG1wX2ludCAgTjsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNb2R1bHVzLiBOID0gMnErMSwgW3EsIE5dIGFyZSBwcmltZXMuKi8KKyAgICBtcF9pbnQgIGc7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgR2VuZXJhdG9yLiBBIGdlbmVyYXRvciBtb2R1bG8gTi4gICAgICovCisgICAgYnl0ZSAgICBrW1NSUF9NQVhfRElHRVNUX1NJWkVdOyAvKio8IE11bHRpcGxpZXIgcGFyYW1ldGVyLiBrID0gSChOLCBnKSAgICovCisgICAgbXBfaW50ICBhdXRoOyAgICAgICAgICAgICAgICAgICAvKio8IENsaWVudDogeCA9IEgoc2FsdCArIEgodXNlcjpwc3dkKSkgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXJ2ZXI6IHYgPSBnIF4geCAlIE4gICAgICAgICAgICAgICAgKi8KKyAgICBtcF9pbnQgIHByaXY7ICAgICAgICAgICAgICAgICAgIC8qKjwgUHJpdmF0ZSBlcGhlbWVyYWwgdmFsdWUuICAgICAgICAgICAgICovCisgICAgU3JwSGFzaCBjbGllbnRfcHJvb2Y7ICAgICAgICAgICAvKio8IENsaWVudCBwcm9vZi4gU2VudCB0byB0aGUgU2VydmVyLiAgICAqLworICAgIFNycEhhc2ggc2VydmVyX3Byb29mOyAgICAgICAgICAgLyoqPCBTZXJ2ZXIgcHJvb2YuIFNlbnQgdG8gdGhlIENsaWVudC4gICAgKi8KKyAgICBieXRlKiAgIGtleTsgICAgICAgICAgICAgICAgICAgIC8qKjwgU2Vzc2lvbiBrZXkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgd29yZDMyICBrZXlTejsgICAgICAgICAgICAgICAgICAvKio8IFNlc3Npb24ga2V5IGxlbmd0aC4gICAgICAgICAgICAgICAgICAqLworICAgIGludCAoKmtleUdlbkZ1bmNfY2IpIChzdHJ1Y3QgU3JwKiBzcnAsIGJ5dGUqIHNlY3JldCwgd29yZDMyIHNpemUpOworICAgICAgICAvKio8IEZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBzZXNzaW9uIGtleS4gICAgICAgICAgICAgKi8KKyAgICAgICAgLyoqPCBJdCBNVVNUIHVzZSBYTUFMTE9DIHdpdGggdHlwZSBEWU5BTUlDX1RZUEVfU1JQIHRvIGFsbG9jYXRlIHRoZSAgICovCisgICAgICAgIC8qKjwga2V5IGJ1ZmZlciBmb3IgdGhpcyBzdHJ1Y3R1cmUgYW5kIHNldCBrZXlTeiB0byB0aGUgYnVmZmVyIHNpemUuICAqLworICAgICAgICAvKio8IFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBhIG1vZGlmaWVkICAgKi8KKyAgICAgICAgLyoqPCB2ZXJzaW9uIG9mIHRfbWdmMSB0aGF0IHVzZXMgdGhlIHByb3BlciBoYXNoIGZ1bmN0aW9uIGFjY29yZGluZyAgICovCisgICAgICAgIC8qKjwgdG8gc3JwLT50eXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHZvaWQqICAgaGVhcDsgICAgICAgICAgICAgICAgICAgLyoqPCBoZWFwIGhpbnQgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgKi8KK30gU3JwOworCisvKioKKyAqIEluaXRpYWxpemVzIHRoZSBTcnAgc3RydWN0IGZvciB1c2FnZS4KKyAqCisgKiBAcGFyYW1bb3V0XSBzcnAgICB0aGUgU3JwIHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXplZC4KKyAqIEBwYXJhbVtpbl0gIHR5cGUgIHRoZSBoYXNoIHR5cGUgdG8gYmUgdXNlZC4KKyAqIEBwYXJhbVtpbl0gIHNpZGUgIHRoZSBzaWRlIG9mIHRoZSBjb21tdW5pY2F0aW9uLgorICoKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCB7QGxpdGVyYWwgPH0gMCBvbiBlcnJvci4gQHNlZSBlcnJvci1jcnlwdC5oCisgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19TcnBJbml0KFNycCogc3JwLCBTcnBUeXBlIHR5cGUsIFNycFNpZGUgc2lkZSk7CisKKy8qKgorICogUmVsZWFzZXMgdGhlIFNycCBzdHJ1Y3QgcmVzb3VyY2VzIGFmdGVyIHVzYWdlLgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHNycCAgICB0aGUgU3JwIHN0cnVjdHVyZSB0byBiZSB0ZXJtaW5hdGVkLgorICovCitXT0xGU1NMX0FQSSB2b2lkIHdjX1NycFRlcm0oU3JwKiBzcnApOworCisvKioKKyAqIFNldHMgdGhlIHVzZXJuYW1lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gTVVTVCBiZSBjYWxsZWQgYWZ0ZXIgd2NfU3JwSW5pdC4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSBzcnAgICAgICAgdGhlIFNycCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICAgICB1c2VybmFtZSAgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSB1c2VybmFtZS4KKyAqIEBwYXJhbVtpbl0gICAgIHNpemUgICAgICB0aGUgdXNlcm5hbWUgc2l6ZSBpbiBieXRlcworICoKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCB7QGxpdGVyYWwgPH0gMCBvbiBlcnJvci4gQHNlZSBlcnJvci1jcnlwdC5oCisgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19TcnBTZXRVc2VybmFtZShTcnAqIHNycCwgY29uc3QgYnl0ZSogdXNlcm5hbWUsIHdvcmQzMiBzaXplKTsKKworCisvKioKKyAqIFNldHMgdGhlIHNycCBwYXJhbWV0ZXJzIGJhc2VkIG9uIHRoZSB1c2VybmFtZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgY2FsbGVkIGFmdGVyIHdjX1NycFNldFVzZXJuYW1lLgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHNycCAgICAgICB0aGUgU3JwIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gICAgIE4gICAgICAgICB0aGUgTW9kdWx1cy4gTiA9IDJxKzEsIFtxLCBOXSBhcmUgcHJpbWVzLgorICogQHBhcmFtW2luXSAgICAgblN6ICAgICAgIHRoZSBOIHNpemUgaW4gYnl0ZXMuCisgKiBAcGFyYW1baW5dICAgICBnICAgICAgICAgdGhlIEdlbmVyYXRvciBtb2R1bG8gTi4KKyAqIEBwYXJhbVtpbl0gICAgIGdTeiAgICAgICB0aGUgZyBzaXplIGluIGJ5dGVzCisgKiBAcGFyYW1baW5dICAgICBzYWx0ICAgICAgYSBzbWFsbCByYW5kb20gc2FsdC4gU3BlY2lmaWMgZm9yIGVhY2ggdXNlcm5hbWUuCisgKiBAcGFyYW1baW5dICAgICBzYWx0U3ogICAgdGhlIHNhbHQgc2l6ZSBpbiBieXRlcworICoKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCB7QGxpdGVyYWwgPH0gMCBvbiBlcnJvci4gQHNlZSBlcnJvci1jcnlwdC5oCisgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19TcnBTZXRQYXJhbXMoU3JwKiBzcnAsIGNvbnN0IGJ5dGUqIE4sICAgIHdvcmQzMiBuU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBnLCAgICB3b3JkMzIgZ1N6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogc2FsdCwgd29yZDMyIHNhbHRTeik7CisKKy8qKgorICogU2V0cyB0aGUgcGFzc3dvcmQuCisgKgorICogU2V0dGluZyB0aGUgcGFzc3dvcmQgZG9lcyBub3QgcGVyc2lzdHMgdGhlIGNsZWFyIHBhc3N3b3JkIGRhdGEgaW4gdGhlCisgKiBzcnAgc3RydWN0dXJlLiBUaGUgY2xpZW50IGNhbGN1bGF0ZXMgeCA9IEgoc2FsdCArIEgodXNlcjpwc3dkKSkgYW5kIHN0b3JlcworICogaXQgaW4gdGhlIGF1dGggZmllbGQuCisgKgorICogVGhpcyBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCBhZnRlciB3Y19TcnBTZXRQYXJhbXMgYW5kIGlzIENMSUVOVCBTSURFIE9OTFkuCisgKgorICogQHBhcmFtW2luLG91dF0gc3JwICAgICAgIHRoZSBTcnAgc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgICAgcGFzc3dvcmQgIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgcGFzc3dvcmQuCisgKiBAcGFyYW1baW5dICAgICBzaXplICAgICAgdGhlIHBhc3N3b3JkIHNpemUgaW4gYnl0ZXMuCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIHtAbGl0ZXJhbCA8fSAwIG9uIGVycm9yLiBAc2VlIGVycm9yLWNyeXB0LmgKKyAqLworV09MRlNTTF9BUEkgaW50IHdjX1NycFNldFBhc3N3b3JkKFNycCogc3JwLCBjb25zdCBieXRlKiBwYXNzd29yZCwgd29yZDMyIHNpemUpOworCisvKioKKyAqIFNldHMgdGhlIHZlcmlmaWVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gTVVTVCBiZSBjYWxsZWQgYWZ0ZXIgd2NfU3JwU2V0UGFyYW1zIGFuZCBpcyBTRVJWRVIgU0lERSBPTkxZLgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHNycCAgICAgICB0aGUgU3JwIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gICAgIHZlcmlmaWVyICB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHZlcmlmaWVyLgorICogQHBhcmFtW2luXSAgICAgc2l6ZSAgICAgIHRoZSB2ZXJpZmllciBzaXplIGluIGJ5dGVzLgorICoKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCB7QGxpdGVyYWwgPH0gMCBvbiBlcnJvci4gQHNlZSBlcnJvci1jcnlwdC5oCisgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19TcnBTZXRWZXJpZmllcihTcnAqIHNycCwgY29uc3QgYnl0ZSogdmVyaWZpZXIsIHdvcmQzMiBzaXplKTsKKworLyoqCisgKiBHZXRzIHRoZSB2ZXJpZmllci4KKyAqCisgKiBUaGUgY2xpZW50IGNhbGN1bGF0ZXMgdGhlIHZlcmlmaWVyIHdpdGggdiA9IGcgXiB4ICUgTi4KKyAqIFRoaXMgZnVuY3Rpb24gTUFZIGJlIGNhbGxlZCBhZnRlciB3Y19TcnBTZXRQYXNzd29yZCBhbmQgaXMgQ0xJRU5UIFNJREUgT05MWS4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSBzcnAgICAgICAgdGhlIFNycCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1bb3V0XSAgICB2ZXJpZmllciAgdGhlIGJ1ZmZlciB0byB3cml0ZSB0aGUgdmVyaWZpZXIuCisgKiBAcGFyYW1baW4sb3V0XSBzaXplICAgICAgdGhlIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmllciBzaXplLgorICoKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCB7QGxpdGVyYWwgPH0gMCBvbiBlcnJvci4gQHNlZSBlcnJvci1jcnlwdC5oCisgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19TcnBHZXRWZXJpZmllcihTcnAqIHNycCwgYnl0ZSogdmVyaWZpZXIsIHdvcmQzMiogc2l6ZSk7CisKKy8qKgorICogU2V0cyB0aGUgcHJpdmF0ZSBlcGhlbWVyYWwgdmFsdWUuCisgKgorICogVGhlIHByaXZhdGUgZXBoZW1lcmFsIHZhbHVlIGlzIGtub3duIGFzOgorICogICBhIGF0IHRoZSBjbGllbnQgc2lkZS4gYSA9IHJhbmRvbSgpCisgKiAgIGIgYXQgdGhlIHNlcnZlciBzaWRlLiBiID0gcmFuZG9tKCkKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaGFuZHkgZm9yIHVuaXQgdGVzdCBjYXNlcyBvciBpZiB0aGUgZGV2ZWxvcGVyIHdhbnRzIHRvIHVzZQorICogYW4gZXh0ZXJuYWwgcmFuZG9tIHNvdXJjZSB0byBzZXQgdGhlIGVwaGVtZXJhbCB2YWx1ZS4KKyAqIFRoaXMgZnVuY3Rpb24gTUFZIGJlIGNhbGxlZCBiZWZvcmUgd2NfU3JwR2V0UHVibGljLgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHNycCAgICAgICB0aGUgU3JwIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gICAgIHByaXYgICAgICB0aGUgZXBoZW1lcmFsIHZhbHVlLgorICogQHBhcmFtW2luXSAgICAgc2l6ZSAgICAgIHRoZSBwcml2YXRlIHNpemUgaW4gYnl0ZXMuCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIHtAbGl0ZXJhbCA8fSAwIG9uIGVycm9yLiBAc2VlIGVycm9yLWNyeXB0LmgKKyAqLworV09MRlNTTF9BUEkgaW50IHdjX1NycFNldFByaXZhdGUoU3JwKiBzcnAsIGNvbnN0IGJ5dGUqIHByaXYsIHdvcmQzMiBzaXplKTsKKworLyoqCisgKiBHZXRzIHRoZSBwdWJsaWMgZXBoZW1lcmFsIHZhbHVlLgorICoKKyAqIFRoZSBwdWJsaWMgZXBoZW1lcmFsIHZhbHVlIGlzIGtub3duIGFzOgorICogICBBIGF0IHRoZSBjbGllbnQgc2lkZS4gQSA9IGcgXiBhICUgTgorICogICBCIGF0IHRoZSBzZXJ2ZXIgc2lkZS4gQiA9IChrICogdiArIChnIF4gYiAlIE4pKSAlIE4KKyAqIFRoaXMgZnVuY3Rpb24gTVVTVCBiZSBjYWxsZWQgYWZ0ZXIgd2NfU3JwU2V0UGFzc3dvcmQgb3Igd2NfU3JwU2V0VmVyaWZpZXIuCisgKgorICogQHBhcmFtW2luLG91dF0gc3JwICAgICAgIHRoZSBTcnAgc3RydWN0dXJlLgorICogQHBhcmFtW291dF0gICAgcHViICAgICAgIHRoZSBidWZmZXIgdG8gd3JpdGUgdGhlIHB1YmxpYyBlcGhlbWVyYWwgdmFsdWUuCisgKiBAcGFyYW1baW4sb3V0XSBzaXplICAgICAgdGhlIHRoZSBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2lsbCBiZSB1cGRhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXBoZW1lcmFsIHZhbHVlIHNpemUuCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIHtAbGl0ZXJhbCA8fSAwIG9uIGVycm9yLiBAc2VlIGVycm9yLWNyeXB0LmgKKyAqLworV09MRlNTTF9BUEkgaW50IHdjX1NycEdldFB1YmxpYyhTcnAqIHNycCwgYnl0ZSogcHViLCB3b3JkMzIqIHNpemUpOworCisKKy8qKgorICogQ29tcHV0ZXMgdGhlIHNlc3Npb24ga2V5LgorICoKKyAqIFRoZSBrZXkgY2FuIGJlIGFjY2Vzc2VkIGF0IHNycC0+a2V5IGFmdGVyIHN1Y2Nlc3MuCisgKgorICogQHBhcmFtW2luLG91dF0gc3JwICAgICAgICAgICAgICAgdGhlIFNycCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICAgICBjbGllbnRQdWJLZXkgICAgICB0aGUgY2xpZW50J3MgcHVibGljIGVwaGVtZXJhbCB2YWx1ZS4KKyAqIEBwYXJhbVtpbl0gICAgIGNsaWVudFB1YktleVN6ICAgIHRoZSBjbGllbnQncyBwdWJsaWMgZXBoZW1lcmFsIHZhbHVlIHNpemUuCisgKiBAcGFyYW1baW5dICAgICBzZXJ2ZXJQdWJLZXkgICAgICB0aGUgc2VydmVyJ3MgcHVibGljIGVwaGVtZXJhbCB2YWx1ZS4KKyAqIEBwYXJhbVtpbl0gICAgIHNlcnZlclB1YktleVN6ICAgIHRoZSBzZXJ2ZXIncyBwdWJsaWMgZXBoZW1lcmFsIHZhbHVlIHNpemUuCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIHtAbGl0ZXJhbCA8fSAwIG9uIGVycm9yLiBAc2VlIGVycm9yLWNyeXB0LmgKKyAqLworV09MRlNTTF9BUEkgaW50IHdjX1NycENvbXB1dGVLZXkoU3JwKiBzcnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlKiBjbGllbnRQdWJLZXksIHdvcmQzMiBjbGllbnRQdWJLZXlTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUqIHNlcnZlclB1YktleSwgd29yZDMyIHNlcnZlclB1YktleVN6KTsKKworLyoqCisgKiBHZXRzIHRoZSBwcm9vZi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgY2FsbGVkIGFmdGVyIHdjX1NycENvbXB1dGVLZXkuCisgKgorICogQHBhcmFtW2luLG91dF0gc3JwICAgdGhlIFNycCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1bb3V0XSAgICBwcm9vZiB0aGUgYnVmZmVyIHRvIHdyaXRlIHRoZSBwcm9vZi4KKyAqIEBwYXJhbVtpbixvdXRdIHNpemUgIHRoZSBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvb2Ygc2l6ZS4KKyAqCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywge0BsaXRlcmFsIDx9IDAgb24gZXJyb3IuIEBzZWUgZXJyb3ItY3J5cHQuaAorICovCitXT0xGU1NMX0FQSSBpbnQgd2NfU3JwR2V0UHJvb2YoU3JwKiBzcnAsIGJ5dGUqIHByb29mLCB3b3JkMzIqIHNpemUpOworCisvKioKKyAqIFZlcmlmaWVzIHRoZSBwZWVycyBwcm9vZi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSB3Y19TcnBHZXRTZXNzaW9uS2V5LgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHNycCAgIHRoZSBTcnAgc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgICAgcHJvb2YgdGhlIHBlZXJzIHByb29mLgorICogQHBhcmFtW2luXSAgICAgc2l6ZSAgdGhlIHByb29mIHNpemUgaW4gYnl0ZXMuCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIHtAbGl0ZXJhbCA8fSAwIG9uIGVycm9yLiBAc2VlIGVycm9yLWNyeXB0LmgKKyAqLworV09MRlNTTF9BUEkgaW50IHdjX1NycFZlcmlmeVBlZXJzUHJvb2YoU3JwKiBzcnAsIGJ5dGUqIHByb29mLCB3b3JkMzIgc2l6ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZDUllQVF9TUlBfSCAqLworI2VuZGlmIC8qIFdPTEZDUllQVF9IQVZFX1NSUCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3RmbS5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3RmbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTZlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvdGZtLmgKQEAgLTAsMCArMSw4NTkgQEAKKy8qIHRmbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisKKy8qCisgKiBCYXNlZCBvbiBwdWJsaWMgZG9tYWluIFRvbXNGYXN0TWF0aCAwLjEwIGJ5IFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BpYWh1LmNhLAorICogaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworCisvKioKKyAqICBFZGl0ZWQgYnkgTW9pc2VzIEd1aW1hcmFlcyAobW9pc2VzLmd1aW1hcmFlc0BwaG9lYnVzLmNvbS5icikKKyAqICB0byBmaXQgQ3lhU1NMJ3MgbmVlZHMuCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvdGZtLmgKKyovCisKKyNpZm5kZWYgV09MRl9DUllQVF9URk1fSAorI2RlZmluZSBXT0xGX0NSWVBUX1RGTV9ICisKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC90eXBlcy5oPgorI2lmbmRlZiBDSEFSX0JJVAorICAgICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvcmFuZG9tLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX05PX0FTTQorICAgI3VuZGVmICBURk1fTk9fQVNNCisgICAjZGVmaW5lIFRGTV9OT19BU00KKyNlbmRpZgorCisjaWZkZWYgTk9fNjRCSVQKKyAgICN1bmRlZiAgTk9fVEZNXzY0QklUCisgICAjZGVmaW5lIE5PX1RGTV82NEJJVAorI2VuZGlmCisKKyNpZm5kZWYgTk9fVEZNXzY0QklUCisvKiBhdXRvZGV0ZWN0IHg4Ni02NCBhbmQgbWFrZSBzdXJlIHdlIGFyZSB1c2luZyA2NC1iaXQgZGlnaXRzIHdpdGggeDg2LTY0IGFzbSAqLworI2lmIGRlZmluZWQoX194ODZfNjRfXykKKyAgICNpZiBkZWZpbmVkKFRGTV9YODYpIHx8IGRlZmluZWQoVEZNX1NTRTIpIHx8IGRlZmluZWQoVEZNX0FSTSkKKyAgICAgICAjZXJyb3IgeDg2LTY0IGRldGVjdGVkLCB4ODYtMzIvU1NFMi9BUk0gb3B0aW1pemF0aW9ucyBhcmUgbm90IHZhbGlkIQorICAgI2VuZGlmCisgICAjaWYgIWRlZmluZWQoVEZNX1g4Nl82NCkgJiYgIWRlZmluZWQoVEZNX05PX0FTTSkKKyAgICAgICNkZWZpbmUgVEZNX1g4Nl82NAorICAgI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKSAmJiBkZWZpbmVkKF9fQVBQTEVfXykKKyAgICAjaWYgIWRlZmluZWQoVEZNX0FBUkNIXzY0KSAmJiAhZGVmaW5lZChURk1fTk9fQVNNKQorICAgICAgICAjZGVmaW5lIFRGTV9BQVJDSF82NAorICAgICNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChURk1fWDg2XzY0KSB8fCBkZWZpbmVkKFRGTV9BQVJDSF82NCkKKyAgICAjaWYgIWRlZmluZWQoRlBfNjRCSVQpCisgICAgICAgI2RlZmluZSBGUF82NEJJVAorICAgICNlbmRpZgorI2VuZGlmCisvKiB1c2UgNjQtYml0IGRpZ2l0IGV2ZW4gaWYgbm90IHVzaW5nIGFzbSBvbiB4ODZfNjQgKi8KKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKEZQXzY0QklUKQorICAgICNkZWZpbmUgRlBfNjRCSVQKKyNlbmRpZgorLyogaWYgaW50ZWwgY29tcGlsZXIgZG9lc24ndCBwcm92aWRlIDEyOCBiaXQgdHlwZSBkb24ndCB0dXJuIG9uIDY0Yml0ICovCisjaWYgZGVmaW5lZChGUF82NEJJVCkgJiYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAmJiAhZGVmaW5lZChIQVZFX19fVUlOVDEyOF9UKQorICAgICN1bmRlZiBGUF82NEJJVAorICAgICN1bmRlZiBURk1fWDg2XzY0CisjZW5kaWYKKyNlbmRpZiAvKiBOT19URk1fNjRCSVQgKi8KKworLyogdHJ5IHRvIGRldGVjdCB4ODYtMzIgKi8KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChURk1fU1NFMikKKyAgICNpZiBkZWZpbmVkKFRGTV9YODZfNjQpIHx8IGRlZmluZWQoVEZNX0FSTSkKKyAgICAgICAjZXJyb3IgeDg2LTMyIGRldGVjdGVkLCB4ODYtNjQvQVJNIG9wdGltaXphdGlvbnMgYXJlIG5vdCB2YWxpZCEKKyAgICNlbmRpZgorICAgI2lmICFkZWZpbmVkKFRGTV9YODYpICYmICFkZWZpbmVkKFRGTV9OT19BU00pCisgICAgICAjZGVmaW5lIFRGTV9YODYKKyAgICNlbmRpZgorI2VuZGlmCisKKy8qIG1ha2Ugc3VyZSB3ZSdyZSAzMi1iaXQgZm9yIHg4Ni0zMi9zc2UvYXJtL3BwYzMyICovCisjaWYgKGRlZmluZWQoVEZNX1g4NikgfHwgZGVmaW5lZChURk1fU1NFMikgfHwgZGVmaW5lZChURk1fQVJNKSB8fCBkZWZpbmVkKFRGTV9QUEMzMikpICYmIGRlZmluZWQoRlBfNjRCSVQpCisgICAjd2FybmluZyB4ODYtMzIsIFNTRTIgYW5kIEFSTSwgUFBDMzIgb3B0aW1pemF0aW9ucyByZXF1aXJlIDMyLWJpdCBkaWdpdHMgKHVuZGVmaW5pbmcpCisgICAjdW5kZWYgRlBfNjRCSVQKKyNlbmRpZgorCisvKiBtdWx0aSBhc21zPyAqLworI2lmZGVmIFRGTV9YODYKKyAgICNkZWZpbmUgVEZNX0FTTQorI2VuZGlmCisjaWZkZWYgVEZNX1g4Nl82NAorICAgI2lmZGVmIFRGTV9BU00KKyAgICAgICNlcnJvciBURk1fQVNNIGFscmVhZHkgZGVmaW5lZCEKKyAgICNlbmRpZgorICAgI2RlZmluZSBURk1fQVNNCisjZW5kaWYKKyNpZmRlZiBURk1fU1NFMgorICAgI2lmZGVmIFRGTV9BU00KKyAgICAgICNlcnJvciBURk1fQVNNIGFscmVhZHkgZGVmaW5lZCEKKyAgICNlbmRpZgorICAgI2RlZmluZSBURk1fQVNNCisjZW5kaWYKKyNpZmRlZiBURk1fQVJNCisgICAjaWZkZWYgVEZNX0FTTQorICAgICAgI2Vycm9yIFRGTV9BU00gYWxyZWFkeSBkZWZpbmVkIQorICAgI2VuZGlmCisgICAjZGVmaW5lIFRGTV9BU00KKyNlbmRpZgorI2lmZGVmIFRGTV9QUEMzMgorICAgI2lmZGVmIFRGTV9BU00KKyAgICAgICNlcnJvciBURk1fQVNNIGFscmVhZHkgZGVmaW5lZCEKKyAgICNlbmRpZgorICAgI2RlZmluZSBURk1fQVNNCisjZW5kaWYKKyNpZmRlZiBURk1fUFBDNjQKKyAgICNpZmRlZiBURk1fQVNNCisgICAgICAjZXJyb3IgVEZNX0FTTSBhbHJlYWR5IGRlZmluZWQhCisgICAjZW5kaWYKKyAgICNkZWZpbmUgVEZNX0FTTQorI2VuZGlmCisjaWZkZWYgVEZNX0FWUjMyCisgICAjaWZkZWYgVEZNX0FTTQorICAgICAgI2Vycm9yIFRGTV9BU00gYWxyZWFkeSBkZWZpbmVkIQorICAgI2VuZGlmCisgICAjZGVmaW5lIFRGTV9BU00KKyNlbmRpZgorCisvKiB3ZSB3YW50IG5vIGFzbT8gKi8KKyNpZmRlZiBURk1fTk9fQVNNCisgICAjdW5kZWYgVEZNX1g4NgorICAgI3VuZGVmIFRGTV9YODZfNjQKKyAgICN1bmRlZiBURk1fU1NFMgorICAgI3VuZGVmIFRGTV9BUk0KKyAgICN1bmRlZiBURk1fUFBDMzIKKyAgICN1bmRlZiBURk1fUFBDNjQKKyAgICN1bmRlZiBURk1fQVZSMzIKKyAgICN1bmRlZiBURk1fQVNNCisjZW5kaWYKKworLyogRUNDIGhlbHBlcnMgKi8KKyNpZmRlZiBURk1fRUNDMTkyCisgICAjaWZkZWYgRlBfNjRCSVQKKyAgICAgICAjZGVmaW5lIFRGTV9NVUwzCisgICAgICAgI2RlZmluZSBURk1fU1FSMworICAgI2Vsc2UKKyAgICAgICAjZGVmaW5lIFRGTV9NVUw2CisgICAgICAgI2RlZmluZSBURk1fU1FSNgorICAgI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFRGTV9FQ0MyMjQKKyAgICNpZmRlZiBGUF82NEJJVAorICAgICAgICNkZWZpbmUgVEZNX01VTDQKKyAgICAgICAjZGVmaW5lIFRGTV9TUVI0CisgICAjZWxzZQorICAgICAgICNkZWZpbmUgVEZNX01VTDcKKyAgICAgICAjZGVmaW5lIFRGTV9TUVI3CisgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgVEZNX0VDQzI1NgorICAgI2lmZGVmIEZQXzY0QklUCisgICAgICAgI2RlZmluZSBURk1fTVVMNAorICAgICAgICNkZWZpbmUgVEZNX1NRUjQKKyAgICNlbHNlCisgICAgICAgI2RlZmluZSBURk1fTVVMOAorICAgICAgICNkZWZpbmUgVEZNX1NRUjgKKyAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBURk1fRUNDMzg0CisgICAjaWZkZWYgRlBfNjRCSVQKKyAgICAgICAjZGVmaW5lIFRGTV9NVUw2CisgICAgICAgI2RlZmluZSBURk1fU1FSNgorICAgI2Vsc2UKKyAgICAgICAjZGVmaW5lIFRGTV9NVUwxMgorICAgICAgICNkZWZpbmUgVEZNX1NRUjEyCisgICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgVEZNX0VDQzUyMQorICAgI2lmZGVmIEZQXzY0QklUCisgICAgICAgI2RlZmluZSBURk1fTVVMOQorICAgICAgICNkZWZpbmUgVEZNX1NRUjkKKyAgICNlbHNlCisgICAgICAgI2RlZmluZSBURk1fTVVMMTcKKyAgICAgICAjZGVmaW5lIFRGTV9TUVIxNworICAgI2VuZGlmCisjZW5kaWYKKworCisvKiBhbGxvdyB1c2VyIHRvIGRlZmluZSBvbiBmcF9kaWdpdCwgZnBfd29yZCB0eXBlcyAqLworI2lmbmRlZiBXT0xGU1NMX0JJR0lOVF9UWVBFUworCisvKiBzb21lIGRlZmF1bHQgY29uZmlndXJhdGlvbnMuCisgKi8KKyNpZiBkZWZpbmVkKFdDXzE2QklUX0NQVSkKKyAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgIGZwX2RpZ2l0OworICAgI2RlZmluZSBTSVpFT0ZfRlBfRElHSVQgMgorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgZnBfd29yZDsKKyNlbGlmIGRlZmluZWQoRlBfNjRCSVQpCisgICAvKiBmb3IgR0NDIG9ubHkgb24gc3VwcG9ydGVkIHBsYXRmb3JtcyAqLworICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgZnBfZGlnaXQ7ICAgLyogNjRiaXQsIDEyOCB1c2VzIG1vZGUoVEkpIGJlbG93ICovCisgICAjZGVmaW5lIFNJWkVPRl9GUF9ESUdJVCA4CisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICBmcF93b3JkIF9fYXR0cmlidXRlX18gKChtb2RlKFRJKSkpOworI2Vsc2UKKworICAgI2lmbmRlZiBOT19URk1fNjRCSVQKKyAgICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKKyAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCAgIHVsb25nNjQ7CisgICAgICAjZWxzZQorICAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxvbmc2NDsKKyAgICAgICNlbmRpZgorICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgZnBfZGlnaXQ7CisgICAgICAjZGVmaW5lIFNJWkVPRl9GUF9ESUdJVCA0CisgICAgICB0eXBlZGVmIHVsb25nNjQgICAgICAgICAgICBmcF93b3JkOworICAgICAgI2RlZmluZSBGUF8zMkJJVAorICAgI2Vsc2UKKyAgICAgIC8qIHNvbWUgcHJvY3MgbGlrZSBjb2xkZmlyZSBwcmVmZXIgbm90IHRvIHBsYWNlIG11bHRpcGx5IGludG8gNjRiaXQgdHlwZQorICAgICAgICAgZXZlbiB0aG91Z2ggaXQgZXhpc3RzICovCisgICAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICBmcF9kaWdpdDsKKyAgICAgICNkZWZpbmUgU0laRU9GX0ZQX0RJR0lUIDIKKyAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgIGZwX3dvcmQ7CisgICAjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogV09MRlNTTF9CSUdJTlRfVFlQRVMgKi8KKworCisvKiAjIG9mIGRpZ2l0cyB0aGlzIGlzICovCisjZGVmaW5lIERJR0lUX0JJVCAgICgoQ0hBUl9CSVQpICogU0laRU9GX0ZQX0RJR0lUKQorCisvKiBNYXggc2l6ZSBvZiBhbnkgbnVtYmVyIGluIGJpdHMuICBCYXNpY2FsbHkgdGhlIGxhcmdlc3Qgc2l6ZSB5b3Ugd2lsbCBiZQorICogbXVsdGlwbHlpbmcgc2hvdWxkIGJlIGhhbGYgW29yIHNtYWxsZXJdIG9mIEZQX01BWF9TSVpFLWZvdXJfZGlnaXQKKyAqCisgKiBJdCBkZWZhdWx0cyB0byA0MDk2LWJpdHMgW2FsbG93aW5nIG11bHRpcGxpY2F0aW9ucyB1cCB0byAyMDQ4eDIwNDggYml0cyBdCisgKi8KKworCisjaWZuZGVmIEZQX01BWF9CSVRTCisgICAgI2RlZmluZSBGUF9NQVhfQklUUyAgICAgICAgICAgNDA5NgorI2VuZGlmCisjaWZkZWYgV09MRlNTTF9PUEVOU1NICisgICAgLyogT3BlblNTSCB1c2VzIHNvbWUgQklHIHByaW1lcyBzbyB3ZSBuZWVkIHRvIGFjY29tbW9kYXRlIGZvciB0aGF0ICovCisgICAgI3VuZGVmIEZQX01BWF9CSVRTCisgICAgI2RlZmluZSBGUF9NQVhfQklUUyAxNjM4NAorI2VuZGlmCisjZGVmaW5lIEZQX01BWF9TSVpFICAgICAgICAgICAoRlBfTUFYX0JJVFMrKDgqRElHSVRfQklUKSkKKworLyogd2lsbCB0aGlzIGxpYiB3b3JrPyAqLworI2lmIChDSEFSX0JJVCAmIDcpCisgICAjZXJyb3IgQ0hBUl9CSVQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGVpZ2h0LgorI2VuZGlmCisjaWYgRlBfTUFYX0JJVFMgJSBDSEFSX0JJVAorICAgI2Vycm9yIEZQX01BWF9CSVRTIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBDSEFSX0JJVAorI2VuZGlmCisKKyNkZWZpbmUgRlBfTUFTSyAgICAoZnBfZGlnaXQpKC0xKQorI2RlZmluZSBGUF9ESUdJVF9NQVggRlBfTUFTSworI2RlZmluZSBGUF9TSVpFICAgIChGUF9NQVhfU0laRS9ESUdJVF9CSVQpCisKKyNkZWZpbmUgRlBfTUFYX1BSSU1FX1NJWkUgKEZQX01BWF9CSVRTLygyKkNIQVJfQklUKSkKKy8qIEluIHRlcm1zIG9mIEZQX01BWF9CSVRTLCBpdCBpcyBkb3VibGUgdGhlIHNpemUgcG9zc2libGUgZm9yIGEgbnVtYmVyCisgKiB0byBhbGxvdyBmb3IgbXVsdGlwbGljYXRpb24sIGRpdmlkZSB0aGF0IDIgb3V0LiBBbHNvIGRpdmlkZSBieSBDSEFSX0JJVAorICogdG8gY29udmVydCBmcm9tIGJpdHMgdG8gYnl0ZXMuIChOb3RlLCBGUF9QUklNRV9TSVpFIGlzIHRoZSBudW1iZXIgb2YKKyAqIHZhbHVlcyBpbiB0aGUgY2FubmVkIHByaW1lIG51bWJlciBsaXN0LikgKi8KKworLyogc2lnbnMgKi8KKyNkZWZpbmUgRlBfWlBPUyAgICAgMAorI2RlZmluZSBGUF9ORUcgICAgICAxCisKKy8qIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBGUF9PS0FZICAgICAgMAorI2RlZmluZSBGUF9WQUwgICAgICAtMQorI2RlZmluZSBGUF9NRU0gICAgICAtMgorI2RlZmluZSBGUF9OT1RfSU5GCS0zCisjZGVmaW5lIEZQX1dPVUxEQkxPQ0sgLTQKKworLyogZXF1YWxpdGllcyAqLworI2RlZmluZSBGUF9MVCAgICAgICAgLTEgICAvKiBsZXNzIHRoYW4gKi8KKyNkZWZpbmUgRlBfRVEgICAgICAgICAwICAgLyogZXF1YWwgdG8gKi8KKyNkZWZpbmUgRlBfR1QgICAgICAgICAxICAgLyogZ3JlYXRlciB0aGFuICovCisKKy8qIHJlcGxpZXMgKi8KKyNkZWZpbmUgRlBfWUVTICAgICAgICAxICAgLyogeWVzIHJlc3BvbnNlICovCisjZGVmaW5lIEZQX05PICAgICAgICAgMCAgIC8qIG5vIHJlc3BvbnNlICovCisKKyNpZmRlZiBIQVZFX1dPTEZfQklHSU5UCisgICAgLyogcmF3IGJpZyBpbnRlZ2VyICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgV0NfQklHSU5UIHsKKyAgICAgICAgYnl0ZSogICBidWY7CisgICAgICAgIHdvcmQzMiAgbGVuOworICAgICAgICB2b2lkKiAgIGhlYXA7CisgICAgfSBXQ19CSUdJTlQ7CisgICAgI2RlZmluZSBXT0xGX0JJR0lOVF9ERUZJTkVECisjZW5kaWYKKworLyogYSBGUCB0eXBlICovCit0eXBlZGVmIHN0cnVjdCBmcF9pbnQgeworICAgIGludCAgICAgIHVzZWQ7CisgICAgaW50ICAgICAgc2lnbjsKKyNpZiBkZWZpbmVkKEFMVF9FQ0NfU0laRSkgfHwgZGVmaW5lZChIQVZFX1dPTEZfQklHSU5UKQorICAgIGludCAgICAgIHNpemU7CisjZW5kaWYKKyAgICBmcF9kaWdpdCBkcFtGUF9TSVpFXTsKKworI2lmZGVmIEhBVkVfV09MRl9CSUdJTlQKKyAgICBzdHJ1Y3QgV0NfQklHSU5UIHJhdzsgLyogdW5zaWduZWQgYmluYXJ5IChiaWcgZW5kaWFuKSAqLworI2VuZGlmCit9IGZwX2ludDsKKworLyogVHlwZXMgKi8KK3R5cGVkZWYgZnBfZGlnaXQgbXBfZGlnaXQ7Cit0eXBlZGVmIGZwX3dvcmQgIG1wX3dvcmQ7Cit0eXBlZGVmIGZwX2ludCAgIG1wX2ludDsKKworCisvKiB3b2xmIGJpZyBpbnQgYW5kIGNvbW1vbiBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC93b2xmbWF0aC5oPgorCisKKy8qIGV4dGVybmFsbHkgZGVmaW5lIHRoaXMgc3ltYm9sIHRvIGlnbm9yZSB0aGUgZGVmYXVsdCBzZXR0aW5ncywgdXNlZnVsIGZvciBjaGFuZ2luZyB0aGUgYnVpbGQgZnJvbSB0aGUgbWFrZSBwcm9jZXNzICovCisjaWZuZGVmIFRGTV9BTFJFQURZX1NFVAorCisvKiBkbyB3ZSB3YW50IHRoZSBsYXJnZSBzZXQgb2Ygc21hbGwgbXVsdGlwbGljYXRpb25zID8KKyAgIEVuYWJsZSB0aGVzZSBpZiB5b3UgYXJlIGdvaW5nIHRvIGJlIGRvaW5nIGEgbG90IG9mIHNtYWxsICg8PSAxNiBkaWdpdCkgbXVsdGlwbGljYXRpb25zIHNheSBpbiBFQ0MKKyAgIE9yIGlmIHlvdSdyZSBvbiBhIDY0LWJpdCBtYWNoaW5lIGRvaW5nIFJTQSBhcyBhIDEwMjQtYml0IGludGVnZXIgPT0gMTYgZGlnaXRzIDstKQorICovCisvKiBuZWVkIHRvIHJlZmFjdG9yIHRoZSBmdW5jdGlvbiAqLworLyojZGVmaW5lIFRGTV9TTUFMTF9TRVQgKi8KKworLyogZG8gd2Ugd2FudCBodWdlIGNvZGUKKyAgIEVuYWJsZSB0aGVzZSBpZiB5b3UgYXJlIGRvaW5nIDIwLCAyNCwgMjgsIDMyLCA0OCwgNjQgZGlnaXQgbXVsdGlwbGljYXRpb25zICh1c2VmdWwgZm9yIFJTQSkKKyAgIExlc3MgaW1wb3J0YW50IG9uIDY0LWJpdCBtYWNoaW5lcyBhcyAzMiBkaWdpdHMgPT0gMjA0OCBiaXRzCisgKi8KKyNpZiAwCisjZGVmaW5lIFRGTV9NVUwzCisjZGVmaW5lIFRGTV9NVUw0CisjZGVmaW5lIFRGTV9NVUw2CisjZGVmaW5lIFRGTV9NVUw3CisjZGVmaW5lIFRGTV9NVUw4CisjZGVmaW5lIFRGTV9NVUw5CisjZGVmaW5lIFRGTV9NVUwxMgorI2RlZmluZSBURk1fTVVMMTcKKyNlbmRpZgorI2lmZGVmIFRGTV9IVUdFX1NFVAorI2RlZmluZSBURk1fTVVMMjAKKyNkZWZpbmUgVEZNX01VTDI0CisjZGVmaW5lIFRGTV9NVUwyOAorI2RlZmluZSBURk1fTVVMMzIKKyNpZiAoRlBfTUFYX0JJVFMgPj0gNjE0NCkgJiYgZGVmaW5lZChGUF82NEJJVCkKKyAgICAjZGVmaW5lIFRGTV9NVUw0OAorI2VuZGlmCisjaWYgKEZQX01BWF9CSVRTID49IDgxOTIpICYmIGRlZmluZWQoRlBfNjRCSVQpCisgICAgI2RlZmluZSBURk1fTVVMNjQKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjZGVmaW5lIFRGTV9TUVIzCisjZGVmaW5lIFRGTV9TUVI0CisjZGVmaW5lIFRGTV9TUVI2CisjZGVmaW5lIFRGTV9TUVI3CisjZGVmaW5lIFRGTV9TUVI4CisjZGVmaW5lIFRGTV9TUVI5CisjZGVmaW5lIFRGTV9TUVIxMgorI2RlZmluZSBURk1fU1FSMTcKKyNlbmRpZgorI2lmZGVmIFRGTV9IVUdFX1NFVAorI2RlZmluZSBURk1fU1FSMjAKKyNkZWZpbmUgVEZNX1NRUjI0CisjZGVmaW5lIFRGTV9TUVIyOAorI2RlZmluZSBURk1fU1FSMzIKKyNkZWZpbmUgVEZNX1NRUjQ4CisjZGVmaW5lIFRGTV9TUVI2NAorI2VuZGlmCisKKy8qIE9wdGlvbmFsIG1hdGggY2hlY2tzIChlbmFibGUgV09MRlNTTF9ERUJVR19NQVRIIHRvIHByaW50IGluZm8pICovCisvKiAjZGVmaW5lIFRGTV9DSEVDSyAqLworCisvKiBJcyB0aGUgdGFyZ2V0IGEgUDQgUHJlc2NvdHQKKyAqLworLyogI2RlZmluZSBURk1fUFJFU0NPVFQgKi8KKworLyogRG8gd2Ugd2FudCB0aW1pbmcgcmVzaXN0YW50IGZwX2V4cHRtb2QoKSA/CisgKiBUaGlzIG1ha2VzIGl0IHNsb3dlciBidXQgYWxzbyB0aW1pbmcgaW52YXJpYW50IHdpdGggcmVzcGVjdCB0byB0aGUgZXhwb25lbnQKKyAqLworLyogI2RlZmluZSBURk1fVElNSU5HX1JFU0lTVEFOVCAqLworCisjZW5kaWYgLyogVEZNX0FMUkVBRFlfU0VUICovCisKKy8qIGZ1bmN0aW9ucyAqLworCisvKiByZXR1cm5zIGEgVEZNIGlkZW50IHN0cmluZyB1c2VmdWwgZm9yIGRlYnVnZ2luZy4uLiAqLworLypjb25zdCBjaGFyICpmcF9pZGVudCh2b2lkKTsqLworCisvKiBpbml0aWFsaXplIFtvciB6ZXJvXSBhbiBmcCBpbnQgKi8KK3ZvaWQgZnBfaW5pdChmcF9pbnQgKmEpOworTVBfQVBJIHZvaWQgZnBfemVybyhmcF9pbnQgKmEpOworTVBfQVBJIHZvaWQgZnBfY2xlYXIoZnBfaW50ICphKTsgLyogdXNlcyBGb3JjZVplcm8gdG8gY2xlYXIgc2Vuc2l0aXZlIG1lbW9yeSAqLworTVBfQVBJIHZvaWQgZnBfZm9yY2V6ZXJvIChmcF9pbnQgKiBhKTsKK01QX0FQSSB2b2lkIGZwX2ZyZWUoZnBfaW50KiBhKTsKKworLyogemVyby9vbmUvZXZlbi9vZGQvbmVnL3dvcmQgPyAqLworI2RlZmluZSBmcF9pc3plcm8oYSkgKCgoYSktPnVzZWQgPT0gMCkgPyBGUF9ZRVMgOiBGUF9OTykKKyNkZWZpbmUgZnBfaXNvbmUoYSkgXAorICAgICgoKChhKS0+dXNlZCA9PSAxKSAmJiAoKGEpLT5kcFswXSA9PSAxKSAmJiAoKGEpLT5zaWduID09IEZQX1pQT1MpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEZQX1lFUyA6IEZQX05PKQorI2RlZmluZSBmcF9pc2V2ZW4oYSkgXAorICAgICgoKGEpLT51c2VkID4gMCAmJiAoKChhKS0+ZHBbMF0gJiAxKSA9PSAwKSkgPyBGUF9ZRVMgOiBGUF9OTykKKyNkZWZpbmUgZnBfaXNvZGQoYSkgIFwKKyAgICAoKChhKS0+dXNlZCA+IDAgICYmICgoKGEpLT5kcFswXSAmIDEpID09IDEpKSA/IEZQX1lFUyA6IEZQX05PKQorI2RlZmluZSBmcF9pc25lZyhhKSAgKCgoYSktPnNpZ24gIT0gRlBfWlBPUykgPyBGUF9ZRVMgOiBGUF9OTykKKyNkZWZpbmUgZnBfaXN3b3JkKGEsIHcpIFwKKyAgICAoKCgoKGEpLT51c2VkID09IDEpICYmICgoYSktPmRwWzBdID09IHcpKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh3ID09IDApICYmICgoYSktPnVzZWQgPT0gMCkpKSA/IEZQX1lFUyA6IEZQX05PKQorCisvKiBzZXQgdG8gYSBzbWFsbCBkaWdpdCAqLwordm9pZCBmcF9zZXQoZnBfaW50ICphLCBmcF9kaWdpdCBiKTsKK2ludCAgZnBfc2V0X2ludChmcF9pbnQgKmEsIHVuc2lnbmVkIGxvbmcgYik7CisKKy8qIGNoZWNrIGlmIGEgYml0IGlzIHNldCAqLworaW50IGZwX2lzX2JpdF9zZXQoZnBfaW50ICphLCBmcF9kaWdpdCBiKTsKKy8qIHNldCB0aGUgYiBiaXQgdG8gMSAqLworaW50IGZwX3NldF9iaXQgKGZwX2ludCAqIGEsIGZwX2RpZ2l0IGIpOworCisvKiBjb3B5IGZyb20gYSB0byBiICovCit2b2lkIGZwX2NvcHkoY29uc3QgZnBfaW50ICphLCBmcF9pbnQgKmIpOwordm9pZCBmcF9pbml0X2NvcHkoZnBfaW50ICphLCBmcF9pbnQgKmIpOworCisvKiBjbGFtcCBkaWdpdHMgKi8KKyNkZWZpbmUgZnBfY2xhbXAoYSkgICB7IHdoaWxlICgoYSktPnVzZWQgJiYgKGEpLT5kcFsoYSktPnVzZWQtMV0gPT0gMCkgLS0oKGEpLT51c2VkKTsgKGEpLT5zaWduID0gKGEpLT51c2VkID8gKGEpLT5zaWduIDogRlBfWlBPUzsgfQorI2RlZmluZSBtcF9jbGFtcChhKSAgIGZwX2NsYW1wKGEpCisjZGVmaW5lIG1wX2dyb3coYSxzKSAgTVBfT0tBWQorCisvKiBuZWdhdGUgYW5kIGFic29sdXRlICovCisjZGVmaW5lIGZwX25lZyhhLCBiKSAgeyBmcF9jb3B5KGEsIGIpOyAoYiktPnNpZ24gXj0gMTsgZnBfY2xhbXAoYik7IH0KKyNkZWZpbmUgZnBfYWJzKGEsIGIpICB7IGZwX2NvcHkoYSwgYik7IChiKS0+c2lnbiAgPSAwOyB9CisKKy8qIHJpZ2h0IHNoaWZ0IHggZGlnaXRzICovCit2b2lkIGZwX3JzaGQoZnBfaW50ICphLCBpbnQgeCk7CisKKy8qIHJpZ2h0IHNoaWZ0IHggYml0cyAqLwordm9pZCBmcF9yc2hiKGZwX2ludCAqYSwgaW50IHgpOworCisvKiBsZWZ0IHNoaWZ0IHggZGlnaXRzICovCitpbnQgZnBfbHNoZChmcF9pbnQgKmEsIGludCB4KTsKKworLyogc2lnbmVkIGNvbXBhcmlzb24gKi8KK2ludCBmcF9jbXAoZnBfaW50ICphLCBmcF9pbnQgKmIpOworCisvKiB1bnNpZ25lZCBjb21wYXJpc29uICovCitpbnQgZnBfY21wX21hZyhmcF9pbnQgKmEsIGZwX2ludCAqYik7CisKKy8qIHBvd2VyIG9mIDIgb3BlcmF0aW9ucyAqLwordm9pZCBmcF9kaXZfMmQoZnBfaW50ICphLCBpbnQgYiwgZnBfaW50ICpjLCBmcF9pbnQgKmQpOwordm9pZCBmcF9tb2RfMmQoZnBfaW50ICphLCBpbnQgYiwgZnBfaW50ICpjKTsKK2ludCAgZnBfbXVsXzJkKGZwX2ludCAqYSwgaW50IGIsIGZwX2ludCAqYyk7Cit2b2lkIGZwXzJleHB0IChmcF9pbnQgKmEsIGludCBiKTsKK2ludCAgZnBfbXVsXzIoZnBfaW50ICphLCBmcF9pbnQgKmMpOwordm9pZCBmcF9kaXZfMihmcF9pbnQgKmEsIGZwX2ludCAqYyk7CisvKiBjID0gYSAvIDIgKG1vZCBiKSAtIGNvbnN0YW50IHRpbWUgKGEgPCBiIGFuZCBwb3NpdGl2ZSkgKi8KK2ludCBmcF9kaXZfMl9tb2RfY3QoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CisKKworLyogQ291bnRzIHRoZSBudW1iZXIgb2YgbHNicyB3aGljaCBhcmUgemVybyBiZWZvcmUgdGhlIGZpcnN0IHplcm8gYml0ICovCitpbnQgZnBfY250X2xzYihmcF9pbnQgKmEpOworCisvKiBjID0gYSArIGIgKi8KK2ludCBmcF9hZGQoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CisKKy8qIGMgPSBhIC0gYiAqLworaW50IGZwX3N1YihmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKKworLyogYyA9IGEgKiBiICovCitpbnQgZnBfbXVsKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOworCisvKiBiID0gYSphICAqLworaW50IGZwX3NxcihmcF9pbnQgKmEsIGZwX2ludCAqYik7CisKKy8qIGEvYiA9PiBjYiArIGQgPT0gYSAqLworaW50IGZwX2RpdihmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjLCBmcF9pbnQgKmQpOworCisvKiBjID0gYSBtb2QgYiwgMCA8PSBjIDwgYiAgKi8KK2ludCBmcF9tb2QoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CisKKy8qIGNvbXBhcmUgYWdhaW5zdCBhIHNpbmdsZSBkaWdpdCAqLworaW50IGZwX2NtcF9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYik7CisKKy8qIGMgPSBhICsgYiAqLworaW50IGZwX2FkZF9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYiwgZnBfaW50ICpjKTsKKworLyogYyA9IGEgLSBiICovCitpbnQgZnBfc3ViX2QoZnBfaW50ICphLCBmcF9kaWdpdCBiLCBmcF9pbnQgKmMpOworCisvKiBjID0gYSAqIGIgKi8KK2ludCBmcF9tdWxfZChmcF9pbnQgKmEsIGZwX2RpZ2l0IGIsIGZwX2ludCAqYyk7CisKKy8qIGEvYiA9PiBjYiArIGQgPT0gYSAqLworLyppbnQgZnBfZGl2X2QoZnBfaW50ICphLCBmcF9kaWdpdCBiLCBmcF9pbnQgKmMsIGZwX2RpZ2l0ICpkKTsqLworCisvKiBjID0gYSBtb2QgYiwgMCA8PSBjIDwgYiAgKi8KKy8qaW50IGZwX21vZF9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYiwgZnBfZGlnaXQgKmMpOyovCisKKy8qIC0tLT4gbnVtYmVyIHRoZW9yeSA8LS0tICovCisvKiBkID0gYSArIGIgKG1vZCBjKSAqLworLyppbnQgZnBfYWRkbW9kKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMsIGZwX2ludCAqZCk7Ki8KKworLyogZCA9IGEgLSBiIChtb2QgYykgKi8KKy8qaW50IGZwX3N1Ym1vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjLCBmcF9pbnQgKmQpOyovCisKKy8qIGQgPSBhICogYiAobW9kIGMpICovCitpbnQgZnBfbXVsbW9kKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMsIGZwX2ludCAqZCk7CisKKy8qIGQgPSBhIC0gYiAobW9kIGMpICovCitpbnQgZnBfc3VibW9kKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMsIGZwX2ludCAqZCk7CisKKy8qIGQgPSBhICsgYiAobW9kIGMpICovCitpbnQgZnBfYWRkbW9kKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMsIGZwX2ludCAqZCk7CisKKy8qIGQgPSBhIC0gYiAobW9kIGMpIC0gY29uc3RhbnQgdGltZSAoYSA8IGMgYW5kIGIgPCBjKSAqLworaW50IGZwX3N1Ym1vZF9jdChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjLCBmcF9pbnQgKmQpOworCisvKiBkID0gYSArIGIgKG1vZCBjKSAtIGNvbnN0YW50IHRpbWUgKGEgPCBjIGFuZCBiIDwgYykgKi8KK2ludCBmcF9hZGRtb2RfY3QoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYywgZnBfaW50ICpkKTsKKworLyogYyA9IGEgKiBhIChtb2QgYikgKi8KK2ludCBmcF9zcXJtb2QoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CisKKy8qIGMgPSAxL2EgKG1vZCBiKSAqLworaW50IGZwX2ludm1vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKK2ludCBmcF9pbnZtb2RfbW9udF9jdChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjLCBmcF9kaWdpdCBtcCk7CisKKy8qIGMgPSAoYSwgYikgKi8KKy8qaW50IGZwX2djZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsqLworCisvKiBjID0gW2EsIGJdICovCisvKmludCBmcF9sY20oZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7Ki8KKworLyogc2V0dXBzIHRoZSBtb250Z29tZXJ5IHJlZHVjdGlvbiAqLworaW50IGZwX21vbnRnb21lcnlfc2V0dXAoZnBfaW50ICphLCBmcF9kaWdpdCAqbXApOworCisvKiBjb21wdXRlcyBhID0gQioqbiBtb2QgYiB3aXRob3V0IGRpdmlzaW9uIG9yIG11bHRpcGxpY2F0aW9uIHVzZWZ1bCBmb3IKKyAqIG5vcm1hbGl6aW5nIG51bWJlcnMgaW4gYSBNb250Z29tZXJ5IHN5c3RlbS4KKyAqLworaW50IGZwX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKKworLyogY29tcHV0ZXMgeC9SID09IHggKG1vZCBOKSB2aWEgTW9udGdvbWVyeSBSZWR1Y3Rpb24gKi8KK2ludCBmcF9tb250Z29tZXJ5X3JlZHVjZShmcF9pbnQgKmEsIGZwX2ludCAqbSwgZnBfZGlnaXQgbXApOworaW50IGZwX21vbnRnb21lcnlfcmVkdWNlX2V4KGZwX2ludCAqYSwgZnBfaW50ICptLCBmcF9kaWdpdCBtcCwgaW50IGN0KTsKKworLyogZCA9IGEqKmIgKG1vZCBjKSAqLworaW50IGZwX2V4cHRtb2QoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYywgZnBfaW50ICpkKTsKK2ludCBmcF9leHB0bW9kX2V4KGZwX2ludCAqYSwgZnBfaW50ICpiLCBpbnQgbWluRGlnaXRzLCBmcF9pbnQgKmMsIGZwX2ludCAqZCk7CitpbnQgZnBfZXhwdG1vZF9uY3QoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYywgZnBfaW50ICpkKTsKKworI2lmZGVmIFdDX1JTQV9OT05CTE9DSworCitlbnVtIHRmbUV4cHRNb2ROYlN0YXRlIHsKKyAgVEZNX0VYUFRNT0RfTkJfSU5JVCA9IDAsCisgIFRGTV9FWFBUTU9EX05CX01PTlQsCisgIFRGTV9FWFBUTU9EX05CX01PTlRfUkVELAorICBURk1fRVhQVE1PRF9OQl9NT05UX01VTCwKKyAgVEZNX0VYUFRNT0RfTkJfTU9OVF9NT0QsCisgIFRGTV9FWFBUTU9EX05CX01PTlRfTU9EQ0hLLAorICBURk1fRVhQVE1PRF9OQl9ORVhULAorICBURk1fRVhQVE1PRF9OQl9NVUwsCisgIFRGTV9FWFBUTU9EX05CX01VTF9SRUQsCisgIFRGTV9FWFBUTU9EX05CX1NRUiwKKyAgVEZNX0VYUFRNT0RfTkJfU1FSX1JFRCwKKyAgVEZNX0VYUFRNT0RfTkJfUkVELAorICBURk1fRVhQVE1PRF9OQl9DT1VOVCAvKiBsYXN0IGl0ZW0gZm9yIHRvdGFsIHN0YXRlIGNvdW50IG9ubHkgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZm5kZWYgV0NfTk9fQ0FDSEVfUkVTSVNUQU5UCisgIGZwX2ludCAgIFJbM107CisjZWxzZQorICBmcF9pbnQgICBSWzJdOworI2VuZGlmCisgIGZwX2RpZ2l0IGJ1ZjsKKyAgZnBfZGlnaXQgbXA7CisgIGludCBiaXRjbnQ7CisgIGludCBkaWdpZHg7CisgIGludCB5OworICBpbnQgc3RhdGU7IC8qIHRmbUV4cHRNb2ROYlN0YXRlICovCisjaWZkZWYgV0NfUlNBX05PTkJMT0NLX1RJTUUKKyAgd29yZDMyIG1heEJsb2NrSW5zdDsgLyogbWF4aW11bSBpbnN0cnVjdGlvbnMgdG8gYmxvY2sgKi8KKyAgd29yZDMyIHRvdGFsSW5zdDsgICAgLyogdHJhY2tzIHRvdGFsIGluc3RydWN0aW9ucyAqLworI2VuZGlmCit9IGV4cHRNb2ROYl90OworCisjaWZkZWYgV0NfUlNBX05PTkJMT0NLX1RJTUUKK2VudW0geworICBURk1fRVhQVE1PRF9OQl9TVE9QID0gMCwgICAgIC8qIHN0b3AgYW5kIHJldHVybiBGUF9XT1VMREJMT0NLICovCisgIFRGTV9FWFBUTU9EX05CX0NPTlRJTlVFID0gMSwgLyoga2VlcCBibG9ja2luZyAqLworfTsKKyNlbmRpZgorCisvKiBub24tYmxvY2tpbmcgdmVyc2lvbiBvZiB0aW1pbmcgcmVzaXN0YW50IGZwX2V4cHRtb2QgZnVuY3Rpb24gKi8KKy8qIHN1cHBvcnRzIGNhY2hlIHJlc2lzdGFuY2UgKi8KK2ludCBmcF9leHB0bW9kX25iKGV4cHRNb2ROYl90KiBuYiwgZnBfaW50KiBHLCBmcF9pbnQqIFgsIGZwX2ludCogUCwgZnBfaW50KiBZKTsKKworI2VuZGlmIC8qIFdDX1JTQV9OT05CTE9DSyAqLworCisvKiBwcmltYWxpdHkgc3R1ZmYgKi8KKworLyogcGVyZm9ybSBhIE1pbGxlci1SYWJpbiB0ZXN0IG9mIGEgdG8gdGhlIGJhc2UgYiBhbmQgc3RvcmUgcmVzdWx0IGluICJyZXN1bHQiICovCisvKnZvaWQgZnBfcHJpbWVfbWlsbGVyX3JhYmluIChmcF9pbnQgKiBhLCBmcF9pbnQgKiBiLCBpbnQgKnJlc3VsdCk7Ki8KKworI2RlZmluZSBGUF9QUklNRV9TSVpFICAgICAgMjU2CisvKiAyNTYgdHJpYWwgZGl2aXNpb25zICsgOCBNaWxsZXItUmFiaW5zLCByZXR1cm5zIEZQX1lFUyBpZiBwcm9iYWJsZSBwcmltZSAgKi8KKy8qaW50IGZwX2lzcHJpbWUoZnBfaW50ICphKTsqLworLyogZXh0ZW5kZWQgdmVyc2lvbiBvZiBmcF9pc3ByaW1lLCBkbyAndCcgTWlsbGVyLVJhYmlucyBpbnN0ZWFkIG9mIG9ubHkgOCAqLworLyppbnQgZnBfaXNwcmltZV9leChmcF9pbnQgKmEsIGludCB0LCBpbnQqIHJlc3VsdCk7Ki8KKworLyogUHJpbWFsaXR5IGdlbmVyYXRpb24gZmxhZ3MgKi8KKy8qI2RlZmluZSBURk1fUFJJTUVfQkJTICAgICAgMHgwMDAxICovIC8qIEJCUyBzdHlsZSBwcmltZSAqLworLyojZGVmaW5lIFRGTV9QUklNRV9TQUZFICAgICAweDAwMDIgKi8gLyogU2FmZSBwcmltZSAocC0xKS8yID09IHByaW1lICovCisvKiNkZWZpbmUgVEZNX1BSSU1FXzJNU0JfT0ZGIDB4MDAwNCAqLyAvKiBmb3JjZSAybmQgTVNCIHRvIDAgKi8KKy8qI2RlZmluZSBURk1fUFJJTUVfMk1TQl9PTiAgMHgwMDA4ICovIC8qIGZvcmNlIDJuZCBNU0IgdG8gMSAqLworCisvKiBjYWxsYmFjayBmb3IgZnBfcHJpbWVfcmFuZG9tLCBzaG91bGQgZmlsbCBkc3Qgd2l0aCByYW5kb20gYnl0ZXMgYW5kIHJldHVybiBob3cgbWFueSByZWFkIFt1cCB0byBsZW5dICovCisvKnR5cGVkZWYgaW50IHRmbV9wcmltZV9jYWxsYmFjayh1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sIHZvaWQgKmRhdCk7Ki8KKworLyojZGVmaW5lIGZwX3ByaW1lX3JhbmRvbShhLCB0LCBzaXplLCBiYnMsIGNiLCBkYXQpIGZwX3ByaW1lX3JhbmRvbV9leChhLCB0LCAoKHNpemUpICogOCkgKyAxLCAoYmJzPT0xKT9URk1fUFJJTUVfQkJTOjAsIGNiLCBkYXQpKi8KKworLyppbnQgZnBfcHJpbWVfcmFuZG9tX2V4KGZwX2ludCAqYSwgaW50IHQsIGludCBzaXplLCBpbnQgZmxhZ3MsIHRmbV9wcmltZV9jYWxsYmFjayBjYiwgdm9pZCAqZGF0KTsqLworCisvKiByYWRpeCBjb252ZXJzaW9ucyAqLworaW50IGZwX2NvdW50X2JpdHMoY29uc3QgZnBfaW50ICphKTsKK2ludCBmcF9sZWFkaW5nX2JpdChmcF9pbnQgKmEpOworCitpbnQgZnBfdW5zaWduZWRfYmluX3NpemUoY29uc3QgZnBfaW50ICphKTsKK2ludCBmcF9yZWFkX3Vuc2lnbmVkX2JpbihmcF9pbnQgKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsIGludCBjKTsKK2ludCBmcF90b191bnNpZ25lZF9iaW4oZnBfaW50ICphLCB1bnNpZ25lZCBjaGFyICpiKTsKK2ludCBmcF90b191bnNpZ25lZF9iaW5fbGVuKGZwX2ludCAqYSwgdW5zaWduZWQgY2hhciAqYiwgaW50IGMpOworaW50IGZwX3RvX3Vuc2lnbmVkX2Jpbl9hdF9wb3MoaW50IHgsIGZwX2ludCAqdCwgdW5zaWduZWQgY2hhciAqYik7CisKKy8qaW50IGZwX3JlYWRfcmFkaXgoZnBfaW50ICphLCBjaGFyICpzdHIsIGludCByYWRpeCk7Ki8KKy8qaW50IGZwX3RvcmFkaXgoZnBfaW50ICphLCBjaGFyICpzdHIsIGludCByYWRpeCk7Ki8KKy8qaW50IGZwX3RvcmFkaXhfbihmcF9pbnQgKiBhLCBjaGFyICpzdHIsIGludCByYWRpeCwgaW50IG1heGxlbik7Ki8KKworCisvKiBWQVJJT1VTIExPVyBMRVZFTCBTVFVGRlMgKi8KK2ludCAgc19mcF9hZGQoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7Cit2b2lkIHNfZnBfc3ViKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOwordm9pZCBmcF9yZXZlcnNlKHVuc2lnbmVkIGNoYXIgKnMsIGludCBsZW4pOworCitpbnQgIGZwX211bF9jb21iYShmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKKworaW50ICBmcF9tdWxfY29tYmFfc21hbGwoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitpbnQgIGZwX211bF9jb21iYTMoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitpbnQgIGZwX211bF9jb21iYTQoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitpbnQgIGZwX211bF9jb21iYTYoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitpbnQgIGZwX211bF9jb21iYTcoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitpbnQgIGZwX211bF9jb21iYTgoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitpbnQgIGZwX211bF9jb21iYTkoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitpbnQgIGZwX211bF9jb21iYTEyKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOworaW50ICBmcF9tdWxfY29tYmExNyhmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKK2ludCAgZnBfbXVsX2NvbWJhMjAoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitpbnQgIGZwX211bF9jb21iYTI0KGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOworaW50ICBmcF9tdWxfY29tYmEyOChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKK2ludCAgZnBfbXVsX2NvbWJhMzIoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitpbnQgIGZwX211bF9jb21iYTQ4KGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOworaW50ICBmcF9tdWxfY29tYmE2NChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKK2ludCAgZnBfc3FyX2NvbWJhKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKK2ludCAgZnBfc3FyX2NvbWJhX3NtYWxsKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKK2ludCAgZnBfc3FyX2NvbWJhMyhmcF9pbnQgKmEsIGZwX2ludCAqYik7CitpbnQgIGZwX3Nxcl9jb21iYTQoZnBfaW50ICphLCBmcF9pbnQgKmIpOworaW50ICBmcF9zcXJfY29tYmE2KGZwX2ludCAqYSwgZnBfaW50ICpiKTsKK2ludCAgZnBfc3FyX2NvbWJhNyhmcF9pbnQgKmEsIGZwX2ludCAqYik7CitpbnQgIGZwX3Nxcl9jb21iYTgoZnBfaW50ICphLCBmcF9pbnQgKmIpOworaW50ICBmcF9zcXJfY29tYmE5KGZwX2ludCAqYSwgZnBfaW50ICpiKTsKK2ludCAgZnBfc3FyX2NvbWJhMTIoZnBfaW50ICphLCBmcF9pbnQgKmIpOworaW50ICBmcF9zcXJfY29tYmExNyhmcF9pbnQgKmEsIGZwX2ludCAqYik7CitpbnQgIGZwX3Nxcl9jb21iYTIwKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKK2ludCAgZnBfc3FyX2NvbWJhMjQoZnBfaW50ICphLCBmcF9pbnQgKmIpOworaW50ICBmcF9zcXJfY29tYmEyOChmcF9pbnQgKmEsIGZwX2ludCAqYik7CitpbnQgIGZwX3Nxcl9jb21iYTMyKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKK2ludCAgZnBfc3FyX2NvbWJhNDgoZnBfaW50ICphLCBmcF9pbnQgKmIpOworaW50ICBmcF9zcXJfY29tYmE2NChmcF9pbnQgKmEsIGZwX2ludCAqYik7CisKKworLyoqCisgKiBVc2VkIGJ5IHdvbGZTU0wKKyAqLworCisvKiBDb25zdGFudHMgKi8KKyNkZWZpbmUgTVBfTFQgICBGUF9MVCAgIC8qIGxlc3MgdGhhbiAgICAqLworI2RlZmluZSBNUF9FUSAgIEZQX0VRICAgLyogZXF1YWwgdG8gICAgICovCisjZGVmaW5lIE1QX0dUICAgRlBfR1QgICAvKiBncmVhdGVyIHRoYW4gKi8KKyNkZWZpbmUgTVBfVkFMICBGUF9WQUwgIC8qIGludmFsaWQgKi8KKyNkZWZpbmUgTVBfTUVNICBGUF9NRU0gIC8qIG1lbW9yeSBlcnJvciAqLworI2RlZmluZSBNUF9OT1RfSU5GIEZQX05PVF9JTkYgLyogcG9pbnQgbm90IGF0IGluZmluaXR5ICovCisjZGVmaW5lIE1QX09LQVkgRlBfT0tBWSAvKiBvayByZXN1bHQgICAgKi8KKyNkZWZpbmUgTVBfTk8gICBGUF9OTyAgIC8qIHllcy9ubyByZXN1bHQgKi8KKyNkZWZpbmUgTVBfWUVTICBGUF9ZRVMgIC8qIHllcy9ubyByZXN1bHQgKi8KKyNkZWZpbmUgTVBfWlBPUyBGUF9aUE9TCisjZGVmaW5lIE1QX05FRyAgRlBfTkVHCisjZGVmaW5lIE1QX01BU0sgRlBfTUFTSworCisvKiBQcm90b3R5cGVzICovCisjZGVmaW5lIG1wX3plcm8oYSkgICAgICBmcF96ZXJvKGEpCisjZGVmaW5lIG1wX2lzb25lKGEpICAgICBmcF9pc29uZShhKQorI2RlZmluZSBtcF9pc2V2ZW4oYSkgICAgZnBfaXNldmVuKGEpCisjZGVmaW5lIG1wX2lzbmVnKGEpICAgICBmcF9pc25lZyhhKQorI2RlZmluZSBtcF9pc3dvcmQoYSwgdykgZnBfaXN3b3JkKGEsIHcpCisKKyNkZWZpbmUgTVBfUkFESVhfQklOICAyCisjZGVmaW5lIE1QX1JBRElYX09DVCAgOAorI2RlZmluZSBNUF9SQURJWF9ERUMgIDEwCisjZGVmaW5lIE1QX1JBRElYX0hFWCAgMTYKKyNkZWZpbmUgTVBfUkFESVhfTUFYICA2NAorCisjZGVmaW5lIG1wX3RvYmluYXJ5KE0sIFMpICBtcF90b3JhZGl4KChNKSwgKFMpLCBNUF9SQURJWF9CSU4pCisjZGVmaW5lIG1wX3Rvb2N0YWwoTSwgUykgICBtcF90b3JhZGl4KChNKSwgKFMpLCBNUF9SQURJWF9PQ1QpCisjZGVmaW5lIG1wX3RvZGVjaW1hbChNLCBTKSBtcF90b3JhZGl4KChNKSwgKFMpLCBNUF9SQURJWF9ERUMpCisjZGVmaW5lIG1wX3RvaGV4KE0sIFMpICAgICBtcF90b3JhZGl4KChNKSwgKFMpLCBNUF9SQURJWF9IRVgpCisKK01QX0FQSSBpbnQgIG1wX2luaXQgKG1wX2ludCAqIGEpOworTVBfQVBJIGludCAgbXBfaW5pdF9jb3B5KGZwX2ludCAqIGEsIGZwX2ludCAqIGIpOworTVBfQVBJIHZvaWQgbXBfY2xlYXIgKG1wX2ludCAqIGEpOworTVBfQVBJIHZvaWQgbXBfZnJlZSAobXBfaW50ICogYSk7CitNUF9BUEkgdm9pZCBtcF9mb3JjZXplcm8gKG1wX2ludCAqIGEpOworTVBfQVBJIGludCAgbXBfaW5pdF9tdWx0aShtcF9pbnQqIGEsIG1wX2ludCogYiwgbXBfaW50KiBjLCBtcF9pbnQqIGQsIG1wX2ludCogZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtcF9pbnQqIGYpOworCitNUF9BUEkgaW50ICBtcF9hZGQgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpOworTVBfQVBJIGludCAgbXBfc3ViIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKTsKK01QX0FQSSBpbnQgIG1wX2FkZF9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjKTsKKworTVBfQVBJIGludCAgbXBfbXVsIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKTsKK01QX0FQSSBpbnQgIG1wX211bF9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjKTsKK01QX0FQSSBpbnQgIG1wX211bG1vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYywgbXBfaW50ICogZCk7CitNUF9BUEkgaW50ICBtcF9zdWJtb2QgKG1wX2ludCogYSwgbXBfaW50KiBiLCBtcF9pbnQqIGMsIG1wX2ludCogZCk7CitNUF9BUEkgaW50ICBtcF9hZGRtb2QgKG1wX2ludCogYSwgbXBfaW50KiBiLCBtcF9pbnQqIGMsIG1wX2ludCogZCk7CitNUF9BUEkgaW50ICBtcF9zdWJtb2RfY3QgKG1wX2ludCogYSwgbXBfaW50KiBiLCBtcF9pbnQqIGMsIG1wX2ludCogZCk7CitNUF9BUEkgaW50ICBtcF9hZGRtb2RfY3QgKG1wX2ludCogYSwgbXBfaW50KiBiLCBtcF9pbnQqIGMsIG1wX2ludCogZCk7CitNUF9BUEkgaW50ICBtcF9tb2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7CitNUF9BUEkgaW50ICBtcF9pbnZtb2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7CitNUF9BUEkgaW50ICBtcF9pbnZtb2RfbW9udF9jdChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjLCBmcF9kaWdpdCBtcCk7CitNUF9BUEkgaW50ICBtcF9leHB0bW9kIChtcF9pbnQgKiBnLCBtcF9pbnQgKiB4LCBtcF9pbnQgKiBwLCBtcF9pbnQgKiB5KTsKK01QX0FQSSBpbnQgIG1wX2V4cHRtb2RfZXggKG1wX2ludCAqIGcsIG1wX2ludCAqIHgsIGludCBtaW5EaWdpdHMsIG1wX2ludCAqIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9pbnQgKiB5KTsKK01QX0FQSSBpbnQgIG1wX2V4cHRtb2RfbmN0IChtcF9pbnQgKiBnLCBtcF9pbnQgKiB4LCBtcF9pbnQgKiBwLCBtcF9pbnQgKiB5KTsKK01QX0FQSSBpbnQgIG1wX211bF8yZChtcF9pbnQgKmEsIGludCBiLCBtcF9pbnQgKmMpOworTVBfQVBJIGludCAgbXBfMmV4cHQobXBfaW50KiBhLCBpbnQgYik7CisKK01QX0FQSSBpbnQgIG1wX2RpdihtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBtcF9pbnQgKiBkKTsKKworTVBfQVBJIGludCAgbXBfY21wKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKK01QX0FQSSBpbnQgIG1wX2NtcF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgYik7CisKK01QX0FQSSBpbnQgIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGNvbnN0IG1wX2ludCAqIGEpOworTVBfQVBJIGludCAgbXBfcmVhZF91bnNpZ25lZF9iaW4gKG1wX2ludCAqIGEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsIGludCBjKTsKK01QX0FQSSBpbnQgIG1wX3RvX3Vuc2lnbmVkX2Jpbl9hdF9wb3MoaW50IHgsIG1wX2ludCAqdCwgdW5zaWduZWQgY2hhciAqYik7CitNUF9BUEkgaW50ICBtcF90b191bnNpZ25lZF9iaW4gKG1wX2ludCAqIGEsIHVuc2lnbmVkIGNoYXIgKmIpOworTVBfQVBJIGludCAgbXBfdG9fdW5zaWduZWRfYmluX2xlbihtcF9pbnQgKiBhLCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYyk7CisKK01QX0FQSSBpbnQgIG1wX3N1Yl9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYiwgZnBfaW50ICpjKTsKK01QX0FQSSBpbnQgIG1wX2NvcHkoY29uc3QgZnBfaW50KiBhLCBmcF9pbnQqIGIpOworTVBfQVBJIGludCAgbXBfaXNvZGQobXBfaW50KiBhKTsKK01QX0FQSSBpbnQgIG1wX2lzemVybyhtcF9pbnQqIGEpOworTVBfQVBJIGludCAgbXBfY291bnRfYml0cyhjb25zdCBtcF9pbnQgKmEpOworTVBfQVBJIGludCAgbXBfbGVhZGluZ19iaXQobXBfaW50ICphKTsKK01QX0FQSSBpbnQgIG1wX3NldF9pbnQobXBfaW50ICphLCB1bnNpZ25lZCBsb25nIGIpOworTVBfQVBJIGludCAgbXBfaXNfYml0X3NldCAobXBfaW50ICogYSwgbXBfZGlnaXQgYik7CitNUF9BUEkgaW50ICBtcF9zZXRfYml0IChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiKTsKK01QX0FQSSB2b2lkIG1wX3JzaGIobXBfaW50ICphLCBpbnQgeCk7CitNUF9BUEkgdm9pZCBtcF9yc2hkKG1wX2ludCAqYSwgaW50IHgpOworTVBfQVBJIGludCBtcF90b3JhZGl4IChtcF9pbnQgKmEsIGNoYXIgKnN0ciwgaW50IHJhZGl4KTsKK01QX0FQSSBpbnQgbXBfcmFkaXhfc2l6ZSAobXBfaW50ICogYSwgaW50IHJhZGl4LCBpbnQgKnNpemUpOworCisjaWZkZWYgV09MRlNTTF9ERUJVR19NQVRICisgICAgTVBfQVBJIHZvaWQgbXBfZHVtcChjb25zdCBjaGFyKiBkZXNjLCBtcF9pbnQqIGEsIGJ5dGUgdmVyYm9zZSk7CisjZWxzZQorICAgICNkZWZpbmUgbXBfZHVtcChkZXNjLCBhLCB2ZXJib3NlKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOT19EU0EpIHx8IGRlZmluZWQoSEFWRV9FQ0MpCisgICAgTVBfQVBJIGludCBtcF9yZWFkX3JhZGl4KG1wX2ludCogYSwgY29uc3QgY2hhciogc3RyLCBpbnQgcmFkaXgpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0VDQworICAgIE1QX0FQSSBpbnQgbXBfc3FyKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKKyAgICBNUF9BUEkgaW50IG1wX21vbnRnb21lcnlfcmVkdWNlKGZwX2ludCAqYSwgZnBfaW50ICptLCBmcF9kaWdpdCBtcCk7CisgICAgTVBfQVBJIGludCBtcF9tb250Z29tZXJ5X3JlZHVjZV9leChmcF9pbnQgKmEsIGZwX2ludCAqbSwgZnBfZGlnaXQgbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3QpOworICAgIE1QX0FQSSBpbnQgbXBfbW9udGdvbWVyeV9zZXR1cChmcF9pbnQgKmEsIGZwX2RpZ2l0ICpyaG8pOworICAgIE1QX0FQSSBpbnQgbXBfZGl2XzIoZnBfaW50ICogYSwgZnBfaW50ICogYik7CisgICAgTVBfQVBJIGludCBtcF9kaXZfMl9tb2RfY3QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9FQ0MpIHx8ICFkZWZpbmVkKE5PX1JTQSkgfHwgIWRlZmluZWQoTk9fRFNBKSB8fCBcCisgICAgZGVmaW5lZChXT0xGU1NMX0tFWV9HRU4pCisgICAgTVBfQVBJIGludCBtcF9zZXQoZnBfaW50ICphLCBmcF9kaWdpdCBiKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0VDQykgfHwgZGVmaW5lZChXT0xGU1NMX0tFWV9HRU4pIHx8ICFkZWZpbmVkKE5PX1JTQSkgfHwgXAorICAgICFkZWZpbmVkKE5PX0RTQSkgfHwgIWRlZmluZWQoTk9fREgpCisgICAgTVBfQVBJIGludCBtcF9zcXJtb2QobXBfaW50KiBhLCBtcF9pbnQqIGIsIG1wX2ludCogYyk7CisgICAgTVBfQVBJIGludCBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbihtcF9pbnQgKmEsIG1wX2ludCAqYik7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5PX0RIKSB8fCAhZGVmaW5lZChOT19EU0EpIHx8ICFkZWZpbmVkKE5PX1JTQSkgfHwgZGVmaW5lZChXT0xGU1NMX0tFWV9HRU4pCitNUF9BUEkgaW50ICBtcF9wcmltZV9pc19wcmltZShtcF9pbnQqIGEsIGludCB0LCBpbnQqIHJlc3VsdCk7CitNUF9BUEkgaW50ICBtcF9wcmltZV9pc19wcmltZV9leChtcF9pbnQqIGEsIGludCB0LCBpbnQqIHJlc3VsdCwgV0NfUk5HKiBybmcpOworI2VuZGlmIC8qICFOT19ESCB8fCAhTk9fRFNBIHx8ICFOT19SU0EgfHwgV09MRlNTTF9LRVlfR0VOICovCisjaWZkZWYgV09MRlNTTF9LRVlfR0VOCitNUF9BUEkgaW50ICBtcF9nY2QoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitNUF9BUEkgaW50ICBtcF9sY20oZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CitNUF9BUEkgaW50ICBtcF9yYW5kX3ByaW1lKG1wX2ludCogTiwgaW50IGxlbiwgV0NfUk5HKiBybmcsIHZvaWQqIGhlYXApOworTVBfQVBJIGludCAgbXBfZXhjaChtcF9pbnQgKmEsIG1wX2ludCAqYik7CisjZW5kaWYgLyogV09MRlNTTF9LRVlfR0VOICovCitNUF9BUEkgaW50ICBtcF9jb25kX3N3YXBfY3QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIGludCBjLCBpbnQgbSk7CisKK01QX0FQSSBpbnQgIG1wX2NudF9sc2IoZnBfaW50ICphKTsKK01QX0FQSSBpbnQgIG1wX2Rpdl8yZChmcF9pbnQgKmEsIGludCBiLCBmcF9pbnQgKmMsIGZwX2ludCAqZCk7CitNUF9BUEkgaW50ICBtcF9tb2RfZChmcF9pbnQqIGEsIGZwX2RpZ2l0IGIsIGZwX2RpZ2l0KiBjKTsKK01QX0FQSSBpbnQgIG1wX2xzaGQgKG1wX2ludCAqIGEsIGludCBiKTsKK01QX0FQSSBpbnQgIG1wX2FicyhtcF9pbnQqIGEsIG1wX2ludCogYik7CisKK1dPTEZTU0xfQVBJIHdvcmQzMiBDaGVja1J1blRpbWVGYXN0TWF0aCh2b2lkKTsKKworLyogSWYgdXNlciB1c2VzIFJTQSwgREgsIERTQSwgb3IgRUNDIG1hdGggbGliIGRpcmVjdGx5IHRoZW4gZmFzdCBtYXRoIEZQX1NJWkUKKyAgIG11c3QgbWF0Y2gsIHJldHVybiAxIGlmIGEgbWF0Y2ggb3RoZXJ3aXNlIDAgKi8KKyNkZWZpbmUgQ2hlY2tGYXN0TWF0aFNldHRpbmdzKCkgKEZQX1NJWkUgPT0gQ2hlY2tSdW5UaW1lRmFzdE1hdGgoKSkKKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgIH0KKyNlbmRpZgorCisjZW5kaWYgIC8qIFdPTEZfQ1JZUFRfVEZNX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmggYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGNmY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmgKQEAgLTAsMCArMSwxMTAzIEBACisvKiB0eXBlcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvdHlwZXMuaAorKi8KKy8qCitERVNDUklQVElPTgorVGhpcyBsaWJyYXJ5IGRlZmluZXMgdGhlIHByaW1pdGl2ZSBkYXRhIHR5cGVzIGFuZCBhYnN0cmFjdGlvbiBtYWNyb3MgdG8KK2RlY291cGxlIGxpYnJhcnkgZGVwZW5kZW5jaWVzIHdpdGggc3RhbmRhcmQgc3RyaW5nLCBtZW1vcnkgYW5kIHNvIG9uLgorCisqLworI2lmbmRlZiBXT0xGX0NSWVBUX1RZUEVTX0gKKyNkZWZpbmUgV09MRl9DUllQVF9UWVBFU19ICisKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2V0dGluZ3MuaD4KKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvd2NfcG9ydC5oPgorCisgICAgI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgICAgIGV4dGVybiAiQyIgeworICAgICNlbmRpZgorCisKKyAgICAjZGVmaW5lIFdPTEZTU0xfQUJJCisgICAgICAgICAgICAvKiBUYWcgZm9yIGFsbCB0aGUgQVBJcyB0aGF0IGFyZSBhIHBhcnQgb2YgdGhlIGZpeGVkIEFCSS4gKi8KKworICAgIC8qCisgICAgICogVGhpcyBzdHJ1Y3QgaXMgdXNlZCBtdWx0aXBsZSB0aW1lIGJ5IG90aGVyIHN0cnVjdHMgYW5kCisgICAgICogbmVlZHMgdG8gYmUgZGVmaW5lZCBzb213aGVyZSB0aGF0IGFsbCBzdHJ1Y3RzIGNhbiBpbXBvcnQKKyAgICAgKiAod2l0aCBtaW5pbWFsIGRlcGVuY2VuY2llcykuCisgICAgICovCisgICAgI2lmIGRlZmluZWQoSEFWRV9FWF9EQVRBKSB8fCBkZWZpbmVkKEZPUlRSRVNTKQorICAgICAgICAjaWZkZWYgSEFWRV9FWF9EQVRBX0NMRUFOVVBfSE9PS1MKKyAgICAgICAgdHlwZWRlZiB2b2lkICgqd29sZlNTTF9leF9kYXRhX2NsZWFudXBfcm91dGluZV90KSh2b2lkICpkYXRhKTsKKyAgICAgICAgI2VuZGlmCisgICAgdHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9DUllQVE9fRVhfREFUQSB7CisgICAgICAgIHZvaWQqIGV4X2RhdGFbTUFYX0VYX0RBVEFdOworICAgICAgICAjaWZkZWYgSEFWRV9FWF9EQVRBX0NMRUFOVVBfSE9PS1MKKyAgICAgICAgd29sZlNTTF9leF9kYXRhX2NsZWFudXBfcm91dGluZV90IGV4X2RhdGFfY2xlYW51cF9yb3V0aW5lc1tNQVhfRVhfREFUQV07CisgICAgICAgICNlbmRpZgorICAgIH0gV09MRlNTTF9DUllQVE9fRVhfREFUQTsKKyAgICAjZW5kaWYKKworICAgICNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKKyAgICAgICAgI2RlZmluZSBCSUdfRU5ESUFOX09SREVSCisgICAgI2VuZGlmCisKKyAgICAjaWZuZGVmIEJJR19FTkRJQU5fT1JERVIKKyAgICAgICAgI2RlZmluZSBMSVRUTEVfRU5ESUFOX09SREVSCisgICAgI2VuZGlmCisKKyAgICAjaWZuZGVmIFdPTEZTU0xfVFlQRVMKKyAgICAgICAgI2lmbmRlZiBieXRlCisgICAgICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgIGJ5dGU7CisgICAgICAgICAgICB0eXBlZGVmICAgc2lnbmVkIGNoYXIgIHN3b3JkODsKKyAgICAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgd29yZDg7CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZkZWYgV0NfMTZCSVRfQ1BVCisgICAgICAgICAgICB0eXBlZGVmICAgICAgICAgIGludCAgIHN3b3JkMTY7CisgICAgICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCAgIHdvcmQxNjsKKyAgICAgICAgICAgIHR5cGVkZWYgICAgICAgICAgbG9uZyAgc3dvcmQzMjsKKyAgICAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgd29yZDMyOworICAgICAgICAjZWxzZQorICAgICAgICAgICAgdHlwZWRlZiAgICAgICAgICBzaG9ydCBzd29yZDE2OworICAgICAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB3b3JkMTY7CisgICAgICAgICAgICB0eXBlZGVmICAgICAgICAgIGludCAgIHN3b3JkMzI7CisgICAgICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCAgIHdvcmQzMjsKKyAgICAgICAgI2VuZGlmCisgICAgICAgIHR5cGVkZWYgYnl0ZSAgICAgICAgICAgd29yZDI0WzNdOworICAgICNlbmRpZgorCisKKyAgICAvKiBjb25zdGFudCBwb2ludGVyIHRvIGEgY29uc3RhbnQgY2hhciAqLworICAgICNpZmRlZiBXT0xGU1NMX05PX0NPTlNUQ0hBUkNPTlNUCisgICAgICAgIHR5cGVkZWYgY29uc3QgY2hhciogICAgICAgd2NjaGFyOworICAgICNlbHNlCisgICAgICAgIHR5cGVkZWYgY29uc3QgY2hhciogY29uc3Qgd2NjaGFyOworICAgICNlbmRpZgorCisKKyAgICAvKiB0cnkgdG8gc2V0IFNJWkVPRl9MT05HIG9yIFNJWkVPRl9MT05HX0xPTkcgaWYgdXNlciBkaWRuJ3QgKi8KKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChIQVZFX0xJTUlUU19IKQorICAgICAgICAvKiBtYWtlIHN1cmUgYm90aCBTSVpFT0ZfTE9OR19MT05HIGFuZCBTSVpFT0ZfTE9ORyBhcmUgc2V0LCAKKyAgICAgICAgICogb3RoZXJ3aXNlIGNhdXNlcyBpc3N1ZXMgd2l0aCBDVENfU0VUVElOR1MgKi8KKyAgICAgICAgI2lmICFkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpIHx8ICFkZWZpbmVkKFNJWkVPRl9MT05HKQorICAgICAgICAgICAgI2luY2x1ZGUgPGxpbWl0cy5oPgorICAgICAgICAgICAgI2lmICFkZWZpbmVkKFNJWkVPRl9MT05HKSAmJiBkZWZpbmVkKFVMT05HX01BWCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFNJWkVPRl9MT05HIDQKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgI2lmICFkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpICYmIGRlZmluZWQoVUxMT05HX01BWCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAoVUxMT05HX01BWCA9PSAweGZmZmZmZmZmZmZmZmZmZmZVTEwpCisgICAgICAgICAgICAgICAgI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAjZW5kaWYKKyAgICAjZWxpZiAhZGVmaW5lZChfX0JDUExVU1BMVVNfXykgJiYgIWRlZmluZWQoX19FTVNDUklQVEVOX18pCisgICAgICAgICNpZiAhZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKSAmJiAhZGVmaW5lZChTSVpFT0ZfTE9ORykKKyAgICAgICAgICAgICNpZiAoZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IFwKKyAgICAgICAgICAgICAgICBkZWZpbmVkKF9BUkNIX1BQQzY0KSB8fCBkZWZpbmVkKF9fbWlwczY0KSB8fCBcCisgICAgICAgICAgICAgICAgZGVmaW5lZChfX3g4Nl82NF9fKSAgfHwgZGVmaW5lZChfX3MzOTB4X18gKSB8fCBcCisgICAgICAgICAgICAgICAgKChkZWZpbmVkKHN1bikgfHwgZGVmaW5lZChfX3N1bikpICYmIFwKKyAgICAgICAgICAgICAgICAgKGRlZmluZWQoTFA2NCkgfHwgZGVmaW5lZChfTFA2NCkpKSkKKyAgICAgICAgICAgICAgICAvKiBsb25nIHNob3VsZCBiZSA2NGJpdCAqLworICAgICAgICAgICAgICAgICNkZWZpbmUgU0laRU9GX0xPTkcgOAorICAgICAgICAgICAgI2VsaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX0NPUlRFWF9NM19fKQorICAgICAgICAgICAgICAgIC8qIGxvbmcgbG9uZyBzaG91bGQgYmUgNjRiaXQgKi8KKyAgICAgICAgICAgICAgICAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKworICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fQkNQTFVTUExVU19fKQorICAgICAgICAjZGVmaW5lIFdPUkQ2NF9BVkFJTEFCTEUKKyAgICAgICAgI2RlZmluZSBXNjRMSVQoeCkgeCMjdWk2NAorICAgICAgICB0eXBlZGVmICAgICAgICAgIF9faW50NjQgc3dvcmQ2NDsKKyAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHdvcmQ2NDsKKyAgICAjZWxpZiBkZWZpbmVkKF9fRU1TQ1JJUFRFTl9fKQorICAgICAgICAjZGVmaW5lIFdPUkQ2NF9BVkFJTEFCTEUKKyAgICAgICAgI2RlZmluZSBXNjRMSVQoeCkgeCMjdWxsCisgICAgICAgIHR5cGVkZWYgICAgICAgICAgbG9uZyBsb25nIHN3b3JkNjQ7CisgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHdvcmQ2NDsKKyAgICAjZWxpZiBkZWZpbmVkKFNJWkVPRl9MT05HKSAmJiBTSVpFT0ZfTE9ORyA9PSA4CisgICAgICAgICNkZWZpbmUgV09SRDY0X0FWQUlMQUJMRQorICAgICAgICAjZGVmaW5lIFc2NExJVCh4KSB4IyNMTAorICAgICAgICB0eXBlZGVmICAgICAgICAgIGxvbmcgc3dvcmQ2NDsKKyAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHdvcmQ2NDsKKyAgICAjZWxpZiBkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpICYmIFNJWkVPRl9MT05HX0xPTkcgPT0gOAorICAgICAgICAjZGVmaW5lIFdPUkQ2NF9BVkFJTEFCTEUKKyAgICAgICAgI2RlZmluZSBXNjRMSVQoeCkgeCMjTEwKKyAgICAgICAgdHlwZWRlZiAgICAgICAgICBsb25nIGxvbmcgc3dvcmQ2NDsKKyAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgd29yZDY0OworICAgICNlbGlmIGRlZmluZWQoX19TSVpFT0ZfTE9OR19MT05HX18pICYmIF9fU0laRU9GX0xPTkdfTE9OR19fID09IDgKKyAgICAgICAgI2RlZmluZSBXT1JENjRfQVZBSUxBQkxFCisgICAgICAgICNkZWZpbmUgVzY0TElUKHgpIHgjI0xMCisgICAgICAgIHR5cGVkZWYgICAgICAgICAgbG9uZyBsb25nIHN3b3JkNjQ7CisgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHdvcmQ2NDsKKyAgICAjZW5kaWYKKworI2lmIGRlZmluZWQoV09SRDY0X0FWQUlMQUJMRSkgJiYgIWRlZmluZWQoV0NfMTZCSVRfQ1BVKQorICAgIC8qIFRoZXNlIHBsYXRmb3JtcyBoYXZlIDY0LWJpdCBDUFUgcmVnaXN0ZXJzLiAgKi8KKyAgICAjaWYgKGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9BUkNIX1BQQzY0KSB8fCBcCisgICAgICAgICBkZWZpbmVkKF9fbWlwczY0KSAgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9NX1g2NCkpIHx8IFwKKyAgICAgICAgIGRlZmluZWQoX19hYXJjaDY0X18pIHx8IGRlZmluZWQoX19zcGFyYzY0X18pIHx8IGRlZmluZWQoX19zMzkweF9fICkgfHwgXAorICAgICAgICAoZGVmaW5lZChfX3Jpc2N2X3hsZW4pICYmIChfX3Jpc2N2X3hsZW4gPT0gNjQpKSB8fCBkZWZpbmVkKF9NX0FSTTY0KQorICAgICAgICAjZGVmaW5lIFdDXzY0QklUX0NQVQorICAgICNlbGlmIChkZWZpbmVkKHN1bikgfHwgZGVmaW5lZChfX3N1bikpICYmIFwKKyAgICAgICAgICAoZGVmaW5lZChMUDY0KSB8fCBkZWZpbmVkKF9MUDY0KSkKKyAgICAgICAgLyogTFA2NCB3aXRoIEdOVSBHQ0MgY29tcGlsZXIgaXMgcmVzZXJ2ZWQgZm9yIHdoZW4gbG9uZyBpbnQgaXMgNjQgYml0cworICAgICAgICAgKiBhbmQgaW50IHVzZXMgMzIgYml0cy4gV2hlbiB1c2luZyBTb2xhcmlzIFN0dWRpbyBzcGFyYyBhbmQgX19zcGFyYyBhcmUKKyAgICAgICAgICogYXZhaWxhYmxlIGZvciAzMiBiaXQgZGV0ZWN0aW9uIGJ1dCBfX3NwYXJjNjRfXyBjb3VsZCBiZSBtaXNzZWQuIFRoaXMKKyAgICAgICAgICogdXNlcyBMUDY0IGZvciBjaGVja2luZyA2NCBiaXQgQ1BVIGFyY2guICovCisgICAgICAgICNkZWZpbmUgV0NfNjRCSVRfQ1BVCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBXQ18zMkJJVF9DUFUKKyAgICAjZW5kaWYKKworICAgICNpZiBkZWZpbmVkKE5PXzY0QklUKQorICAgICAgICAgIHR5cGVkZWYgd29yZDMyIHdvbGZzc2xfd29yZDsKKyAgICAgICAgICAjdW5kZWYgV09SRDY0X0FWQUlMQUJMRQorICAgICNlbHNlCisgICAgICAgICNpZmRlZiBXQ182NEJJVF9DUFUKKyAgICAgICAgICB0eXBlZGVmIHdvcmQ2NCB3b2xmc3NsX3dvcmQ7CisgICAgICAgICNlbHNlCisgICAgICAgICAgdHlwZWRlZiB3b3JkMzIgd29sZnNzbF93b3JkOworICAgICAgICAgICNpZmRlZiBXT1JENjRfQVZBSUxBQkxFCisgICAgICAgICAgICAgICNkZWZpbmUgV09MRkNSWVBUX1NMT1dfV09SRDY0CisgICAgICAgICAgI2VuZGlmCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkKFdDXzE2QklUX0NQVSkKKyAgICAgICAgI3VuZGVmIFdPUkQ2NF9BVkFJTEFCTEUKKyAgICAgICAgdHlwZWRlZiB3b3JkMTYgd29sZnNzbF93b3JkOworICAgICAgICAjZGVmaW5lIE1QXzE2QklUICAvKiBmb3IgbXBfaW50LCBtcF93b3JkIG5lZWRzIHRvIGJlIHR3aWNlIGFzIGJpZyBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9kaWdpdCwgbm8gNjQgYml0IHR5cGUgc28gbWFrZSBtcF9kaWdpdCAxNiBiaXQgKi8KKworI2Vsc2UKKyAgICAgICAgI3VuZGVmIFdPUkQ2NF9BVkFJTEFCTEUKKyAgICAgICAgdHlwZWRlZiB3b3JkMzIgd29sZnNzbF93b3JkOworICAgICAgICAjZGVmaW5lIE1QXzE2QklUICAvKiBmb3IgbXBfaW50LCBtcF93b3JkIG5lZWRzIHRvIGJlIHR3aWNlIGFzIGJpZyBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9kaWdpdCwgbm8gNjQgYml0IHR5cGUgc28gbWFrZSBtcF9kaWdpdCAxNiBiaXQgKi8KKyNlbmRpZgorCisjaWZkZWYgV0NfUFRSX1RZUEUgLyogQWxsb3cgdXNlciBzdXBwaWVkIHR5cGUgKi8KKyAgICB0eXBlZGVmIFdDX1BUUl9UWVBFIHdjX3B0cl90OworI2VsaWYgZGVmaW5lZChIQVZFX1VJTlRQVFJfVCkKKyAgICAjaW5jbHVkZSA8c3RkaW50Lmg+CisgICAgdHlwZWRlZiB1aW50cHRyX3Qgd2NfcHRyX3Q7CisjZWxzZSAvKiBmYWxsYmFjayB0byBhcmNoaXRlY3R1cmUgc2l6ZV90IGZvciBwb2ludGVyIHNpemUgKi8KKyAgICAjaW5jbHVkZSA8c3RkZGVmLmg+IC8qIGluY2x1ZGVkIGZvciBnZXR0aW5nIHNpemVfdCB0eXBlICovCisgICAgdHlwZWRlZiBzaXplX3Qgd2NfcHRyX3Q7CisjZW5kaWYKKworICAgIGVudW0geworICAgICAgICBXT0xGU1NMX1dPUkRfU0laRSAgPSBzaXplb2Yod29sZnNzbF93b3JkKSwKKyAgICAgICAgV09MRlNTTF9CSVRfU0laRSAgID0gOCwKKyAgICAgICAgV09MRlNTTF9XT1JEX0JJVFMgID0gV09MRlNTTF9XT1JEX1NJWkUgKiBXT0xGU1NMX0JJVF9TSVpFCisgICAgfTsKKworICAgICNkZWZpbmUgV09MRlNTTF9NQVhfMTZCSVQgMHhmZmZmVQorCisgICAgLyogdXNlIGlubGluaW5nIGlmIGNvbXBpbGVyIGFsbG93cyAqLworICAgICNpZm5kZWYgV0NfSU5MSU5FCisgICAgI2lmbmRlZiBOT19JTkxJTkUKKyAgICAgICAgI2lmZGVmIF9NU0NfVkVSCisgICAgICAgICAgICAjZGVmaW5lIFdDX0lOTElORSBfX2lubGluZQorICAgICAgICAjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorICAgICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfVlhXT1JLUworICAgICAgICAgICAgICAgICAgICNkZWZpbmUgV0NfSU5MSU5FIF9faW5saW5lX18KKyAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAgI2RlZmluZSBXQ19JTkxJTkUgaW5saW5lCisgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VsaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorICAgICAgICAgICAgI2RlZmluZSBXQ19JTkxJTkUgaW5saW5lCisgICAgICAgICNlbGlmIGRlZmluZWQoVEhSRUFEWCkKKyAgICAgICAgICAgICNkZWZpbmUgV0NfSU5MSU5FIF9JbmxpbmUKKyAgICAgICAgI2VsaWYgZGVmaW5lZChfX2doY19fKQorICAgICAgICAgICAgI2lmbmRlZiBfX2NwbHVzcGx1cworICAgICAgICAgICAgICAgICNkZWZpbmUgV0NfSU5MSU5FIF9faW5saW5lCisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNkZWZpbmUgV0NfSU5MSU5FIGlubGluZQorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICNlbGlmIGRlZmluZWQoX19DQ1JYX18pCisgICAgICAgICAgICAjZGVmaW5lIFdDX0lOTElORSBpbmxpbmUKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNkZWZpbmUgV0NfSU5MSU5FCisgICAgICAgICNlbmRpZgorICAgICNlbHNlCisgICAgICAgICNpZmRlZiBfX0dOVUNfXworICAgICAgICAgICAgI2RlZmluZSBXQ19JTkxJTkUgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNkZWZpbmUgV0NfSU5MSU5FCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorICAgICNlbmRpZgorCisgICAgI2lmIGRlZmluZWQoSEFWRV9GSVBTKSB8fCBkZWZpbmVkKEhBVkVfU0VMRlRFU1QpCisgICAgICAgICNkZWZpbmUgSU5MSU5FIFdDX0lOTElORQorICAgICNlbmRpZgorCisKKyAgICAvKiBzZXQgdXAgcm90YXRlIHN0eWxlICovCisgICAgI2lmIChkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fQkNQTFVTUExVU19fKSkgJiYgXAorICAgICAgICAhZGVmaW5lZChXT0xGU1NMX1NHWCkgJiYgIWRlZmluZWQoSU5USU1FX1JUT1MpCisgICAgICAgICNkZWZpbmUgSU5URUxfSU5UUklOU0lDUworICAgICAgICAjZGVmaW5lIEZBU1RfUk9UQVRFCisgICAgI2VsaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBUQVJHRVRfQ1BVX1BQQworICAgICAgICAjZGVmaW5lIFBQQ19JTlRSSU5TSUNTCisgICAgICAgICNkZWZpbmUgRkFTVF9ST1RBVEUKKyAgICAjZWxpZiBkZWZpbmVkKF9fQ0NSWF9fKQorICAgICAgICAjZGVmaW5lIEZBU1RfUk9UQVRFCisgICAgI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorICAgICAgICAvKiBHQ0MgZG9lcyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gdXNpbmcgcm90YXRlCisgICAgICAgICAgIGluc3RydWN0aW9ucyAgKi8KKyAgICAgICAgI2RlZmluZSBGQVNUX1JPVEFURQorICAgICNlbmRpZgorCisKKyAgICAvKiBzZXQgdXAgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgaWYgYXZhaWxhYmxlICovCisgICAgI2lmZGVmIEhBVkVfVEhSRUFEX0xTCisgICAgICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgICAgICAgI2RlZmluZSBUSFJFQURfTFNfVCBfX2RlY2xzcGVjKHRocmVhZCkKKyAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2Ugb25seSBpbiBGcmVlUlRPUyB2OC4yLjEgYW5kIGhpZ2hlciAqLworICAgICAgICAjZWxpZiBkZWZpbmVkKEZSRUVSVE9TKSB8fCBkZWZpbmVkKEZSRUVSVE9TX1RDUCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZChXT0xGU1NMX1pFUEhZUikKKyAgICAgICAgICAgICNkZWZpbmUgVEhSRUFEX0xTX1QKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNkZWZpbmUgVEhSRUFEX0xTX1QgX190aHJlYWQKKyAgICAgICAgI2VuZGlmCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBUSFJFQURfTFNfVAorICAgICNlbmRpZgorCisgICAgLyogR0NDIDcgaGFzIG5ldyBzd2l0Y2goKSBmYWxsLXRocm91Z2ggZGV0ZWN0aW9uICovCisgICAgLyogZGVmYXVsdCB0byBGQUxMX1RIUk9VR0ggc3R1YiAqLworICAgICNpZm5kZWYgRkFMTF9USFJPVUdICisgICAgI2RlZmluZSBGQUxMX1RIUk9VR0gKKworICAgICNpZiBkZWZpbmVkKF9fR05VQ19fKQorICAgICAgICAjaWYgKChfX0dOVUNfXyA+IDcpIHx8ICgoX19HTlVDX18gPT0gNykgJiYgKF9fR05VQ19NSU5PUl9fID49IDEpKSkKKyAgICAgICAgICAgICN1bmRlZiAgRkFMTF9USFJPVUdICisgICAgICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX0xJTlVYS00pICYmIGRlZmluZWQoZmFsbHRocm91Z2gpCisgICAgICAgICAgICAgICAgI2RlZmluZSBGQUxMX1RIUk9VR0ggZmFsbHRocm91Z2gKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBGQUxMX1RIUk9VR0ggX19hdHRyaWJ1dGVfXyAoKGZhbGx0aHJvdWdoKSk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisgICAgI2VuZGlmIC8qIEZBTExfVEhST1VHSCAqLworCisgICAgLyogTWljcml1bSB3aWxsIHVzZSBWaXN1YWwgU3R1ZGlvIGZvciBjb21waWxhdGlvbiBidXQgbm90IHRoZSBXaW4zMiBBUEkgKi8KKyAgICAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKE1JQ1JJVU0pICYmICFkZWZpbmVkKEZSRUVSVE9TKSAmJiBcCisgICAgICAgICFkZWZpbmVkKEZSRUVSVE9TX1RDUCkgJiYgIWRlZmluZWQoRUJTTkVUKSAmJiBcCisgICAgICAgICFkZWZpbmVkKFdPTEZTU0xfVVRBU0tFUikgJiYgIWRlZmluZWQoSU5USU1FX1JUT1MpCisgICAgICAgICNkZWZpbmUgVVNFX1dJTkRPV1NfQVBJCisgICAgI2VuZGlmCisKKyAgICAjZGVmaW5lIFhTVFJfU0laRU9GKHgpIChzaXplb2YoeCkgLSAxKSAvKiAtMSB0byBub3QgY291bnQgdGhlIG51bGwgY2hhciAqLworCisgICAgLyogaWRlYSB0byBhZGQgZ2xvYmFsIGFsbG9jIG92ZXJyaWRlIGJ5IE1vaXNlcyBHdWltYXJhZXMgICovCisgICAgLyogZGVmYXVsdCB0byBsaWJjIHN0dWZmICovCisgICAgLyogWFJFQUxMT0MgaXMgdXNlZCBvbmNlIGluIG5vcm1hbCBtYXRoIGxpYiwgbm90IGluIGZhc3QgbWF0aCBsaWIgKi8KKyAgICAvKiBYRlJFRSBvbiBzb21lIGVtYmVkZGVkIHN5c3RlbXMgZG9lc24ndCBsaWtlIGZyZWUoMCkgc28gdGVzdCAgKi8KKyAgICAjaWYgZGVmaW5lZChIQVZFX0lPX1BPT0wpCisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQqIFhNQUxMT0Moc2l6ZV90IG4sIHZvaWQqIGhlYXAsIGludCB0eXBlKTsKKyAgICAgICAgV09MRlNTTF9BUEkgdm9pZCogWFJFQUxMT0Modm9pZCAqcCwgc2l6ZV90IG4sIHZvaWQqIGhlYXAsIGludCB0eXBlKTsKKyAgICAgICAgV09MRlNTTF9BUEkgdm9pZCBYRlJFRSh2b2lkICpwLCB2b2lkKiBoZWFwLCBpbnQgdHlwZSk7CisgICAgI2VsaWYgKGRlZmluZWQoV09MRlNTTF9BU1lOQ19DUllQVCkgJiYgZGVmaW5lZChIQVZFX0lOVEVMX1FBKSkgfHwgXAorICAgICAgICAgIGRlZmluZWQoSEFWRV9JTlRFTF9RQV9TWU5DKQorICAgICAgICAjaWZuZGVmIEhBVkVfSU5URUxfUUFfU1lOQworICAgICAgICAgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvaW50ZWwvcXVpY2thc3Npc3RfbWVtLmg+CisgICAgICAgICAgICAjdW5kZWYgVVNFX1dPTEZTU0xfTUVNT1JZCisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9ERUJVR19NRU1PUlkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhNQUxMT0MocywgaCwgdCkgICAgIEludGVsUWFNYWxsb2MoKHMpLCAoaCksICh0KSwgX19mdW5jX18sIF9fTElORV9fKQorICAgICAgICAgICAgICAgICNkZWZpbmUgWEZSRUUocCwgaCwgdCkgICAgICAgSW50ZWxRYUZyZWUoKHApLCAoaCksICh0KSwgX19mdW5jX18sIF9fTElORV9fKQorICAgICAgICAgICAgICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgSW50ZWxRYVJlYWxsb2MoKHApLCAobiksIChoKSwgKHQpLCBfX2Z1bmNfXywgX19MSU5FX18pCisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0KSAgICAgSW50ZWxRYU1hbGxvYygocyksIChoKSwgKHQpKQorICAgICAgICAgICAgICAgICNkZWZpbmUgWEZSRUUocCwgaCwgdCkgICAgICAgSW50ZWxRYUZyZWUoKHApLCAoaCksICh0KSkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhSRUFMTE9DKHAsIG4sIGgsIHQpIEludGVsUWFSZWFsbG9jKChwKSwgKG4pLCAoaCksICh0KSkKKyAgICAgICAgICAgICNlbmRpZiAvKiBXT0xGU1NMX0RFQlVHX01FTU9SWSAqLworICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3BvcnQvaW50ZWwvcXVpY2thc3Npc3Rfc3luYy5oPgorICAgICAgICAgICAgI3VuZGVmIFVTRV9XT0xGU1NMX01FTU9SWQorICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfREVCVUdfTUVNT1JZCisgICAgICAgICAgICAgICAgI2RlZmluZSBYTUFMTE9DKHMsIGgsIHQpICAgICB3Y19DcnlwdG9DYl9JbnRlbFFhTWFsbG9jKChzKSwgKGgpLCAodCksIF9fZnVuY19fLCBfX0xJTkVfXykKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhGUkVFKHAsIGgsIHQpICAgICAgIHdjX0NyeXB0b0NiX0ludGVsUWFGcmVlKChwKSwgKGgpLCAodCksIF9fZnVuY19fLCBfX0xJTkVfXykKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhSRUFMTE9DKHAsIG4sIGgsIHQpIHdjX0NyeXB0b0NiX0ludGVsUWFSZWFsbG9jKChwKSwgKG4pLCAoaCksICh0KSwgX19mdW5jX18sIF9fTElORV9fKQorICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhNQUxMT0MocywgaCwgdCkgICAgIHdjX0NyeXB0b0NiX0ludGVsUWFNYWxsb2MoKHMpLCAoaCksICh0KSkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhGUkVFKHAsIGgsIHQpICAgICAgIHdjX0NyeXB0b0NiX0ludGVsUWFGcmVlKChwKSwgKGgpLCAodCkpCisgICAgICAgICAgICAgICAgI2RlZmluZSBYUkVBTExPQyhwLCBuLCBoLCB0KSB3Y19DcnlwdG9DYl9JbnRlbFFhUmVhbGxvYygocCksIChuKSwgKGgpLCAodCkpCisgICAgICAgICAgICAjZW5kaWYgLyogV09MRlNTTF9ERUJVR19NRU1PUlkgKi8KKyAgICAgICAgI2VuZGlmCisgICAgI2VsaWYgZGVmaW5lZChYTUFMTE9DX1VTRVIpCisgICAgICAgIC8qIHByb3RvdHlwZXMgZm9yIHVzZXIgaGVhcCBvdmVycmlkZSBmdW5jdGlvbnMgKi8KKyAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPiAgLyogZm9yIHNpemVfdCAqLworICAgICAgICBleHRlcm4gdm9pZCAqWE1BTExPQyhzaXplX3Qgbiwgdm9pZCogaGVhcCwgaW50IHR5cGUpOworICAgICAgICBleHRlcm4gdm9pZCAqWFJFQUxMT0Modm9pZCAqcCwgc2l6ZV90IG4sIHZvaWQqIGhlYXAsIGludCB0eXBlKTsKKyAgICAgICAgZXh0ZXJuIHZvaWQgWEZSRUUodm9pZCAqcCwgdm9pZCogaGVhcCwgaW50IHR5cGUpOworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9NRU1PUllfTE9HKQorICAgICAgICAjZGVmaW5lIFhNQUxMT0MobiwgaCwgdCkgICAgICAgIHhtYWxsb2MobiwgaCwgdCwgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXykKKyAgICAgICAgI2RlZmluZSBYUkVBTExPQyhwLCBuLCBoLCB0KSAgICB4cmVhbGxvYyhwLCBuLCBoLCB0LCBfX2Z1bmNfXywgIF9fRklMRV9fLCBfX0xJTkVfXykKKyAgICAgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0KSAgICAgICAgICB4ZnJlZShwLCBoLCB0LCBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKQorCisgICAgICAgIC8qIHByb3RvdHlwZXMgZm9yIHVzZXIgaGVhcCBvdmVycmlkZSBmdW5jdGlvbnMgKi8KKyAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPiAgLyogZm9yIHNpemVfdCAqLworICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQgKnhtYWxsb2Moc2l6ZV90IG4sIHZvaWQqIGhlYXAsIGludCB0eXBlLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZ1bmMsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGludCBsaW5lKTsKKyAgICAgICAgV09MRlNTTF9BUEkgdm9pZCAqeHJlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG4sIHZvaWQqIGhlYXAsIGludCB0eXBlLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZ1bmMsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGludCBsaW5lKTsKKyAgICAgICAgV09MRlNTTF9BUEkgdm9pZCB4ZnJlZSh2b2lkICpwLCB2b2lkKiBoZWFwLCBpbnQgdHlwZSwgY29uc3QgY2hhciogZnVuYywKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBpbnQgbGluZSk7CisgICAgI2VsaWYgZGVmaW5lZChYTUFMTE9DX09WRVJSSURFKQorICAgICAgICAvKiBvdmVycmlkZSB0aGUgWE1BTExPQywgWEZSRUUgYW5kIFhSRUFMTE9DIG1hY3JvcyAqLworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9URUxJVF9NMk1CKQorICAgICAgICAvKiBUZWxpdCBNMk1CIFNESyByZXF1aXJlcyB1c2UgbTJtYl9vcyBBUEkncywgbm90IHN0ZCBtYWxsb2MvZnJlZSAqLworICAgICAgICAvKiBVc2Ugb2YgbWFsbG9jL2ZyZWUgd2lsbCBjYXVzZSBDUFUgcmVib290ICovCisgICAgICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0KSAgICAgKCh2b2lkKWgsICh2b2lkKXQsIG0ybWJfb3NfbWFsbG9jKChzKSkpCisgICAgICAgICNkZWZpbmUgWEZSRUUocCwgaCwgdCkgICAgICAge3ZvaWQqIHhwID0gKHApOyBpZigoeHApKSBtMm1iX29zX2ZyZWUoKHhwKSk7fQorICAgICAgICAjZGVmaW5lIFhSRUFMTE9DKHAsIG4sIGgsIHQpIG0ybWJfb3NfcmVhbGxvYygocCksIChuKSkKKworICAgICNlbGlmIGRlZmluZWQoTk9fV09MRlNTTF9NRU1PUlkpCisgICAgICAgICNpZmRlZiBXT0xGU1NMX05PX01BTExPQworICAgICAgICAgICAgLyogdGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IGhlYXAgdXNlICovCisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9NQUxMT0NfQ0hFQ0sKKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgICAgICAgICAgICAgICBzdGF0aWMgaW5saW5lIHZvaWQqIG1hbGxvY19jaGVjayhzaXplX3Qgc3opIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ3b2xmU1NMX21hbGxvYyBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhNQUxMT0MocywgaCwgdCkgICAgIG1hbGxvY19jaGVjaygocykpCisgICAgICAgICAgICAgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0KQorICAgICAgICAgICAgICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgKE5VTEwpCisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0KSAgICAgKE5VTEwpCisgICAgICAgICAgICAgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0KQorICAgICAgICAgICAgICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgKE5VTEwpCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgLyoganVzdCB1c2UgcGxhaW4gQyBzdGRsaWIgc3R1ZmYgaWYgZGVzaXJlZCAqLworICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0KSAgICAgbWFsbG9jKChzaXplX3QpKHMpKQorICAgICAgICAjZGVmaW5lIFhGUkVFKHAsIGgsIHQpICAgICAgIHt2b2lkKiB4cCA9IChwKTsgaWYoKHhwKSkgZnJlZSgoeHApKTt9CisgICAgICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgcmVhbGxvYygocCksIChzaXplX3QpKG4pKQorICAgICAgICAjZW5kaWYKKworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9MSU5VWEtNKQorCS8qIHRoZSByZXF1aXNpdGUgbGludXgvc2xhYi5oIGlzIGluY2x1ZGVkIGluIHdjX3BvcnQuaCwgd2l0aCBpbmNvbXBhdGlibGUgd2FybmluZ3MgbWFza2VkIG91dC4gKi8KKyAgICAgICAgI2RlZmluZSBYTUFMTE9DKHMsIGgsIHQpICAgICAoeyh2b2lkKShoKTsgKHZvaWQpKHQpOyBrbWFsbG9jKHMsIEdGUF9LRVJORUwpO30pCisgICAgICAgICNkZWZpbmUgWEZSRUUocCwgaCwgdCkgICAgICAgKHt2b2lkKiBfeHA7ICh2b2lkKShoKTsgX3hwID0gKHApOyBpZihfeHApIGtmcmVlKF94cCk7fSkKKyAgICAgICAgI2RlZmluZSBYUkVBTExPQyhwLCBuLCBoLCB0KSAoeyh2b2lkKShoKTsgKHZvaWQpKHQpOyBrcmVhbGxvYygocCksIChuKSwgR0ZQX0tFUk5FTCk7fSkKKworICAgICNlbGlmICFkZWZpbmVkKE1JQ1JJVU1fTUFMTE9DKSAmJiAhZGVmaW5lZChFQlNORVQpIFwKKyAgICAgICAgICAgICYmICFkZWZpbmVkKFdPTEZTU0xfU0FGRVJUT1MpICYmICFkZWZpbmVkKEZSRUVTQ0FMRV9NUVgpIFwKKyAgICAgICAgICAgICYmICFkZWZpbmVkKEZSRUVTQ0FMRV9LU0RLX01RWCkgJiYgIWRlZmluZWQoRlJFRVNDQUxFX0ZSRUVfUlRPUykgXAorICAgICAgICAgICAgJiYgIWRlZmluZWQoV09MRlNTTF9MRUFOUFNLKSAmJiAhZGVmaW5lZChXT0xGU1NMX3VJVFJPTjQpCisgICAgICAgIC8qIGRlZmF1bHQgQyBydW50aW1lLCBjYW4gaW5zdGFsbCBkaWZmZXJlbnQgcm91dGluZXMgYXQgcnVudGltZSB2aWEgY2JzICovCisgICAgICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9tZW1vcnkuaD4KKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfU1RBVElDX01FTU9SWQorICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfREVCVUdfTUVNT1JZCisgICAgICAgICAgICAgICAgI2RlZmluZSBYTUFMTE9DKHMsIGgsIHQpICAgICB3b2xmU1NMX01hbGxvYygocyksIChoKSwgKHQpLCBfX2Z1bmNfXywgX19MSU5FX18pCisgICAgICAgICAgICAgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0KSAgICAgICB7dm9pZCogeHAgPSAocCk7IGlmKCh4cCkpIHdvbGZTU0xfRnJlZSgoeHApLCAoaCksICh0KSwgX19mdW5jX18sIF9fTElORV9fKTt9CisgICAgICAgICAgICAgICAgI2RlZmluZSBYUkVBTExPQyhwLCBuLCBoLCB0KSB3b2xmU1NMX1JlYWxsb2MoKHApLCAobiksIChoKSwgKHQpLCBfX2Z1bmNfXywgX19MSU5FX18pCisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNkZWZpbmUgWE1BTExPQyhzLCBoLCB0KSAgICAgd29sZlNTTF9NYWxsb2MoKHMpLCAoaCksICh0KSkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhGUkVFKHAsIGgsIHQpICAgICAgIHt2b2lkKiB4cCA9IChwKTsgaWYoKHhwKSkgd29sZlNTTF9GcmVlKCh4cCksIChoKSwgKHQpKTt9CisgICAgICAgICAgICAgICAgI2RlZmluZSBYUkVBTExPQyhwLCBuLCBoLCB0KSB3b2xmU1NMX1JlYWxsb2MoKHApLCAobiksIChoKSwgKHQpKQorICAgICAgICAgICAgI2VuZGlmIC8qIFdPTEZTU0xfREVCVUdfTUVNT1JZICovCisgICAgICAgICNlbGlmICFkZWZpbmVkKEZSRUVSVE9TKSAmJiAhZGVmaW5lZChGUkVFUlRPU19UQ1ApCisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9ERUJVR19NRU1PUlkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhNQUxMT0MocywgaCwgdCkgICAgICgodm9pZCloLCAodm9pZCl0LCB3b2xmU1NMX01hbGxvYygocyksIF9fZnVuY19fLCBfX0xJTkVfXykpCisgICAgICAgICAgICAgICAgI2RlZmluZSBYRlJFRShwLCBoLCB0KSAgICAgICB7dm9pZCogeHAgPSAocCk7IGlmKCh4cCkpIHdvbGZTU0xfRnJlZSgoeHApLCBfX2Z1bmNfXywgX19MSU5FX18pO30KKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhSRUFMTE9DKHAsIG4sIGgsIHQpIHdvbGZTU0xfUmVhbGxvYygocCksIChuKSwgX19mdW5jX18sIF9fTElORV9fKQorICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhNQUxMT0MocywgaCwgdCkgICAgICgodm9pZCloLCAodm9pZCl0LCB3b2xmU1NMX01hbGxvYygocykpKQorICAgICAgICAgICAgICAgICNkZWZpbmUgWEZSRUUocCwgaCwgdCkgICAgICAge3ZvaWQqIHhwID0gKHApOyBpZigoeHApKSB3b2xmU1NMX0ZyZWUoKHhwKSk7fQorICAgICAgICAgICAgICAgICNkZWZpbmUgWFJFQUxMT0MocCwgbiwgaCwgdCkgd29sZlNTTF9SZWFsbG9jKChwKSwgKG4pKQorICAgICAgICAgICAgI2VuZGlmIC8qIFdPTEZTU0xfREVCVUdfTUVNT1JZICovCisgICAgICAgICNlbmRpZiAvKiBXT0xGU1NMX1NUQVRJQ19NRU1PUlkgKi8KKyAgICAjZW5kaWYKKworICAgIC8qIGRlY2xhcmUvZnJlZSB2YXJpYWJsZSBoYW5kbGluZyBmb3IgYXN5bmMgYW5kIHNtYWxsc3RhY2sgKi8KKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX0FTWU5DX0NSWVBUKSB8fCBkZWZpbmVkKFdPTEZTU0xfU01BTExfU1RBQ0spCisgICAgICAgICNkZWZpbmUgREVDTEFSRV9WQVJfSVNfSEVBUF9BTExPQworICAgICAgICAjZGVmaW5lIERFQ0xBUkVfVkFSKFZBUl9OQU1FLCBWQVJfVFlQRSwgVkFSX1NJWkUsIEhFQVApIFwKKyAgICAgICAgICAgIFZBUl9UWVBFKiBWQVJfTkFNRSA9IChWQVJfVFlQRSopWE1BTExPQyhzaXplb2YoVkFSX1RZUEUpICogVkFSX1NJWkUsIChIRUFQKSwgRFlOQU1JQ19UWVBFX1dPTEZfQklHSU5UKQorICAgICAgICAjZGVmaW5lIERFQ0xBUkVfQVJSQVkoVkFSX05BTUUsIFZBUl9UWVBFLCBWQVJfSVRFTVMsIFZBUl9TSVpFLCBIRUFQKSBcCisgICAgICAgICAgICBWQVJfVFlQRSogVkFSX05BTUVbVkFSX0lURU1TXTsgXAorICAgICAgICAgICAgaW50IGlkeCMjVkFSX05BTUUsIGlubmVyX2lkeF8jI1ZBUl9OQU1FOyBcCisgICAgICAgICAgICBmb3IgKGlkeCMjVkFSX05BTUU9MDsgaWR4IyNWQVJfTkFNRTxWQVJfSVRFTVM7IGlkeCMjVkFSX05BTUUrKykgeyBcCisgICAgICAgICAgICAgICAgVkFSX05BTUVbaWR4IyNWQVJfTkFNRV0gPSAoVkFSX1RZUEUqKVhNQUxMT0MoVkFSX1NJWkUsIChIRUFQKSwgRFlOQU1JQ19UWVBFX1dPTEZfQklHSU5UKTsgXAorICAgICAgICAgICAgICAgIGlmIChWQVJfTkFNRVtpZHgjI1ZBUl9OQU1FXSA9PSBOVUxMKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbm5lcl9pZHhfIyNWQVJfTkFNRSA9IDA7IGlubmVyX2lkeF8jI1ZBUl9OQU1FIDwgaWR4IyNWQVJfTkFNRTsgaW5uZXJfaWR4XyMjVkFSX05BTUUrKykgeyBcCisgICAgICAgICAgICAgICAgICAgICAgICBYRlJFRShWQVJfTkFNRVtpbm5lcl9pZHhfIyNWQVJfTkFNRV0sIEhFQVAsIERZTkFNSUNfVFlQRV9XT0xGX0JJR0lOVCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBUl9OQU1FW2lubmVyX2lkeF8jI1ZBUl9OQU1FXSA9IE5VTEw7IFwKKyAgICAgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW5uZXJfaWR4XyMjVkFSX05BTUUgPSBpZHgjI1ZBUl9OQU1FICsgMTsgaW5uZXJfaWR4XyMjVkFSX05BTUUgPCBWQVJfSVRFTVM7IGlubmVyX2lkeF8jI1ZBUl9OQU1FKyspIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgVkFSX05BTUVbaW5uZXJfaWR4XyMjVkFSX05BTUVdID0gTlVMTDsgXAorICAgICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgIH0KKyAgICAgICAgI2RlZmluZSBGUkVFX1ZBUihWQVJfTkFNRSwgSEVBUCkgXAorICAgICAgICAgICAgWEZSRUUoVkFSX05BTUUsIChIRUFQKSwgRFlOQU1JQ19UWVBFX1dPTEZfQklHSU5UKTsKKyAgICAgICAgI2RlZmluZSBGUkVFX0FSUkFZKFZBUl9OQU1FLCBWQVJfSVRFTVMsIEhFQVApIFwKKyAgICAgICAgICAgIGZvciAoaWR4IyNWQVJfTkFNRT0wOyBpZHgjI1ZBUl9OQU1FPFZBUl9JVEVNUzsgaWR4IyNWQVJfTkFNRSsrKSB7IFwKKyAgICAgICAgICAgICAgICBYRlJFRShWQVJfTkFNRVtpZHgjI1ZBUl9OQU1FXSwgKEhFQVApLCBEWU5BTUlDX1RZUEVfV09MRl9CSUdJTlQpOyBcCisgICAgICAgICAgICB9CisKKyAgICAgICAgI2RlZmluZSBERUNMQVJFX0FSUkFZX0RZTkFNSUNfREVDKFZBUl9OQU1FLCBWQVJfVFlQRSwgVkFSX0lURU1TLCBWQVJfU0laRSwgSEVBUCkgXAorICAgICAgICAgICAgREVDTEFSRV9BUlJBWShWQVJfTkFNRSwgVkFSX1RZUEUsIFZBUl9JVEVNUywgVkFSX1NJWkUsIEhFQVApCisgICAgICAgICNkZWZpbmUgREVDTEFSRV9BUlJBWV9EWU5BTUlDX0VYRShWQVJfTkFNRSwgVkFSX1RZUEUsIFZBUl9JVEVNUywgVkFSX1NJWkUsIEhFQVApCisgICAgICAgICNkZWZpbmUgRlJFRV9BUlJBWV9EWU5BTUlDKFZBUl9OQU1FLCBWQVJfSVRFTVMsIEhFQVApIFwKKyAgICAgICAgICAgIEZSRUVfQVJSQVkoVkFSX05BTUUsIFZBUl9JVEVNUywgSEVBUCkKKyAgICAjZWxzZQorICAgICAgICAjdW5kZWYgREVDTEFSRV9WQVJfSVNfSEVBUF9BTExPQworICAgICAgICAjZGVmaW5lIERFQ0xBUkVfVkFSKFZBUl9OQU1FLCBWQVJfVFlQRSwgVkFSX1NJWkUsIEhFQVApIFwKKyAgICAgICAgICAgIFZBUl9UWVBFIFZBUl9OQU1FW1ZBUl9TSVpFXQorICAgICAgICAjZGVmaW5lIERFQ0xBUkVfQVJSQVkoVkFSX05BTUUsIFZBUl9UWVBFLCBWQVJfSVRFTVMsIFZBUl9TSVpFLCBIRUFQKSBcCisgICAgICAgICAgICBWQVJfVFlQRSBWQVJfTkFNRVtWQVJfSVRFTVNdW1ZBUl9TSVpFXQorICAgICAgICAjZGVmaW5lIEZSRUVfVkFSKFZBUl9OQU1FLCBIRUFQKSAvKiBub3RoaW5nIHRvIGZyZWUsIGl0cyBzdGFjayAqLworICAgICAgICAjZGVmaW5lIEZSRUVfQVJSQVkoVkFSX05BTUUsIFZBUl9JVEVNUywgSEVBUCkgIC8qIG5vdGhpbmcgdG8gZnJlZSwgaXRzIHN0YWNrICovCisKKyAgICAgICAgI2RlZmluZSBERUNMQVJFX0FSUkFZX0RZTkFNSUNfREVDKFZBUl9OQU1FLCBWQVJfVFlQRSwgVkFSX0lURU1TLCBWQVJfU0laRSwgSEVBUCkgXAorICAgICAgICAgICAgVkFSX1RZUEUqIFZBUl9OQU1FW1ZBUl9JVEVNU107IFwKKyAgICAgICAgICAgIGludCBpZHgjI1ZBUl9OQU1FLCBpbm5lcl9pZHhfIyNWQVJfTkFNRTsKKyAgICAgICAgI2RlZmluZSBERUNMQVJFX0FSUkFZX0RZTkFNSUNfRVhFKFZBUl9OQU1FLCBWQVJfVFlQRSwgVkFSX0lURU1TLCBWQVJfU0laRSwgSEVBUCkgXAorICAgICAgICAgICAgZm9yIChpZHgjI1ZBUl9OQU1FPTA7IGlkeCMjVkFSX05BTUU8VkFSX0lURU1TOyBpZHgjI1ZBUl9OQU1FKyspIHsgXAorICAgICAgICAgICAgICAgIFZBUl9OQU1FW2lkeCMjVkFSX05BTUVdID0gKFZBUl9UWVBFKilYTUFMTE9DKFZBUl9TSVpFLCAoSEVBUCksIERZTkFNSUNfVFlQRV9UTVBfQlVGRkVSKTsgXAorICAgICAgICAgICAgICAgIGlmIChWQVJfTkFNRVtpZHgjI1ZBUl9OQU1FXSA9PSBOVUxMKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbm5lcl9pZHhfIyNWQVJfTkFNRSA9IDA7IGlubmVyX2lkeF8jI1ZBUl9OQU1FIDwgaWR4IyNWQVJfTkFNRTsgaW5uZXJfaWR4XyMjVkFSX05BTUUrKykgeyBcCisgICAgICAgICAgICAgICAgICAgICAgICBYRlJFRShWQVJfTkFNRVtpbm5lcl9pZHhfIyNWQVJfTkFNRV0sIEhFQVAsIERZTkFNSUNfVFlQRV9UTVBfQlVGRkVSKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgVkFSX05BTUVbaW5uZXJfaWR4XyMjVkFSX05BTUVdID0gTlVMTDsgXAorICAgICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbm5lcl9pZHhfIyNWQVJfTkFNRSA9IGlkeCMjVkFSX05BTUUgKyAxOyBpbm5lcl9pZHhfIyNWQVJfTkFNRSA8IFZBUl9JVEVNUzsgaW5uZXJfaWR4XyMjVkFSX05BTUUrKykgeyBcCisgICAgICAgICAgICAgICAgICAgICAgICBWQVJfTkFNRVtpbm5lcl9pZHhfIyNWQVJfTkFNRV0gPSBOVUxMOyBcCisgICAgICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgICAgICBicmVhazsgXAorICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgfQorICAgICAgICAjZGVmaW5lIEZSRUVfQVJSQVlfRFlOQU1JQyhWQVJfTkFNRSwgVkFSX0lURU1TLCBIRUFQKSBcCisgICAgICAgICAgICBmb3IgKGlkeCMjVkFSX05BTUU9MDsgaWR4IyNWQVJfTkFNRTxWQVJfSVRFTVM7IGlkeCMjVkFSX05BTUUrKykgeyBcCisgICAgICAgICAgICAgICAgWEZSRUUoVkFSX05BTUVbaWR4IyNWQVJfTkFNRV0sIChIRUFQKSwgRFlOQU1JQ19UWVBFX1RNUF9CVUZGRVIpOyBcCisgICAgICAgICAgICB9CisgICAgI2VuZGlmCisKKyAgICAjaWYgIWRlZmluZWQoVVNFX1dPTEZfU1RSVE9LKSAmJiBcCisgICAgICAgICAgICAoKGRlZmluZWQoX19NSU5HVzMyX18pICYmICFkZWZpbmVkKF9fTUlOR1c2NF9WRVJTSU9OX01BSk9SKSkgfHwgXAorICAgICAgICAgICAgIGRlZmluZWQoV09MRlNTTF9USVJUT1MpIHx8IGRlZmluZWQoV09MRl9DOTkpKQorICAgICAgICAjZGVmaW5lIFVTRV9XT0xGX1NUUlRPSworICAgICNlbmRpZgorICAgICNpZiAhZGVmaW5lZChVU0VfV09MRl9TVFJTRVApICYmIChkZWZpbmVkKFdPTEZfQzk5KSkKKyAgICAgICAgI2RlZmluZSBVU0VfV09MRl9TVFJTRVAKKyAgICAjZW5kaWYKKworCSNpZm5kZWYgU1RSSU5HX1VTRVIKKyAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9MSU5VWEtNKQorICAgICAgICAgICAgI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICAgICAjZW5kaWYKKworCSAgICAjZGVmaW5lIFhNRU1DUFkoZCxzLGwpICAgIG1lbWNweSgoZCksKHMpLChsKSkKKwkgICAgI2RlZmluZSBYTUVNU0VUKGIsYyxsKSAgICBtZW1zZXQoKGIpLChjKSwobCkpCisJICAgICNkZWZpbmUgWE1FTUNNUChzMSxzMixuKSAgbWVtY21wKChzMSksKHMyKSwobikpCisJICAgICNkZWZpbmUgWE1FTU1PVkUoZCxzLGwpICAgbWVtbW92ZSgoZCksKHMpLChsKSkKKworICAgICAgICAjZGVmaW5lIFhTVFJMRU4oczEpICAgICAgIHN0cmxlbigoczEpKQorICAgICAgICAjZGVmaW5lIFhTVFJOQ1BZKHMxLHMyLG4pIHN0cm5jcHkoKHMxKSwoczIpLChuKSkKKyAgICAgICAgLyogc3Ryc3RyLCBzdHJuY21wLCBzdHJjbXAsIGFuZCBzdHJuY2F0IG9ubHkgdXNlZCBieSB3b2xmU1NMIHByb3BlciwKKyAgICAgICAgICogbm90IHJlcXVpcmVkIGZvciB3b2xmQ3J5cHQgb25seSAqLworICAgICAgICAjZGVmaW5lIFhTVFJTVFIoczEsczIpICAgIHN0cnN0cigoczEpLChzMikpCisgICAgICAgICNkZWZpbmUgWFNUUk5TVFIoczEsczIsbikgbXlzdHJuc3RyKChzMSksKHMyKSwobikpCisgICAgICAgICNkZWZpbmUgWFNUUk5DTVAoczEsczIsbikgc3RybmNtcCgoczEpLChzMiksKG4pKQorICAgICAgICAjZGVmaW5lIFhTVFJDTVAoczEsczIpICAgIHN0cmNtcCgoczEpLChzMikpCisgICAgICAgICNkZWZpbmUgWFNUUk5DQVQoczEsczIsbikgc3RybmNhdCgoczEpLChzMiksKG4pKQorCisgICAgICAgICNpZmRlZiBVU0VfV09MRl9TVFJTRVAKKyAgICAgICAgICAgICNkZWZpbmUgWFNUUlNFUChzMSxkKSB3Y19zdHJzZXAoKHMxKSwoZCkpCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAjZGVmaW5lIFhTVFJTRVAoczEsZCkgc3Ryc2VwKChzMSksKGQpKQorICAgICAgICAjZW5kaWYKKworICAgICAgICAjaWZuZGVmIFhTVFJOQ0FTRUNNUAorICAgICAgICAjaWYgZGVmaW5lZChNSUNST0NISVBfUElDMzIpIHx8IGRlZmluZWQoV09MRlNTTF9USVJUT1MpIHx8IFwKKyAgICAgICAgICAgICAgICBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgICAgICAgICAgLyogWEMzMiBkb2VzIG5vdCBzdXBwb3J0IHN0cm5jYXNlY21wLCBzbyB1c2UgY2FzZSBzZW5zaXRpdmUgb25lICovCisgICAgICAgICAgICAjZGVmaW5lIFhTVFJOQ0FTRUNNUChzMSxzMixuKSBzdHJuY21wKChzMSksKHMyKSwobikpCisgICAgICAgICNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1NfQVBJKSB8fCBkZWZpbmVkKEZSRUVSVE9TX1RDUF9XSU5TSU0pCisgICAgICAgICAgICAjZGVmaW5lIFhTVFJOQ0FTRUNNUChzMSxzMixuKSBfc3RybmljbXAoKHMxKSwoczIpLChuKSkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNpZiBkZWZpbmVkKEhBVkVfU1RSSU5HU19IKSAmJiBkZWZpbmVkKFdPTEZfQzk5KSAmJiBcCisgICAgICAgICAgICAgICAgIWRlZmluZWQoV09MRlNTTF9TR1gpCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9ERU9TKQorICAgICAgICAgICAgICAgICNkZWZpbmUgWFNUUk5DQVNFQ01QKHMxLHMyLG4pIHN0cm5pY21wKChzMSksKHMyKSwobikpCisgICAgICAgICAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfQ01TSVNfUlRPU3YyKQorICAgICAgICAgICAgICAgICNkZWZpbmUgWFNUUk5DQVNFQ01QKHMxLHMyLG4pIHN0cm5jbXAoKHMxKSwoczIpLChuKSkKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBYU1RSTkNBU0VDTVAoczEsczIsbikgc3RybmNhc2VjbXAoKHMxKSwoczIpLChuKSkKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VuZGlmIC8qICFYU1RSTkNBU0VDTVAgKi8KKworICAgICAgICAvKiBzbnByaW50ZiBpcyB1c2VkIGluIGFzbi5jIGZvciBHZXRUaW1lU3RyaW5nLCBQS0NTNyB0ZXN0LCBhbmQgd2hlbgorICAgICAgICAgICBkZWJ1Z2dpbmcgaXMgdHVybmVkIG9uICovCisgICAgICAgICNpZm5kZWYgVVNFX1dJTkRPV1NfQVBJCisgICAgICAgICAgICAjaWZuZGVmIFhTTlBSSU5URgorICAgICAgICAgICAgI2lmIGRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgKGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgXAorICAgICAgICAgICAgICAgICAgIGRlZmluZWQoSEFWRV9QS0NTNykpICYmICFkZWZpbmVkKE5PX1NURElPX0ZJTEVTWVNURU0pCisgICAgICAgICAgICAgICAgLyogY2FzZSB3aGVyZSBzdGRpbyBpcyBub3QgaW5jbHVkZWQgZWxzZSB3aGVyZSBidXQgaXMgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgZm9yIHNucHJpbnRmICovCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfRVNQSURGKSAmJiBcCisgICAgICAgICAgICAgICAgKCFkZWZpbmVkKE5PX0FTTl9USU1FKSAmJiBkZWZpbmVkKEhBVkVfUEtDUzcpKQorICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZTxzdGRhcmcuaD4KKyAgICAgICAgICAgICAgICAgICAgLyogbGF0ZXIgZ2NjIHRoYW4gNy4xIGludHJvZHVjZXMgLVdmb3JtYXQtdHJ1bmNhdGlvbiAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiBJbiBjYXNlcyB3aGVuIHRydW5jYXRpb24gaXMgZXhwZWN0ZWQgdGhlIGNhbGxlciBuZWVkcyovCisgICAgICAgICAgICAgICAgICAgIC8qIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24gc28gdGhhdCAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogY29tcGlsZXIgZG9lc24ndCBjb21wbGFpbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiB4dGVuc2EtZXNwMzItZWxmIHY4LjIuMCB3YXJucyB0cmFuY2F0aW9uIGF0ICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qIEdldEFzblRpbWVTdHJpbmcoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIFdDX0lOTElORQorICAgICAgICAgICAgICAgICAgICBpbnQgX3hzbnByaW50Zl8oY2hhciAqcywgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFwOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpbnQpbiA8PSAwKSByZXR1cm4gLTE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBYVlNOUFJJTlRGKHMsIG4sIGZvcm1hdCwgYXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLTE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2VuZChhcCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhTTlBSSU5URiBfeHNucHJpbnRmXworICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhTTlBSSU5URiBzbnByaW50ZgorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19NSU5HVzMyX18pCisgICAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxOTAwKQorICAgICAgICAgICAgICAgICAgICAvKiBCZWdpbm5pbmcgd2l0aCB0aGUgVUNSVCBpbiBWaXN1YWwgU3R1ZGlvIDIwMTUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvd3MgMTAsIHNucHJpbnRmIGlzIG5vIGxvbmdlciBpZGVudGljYWwgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgX3NucHJpbnRmLiBUaGUgc25wcmludGYgZnVuY3Rpb24gYmVoYXZpb3IgaXMgbm93CisgICAgICAgICAgICAgICAgICAgICAgIEM5OSBzdGFuZGFyZCBjb21wbGlhbnQuICovCisgICAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIFhTTlBSSU5URiBzbnByaW50ZgorICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAgIC8qIDQ5OTYgd2FybmluZyB0byB1c2UgTVMgZXh0ZW5zaW9ucyBlLmcuLCBfc3ByaW50Zl9zCisgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgX3NucHJpbnRmICovCisgICAgICAgICAgICAgICAgICAgICNpZiAhZGVmaW5lZChfX01JTkdXMzJfXykKKyAgICAgICAgICAgICAgICAgICAgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ5OTYpCisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBzdGF0aWMgV0NfSU5MSU5FCisgICAgICAgICAgICAgICAgICAgIGludCB4c25wcmludGYoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaW50KWJ1ZnNpemUgPD0gMCkgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBYVlNOUFJJTlRGKGJ1ZmZlciwgYnVmc2l6ZSwgZm9ybWF0LCBhcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID49IChpbnQpYnVmc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2VuZChhcCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICNkZWZpbmUgWFNOUFJJTlRGIHhzbnByaW50ZgorICAgICAgICAgICAgICAgICNlbmRpZiAvKiAoX01TQ19WRVIgPj0gMTkwMCkgKi8KKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBYU05QUklOVEYgc25wcmludGYKKyAgICAgICAgICAgICNlbmRpZiAvKiBfTVNDX1ZFUiAqLworICAgICAgICAjZW5kaWYgLyogVVNFX1dJTkRPV1NfQVBJICovCisKKyAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9DRVJUX0VYVCkgfHwgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSBcCisgICAgICAgICAgICAgICAgICAgIHx8IGRlZmluZWQoSEFWRV9BTFBOKQorICAgICAgICAgICAgLyogdXNlIG9ubHkgVGhyZWFkIFNhZmUgdmVyc2lvbiBvZiBzdHJ0b2sgKi8KKyAgICAgICAgICAgICNpZiBkZWZpbmVkKFVTRV9XT0xGX1NUUlRPSykKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFhTVFJUT0soczEsZCxwdHIpIHdjX3N0cnRvaygoczEpLChkKSwocHRyKSkKKyAgICAgICAgICAgICNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1NfQVBJKSB8fCBkZWZpbmVkKElOVElNRV9SVE9TKQorICAgICAgICAgICAgICAgICNkZWZpbmUgWFNUUlRPSyhzMSxkLHB0cikgc3RydG9rX3MoKHMxKSwoZCksKHB0cikpCisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNkZWZpbmUgWFNUUlRPSyhzMSxkLHB0cikgc3RydG9rX3IoKHMxKSwoZCksKHB0cikpCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9DRVJUX0VYVCkgfHwgZGVmaW5lZChIQVZFX09DU1ApIHx8IFwKKyAgICAgICAgICAgIGRlZmluZWQoSEFWRV9DUkxfSU8pIHx8IGRlZmluZWQoSEFWRV9IVFRQX0NMSUVOVCkgfHwgXAorICAgICAgICAgICAgIWRlZmluZWQoTk9fQ1JZUFRfQkVOQ0hNQVJLKQorCisgICAgICAgICAgICAjaWZuZGVmIFhBVE9JIC8qIGlmIGN1c3RvbSBYQVRPSSBpcyBub3QgYWxyZWFkeSBkZWZpbmVkICovCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgICAgICNkZWZpbmUgWEFUT0kocykgICAgICAgICAgYXRvaSgocykpCisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisKKyAgICAjaWZkZWYgVVNFX1dPTEZfU1RSVE9LCisgICAgICAgIFdPTEZTU0xfQVBJIGNoYXIqIHdjX3N0cnRvayhjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmRlbGltLCBjaGFyICoqbmV4dHApOworICAgICNlbmRpZgorICAgICNpZmRlZiBVU0VfV09MRl9TVFJTRVAKKyAgICAgICAgV09MRlNTTF9BUEkgY2hhciogd2Nfc3Ryc2VwKGNoYXIgKipzdHJpbmdwLCBjb25zdCBjaGFyICpkZWxpbSk7CisgICAgI2VuZGlmCisKKyAgICAjaWYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSAmJiBcCisgICAgICAgICFkZWZpbmVkKE5PX1NURElPX0ZJTEVTWVNURU0pCisgICAgICAgICNpZm5kZWYgWEdFVEVOVgorICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgI2RlZmluZSBYR0VURU5WIGdldGVudgorICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSAqLworCisJI2lmbmRlZiBDVFlQRV9VU0VSCisgICAgICAgICAgICAjaWZuZGVmIFdPTEZTU0xfTElOVVhLTQorICAgICAgICAgICAgICAgICNpbmNsdWRlIDxjdHlwZS5oPgorICAgICAgICAgICAgI2VuZGlmCisJICAgICNpZiBkZWZpbmVkKEhBVkVfRUNDKSB8fCBkZWZpbmVkKEhBVkVfT0NTUCkgfHwgXAorICAgICAgICAgICAgZGVmaW5lZChXT0xGU1NMX0tFWV9HRU4pIHx8ICFkZWZpbmVkKE5PX0RTQSkgfHwgXAorICAgICAgICAgICAgZGVmaW5lZChPUEVOU1NMX0VYVFJBKQorICAgICAgICAgICAgI2RlZmluZSBYVE9VUFBFUihjKSAgICAgdG91cHBlcigoYykpCisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZkZWYgT1BFTlNTTF9BTEwKKyAgICAgICAgI2RlZmluZSBYSVNBTE5VTShjKSAgICAgaXNhbG51bSgoYykpCisgICAgICAgICNkZWZpbmUgWElTQVNDSUkoYykgICAgIGlzYXNjaWkoKGMpKQorICAgICAgICAjZGVmaW5lIFhJU1NQQUNFKGMpICAgICBpc3NwYWNlKChjKSkKKyAgICAgICAgI2VuZGlmCisgICAgICAgIC8qIG5lZWRlZCBieSB3b2xmU1NMX2NoZWNrX2RvbWFpbl9uYW1lKCkgKi8KKyAgICAgICAgI2RlZmluZSBYVE9MT1dFUihjKSAgICAgIHRvbG93ZXIoKGMpKQorICAgICNlbmRpZgorCisKKyAgICAvKiBtZW1vcnkgYWxsb2NhdGlvbiB0eXBlcyBmb3IgdXNlciBoaW50cyAqLworICAgIGVudW0geworICAgICAgICBEWU5BTUlDX1RZUEVfQ0EgICAgICAgICAgID0gMSwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0NFUlQgICAgICAgICA9IDIsCisgICAgICAgIERZTkFNSUNfVFlQRV9LRVkgICAgICAgICAgPSAzLAorICAgICAgICBEWU5BTUlDX1RZUEVfRklMRSAgICAgICAgID0gNCwKKyAgICAgICAgRFlOQU1JQ19UWVBFX1NVQkpFQ1RfQ04gICA9IDUsCisgICAgICAgIERZTkFNSUNfVFlQRV9QVUJMSUNfS0VZICAgPSA2LAorICAgICAgICBEWU5BTUlDX1RZUEVfU0lHTkVSICAgICAgID0gNywKKyAgICAgICAgRFlOQU1JQ19UWVBFX05PTkUgICAgICAgICA9IDgsCisgICAgICAgIERZTkFNSUNfVFlQRV9CSUdJTlQgICAgICAgPSA5LAorICAgICAgICBEWU5BTUlDX1RZUEVfUlNBICAgICAgICAgID0gMTAsCisgICAgICAgIERZTkFNSUNfVFlQRV9NRVRIT0QgICAgICAgPSAxMSwKKyAgICAgICAgRFlOQU1JQ19UWVBFX09VVF9CVUZGRVIgICA9IDEyLAorICAgICAgICBEWU5BTUlDX1RZUEVfSU5fQlVGRkVSICAgID0gMTMsCisgICAgICAgIERZTkFNSUNfVFlQRV9JTkZPICAgICAgICAgPSAxNCwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0RIICAgICAgICAgICA9IDE1LAorICAgICAgICBEWU5BTUlDX1RZUEVfRE9NQUlOICAgICAgID0gMTYsCisgICAgICAgIERZTkFNSUNfVFlQRV9TU0wgICAgICAgICAgPSAxNywKKyAgICAgICAgRFlOQU1JQ19UWVBFX0NUWCAgICAgICAgICA9IDE4LAorICAgICAgICBEWU5BTUlDX1RZUEVfV1JJVEVWICAgICAgID0gMTksCisgICAgICAgIERZTkFNSUNfVFlQRV9PUEVOU1NMICAgICAgPSAyMCwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0RTQSAgICAgICAgICA9IDIxLAorICAgICAgICBEWU5BTUlDX1RZUEVfQ1JMICAgICAgICAgID0gMjIsCisgICAgICAgIERZTkFNSUNfVFlQRV9SRVZPS0VEICAgICAgPSAyMywKKyAgICAgICAgRFlOQU1JQ19UWVBFX0NSTF9FTlRSWSAgICA9IDI0LAorICAgICAgICBEWU5BTUlDX1RZUEVfQ0VSVF9NQU5BR0VSID0gMjUsCisgICAgICAgIERZTkFNSUNfVFlQRV9DUkxfTU9OSVRPUiAgPSAyNiwKKyAgICAgICAgRFlOQU1JQ19UWVBFX09DU1BfU1RBVFVTICA9IDI3LAorICAgICAgICBEWU5BTUlDX1RZUEVfT0NTUF9FTlRSWSAgID0gMjgsCisgICAgICAgIERZTkFNSUNfVFlQRV9BTFROQU1FICAgICAgPSAyOSwKKyAgICAgICAgRFlOQU1JQ19UWVBFX1NVSVRFUyAgICAgICA9IDMwLAorICAgICAgICBEWU5BTUlDX1RZUEVfQ0lQSEVSICAgICAgID0gMzEsCisgICAgICAgIERZTkFNSUNfVFlQRV9STkcgICAgICAgICAgPSAzMiwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0FSUkFZUyAgICAgICA9IDMzLAorICAgICAgICBEWU5BTUlDX1RZUEVfRFRMU19QT09MICAgID0gMzQsCisgICAgICAgIERZTkFNSUNfVFlQRV9TT0NLQUREUiAgICAgPSAzNSwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0xJQlogICAgICAgICA9IDM2LAorICAgICAgICBEWU5BTUlDX1RZUEVfRUNDICAgICAgICAgID0gMzcsCisgICAgICAgIERZTkFNSUNfVFlQRV9UTVBfQlVGRkVSICAgPSAzOCwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0RUTFNfTVNHICAgICA9IDM5LAorICAgICAgICBEWU5BTUlDX1RZUEVfWDUwOSAgICAgICAgID0gNDAsCisgICAgICAgIERZTkFNSUNfVFlQRV9UTFNYICAgICAgICAgPSA0MSwKKyAgICAgICAgRFlOQU1JQ19UWVBFX09DU1AgICAgICAgICA9IDQyLAorICAgICAgICBEWU5BTUlDX1RZUEVfU0lHTkFUVVJFICAgID0gNDMsCisgICAgICAgIERZTkFNSUNfVFlQRV9IQVNIRVMgICAgICAgPSA0NCwKKyAgICAgICAgRFlOQU1JQ19UWVBFX1NSUCAgICAgICAgICA9IDQ1LAorICAgICAgICBEWU5BTUlDX1RZUEVfQ09PS0lFX1BXRCAgID0gNDYsCisgICAgICAgIERZTkFNSUNfVFlQRV9VU0VSX0NSWVBUTyAgPSA0NywKKyAgICAgICAgRFlOQU1JQ19UWVBFX09DU1BfUkVRVUVTVCA9IDQ4LAorICAgICAgICBEWU5BTUlDX1RZUEVfWDUwOV9FWFQgICAgID0gNDksCisgICAgICAgIERZTkFNSUNfVFlQRV9YNTA5X1NUT1JFICAgPSA1MCwKKyAgICAgICAgRFlOQU1JQ19UWVBFX1g1MDlfQ1RYICAgICA9IDUxLAorICAgICAgICBEWU5BTUlDX1RZUEVfVVJMICAgICAgICAgID0gNTIsCisgICAgICAgIERZTkFNSUNfVFlQRV9EVExTX0ZSQUcgICAgPSA1MywKKyAgICAgICAgRFlOQU1JQ19UWVBFX0RUTFNfQlVGRkVSICA9IDU0LAorICAgICAgICBEWU5BTUlDX1RZUEVfU0VTU0lPTl9USUNLID0gNTUsCisgICAgICAgIERZTkFNSUNfVFlQRV9QS0NTICAgICAgICAgPSA1NiwKKyAgICAgICAgRFlOQU1JQ19UWVBFX01VVEVYICAgICAgICA9IDU3LAorICAgICAgICBEWU5BTUlDX1RZUEVfUEtDUzcgICAgICAgID0gNTgsCisgICAgICAgIERZTkFNSUNfVFlQRV9BRVNfQlVGRkVSICAgPSA1OSwKKyAgICAgICAgRFlOQU1JQ19UWVBFX1dPTEZfQklHSU5UICA9IDYwLAorICAgICAgICBEWU5BTUlDX1RZUEVfQVNOMSAgICAgICAgID0gNjEsCisgICAgICAgIERZTkFNSUNfVFlQRV9MT0cgICAgICAgICAgPSA2MiwKKyAgICAgICAgRFlOQU1JQ19UWVBFX1dSSVRFRFVQICAgICA9IDYzLAorICAgICAgICBEWU5BTUlDX1RZUEVfUFJJVkFURV9LRVkgID0gNjQsCisgICAgICAgIERZTkFNSUNfVFlQRV9ITUFDICAgICAgICAgPSA2NSwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0FTWU5DICAgICAgICA9IDY2LAorICAgICAgICBEWU5BTUlDX1RZUEVfQVNZTkNfTlVNQSAgID0gNjcsCisgICAgICAgIERZTkFNSUNfVFlQRV9BU1lOQ19OVU1BNjQgPSA2OCwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0NVUlZFMjU1MTkgICA9IDY5LAorICAgICAgICBEWU5BTUlDX1RZUEVfRUQyNTUxOSAgICAgID0gNzAsCisgICAgICAgIERZTkFNSUNfVFlQRV9TRUNSRVQgICAgICAgPSA3MSwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0RJR0VTVCAgICAgICA9IDcyLAorICAgICAgICBEWU5BTUlDX1RZUEVfUlNBX0JVRkZFUiAgID0gNzMsCisgICAgICAgIERZTkFNSUNfVFlQRV9EQ0VSVCAgICAgICAgPSA3NCwKKyAgICAgICAgRFlOQU1JQ19UWVBFX1NUUklORyAgICAgICA9IDc1LAorICAgICAgICBEWU5BTUlDX1RZUEVfUEVNICAgICAgICAgID0gNzYsCisgICAgICAgIERZTkFNSUNfVFlQRV9ERVIgICAgICAgICAgPSA3NywKKyAgICAgICAgRFlOQU1JQ19UWVBFX0NFUlRfRVhUICAgICA9IDc4LAorICAgICAgICBEWU5BTUlDX1RZUEVfQUxQTiAgICAgICAgID0gNzksCisgICAgICAgIERZTkFNSUNfVFlQRV9FTkNSWVBURURJTkZPPSA4MCwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0RJUkNUWCAgICAgICA9IDgxLAorICAgICAgICBEWU5BTUlDX1RZUEVfSEFTSENUWCAgICAgID0gODIsCisgICAgICAgIERZTkFNSUNfVFlQRV9TRUVEICAgICAgICAgPSA4MywKKyAgICAgICAgRFlOQU1JQ19UWVBFX1NZTU1FVFJJQ19LRVk9IDg0LAorICAgICAgICBEWU5BTUlDX1RZUEVfRUNDX0JVRkZFUiAgID0gODUsCisgICAgICAgIERZTkFNSUNfVFlQRV9RU0ggICAgICAgICAgPSA4NiwKKyAgICAgICAgRFlOQU1JQ19UWVBFX1NBTFQgICAgICAgICA9IDg3LAorICAgICAgICBEWU5BTUlDX1RZUEVfSEFTSF9UTVAgICAgID0gODgsCisgICAgICAgIERZTkFNSUNfVFlQRV9CTE9CICAgICAgICAgPSA4OSwKKyAgICAgICAgRFlOQU1JQ19UWVBFX05BTUVfRU5UUlkgICA9IDkwLAorICAgICAgICBEWU5BTUlDX1RZUEVfQ1VSVkU0NDggICAgID0gOTEsCisgICAgICAgIERZTkFNSUNfVFlQRV9FRDQ0OCAgICAgICAgPSA5MiwKKyAgICAgICAgRFlOQU1JQ19UWVBFX0FFUyAgICAgICAgICA9IDkzLAorICAgICAgICBEWU5BTUlDX1RZUEVfQ01BQyAgICAgICAgID0gOTQsCisgICAgICAgIERZTkFNSUNfVFlQRV9TTklGRkVSX1NFUlZFUiAgICAgPSAxMDAwLAorICAgICAgICBEWU5BTUlDX1RZUEVfU05JRkZFUl9TRVNTSU9OICAgID0gMTAwMSwKKyAgICAgICAgRFlOQU1JQ19UWVBFX1NOSUZGRVJfUEIgICAgICAgICA9IDEwMDIsCisgICAgICAgIERZTkFNSUNfVFlQRV9TTklGRkVSX1BCX0JVRkZFUiAgPSAxMDAzLAorICAgICAgICBEWU5BTUlDX1RZUEVfU05JRkZFUl9USUNLRVRfSUQgID0gMTAwNCwKKyAgICAgICAgRFlOQU1JQ19UWVBFX1NOSUZGRVJfTkFNRURfS0VZICA9IDEwMDUsCisgICAgfTsKKworICAgIC8qIG1heCBlcnJvciBidWZmZXIgc3RyaW5nIHNpemUgKi8KKyAgICAjaWZuZGVmIFdPTEZTU0xfTUFYX0VSUk9SX1NaCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9NQVhfRVJST1JfU1ogODAKKyAgICAjZW5kaWYKKworICAgIC8qIHN0YWNrIHByb3RlY3Rpb24gKi8KKyAgICBlbnVtIHsKKyAgICAgICAgTUlOX1NUQUNLX0JVRkZFUiA9IDgKKyAgICB9OworCisKKyAgICAvKiBBbGdvcml0aG0gVHlwZXMgKi8KKyAgICBlbnVtIHdjX0FsZ29UeXBlIHsKKyAgICAgICAgV0NfQUxHT19UWVBFX05PTkUgPSAwLAorICAgICAgICBXQ19BTEdPX1RZUEVfSEFTSCA9IDEsCisgICAgICAgIFdDX0FMR09fVFlQRV9DSVBIRVIgPSAyLAorICAgICAgICBXQ19BTEdPX1RZUEVfUEsgPSAzLAorICAgICAgICBXQ19BTEdPX1RZUEVfUk5HID0gNCwKKyAgICAgICAgV0NfQUxHT19UWVBFX1NFRUQgPSA1LAorICAgICAgICBXQ19BTEdPX1RZUEVfSE1BQyA9IDYsCisgICAgICAgIFdDX0FMR09fVFlQRV9DTUFDID0gNywKKworICAgICAgICBXQ19BTEdPX1RZUEVfTUFYID0gV0NfQUxHT19UWVBFX0NNQUMKKyAgICB9OworCisgICAgLyogaGFzaCB0eXBlcyAqLworICAgIGVudW0gd2NfSGFzaFR5cGUgeworICAgICNpZiBkZWZpbmVkKEhBVkVfU0VMRlRFU1QpIHx8IGRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgICAgIChkZWZpbmVkKEhBVkVfRklQU19WRVJTSU9OKSAmJiAoSEFWRV9GSVBTX1ZFUlNJT04gPD0gMikpCisgICAgICAgIC8qIEluIHNlbGZ0ZXN0IGJ1aWxkLCBXQ18qIHR5cGVzIGFyZSBub3QgbWFwcGVkIHRvIFdDX0hBU0hfVFlQRSB0eXBlcy4KKyAgICAgICAgICogVmFsdWVzIGhlcmUgYXJlIGJhc2VkIG9uIG9sZCBzZWxmdGVzdCBobWFjLmggZW51bSwgd2l0aCBhZGRpdGlvbnMuCisgICAgICAgICAqIFRoZXNlIHZhbHVlcyBhcmUgZml4ZWQgZm9yIGJhY2t3YXJkcyBGSVBTIGNvbXBhdGliaWxpdHkgKi8KKyAgICAgICAgV0NfSEFTSF9UWVBFX05PTkUgPSAxNSwKKyAgICAgICAgV0NfSEFTSF9UWVBFX01EMiA9IDE2LAorICAgICAgICBXQ19IQVNIX1RZUEVfTUQ0ID0gMTcsCisgICAgICAgIFdDX0hBU0hfVFlQRV9NRDUgPSAwLAorICAgICAgICBXQ19IQVNIX1RZUEVfU0hBID0gMSwgLyogU0hBLTEgKG5vdCBvbGQgU0hBLTApICovCisgICAgICAgIFdDX0hBU0hfVFlQRV9TSEEyMjQgPSA4LAorICAgICAgICBXQ19IQVNIX1RZUEVfU0hBMjU2ID0gMiwKKyAgICAgICAgV0NfSEFTSF9UWVBFX1NIQTM4NCA9IDUsCisgICAgICAgIFdDX0hBU0hfVFlQRV9TSEE1MTIgPSA0LAorICAgICAgICBXQ19IQVNIX1RZUEVfTUQ1X1NIQSA9IDE4LAorICAgICAgICBXQ19IQVNIX1RZUEVfU0hBM18yMjQgPSAxMCwKKyAgICAgICAgV0NfSEFTSF9UWVBFX1NIQTNfMjU2ID0gMTEsCisgICAgICAgIFdDX0hBU0hfVFlQRV9TSEEzXzM4NCA9IDEyLAorICAgICAgICBXQ19IQVNIX1RZUEVfU0hBM181MTIgPSAxMywKKyAgICAgICAgV0NfSEFTSF9UWVBFX0JMQUtFMkIgPSAxNCwKKyAgICAgICAgV0NfSEFTSF9UWVBFX0JMQUtFMlMgPSAxOSwKKworICAgICAgICBXQ19IQVNIX1RZUEVfTUFYID0gV0NfSEFTSF9UWVBFX0JMQUtFMlMKKyAgICAjZWxzZQorICAgICAgICBXQ19IQVNIX1RZUEVfTk9ORSA9IDAsCisgICAgICAgIFdDX0hBU0hfVFlQRV9NRDIgPSAxLAorICAgICAgICBXQ19IQVNIX1RZUEVfTUQ0ID0gMiwKKyAgICAgICAgV0NfSEFTSF9UWVBFX01ENSA9IDMsCisgICAgICAgIFdDX0hBU0hfVFlQRV9TSEEgPSA0LCAvKiBTSEEtMSAobm90IG9sZCBTSEEtMCkgKi8KKyAgICAgICAgV0NfSEFTSF9UWVBFX1NIQTIyNCA9IDUsCisgICAgICAgIFdDX0hBU0hfVFlQRV9TSEEyNTYgPSA2LAorICAgICAgICBXQ19IQVNIX1RZUEVfU0hBMzg0ID0gNywKKyAgICAgICAgV0NfSEFTSF9UWVBFX1NIQTUxMiA9IDgsCisgICAgICAgIFdDX0hBU0hfVFlQRV9NRDVfU0hBID0gOSwKKyAgICAgICAgV0NfSEFTSF9UWVBFX1NIQTNfMjI0ID0gMTAsCisgICAgICAgIFdDX0hBU0hfVFlQRV9TSEEzXzI1NiA9IDExLAorICAgICAgICBXQ19IQVNIX1RZUEVfU0hBM18zODQgPSAxMiwKKyAgICAgICAgV0NfSEFTSF9UWVBFX1NIQTNfNTEyID0gMTMsCisgICAgICAgIFdDX0hBU0hfVFlQRV9CTEFLRTJCID0gMTQsCisgICAgICAgIFdDX0hBU0hfVFlQRV9CTEFLRTJTID0gMTUsCisKKyAgICAgICAgV0NfSEFTSF9UWVBFX01BWCA9IFdDX0hBU0hfVFlQRV9CTEFLRTJTCisgICAgI2VuZGlmIC8qIEhBVkVfU0VMRlRFU1QgKi8KKyAgICB9OworCisgICAgLyogY2lwaGVyIHR5cGVzICovCisgICAgZW51bSB3Y19DaXBoZXJUeXBlIHsKKyAgICAgICAgV0NfQ0lQSEVSX05PTkUgPSAwLAorICAgICAgICBXQ19DSVBIRVJfQUVTID0gMSwKKyAgICAgICAgV0NfQ0lQSEVSX0FFU19DQkMgPSAyLAorICAgICAgICBXQ19DSVBIRVJfQUVTX0dDTSA9IDMsCisgICAgICAgIFdDX0NJUEhFUl9BRVNfQ1RSID0gNCwKKyAgICAgICAgV0NfQ0lQSEVSX0FFU19YVFMgPSA1LAorICAgICAgICBXQ19DSVBIRVJfQUVTX0NGQiA9IDYsCisgICAgICAgIFdDX0NJUEhFUl9ERVMzID0gNywKKyAgICAgICAgV0NfQ0lQSEVSX0RFUyA9IDgsCisgICAgICAgIFdDX0NJUEhFUl9DSEFDSEEgPSA5LAorICAgICAgICBXQ19DSVBIRVJfSEMxMjggPSAxMCwKKyAgICAgICAgV0NfQ0lQSEVSX0lERUEgPSAxMSwKKworICAgICAgICBXQ19DSVBIRVJfTUFYID0gV0NfQ0lQSEVSX0hDMTI4CisgICAgfTsKKworICAgIC8qIFBLPXB1YmxpYyBrZXkgKGFzeW1tZXRyaWMpIGJhc2VkIGFsZ29yaXRobXMgKi8KKyAgICBlbnVtIHdjX1BrVHlwZSB7CisgICAgICAgIFdDX1BLX1RZUEVfTk9ORSA9IDAsCisgICAgICAgIFdDX1BLX1RZUEVfUlNBID0gMSwKKyAgICAgICAgV0NfUEtfVFlQRV9ESCA9IDIsCisgICAgICAgIFdDX1BLX1RZUEVfRUNESCA9IDMsCisgICAgICAgIFdDX1BLX1RZUEVfRUNEU0FfU0lHTiA9IDQsCisgICAgICAgIFdDX1BLX1RZUEVfRUNEU0FfVkVSSUZZID0gNSwKKyAgICAgICAgV0NfUEtfVFlQRV9FRDI1NTE5X1NJR04gPSA2LAorICAgICAgICBXQ19QS19UWVBFX0NVUlZFMjU1MTkgPSA3LAorICAgICAgICBXQ19QS19UWVBFX1JTQV9LRVlHRU4gPSA4LAorICAgICAgICBXQ19QS19UWVBFX0VDX0tFWUdFTiA9IDksCisgICAgICAgIFdDX1BLX1RZUEVfUlNBX0NIRUNLX1BSSVZfS0VZID0gMTAsCisgICAgICAgIFdDX1BLX1RZUEVfRUNfQ0hFQ0tfUFJJVl9LRVkgPSAxMSwKKyAgICAgICAgV0NfUEtfVFlQRV9FRDQ0OCA9IDEyLAorICAgICAgICBXQ19QS19UWVBFX0NVUlZFNDQ4ID0gMTMsCisgICAgICAgIFdDX1BLX1RZUEVfRUQyNTUxOV9WRVJJRlkgPSAxNCwKKyAgICAgICAgV0NfUEtfVFlQRV9FRDI1NTE5X0tFWUdFTiA9IDE1LAorICAgICAgICBXQ19QS19UWVBFX0NVUlZFMjU1MTlfS0VZR0VOID0gMTYsCisgICAgICAgIFdDX1BLX1RZUEVfTUFYID0gV0NfUEtfVFlQRV9DVVJWRTI1NTE5X0tFWUdFTgorICAgIH07CisKKworICAgIC8qIHNldHRpbmdzIGRldGVjdGlvbiBmb3IgY29tcGlsZSB2cyBydW50aW1lIG1hdGggaW5jb21wYXRpYmlsaXRpZXMgKi8KKyAgICBlbnVtIHsKKyAgICAjaWYgIWRlZmluZWQoVVNFX0ZBU1RfTUFUSCkgJiYgIWRlZmluZWQoU0laRU9GX0xPTkcpICYmICFkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpCisgICAgICAgIENUQ19TRVRUSU5HUyA9IDB4MAorICAgICNlbGlmICFkZWZpbmVkKFVTRV9GQVNUX01BVEgpICYmIGRlZmluZWQoU0laRU9GX0xPTkcpICYmIChTSVpFT0ZfTE9ORyA9PSA4KQorICAgICAgICBDVENfU0VUVElOR1MgPSAweDEKKyAgICAjZWxpZiAhZGVmaW5lZChVU0VfRkFTVF9NQVRIKSAmJiBkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpICYmIChTSVpFT0ZfTE9OR19MT05HID09IDgpCisgICAgICAgIENUQ19TRVRUSU5HUyA9IDB4MgorICAgICNlbGlmICFkZWZpbmVkKFVTRV9GQVNUX01BVEgpICYmIGRlZmluZWQoU0laRU9GX0xPTkdfTE9ORykgJiYgKFNJWkVPRl9MT05HX0xPTkcgPT0gNCkKKyAgICAgICAgQ1RDX1NFVFRJTkdTID0gMHg0CisgICAgI2VsaWYgZGVmaW5lZChVU0VfRkFTVF9NQVRIKSAmJiAhZGVmaW5lZChTSVpFT0ZfTE9ORykgJiYgIWRlZmluZWQoU0laRU9GX0xPTkdfTE9ORykKKyAgICAgICAgQ1RDX1NFVFRJTkdTID0gMHg4CisgICAgI2VsaWYgZGVmaW5lZChVU0VfRkFTVF9NQVRIKSAmJiBkZWZpbmVkKFNJWkVPRl9MT05HKSAmJiAoU0laRU9GX0xPTkcgPT0gOCkKKyAgICAgICAgQ1RDX1NFVFRJTkdTID0gMHgxMAorICAgICNlbGlmIGRlZmluZWQoVVNFX0ZBU1RfTUFUSCkgJiYgZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKSAmJiAoU0laRU9GX0xPTkdfTE9ORyA9PSA4KQorICAgICAgICBDVENfU0VUVElOR1MgPSAweDIwCisgICAgI2VsaWYgZGVmaW5lZChVU0VfRkFTVF9NQVRIKSAmJiBkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpICYmIChTSVpFT0ZfTE9OR19MT05HID09IDQpCisgICAgICAgIENUQ19TRVRUSU5HUyA9IDB4NDAKKyAgICAjZWxzZQorICAgICAgICAjZXJyb3IgImJhZCBtYXRoIGxvbmcgLyBsb25nIGxvbmcgc2V0dGluZ3MiCisgICAgI2VuZGlmCisgICAgfTsKKworCisgICAgV09MRlNTTF9BUEkgd29yZDMyIENoZWNrUnVuVGltZVNldHRpbmdzKHZvaWQpOworCisgICAgLyogSWYgdXNlciB1c2VzIFJTQSwgREgsIERTQSwgb3IgRUNDIG1hdGggbGliIGRpcmVjdGx5IHRoZW4gZmFzdCBtYXRoIGFuZCBsb25nCisgICAgICAgdHlwZXMgbmVlZCB0byBtYXRjaCBhdCBjb21waWxlIHRpbWUgYW5kIHJ1biB0aW1lLCBDaGVja0N0Y1NldHRpbmdzIHdpbGwKKyAgICAgICByZXR1cm4gMSBpZiBhIG1hdGNoIG90aGVyd2lzZSAwICovCisgICAgI2RlZmluZSBDaGVja0N0Y1NldHRpbmdzKCkgKENUQ19TRVRUSU5HUyA9PSBDaGVja1J1blRpbWVTZXR0aW5ncygpKQorCisgICAgLyogaW52YWxpZCBkZXZpY2UgaWQgKi8KKyAgICAjZGVmaW5lIElOVkFMSURfREVWSUQgICAgLTIKKworCisgICAgLyogQUVTTkkgcmVxdWlyZXMgYWxpZ25tZW50IGFuZCBBUk1BU00gZ2FpbnMgc29tZSBwZXJmb3JtYW5jZSBmcm9tIGl0CisgICAgICogWGlsaW54IFJTQSBvcGVyYXRpb25zIHJlcXVpcmUgYWxpZ25tZW50ICovCisgICAgI2lmIGRlZmluZWQoV09MRlNTTF9BRVNOSSkgfHwgZGVmaW5lZChXT0xGU1NMX0FSTUFTTSkgfHwgXAorICAgICAgICBkZWZpbmVkKFVTRV9JTlRFTF9TUEVFRFVQKSB8fCBkZWZpbmVkKFdPTEZTU0xfQUZBTEdfWElMSU5YKQorICAgICAgICAgICNpZm5kZWYgV09MRlNTTF9VU0VfQUxJR04KKyAgICAgICAgICAgICAgI2RlZmluZSBXT0xGU1NMX1VTRV9BTElHTgorICAgICAgICAgICNlbmRpZgorICAgICNlbmRpZiAvKiBXT0xGU1NMX0FFU05JIHx8IFdPTEZTU0xfQVJNQVNNIHx8IFVTRV9JTlRFTF9TUEVFRFVQIHx8IFdPTEZTU0xfQUZBTEdfWElMSU5YICovCisKKyAgICAjaWZkZWYgV09MRlNTTF9VU0VfQUxJR04KKyAgICAgICAgI2lmICFkZWZpbmVkKEFMSUdOMTYpCisgICAgICAgICAgICAjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSB8fCBkZWZpbmVkKF9fR05VQ19fKQorICAgICAgICAgICAgICAgICNkZWZpbmUgQUxJR04xNiBfX2F0dHJpYnV0ZV9fICggKGFsaWduZWQgKDE2KSkpCisgICAgICAgICAgICAjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgICAgICAgICAgIC8qIGRpc2FibGUgYWxpZ24gd2FybmluZywgd2Ugd2FudCBhbGlnbm1lbnQgISAqLworICAgICAgICAgICAgICAgICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MzI0KQorICAgICAgICAgICAgICAgICNkZWZpbmUgQUxJR04xNiBfX2RlY2xzcGVjIChhbGlnbiAoMTYpKQorICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIEFMSUdOMTYKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAjZW5kaWYgLyogIUFMSUdOMTYgKi8KKworICAgICAgICAjaWYgIWRlZmluZWQgKEFMSUdOMzIpCisgICAgICAgICAgICAjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSB8fCBkZWZpbmVkKF9fR05VQ19fKQorICAgICAgICAgICAgICAgICNkZWZpbmUgQUxJR04zMiBfX2F0dHJpYnV0ZV9fICggKGFsaWduZWQgKDMyKSkpCisgICAgICAgICAgICAjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgICAgICAgICAgIC8qIGRpc2FibGUgYWxpZ24gd2FybmluZywgd2Ugd2FudCBhbGlnbm1lbnQgISAqLworICAgICAgICAgICAgICAgICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MzI0KQorICAgICAgICAgICAgICAgICNkZWZpbmUgQUxJR04zMiBfX2RlY2xzcGVjIChhbGlnbiAoMzIpKQorICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIEFMSUdOMzIKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAjZW5kaWYgLyogIUFMSUdOMzIgKi8KKworICAgICAgICAjaWYgIWRlZmluZWQoQUxJR042NCkKKyAgICAgICAgICAgICNpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pIHx8IGRlZmluZWQoX19HTlVDX18pCisgICAgICAgICAgICAgICAgI2RlZmluZSBBTElHTjY0IF9fYXR0cmlidXRlX18gKCAoYWxpZ25lZCAoNjQpKSkKKyAgICAgICAgICAgICNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAgICAgICAgICAgLyogZGlzYWJsZSBhbGlnbiB3YXJuaW5nLCB3ZSB3YW50IGFsaWdubWVudCAhICovCisgICAgICAgICAgICAgICAgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQzMjQpCisgICAgICAgICAgICAgICAgI2RlZmluZSBBTElHTjY0IF9fZGVjbHNwZWMgKGFsaWduICg2NCkpCisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNkZWZpbmUgQUxJR042NAorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICNlbmRpZiAvKiAhQUxJR042NCAqLworCisgICAgICAgICNpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pIHx8IGRlZmluZWQoX19HTlVDX18pCisgICAgICAgICAgICAjZGVmaW5lIEFMSUdOMTI4IF9fYXR0cmlidXRlX18gKCAoYWxpZ25lZCAoMTI4KSkpCisgICAgICAgICNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAgICAgICAvKiBkaXNhYmxlIGFsaWduIHdhcm5pbmcsIHdlIHdhbnQgYWxpZ25tZW50ICEgKi8KKyAgICAgICAgICAgICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MzI0KQorICAgICAgICAgICAgI2RlZmluZSBBTElHTjEyOCBfX2RlY2xzcGVjIChhbGlnbiAoMTI4KSkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNkZWZpbmUgQUxJR04xMjgKKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykgfHwgZGVmaW5lZChfX0dOVUNfXykKKyAgICAgICAgICAgICNkZWZpbmUgQUxJR04yNTYgX19hdHRyaWJ1dGVfXyAoIChhbGlnbmVkICgyNTYpKSkKKyAgICAgICAgI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAgICAgICAgIC8qIGRpc2FibGUgYWxpZ24gd2FybmluZywgd2Ugd2FudCBhbGlnbm1lbnQgISAqLworICAgICAgICAgICAgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQzMjQpCisgICAgICAgICAgICAjZGVmaW5lIEFMSUdOMjU2IF9fZGVjbHNwZWMgKGFsaWduICgyNTYpKQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2RlZmluZSBBTElHTjI1NgorICAgICAgICAjZW5kaWYKKworICAgICNlbHNlCisgICAgICAgICNpZm5kZWYgQUxJR04xNgorICAgICAgICAgICAgI2RlZmluZSBBTElHTjE2CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIEFMSUdOMzIKKyAgICAgICAgICAgICNkZWZpbmUgQUxJR04zMgorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2lmbmRlZiBBTElHTjY0CisgICAgICAgICAgICAjZGVmaW5lIEFMSUdONjQKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZm5kZWYgQUxJR04xMjgKKyAgICAgICAgICAgICNkZWZpbmUgQUxJR04xMjgKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZm5kZWYgQUxJR04yNTYKKyAgICAgICAgICAgICNkZWZpbmUgQUxJR04yNTYKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmIC8qIFdPTEZTU0xfVVNFX0FMSUdOICovCisKKyAgICAjaWYgIWRlZmluZWQoUEVEQU5USUNfRVhURU5TSU9OKQorICAgICAgICAjaWYgZGVmaW5lZChfX0dOVUNfXykKKyAgICAgICAgICAgICNkZWZpbmUgUEVEQU5USUNfRVhURU5TSU9OIF9fZXh0ZW5zaW9uX18KKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNkZWZpbmUgUEVEQU5USUNfRVhURU5TSU9OCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZiAvKiAhUEVEQU5USUNfRVhURU5TSU9OICovCisKKworICAgICNpZm5kZWYgVFJVRQorICAgICAgICAjZGVmaW5lIFRSVUUgIDEKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEZBTFNFCisgICAgICAgICNkZWZpbmUgRkFMU0UgMAorICAgICNlbmRpZgorCisKKyAgICAjaWYgZGVmaW5lZChIQVZFX1NUQUNLX1NJWkUpCisgICAgICAgICNkZWZpbmUgRVhJVF9URVNUKHJldCkgcmV0dXJuICh2b2lkKikoKHNpemVfdCkocmV0KSkKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIEVYSVRfVEVTVChyZXQpIHJldHVybiByZXQKKyAgICAjZW5kaWYKKworCisgICAgI2lmIChkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pICYmIChfX0lBUl9TWVNURU1TX0lDQ19fID4gOCkpIHx8IFwKKyAgICAgICAgIGRlZmluZWQoX19HTlVDX18pCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9QQUNLIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9QQUNLCisgICAgI2VuZGlmCisKKyAgICAjaWZuZGVmIF9fR05VQ19QUkVSRVEKKyAgICAgICAgI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19HTlVDX01JTk9SX18pCisgICAgICAgICAgICAjZGVmaW5lIF9fR05VQ19QUkVSRVEobWFqLCBtaW4pIFwKKyAgICAgICAgICAgICAgICAoKF9fR05VQ19fIDw8IDE2KSArIF9fR05VQ19NSU5PUl9fID49ICgobWFqKSA8PCAxNikgKyAobWluKSkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgKDApIC8qIG5vdCBHTlVDICovCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorCisgICAgI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykgfHwgZGVmaW5lZChfX0dOVUNfXykKKyAgICAgICAgI2RlZmluZSBXQ19OT1JFVFVSTiBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBXQ19OT1JFVFVSTgorICAgICNlbmRpZgorCisgICAgI2lmIGRlZmluZWQoV09MRlNTTF9LRVlfR0VOKSB8fCBkZWZpbmVkKEhBVkVfQ09NUF9LRVkpIHx8IFwKKyAgICAgICAgZGVmaW5lZChXT0xGU1NMX0RFQlVHX01BVEgpIHx8IGRlZmluZWQoREVCVUdfV09MRlNTTCkgfHwgXAorICAgICAgICBkZWZpbmVkKFdPTEZTU0xfUFVCTElDX01QKSB8fCBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IFwKKyAgICAgICAgICAgIChkZWZpbmVkKEhBVkVfRUNDKSAmJiBkZWZpbmVkKEhBVkVfRUNDX0tFWV9FWFBPUlQpKQorICAgICAgICAjdW5kZWYgIFdDX01QX1RPX1JBRElYCisgICAgICAgICNkZWZpbmUgV0NfTVBfVE9fUkFESVgKKyAgICAjZW5kaWYKKworICAgICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+IDUKKyAgICAgICAgI2RlZmluZSBQUkFHTUFfR0NDX0lHTk9SRShzdHIpIF9QcmFnbWEoc3RyKTsKKyAgICAgICAgI2RlZmluZSBQUkFHTUFfR0NDX1BPUCAgICAgICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHBvcCIpOworICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgUFJBR01BX0dDQ19JR05PUkUoc3RyKQorICAgICAgICAjZGVmaW5lIFBSQUdNQV9HQ0NfUE9QCisgICAgI2VuZGlmCisKKyAgICAjaWZkZWYgX19jcGx1c3BsdXMKKyAgICAgICAgfSAgIC8qIGV4dGVybiAiQyIgKi8KKyAgICAjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZfQ1JZUFRfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3Zpc2liaWxpdHkuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC92aXNpYmlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhMzFhNAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC92aXNpYmlsaXR5LmgKQEAgLTAsMCArMSw4MSBAQAorLyogdmlzaWJpbGl0eS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisvKiBWaXNpYmlsaXR5IGNvbnRyb2wgbWFjcm9zICovCisKKyNpZm5kZWYgV09MRl9DUllQVF9WSVNJQklMSVRZX0gKKyNkZWZpbmUgV09MRl9DUllQVF9WSVNJQklMSVRZX0gKKworCisvKiBmb3IgY29tcGF0aWJpbGl0eSBhbmQgc28gdGhhdCBmaXBzIGlzIHVzaW5nIHNhbWUgbmFtZSBvZiBtYWNybyBAd2NfZmlwcyAqLworLyogVGhlIGZvbGxvd2luZyB2aXNpYmlsaXR5IHdyYXBwZXJzIGFyZSBmb3Igb2xkIEZJUFMuIE5ldyBGSVBTIHNob3VsZCB1c2UKKyAqIHRoZSBzYW1lIGFzIGEgbm9uLUZJUFMgYnVpbGQuICovCisjaWYgZGVmaW5lZChIQVZFX0ZJUFMpICYmIFwKKyAgICAoIWRlZmluZWQoSEFWRV9GSVBTX1ZFUlNJT04pIHx8IChIQVZFX0ZJUFNfVkVSU0lPTiA8IDIpKQorICAgICNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3Zpc2liaWxpdHkuaD4KKyAgICAjZGVmaW5lIFdPTEZTU0xfQVBJICAgQ1lBU1NMX0FQSQorCSNkZWZpbmUgV09MRlNTTF9MT0NBTCBDWUFTU0xfTE9DQUwKKyNlbHNlCisKKy8qIFdPTEZTU0xfQVBJIGlzIHVzZWQgZm9yIHRoZSBwdWJsaWMgQVBJIHN5bWJvbHMuCisgICAgICAgIEl0IGVpdGhlciBpbXBvcnRzIG9yIGV4cG9ydHMgKG9yIGRvZXMgbm90aGluZyBmb3Igc3RhdGljIGJ1aWxkcykKKworICAgV09MRlNTTF9MT0NBTCBpcyB1c2VkIGZvciBub24tQVBJIHN5bWJvbHMgKHByaXZhdGUpLgorKi8KKworI2lmIGRlZmluZWQoQlVJTERJTkdfV09MRlNTTCkKKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBcCisgICAgICAgIGRlZmluZWQoX1dJTjMyX1dDRSkKKyAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9ETEwpCisgICAgICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2RlZmluZSBXT0xGU1NMX0FQSQorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX0xPQ0FMCisgICAgI2VsaWYgZGVmaW5lZChIQVZFX1ZJU0lCSUxJVFkpICYmIEhBVkVfVklTSUJJTElUWQorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQVBJICAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9MT0NBTCBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorICAgICNlbGlmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgKF9fU1VOUFJPX0MgPj0gMHg1NTApCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9BUEkgICBfX2dsb2JhbAorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfTE9DQUwgX19oaWRkZW4KKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQVBJCisgICAgICAgICNkZWZpbmUgV09MRlNTTF9MT0NBTAorICAgICNlbmRpZiAvKiBIQVZFX1ZJU0lCSUxJVFkgKi8KKyNlbHNlIC8qIEJVSUxESU5HX1dPTEZTU0wgKi8KKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBcCisgICAgICAgIGRlZmluZWQoX1dJTjMyX1dDRSkKKyAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9ETEwpCisgICAgICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2RlZmluZSBXT0xGU1NMX0FQSQorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX0xPQ0FMCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX0FQSQorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfTE9DQUwKKyAgICAjZW5kaWYKKyNlbmRpZiAvKiBCVUlMRElOR19XT0xGU1NMICovCisKKyNlbmRpZiAvKiBIQVZFX0ZJUFMgKi8KKyNlbmRpZiAvKiBXT0xGX0NSWVBUX1ZJU0lCSUxJVFlfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvd2NfZW5jcnlwdC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3djX2VuY3J5cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQ5MjE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3djX2VuY3J5cHQuaApAQCAtMCwwICsxLDEyNiBAQAorLyogd2NfZW5jcnlwdC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmY3J5cHQvd2NfZW5jcnlwdC5oCisqLworCisKKyNpZm5kZWYgV09MRl9DUllQVF9FTkNSWVBUX0gKKyNkZWZpbmUgV09MRl9DUllQVF9FTkNSWVBUX0gKKworI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmg+CisjaWZuZGVmIE5PX0FFUworICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQ0hBQ0hBCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2NoYWNoYS5oPgorI2VuZGlmCisjaWZuZGVmIE5PX0RFUzMKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvZGVzMy5oPgorI2VuZGlmCisjaWZuZGVmIE5PX1JDNAorICAgICNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9hcmM0Lmg+CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogZGV0ZXJtaW5lIG1heCBjaXBoZXIga2V5IHNpemUgLSBjYW5ub3QgdXNlIGVudW0gdmFsdWVzIGhlcmUsIG11c3QgYmUgZGVmaW5lLAorICogc2luY2UgV0NfTUFYX1NZTV9LRVlfU0laRSBpcyB1c2VkIGluIGlmIG1hY3JvIGxvZ2ljLiAqLworI2lmbmRlZiBOT19BRVMKKyAgICAjZGVmaW5lIFdDX01BWF9TWU1fS0VZX1NJWkUgICAgIChBRVNfTUFYX0tFWV9TSVpFLzgpCisjZWxpZiBkZWZpbmVkKEhBVkVfQ0hBQ0hBKQorICAgICNkZWZpbmUgV0NfTUFYX1NZTV9LRVlfU0laRSAgICAgMzIgLyogQ0hBQ0hBX01BWF9LRVlfU1ogKi8KKyNlbGlmICFkZWZpbmVkKE5PX0RFUzMpCisgICAgI2RlZmluZSBXQ19NQVhfU1lNX0tFWV9TSVpFICAgICAyNCAvKiBERVMzX0tFWV9TSVpFICovCisjZWxpZiAhZGVmaW5lZChOT19SQzQpCisgICAgI2RlZmluZSBXQ19NQVhfU1lNX0tFWV9TSVpFICAgICAxNiAvKiBSQzRfS0VZX1NJWkUgKi8KKyNlbHNlCisgICAgI2RlZmluZSBXQ19NQVhfU1lNX0tFWV9TSVpFICAgICAzMgorI2VuZGlmCisKKworI2lmIChkZWZpbmVkKEhBVkVfRklQUykgJiYgZGVmaW5lZChIQVZFX0ZJUFNfVkVSU0lPTikgJiYgXAorICAgICAoSEFWRV9GSVBTX1ZFUlNJT04gPD0gMikpIHx8IChkZWZpbmVkKEhBVkVfU0VMRlRFU1QpICYmIFwKKyAgICAgKCFkZWZpbmVkKEhBVkVfU0VMRlRFU1RfVkVSU0lPTikgfHwgKEhBVkVfU0VMRlRFU1RfVkVSU0lPTiA8IDIpKSkKKyAgICAvKiBJbiBGSVBTIGNlcnQgMzM4OSBhbmQgQ0FWUCBzZWxmdGVzdCB2MSBidWlsZCwgdGhlc2UgZW51bXMgYXJlCisgICAgICogbm90IGluIGFlcy5oLiBEZWZpbmUgdGhlbSBoZXJlIG91dHNpZGUgdGhlIGZpcHMgYm91bmRhcnkuIAorICAgICAqLworICAgICNpZm5kZWYgR0NNX05PTkNFX01JRF9TWgorICAgICAgICAvKiBUaGUgdXN1YWwgZGVmYXVsdCBub25jZSBzaXplIGZvciBBRVMtR0NNLiAqLworICAgICAgICAjZGVmaW5lIEdDTV9OT05DRV9NSURfU1ogMTIKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIENDTV9OT05DRV9NSU5fU1oKKyAgICAgICAgI2RlZmluZSBDQ01fTk9OQ0VfTUlOX1NaIDcKKyAgICAjZW5kaWYKKyNlbmRpZgorCisKKyNpZiAhZGVmaW5lZChOT19BRVMpICYmIGRlZmluZWQoSEFWRV9BRVNfQ0JDKQorV09MRlNTTF9BUEkgaW50IHdjX0Flc0NiY0VuY3J5cHRXaXRoS2V5KGJ5dGUqIG91dCwgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBpblN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGtleSwgd29yZDMyIGtleVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGl2KTsKK1dPTEZTU0xfQVBJIGludCB3Y19BZXNDYmNEZWNyeXB0V2l0aEtleShieXRlKiBvdXQsIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgaW5TeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBrZXksIHdvcmQzMiBrZXlTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlKiBpdik7CisjZW5kaWYgLyogIU5PX0FFUyAqLworCisKKyNpZm5kZWYgTk9fREVTMworV09MRlNTTF9BUEkgaW50IHdjX0Rlc19DYmNEZWNyeXB0V2l0aEtleShieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGtleSwgY29uc3QgYnl0ZSogaXYpOworV09MRlNTTF9BUEkgaW50IHdjX0Rlc19DYmNFbmNyeXB0V2l0aEtleShieXRlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGluLCB3b3JkMzIgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGtleSwgY29uc3QgYnl0ZSogaXYpOworV09MRlNTTF9BUEkgaW50IHdjX0RlczNfQ2JjRW5jcnlwdFdpdGhLZXkoYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGtleSwgY29uc3QgYnl0ZSogaXYpOworV09MRlNTTF9BUEkgaW50IHdjX0RlczNfQ2JjRGVjcnlwdFdpdGhLZXkoYnl0ZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZSogaW4sIHdvcmQzMiBzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGtleSwgY29uc3QgYnl0ZSogaXYpOworI2VuZGlmIC8qICFOT19ERVMzICovCisKKworCisKKyNpZmRlZiBXT0xGU1NMX0VOQ1JZUFRFRF9LRVlTCisgICAgc3RydWN0IEVuY3J5cHRlZEluZm87CisgICAgV09MRlNTTF9BUEkgaW50IHdjX0J1ZmZlcktleURlY3J5cHQoc3RydWN0IEVuY3J5cHRlZEluZm8qIGluZm8sIGJ5dGUqIGRlciwgd29yZDMyIGRlclN6LAorICAgICAgICBjb25zdCBieXRlKiBwYXNzd29yZCwgaW50IHBhc3N3b3JkU3osIGludCBoYXNoVHlwZSk7CisgICAgV09MRlNTTF9BUEkgaW50IHdjX0J1ZmZlcktleUVuY3J5cHQoc3RydWN0IEVuY3J5cHRlZEluZm8qIGluZm8sIGJ5dGUqIGRlciwgd29yZDMyIGRlclN6LAorICAgICAgICBjb25zdCBieXRlKiBwYXNzd29yZCwgaW50IHBhc3N3b3JkU3osIGludCBoYXNoVHlwZSk7CisjZW5kaWYgLyogV09MRlNTTF9FTkNSWVBURURfS0VZUyAqLworCisjaWZuZGVmIE5PX1BXREJBU0VECisgICAgV09MRlNTTF9MT0NBTCBpbnQgd2NfQ3J5cHRLZXkoY29uc3QgY2hhciogcGFzc3dvcmQsIGludCBwYXNzd29yZFN6LCAKKyAgICAgICAgYnl0ZSogc2FsdCwgaW50IHNhbHRTeiwgaW50IGl0ZXJhdGlvbnMsIGludCBpZCwgYnl0ZSogaW5wdXQsIGludCBsZW5ndGgsCisgICAgICAgIGludCB2ZXJzaW9uLCBieXRlKiBjYmNJdiwgaW50IGVuYywgaW50IHNoYU9pZCk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBXT0xGX0NSWVBUX0VOQ1JZUFRfSCAqLworCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2luY2x1ZGUvd29sZnNzbC93b2xmY3J5cHQvd2NfcG9ydC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3djX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTcxYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3djX3BvcnQuaApAQCAtMCwwICsxLDExNDUgQEAKKy8qIHdjX3BvcnQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKy8qIQorICAgIFxmaWxlIHdvbGZzc2wvd29sZmNyeXB0L3djX3BvcnQuaAorKi8KKworI2lmbmRlZiBXT0xGX0NSWVBUX1BPUlRfSAorI2RlZmluZSBXT0xGX0NSWVBUX1BPUlRfSAorCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2V0dGluZ3MuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC92aXNpYmlsaXR5Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIERldGVjdCBpZiBjb21waWxlciBzdXBwb3J0cyBDOTkuICJOT19XT0xGX0M5OSIgY2FuIGJlIGRlZmluZWQgaW4KKyAqIHVzZXJfc2V0dGluZ3MuaCB0byBkaXNhYmxlIGNoZWNraW5nIGZvciBDOTkgc3VwcG9ydC4gKi8KKyNpZiAhZGVmaW5lZChXT0xGX0M5OSkgJiYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiBcCisgICAgIWRlZmluZWQoV09MRlNTTF9BUkRVSU5PKSAmJiAhZGVmaW5lZChOT19XT0xGX0M5OSkKKyAgICAjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisgICAgICAgICNkZWZpbmUgV09MRl9DOTkKKyAgICAjZW5kaWYKKyNlbmRpZgorCisKKy8qIEdFTkVSSUMgSU5DTFVERSBTRUNUSU9OICovCisjaWYgZGVmaW5lZChGUkVFU0NBTEVfTVFYKSB8fCBkZWZpbmVkKEZSRUVTQ0FMRV9LU0RLX01RWCkKKyAgICAjaW5jbHVkZSA8bXF4Lmg+CisgICAgI2lmIChkZWZpbmVkKE1RWF9VU0VfSU9fT0xEKSAmJiBNUVhfVVNFX0lPX09MRCkgfHwgXAorICAgICAgICBkZWZpbmVkKEZSRUVTQ0FMRV9NUVhfNV8wKQorICAgICAgICAjaW5jbHVkZSA8ZmlvLmg+CisgICAgI2Vsc2UKKyAgICAgICAgI2luY2x1ZGUgPG5pby5oPgorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0xJTlVYS00KKyAgICAjaWZkZWYgSEFWRV9DT05GSUdfSAorICAgICAgICAjaWZuZGVmIFBBQ0tBR0VfTkFNRQorICAgICAgICAgICAgI2Vycm9yIHdjX3BvcnQuaCBpbmNsdWRlZCBiZWZvcmUgY29uZmlnLmgKKyAgICAgICAgI2VuZGlmCisgICAgICAgIC8qIGNvbmZpZy5oIGlzIGF1dG9nZW5lcmF0ZWQgd2l0aG91dCBnYXRpbmcsIGFuZCBpcyBzdWJqZWN0IHRvIHJlcGVhdAorICAgICAgICAgKiBpbmNsdXNpb25zLCBzbyBnYXRlIGl0IG91dCBoZXJlIHRvIGtlZXAgYXV0b2RldGVjdGlvbiBtYXNraW5nCisgICAgICAgICAqIGludGFjdDoKKyAgICAgICAgICovCisgICAgICAgICN1bmRlZiBIQVZFX0NPTkZJR19ICisgICAgI2VuZGlmCisKKyAgICAjaWZkZWYgQlVJTERJTkdfV09MRlNTTAorCisgICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgcHVzaCIpOworCisgICAgLyogd2UgaW5jbHVkZSBhbGwgdGhlIG5lZWRlZCBrZXJuZWwgaGVhZGVycyB3aXRoIHRoZXNlIG1hc2tlZCBvdXQuIGVsc2UKKyAgICAgKiB0aGVyZSBhcmUgcHJvZnVzZSB3YXJuaW5ncy4KKyAgICAgKi8KKyAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bnVzZWQtcGFyYW1ldGVyXCIiKTsKKyAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdwb2ludGVyLWFyaXRoXCIiKTsKKyAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzaGFkb3dcIiIpOworICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV25lc3RlZC1leHRlcm5zXCIiKTsKKyAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdyZWR1bmRhbnQtZGVjbHNcIiIpOworICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3NpZ24tY29tcGFyZVwiIik7CisgICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XcG9pbnRlci1zaWduXCIiKTsKKyAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdiYWQtZnVuY3Rpb24tY2FzdFwiIik7CisgICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XZGlzY2FyZGVkLXF1YWxpZmllcnNcIiIpOworICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3R5cGUtbGltaXRzXCIiKTsKKworICAgIC8qIHN1cHByZXNzIGluY2x1c2lvbiBvZiBzdGRpbnQtZ2NjLmggdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggTGludXggbmF0aXZlIGluY2x1ZGUvbGludXgvdHlwZXMuaDogKi8KKyAgICAjZGVmaW5lIF9HQ0NfU1RESU5UX0gKKworICAgICNpbmNsdWRlIDxsaW51eC9rY29uZmlnLmg+CisgICAgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorICAgICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisgICAgI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisgICAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyAgICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisgICAgI2luY2x1ZGUgPGxpbnV4L21tLmg+CisgICAgI2lmbmRlZiBTSU5HTEVfVEhSRUFERUQKKyAgICAgICAgI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyAgICAjZW5kaWYKKyAgICAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisgICAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX0FFU05JKSB8fCBkZWZpbmVkKFVTRV9JTlRFTF9TUEVFRFVQKQorICAgICAgICAjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oNCwgMCwgMCkKKyAgICAgICAgICAgICNpbmNsdWRlIDxhc20vaTM4Ny5oPgorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2luY2x1ZGUgPGFzbS9zaW1kLmg+CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIFNBVkVfVkVDVE9SX1JFR0lTVEVSUworICAgICAgICAgICAgI2RlZmluZSBTQVZFX1ZFQ1RPUl9SRUdJU1RFUlMoKSBrZXJuZWxfZnB1X2JlZ2luKCkKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZm5kZWYgUkVTVE9SRV9WRUNUT1JfUkVHSVNURVJTCisgICAgICAgICAgICAjZGVmaW5lIFJFU1RPUkVfVkVDVE9SX1JFR0lTVEVSUygpIGtlcm5lbF9mcHVfZW5kKCkKKyAgICAgICAgI2VuZGlmCisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX0FSTUFTTSkKKyAgICAgICAgI2luY2x1ZGUgPGFzbS9mcHNpbWQuaD4KKyAgICAgICAgI2lmbmRlZiBTQVZFX1ZFQ1RPUl9SRUdJU1RFUlMKKyAgICAgICAgICAgICNkZWZpbmUgU0FWRV9WRUNUT1JfUkVHSVNURVJTKCkgKHsgcHJlZW1wdF9kaXNhYmxlKCk7IGZwc2ltZF9wcmVzZXJ2ZV9jdXJyZW50X3N0YXRlKCk7IH0pCisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIFJFU1RPUkVfVkVDVE9SX1JFR0lTVEVSUworICAgICAgICAgICAgI2RlZmluZSBSRVNUT1JFX1ZFQ1RPUl9SRUdJU1RFUlMoKSAoeyBmcHNpbWRfcmVzdG9yZV9jdXJyZW50X3N0YXRlKCk7IHByZWVtcHRfZW5hYmxlKCk7IH0pCisgICAgICAgICNlbmRpZgorICAgICNlbHNlCisgICAgICAgICNpZm5kZWYgU0FWRV9WRUNUT1JfUkVHSVNURVJTCisgICAgICAgICAgICAjZGVmaW5lIFNBVkVfVkVDVE9SX1JFR0lTVEVSUygpICh7fSkKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZm5kZWYgUkVTVE9SRV9WRUNUT1JfUkVHSVNURVJTCisgICAgICAgICAgICAjZGVmaW5lIFJFU1RPUkVfVkVDVE9SX1JFR0lTVEVSUygpICh7fSkKKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisKKyAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKTsKKworICAgIC8qIExpbnV4IGhlYWRlcnMgZGVmaW5lIHRoZXNlIHVzaW5nIEMgZXhwcmVzc2lvbnMsIGJ1dCB3ZSBuZWVkCisgICAgICogdGhlbSB0byBiZSBldmFsdWFibGUgYnkgdGhlIHByZXByb2Nlc3NvciwgZm9yIHVzZSBpbiBzcF9pbnQuaC4KKyAgICAgKi8KKyAgICBfU3RhdGljX2Fzc2VydChzaXplb2YoVUxPTkdfTUFYKSA9PSA4LCAiV09MRlNTTF9MSU5VWEtNIHN1cHBvcnRlZCBvbmx5IG9uIHRhcmdldHMgd2l0aCA2NCBiaXQgbG9uZyB3b3Jkcy4iKTsKKyAgICAjdW5kZWYgVUNIQVJfTUFYCisgICAgI2RlZmluZSBVQ0hBUl9NQVggMjU1CisgICAgI3VuZGVmIFVTSFJUX01BWAorICAgICNkZWZpbmUgVVNIUlRfTUFYIDY1NTM1CisgICAgI3VuZGVmIFVJTlRfTUFYCisgICAgI2RlZmluZSBVSU5UX01BWCA0Mjk0OTY3Mjk1VQorICAgICN1bmRlZiBVTE9OR19NQVgKKyAgICAjZGVmaW5lIFVMT05HX01BWCAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMCisgICAgI3VuZGVmIFVMTE9OR19NQVgKKyAgICAjZGVmaW5lIFVMTE9OR19NQVggVUxPTkdfTUFYCisgICAgI3VuZGVmIElOVF9NQVgKKyAgICAjZGVmaW5lIElOVF9NQVggMjE0NzQ4MzY0NworICAgICN1bmRlZiBMT05HX01BWAorICAgICNkZWZpbmUgTE9OR19NQVggOTIyMzM3MjAzNjg1NDc3NTgwN0wKKyAgICAjdW5kZWYgTExPTkdfTUFYCisgICAgI2RlZmluZSBMTE9OR19NQVggTE9OR19NQVgKKworICAgIC8qIHJlbW92ZSB0aGlzIG11bHRpZmFyaW91c2x5IGNvbmZsaWN0aW5nIG1hY3JvLCBwaWNrZWQgdXAgZnJvbQorICAgICAqIExpbnV4IGFyY2gvPGFyY2g+L2luY2x1ZGUvYXNtL2N1cnJlbnQuaC4KKyAgICAgKi8KKyAgICAjdW5kZWYgY3VycmVudAorCisgICAgLyogcHJldmVudCBnY2MncyBtbV9tYWxsb2MuaCBmcm9tIGJlaW5nIGluY2x1ZGVkLCBzaW5jZSBpdCB1bmNvbmRpdGlvbmFsbHkKKyAgICAgKiBpbmNsdWRlcyBzdGRsaWIuaCwgd2hpY2ggaXMga2VybmVsLWluY29tcGF0aWJsZS4KKyAgICAgKi8KKyAgICAjZGVmaW5lIF9NTV9NQUxMT0NfSF9JTkNMVURFRAorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsIDEyLCAwKQorICAgIC8qIGt2bWFsbG9jKCkva3ZmcmVlKCkgYW5kIGZyaWVuZHMgYWRkZWQgaW4gbGludXggY29tbWl0IGE3YzNlOTAxICovCisgICAgI2RlZmluZSBtYWxsb2MoeCkga3ZtYWxsb2MoeCwgR0ZQX0tFUk5FTCkKKyAgICAjZGVmaW5lIGZyZWUoeCkga3ZmcmVlKHgpCisgICAgdm9pZCAqbGttX3JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3c2l6ZSk7CisgICAgI2RlZmluZSByZWFsbG9jKHgsIHkpIGxrbV9yZWFsbG9jKHgsIHkpCisjZWxzZQorICAgICNkZWZpbmUgbWFsbG9jKHgpIGttYWxsb2MoeCwgR0ZQX0tFUk5FTCkKKyAgICAjZGVmaW5lIGZyZWUoeCkga2ZyZWUoeCkKKyAgICAjZGVmaW5lIHJlYWxsb2MoeCx5KSBrcmVhbGxvYyh4LCB5LCBHRlBfS0VSTkVMKQorI2VuZGlmCisKKyAgICAvKiBtaW4oKSBhbmQgbWF4KCkgaW4gbGludXgva2VybmVsLmggb3Zlci1hZ2dyZXNzaXZlbHkgdHlwZS1jaGVjaywgcHJvZHVjaW5nCisgICAgICogbXlyaWFkIHNwdXJpb3VzIC1XZXJyb3JzIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLgorICAgICAqLworICAgICN1bmRlZiBtaW4KKyAgICAjdW5kZWYgbWF4CisKKyAgICAvKiB3b3JrIGFyb3VuZCBuYW1lc3BhY2UgY29uZmxpY3QgYmV0d2VlbiB3b2xmc3NsL2ludGVybmFsLmggKGVudW0gSGFuZFNoYWtlVHlwZSkKKyAgICAgKiBhbmQgbGludXgva2V5LmggKGV4dGVybiBpbnQoKSkuCisgICAgICovCisgICAgI2RlZmluZSBrZXlfdXBkYXRlIHdjX2tleV91cGRhdGUKKworICAgICNkZWZpbmUgbGttX3ByaW50Zihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0lORk8gIndvbGZzc2w6ICVzKCk6ICIgZm9ybWF0LCBfX2Z1bmNfXywgIyMgYXJncykKKyAgICAjZGVmaW5lIHByaW50ZiguLi4pIGxrbV9wcmludGYoX19WQV9BUkdTX18pCisKKyAgICAjZW5kaWYgLyogQlVJTERJTkdfV09MRlNTTCAqLworCisgICAgLyogbmVlZGVkIHRvIHN1cHByZXNzIGluY2x1c2lvbiBvZiBzdGRpby5oIGluIHdvbGZzc2wvd29sZmNyeXB0L3R5cGVzLmggKi8KKyAgICAjZGVmaW5lIFhTTlBSSU5URiBzbnByaW50ZgorCisgICAgLyogdGhlIHJpZ21hcm9sZSBhcm91bmQga3N0cnRvbCgpIGhlcmUgaXMgdG8gYWNjb21tb2RhdGUgaXRzIHdhcm4tdW51c2VkLXJlc3VsdCBhdHRyaWJ1dGUuICovCisgICAgI2RlZmluZSBYQVRPSShzKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb25nIF94YXRvaV9yZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGludCBfeGF0b2lfcmV0ID0ga3N0cnRvbChzLCAxMCwgJl94YXRvaV9yZXMpOyBcCisgICAgICAgICAgaWYgKF94YXRvaV9yZXQgIT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF94YXRvaV9yZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKGludClfeGF0b2lfcmVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSkKKworI2Vsc2UgLyogISBXT0xGU1NMX0xJTlVYS00gKi8KKworICAgICNpZm5kZWYgU0FWRV9WRUNUT1JfUkVHSVNURVJTCisgICAgICAgICNkZWZpbmUgU0FWRV9WRUNUT1JfUkVHSVNURVJTKCkgZG97fXdoaWxlKDApCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBSRVNUT1JFX1ZFQ1RPUl9SRUdJU1RFUlMKKyAgICAgICAgI2RlZmluZSBSRVNUT1JFX1ZFQ1RPUl9SRUdJU1RFUlMoKSBkb3t9d2hpbGUoMCkKKyAgICAjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZTU0xfTElOVVhLTSAqLworCisvKiBUSFJFQURJTkcvTVVURVggU0VDVElPTiAqLworI2lmZGVmIFVTRV9XSU5ET1dTX0FQSQorICAgICNpZmRlZiBXT0xGU1NMX0dBTUVfQlVJTEQKKyAgICAgICAgI2luY2x1ZGUgInN5c3RlbS94dGwuaCIKKyAgICAjZWxzZQorICAgICAgICAjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyAgICAgICAgICAgICNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2lmbmRlZiBXT0xGU1NMX1NHWAorICAgICAgICAgICAgI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkgfHwgZGVmaW5lZChXSU4zMl9MRUFOX0FORF9NRUFOKQorICAgICAgICAgICAgICAgIC8qIE9uIFdpbkNFIHdpbnNvY2syLmggbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgd2luZG93cy5oICovCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHdpbnNvY2syLmg+CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICNpbmNsdWRlIDx3aW5kb3dzLmg+CisgICAgICAgICNlbmRpZiAvKiBXT0xGU1NMX1NHWCAqLworICAgICNlbmRpZgorI2VsaWYgZGVmaW5lZChUSFJFQURYKQorICAgICNpZm5kZWYgU0lOR0xFX1RIUkVBREVECisgICAgICAgICNpZmRlZiBORUVEX1RIUkVBRFhfVFlQRVMKKyAgICAgICAgICAgICNpbmNsdWRlIDx0eXBlcy5oPgorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2luY2x1ZGUgPHR4X2FwaS5oPgorICAgICNlbmRpZgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX0RFT1MpCisgICAgI2luY2x1ZGUgIm11dGV4YXBpLmgiCisjZWxpZiBkZWZpbmVkKE1JQ1JJVU0pCisgICAgLyogZG8gbm90aGluZywganVzdCBkb24ndCBwaWNrIFVuaXggKi8KKyNlbGlmIGRlZmluZWQoRlJFRVJUT1MpIHx8IGRlZmluZWQoRlJFRVJUT1NfVENQKSB8fCBkZWZpbmVkKFdPTEZTU0xfU0FGRVJUT1MpCisgICAgLyogZG8gbm90aGluZyAqLworI2VsaWYgZGVmaW5lZChSVFRIUkVBRCkKKyAgICAvKiBkbyBub3RoaW5nICovCisjZWxpZiBkZWZpbmVkKEVCU05FVCkKKyAgICAvKiBkbyBub3RoaW5nICovCisjZWxpZiBkZWZpbmVkKEZSRUVTQ0FMRV9NUVgpIHx8IGRlZmluZWQoRlJFRVNDQUxFX0tTREtfTVFYKQorICAgIC8qIGRvIG5vdGhpbmcgKi8KKyNlbGlmIGRlZmluZWQoRlJFRVNDQUxFX0ZSRUVfUlRPUykKKyAgICAjaW5jbHVkZSAiZnNsX29zX2Fic3RyYWN0aW9uLmgiCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfVlhXT1JLUykKKyAgICAjaW5jbHVkZSA8c2VtTGliLmg+CisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfdUlUUk9ONCkKKyAgICAjaW5jbHVkZSAic3RkZGVmLmgiCisgICAgI2luY2x1ZGUgImtlcm5lbC5oIgorI2VsaWYgIGRlZmluZWQoV09MRlNTTF91VEtFUk5FTDIpCisgICAgI2luY2x1ZGUgInRrL3RrZXJuZWwuaCIKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9DTVNJU19SVE9TKQorICAgICNpbmNsdWRlICJjbXNpc19vcy5oIgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX0NNU0lTX1JUT1N2MikKKyAgICAjaW5jbHVkZSAiY21zaXNfb3MyLmgiCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkKKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX01ESzUpCisgICAgICAgICNpbmNsdWRlICJjbXNpc19vcy5oIgorICAgICNlbHNlCisgICAgICAgICNpbmNsdWRlIDxydGwuaD4KKyAgICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9DTVNJU19SVE9TKQorICAgICNpbmNsdWRlICJjbXNpc19vcy5oIgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX1RJUlRPUykKKyAgICAjaW5jbHVkZSA8dGkvc3lzYmlvcy9CSU9TLmg+CisgICAgI2luY2x1ZGUgPHRpL3N5c2Jpb3Mva25sL1NlbWFwaG9yZS5oPgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX0ZST1NURUQpCisgICAgI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2VsaWYgZGVmaW5lZChJTlRJTUVfUlRPUykKKyAgICAjaW5jbHVkZSA8cnQuaD4KKyAgICAjaW5jbHVkZSA8aW8uaD4KKyNlbGlmIGRlZmluZWQoV09MRlNTTF9OVUNMRVVTXzFfMikKKyAgICAvKiBOVV9ERUJVRyBuZWVkZWQgc3RydWN0IGFjY2VzcyBpbiBudWNsZXVzX3JlYWxsb2MgKi8KKyAgICAjZGVmaW5lIE5VX0RFQlVHCisgICAgI2luY2x1ZGUgInBsdXMvbnVjbGV1cy5oIgorICAgICNpbmNsdWRlICJudWNsZXVzLmgiCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfQVBBQ0hFX01ZTkVXVCkKKyAgICAvKiBkbyBub3RoaW5nICovCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgICNpZm5kZWYgU0lOR0xFX1RIUkVBREVECisgICAgICAgICNpbmNsdWRlIDxrZXJuZWwuaD4KKyAgICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9URUxJVF9NMk1CKQorCisgICAgLyogVGVsaXQgU0RLIHVzZXMgQysrIGNvbXBpbGUgb3B0aW9uICgtLWNwcCksIHdoaWNoIGNhdXNlcyBsaW5rIGlzc3VlCisgICAgICAgIHRvIEFQSSdzIGlmIHdyYXBwZWQgaW4gZXh0ZXJuICJDIiAqLworICAgICNpZmRlZiBfX2NwbHVzcGx1cworICAgICAgICB9ICAvKiBleHRlcm4gIkMiICovCisgICAgI2VuZGlmCisKKyAgICAjaW5jbHVkZSAibTJtYl90eXBlcy5oIgorICAgICNpbmNsdWRlICJtMm1iX29zX3R5cGVzLmgiCisgICAgI2luY2x1ZGUgIm0ybWJfb3NfYXBpLmgiCisgICAgI2luY2x1ZGUgIm0ybWJfb3MuaCIKKyAgICAjaW5jbHVkZSAibTJtYl9vc19tdHguaCIKKyAgICAjaWZuZGVmIE5PX0FTTl9USU1FCisgICAgI2luY2x1ZGUgIm0ybWJfcnRjLmgiCisgICAgI2VuZGlmCisgICAgI2lmbmRlZiBOT19GSUxFU1lTVEVNCisgICAgI2luY2x1ZGUgIm0ybWJfZnNfcG9zaXguaCIKKyAgICAjZW5kaWYKKworICAgICN1bmRlZiBrQiAvKiBlbGltaW5hdGUgY29uZmxpY3QgaW4gYXNuLmggKi8KKworICAgICNpZmRlZiBfX2NwbHVzcGx1cworICAgICAgICBleHRlcm4gIkMiIHsKKyAgICAjZW5kaWYKKworI2Vsc2UKKyAgICAjaWZuZGVmIFNJTkdMRV9USFJFQURFRAorICAgICAgICAjaWZuZGVmIFdPTEZTU0xfVVNFUl9NVVRFWAorICAgICAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9MSU5VWEtNKQorICAgICAgICAgICAgICAgICNkZWZpbmUgV09MRlNTTF9LVEhSRUFEUworICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFdPTEZTU0xfUFRIUkVBRFMKKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8cHRocmVhZC5oPgorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorICAgICNpZiAoZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKEdPQUhFQURfV1MpKSAmJiBcCisgICAgICAgICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pCisgICAgICAgICNpZmRlZiBGVVNJT05fUlRPUworICAgICAgICAgICAgI2luY2x1ZGUgPGZjbHVuaXN0ZC5oPgorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgIC8qIGZvciBjbG9zZSBvZiBCSU8gKi8KKyAgICAgICAgI2VuZGlmCisgICAgI2VuZGlmCisjZW5kaWYKKworLyogRm9yIEZJUFMga2VlcCB0aGUgZnVuY3Rpb24gbmFtZXMgdGhlIHNhbWUgKi8KKyNpZmRlZiBIQVZFX0ZJUFMKKyNkZWZpbmUgd2NfSW5pdE11dGV4ICAgSW5pdE11dGV4CisjZGVmaW5lIHdjX0ZyZWVNdXRleCAgIEZyZWVNdXRleAorI2RlZmluZSB3Y19Mb2NrTXV0ZXggICBMb2NrTXV0ZXgKKyNkZWZpbmUgd2NfVW5Mb2NrTXV0ZXggVW5Mb2NrTXV0ZXgKKyNlbmRpZiAvKiBIQVZFX0ZJUFMgKi8KKworI2lmZGVmIFNJTkdMRV9USFJFQURFRAorICAgIHR5cGVkZWYgaW50IHdvbGZTU0xfTXV0ZXg7CisjZWxzZSAvKiBNVUxUSV9USFJFQURFRCAqLworICAgIC8qIEZSRUVSVE9TIGNvbWVzIGZpcnN0IHRvIGVuYWJsZSB1c2Ugb2YgRnJlZVJUT1MgV2luZG93cyBzaW11bGF0b3Igb25seSAqLworICAgICNpZiBkZWZpbmVkKEZSRUVSVE9TKQorICAgICAgICB0eXBlZGVmIHhTZW1hcGhvcmVIYW5kbGUgd29sZlNTTF9NdXRleDsKKyAgICAjZWxpZiBkZWZpbmVkKEZSRUVSVE9TX1RDUCkKKyAgICAgICAgI2luY2x1ZGUgIkZyZWVSVE9TLmgiCisgICAgICAgICNpbmNsdWRlICJzZW1waHIuaCIKKwkJdHlwZWRlZiBTZW1hcGhvcmVIYW5kbGVfdCAgd29sZlNTTF9NdXRleDsKKyAgICAjZWxpZiBkZWZpbmVkIChSVFRIUkVBRCkKKyAgICAgICAgI2luY2x1ZGUgInJ0dGhyZWFkLmgiCisgICAgICAgIHR5cGVkZWYgcnRfbXV0ZXhfdCB3b2xmU1NMX011dGV4OworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9TQUZFUlRPUykKKyAgICAgICAgdHlwZWRlZiBzdHJ1Y3Qgd29sZlNTTF9NdXRleCB7CisgICAgICAgICAgICBzaWduZWQgY2hhciBtdXRleEJ1ZmZlcltwb3J0UVVFVUVfT1ZFUkhFQURfQllURVNdOworICAgICAgICAgICAgeFNlbWFwaG9yZUhhbmRsZSBtdXRleDsKKyAgICAgICAgfSB3b2xmU1NMX011dGV4OworICAgICNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1NfQVBJKQorICAgICAgICB0eXBlZGVmIENSSVRJQ0FMX1NFQ1RJT04gd29sZlNTTF9NdXRleDsKKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfUFRIUkVBRFMpCisgICAgICAgIHR5cGVkZWYgcHRocmVhZF9tdXRleF90IHdvbGZTU0xfTXV0ZXg7CisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX0tUSFJFQURTKQorICAgICAgICB0eXBlZGVmIHN0cnVjdCBtdXRleCB3b2xmU1NMX011dGV4OworICAgICNlbGlmIGRlZmluZWQoVEhSRUFEWCkKKyAgICAgICAgdHlwZWRlZiBUWF9NVVRFWCB3b2xmU1NMX011dGV4OworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9ERU9TKQorICAgICAgICB0eXBlZGVmIG11dGV4X2hhbmRsZV90IHdvbGZTU0xfTXV0ZXg7CisgICAgI2VsaWYgZGVmaW5lZChNSUNSSVVNKQorICAgICAgICB0eXBlZGVmIE9TX01VVEVYIHdvbGZTU0xfTXV0ZXg7CisgICAgI2VsaWYgZGVmaW5lZChFQlNORVQpCisgICAgICAgIHR5cGVkZWYgUlRQX01VVEVYIHdvbGZTU0xfTXV0ZXg7CisgICAgI2VsaWYgZGVmaW5lZChGUkVFU0NBTEVfTVFYKSB8fCBkZWZpbmVkKEZSRUVTQ0FMRV9LU0RLX01RWCkKKyAgICAgICAgdHlwZWRlZiBNVVRFWF9TVFJVQ1Qgd29sZlNTTF9NdXRleDsKKyAgICAjZWxpZiBkZWZpbmVkKEZSRUVTQ0FMRV9GUkVFX1JUT1MpCisgICAgICAgIHR5cGVkZWYgbXV0ZXhfdCB3b2xmU1NMX011dGV4OworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9WWFdPUktTKQorICAgICAgICB0eXBlZGVmIFNFTV9JRCB3b2xmU1NMX011dGV4OworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF91SVRST040KQorICAgICAgICB0eXBlZGVmIHN0cnVjdCB3b2xmU1NMX011dGV4IHsKKyAgICAgICAgICAgIFRfQ1NFTSBzZW0gOworICAgICAgICAgICAgSUQgICAgIGlkIDsKKyAgICAgICAgfSB3b2xmU1NMX011dGV4OworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF91VEtFUk5FTDIpCisgICAgICAgIHR5cGVkZWYgc3RydWN0IHdvbGZTU0xfTXV0ZXggeworICAgICAgICAgICAgVF9DU0VNIHNlbSA7CisgICAgICAgICAgICBJRCAgICAgaWQgOworICAgICAgICB9IHdvbGZTU0xfTXV0ZXg7CisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX01ES19BUk0pCisgICAgICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfQ01TSVNfUlRPUykKKyAgICAgICAgICAgIHR5cGVkZWYgb3NNdXRleElkIHdvbGZTU0xfTXV0ZXg7CisgICAgICAgICNlbHNlCisgICAgICAgICAgICB0eXBlZGVmIE9TX01VVCB3b2xmU1NMX011dGV4OworICAgICAgICAjZW5kaWYKKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfQ01TSVNfUlRPUykKKyAgICAgICAgdHlwZWRlZiBvc011dGV4SWQgd29sZlNTTF9NdXRleDsKKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfQ01TSVNfUlRPU3YyKQorICAgICAgICB0eXBlZGVmIG9zTXV0ZXhJZF90IHdvbGZTU0xfTXV0ZXg7CisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1RJUlRPUykKKyAgICAgICAgdHlwZWRlZiB0aV9zeXNiaW9zX2tubF9TZW1hcGhvcmVfSGFuZGxlIHdvbGZTU0xfTXV0ZXg7CisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX0ZST1NURUQpCisgICAgICAgIHR5cGVkZWYgbXV0ZXhfdCAqIHdvbGZTU0xfTXV0ZXg7CisgICAgI2VsaWYgZGVmaW5lZChJTlRJTUVfUlRPUykKKyAgICAgICAgdHlwZWRlZiBSVEhBTkRMRSB3b2xmU1NMX011dGV4OworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9OVUNMRVVTXzFfMikKKyAgICAgICAgdHlwZWRlZiBOVV9TRU1BUEhPUkUgd29sZlNTTF9NdXRleDsKKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgICAgICB0eXBlZGVmIHN0cnVjdCBrX211dGV4IHdvbGZTU0xfTXV0ZXg7CisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1RFTElUX00yTUIpCisgICAgICAgIHR5cGVkZWYgTTJNQl9PU19NVFhfSEFORExFIHdvbGZTU0xfTXV0ZXg7CisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1VTRVJfTVVURVgpCisgICAgICAgIC8qIHR5cGVkZWYgVXNlcl9NdXRleCB3b2xmU1NMX011dGV4OyAqLworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9MSU5VWEtNKQorICAgICAgICB0eXBlZGVmIHN0cnVjdCBtdXRleCB3b2xmU1NMX011dGV4OworICAgICNlbHNlCisgICAgICAgICNlcnJvciBOZWVkIGEgbXV0ZXggdHlwZSBpbiBtdWx0aXRocmVhZGVkIG1vZGUKKyAgICAjZW5kaWYgLyogVVNFX1dJTkRPV1NfQVBJICovCisjZW5kaWYgLyogU0lOR0xFX1RIUkVBREVEICovCisKKy8qIEVuYWJsZSBjcnlwdCBIVyBtdXRleCBmb3IgRnJlZXNjYWxlIE1NQ0FVLCBQSUMzMk1aIG9yIFNUTTMyICovCisjaWYgZGVmaW5lZChGUkVFU0NBTEVfTU1DQVUpIHx8IGRlZmluZWQoV09MRlNTTF9NSUNST0NISVBfUElDMzJNWikgfHwgXAorICAgIGRlZmluZWQoU1RNMzJfQ1JZUFRPKSB8fCBkZWZpbmVkKFNUTTMyX0hBU0gpIHx8IGRlZmluZWQoU1RNMzJfUk5HKQorICAgICNpZm5kZWYgV09MRlNTTF9DUllQVF9IV19NVVRFWAorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfQ1JZUFRfSFdfTVVURVggIDEKKyAgICAjZW5kaWYKKyNlbmRpZiAvKiBGUkVFU0NBTEVfTU1DQVUgKi8KKworI2lmbmRlZiBXT0xGU1NMX0NSWVBUX0hXX01VVEVYCisgICAgI2RlZmluZSBXT0xGU1NMX0NSWVBUX0hXX01VVEVYICAwCisjZW5kaWYKKworI2lmIFdPTEZTU0xfQ1JZUFRfSFdfTVVURVgKKyAgICAvKiB3b2xmU1NMX0NyeXB0SHdNdXRleEluaXQgaXMgY2FsbGVkIG9uIGZpcnN0IHdvbGZTU0xfQ3J5cHRId011dGV4TG9jaywKKyAgICAgICBob3dldmVyIGl0J3MgcmVjb21tZW5kZWQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5IG9uIEh3IGluaXQgdG8gYXZvaWQgcG9zc2libGUKKyAgICAgICByYWNlIGNvbmRpdGlvbiB3aGVyZSB0d28gY2FsbHMgdG8gd29sZlNTTF9DcnlwdEh3TXV0ZXhMb2NrIGFyZSBtYWRlIGF0CisgICAgICAgdGhlIHNhbWUgdGltZS4gKi8KKyAgICBpbnQgd29sZlNTTF9DcnlwdEh3TXV0ZXhJbml0KHZvaWQpOworICAgIGludCB3b2xmU1NMX0NyeXB0SHdNdXRleExvY2sodm9pZCk7CisgICAgaW50IHdvbGZTU0xfQ3J5cHRId011dGV4VW5Mb2NrKHZvaWQpOworI2Vsc2UKKyAgICAvKiBEZWZpbmUgc3R1YnMsIHNpbmNlIEhXIG11dGV4IGlzIGRpc2FibGVkICovCisgICAgI2RlZmluZSB3b2xmU1NMX0NyeXB0SHdNdXRleEluaXQoKSAgICAgIDAgLyogU3VjY2VzcyAqLworICAgICNkZWZpbmUgd29sZlNTTF9DcnlwdEh3TXV0ZXhMb2NrKCkgICAgICAwIC8qIFN1Y2Nlc3MgKi8KKyAgICAjZGVmaW5lIHdvbGZTU0xfQ3J5cHRId011dGV4VW5Mb2NrKCkgICAgKHZvaWQpMCAvKiBTdWNjZXNzICovCisjZW5kaWYgLyogV09MRlNTTF9DUllQVF9IV19NVVRFWCAqLworCisvKiBNdXRleCBmdW5jdGlvbnMgKi8KK1dPTEZTU0xfQVBJIGludCB3Y19Jbml0TXV0ZXgod29sZlNTTF9NdXRleCopOworV09MRlNTTF9BUEkgd29sZlNTTF9NdXRleCogd2NfSW5pdEFuZEFsbG9jTXV0ZXgodm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgd2NfRnJlZU11dGV4KHdvbGZTU0xfTXV0ZXgqKTsKK1dPTEZTU0xfQVBJIGludCB3Y19Mb2NrTXV0ZXgod29sZlNTTF9NdXRleCopOworV09MRlNTTF9BUEkgaW50IHdjX1VuTG9ja011dGV4KHdvbGZTU0xfTXV0ZXgqKTsKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoSEFWRV9XRUJTRVJWRVIpCisvKiBkeW5hbWljYWxseSBzZXQgd2hpY2ggbXV0ZXggdG8gdXNlLiB1bmxvY2sgLyBsb2NrIGlzIGNvbnRyb2xsZWQgYnkgZmxhZyAqLwordHlwZWRlZiB2b2lkIChtdXRleF9jYikoaW50IGZsYWcsIGludCB0eXBlLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSk7CisKK1dPTEZTU0xfQVBJIGludCB3Y19Mb2NrTXV0ZXhfZXgoaW50IGZsYWcsIGludCB0eXBlLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSk7CitXT0xGU1NMX0FQSSBpbnQgd2NfU2V0TXV0ZXhDYihtdXRleF9jYiogY2IpOworI2VuZGlmCisKKy8qIG1haW4gY3J5cHRvIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uICovCitXT0xGU1NMX0FQSSBpbnQgd29sZkNyeXB0X0luaXQodm9pZCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZkNyeXB0X0NsZWFudXAodm9pZCk7CisKKyNpZmRlZiBXT0xGU1NMX1RSQUNLX01FTU9SWV9WRVJCT1NFCisgICAgV09MRlNTTF9BUEkgbG9uZyB3b2xmQ3J5cHRfaGVhcF9wZWFrQWxsb2NzX2NoZWNrcG9pbnQodm9pZCk7CisgICAgV09MRlNTTF9BUEkgbG9uZyB3b2xmQ3J5cHRfaGVhcF9wZWFrQnl0ZXNfY2hlY2twb2ludCh2b2lkKTsKKyNlbmRpZgorCisKKy8qIEZJTEVTWVNURU0gU0VDVElPTiAqLworLyogZmlsZXN5c3RlbSBhYnN0cmFjdGlvbiBsYXllciwgdXNlZCBieSBzc2wuYyAqLworI2lmbmRlZiBOT19GSUxFU1lTVEVNCisKKyNpZiBkZWZpbmVkKEVCU05FVCkKKyAgICAjaW5jbHVkZSAidmZhcGkuaCIKKyAgICAjaW5jbHVkZSAidmZpbGUuaCIKKworICAgIGludCBlYnNuZXRfZnNlZWsoaW50IGEsIGxvbmcgYiwgaW50IGMpOyAvKiBOb3QgcHJvdG90eXBlZCBpbiB2ZmlsZS5oIHBlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBFQlNuZXQgZmVlZGJhY2sgKi8KKworICAgICNkZWZpbmUgWEZJTEUgICAgICAgICAgICAgICAgICAgIGludAorICAgICNkZWZpbmUgWEZPUEVOKE5BTUUsIE1PREUpICAgICAgIHZmX29wZW4oKGNvbnN0IGNoYXIgKilOQU1FLCBWT19SRE9OTFksIDApOworICAgICNkZWZpbmUgWEZTRUVLICAgICAgICAgICAgICAgICAgIGVic25ldF9mc2VlaworICAgICNkZWZpbmUgWEZURUxMICAgICAgICAgICAgICAgICAgIHZmX3RlbGwKKyAgICAjZGVmaW5lIFhSRVdJTkQgICAgICAgICAgICAgICAgICB2Zl9yZXdpbmQKKyAgICAjZGVmaW5lIFhGUkVBRChCVUYsIFNaLCBBTVQsIEZEKSB2Zl9yZWFkKEZELCBCVUYsIFNaKkFNVCkKKyAgICAjZGVmaW5lIFhGV1JJVEUoQlVGLCBTWiwgQU1ULCBGRCkgdmZfd3JpdGUoRkQsIEJVRiwgU1oqQU1UKQorICAgICNkZWZpbmUgWEZDTE9TRSAgICAgICAgICAgICAgICAgIHZmX2Nsb3NlCisgICAgI2RlZmluZSBYU0VFS19FTkQgICAgICAgICAgICAgICAgVlNFRUtfRU5ECisgICAgI2RlZmluZSBYQkFERklMRSAgICAgICAgICAgICAgICAgLTEKKyAgICAjZGVmaW5lIFhGR0VUUyhiLHMsZikgICAgICAgICAgICAtMiAvKiBOb3QgcG9ydGVkIHlldCAqLworCisjZWxpZiBkZWZpbmVkKExTUl9GUykKKyAgICAjaW5jbHVkZSA8ZnMuaD4KKyAgICAjZGVmaW5lIFhGSUxFICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmc19maWxlKgorICAgICNkZWZpbmUgWEZPUEVOKE5BTUUsIE1PREUpICAgICAgZnNfb3BlbigoY2hhciopTkFNRSk7CisgICAgI2RlZmluZSBYRlNFRUsoRiwgTywgVykgICAgICAgICAodm9pZClGCisgICAgI2RlZmluZSBYRlRFTEwoRikgICAgICAgICAgICAgICAoRiktPmxlbgorICAgICNkZWZpbmUgWFJFV0lORChGKSAgICAgICAgICAgICAgKHZvaWQpRgorICAgICNkZWZpbmUgWEZSRUFEKEJVRiwgU1osIEFNVCwgRikgZnNfcmVhZChGLCAoY2hhciopQlVGLCBTWipBTVQpCisgICAgI2RlZmluZSBYRldSSVRFKEJVRiwgU1osIEFNVCwgRikgZnNfd3JpdGUoRiwgKGNoYXIqKUJVRiwgU1oqQU1UKQorICAgICNkZWZpbmUgWEZDTE9TRSAgICAgICAgICAgICAgICAgZnNfY2xvc2UKKyAgICAjZGVmaW5lIFhTRUVLX0VORCAgICAgICAgICAgICAgIDAKKyAgICAjZGVmaW5lIFhCQURGSUxFICAgICAgICAgICAgICAgIE5VTEwKKyAgICAjZGVmaW5lIFhGR0VUUyhiLHMsZikgICAgICAgICAgIC0yIC8qIE5vdCBwb3J0ZWQgeWV0ICovCisKKyNlbGlmIGRlZmluZWQoRlJFRVNDQUxFX01RWCkgfHwgZGVmaW5lZChGUkVFU0NBTEVfS1NES19NUVgpCisgICAgI2RlZmluZSBYRklMRSAgICAgICAgICAgICAgICAgICBNUVhfRklMRV9QVFIKKyAgICAjZGVmaW5lIFhGT1BFTiAgICAgICAgICAgICAgICAgIGZvcGVuCisgICAgI2RlZmluZSBYRlNFRUsgICAgICAgICAgICAgICAgICBmc2VlaworICAgICNkZWZpbmUgWEZURUxMICAgICAgICAgICAgICAgICAgZnRlbGwKKyAgICAjZGVmaW5lIFhSRVdJTkQoRikgICAgICAgICAgICAgIGZzZWVrKEYsIDAsIElPX1NFRUtfU0VUKQorICAgICNkZWZpbmUgWEZSRUFEICAgICAgICAgICAgICAgICAgZnJlYWQKKyAgICAjZGVmaW5lIFhGV1JJVEUgICAgICAgICAgICAgICAgIGZ3cml0ZQorICAgICNkZWZpbmUgWEZDTE9TRSAgICAgICAgICAgICAgICAgZmNsb3NlCisgICAgI2RlZmluZSBYU0VFS19FTkQgICAgICAgICAgICAgICBJT19TRUVLX0VORAorICAgICNkZWZpbmUgWEJBREZJTEUgICAgICAgICAgICAgICAgTlVMTAorICAgICNkZWZpbmUgWEZHRVRTICAgICAgICAgICAgICAgICAgZmdldHMKKworI2VsaWYgZGVmaW5lZChXT0xGU1NMX0RFT1MpCisgICAgI2RlZmluZSBOT19GSUxFU1lTVEVNCisgICAgI3dhcm5pbmcgIlRPRE8gLSBEREMtSSBDZXJ0aWZpYWJsZSBGYXN0IEZpbGUgU3lzdGVtIGZvciBEZW9zIGlzIG5vdCBpbnRlZ3JhdGVkIgorI2VsaWYgZGVmaW5lZChNSUNSSVVNKQorICAgICNpbmNsdWRlIDxmc19hcGkuaD4KKyAgICAjZGVmaW5lIFhGSUxFICAgICAgRlNfRklMRSoKKyAgICAjZGVmaW5lIFhGT1BFTiAgICAgZnNfZm9wZW4KKyAgICAjZGVmaW5lIFhGU0VFSyAgICAgZnNfZnNlZWsKKyAgICAjZGVmaW5lIFhGVEVMTCAgICAgZnNfZnRlbGwKKyAgICAjZGVmaW5lIFhSRVdJTkQgICAgZnNfcmV3aW5kCisgICAgI2RlZmluZSBYRlJFQUQgICAgIGZzX2ZyZWFkCisgICAgI2RlZmluZSBYRldSSVRFICAgIGZzX2Z3cml0ZQorICAgICNkZWZpbmUgWEZDTE9TRSAgICBmc19mY2xvc2UKKyAgICAjZGVmaW5lIFhTRUVLX0VORCAgRlNfU0VFS19FTkQKKyAgICAjZGVmaW5lIFhCQURGSUxFICAgTlVMTAorICAgICNkZWZpbmUgWEZHRVRTKGIscyxmKSAtMiAvKiBOb3QgcG9ydGVkIHlldCAqLworCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfTlVDTEVVU18xXzIpCisgICAgI2luY2x1ZGUgImZhbC9pbmMvZmFsLmgiCisgICAgI2RlZmluZSBYRklMRSAgICAgIEZJTEUqCisgICAgI2RlZmluZSBYRk9QRU4gICAgIGZvcGVuCisgICAgI2RlZmluZSBYRlNFRUsgICAgIGZzZWVrCisgICAgI2RlZmluZSBYRlRFTEwgICAgIGZ0ZWxsCisgICAgI2RlZmluZSBYUkVXSU5EICAgIHJld2luZAorICAgICNkZWZpbmUgWEZSRUFEICAgICBmcmVhZAorICAgICNkZWZpbmUgWEZXUklURSAgICBmd3JpdGUKKyAgICAjZGVmaW5lIFhGQ0xPU0UgICAgZmNsb3NlCisgICAgI2RlZmluZSBYU0VFS19FTkQgIFBTRUVLX0VORAorICAgICNkZWZpbmUgWEJBREZJTEUgICBOVUxMCisKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9BUEFDSEVfTVlORVdUKQorICAgICNpbmNsdWRlIDxmcy9mcy5oPgorICAgICNkZWZpbmUgWEZJTEUgIHN0cnVjdCBmc19maWxlKgorCisgICAgI2RlZmluZSBYRk9QRU4gICAgIG15bmV3dF9mb3BlbgorICAgICNkZWZpbmUgWEZTRUVLICAgICBteW5ld3RfZnNlZWsKKyAgICAjZGVmaW5lIFhGVEVMTCAgICAgbXluZXd0X2Z0ZWxsCisgICAgI2RlZmluZSBYUkVXSU5EICAgIG15bmV3dF9yZXdpbmQKKyAgICAjZGVmaW5lIFhGUkVBRCAgICAgbXluZXd0X2ZyZWFkCisgICAgI2RlZmluZSBYRldSSVRFICAgIG15bmV3dF9md3JpdGUKKyAgICAjZGVmaW5lIFhGQ0xPU0UgICAgbXluZXd0X2ZjbG9zZQorICAgICNkZWZpbmUgWFNFRUtfRU5EICAyCisgICAgI2RlZmluZSBYQkFERklMRSAgIE5VTEwKKyAgICAjZGVmaW5lIFhGR0VUUyhiLHMsZikgLTIgLyogTm90IHBvcnRlZCB5ZXQgKi8KKworI2VsaWYgZGVmaW5lZChXT0xGU1NMX1pFUEhZUikKKyAgICAjaW5jbHVkZSA8ZnMuaD4KKworICAgICNkZWZpbmUgWEZJTEUgICAgICBzdHJ1Y3QgZnNfZmlsZV90KgorICAgICNkZWZpbmUgU1RBVCAgICAgICBzdHJ1Y3QgZnNfZGlyZW50CisKKyAgICBYRklMRSB6X2ZzX29wZW4oY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGNoYXIqIHBlcm0pOworICAgIGludCB6X2ZzX2Nsb3NlKFhGSUxFIGZpbGUpOworCisgICAgI2RlZmluZSBYRk9QRU4gICAgICAgICAgICAgIHpfZnNfb3BlbgorICAgICNkZWZpbmUgWEZDTE9TRSAgICAgICAgICAgICB6X2ZzX2Nsb3NlCisgICAgI2RlZmluZSBYRlNFRUsgICAgICAgICAgICAgIGZzX3NlZWsKKyAgICAjZGVmaW5lIFhGVEVMTCAgICAgICAgICAgICAgZnNfdGVsbAorICAgICNkZWZpbmUgWEZSRVdJTkQgICAgICAgICAgICBmc19yZXdpbmQKKyAgICAjZGVmaW5lIFhSRVdJTkQoRikgICAgICAgICAgZnNfc2VlayhGLCAwLCBGU19TRUVLX1NFVCkKKyAgICAjZGVmaW5lIFhGUkVBRChQLFMsTixGKSAgICAgZnNfcmVhZChGLCBQLCBTKk4pCisgICAgI2RlZmluZSBYRldSSVRFKFAsUyxOLEYpICAgIGZzX3dyaXRlKEYsIFAsIFMqTikKKyAgICAjZGVmaW5lIFhTRUVLX0VORCAgICAgICAgICAgRlNfU0VFS19FTkQKKyAgICAjZGVmaW5lIFhCQURGSUxFICAgICAgICAgICAgTlVMTAorICAgICNkZWZpbmUgWEZHRVRTKGIscyxmKSAgICAgICAtMiAvKiBOb3QgcG9ydGVkIHlldCAqLworCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfVEVMSVRfTTJNQikKKyAgICAjZGVmaW5lIFhGSUxFICAgICAgICAgICAgICAgICAgICBJTlQzMgorICAgICNkZWZpbmUgWEZPUEVOKE5BTUUsIE1PREUpICAgICAgIG0ybWJfZnNfb3BlbigoTkFNRSksIDAsIChNT0RFKSkKKyAgICAjZGVmaW5lIFhGU0VFSyhGLCBPLCBXKSAgICAgICAgICBtMm1iX2ZzX2xzZWVrKChGKSwgKE8pLCAoVykpCisgICAgI2RlZmluZSBYRlRFTEwoRikgICAgICAgICAgICAgICAgbTJtYl9mc19sc2VlaygoRiksIDAsIE0yTUJfU0VFS19FTkQpCisgICAgI2RlZmluZSBYUkVXSU5EKEYpICAgICAgICAgICAgICAgKHZvaWQpRgorICAgICNkZWZpbmUgWEZSRUFEKEJVRiwgU1osIEFNVCwgRikgIG0ybWJfZnNfcmVhZCgoRiksIChCVUYpLCAoU1opKihBTVQpKQorICAgICNkZWZpbmUgWEZXUklURShCVUYsIFNaLCBBTVQsIEYpIG0ybWJfZnNfd3JpdGUoKEYpLCAoQlVGKSwgKFNaKSooQU1UKSkKKyAgICAjZGVmaW5lIFhGQ0xPU0UgICAgICAgICAgICAgICAgICBtMm1iX2ZzX2Nsb3NlCisgICAgI2RlZmluZSBYU0VFS19FTkQgICAgICAgICAgICAgICAgTTJNQl9TRUVLX0VORAorICAgICNkZWZpbmUgWEJBREZJTEUgICAgICAgICAgICAgICAgIC0xCisgICAgI2RlZmluZSBYRkdFVFMoYixzLGYpICAgICAgICAgICAgLTIgLyogTm90IHBvcnRlZCB5ZXQgKi8KKworI2VsaWYgZGVmaW5lZCAoV09MRlNTTF9YSUxJTlgpCisgICAgI2luY2x1ZGUgInhzZHBzLmgiCisgICAgI2luY2x1ZGUgImZmLmgiCisKKyAgICAvKiB3b3JrYXJvdW5kIHRvIGRlY2xhcmUgdmFyaWFibGUgYW5kIHByb3ZpZGUgdHlwZSAqLworICAgICNkZWZpbmUgWEZJTEUgICAgICAgICAgICAgICAgICAgIEZJTCBjdXJGaWxlOyBGSUwqCisgICAgI2RlZmluZSBYRk9QRU4oTkFNRSwgTU9ERSkgICAgICAgKHsgRlJFU1VMVCByZXM7IHJlcyA9IGZfb3BlbigmY3VyRmlsZSwgKE5BTUUpLCAoRkFfT1BFTl9BTFdBWVMgfCBGQV9XUklURSB8IEZBX1JFQUQpKTsgKHJlcyA9PSBGUl9PSykgPyAmY3VyRmlsZSA6IE5VTEw7IH0pCisgICAgI2RlZmluZSBYRlNFRUsoRiwgTywgVykgICAgICAgICAgZl9sc2VlaygoRiksIChPKSkKKyAgICAjZGVmaW5lIFhGVEVMTChGKSAgICAgICAgICAgICAgICBmX3RlbGwoKEYpKQorICAgICNkZWZpbmUgWFJFV0lORChGKSAgICAgICAgICAgICAgIGZfcmV3aW5kKChGKSkKKyAgICAjZGVmaW5lIFhGUkVBRChCVUYsIFNaLCBBTVQsIEYpICAoeyBGUkVTVUxUIHJlczsgVUlOVCBicjsgcmVzID0gZl9yZWFkKChGKSwgKEJVRiksIChTWikqKEFNVCksICZicik7ICh2b2lkKWJyOyByZXM7IH0pCisgICAgI2RlZmluZSBYRldSSVRFKEJVRiwgU1osIEFNVCwgRikgKHsgRlJFU1VMVCByZXM7IFVJTlQgd3JpdHRlbjsgcmVzID0gZl93cml0ZSgoRiksIChCVUYpLCAoU1opKihBTVQpLCAmd3JpdHRlbik7ICh2b2lkKXdyaXR0ZW47IHJlczsgfSkKKyAgICAjZGVmaW5lIFhGQ0xPU0UoRikgICAgICAgICAgICAgICBmX2Nsb3NlKChGKSkKKyAgICAjZGVmaW5lIFhTRUVLX0VORCAgICAgICAgICAgICAgICAwCisgICAgI2RlZmluZSBYQkFERklMRSAgICAgICAgICAgICAgICAgTlVMTAorICAgICNkZWZpbmUgWEZHRVRTKGIscyxmKSAgICAgICAgICAgIGZfZ2V0cygoYiksIChzKSwgKGYpKQorI2VsaWYgZGVmaW5lZCAoX1dJTjMyX1dDRSkKKyAgICAvKiBzdGRpbywgV0lOQ0UgY2FzZSAqLworICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgICNkZWZpbmUgWEZJTEUgICAgICBGSUxFKgorICAgICNkZWZpbmUgWEZPUEVOICAgICBmb3BlbgorICAgICNkZWZpbmUgWEZET1BFTiAgICBmZG9wZW4KKyAgICAjZGVmaW5lIFhGU0VFSyAgICAgZnNlZWsKKyAgICAjZGVmaW5lIFhGVEVMTCAgICAgZnRlbGwKKyAgICAjZGVmaW5lIFhSRVdJTkQoRikgWEZTRUVLKEYsIDAsIFNFRUtfU0VUKQorICAgICNkZWZpbmUgWEZSRUFEICAgICBmcmVhZAorICAgICNkZWZpbmUgWEZXUklURSAgICBmd3JpdGUKKyAgICAjZGVmaW5lIFhGQ0xPU0UgICAgZmNsb3NlCisgICAgI2RlZmluZSBYU0VFS19FTkQgIFNFRUtfRU5ECisgICAgI2RlZmluZSBYQkFERklMRSAgIE5VTEwKKyAgICAjZGVmaW5lIFhGR0VUUyAgICAgZmdldHMKKyAgICAjZGVmaW5lIFhWU05QUklOVEYgX3ZzbnByaW50ZgorCisjZWxpZiBkZWZpbmVkKEZVU0lPTl9SVE9TKQorICAgICNpbmNsdWRlIDxmY2xzdGRpby5oPgorICAgICNpbmNsdWRlIDxmY2x1bmlzdGQuaD4KKyAgICAjaW5jbHVkZSA8ZmNsZGlyZW50Lmg+CisgICAgI2luY2x1ZGUgPHN5cy9mY2xzdGF0Lmg+CisgICAgI2luY2x1ZGUgPGZjbHN0cmluZy5oPgorICAgICNpbmNsdWRlIDxmY2xfb3MuaD4KKyAgICAjZGVmaW5lIFhGSUxFICAgICBGQ0xfRklMRSoKKyAgICAjZGVmaW5lIFhGT1BFTiAgICBGQ0xfRk9QRU4KKyAgICAjZGVmaW5lIFhGU0VFSyAgICBGQ0xfRlNFRUsKKyAgICAjZGVmaW5lIFhGVEVMTCAgICBGQ0xfRlRFTEwKKyAgICAjZGVmaW5lIFhSRVdJTkQgICBGQ0xfUkVXSU5ECisgICAgI2RlZmluZSBYRlJFQUQgICAgRkNMX0ZSRUFECisgICAgI2RlZmluZSBYRldSSVRFICAgRkNMX0ZXUklURQorICAgICNkZWZpbmUgWEZDTE9TRSAgIEZDTF9GQ0xPU0UKKyAgICAjZGVmaW5lIFhTRUVLX0VORCBTRUVLX0VORAorICAgICNkZWZpbmUgWEJBREZJTEUgIE5VTEwKKyAgICAjZGVmaW5lIFhGR0VUUyAgICBGQ0xfRkdFVFMKKyAgICAjZGVmaW5lIFhGUFVUUyAgICBGQ0xfRlBVVFMKKyAgICAjZGVmaW5lIFhGUFJJTlRGICBGQ0xfRlBSSU5URgorICAgICNkZWZpbmUgWFZGUFJJTlRGIEZDTF9WRlBSSU5URgorICAgICNkZWZpbmUgWFZTTlBSSU5URiAgRkNMX1ZTTlBSSU5URgorICAgICNkZWZpbmUgWFNOUFJJTlRGICBGQ0xfU05QUklOVEYKKyAgICAjZGVmaW5lIFhTUFJJTlRGICBGQ0xfU1BSSU5URgorICAgICNkZWZpbmUgRElSICAgICAgIEZDTF9ESVIKKyAgICAjZGVmaW5lIHN0YXQgICAgICBGQ0xfU1RBVAorICAgICNkZWZpbmUgb3BlbmRpciAgIEZDTF9PUEVORElSCisgICAgI2RlZmluZSBjbG9zZWRpciAgRkNMX0NMT1NFRElSCisgICAgI2RlZmluZSByZWFkZGlyICAgRkNMX1JFQURESVIKKyAgICAjZGVmaW5lIGRpcmVudCAgICBmY2xEaXJlbnQgCisgICAgI2RlZmluZSBzdHJuY2FzZWNtcCBGQ0xfU1RSTkNBU0VDTVAKKworICAgIC8qIEZVU0lPTiBTUEVDSUZJQyBFUlJPUiBDT0RFICovCisgICAgI2RlZmluZSBGVVNJT05fSU9fU0VORF9FIEZDTF9FV09VTERCTE9DSworCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfVVNFUl9GSUxFU1lTVEVNKQorICAgIC8qIFRvIGJlIGRlZmluZWQgaW4gdXNlcl9zZXR0aW5ncy5oICovCisjZWxzZQorICAgIC8qIHN0ZGlvLCBkZWZhdWx0IGNhc2UgKi8KKyAgICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgICAjZGVmaW5lIFhGSUxFICAgICAgRklMRSoKKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX01ES19BUk0pCisgICAgICAgIGV4dGVybiBGSUxFICogd29sZlNTTF9mb3Blbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICptb2RlKSA7CisgICAgICAgICNkZWZpbmUgWEZPUEVOICAgICB3b2xmU1NMX2ZvcGVuCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBYRk9QRU4gICAgIGZvcGVuCisgICAgI2VuZGlmCisgICAgI2RlZmluZSBYRkRPUEVOICAgIGZkb3BlbgorICAgICNkZWZpbmUgWEZTRUVLICAgICBmc2VlaworICAgICNkZWZpbmUgWEZURUxMICAgICBmdGVsbAorICAgICNkZWZpbmUgWFJFV0lORCAgICByZXdpbmQKKyAgICAjZGVmaW5lIFhGUkVBRCAgICAgZnJlYWQKKyAgICAjZGVmaW5lIFhGV1JJVEUgICAgZndyaXRlCisgICAgI2RlZmluZSBYRkNMT1NFICAgIGZjbG9zZQorICAgICNkZWZpbmUgWFNFRUtfRU5EICBTRUVLX0VORAorICAgICNkZWZpbmUgWEJBREZJTEUgICBOVUxMCisgICAgI2RlZmluZSBYRkdFVFMgICAgIGZnZXRzCisgICAgI2RlZmluZSBYRlBSSU5URiAgIGZwcmludGYKKworICAgICNpZiAhZGVmaW5lZChOT19XT0xGU1NMX0RJUilcCisgICAgICAgICYmICFkZWZpbmVkKFdPTEZTU0xfTlVDTEVVUykgJiYgIWRlZmluZWQoV09MRlNTTF9OVUNMRVVTXzFfMikKKyAgICAjaWYgZGVmaW5lZChVU0VfV0lORE9XU19BUEkpCisgICAgICAgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICAgICAgICAjZGVmaW5lIFhTVEFUICAgICAgIF9zdGF0CisgICAgICAgICNkZWZpbmUgWFNfSVNSRUcocykgKHMgJiBfU19JRlJFRykKKyAgICAgICAgI2RlZmluZSBTRVBBUkFUT1JfQ0hBUiAnOycKKworICAgICNlbGlmIGRlZmluZWQoSU5USU1FX1JUT1MpCisgICAgICAgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICAgICAgICAjZGVmaW5lIFhTVEFUIF9zdGF0NjQKKyAgICAgICAgI2RlZmluZSBYU19JU1JFRyhzKSBTX0lTUkVHKHMpCisgICAgICAgICNkZWZpbmUgU0VQQVJBVE9SX0NIQVIgJzsnCisgICAgICAgICNkZWZpbmUgWFdSSVRFICAgICAgd3JpdGUKKyAgICAgICAgI2RlZmluZSBYUkVBRCAgICAgICByZWFkCisgICAgICAgICNkZWZpbmUgWENMT1NFICAgICAgY2xvc2UKKworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9aRVBIWVIpCisgICAgICAgICNkZWZpbmUgWFNUQVQgICAgICAgZnNfc3RhdAorICAgICAgICAjZGVmaW5lIFhTX0lTUkVHKHMpIChzID09IEZTX0RJUl9FTlRSWV9GSUxFKQorICAgICAgICAjZGVmaW5lIFNFUEFSQVRPUl9DSEFSICc6JworICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9URUxJVF9NMk1CKQorICAgICAgICAjZGVmaW5lIFhTVEFUICAgICAgIG0ybWJfZnNfc3RhdAorICAgICAgICAjZGVmaW5lIFhTX0lTUkVHKHMpIChzICYgTTJNQl9TX0lGUkVHKQorICAgICAgICAjZGVmaW5lIFNFUEFSQVRPUl9DSEFSICc6JworICAgICNlbHNlCisgICAgICAgICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAgICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICAgICAgICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAgICAgICAgI2RlZmluZSBYV1JJVEUgICAgICB3cml0ZQorICAgICAgICAjZGVmaW5lIFhSRUFEICAgICAgIHJlYWQKKyAgICAgICAgI2RlZmluZSBYQ0xPU0UgICAgICBjbG9zZQorICAgICAgICAjZGVmaW5lIFhTVEFUICAgICAgIHN0YXQKKyAgICAgICAgI2RlZmluZSBYU19JU1JFRyhzKSBTX0lTUkVHKHMpCisgICAgICAgICNkZWZpbmUgU0VQQVJBVE9SX0NIQVIgJzonCisgICAgI2VuZGlmCisgICAgI2VuZGlmCisjZW5kaWYKKworLyogRGVmYXVsdHMsIHVzZXIgbWF5IG92ZXItcmlkZSB3aXRoIHVzZXJfc2V0dGluZ3MuaCBvciBpbiBhIHBvcnRpbmcgc2VjdGlvbgorICogYWJvdmUKKyAqLworI2lmbmRlZiBYVkZQUklOVEYKKyAgICAjZGVmaW5lIFhWRlBSSU5URiAgdmZwcmludGYKKyNlbmRpZgorI2lmbmRlZiBYVlNOUFJJTlRGCisgICAgI2RlZmluZSBYVlNOUFJJTlRGIHZzbnByaW50ZgorI2VuZGlmCisjaWZuZGVmIFhGUFVUUworICAgICNkZWZpbmUgWEZQVVRTICAgICBmcHV0cworI2VuZGlmCisjaWZuZGVmIFhTUFJJTlRGCisgICAgI2RlZmluZSBYU1BSSU5URiAgIHNwcmludGYKKyNlbmRpZgorCisgICAgI2lmbmRlZiBNQVhfRklMRU5BTUVfU1oKKyAgICAgICAgI2RlZmluZSBNQVhfRklMRU5BTUVfU1ogIDI1NiAvKiBtYXggZmlsZSBuYW1lIGxlbmd0aCAqLworICAgICNlbmRpZgorICAgICNpZm5kZWYgTUFYX1BBVEgKKyAgICAgICAgI2RlZmluZSBNQVhfUEFUSCAyNTYKKyAgICAjZW5kaWYKKworICAgIFdPTEZTU0xfTE9DQUwgaW50IHdjX0ZpbGVMb2FkKGNvbnN0IGNoYXIqIGZuYW1lLCB1bnNpZ25lZCBjaGFyKiogYnVmLCAKKyAgICAgICAgc2l6ZV90KiBidWZMZW4sIHZvaWQqIGhlYXApOworCisjaWYgIWRlZmluZWQoTk9fV09MRlNTTF9ESVIpICYmICFkZWZpbmVkKFdPTEZTU0xfTlVDTEVVUykgJiYgXAorICAgICFkZWZpbmVkKFdPTEZTU0xfTlVDTEVVU18xXzIpCisgICAgdHlwZWRlZiBzdHJ1Y3QgUmVhZERpckN0eCB7CisgICAgI2lmZGVmIFVTRV9XSU5ET1dTX0FQSQorICAgICAgICBXSU4zMl9GSU5EX0RBVEFBIEZpbmRGaWxlRGF0YTsKKyAgICAgICAgSEFORExFIGhGaW5kOworICAgICAgICBzdHJ1Y3QgWFNUQVQgczsKKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgICAgICBzdHJ1Y3QgZnNfZGlyZW50IGVudHJ5OworICAgICAgICBzdHJ1Y3QgZnNfZGlyX3QgIGRpcjsKKyAgICAgICAgc3RydWN0IGZzX2RpcmVudCBzOworICAgICAgICBzdHJ1Y3QgZnNfZGlyX3QqIGRpcnA7CisKKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfVEVMSVRfTTJNQikKKyAgICAgICAgTTJNQl9ESVJfVCogZGlyOworICAgICAgICBzdHJ1Y3QgTTJNQl9ESVJFTlQqIGVudHJ5OworICAgICAgICBzdHJ1Y3QgTTJNQl9TVEFUIHM7CisgICAgI2VsaWYgZGVmaW5lZChJTlRJTUVfUlRPUykKKyAgICAgICAgc3RydWN0IHN0YXQ2NCBzOworICAgICAgICBzdHJ1Y3QgX2ZpbmQ2NCBGaW5kRmlsZURhdGE7CisgICAgICAgICNkZWZpbmUgSW50aW1lRmluZEZpcnN0KG5hbWUsIGRhdGEpICgwID09IF9maW5kZmlyc3Q2NChuYW1lLCBkYXRhKSkKKyAgICAgICAgI2RlZmluZSBJbnRpbWVGaW5kTmV4dChkYXRhKSAgKDAgPT0gX2ZpbmRuZXh0NjQoZGF0YSkpCisgICAgICAgICNkZWZpbmUgSW50aW1lRmluZENsb3NlKGRhdGEpICgwID09IF9maW5kY2xvc2U2NChkYXRhKSkKKyAgICAgICAgI2RlZmluZSBJbnRpbWVGaWxlbmFtZShjdHgpICAgY3R4LT5GaW5kRmlsZURhdGEuZl9maWxlbmFtZQorICAgICNlbHNlCisgICAgICAgIHN0cnVjdCBkaXJlbnQqIGVudHJ5OworICAgICAgICBESVIqICAgZGlyOworICAgICAgICBzdHJ1Y3QgWFNUQVQgczsKKyAgICAjZW5kaWYKKyAgICAgICAgY2hhciBuYW1lW01BWF9GSUxFTkFNRV9TWl07CisgICAgfSBSZWFkRGlyQ3R4OworCisgICAgI2RlZmluZSBXQ19SRUFERElSX05PRklMRSAtMQorCisgICAgV09MRlNTTF9BUEkgaW50IHdjX1JlYWREaXJGaXJzdChSZWFkRGlyQ3R4KiBjdHgsIGNvbnN0IGNoYXIqIHBhdGgsIGNoYXIqKiBuYW1lKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd2NfUmVhZERpck5leHQoUmVhZERpckN0eCogY3R4LCBjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiogbmFtZSk7CisgICAgV09MRlNTTF9BUEkgdm9pZCB3Y19SZWFkRGlyQ2xvc2UoUmVhZERpckN0eCogY3R4KTsKKyNlbmRpZiAvKiAhTk9fV09MRlNTTF9ESVIgKi8KKyAgICAjZGVmaW5lIFdDX0lTRklMRUVYSVNUX05PRklMRSAtMQorCisgICAgV09MRlNTTF9BUEkgaW50IHdjX0ZpbGVFeGlzdHMoY29uc3QgY2hhciogZm5hbWUpOworCisjZW5kaWYgLyogIU5PX0ZJTEVTWVNURU0gKi8KKworCisvKiBNSU4vTUFYIE1BQ1JPIFNFQ1RJT04gKi8KKy8qIFdpbmRvd3MgQVBJIGRlZmluZXMgaXRzIG93biBtaW4oKSBtYWNyby4gKi8KKyNpZiBkZWZpbmVkKFVTRV9XSU5ET1dTX0FQSSkKKyAgICAjaWYgZGVmaW5lZChtaW4pIHx8IGRlZmluZWQoV09MRlNTTF9NWVNRTF9DT01QQVRJQkxFKQorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfSEFWRV9NSU4KKyAgICAjZW5kaWYgLyogbWluICovCisgICAgI2lmIGRlZmluZWQobWF4KSB8fCBkZWZpbmVkKFdPTEZTU0xfTVlTUUxfQ09NUEFUSUJMRSkKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX0hBVkVfTUFYCisgICAgI2VuZGlmIC8qIG1heCAqLworI2VuZGlmIC8qIFVTRV9XSU5ET1dTX0FQSSAqLworCisjaWZkZWYgX19RTlhOVE9fXworICAgICNkZWZpbmUgV09MRlNTTF9IQVZFX01JTgorICAgICNkZWZpbmUgV09MRlNTTF9IQVZFX01BWAorI2VuZGlmCisKKy8qIFRJTUUgU0VDVElPTiAqLworLyogVGltZSBmdW5jdGlvbnMgKi8KKyNpZm5kZWYgTk9fQVNOX1RJTUUKKyNpZiBkZWZpbmVkKFVTRVJfVElNRSkKKyAgICAvKiBVc2Ugb3VyIGdtdGltZSBhbmQgdGltZV90L3N0cnVjdCB0bSB0eXBlcy4KKyAgICAgICBPbmx5IG5lZWRzIHNlY29uZHMgc2luY2UgRVBPQ0ggdXNpbmcgWFRJTUUgZnVuY3Rpb24uCisgICAgICAgdGltZV90IFhUSU1FKHRpbWVfdCAqIHRpbWVyKSB7fQorICAgICovCisgICAgI2RlZmluZSBXT0xGU1NMX0dNVElNRQorICAgICNpZm5kZWYgSEFWRV9UTV9UWVBFCisgICAgICAgICNkZWZpbmUgVVNFX1dPTEZfVE0KKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIEhBVkVfVElNRV9UX1RZUEUKKyAgICAgICAgI2RlZmluZSBVU0VfV09MRl9USU1FX1QKKyAgICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZChUSU1FX09WRVJSSURFUykKKyAgICAvKiBPdmVycmlkZSBYVElNRSgpIGFuZCBYR01USU1FKCkgZnVuY3Rpb25hbGl0eS4KKyAgICAgICBSZXF1aXJlcyB1c2VyIHRvIHByb3ZpZGUgdGhlc2UgZnVuY3Rpb25zOgorICAgICAgICB0aW1lX3QgWFRJTUUodGltZV90ICogdGltZXIpIHt9CisgICAgICAgIHN0cnVjdCB0bSogWEdNVElNRShjb25zdCB0aW1lX3QqIHRpbWVyLCBzdHJ1Y3QgdG0qIHRtcCkge30KKyAgICAqLworICAgICNpZm5kZWYgSEFWRV9USU1FX1RfVFlQRQorICAgICAgICAjZGVmaW5lIFVTRV9XT0xGX1RJTUVfVAorICAgICNlbmRpZgorICAgICNpZm5kZWYgSEFWRV9UTV9UWVBFCisgICAgICAgICNkZWZpbmUgVVNFX1dPTEZfVE0KKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIE5FRURfVE1QX1RJTUUKKworI2VsaWYgZGVmaW5lZChXT0xGU1NMX1hJTElOWCkKKyAgICAjaWZuZGVmIFhUSU1FCisgICAgICAgICNkZWZpbmUgWFRJTUUodDEpICAgICAgIHhpbGlueF90aW1lKCh0MSkpCisgICAgI2VuZGlmCisgICAgI2luY2x1ZGUgPHRpbWUuaD4KKworI2VsaWYgZGVmaW5lZChIQVZFX1JUUF9TWVMpCisgICAgI2luY2x1ZGUgIm9zLmgiICAgICAgICAgICAvKiBkY19ydGNfYXBpIG5lZWRzICAgICovCisgICAgI2luY2x1ZGUgImRjX3J0Y19hcGkuaCIgICAvKiB0byBnZXQgY3VycmVudCB0aW1lICovCisKKyAgICAvKiB1c2VzIHBhcml0YWwgPHRpbWUuaD4gc3RydWN0dXJlcyAqLworICAgICNkZWZpbmUgWFRJTUUodGwpICAgICAgICgwKQorICAgICNkZWZpbmUgWEdNVElNRShjLCB0KSAgIHJ0cHN5c19nbXRpbWUoKGMpKQorCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfREVPUykKKyAgICAjaW5jbHVkZSA8dGltZS5oPgorCisjZWxpZiBkZWZpbmVkKE1JQ1JJVU0pCisgICAgI2luY2x1ZGUgPGNsay5oPgorICAgICNpbmNsdWRlIDx0aW1lLmg+CisgICAgI2RlZmluZSBYVElNRSh0MSkgICAgICAgbWljcml1bV90aW1lKCh0MSkpCisgICAgI2RlZmluZSBXT0xGU1NMX0dNVElNRQorCisjZWxpZiBkZWZpbmVkKE1JQ1JPQ0hJUF9UQ1BJUF9WNSkgfHwgZGVmaW5lZChNSUNST0NISVBfVENQSVApCisgICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgICBleHRlcm4gdGltZV90IHBpYzMyX3RpbWUodGltZV90KiB0aW1lcik7CisgICAgI2RlZmluZSBYVElNRSh0MSkgICAgICAgcGljMzJfdGltZSgodDEpKQorICAgICNkZWZpbmUgWEdNVElNRShjLCB0KSAgIGdtdGltZSgoYykpCisKKyNlbGlmIGRlZmluZWQoRlJFRVNDQUxFX01RWCkgfHwgZGVmaW5lZChGUkVFU0NBTEVfS1NES19NUVgpCisgICAgI2lmZGVmIEZSRUVTQ0FMRV9NUVhfNF8wCisgICAgICAgICNpbmNsdWRlIDx0aW1lLmg+CisgICAgICAgIGV4dGVybiB0aW1lX3QgbXF4X3RpbWUodGltZV90KiB0aW1lcik7CisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBIQVZFX0dNVElNRV9SCisgICAgI2VuZGlmCisgICAgI2RlZmluZSBYVElNRSh0MSkgICAgICAgbXF4X3RpbWUoKHQxKSkKKworI2VsaWYgZGVmaW5lZChGUkVFU0NBTEVfS1NES19CTSkgfHwgZGVmaW5lZChGUkVFU0NBTEVfRlJFRV9SVE9TKSB8fCBkZWZpbmVkKEZSRUVTQ0FMRV9LU0RLX0ZSRUVSVE9TKQorICAgICNpbmNsdWRlIDx0aW1lLmg+CisgICAgI2lmbmRlZiBYVElNRQorICAgICAgICAvKmV4dGVybiB0aW1lX3Qga3Nka190aW1lKHRpbWVfdCogdGltZXIpOyovCisgICAgICAgICNkZWZpbmUgWFRJTUUodDEpICAga3Nka190aW1lKCh0MSkpCisgICAgI2VuZGlmCisgICAgI2RlZmluZSBYR01USU1FKGMsIHQpICAgZ210aW1lKChjKSkKKworI2VsaWYgZGVmaW5lZChXT0xGU1NMX0FUTUVMKSAmJiBkZWZpbmVkKFdPTEZTU0xfQVRNRUxfVElNRSkKKyAgICAjZGVmaW5lIFhUSU1FKHQxKSAgICAgICBhdG1lbF9nZXRfY3Vycl90aW1lX2FuZF9kYXRlKCh0MSkpCisgICAgI2RlZmluZSBXT0xGU1NMX0dNVElNRQorICAgICNkZWZpbmUgVVNFX1dPTEZfVE0KKyAgICAjZGVmaW5lIFVTRV9XT0xGX1RJTUVfVAorCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfV0lDRUQpCisgICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgICB0aW1lX3Qgd2ljZWRfcHNldWRvX3VuaXhfZXBvY2hfdGltZSh0aW1lX3QgKiB0aW1lcik7CisgICAgI2RlZmluZSBYVElNRSh0MSkgICAgICAgd2ljZWRfcHNldWRvX3VuaXhfZXBvY2hfdGltZSgodDEpKQorICAgICNkZWZpbmUgSEFWRV9HTVRJTUVfUgorCisjZWxpZiBkZWZpbmVkKElESVJFQ1RfREVWX1RJTUUpCisgICAgLypHZXRzIHRoZSB0aW1lc3RhbXAgZnJvbSBjbG9hayBzb2Z0d2FyZSBvd25lZCBieSBWVCBpRGlyZWN0CisgICAgaW4gcGxhY2Ugb2YgdGltZSgpIGZyb20gPHRpbWUuaD4gKi8KKyAgICAjaW5jbHVkZSA8dGltZS5oPgorICAgICNkZWZpbmUgWFRJTUUodDEpICAgICAgIGlkaXJlY3RfdGltZSgodDEpKQorICAgICNkZWZpbmUgWEdNVElNRShjLCB0KSAgIGdtdGltZSgoYykpCisKKyNlbGlmIGRlZmluZWQoX1dJTjMyX1dDRSkKKyAgICAjaW5jbHVkZSA8d2luZG93cy5oPgorICAgICNpbmNsdWRlIDxzdGRsaWIuaD4gLyogRm9yIGZpbGUgc3lzdGVtICovCisKKyAgICB0aW1lX3Qgd2luZG93c190aW1lKHRpbWVfdCogdGltZXIpOworCisgICAgI2RlZmluZSBGaW5kTmV4dEZpbGVBKGgsIGQpIEZpbmROZXh0RmlsZShoLCAoTFBXSU4zMl9GSU5EX0RBVEFXKSBkKQorICAgICNkZWZpbmUgRmluZEZpcnN0RmlsZUEoZm4sIGQpIEZpbmRGaXJzdEZpbGUoKExQQ1dTVFIpIGZuLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBXSU4zMl9GSU5EX0RBVEFXKSBkKQorICAgICNkZWZpbmUgWFRJTUUodDEpICAgICAgIHdpbmRvd3NfdGltZSgodDEpKQorICAgICNkZWZpbmUgV09MRlNTTF9HTVRJTUUKKworICAgIC8qIGlmIHN0cnVjdCB0bSBpcyBub3QgZGVmaW5lZCBpbiBXSU5DRSBTREsgKi8KKyAgICAjaWZuZGVmIF9UTV9ERUZJTkVECisgICAgICAgIHN0cnVjdCB0bSB7CisgICAgICAgICAgICBpbnQgdG1fc2VjOyAgICAgLyogc2Vjb25kcyAqLworICAgICAgICAgICAgaW50IHRtX21pbjsgICAgIC8qIG1pbnV0ZXMgKi8KKyAgICAgICAgICAgIGludCB0bV9ob3VyOyAgICAvKiBob3VycyAqLworICAgICAgICAgICAgaW50IHRtX21kYXk7ICAgIC8qIGRheSBvZiBtb250aCAobW9udGggc3BlY2lmaWMpICovCisgICAgICAgICAgICBpbnQgdG1fbW9uOyAgICAgLyogbW9udGggKi8KKyAgICAgICAgICAgIGludCB0bV95ZWFyOyAgICAvKiB5ZWFyICovCisgICAgICAgICAgICBpbnQgdG1fd2RheTsgICAgLyogZGF5IG9mIHdlZWsgKG91dCBvZiAxLTcpKi8KKyAgICAgICAgICAgIGludCB0bV95ZGF5OyAgICAvKiBkYXkgb2YgeWVhciAob3V0IG9mIDM2NSkgKi8KKyAgICAgICAgICAgIGludCB0bV9pc2RzdDsgICAvKiBpcyBpdCBkYXlsaWdodCBzYXZpbmdzICovCisgICAgICAgICAgICB9OworICAgICAgICAgICAgI2RlZmluZSBfVE1fREVGSU5FRAorICAgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfQVBBQ0hFX01ZTkVXVCkKKyAgICAjaW5jbHVkZSAib3Mvb3NfdGltZS5oIgorICAgICNkZWZpbmUgWFRJTUUodDEpICAgICAgIG15bmV3dF90aW1lKCh0MSkpCisgICAgI2RlZmluZSBXT0xGU1NMX0dNVElNRQorICAgICNkZWZpbmUgVVNFX1dPTEZfVE0KKyAgICAjZGVmaW5lIFVTRV9XT0xGX1RJTUVfVAorCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgICNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCisgICAgICAgICNpbmNsdWRlIDxwb3NpeC90aW1lLmg+CisgICAgI2Vsc2UKKyAgICAgICAgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisgICAgI2VuZGlmCisKKyAgICB0eXBlZGVmIHNpZ25lZCBpbnQgdGltZV90OworCisgICAgdGltZV90IHpfdGltZSh0aW1lX3QgKnRpbWVyKTsKKworICAgICNkZWZpbmUgWFRJTUUodGwpICAgICAgIHpfdGltZSgodGwpKQorICAgICNkZWZpbmUgWEdNVElNRShjLCB0KSAgIGdtdGltZSgoYykpCisgICAgI2RlZmluZSBXT0xGU1NMX0dNVElNRQorCisgICAgI2RlZmluZSBVU0VfV09MRl9UTQorCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfVEVMSVRfTTJNQikKKyAgICB0eXBlZGVmIGxvbmcgdGltZV90OworICAgIGV4dGVybiB0aW1lX3QgbTJtYl94dGltZSh0aW1lX3QgKiB0aW1lcik7CisgICAgI2RlZmluZSBYVElNRSh0bCkgICAgICAgbTJtYl94dGltZSgodGwpKQorICAgICNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgIGV4dGVybiB0aW1lX3QgbTJtYl94dGltZV9tcyh0aW1lX3QgKiB0aW1lcik7CisgICAgICAgICNkZWZpbmUgWFRJTUVfTVModGwpICAgIG0ybWJfeHRpbWVfbXMoKHRsKSkKKyAgICAjZW5kaWYKKyAgICAjaWZuZGVmIE5PX0NSWVBUX0JFTkNITUFSSworICAgICAgICBleHRlcm4gZG91YmxlIG0ybWJfeHRpbWVfYmVuY2goaW50IHJlc2V0KTsKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX0NVUlJUSU1FX1JFTUFQIG0ybWJfeHRpbWVfYmVuY2gKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIFhHTVRJTUUoYywgdCkgICBnbXRpbWUoKGMpKQorICAgICNkZWZpbmUgV09MRlNTTF9HTVRJTUUKKyAgICAjZGVmaW5lIFVTRV9XT0xGX1RNCisKKworI2VsaWYgZGVmaW5lZChXT0xGU1NMX0xJTlVYS00pCisgICAgI2lmZGVmIEJVSUxESU5HX1dPTEZTU0wKKworICAgIC8qIGluY2x1ZGVzIGFyZSBhbGwgYWJvdmUsIHdpdGggaW5jb21wYXRpYmxlIHdhcm5pbmdzIG1hc2tlZCBvdXQuICovCisgICAgI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDUsIDUsIDApCisgICAgdHlwZWRlZiBfX2tlcm5lbF90aW1lX3QgdGltZV90OworICAgICNlbHNlCisgICAgdHlwZWRlZiBfX2tlcm5lbF90aW1lNjRfdCB0aW1lX3Q7CisgICAgI2VuZGlmCisgICAgZXh0ZXJuIHRpbWVfdCB0aW1lKHRpbWVfdCAqIHRpbWVyKTsKKyAgICAjZGVmaW5lIFhUSU1FIHRpbWUKKyAgICAjZGVmaW5lIFdPTEZTU0xfR01USU1FCisgICAgI2RlZmluZSBYR01USU1FKGMsIHQpIGdtdGltZShjKQorICAgICNkZWZpbmUgTk9fVElNRVZBTCAxCisKKyAgICAjZW5kaWYgLyogQlVJTERJTkdfV09MRlNTTCAqLworCisjZWxzZQorICAgIC8qIGRlZmF1bHQgKi8KKyAgICAvKiB1c2VzIGNvbXBsZXRlIDx0aW1lLmg+IGZhY2lsaXR5ICovCisgICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgICAjaWYgZGVmaW5lZChIQVZFX1NZU19USU1FX0gpCisgICAgICAgICNpbmNsdWRlIDxzeXMvdGltZS5oPgorICAgICNlbmRpZgorCisgICAgLyogUG93ZXJQQyB0aW1lX3QgaXMgaW50ICovCisgICAgI2lmZGVmIF9fUFBDX18KKyAgICAgICAgI2RlZmluZSBUSU1FX1RfTk9UXzY0QklUCisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFNJWkVPRl9USU1FX1QKKyAgICAvKiBjaGVjayBpZiBzaXplIG9mIHRpbWVfdCBmcm9tIGF1dG9jb25mIGlzIGxlc3MgdGhhbiA4IGJ5dGVzICg2NGJpdHMpICovCisgICAgI2lmIFNJWkVPRl9USU1FX1QgPCA4CisgICAgICAgICN1bmRlZiAgVElNRV9UX05PVF82NEJJVAorICAgICAgICAjZGVmaW5lIFRJTUVfVF9OT1RfNjRCSVQKKyAgICAjZW5kaWYKKyNlbmRpZgorI2lmZGVmIFRJTUVfVF9OT1RfTE9ORworICAgIC8qIG9uZSBvbGQgcmVmZXJlbmNlIHRvIFRJTUVfVF9OT1RfTE9ORyBpbiBHQ0MtQVJNIGV4YW1wbGUgUkVBRE1FCisgICAgICogdGhpcyBrZWVwcyBzdXBwb3J0IGZvciB0aGUgb2xkIG1hY3JvIG5hbWUgKi8KKyAgICAjdW5kZWYgIFRJTUVfVF9OT1RfNjRCSVQKKyAgICAjZGVmaW5lIFRJTUVfVF9OT1RfNjRCSVQKKyNlbmRpZgorCisvKiBNYXAgZGVmYXVsdCB0aW1lIGZ1bmN0aW9ucyAqLworI2lmICFkZWZpbmVkKFhUSU1FKSAmJiAhZGVmaW5lZChUSU1FX09WRVJSSURFUykgJiYgIWRlZmluZWQoVVNFUl9USU1FKQorICAgICNpZmRlZiBURVNUX0JFRk9SRV9EQVRFCisgICAgI2RlZmluZSBYVElNRSh0bCkgICAgICAgKDk0NjY4MTIwMFVMKSAvKiBKYW4gMSwgMjAwMCAqLworICAgICNlbHNlCisgICAgI2RlZmluZSBYVElNRSh0bCkgICAgICAgdGltZSgodGwpKQorICAgICNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoWEdNVElNRSkgJiYgIWRlZmluZWQoVElNRV9PVkVSUklERVMpCisgICAgLyogQWx3YXlzIHVzZSBnbXRpbWVfciBpZiBhdmFpbGFibGUuICovCisgICAgI2lmIGRlZmluZWQoSEFWRV9HTVRJTUVfUikKKyAgICAgICAgI2RlZmluZSBYR01USU1FKGMsIHQpICAgZ210aW1lX3IoKGMpLCAodCkpCisgICAgICAgICNkZWZpbmUgTkVFRF9UTVBfVElNRQorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgWEdNVElNRShjLCB0KSAgIGdtdGltZSgoYykpCisgICAgI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChYVkFMSURBVEVfREFURSkgJiYgIWRlZmluZWQoSEFWRV9WQUxJREFURV9EQVRFKQorICAgICNkZWZpbmUgVVNFX1dPTEZfVkFMSUREQVRFCisgICAgI2RlZmluZSBYVkFMSURBVEVfREFURShkLCBmLCB0KSB3Y19WYWxpZGF0ZURhdGUoKGQpLCAoZiksICh0KSkKKyNlbmRpZgorCisvKiB3b2xmIHN0cnVjdCB0bSBhbmQgdGltZV90ICovCisjaWYgZGVmaW5lZChVU0VfV09MRl9UTSkKKyAgICBzdHJ1Y3QgdG0geworICAgICAgICBpbnQgIHRtX3NlYzsgICAgIC8qIHNlY29uZHMgYWZ0ZXIgdGhlIG1pbnV0ZSBbMC02MF0gKi8KKyAgICAgICAgaW50ICB0bV9taW47ICAgICAvKiBtaW51dGVzIGFmdGVyIHRoZSBob3VyIFswLTU5XSAqLworICAgICAgICBpbnQgIHRtX2hvdXI7ICAgIC8qIGhvdXJzIHNpbmNlIG1pZG5pZ2h0IFswLTIzXSAqLworICAgICAgICBpbnQgIHRtX21kYXk7ICAgIC8qIGRheSBvZiB0aGUgbW9udGggWzEtMzFdICovCisgICAgICAgIGludCAgdG1fbW9uOyAgICAgLyogbW9udGhzIHNpbmNlIEphbnVhcnkgWzAtMTFdICovCisgICAgICAgIGludCAgdG1feWVhcjsgICAgLyogeWVhcnMgc2luY2UgMTkwMCAqLworICAgICAgICBpbnQgIHRtX3dkYXk7ICAgIC8qIGRheXMgc2luY2UgU3VuZGF5IFswLTZdICovCisgICAgICAgIGludCAgdG1feWRheTsgICAgLyogZGF5cyBzaW5jZSBKYW51YXJ5IDEgWzAtMzY1XSAqLworICAgICAgICBpbnQgIHRtX2lzZHN0OyAgIC8qIERheWxpZ2h0IFNhdmluZ3MgVGltZSBmbGFnICovCisgICAgICAgIGxvbmcgdG1fZ210b2ZmOyAgLyogb2Zmc2V0IGZyb20gQ1VUIGluIHNlY29uZHMgKi8KKyAgICAgICAgY2hhciAqdG1fem9uZTsgICAvKiB0aW1lem9uZSBhYmJyZXZpYXRpb24gKi8KKyAgICB9OworI2VuZGlmIC8qIFVTRV9XT0xGX1RNICovCisjaWYgZGVmaW5lZChVU0VfV09MRl9USU1FX1QpCisgICAgdHlwZWRlZiBsb25nIHRpbWVfdDsKKyNlbmRpZgorI2lmIGRlZmluZWQoVVNFX1dPTEZfU1VTRUNPTkRTX1QpCisgICAgdHlwZWRlZiBsb25nIHN1c2Vjb25kc190OworI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfV09MRl9USU1FVkFMX1QpCisgICAgc3RydWN0IHRpbWV2YWwKKyAgICB7CisgICAgICAgIHRpbWVfdCB0dl9zZWM7CisgICAgICAgIHN1c2Vjb25kc190IHR2X3VzZWM7CisgICAgfTsKKyNlbmRpZgorCisgICAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KKyNpZiBkZWZpbmVkKFVTRVJfVElNRSkKKyAgICBzdHJ1Y3QgdG0qIGdtdGltZShjb25zdCB0aW1lX3QqIHRpbWVyKTsKKyAgICBleHRlcm4gdGltZV90IFhUSU1FKHRpbWVfdCAqIHRpbWVyKTsKKworICAgICNpZmRlZiBTVEFDS19UUkFQCisgICAgICAgIC8qIGZvciBzdGFjayB0cmFwIHRyYWNraW5nLCBkb24ndCBjYWxsIG9zIGdtdGltZSBvbiBPUyBYL2xpbnV4LAorICAgICAgICAgICB1c2VzIGEgbG90IG9mIHN0YWNrIHNwY2UgKi8KKyAgICAgICAgZXh0ZXJuIHRpbWVfdCB0aW1lKHRpbWVfdCAqIHRpbWVyKTsKKyAgICAgICAgI2RlZmluZSBYVElNRSh0bCkgIHRpbWUoKHRsKSkKKyAgICAjZW5kaWYgLyogU1RBQ0tfVFJBUCAqLworCisjZWxpZiBkZWZpbmVkKFRJTUVfT1ZFUlJJREVTKQorICAgIGV4dGVybiB0aW1lX3QgWFRJTUUodGltZV90ICogdGltZXIpOworICAgIGV4dGVybiBzdHJ1Y3QgdG0qIFhHTVRJTUUoY29uc3QgdGltZV90KiB0aW1lciwgc3RydWN0IHRtKiB0bXApOworI2VsaWYgZGVmaW5lZChXT0xGU1NMX0dNVElNRSkKKyAgICBzdHJ1Y3QgdG0qIGdtdGltZShjb25zdCB0aW1lX3QqIHRpbWVyKTsKKyNlbmRpZgorI2VuZGlmIC8qIE5PX0FTTl9USU1FICovCisKKworI2lmbmRlZiBXT0xGU1NMX0xFQU5QU0sKKyAgICBjaGFyKiBteXN0cm5zdHIoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCB1bnNpZ25lZCBpbnQgbik7CisjZW5kaWYKKworI2lmbmRlZiBGSUxFX0JVRkZFUl9TSVpFCisgICAgI2RlZmluZSBGSUxFX0JVRkZFUl9TSVpFIDEwMjQgICAgIC8qIGRlZmF1bHQgc3RhdGljIGZpbGUgYnVmZmVyIHNpemUgZm9yIGlucHV0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHVzZSBkeW5hbWljIGJ1ZmZlciBpZiBub3QgYmlnIGVub3VnaCAqLworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0NBVklVTV9PQ1RFT05fU1lOQworICAgIC8qIEJ5IGRlZmF1bHQsIHRoZSBPQ1RFT04ncyBnbG9iYWwgdmFyaWFibGVzIGFyZSBhbGwgdGhyZWFkIGxvY2FsLiBUaGlzCisgICAgICogdGFnIGFsbG93cyB0aGVtIHRvIGJlIHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMuICovCisgICAgI2luY2x1ZGUgImN2bXgtcGxhdGZvcm0uaCIKKyAgICAjZGVmaW5lIFdPTEZTU0xfR0xPQkFMIENWTVhfU0hBUkVECisjZWxzZQorICAgICNkZWZpbmUgV09MRlNTTF9HTE9CQUwKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9EU1AKKyAgICAjaW5jbHVkZSAid29sZnNzbF9kc3AuaCIKKworICAgIC8qIGNhbGxiYWNrcyBmb3Igc2V0dGluZyBoYW5kbGUgKi8KKyAgICB0eXBlZGVmIGludCAoKndvbGZTU0xfRFNQX0hhbmRsZV9jYikocmVtb3RlX2hhbmRsZTY0ICpoYW5kbGUsIGludCBmaW5pc2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY3R4KTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZlNTTF9HZXRIYW5kbGVDYlNldCgpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmU1NMX1NldEhhbmRsZUNiKHdvbGZTU0xfRFNQX0hhbmRsZV9jYiBpbik7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgd29sZlNTTF9Jbml0SGFuZGxlKCk7CisgICAgV09MRlNTTF9MT0NBTCB2b2lkIHdvbGZTU0xfQ2xlYW51cEhhbmRsZSgpOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1NDRQorICAgICNpZm5kZWYgV09MRlNTTF9TQ0VfR1NDRV9IQU5ETEUKKyAgICAgICAgI2RlZmluZSBXT0xGU1NMX1NDRV9HU0NFX0hBTkRMRSBnX3NjZQorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIH0gIC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogV09MRl9DUllQVF9QT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC93b2xmZXZlbnQuaCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC93b2xmZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzlmNTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3dvbGZldmVudC5oCkBAIC0wLDAgKzEsMTIwIEBACisvKiB3b2xmZXZlbnQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKyNpZm5kZWYgX1dPTEZfRVZFTlRfSF8KKyNkZWZpbmUgX1dPTEZfRVZFTlRfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiBTSU5HTEVfVEhSRUFERUQKKyAgICAjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvd2NfcG9ydC5oPgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFdPTEZfRVZFTlQgV09MRl9FVkVOVDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV09MRl9FVkVOVF9GTEFHOworCit0eXBlZGVmIGVudW0gV09MRl9FVkVOVF9UWVBFIHsKKyAgICBXT0xGX0VWRU5UX1RZUEVfTk9ORSwKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgV09MRl9FVkVOVF9UWVBFX0FTWU5DX1dPTEZTU0wsICAgIC8qIGNvbnRleHQgaXMgV09MRlNTTCogKi8KKyAgICBXT0xGX0VWRU5UX1RZUEVfQVNZTkNfV09MRkNSWVBULCAgLyogY29udGV4dCBpcyBXQ19BU1lOQ19ERVYgKi8KKyAgICBXT0xGX0VWRU5UX1RZUEVfQVNZTkNfRklSU1QgPSBXT0xGX0VWRU5UX1RZUEVfQVNZTkNfV09MRlNTTCwKKyAgICBXT0xGX0VWRU5UX1RZUEVfQVNZTkNfTEFTVCA9IFdPTEZfRVZFTlRfVFlQRV9BU1lOQ19XT0xGQ1JZUFQsCisjZW5kaWYgLyogV09MRlNTTF9BU1lOQ19DUllQVCAqLworfSBXT0xGX0VWRU5UX1RZUEU7CisKK3R5cGVkZWYgZW51bSBXT0xGX0VWRU5UX1NUQVRFIHsKKyAgICBXT0xGX0VWRU5UX1NUQVRFX1JFQURZLAorICAgIFdPTEZfRVZFTlRfU1RBVEVfUEVORElORywKKyAgICBXT0xGX0VWRU5UX1NUQVRFX0RPTkUsCit9IFdPTEZfRVZFTlRfU1RBVEU7CisKK3N0cnVjdCBXT0xGX0VWRU5UIHsKKyAgICAvKiBkb3VibGUgbGlua2VkIGxpc3QgKi8KKyAgICBXT0xGX0VWRU5UKiAgICAgICAgIG5leHQ7CisgICAgV09MRl9FVkVOVCogICAgICAgICBwcmV2OworCisgICAgdm9pZCogICAgICAgICAgICAgICBjb250ZXh0OworICAgIHVuaW9uIHsKKyAgICAgICAgdm9pZCogcHRyOworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgc3RydWN0IFdDX0FTWU5DX0RFViogYXN5bmM7CisjZW5kaWYKKyAgICB9IGRldjsKKyNpZmRlZiBIQVZFX0NBVklVTQorICAgIHdvcmQ2NCAgICAgICAgICAgICAgcmVxSWQ7CisgICAgI2lmZGVmIFdPTEZTU0xfTklUUk9YX0RFQlVHCisgICAgd29yZDMyICAgICAgICAgICAgICBwZW5kQ291bnQ7CisgICAgI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgV0NfTk9fQVNZTkNfVEhSRUFESU5HCisgICAgcHRocmVhZF90ICAgICAgICAgICB0aHJlYWRJZDsKKyNlbmRpZgorICAgIGludCAgICAgICAgICAgICAgICAgcmV0OyAgICAvKiBBc3luYyByZXR1cm4gY29kZSAqLworICAgIHVuc2lnbmVkIGludCAgICAgICAgZmxhZ3M7CisgICAgV09MRl9FVkVOVF9UWVBFICAgICB0eXBlOworICAgIFdPTEZfRVZFTlRfU1RBVEUgICAgc3RhdGU7Cit9OworCitlbnVtIFdPTEZfUE9MTF9GTEFHUyB7CisgICAgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcgPSAweDAxLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdPTEZfRVZFTlQqICAgICAgICAgaGVhZDsgICAgIC8qIGhlYWQgb2YgcXVldWUgKi8KKyAgICBXT0xGX0VWRU5UKiAgICAgICAgIHRhaWw7ICAgICAvKiB0YWlsIG9mIHF1ZXVlICovCisjaWZuZGVmIFNJTkdMRV9USFJFQURFRAorICAgIHdvbGZTU0xfTXV0ZXggICAgICAgbG9jazsgICAgIC8qIHF1ZXVlIGxvY2sgKi8KKyNlbmRpZgorICAgIGludCAgICAgICAgICAgICAgICAgY291bnQ7Cit9IFdPTEZfRVZFTlRfUVVFVUU7CisKKworI2lmZGVmIEhBVkVfV09MRl9FVkVOVAorCisvKiBFdmVudCAqLworV09MRlNTTF9BUEkgaW50IHdvbGZFdmVudF9Jbml0KFdPTEZfRVZFTlQqIGV2ZW50LCBXT0xGX0VWRU5UX1RZUEUgdHlwZSwgdm9pZCogY29udGV4dCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZkV2ZW50X1BvbGwoV09MRl9FVkVOVCogZXZlbnQsIFdPTEZfRVZFTlRfRkxBRyBmbGFncyk7CisKKy8qIEV2ZW50IFF1ZXVlICovCitXT0xGU1NMX0FQSSBpbnQgd29sZkV2ZW50UXVldWVfSW5pdChXT0xGX0VWRU5UX1FVRVVFKiBxdWV1ZSk7CitXT0xGU1NMX0FQSSBpbnQgd29sZkV2ZW50UXVldWVfUHVzaChXT0xGX0VWRU5UX1FVRVVFKiBxdWV1ZSwgV09MRl9FVkVOVCogZXZlbnQpOworV09MRlNTTF9BUEkgaW50IHdvbGZFdmVudFF1ZXVlX1BvcChXT0xGX0VWRU5UX1FVRVVFKiBxdWV1ZSwgV09MRl9FVkVOVCoqIGV2ZW50KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmRXZlbnRRdWV1ZV9Qb2xsKFdPTEZfRVZFTlRfUVVFVUUqIHF1ZXVlLCB2b2lkKiBjb250ZXh0X2ZpbHRlciwKKyAgICBXT0xGX0VWRU5UKiogZXZlbnRzLCBpbnQgbWF4RXZlbnRzLCBXT0xGX0VWRU5UX0ZMQUcgZmxhZ3MsIGludCogZXZlbnRDb3VudCk7CitXT0xGU1NMX0FQSSBpbnQgd29sZkV2ZW50UXVldWVfQ291bnQoV09MRl9FVkVOVF9RVUVVRSogcXVldWUpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmRXZlbnRRdWV1ZV9GcmVlKFdPTEZfRVZFTlRfUVVFVUUqIHF1ZXVlKTsKKworLyogdGhlIHF1ZXVlIG11dGV4IG11c3QgYmUgbG9ja2VkIHByaW9yIHRvIGNhbGxpbmcgdGhlc2UgKi8KK1dPTEZTU0xfQVBJIGludCB3b2xmRXZlbnRRdWV1ZV9BZGQoV09MRl9FVkVOVF9RVUVVRSogcXVldWUsIFdPTEZfRVZFTlQqIGV2ZW50KTsKK1dPTEZTU0xfQVBJIGludCB3b2xmRXZlbnRRdWV1ZV9SZW1vdmUoV09MRl9FVkVOVF9RVUVVRSogcXVldWUsIFdPTEZfRVZFTlQqIGV2ZW50KTsKKworCisjZW5kaWYgLyogSEFWRV9XT0xGX0VWRU5UICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSAgIC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogX1dPTEZfRVZFTlRfSF8gKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC93b2xmbWF0aC5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmNyeXB0L3dvbGZtYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzMDAzMwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZjcnlwdC93b2xmbWF0aC5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiB3b2xmbWF0aC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyoKK0RFU0NSSVBUSU9OCitUaGlzIGxpYnJhcnkgcHJvdmlkZXMgYmlnIGludGVnZXIgbWF0aCBmdW5jdGlvbnMuCisKKyovCisjaWZuZGVmIF9fV09MRk1BVEhfSF9fCisjZGVmaW5lIF9fV09MRk1BVEhfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1BVQkxJQ19NUAorICAgICNkZWZpbmUgTVBfQVBJICAgV09MRlNTTF9BUEkKKyNlbHNlCisgICAgI2RlZmluZSBNUF9BUEkgICBXT0xGU1NMX0xPQ0FMCisjZW5kaWYKKworI2lmbmRlZiBNSU4KKyAgICNkZWZpbmUgTUlOKHgseSkgKCh4KTwoeSk/KHgpOih5KSkKKyNlbmRpZgorCisjaWZuZGVmIE1BWAorICAgI2RlZmluZSBNQVgoeCx5KSAoKHgpPih5KT8oeCk6KHkpKQorI2VuZGlmCisKKy8qIHRpbWluZyByZXNpc3RhbmNlIGFycmF5ICovCisjaWYgIWRlZmluZWQoV0NfTk9fQ0FDSEVfUkVTSVNUQU5UKSAmJiBcCisgICAgKChkZWZpbmVkKEhBVkVfRUNDKSAmJiBkZWZpbmVkKEVDQ19USU1JTkdfUkVTSVNUQU5UKSkgfHwgXAorICAgICAoZGVmaW5lZChVU0VfRkFTVF9NQVRIKSAmJiBkZWZpbmVkKFRGTV9USU1JTkdfUkVTSVNUQU5UKSkpCisKKyAgICBleHRlcm4gY29uc3Qgd2NfcHRyX3Qgd2Nfb2ZmX29uX2FkZHJbMl07CisjZW5kaWYKKworCisvKiBjb21tb24gbWF0aCBmdW5jdGlvbnMgKi8KK01QX0FQSSBpbnQgZ2V0X2RpZ2l0X2NvdW50KGNvbnN0IG1wX2ludCogYSk7CitNUF9BUEkgbXBfZGlnaXQgZ2V0X2RpZ2l0KGNvbnN0IG1wX2ludCogYSwgaW50IG4pOworTVBfQVBJIGludCBnZXRfcmFuZF9kaWdpdChXQ19STkcqIHJuZywgbXBfZGlnaXQqIGQpOworCitXT0xGU1NMX0FQSSBpbnQgbXBfY29uZF9jb3B5KG1wX2ludCogYSwgaW50IGNvcHksIG1wX2ludCogYik7CitXT0xGU1NMX0FQSSBpbnQgbXBfcmFuZChtcF9pbnQqIGEsIGludCBkaWdpdHMsIFdDX1JORyogcm5nKTsKKworI2RlZmluZSBXQ19UWVBFX0hFWF9TVFIgMQorI2RlZmluZSBXQ19UWVBFX1VOU0lHTkVEX0JJTiAyCisjaWYgZGVmaW5lZChXT0xGU1NMX1FOWF9DQUFNKQorICAgICNkZWZpbmUgV0NfVFlQRV9CTEFDS19LRVkgMworI2VuZGlmCisKK1dPTEZTU0xfQVBJIGludCB3Y19leHBvcnRfaW50KG1wX2ludCogbXAsIGJ5dGUqIGJ1Ziwgd29yZDMyKiBsZW4sCisgICAgd29yZDMyIGtleVN6LCBpbnQgZW5jVHlwZSk7CisKKyNpZmRlZiBIQVZFX1dPTEZfQklHSU5UCisgICAgI2lmICFkZWZpbmVkKFdPTEZfQklHSU5UX0RFRklORUQpCisgICAgICAgIC8qIHJhdyBiaWcgaW50ZWdlciAqLworICAgICAgICB0eXBlZGVmIHN0cnVjdCBXQ19CSUdJTlQgeworICAgICAgICAgICAgYnl0ZSogICBidWY7CisgICAgICAgICAgICB3b3JkMzIgIGxlbjsKKyAgICAgICAgICAgIHZvaWQqICAgaGVhcDsKKyAgICAgICAgfSBXQ19CSUdJTlQ7CisgICAgICAgICNkZWZpbmUgV09MRl9CSUdJTlRfREVGSU5FRAorICAgICNlbmRpZgorCisgICAgV09MRlNTTF9MT0NBTCB2b2lkIHdjX2JpZ2ludF9pbml0KFdDX0JJR0lOVCogYSk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgd2NfYmlnaW50X2FsbG9jKFdDX0JJR0lOVCogYSwgd29yZDMyIHN6KTsKKyAgICBXT0xGU1NMX0xPQ0FMIGludCB3Y19iaWdpbnRfZnJvbV91bnNpZ25lZF9iaW4oV0NfQklHSU5UKiBhLCBjb25zdCBieXRlKiBpbiwgd29yZDMyIGlubGVuKTsKKyAgICBXT0xGU1NMX0xPQ0FMIGludCB3Y19iaWdpbnRfdG9fdW5zaWduZWRfYmluKFdDX0JJR0lOVCogYSwgYnl0ZSogb3V0LCB3b3JkMzIqIG91dGxlbik7CisgICAgV09MRlNTTF9MT0NBTCB2b2lkIHdjX2JpZ2ludF96ZXJvKFdDX0JJR0lOVCogYSk7CisgICAgV09MRlNTTF9MT0NBTCB2b2lkIHdjX2JpZ2ludF9mcmVlKFdDX0JJR0lOVCogYSk7CisKKyAgICBXT0xGU1NMX0xPQ0FMIGludCB3Y19tcF90b19iaWdpbnQobXBfaW50KiBzcmMsIFdDX0JJR0lOVCogZHN0KTsKKyAgICBXT0xGU1NMX0xPQ0FMIGludCB3Y19tcF90b19iaWdpbnRfc3oobXBfaW50KiBzcmMsIFdDX0JJR0lOVCogZHN0LCB3b3JkMzIgc3opOworICAgIFdPTEZTU0xfTE9DQUwgaW50IHdjX2JpZ2ludF90b19tcChXQ19CSUdJTlQqIHNyYywgbXBfaW50KiBkc3QpOworI2VuZGlmIC8qIEhBVkVfV09MRl9CSUdJTlQgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogX19XT0xGTUFUSF9IX18gKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZpby5oIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9pbmNsdWRlL3dvbGZzc2wvd29sZmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzM2I2MwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvaW5jbHVkZS93b2xmc3NsL3dvbGZpby5oCkBAIC0wLDAgKzEsNjU3IEBACisvKiBpby5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworLyohCisgICAgXGZpbGUgd29sZnNzbC93b2xmaW8uaAorKi8KKworI2lmbmRlZiBXT0xGU1NMX0lPX0gKKyNkZWZpbmUgV09MRlNTTF9JT19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIE1pY3JpdW0gdXNlcyBOZXRTb2NrIEkvTyBjYWxsYmFja3MgaW4gd29sZmlvLmMgKi8KKyNpZiAhZGVmaW5lZChXT0xGU1NMX1VTRVJfSU8pCisgICAgLyogT0NTUCBhbmQgQ1JMX0lPIHJlcXVpcmUgSFRUUCBjbGllbnQgKi8KKyAgICAjaWYgZGVmaW5lZChIQVZFX09DU1ApIHx8IGRlZmluZWQoSEFWRV9DUkxfSU8pCisgICAgICAgICNpZm5kZWYgSEFWRV9IVFRQX0NMSUVOVAorICAgICAgICAgICAgI2RlZmluZSBIQVZFX0hUVFBfQ0xJRU5UCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChXT0xGU1NMX1VTRVJfSU8pCisgICAgLyogTWljcml1bSB1c2VzIE5ldFNvY2sgSS9PIGNhbGxiYWNrcyBpbiB3b2xmaW8uYyAqLworICAgICNpZiAhZGVmaW5lZChVU0VfV09MRlNTTF9JTykgJiYgIWRlZmluZWQoTUlDUklVTSkgJiYgXAorICAgICAgICAhZGVmaW5lZChXT0xGU1NMX0NPTlRJS0kpICYmICFkZWZpbmVkKFdPTEZTU0xfTk9fU09DSykKKyAgICAgICAgI2RlZmluZSBVU0VfV09MRlNTTF9JTworICAgICNlbmRpZgorI2VuZGlmCisKKworI2lmIGRlZmluZWQoVVNFX1dPTEZTU0xfSU8pIHx8IGRlZmluZWQoSEFWRV9IVFRQX0NMSUVOVCkKKworI2lmZGVmIEhBVkVfTElCWgorICAgICNpbmNsdWRlICJ6bGliLmgiCisjZW5kaWYKKworI2lmbmRlZiBVU0VfV0lORE9XU19BUEkKKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX0xXSVApICYmICFkZWZpbmVkKFdPTEZTU0xfQVBBQ0hFX01ZTkVXVCkKKyAgICAgICAgLyogbHdJUCBuZWVkcyB0byBiZSBjb25maWd1cmVkIHRvIHVzZSBzb2NrZXRzIEFQSSBpbiB0aGlzIG1vZGUgKi8KKyAgICAgICAgLyogTFdJUF9TT0NLRVQgMSBpbiBsd2lwL29wdC5oIG9yIGluIGJ1aWxkICovCisgICAgICAgICNpbmNsdWRlICJsd2lwL3NvY2tldHMuaCIKKyAgICAgICAgI2lmbmRlZiBMV0lQX1BST1ZJREVfRVJSTk8KKyAgICAgICAgICAgICNpbmNsdWRlIDxlcnJuby5oPgorICAgICAgICAgICAgI2RlZmluZSBMV0lQX1BST1ZJREVfRVJSTk8gMQorICAgICAgICAjZW5kaWYKKyAgICAjZWxpZiBkZWZpbmVkKEZSRUVTQ0FMRV9NUVgpCisgICAgICAgICNpbmNsdWRlIDxwb3NpeC5oPgorICAgICAgICAjaW5jbHVkZSA8cnRjcy5oPgorICAgICNlbGlmIGRlZmluZWQoRlJFRVNDQUxFX0tTREtfTVFYKQorICAgICAgICAjaW5jbHVkZSA8cnRjcy5oPgorICAgICNlbGlmIChkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkgfHwgZGVmaW5lZChXT0xGU1NMX0tFSUxfVENQX05FVCkpCisgICAgICAgICNpbmNsdWRlICJybF9uZXQuaCIKKyAgICAgICAgI2luY2x1ZGUgImVycm5vLmgiCisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX0NNU0lTX1JUT1MpCisgICAgICAgICNpbmNsdWRlICJjbXNpc19vcy5oIgorICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9DTVNJU19SVE9TdjIpCisgICAgICAgICNpbmNsdWRlICJjbXNpc19vczIuaCIKKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfVElSVE9TKQorICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICNlbGlmIGRlZmluZWQoRlJFRVJUT1NfVENQKQorICAgICAgICAjaW5jbHVkZSAiRnJlZVJUT1NfU29ja2V0cy5oIgorICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9JQVJfQVJNKQorICAgICAgICAvKiBub3RoaW5nICovCisgICAgI2VsaWYgZGVmaW5lZChIQVZFX05FVFhfQlNEKQorICAgICAgICAjaWZkZWYgTkVUWF9EVU8KKyAgICAgICAgICAgICNpbmNsdWRlICJueGRfYnNkLmgiCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAjaW5jbHVkZSAibnhfYnNkLmgiCisgICAgICAgICNlbmRpZgorICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9WWFdPUktTKQorICAgICAgICAjaW5jbHVkZSA8c29ja0xpYi5oPgorICAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4KKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfTlVDTEVVU18xXzIpCisgICAgICAgICNpbmNsdWRlIDxleHRlcm5zLmg+CisgICAgICAgICNpbmNsdWRlIDxlcnJuby5oPgorICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9MSU5VWEtNKQorICAgICAgICAvKiB0aGUgcmVxdWlzaXRlIGxpbnV4L25ldC5oIGlzIGluY2x1ZGVkIGluIHdjX3BvcnQuaCwgd2l0aCBpbmNvbXBhdGlibGUgd2FybmluZ3MgbWFza2VkIG91dC4gKi8KKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfQVRNRUwpCisgICAgICAgICNpbmNsdWRlICJzb2NrZXQvaW5jbHVkZS9zb2NrZXQuaCIKKyAgICAjZWxpZiBkZWZpbmVkKElOVElNRV9SVE9TKQorICAgICAgICAjdW5kZWYgTUlOCisgICAgICAgICN1bmRlZiBNQVgKKyAgICAgICAgI2luY2x1ZGUgPHJ0Lmg+CisgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICAgICAgI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgICAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgICAgICAgICNpbmNsdWRlIDxpby5oPgorICAgICAgICAvKiA8c3lzL3NvY2tldC5oPiBkZWZpbmVzIHRoZXNlLCB0byBhdm9pZCBjb25mbGljdCwgZG8gdW5kZWYgKi8KKyAgICAgICAgI3VuZGVmIFNPQ0tBRERSCisgICAgICAgICN1bmRlZiBTT0NLQUREUl9JTgorICAgICNlbGlmIGRlZmluZWQoV09MRlNTTF9QUkNPTk5FQ1RfUFJPKQorICAgICAgICAjaW5jbHVkZSA8cHJjb25uZWN0X3Byby9wcmNvbm5lY3RfcHJvLmg+CisgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+CisgICAgICAgICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAgICAgICAgI2luY2x1ZGUgPGZjbnRsLmg+CisgICAgICAgICNpbmNsdWRlIDxuZXRkYi5oPgorICAgICAgICAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1NHWCkKKyAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+CisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX0FQQUNIRV9NWU5FV1QpICYmICFkZWZpbmVkKFdPTEZTU0xfTFdJUCkKKyAgICAgICAgI2luY2x1ZGUgPG1uX3NvY2tldC9tbl9zb2NrZXQuaD4KKyAgICAjZWxpZiBkZWZpbmVkKFdPTEZTU0xfREVPUykKKyAgICAgICAgI2luY2x1ZGUgPHNvY2tldGFwaS5oPgorICAgICAgICAjaW5jbHVkZSA8bHdpcC1zb2NrZXQuaD4KKyAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+CisgICAgI2VsaWYgZGVmaW5lZChXT0xGU1NMX1pFUEhZUikKKyAgICAgICAgI2luY2x1ZGUgPG5ldC9zb2NrZXQuaD4KKyAgICAjZWxpZiBkZWZpbmVkKE1JQ1JPQ0hJUF9QSUMzMikKKyAgICAgICAgI2luY2x1ZGUgPHN5cy9lcnJuby5oPgorICAgICNlbGlmIGRlZmluZWQoSEFWRV9ORVRYKQorICAgICAgICAjaW5jbHVkZSAibnhfYXBpLmgiCisgICAgICAgICNpbmNsdWRlICJlcnJuby5oIgorICAgICNlbGlmIGRlZmluZWQoRlVTSU9OX1JUT1MpCisgICAgICAgICNpbmNsdWRlIDxzeXMvZmNsdHlwZXMuaD4KKyAgICAgICAgI2luY2x1ZGUgPGZjbGVycm5vLmg+CisgICAgICAgICNpbmNsdWRlIDxmY2xmY250bC5oPgorICAgICNlbGlmICFkZWZpbmVkKFdPTEZTU0xfTk9fU09DSykKKyAgICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4KKyAgICAgICAgI2lmbmRlZiBFQlNORVQKKyAgICAgICAgICAgICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpbmNsdWRlIDxmY250bC5oPgorICAgICAgICAjZGVmaW5lIFhGQ05UTChmZCwgZmxhZywgYmxvY2spIGZjbnRsKChmZCksIChmbGFnKSwgKGJsb2NrKSkKKworICAgICAgICAjaWYgZGVmaW5lZChIQVZFX1JUUF9TWVMpCisgICAgICAgICAgICAjaW5jbHVkZSA8c29ja2V0Lmg+CisgICAgICAgICNlbGlmIGRlZmluZWQoRUJTTkVUKQorICAgICAgICAgICAgI2luY2x1ZGUgInJ0aXBhcGkuaCIgIC8qIGVycm5vICovCisgICAgICAgICAgICAjaW5jbHVkZSAic29ja2V0LmgiCisgICAgICAgICNlbGlmICFkZWZpbmVkKERFVktJVFBSTykgJiYgIWRlZmluZWQoV09MRlNTTF9QSUNPVENQKSBcCisgICAgICAgICAgICAgICAgJiYgIWRlZmluZWQoV09MRlNTTF9DT05USUtJKSAmJiAhZGVmaW5lZChXT0xGU1NMX1dJQ0VEKSBcCisgICAgICAgICAgICAgICAgJiYgIWRlZmluZWQoV09MRlNTTF9HTlJDKSAmJiAhZGVmaW5lZChXT0xGU1NMX1JJT1RfT1MpCisgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICAgICAgICAgICAgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAgICAgICAgICAgICNpbmNsdWRlIDxuZXRkYi5oPgorICAgICAgICAgICAgI2lmZGVmIF9fUFBVCisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPG5ldGV4L2Vycm5vLmg+CisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKworICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfUkVORVNBU19SQTZNM0cpIHx8IGRlZmluZWQoV09MRlNTTF9SRU5FU0FTX1JBNk0zKSAvKiBVc2VzIEZSRUVSVE9TX1RDUCAqLworICAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4KKyAgICAjZW5kaWYKKworI2VuZGlmIC8qIFVTRV9XSU5ET1dTX0FQSSAqLworCisjaWZkZWYgX19zdW4KKyAgICAjaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CisjZW5kaWYKKworI2lmZGVmIFVTRV9XSU5ET1dTX0FQSQorICAgIC8qIG5vIGVwaXBlIHlldCAqLworICAgICNpZm5kZWYgV1NBRVBJUEUKKyAgICAgICAgI2RlZmluZSBXU0FFUElQRSAgICAgICAtMTIzNDUKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIFNPQ0tFVF9FV09VTERCTE9DSyBXU0FFV09VTERCTE9DSworICAgICNkZWZpbmUgU09DS0VUX0VBR0FJTiAgICAgIFdTQUVUSU1FRE9VVAorICAgICNkZWZpbmUgU09DS0VUX0VDT05OUkVTRVQgIFdTQUVDT05OUkVTRVQKKyAgICAjZGVmaW5lIFNPQ0tFVF9FSU5UUiAgICAgICBXU0FFSU5UUgorICAgICNkZWZpbmUgU09DS0VUX0VQSVBFICAgICAgIFdTQUVQSVBFCisgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5SRUZVU0VEIFdTQUVOT1RDT05OCisgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5BQk9SVEVEIFdTQUVDT05OQUJPUlRFRAorI2VsaWYgZGVmaW5lZChfX1BQVSkKKyAgICAjZGVmaW5lIFNPQ0tFVF9FV09VTERCTE9DSyBTWVNfTkVUX0VXT1VMREJMT0NLCisgICAgI2RlZmluZSBTT0NLRVRfRUFHQUlOICAgICAgU1lTX05FVF9FQUdBSU4KKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFU0VUICBTWVNfTkVUX0VDT05OUkVTRVQKKyAgICAjZGVmaW5lIFNPQ0tFVF9FSU5UUiAgICAgICBTWVNfTkVUX0VJTlRSCisgICAgI2RlZmluZSBTT0NLRVRfRVBJUEUgICAgICAgU1lTX05FVF9FUElQRQorICAgICNkZWZpbmUgU09DS0VUX0VDT05OUkVGVVNFRCBTWVNfTkVUX0VDT05OUkVGVVNFRAorICAgICNkZWZpbmUgU09DS0VUX0VDT05OQUJPUlRFRCBTWVNfTkVUX0VDT05OQUJPUlRFRAorI2VsaWYgZGVmaW5lZChGUkVFU0NBTEVfTVFYKSB8fCBkZWZpbmVkKEZSRUVTQ0FMRV9LU0RLX01RWCkKKyAgICAjaWYgTVFYX1VTRV9JT19PTEQKKyAgICAgICAgLyogUlRDUyBvbGQgSS9PIGRvZXNuJ3QgaGF2ZSBhbiBFV09VTERCTE9DSyAqLworICAgICAgICAjZGVmaW5lIFNPQ0tFVF9FV09VTERCTE9DSyAgRUFHQUlOCisgICAgICAgICNkZWZpbmUgU09DS0VUX0VBR0FJTiAgICAgICBFQUdBSU4KKyAgICAgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5SRVNFVCAgIFJUQ1NFUlJfVENQX0NPTk5fUkVTRVQKKyAgICAgICAgI2RlZmluZSBTT0NLRVRfRUlOVFIgICAgICAgIEVJTlRSCisgICAgICAgICNkZWZpbmUgU09DS0VUX0VQSVBFICAgICAgICBFUElQRQorICAgICAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFRlVTRUQgUlRDU0VSUl9UQ1BfQ09OTl9SRUZVU0VECisgICAgICAgICNkZWZpbmUgU09DS0VUX0VDT05OQUJPUlRFRCBSVENTRVJSX1RDUF9DT05OX0FCT1JURUQKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIFNPQ0tFVF9FV09VTERCTE9DSyAgTklPX0VXT1VMREJMT0NLCisgICAgICAgICNkZWZpbmUgU09DS0VUX0VBR0FJTiAgICAgICBOSU9fRUFHQUlOCisgICAgICAgICNkZWZpbmUgU09DS0VUX0VDT05OUkVTRVQgICBOSU9fRUNPTk5SRVNFVAorICAgICAgICAjZGVmaW5lIFNPQ0tFVF9FSU5UUiAgICAgICAgTklPX0VJTlRSCisgICAgICAgICNkZWZpbmUgU09DS0VUX0VQSVBFICAgICAgICBOSU9fRVBJUEUKKyAgICAgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5SRUZVU0VEIE5JT19FQ09OTlJFRlVTRUQKKyAgICAgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5BQk9SVEVEIE5JT19FQ09OTkFCT1JURUQKKyAgICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9NREtfQVJNKXx8IGRlZmluZWQoV09MRlNTTF9LRUlMX1RDUF9ORVQpCisgICAgICAgICNkZWZpbmUgU09DS0VUX0VXT1VMREJMT0NLIEJTRF9FUlJPUl9XT1VMREJMT0NLCisgICAgICAgICNkZWZpbmUgU09DS0VUX0VBR0FJTiAgICAgIEJTRF9FUlJPUl9MT0NLRUQKKyAgICAgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5SRVNFVCAgQlNEX0VSUk9SX0NMT1NFRAorICAgICAgICAjZGVmaW5lIFNPQ0tFVF9FSU5UUiAgICAgICBCU0RfRVJST1IKKyAgICAgICAgI2RlZmluZSBTT0NLRVRfRVBJUEUgICAgICAgQlNEX0VSUk9SCisgICAgICAgICNkZWZpbmUgU09DS0VUX0VDT05OUkVGVVNFRCBCU0RfRVJST1IKKyAgICAgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5BQk9SVEVEIEJTRF9FUlJPUgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX1BJQ09UQ1ApCisgICAgI2RlZmluZSBTT0NLRVRfRVdPVUxEQkxPQ0sgIFBJQ09fRVJSX0VBR0FJTgorICAgICNkZWZpbmUgU09DS0VUX0VBR0FJTiAgICAgICBQSUNPX0VSUl9FQUdBSU4KKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFU0VUICAgUElDT19FUlJfRUNPTk5SRVNFVAorICAgICNkZWZpbmUgU09DS0VUX0VJTlRSICAgICAgICBQSUNPX0VSUl9FSU5UUgorICAgICNkZWZpbmUgU09DS0VUX0VQSVBFICAgICAgICBQSUNPX0VSUl9FSU8KKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFRlVTRUQgUElDT19FUlJfRUNPTk5SRUZVU0VECisgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5BQk9SVEVEIFBJQ09fRVJSX0VTSFVURE9XTgorI2VsaWYgZGVmaW5lZChGUkVFUlRPU19UQ1ApCisgICAgI2RlZmluZSBTT0NLRVRfRVdPVUxEQkxPQ0sgRlJFRVJUT1NfRVdPVUxEQkxPQ0sKKyAgICAjZGVmaW5lIFNPQ0tFVF9FQUdBSU4gICAgICAgRlJFRVJUT1NfRVdPVUxEQkxPQ0sKKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFU0VUICAgRlJFRVJUT1NfU09DS0VUX0VSUk9SCisgICAgI2RlZmluZSBTT0NLRVRfRUlOVFIgICAgICAgIEZSRUVSVE9TX1NPQ0tFVF9FUlJPUgorICAgICNkZWZpbmUgU09DS0VUX0VQSVBFICAgICAgICBGUkVFUlRPU19TT0NLRVRfRVJST1IKKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFRlVTRUQgRlJFRVJUT1NfU09DS0VUX0VSUk9SCisgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5BQk9SVEVEIEZSRUVSVE9TX1NPQ0tFVF9FUlJPUgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX05VQ0xFVVNfMV8yKQorICAgICNkZWZpbmUgU09DS0VUX0VXT1VMREJMT0NLICBOVV9XT1VMRF9CTE9DSworICAgICNkZWZpbmUgU09DS0VUX0VBR0FJTiAgICAgICBOVV9XT1VMRF9CTE9DSworICAgICNkZWZpbmUgU09DS0VUX0VDT05OUkVTRVQgICBOVV9OT1RfQ09OTkVDVEVECisgICAgI2RlZmluZSBTT0NLRVRfRUlOVFIgICAgICAgIE5VX05PVF9DT05ORUNURUQKKyAgICAjZGVmaW5lIFNPQ0tFVF9FUElQRSAgICAgICAgTlVfTk9UX0NPTk5FQ1RFRAorICAgICNkZWZpbmUgU09DS0VUX0VDT05OUkVGVVNFRCBOVV9DT05ORUNUSU9OX1JFRlVTRUQKKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTkFCT1JURUQgTlVfTk9UX0NPTk5FQ1RFRAorI2VsaWYgZGVmaW5lZChXT0xGU1NMX0RFT1MpCisgICAgLyogYHNvY2thZGRyX3N0b3JhZ2VgIGlzIG5vdCBkZWZpbmVkIGluIERFT1MuIFRoaXMgd29ya2Fyb3VuZCB3aWxsCisgICAgICogd29yayBmb3IgSVBWNCwgYnV0IG5vdCBJUFY2CisgICAgICovCisgICAgI2RlZmluZSBzb2NrYWRkcl9zdG9yYWdlICAgc29ja2FkZHJfaW4KKyAgICAjZGVmaW5lIFNPQ0tFVF9FV09VTERCTE9DSyBFQUdBSU4KKyAgICAjZGVmaW5lIFNPQ0tFVF9FQUdBSU4gICAgICBFQUdBSU4KKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFU0VUICBFSU5UUgorICAgICNkZWZpbmUgU09DS0VUX0VJTlRSICAgICAgIEVJTlRSCisgICAgI2RlZmluZSBTT0NLRVRfRVBJUEUgICAgICAgRVBJUEUKKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFRlVTRUQgU09DS0VUX0VSUk9SCisgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5BQk9SVEVEIFNPQ0tFVF9FUlJPUgorI2VsaWYgZGVmaW5lZChIQVZFX05FVFgpCisgICAgI2RlZmluZSBTT0NLRVRfRVdPVUxEQkxPQ0sgTlhfTk9UX0NPTk5FQ1RFRAorICAgICNkZWZpbmUgU09DS0VUX0VBR0FJTiAgICAgIE5YX05PVF9DT05ORUNURUQKKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFU0VUICBOWF9OT1RfQ09OTkVDVEVECisgICAgI2RlZmluZSBTT0NLRVRfRUlOVFIgICAgICAgTlhfTk9UX0NPTk5FQ1RFRAorICAgICNkZWZpbmUgU09DS0VUX0VQSVBFICAgICAgIE5YX05PVF9DT05ORUNURUQKKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFRlVTRUQgTlhfTk9UX0NPTk5FQ1RFRAorICAgICNkZWZpbmUgU09DS0VUX0VDT05OQUJPUlRFRCBOWF9OT1RfQ09OTkVDVEVECisjZWxpZiBkZWZpbmVkKEZVU0lPTl9SVE9TKQorICAgICNkZWZpbmUgU09DS0VUX0VXT1VMREJMT0NLIEZDTF9FV09VTERCTE9DSworICAgICNkZWZpbmUgU09DS0VUX0VBR0FJTiAgICAgIEZDTF9FQUdBSU4KKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFU0VUICBGTlNfRUNPTk5SRVNFVAorICAgICNkZWZpbmUgU09DS0VUX0VJTlRSICAgICAgIEZDTF9FSU5UUgorICAgICNkZWZpbmUgU09DS0VUX0VQSVBFICAgICAgIEZDTF9FUElQRQorICAgICNkZWZpbmUgU09DS0VUX0VDT05OUkVGVVNFRCBGQ0xfRUNPTk5SRUZVU0VECisgICAgI2RlZmluZSBTT0NLRVRfRUNPTk5BQk9SVEVEIEZOU19FQ09OTkFCT1JURUQKKyNlbHNlCisgICAgI2RlZmluZSBTT0NLRVRfRVdPVUxEQkxPQ0sgRVdPVUxEQkxPQ0sKKyAgICAjZGVmaW5lIFNPQ0tFVF9FQUdBSU4gICAgICBFQUdBSU4KKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTlJFU0VUICBFQ09OTlJFU0VUCisgICAgI2RlZmluZSBTT0NLRVRfRUlOVFIgICAgICAgRUlOVFIKKyAgICAjZGVmaW5lIFNPQ0tFVF9FUElQRSAgICAgICBFUElQRQorICAgICNkZWZpbmUgU09DS0VUX0VDT05OUkVGVVNFRCBFQ09OTlJFRlVTRUQKKyAgICAjZGVmaW5lIFNPQ0tFVF9FQ09OTkFCT1JURUQgRUNPTk5BQk9SVEVECisjZW5kaWYgLyogVVNFX1dJTkRPV1NfQVBJICovCisKKyNpZmRlZiBERVZLSVRQUk8KKyAgICAvKiBmcm9tIG5ldHdvcmsuaCAqLworICAgICNpbmNsdWRlIDxuZXR3b3JrLmg+CisgICAgI2RlZmluZSBTRU5EX0ZVTkNUSU9OIG5ldF9zZW5kCisgICAgI2RlZmluZSBSRUNWX0ZVTkNUSU9OIG5ldF9yZWN2CisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfTFdJUCkgJiYgIWRlZmluZWQoV09MRlNTTF9BUEFDSEVfTVlORVdUKQorICAgICNkZWZpbmUgU0VORF9GVU5DVElPTiBsd2lwX3NlbmQKKyAgICAjZGVmaW5lIFJFQ1ZfRlVOQ1RJT04gbHdpcF9yZWN2CisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfUElDT1RDUCkKKyAgICAjZGVmaW5lIFNFTkRfRlVOQ1RJT04gcGljb19zZW5kCisgICAgI2RlZmluZSBSRUNWX0ZVTkNUSU9OIHBpY29fcmVjdgorI2VsaWYgZGVmaW5lZChGUkVFUlRPU19UQ1ApCisgICAgI2RlZmluZSBSRUNWX0ZVTkNUSU9OKGEsYixjLGQpICBGcmVlUlRPU19yZWN2KChTb2NrZXRfdCkoYSksKHZvaWQqKShiKSwgKHNpemVfdCkoYyksIChCYXNlVHlwZV90KShkKSkKKyAgICAjZGVmaW5lIFNFTkRfRlVOQ1RJT04oYSxiLGMsZCkgIEZyZWVSVE9TX3NlbmQoKFNvY2tldF90KShhKSwodm9pZCopKGIpLCAoc2l6ZV90KShjKSwgKEJhc2VUeXBlX3QpKGQpKQorI2VsaWYgZGVmaW5lZChXT0xGU1NMX1ZYV09SS1MpCisgICAgI2RlZmluZSBTRU5EX0ZVTkNUSU9OIHNlbmQKKyAgICAjZGVmaW5lIFJFQ1ZfRlVOQ1RJT04gcmVjdgorI2VsaWYgZGVmaW5lZChXT0xGU1NMX05VQ0xFVVNfMV8yKQorICAgICNkZWZpbmUgU0VORF9GVU5DVElPTiBOVV9TZW5kCisgICAgI2RlZmluZSBSRUNWX0ZVTkNUSU9OIE5VX1JlY3YKKyNlbGlmIGRlZmluZWQoRlVTSU9OX1JUT1MpCisgICAgI2RlZmluZSBTRU5EX0ZVTkNUSU9OIEZOU19TRU5ECisgICAgI2RlZmluZSBSRUNWX0ZVTkNUSU9OIEZOU19SRUNWCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfWkVQSFlSKQorICAgICNpZm5kZWYgV09MRlNTTF9NQVhfU0VORF9TWgorICAgICAgICAjZGVmaW5lIFdPTEZTU0xfTUFYX1NFTkRfU1ogICAgICAgMjU2CisgICAgI2VuZGlmCisKKyAgICAjZGVmaW5lIFNFTkRfRlVOQ1RJT04gc2VuZAorICAgICNkZWZpbmUgUkVDVl9GVU5DVElPTiByZWN2CisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfTElOVVhLTSkKKyAgICAjZGVmaW5lIFNFTkRfRlVOQ1RJT04gbGludXhrbV9zZW5kCisgICAgI2RlZmluZSBSRUNWX0ZVTkNUSU9OIGxpbnV4a21fcmVjdgorI2Vsc2UKKyAgICAjZGVmaW5lIFNFTkRfRlVOQ1RJT04gc2VuZAorICAgICNkZWZpbmUgUkVDVl9GVU5DVElPTiByZWN2CisgICAgI2lmICFkZWZpbmVkKEhBVkVfU09DS0FERFIpICYmICFkZWZpbmVkKFdPTEZTU0xfTk9fU09DSykKKyAgICAgICAgI2RlZmluZSBIQVZFX1NPQ0tBRERSCisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFVTRV9XSU5ET1dTX0FQSQorICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IFNPQ0tFVF9UOworICAgICNpZm5kZWYgU09DS0VUX0lOVkFMSUQKKyAgICAgICAgI2RlZmluZSBTT0NLRVRfSU5WQUxJRCBJTlZBTElEX1NPQ0tFVAorICAgICNlbmRpZgorI2Vsc2UKKyAgICB0eXBlZGVmIGludCBTT0NLRVRfVDsKKyAgICAjaWZuZGVmIFNPQ0tFVF9JTlZBTElECisgICAgICAgICNkZWZpbmUgU09DS0VUX0lOVkFMSUQgLTEKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFdPTEZTU0xfTk9fU09DSworICAgICNpZm5kZWYgWFNPQ0tMRU5UCisgICAgICAgICNpZmRlZiBVU0VfV0lORE9XU19BUEkKKyAgICAgICAgICAgICNkZWZpbmUgWFNPQ0tMRU5UIGludAorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2RlZmluZSBYU09DS0xFTlQgc29ja2xlbl90CisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorCisgICAgLyogU29ja2V0IEFkZHIgU3VwcG9ydCAqLworICAgICNpZmRlZiBIQVZFX1NPQ0tBRERSCisgICAgICAgIHR5cGVkZWYgc3RydWN0IHNvY2thZGRyICAgICAgICAgU09DS0FERFI7CisgICAgICAgIHR5cGVkZWYgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgU09DS0FERFJfUzsKKyAgICAgICAgdHlwZWRlZiBzdHJ1Y3Qgc29ja2FkZHJfaW4gICAgICBTT0NLQUREUl9JTjsKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfSVBWNgorICAgICAgICAgICAgdHlwZWRlZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IFNPQ0tBRERSX0lONjsKKyAgICAgICAgI2VuZGlmCisgICAgICAgIHR5cGVkZWYgc3RydWN0IGhvc3RlbnQgICAgICAgICAgSE9TVEVOVDsKKyAgICAjZW5kaWYgLyogSEFWRV9TT0NLQUREUiAqLworCisgICAgLyogdXNlIGdldGhvc3RieW5hbWUgZm9yIGM5OSAqLworICAgICNpZiBkZWZpbmVkKEhBVkVfR0VUQUREUklORk8pICYmICFkZWZpbmVkKFdPTEZfQzk5KQorICAgICAgICB0eXBlZGVmIHN0cnVjdCBhZGRyaW5mbyAgICAgICAgIEFERFJJTkZPOworICAgICNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfTk9fU09DSyAqLworCisKKy8qIElPIEFQSSdzICovCisjaWZkZWYgSEFWRV9JT19USU1FT1VUCisgICAgV09MRlNTTF9BUEkgIGludCB3b2xmSU9fU2V0QmxvY2tpbmdNb2RlKFNPQ0tFVF9UIHNvY2tmZCwgaW50IG5vbl9ibG9ja2luZyk7CisgICAgV09MRlNTTF9BUEkgdm9pZCB3b2xmSU9fU2V0VGltZW91dChpbnQgdG9fc2VjKTsKKyAgICBXT0xGU1NMX0FQSSAgaW50IHdvbGZJT19TZWxlY3QoU09DS0VUX1Qgc29ja2ZkLCBpbnQgdG9fc2VjKTsKKyNlbmRpZgorV09MRlNTTF9BUEkgIGludCB3b2xmSU9fVGNwQ29ubmVjdChTT0NLRVRfVCogc29ja2ZkLCBjb25zdCBjaGFyKiBpcCwKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0LCBpbnQgdG9fc2VjKTsKK1dPTEZTU0xfQVBJICBpbnQgd29sZklPX1NlbmQoU09DS0VUX1Qgc2QsIGNoYXIgKmJ1ZiwgaW50IHN6LCBpbnQgd3JGbGFncyk7CitXT0xGU1NMX0FQSSAgaW50IHdvbGZJT19SZWN2KFNPQ0tFVF9UIHNkLCBjaGFyICpidWYsIGludCBzeiwgaW50IHJkRmxhZ3MpOworCisjZW5kaWYgLyogVVNFX1dPTEZTU0xfSU8gfHwgSEFWRV9IVFRQX0NMSUVOVCAqLworCisjaWZuZGVmIFdPTEZTU0xfTk9fU09DSworI2lmZGVmIFVTRV9XSU5ET1dTX0FQSQorICAgICNpZm5kZWYgQ2xvc2VTb2NrZXQKKyAgICAgICAgI2RlZmluZSBDbG9zZVNvY2tldChzKSBjbG9zZXNvY2tldChzKQorICAgICNlbmRpZgorICAgICNkZWZpbmUgU3RhcnRUQ1AoKSB7IFdTQURBVEEgd3NkOyBXU0FTdGFydHVwKDB4MDAwMiwgJndzZCk7IH0KKyNlbGlmIGRlZmluZWQoV09MRlNTTF9NREtfQVJNKSB8fCBkZWZpbmVkKFdPTEZTU0xfS0VJTF9UQ1BfTkVUKQorICAgICNpZm5kZWYgQ2xvc2VTb2NrZXQKKyAgICAgICAgZXh0ZXJuIGludCBjbG9zZXNvY2tldChpbnQpOworICAgICAgICAjZGVmaW5lIENsb3NlU29ja2V0KHMpIGNsb3Nlc29ja2V0KHMpCisgICAgI2VuZGlmCisgICAgI2RlZmluZSBTdGFydFRDUCgpCisjZWxpZiBkZWZpbmVkKEZVU0lPTl9SVE9TKQorICAgICNpZm5kZWYgQ2xvc2VTb2NrZXQKKyAgICAgICAgI2RlZmluZSBDbG9zZVNvY2tldChzKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVycjsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTlNfQ0xPU0UocywgJmVycik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICNlbmRpZgorI2Vsc2UKKyAgICAjaWZuZGVmIENsb3NlU29ja2V0CisgICAgICAgICNkZWZpbmUgQ2xvc2VTb2NrZXQocykgY2xvc2UocykKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIFN0YXJ0VENQKCkKKyAgICAjaWZkZWYgRlJFRVJUT1NfVENQX1dJTlNJTQorICAgICAgICBleHRlcm4gaW50IGNsb3NlKGludCk7CisgICAgI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX05PX1NPQ0sgKi8KKworCitXT0xGU1NMX0FQSSBpbnQgQmlvU2VuZChXT0xGU1NMKiBzc2wsIGNoYXIgKmJ1ZiwgaW50IHN6LCB2b2lkICpjdHgpOworV09MRlNTTF9BUEkgaW50IEJpb1JlY2VpdmUoV09MRlNTTCogc3NsLCBjaGFyKiBidWYsIGludCBzeiwgdm9pZCogY3R4KTsKKyNpZiBkZWZpbmVkKFVTRV9XT0xGU1NMX0lPKQorICAgIC8qIGRlZmF1bHQgSU8gY2FsbGJhY2tzICovCisgICAgV09MRlNTTF9BUEkgaW50IEVtYmVkUmVjZWl2ZShXT0xGU1NMKiBzc2wsIGNoYXIqIGJ1ZiwgaW50IHN6LCB2b2lkKiBjdHgpOworICAgIFdPTEZTU0xfQVBJIGludCBFbWJlZFNlbmQoV09MRlNTTCogc3NsLCBjaGFyKiBidWYsIGludCBzeiwgdm9pZCogY3R4KTsKKworICAgICNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgV09MRlNTTF9BUEkgaW50IEVtYmVkUmVjZWl2ZUZyb20oV09MRlNTTCogc3NsLCBjaGFyKiBidWYsIGludCBzeiwgdm9pZCopOworICAgICAgICBXT0xGU1NMX0FQSSBpbnQgRW1iZWRTZW5kVG8oV09MRlNTTCogc3NsLCBjaGFyKiBidWYsIGludCBzeiwgdm9pZCogY3R4KTsKKyAgICAgICAgV09MRlNTTF9BUEkgaW50IEVtYmVkR2VuZXJhdGVDb29raWUoV09MRlNTTCogc3NsLCB1bnNpZ25lZCBjaGFyKiBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN6LCB2b2lkKik7CisgICAgICAgICNpZmRlZiBXT0xGU1NMX01VTFRJQ0FTVAorICAgICAgICAgICAgV09MRlNTTF9BUEkgaW50IEVtYmVkUmVjZWl2ZUZyb21NY2FzdChXT0xGU1NMKiBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZiwgaW50IHN6LCB2b2lkKik7CisgICAgICAgICNlbmRpZiAvKiBXT0xGU1NMX01VTFRJQ0FTVCAqLworICAgICAgICAjaWZkZWYgV09MRlNTTF9TRVNTSU9OX0VYUE9SVAorICAgICAgICAgICAgV09MRlNTTF9BUEkgaW50IEVtYmVkR2V0UGVlcihXT0xGU1NMKiBzc2wsIGNoYXIqIGlwLCBpbnQqIGlwU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCogcG9ydCwgaW50KiBmYW0pOworICAgICAgICAgICAgV09MRlNTTF9BUEkgaW50IEVtYmVkU2V0UGVlcihXT0xGU1NMKiBzc2wsIGNoYXIqIGlwLCBpbnQgaXBTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9ydCwgaW50IGZhbSk7CisgICAgICAgICNlbmRpZiAvKiBXT0xGU1NMX1NFU1NJT05fRVhQT1JUICovCisgICAgI2VuZGlmIC8qIFdPTEZTU0xfRFRMUyAqLworI2VuZGlmIC8qIFVTRV9XT0xGU1NMX0lPICovCisKKyNpZmRlZiBIQVZFX09DU1AKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZklPX0h0dHBCdWlsZFJlcXVlc3RPY3NwKGNvbnN0IGNoYXIqIGRvbWFpbk5hbWUsCisgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsIGludCBvY3NwUmVxU3osIHVuc2lnbmVkIGNoYXIqIGJ1ZiwgaW50IGJ1ZlNpemUpOworICAgIFdPTEZTU0xfQVBJIGludCB3b2xmSU9fSHR0cFByb2Nlc3NSZXNwb25zZU9jc3AoaW50IHNmZCwKKyAgICAgICAgdW5zaWduZWQgY2hhcioqIHJlc3BCdWYsIHVuc2lnbmVkIGNoYXIqIGh0dHBCdWYsIGludCBodHRwQnVmU3osCisgICAgICAgIHZvaWQqIGhlYXApOworCisgICAgV09MRlNTTF9BUEkgaW50IEVtYmVkT2NzcExvb2t1cCh2b2lkKiwgY29uc3QgY2hhciosIGludCwgdW5zaWduZWQgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgdW5zaWduZWQgY2hhcioqKTsKKyAgICBXT0xGU1NMX0FQSSB2b2lkIEVtYmVkT2NzcFJlc3BGcmVlKHZvaWQqLCB1bnNpZ25lZCBjaGFyKik7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQ1JMX0lPCisgICAgV09MRlNTTF9BUEkgaW50IHdvbGZJT19IdHRwQnVpbGRSZXF1ZXN0Q3JsKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybFN6LAorICAgICAgICBjb25zdCBjaGFyKiBkb21haW5OYW1lLCB1bnNpZ25lZCBjaGFyKiBidWYsIGludCBidWZTaXplKTsKKyAgICBXT0xGU1NMX0FQSSBpbnQgd29sZklPX0h0dHBQcm9jZXNzUmVzcG9uc2VDcmwoV09MRlNTTF9DUkwqIGNybCwgaW50IHNmZCwKKyAgICAgICAgdW5zaWduZWQgY2hhciogaHR0cEJ1ZiwgaW50IGh0dHBCdWZTeik7CisKKyAgICBXT0xGU1NMX0FQSSBpbnQgRW1iZWRDcmxMb29rdXAoV09MRlNTTF9DUkwqIGNybCwgY29uc3QgY2hhciogdXJsLAorICAgICAgICBpbnQgdXJsU3opOworI2VuZGlmCisKKworI2lmIGRlZmluZWQoSEFWRV9IVFRQX0NMSUVOVCkKKyAgICBXT0xGU1NMX0FQSSAgaW50IHdvbGZJT19EZWNvZGVVcmwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsU3osIGNoYXIqIG91dE5hbWUsCisgICAgICAgIGNoYXIqIG91dFBhdGgsIHVuc2lnbmVkIHNob3J0KiBvdXRQb3J0KTsKKworICAgIFdPTEZTU0xfQVBJICBpbnQgd29sZklPX0h0dHBCdWlsZFJlcXVlc3QoY29uc3QgY2hhciogcmVxVHlwZSwKKyAgICAgICAgY29uc3QgY2hhciogZG9tYWluTmFtZSwgY29uc3QgY2hhciogcGF0aCwgaW50IHBhdGhMZW4sIGludCByZXFTeiwKKyAgICAgICAgY29uc3QgY2hhciogY29udGVudFR5cGUsIHVuc2lnbmVkIGNoYXIqIGJ1ZiwgaW50IGJ1ZlNpemUpOworICAgIFdPTEZTU0xfTE9DQUwgaW50IHdvbGZJT19IdHRwQnVpbGRSZXF1ZXN0X2V4KGNvbnN0IGNoYXIqIHJlcVR5cGUsCisgICAgICAgIGNvbnN0IGNoYXIqIGRvbWFpbk5hbWUsIGNvbnN0IGNoYXIqIHBhdGgsIGludCBwYXRoTGVuLCBpbnQgcmVxU3osCisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRUeXBlLCBjb25zdCBjaGFyICpleEhkcnMsIHVuc2lnbmVkIGNoYXIqIGJ1ZiwgaW50IGJ1ZlNpemUpOworICAgIFdPTEZTU0xfQVBJICBpbnQgd29sZklPX0h0dHBQcm9jZXNzUmVzcG9uc2UoaW50IHNmZCwgY29uc3QgY2hhcioqIGFwcFN0ckxpc3QsCisgICAgICAgIHVuc2lnbmVkIGNoYXIqKiByZXNwQnVmLCB1bnNpZ25lZCBjaGFyKiBodHRwQnVmLCBpbnQgaHR0cEJ1ZlN6LAorICAgICAgICBpbnQgZHluVHlwZSwgdm9pZCogaGVhcCk7CisjZW5kaWYgLyogSEFWRV9IVFRQX0NMSUVOVCAqLworCisKKy8qIEkvTyBjYWxsYmFja3MgKi8KK3R5cGVkZWYgaW50ICgqQ2FsbGJhY2tJT1JlY3YpKFdPTEZTU0wgKnNzbCwgY2hhciAqYnVmLCBpbnQgc3osIHZvaWQgKmN0eCk7Cit0eXBlZGVmIGludCAoKkNhbGxiYWNrSU9TZW5kKShXT0xGU1NMICpzc2wsIGNoYXIgKmJ1ZiwgaW50IHN6LCB2b2lkICpjdHgpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX0NUWF9TZXRJT1JlY3YoV09MRlNTTF9DVFgqLCBDYWxsYmFja0lPUmVjdik7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX1NldElPU2VuZChXT0xGU1NMX0NUWCosIENhbGxiYWNrSU9TZW5kKTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9TU0xTZXRJT1JlY3YoV09MRlNTTCosIENhbGxiYWNrSU9SZWN2KTsKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9TU0xTZXRJT1NlbmQoV09MRlNTTCosIENhbGxiYWNrSU9TZW5kKTsKKy8qIGRlcHJlY2F0ZWQgb2xkIG5hbWUgKi8KKyNkZWZpbmUgd29sZlNTTF9TZXRJT1JlY3Ygd29sZlNTTF9DVFhfU2V0SU9SZWN2CisjZGVmaW5lIHdvbGZTU0xfU2V0SU9TZW5kIHdvbGZTU0xfQ1RYX1NldElPU2VuZAorCitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfU2V0SU9SZWFkQ3R4KCBXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CitXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfU2V0SU9Xcml0ZUN0eChXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CisKK1dPTEZTU0xfQVBJIHZvaWQqIHdvbGZTU0xfR2V0SU9SZWFkQ3R4KCBXT0xGU1NMKiBzc2wpOworV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9HZXRJT1dyaXRlQ3R4KFdPTEZTU0wqIHNzbCk7CisKK1dPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9TZXRJT1JlYWRGbGFncyggV09MRlNTTCogc3NsLCBpbnQgZmxhZ3MpOworV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1NldElPV3JpdGVGbGFncyhXT0xGU1NMKiBzc2wsIGludCBmbGFncyk7CisKKworI2lmZGVmIEhBVkVfTkVUWAorICAgIFdPTEZTU0xfTE9DQUwgaW50IE5ldFhfUmVjZWl2ZShXT0xGU1NMICpzc2wsIGNoYXIgKmJ1ZiwgaW50IHN6LCB2b2lkICpjdHgpOworICAgIFdPTEZTU0xfTE9DQUwgaW50IE5ldFhfU2VuZChXT0xGU1NMICpzc2wsIGNoYXIgKmJ1ZiwgaW50IHN6LCB2b2lkICpjdHgpOworCisgICAgV09MRlNTTF9BUEkgdm9pZCB3b2xmU1NMX1NldElPX05ldFgoV09MRlNTTCogc3NsLCBOWF9UQ1BfU09DS0VUKiBueHNvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkcgd2FpdG9wdGlvbik7CisjZW5kaWYgLyogSEFWRV9ORVRYICovCisKKyNpZmRlZiBNSUNSSVVNCisgICAgV09MRlNTTF9MT0NBTCBpbnQgTWljcml1bVNlbmQoV09MRlNTTCogc3NsLCBjaGFyKiBidWYsIGludCBzeiwgdm9pZCogY3R4KTsKKyAgICBXT0xGU1NMX0xPQ0FMIGludCBNaWNyaXVtUmVjZWl2ZShXT0xGU1NMKiBzc2wsIGNoYXIqIGJ1ZiwgaW50IHN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGN0eCk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgTWljcml1bVJlY2VpdmVGcm9tKFdPTEZTU0wqIHNzbCwgY2hhciogYnVmLCBpbnQgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGN0eCk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgTWljcml1bVNlbmRUbyhXT0xGU1NMKiBzc2wsIGNoYXIqIGJ1ZiwgaW50IHN6LCB2b2lkKiBjdHgpOworI2VuZGlmIC8qIE1JQ1JJVU0gKi8KKworI2lmIGRlZmluZWQoV09MRlNTTF9BUEFDSEVfTVlORVdUKSAmJiAhZGVmaW5lZChXT0xGU1NMX0xXSVApCisgICAgV09MRlNTTF9MT0NBTCBpbnQgTXluZXd0X1JlY2VpdmUoV09MRlNTTCAqc3NsLCBjaGFyICpidWYsIGludCBzeiwgdm9pZCAqY3R4KTsKKyAgICBXT0xGU1NMX0xPQ0FMIGludCBNeW5ld3RfU2VuZChXT0xGU1NMKiBzc2wsIGNoYXIgKmJ1ZiwgaW50IHN6LCB2b2lkICpjdHgpOworICAgIFdPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9TZXRJT19NeW5ld3QoV09MRlNTTCogc3NsLCBzdHJ1Y3QgbW5fc29ja2V0KiBtblNvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtbl9zb2NrYWRkcl9pbiogbW5Tb2NrQWRkckluKTsKKyNlbmRpZiAvKiBkZWZpbmVkKFdPTEZTU0xfQVBBQ0hFX01ZTkVXVCkgJiYgIWRlZmluZWQoV09MRlNTTF9MV0lQKSAqLworCisjaWZkZWYgV09MRlNTTF9VSVAKKworICAgIHN0cnVjdCB1aXBfd29sZnNzbF9jdHggeworICAgICAgICB1bmlvbiBzb2NrZXRfY29ubmVjdG9yIHsKKyAgICAgICAgICAgIHN0cnVjdCB0Y3Bfc29ja2V0IHRjcDsKKyAgICAgICAgICAgIHN0cnVjdCB1ZHBfc29ja2V0IHVkcDsKKyAgICAgICAgfSBjb25uOworICAgICAgICBXT0xGU1NMX0NUWCAqY3R4OworICAgICAgICBXT0xGU1NMICpzc2w7CisgICAgICAgIGJ5dGUgKmlucHV0X2RhdGFidWY7CisgICAgICAgIGJ5dGUgKm91dHB1dF9kYXRhYnVmOworICAgICAgICBieXRlICpzc2xfcnhfZGF0YWJ1ZjsKKyAgICAgICAgaW50IHNzbF9yYl9sZW47CisgICAgICAgIGludCBzc2xfcmJfb2ZmOworICAgICAgICBzdHJ1Y3QgcHJvY2VzcyAqcHJvY2VzczsKKyAgICAgICAgdGNwX3NvY2tldF9kYXRhX2NhbGxiYWNrX3QgaW5wdXRfY2FsbGJhY2s7CisgICAgICAgIHRjcF9zb2NrZXRfZXZlbnRfY2FsbGJhY2tfdCBldmVudF9jYWxsYmFjazsKKyAgICAgICAgaW50IGNsb3Npbmc7CisgICAgICAgIHVpcF9pcGFkZHJfdCBwZWVyX2FkZHI7CisgICAgICAgIHdvcmQxNiBwZWVyX3BvcnQ7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RydWN0IHVpcF93b2xmc3NsX2N0eCB1aXBfd29sZnNzbF9jdHg7CisKKyAgICBXT0xGU1NMX0xPQ0FMIGludCB1SVBTZW5kKFdPTEZTU0wqIHNzbCwgY2hhciogYnVmLCBpbnQgc3osIHZvaWQqIGN0eCk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgdUlQUmVjZWl2ZShXT0xGU1NMKiBzc2wsIGNoYXIqIGJ1ZiwgaW50IHN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGN0eCk7CisgICAgV09MRlNTTF9MT0NBTCBpbnQgdUlQUmVjZWl2ZUZyb20oV09MRlNTTCogc3NsLCBjaGFyKiBidWYsIGludCBzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY3R4KTsKKyAgICBXT0xGU1NMX0xPQ0FMIGludCB1SVBTZW5kVG8oV09MRlNTTCogc3NsLCBjaGFyKiBidWYsIGludCBzeiwgdm9pZCogY3R4KTsKKworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0dOUkMKKyAgICAjaW5jbHVkZSA8c29ja190eXBlcy5oPgorICAgICNpbmNsdWRlIDxuZXQvZ25yYy5oPgorICAgICNpbmNsdWRlIDxuZXQvYWYuaD4KKyAgICAjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyAgICAjaW5jbHVkZSA8bmV0L2ducmMvdGNwLmg+CisgICAgI2luY2x1ZGUgPG5ldC9nbnJjL3VkcC5oPgorCisgICAgc3RydWN0IGducmNfd29sZnNzbF9jdHggeworICAgICAgICB1bmlvbiBzb2NrZXRfY29ubmVjdG9yIHsKKyAgICAgICAgI2lmZGVmIE1PRFVMRV9TT0NLX1RDUAorICAgICAgICAgICAgc29ja190Y3BfdCB0Y3A7CisgICAgICAgICNlbmRpZgorICAgICAgICAgICAgc29ja191ZHBfdCB1ZHA7CisgICAgICAgIH0gY29ubjsKKyAgICAgICAgV09MRlNTTF9DVFggKmN0eDsKKyAgICAgICAgV09MRlNTTCAqc3NsOworCisgICAgICAgIGludCBjbG9zaW5nOworICAgICAgICBzdHJ1Y3QgX3NvY2tfdGxfZXAgcGVlcl9hZGRyOworICAgIH07CisKKyAgICB0eXBlZGVmIHN0cnVjdCBnbnJjX3dvbGZzc2xfY3R4IHNvY2tfdGxzX3Q7CisKKyAgICBXT0xGU1NMX0xPQ0FMIGludCBHTlJDX1JlY2VpdmVGcm9tKFdPTEZTU0wqIHNzbCwgY2hhciogYnVmLCBpbnQgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY3R4KTsKKyAgICBXT0xGU1NMX0xPQ0FMIGludCBHTlJDX1NlbmRUbyhXT0xGU1NMKiBzc2wsIGNoYXIqIGJ1ZiwgaW50IHN6LCB2b2lkKiBjdHgpOworCisjZW5kaWYKKworCisjaWZkZWYgV09MRlNTTF9EVExTCisgICAgdHlwZWRlZiBpbnQgKCpDYWxsYmFja0dlbkNvb2tpZSkoV09MRlNTTCogc3NsLCB1bnNpZ25lZCBjaGFyKiBidWYsIGludCBzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjdHgpOworICAgIFdPTEZTU0xfQVBJIHZvaWQgIHdvbGZTU0xfQ1RYX1NldEdlbkNvb2tpZShXT0xGU1NMX0NUWCosIENhbGxiYWNrR2VuQ29va2llKTsKKyAgICBXT0xGU1NMX0FQSSB2b2lkICB3b2xmU1NMX1NldENvb2tpZUN0eChXT0xGU1NMKiBzc2wsIHZvaWQgKmN0eCk7CisgICAgV09MRlNTTF9BUEkgdm9pZCogd29sZlNTTF9HZXRDb29raWVDdHgoV09MRlNTTCogc3NsKTsKKworICAgICNpZmRlZiBXT0xGU1NMX1NFU1NJT05fRVhQT1JUCisgICAgICAgIHR5cGVkZWYgaW50ICgqQ2FsbGJhY2tHZXRQZWVyKShXT0xGU1NMKiBzc2wsIGNoYXIqIGlwLCBpbnQqIGlwU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0KiBwb3J0LCBpbnQqIGZhbSk7CisgICAgICAgIHR5cGVkZWYgaW50ICgqQ2FsbGJhY2tTZXRQZWVyKShXT0xGU1NMKiBzc2wsIGNoYXIqIGlwLCBpbnQgaXBTeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0LCBpbnQgZmFtKTsKKworICAgICAgICBXT0xGU1NMX0FQSSB2b2lkIHdvbGZTU0xfQ1RYX1NldElPR2V0UGVlcihXT0xGU1NMX0NUWCosIENhbGxiYWNrR2V0UGVlcik7CisgICAgICAgIFdPTEZTU0xfQVBJIHZvaWQgd29sZlNTTF9DVFhfU2V0SU9TZXRQZWVyKFdPTEZTU0xfQ1RYKiwgQ2FsbGJhY2tTZXRQZWVyKTsKKyAgICAjZW5kaWYgLyogV09MRlNTTF9TRVNTSU9OX0VYUE9SVCAqLworI2VuZGlmCisKKworCisjaWZuZGVmIFhJTkVUX05UT1AKKyAgICAjZGVmaW5lIFhJTkVUX05UT1AoYSxiLGMsZCkgaW5ldF9udG9wKChhKSwoYiksKGMpLChkKSkKKyAgICAjaWZkZWYgVVNFX1dJTkRPV1NfQVBJIC8qIFdpbmRvd3MtZnJpZW5kbHkgZGVmaW5pdGlvbiAqLworICAgICAgICAjdW5kZWYgIFhJTkVUX05UT1AKKyAgICAgICAgI2RlZmluZSBYSU5FVF9OVE9QKGEsYixjLGQpIEluZXROdG9wKChhKSwoYiksKGMpLChkKSkKKyAgICAjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBYSU5FVF9QVE9OCisgICAgI2RlZmluZSBYSU5FVF9QVE9OKGEsYixjKSAgIGluZXRfcHRvbigoYSksKGIpLChjKSkKKyAgICAjaWZkZWYgVVNFX1dJTkRPV1NfQVBJIC8qIFdpbmRvd3MtZnJpZW5kbHkgZGVmaW5pdGlvbiAqLworICAgICAgICAjdW5kZWYgIFhJTkVUX1BUT04KKyAgICAgICAgI2RlZmluZSBYSU5FVF9QVE9OKGEsYixjKSAgIEluZXRQdG9uKChhKSwoYiksKGMpKQorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgWEhUT05TCisgICAgI2lmICFkZWZpbmVkKFdPTEZTU0xfTk9fU09DSykgJiYgKGRlZmluZWQoVVNFX1dPTEZTU0xfSU8pIHx8IGRlZmluZWQoSEFWRV9IVFRQX0NMSUVOVCkpCisgICAgICAgICNkZWZpbmUgWEhUT05TKGEpIGh0b25zKChhKSkKKyAgICAjZWxzZQorICAgICAgICAvKiB3ZSBkb24ndCBoYXZlIHNvY2tldHMsIHNvIGRlZmluZSBvdXIgb3duIGh0b25zIGFuZCBudG9ocyAqLworICAgICAgICAjaWZkZWYgQklHX0VORElBTl9PUkRFUgorICAgICAgICAgICAgI2RlZmluZSBYSFRPTlMoYSkgKGEpCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAjZGVmaW5lIFhIVE9OUyhhKSAoKCgoYSkgPj4gOCkgJiAweGZmKSB8ICgoKGEpICYgMHhmZikgPDwgOCkpCisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorI2VuZGlmCisjaWZuZGVmIFhOVE9IUworICAgICNpZiAhZGVmaW5lZChXT0xGU1NMX05PX1NPQ0spICYmIChkZWZpbmVkKFVTRV9XT0xGU1NMX0lPKSB8fCBkZWZpbmVkKEhBVkVfSFRUUF9DTElFTlQpKQorICAgICAgICAjZGVmaW5lIFhOVE9IUyhhKSBudG9ocygoYSkpCisgICAgI2Vsc2UKKyAgICAgICAgLyogd2UgZG9uJ3QgaGF2ZSBzb2NrZXRzLCBzbyBkZWZpbmUgb3VyIG93biBodG9ucyBhbmQgbnRvaHMgKi8KKyAgICAgICAgI2lmZGVmIEJJR19FTkRJQU5fT1JERVIKKyAgICAgICAgICAgICNkZWZpbmUgWE5UT0hTKGEpIChhKQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2RlZmluZSBYTlRPSFMoYSkgKCgoKGEpID4+IDgpICYgMHhmZikgfCAoKChhKSAmIDB4ZmYpIDw8IDgpKQorICAgICAgICAjZW5kaWYKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFdPTEZTU0xfSVA0CisgICAgI2RlZmluZSBXT0xGU1NMX0lQNCBBRl9JTkVUCisjZW5kaWYKKyNpZm5kZWYgV09MRlNTTF9JUDYKKyAgICAjZGVmaW5lIFdPTEZTU0xfSVA2IEFGX0lORVQ2CisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9ICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIFdPTEZTU0xfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9saWIvbGlid29sZnNzbC5hIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9saWIvbGlid29sZnNzbC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NjM5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL2xpYi9saWJ3b2xmc3NsLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9saWIvbGlid29sZnNzbC5sYSBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvbGliL2xpYndvbGZzc2wubGEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTMzYWM2YQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvbGliL2xpYndvbGZzc2wubGEKQEAgLTAsMCArMSw0MSBAQAorIyBsaWJ3b2xmc3NsLmxhIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNC42IERlYmlhbi0yLjQuNi0yCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIFRoZSBuYW1lIHRoYXQgd2UgY2FuIGRsb3BlbigzKS4KK2RsbmFtZT0nJworCisjIE5hbWVzIG9mIHRoaXMgbGlicmFyeS4KK2xpYnJhcnlfbmFtZXM9JycKKworIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCitvbGRfbGlicmFyeT0nbGlid29sZnNzbC5hJworCisjIExpbmtlciBmbGFncyB0aGF0IGNhbm5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCitpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPScgLXB0aHJlYWQnCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPScgLWxtIC1scHRocmVhZCcKKworIyBOYW1lcyBvZiBhZGRpdGlvbmFsIHdlYWsgbGlicmFyaWVzIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeQord2Vha19saWJyYXJ5X25hbWVzPScnCisKKyMgVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgbGlid29sZnNzbC4KK2N1cnJlbnQ9MjkKK2FnZT01CityZXZpc2lvbj0xCisKKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworaW5zdGFsbGVkPXllcworCisjIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPworc2hvdWxkbm90bGluaz1ubworCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJworZGxwcmVvcGVuPScnCisKKyMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKK2xpYmRpcj0nL2hvbWUvemhvdWd1b3BvL2NvZGUyL3YzdC9hcC9wcm9qZWN0L3p4Mjk3NTIwdjMvcHJqX21kbC9idWlsZC8uLi8uLi8uLi8uLi9saWIvbGlid29sZnNzbC9pbnN0YWxsL2xpYicKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvbGliL3BrZ2NvbmZpZy93b2xmc3NsLnBjIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9saWIvcGtnY29uZmlnL3dvbGZzc2wucGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2ODJlZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvbGliL3BrZ2NvbmZpZy93b2xmc3NsLnBjCkBAIC0wLDAgKzEsMTAgQEAKK3ByZWZpeD0vaG9tZS96aG91Z3VvcG8vY29kZTIvdjN0L2FwL3Byb2plY3QvengyOTc1MjB2My9wcmpfbWRsL2J1aWxkLy4uLy4uLy4uLy4uL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQorbGliZGlyPSR7ZXhlY19wcmVmaXh9L2xpYgoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitOYW1lOiB3b2xmc3NsCitEZXNjcmlwdGlvbjogd29sZnNzbCBDIGxpYnJhcnkuCitWZXJzaW9uOiA0LjguMQorTGliczogLUwke2xpYmRpcn0gLWx3b2xmc3NsCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9SRUFETUUudHh0IGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWVkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL3NoYXJlL2RvYy93b2xmc3NsL1JFQURNRS50eHQKQEAgLTAsMCArMSw4IEBACitUaGUgd29sZlNTTCBtYW51YWwgaXMgYXZhaWxhYmxlIGF0OgoraHR0cDovL3d3dy53b2xmc3NsLmNvbS9kb2N1bWVudGF0aW9uL3dvbGZTU0wtTWFudWFsLnBkZgorCitUaGUgd29sZlNTTCBBUEkgZ3VpZGUgaXMgYXZhaWxhYmxlIGF0OgoraHR0cHM6Ly93d3cud29sZnNzbC5jb20vZG94eWdlbi93b2xmc3NsX0FQSS5odG1sCisKK1RoZSB3b2xmQ3J5cHQgQVBJIGd1aWRlIGlzIGF2YWlsYWJsZSBhdDoKK2h0dHBzOi8vd3d3LndvbGZzc2wuY29tL2RveHlnZW4vd29sZmNyeXB0X0FQSS5odG1sCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL3NoYXJlL2RvYy93b2xmc3NsL2V4YW1wbGUvY2xpZW50LmMgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL3NoYXJlL2RvYy93b2xmc3NsL2V4YW1wbGUvY2xpZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3MmM4MgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvZXhhbXBsZS9jbGllbnQuYwpAQCAtMCwwICsxLDQwMTggQEAKKy8qIGNsaWVudC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAgICAgICAgI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpZm5kZWYgV09MRlNTTF9VU0VSX1NFVFRJTkdTCisgICAgICAgICNpbmNsdWRlIDx3b2xmc3NsL29wdGlvbnMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NldHRpbmdzLmg+CisKKyNpbmNsdWRlIDx3b2xmc3NsL3NzbC5oPgorCisjaWZkZWYgV09MRlNTTF9XT0xGU0VOVFJZX0hPT0tTCisjaW5jbHVkZSA8d29sZnNlbnRyeS93b2xmc2VudHJ5Lmg+CisjaWYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgIWRlZmluZWQoV09MRlNFTlRSWV9OT19KU09OKQorc3RhdGljIGNvbnN0IGNoYXIgKndvbGZzZW50cnlfY29uZmlnX3BhdGggPSBOVUxMOworI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9XT0xGU0VOVFJZX0hPT0tTICovCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkgfHwgZGVmaW5lZChXT0xGU1NMX0tFSUxfVENQX05FVCkKKyAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgI2luY2x1ZGUgInJsX2ZzLmgiCisgICAgICAgICNpbmNsdWRlICJybF9uZXQuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8d29sZnNzbC90ZXN0Lmg+CisKKyNpbmNsdWRlIDxleGFtcGxlcy9jbGllbnQvY2xpZW50Lmg+CisjaW5jbHVkZSA8d29sZnNzbC9lcnJvci1zc2wuaD4KKworI2lmbmRlZiBOT19XT0xGU1NMX0NMSUVOVAorCisjaWZkZWYgTk9fRklMRVNZU1RFTQorI2lmZGVmIE5PX1JTQQorI2Vycm9yIGN1cnJlbnRseSB0aGUgZXhhbXBsZSBvbmx5IHRyaWVzIHRvIGxvYWQgaW4gYSBSU0EgYnVmZmVyCisjZW5kaWYKKyN1bmRlZiBVU0VfQ0VSVF9CVUZGRVJTXzI1NgorI2RlZmluZSBVU0VfQ0VSVF9CVUZGRVJTXzI1NgorI3VuZGVmIFVTRV9DRVJUX0JVRkZFUlNfMjA0OAorI2RlZmluZSBVU0VfQ0VSVF9CVUZGRVJTXzIwNDgKKyNpbmNsdWRlIDx3b2xmc3NsL2NlcnRzX3Rlc3QuaD4KKyNlbmRpZgorCisjaWZkZWYgVVNFX0ZBU1RfTUFUSAorICAgIC8qIGluY2x1ZGVkIHRvIGluc3BlY3QgdGhlIHNpemUgb2YgRlBfTUFYX0JJVFMgKi8KKyAgICAvKiBuZWVkIGludGVnZXIuaCBoZWFkZXIgdG8gbWFrZSBzdXJlIHJpZ2h0IG1hdGggdmVyc2lvbiB1c2VkICovCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2ludGVnZXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRUNDCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2VjYy5oPgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgc3RhdGljIGludCBkZXZJZCA9IElOVkFMSURfREVWSUQ7CisjZW5kaWYKKworI2RlZmluZSBERUZBVUxUX1RJTUVPVVRfU0VDIDIKKyNpZm5kZWYgTUFYX05PTl9CTE9DS19TRUMKKyNkZWZpbmUgTUFYX05PTl9CTE9DS19TRUMgICAxMAorI2VuZGlmCisKKyNkZWZpbmUgT0NTUF9TVEFQTElORyAxCisjZGVmaW5lIE9DU1BfU1RBUExJTkdWMiAyCisjZGVmaW5lIE9DU1BfU1RBUExJTkdWMl9NVUxUSSAzCisjZGVmaW5lIE9DU1BfU1RBUExJTkdfT1BUX01BWCBPQ1NQX1NUQVBMSU5HVjJfTVVMVEkKKworI2lmZGVmIFdPTEZTU0xfQUxUX1RFU1RfU1RSSU5HUworICAgICNkZWZpbmUgVEVTVF9TVFJfVEVSTSAiXG4iCisjZWxzZQorICAgICNkZWZpbmUgVEVTVF9TVFJfVEVSTQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyIGtIZWxsb01zZ1tdID0gImhlbGxvIHdvbGZzc2whIiBURVNUX1NUUl9URVJNOworI2lmbmRlZiBOT19TRVNTSU9OX0NBQ0hFCitzdGF0aWMgY29uc3QgY2hhciBrUmVzdW1lTXNnW10gPSAicmVzdW1pbmcgd29sZnNzbCEiIFRFU1RfU1RSX1RFUk07CisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF9UTFMxMykgJiYgZGVmaW5lZChXT0xGU1NMX0VBUkxZX0RBVEEpCisgICAgc3RhdGljIGNvbnN0IGNoYXIga0Vhcmx5TXNnW10gPSAiQSBkcm9wIG9mIGluZm8iIFRFU1RfU1RSX1RFUk07CisjZW5kaWYKK3N0YXRpYyBjb25zdCBjaGFyIGtIdHRwR2V0TXNnW10gPSAiR0VUIC9pbmRleC5odG1sIEhUVFAvMS4wXHJcblxyXG4iOworCisvKiBXcml0ZSBuZWVkcyB0byBiZSBsYXJnZXN0IG9mIHRoZSBhYm92ZSBzdHJpbmdzICgyOSkgKi8KKyNkZWZpbmUgQ0xJX01TR19TWiAgICAgIDMyCisvKiBSZWFkIG5lZWRzIHRvIGJlIGF0IGxlYXN0IHNpemVvZiBzZXJ2ZXIuYyBgd2ViU2VydmVyTXNnYCAoMjI2KSAqLworI2RlZmluZSBDTElfUkVQTFlfU1ogICAgMjU2CisKKyNpZiBkZWZpbmVkKFhTTEVFUF9VUykgJiYgZGVmaW5lZChOT19NQUlOX0RSSVZFUikKKyAgICAvKiBUaGlzIGlzIHRvIGZvcmNlIHRoZSBzZXJ2ZXIncyB0aHJlYWQgdG8gZ2V0IGEgY2hhbmNlIHRvCisgICAgICogZXhlY3V0ZSBiZWZvcmUgY29udGludWluZyB0aGUgcmVzdW1lIGluIG5vbi1ibG9ja2luZworICAgICAqIERUTFMgdGVzdCBjYXNlcy4gKi8KKyAgICAjZGVmaW5lIFRFU1RfREVMQVkoKSBYU0xFRVBfVVMoMTAwMDApCisjZWxzZQorICAgICNkZWZpbmUgVEVTVF9ERUxBWSgpIFhTTEVFUF9NUygxMDAwKQorI2VuZGlmCisKKy8qIE5vdGUgb24gdXNpbmcgcG9ydCAwOiB0aGUgY2xpZW50IHN0YW5kYWxvbmUgZXhhbXBsZSBkb2Vzbid0IHV0aWxpemUgdGhlCisgKiBwb3J0IDAgcG9ydCBzaGFyaW5nOyB0aGF0IGlzIHVzZWQgYnkgKDEpIHRoZSBzZXJ2ZXIgaW4gZXh0ZXJuYWwgY29udHJvbAorICogdGVzdCBtb2RlIGFuZCAoMikgdGhlIHRlc3RzdWl0ZSB3aGljaCB1c2VzIHRoaXMgY29kZSBhbmQgc2V0cyB1cCB0aGUgY29ycmVjdAorICogcG9ydCBudW1iZXJzIHdoZW4gdGhlIGludGVybmFsIHRocmVhZCB1c2luZyB0aGUgc2VydmVyIGNvZGUgdXNpbmcgcG9ydCAwLiAqLworCitzdGF0aWMgaW50IGxuZ19pbmRleCA9IDA7CisjaWZkZWYgV09MRlNTTF9DQUxMQkFDS1MKKyAgICBXT0xGU1NMX1RJTUVWQUwgdGltZW91dENvbm5lY3Q7CisgICAgc3RhdGljIGludCBoYW5kU2hha2VDQihIYW5kU2hha2VJbmZvKiBpbmZvKQorICAgIHsKKyAgICAgICAgKHZvaWQpaW5mbzsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3RhdGljIGludCB0aW1lb3V0Q0IoVGltZW91dEluZm8qIGluZm8pCisgICAgeworICAgICAgICAodm9pZClpbmZvOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TRVNTSU9OX1RJQ0tFVAorICAgIHN0YXRpYyBpbnQgc2Vzc2lvblRpY2tldENCKFdPTEZTU0wqIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHRpY2tldCwgaW50IHRpY2tldFN6LAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY3R4KQorICAgIHsKKyAgICAgICAgKHZvaWQpc3NsOworICAgICAgICAodm9pZCl0aWNrZXQ7CisgICAgICAgIHByaW50ZigiU2Vzc2lvbiBUaWNrZXQgQ0I6IHRpY2tldFN6ID0gJWQsIGN0eCA9ICVzXG4iLAorICAgICAgICAgICAgICAgdGlja2V0U3osIChjaGFyKiljdHgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKKworc3RhdGljIGludCBOb25CbG9ja2luZ1NTTF9Db25uZWN0KFdPTEZTU0wqIHNzbCkKK3sKKyAgICBpbnQgcmV0OworICAgIGludCBlcnJvcjsKKyAgICBTT0NLRVRfVCBzb2NrZmQ7CisgICAgaW50IHNlbGVjdF9yZXQgPSAwOworICAgIGludCBlbGFwc2VkU2VjID0gMDsKKworI2lmbmRlZiBXT0xGU1NMX0NBTExCQUNLUworICAgIHJldCA9IHdvbGZTU0xfY29ubmVjdChzc2wpOworI2Vsc2UKKyAgICByZXQgPSB3b2xmU1NMX2Nvbm5lY3RfZXgoc3NsLCBoYW5kU2hha2VDQiwgdGltZW91dENCLCB0aW1lb3V0Q29ubmVjdCk7CisjZW5kaWYKKyAgICBlcnJvciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgc29ja2ZkID0gKFNPQ0tFVF9UKXdvbGZTU0xfZ2V0X2ZkKHNzbCk7CisKKyAgICB3aGlsZSAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUyAmJgorICAgICAgICAoZXJyb3IgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1JFQUQgfHwgZXJyb3IgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1dSSVRFCisgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICB8fCBlcnJvciA9PSBXQ19QRU5ESU5HX0UKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZmRlZiBXT0xGU1NMX05PTkJMT0NLX09DU1AKKyAgICAgICAgICAgIHx8IGVycm9yID09IE9DU1BfV0FOVF9SRUFECisgICAgICAgICNlbmRpZgorICAgICkpIHsKKyAgICAgICAgaW50IGN1cnJUaW1lb3V0ID0gMTsKKworICAgICAgICBpZiAoZXJyb3IgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1JFQUQpCisgICAgICAgICAgICBwcmludGYoIi4uLiBjbGllbnQgd291bGQgcmVhZCBibG9ja1xuIik7CisgICAgICAgIGVsc2UgaWYgKGVycm9yID09IFdPTEZTU0xfRVJST1JfV0FOVF9XUklURSkKKyAgICAgICAgICAgIHByaW50ZigiLi4uIGNsaWVudCB3b3VsZCB3cml0ZSBibG9ja1xuIik7CisKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgIGlmIChlcnJvciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJyb3IgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1dSSVRFKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0X3JldCA9IHRjcF9zZWxlY3RfdHgoc29ja2ZkLCBjdXJyVGltZW91dCk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgICAgICAgICBjdXJyVGltZW91dCA9IHdvbGZTU0xfZHRsc19nZXRfY3VycmVudF90aW1lb3V0KHNzbCk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBzZWxlY3RfcmV0ID0gdGNwX3NlbGVjdChzb2NrZmQsIGN1cnJUaW1lb3V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2VsZWN0X3JldCA9PSBURVNUX1JFQ1ZfUkVBRFkpIHx8IChzZWxlY3RfcmV0ID09IFRFU1RfU0VORF9SRUFEWSkKKyAgICAgICAgICAgIHx8IChzZWxlY3RfcmV0ID09IFRFU1RfRVJST1JfUkVBRFkpCisgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICB8fCBlcnJvciA9PSBXQ19QRU5ESU5HX0UKKyAgICAgICAgI2VuZGlmCisgICAgICAgICkgeworICAgICAgICAjaWZuZGVmIFdPTEZTU0xfQ0FMTEJBQ0tTCisgICAgICAgICAgICByZXQgPSB3b2xmU1NMX2Nvbm5lY3Qoc3NsKTsKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfY29ubmVjdF9leChzc2wsIGhhbmRTaGFrZUNCLCB0aW1lb3V0Q0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dENvbm5lY3QpOworICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGVycm9yID0gd29sZlNTTF9nZXRfZXJyb3Ioc3NsLCAwKTsKKyAgICAgICAgICAgIGVsYXBzZWRTZWMgPSAwOyAvKiByZXNldCBlbGFwc2VkICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2VsZWN0X3JldCA9PSBURVNUX1RJTUVPVVQgJiYgIXdvbGZTU0xfZHRscyhzc2wpKSB7CisgICAgICAgICAgICBlcnJvciA9IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEOworCisgICAgICAgICAgICBlbGFwc2VkU2VjICs9IGN1cnJUaW1lb3V0OworICAgICAgICAgICAgaWYgKGVsYXBzZWRTZWMgPiBNQVhfTk9OX0JMT0NLX1NFQykgeworICAgICAgICAgICAgICAgIHByaW50ZigiTm9uYmxvY2tpbmcgY29ubmVjdCB0aW1lb3V0XG4iKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IFdPTEZTU0xfRkFUQUxfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgZWxzZSBpZiAoc2VsZWN0X3JldCA9PSBURVNUX1RJTUVPVVQgJiYgd29sZlNTTF9kdGxzKHNzbCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2R0bHNfZ290X3RpbWVvdXQoc3NsKSA+PSAwKSB7CisgICAgICAgICAgICBlcnJvciA9IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlcnJvciA9IFdPTEZTU0xfRkFUQUxfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIFNob3dDaXBoZXJzKHZvaWQpCit7CisgICAgc3RhdGljIGNoYXIgY2lwaGVyc1tXT0xGU1NMX0NJUEhFUl9MSVNUX01BWF9TSVpFXTsKKworICAgIGludCByZXQgPSB3b2xmU1NMX2dldF9jaXBoZXJzKGNpcGhlcnMsIChpbnQpc2l6ZW9mKGNpcGhlcnMpKTsKKworICAgIGlmIChyZXQgPT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICBwcmludGYoIiVzXG4iLCBjaXBoZXJzKTsKK30KKworLyogU2hvd3Mgd2hpY2ggdmVyc2lvbnMgYXJlIHZhbGlkICovCitzdGF0aWMgdm9pZCBTaG93VmVyc2lvbnModm9pZCkKK3sKKyNpZm5kZWYgTk9fT0xEX1RMUworICAgICNpZmRlZiBXT0xGU1NMX0FMTE9XX1NTTFYzCisgICAgICAgIHByaW50ZigiMDoiKTsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgV09MRlNTTF9BTExPV19UTFNWMTAKKyAgICAgICAgcHJpbnRmKCIxOiIpOworICAgICNlbmRpZgorICAgIHByaW50ZigiMjoiKTsKKyNlbmRpZiAvKiBOT19PTERfVExTICovCisjaWZuZGVmIFdPTEZTU0xfTk9fVExTMTIKKyAgICBwcmludGYoIjM6Iik7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgcHJpbnRmKCI0OiIpOworI2VuZGlmCisgICAgcHJpbnRmKCJkKGRvd25ncmFkZSk6Iik7CisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFdPTEZTU0xfRUlUSEVSX1NJREUpCisgICAgcHJpbnRmKCJlKGVpdGhlcik6Iik7CisjZW5kaWYKKyAgICBwcmludGYoIlxuIik7Cit9CisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIGRlZmluZWQoSEFWRV9TVVBQT1JURURfQ1VSVkVTKQorI2RlZmluZSBNQVhfR1JPVVBfTlVNQkVSIDQKK3N0YXRpYyB2b2lkIFNldEtleVNoYXJlKFdPTEZTU0wqIHNzbCwgaW50IG9ubHlLZXlTaGFyZSwgaW50IHVzZVgyNTUxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2VYNDQ4LCBpbnQgc2V0R3JvdXBzKQoreworICAgIGludCByZXQ7CisgICAgaW50IGdyb3Vwc1tNQVhfR1JPVVBfTlVNQkVSXSA9IHswfTsKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgKHZvaWQpdXNlWDI1NTE5OworICAgICh2b2lkKXVzZVg0NDg7CisKKyAgICBXT0xGU1NMX1NUQVJUKFdDX0ZVTkNfQ0xJRU5UX0tFWV9FWENIQU5HRV9TRU5EKTsKKyAgICBpZiAob25seUtleVNoYXJlID09IDAgfHwgb25seUtleVNoYXJlID09IDIpIHsKKyAgICAgICAgaWYgKHVzZVgyNTUxOSkgeworICAgICNpZmRlZiBIQVZFX0NVUlZFMjU1MTkKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX1VzZUtleVNoYXJlKHNzbCwgV09MRlNTTF9FQ0NfWDI1NTE5KTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW2NvdW50KytdID0gV09MRlNTTF9FQ0NfWDI1NTE5OworICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXQgPT0gV0NfUEVORElOR19FKQorICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0FzeW5jUG9sbChzc2wsIFdPTEZfUE9MTF9GTEFHX0NIRUNLX0hXKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIHVzZSBjdXJ2ZSB4MjU1MTkiKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHJldCA9PSBXQ19QRU5ESU5HX0UpOworICAgICNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHVzZVg0NDgpIHsKKyAgICAjaWZkZWYgSEFWRV9DVVJWRTQ0OAorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfVXNlS2V5U2hhcmUoc3NsLCBXT0xGU1NMX0VDQ19YNDQ4KTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW2NvdW50KytdID0gV09MRlNTTF9FQ0NfWDQ0ODsKKyAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICAgICAgZWxzZSBpZiAocmV0ID09IFdDX1BFTkRJTkdfRSkKKyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9Bc3luY1BvbGwoc3NsLCBXT0xGX1BPTExfRkxBR19DSEVDS19IVyk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byB1c2UgY3VydmUgeDQ0OCIpOworICAgICAgICAgICAgfSB3aGlsZSAocmV0ID09IFdDX1BFTkRJTkdfRSk7CisgICAgI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgI2lmZGVmIEhBVkVfRUNDCisgICAgICAgICNpZiAhZGVmaW5lZChOT19FQ0MyNTYpIHx8IGRlZmluZWQoSEFWRV9BTExfQ1VSVkVTKQorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfVXNlS2V5U2hhcmUoc3NsLCBXT0xGU1NMX0VDQ19TRUNQMjU2UjEpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgICAgICAgICBncm91cHNbY291bnQrK10gPSBXT0xGU1NMX0VDQ19TRUNQMjU2UjE7CisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJldCA9PSBXQ19QRU5ESU5HX0UpCisgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlcnJfc3lzKCJ1bmFibGUgdG8gdXNlIGN1cnZlIHNlY3AyNTZyMSIpOworICAgICAgICAgICAgfSB3aGlsZSAocmV0ID09IFdDX1BFTkRJTkdfRSk7CisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorICAgICAgICB9CisgICAgfQorICAgIGlmIChvbmx5S2V5U2hhcmUgPT0gMCB8fCBvbmx5S2V5U2hhcmUgPT0gMSkgeworICAgICNpZmRlZiBIQVZFX0ZGREhFXzIwNDgKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9Vc2VLZXlTaGFyZShzc2wsIFdPTEZTU0xfRkZESEVfMjA0OCk7CisgICAgICAgICAgICBpZiAocmV0ID09IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBncm91cHNbY291bnQrK10gPSBXT0xGU1NMX0ZGREhFXzIwNDg7CisgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICBlbHNlIGlmIChyZXQgPT0gV0NfUEVORElOR19FKQorICAgICAgICAgICAgICAgIHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJ1bmFibGUgdG8gdXNlIERIIDIwNDgtYml0IHBhcmFtZXRlcnMiKTsKKyAgICAgICAgfSB3aGlsZSAocmV0ID09IFdDX1BFTkRJTkdfRSk7CisgICAgI2VuZGlmCisgICAgfQorICAgIGlmIChjb3VudCA+PSBNQVhfR1JPVVBfTlVNQkVSKQorICAgICAgICBlcnJfc3lzKCJleGFtcGxlIGdyb3VwIGFycmF5IHNpemUgZXJyb3IiKTsKKyAgICBpZiAoc2V0R3JvdXBzICYmIGNvdW50ID4gMCkgeworICAgICAgICBpZiAod29sZlNTTF9zZXRfZ3JvdXBzKHNzbCwgZ3JvdXBzLCBjb3VudCkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIHNldCBncm91cHMiKTsKKyAgICB9CisgICAgV09MRlNTTF9FTkQoV0NfRlVOQ19DTElFTlRfS0VZX0VYQ0hBTkdFX1NFTkQpOworfQorI2VuZGlmIC8qIFdPTEZTU0xfVExTMTMgJiYgSEFWRV9TVVBQT1JURURfQ1VSVkVTICovCisKKyNpZmRlZiBXT0xGU1NMX0VBUkxZX0RBVEEKK3N0YXRpYyB2b2lkIEVhcmx5RGF0YShXT0xGU1NMX0NUWCogY3R4LCBXT0xGU1NMKiBzc2wsIGNvbnN0IGNoYXIqIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbXNnU3osIGNoYXIqIGJ1ZmZlcikKK3sKKyAgICBpbnQgZXJyOworICAgIGludCByZXQ7CisKKyAgICBkbyB7CisgICAgICAgIGVyciA9IDA7IC8qIHJlc2V0IGVycm9yICovCisgICAgICAgIHJldCA9IHdvbGZTU0xfd3JpdGVfZWFybHlfZGF0YShzc2wsIG1zZywgbXNnU3osICZtc2dTeik7CisgICAgICAgIGlmIChyZXQgPD0gMCkgeworICAgICAgICAgICAgZXJyID0gd29sZlNTTF9nZXRfZXJyb3Ioc3NsLCAwKTsKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9Bc3luY1BvbGwoc3NsLCBXT0xGX1BPTExfRkxBR19DSEVDS19IVyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAjZW5kaWYKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpOworICAgIGlmIChyZXQgIT0gbXNnU3opIHsKKyAgICAgICAgcHJpbnRmKCJTU0xfd3JpdGVfZWFybHlfZGF0YSBtc2cgZXJyb3IgJWQsICVzXG4iLCBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZyhlcnIsIGJ1ZmZlcikpOworICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICBlcnJfc3lzKCJTU0xfd3JpdGVfZWFybHlfZGF0YSBmYWlsZWQiKTsKKyAgICB9CisgICAgZG8geworICAgICAgICBlcnIgPSAwOyAvKiByZXNldCBlcnJvciAqLworICAgICAgICByZXQgPSB3b2xmU1NMX3dyaXRlX2Vhcmx5X2RhdGEoc3NsLCBtc2csIG1zZ1N6LCAmbXNnU3opOworICAgICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICBpZiAoZXJyID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisgICAgICAgIH0KKyAgICB9IHdoaWxlIChlcnIgPT0gV0NfUEVORElOR19FKTsKKyAgICBpZiAocmV0ICE9IG1zZ1N6KSB7CisgICAgICAgIHByaW50ZigiU1NMX3dyaXRlX2Vhcmx5X2RhdGEgbXNnIGVycm9yICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9lcnJvcl9zdHJpbmcoZXJyLCBidWZmZXIpKTsKKyAgICAgICAgd29sZlNTTF9mcmVlKHNzbCk7CisgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsKKyAgICAgICAgZXJyX3N5cygiU1NMX3dyaXRlX2Vhcmx5X2RhdGEgZmFpbGVkIik7CisgICAgfQorfQorI2VuZGlmCisKKy8qIE1lYXN1cmVzIGF2ZXJhZ2UgdGltZSB0byBjcmVhdGUsIGNvbm5lY3QgYW5kIGRpc2Nvbm5lY3QgYSBjb25uZWN0aW9uIChUUFMpLgorQmVuY2htYXJrID0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zLiAqLworc3RhdGljIGNvbnN0IGNoYXIqIGNsaWVudF9iZW5jaF9jb25tc2dbXVs1XSA9IHsKKyAgICAvKiBFbmdsaXNoICovCisgICAgeworICAgICAgICAid29sZlNTTF9yZXN1bWUgIGF2ZyB0b29rOiIsICJtaWxsaXNlY29uZHNcbiIsCisgICAgICAgICJ3b2xmU1NMX2Nvbm5lY3QgYXZnIHRvb2s6IiwgIm1pbGxpc2Vjb25kc1xuIiwKKyAgICAgICAgTlVMTAorICAgIH0sCisgICAgI2lmbmRlZiBOT19NVUxUSUJZVEVfUFJJTlQKKyAgICAvKiBKYXBhbmVzZSAqLworICAgIHsKKyAgICAgICAgIndvbGZTU0xfcmVzdW1lICDlubPlnYfmmYLplpM6IiwgIuODn+ODquenklxuIiwKKyAgICAgICAgIndvbGZTU0xfY29ubmVjdCDlubPlnYfmmYLplpM6IiwgIuODn+ODquenklxuIiwKKyAgICB9CisgICAgI2VuZGlmCit9OworCitzdGF0aWMgaW50IENsaWVudEJlbmNobWFya0Nvbm5lY3Rpb25zKFdPTEZTU0xfQ1RYKiBjdHgsIGNoYXIqIGhvc3QsIHdvcmQxNiBwb3J0LAorICAgIGludCBkdGxzVURQLCBpbnQgZHRsc1NDVFAsIGludCBiZW5jaG1hcmssIGludCByZXN1bWVTZXNzaW9uLCBpbnQgdXNlWDI1NTE5LAorICAgIGludCB1c2VYNDQ4LCBpbnQgaGVsbG9SZXRyeSwgaW50IG9ubHlLZXlTaGFyZSwgaW50IHZlcnNpb24sIGludCBlYXJseURhdGEpCit7CisgICAgLyogdGltZSBwYXNzZWQgaW4gbnVtYmVyIG9mIGNvbm5lY3RzIGdpdmUgYXZlcmFnZSAqLworICAgIGludCB0aW1lcyA9IGJlbmNobWFyaywgc2tpcCA9IHRpbWVzICogMC4xOworICAgIGludCBsb29wcyA9IHJlc3VtZVNlc3Npb24gPyAyIDogMTsKKyAgICBpbnQgaSA9IDAsIGVyciwgcmV0OworI2lmbmRlZiBOT19TRVNTSU9OX0NBQ0hFCisgICAgV09MRlNTTF9TRVNTSU9OKiBiZW5jaFNlc3Npb24gPSBOVUxMOworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9UTFMxMworICAgIGJ5dGUgcmVwbHlbQ0xJX1JFUExZX1NaXTsKKyNlbmRpZgorICAgIGNvbnN0IGNoYXIqKiB3b3JkcyA9IGNsaWVudF9iZW5jaF9jb25tc2dbbG5nX2luZGV4XTsKKworICAgICh2b2lkKXJlc3VtZVNlc3Npb247CisgICAgKHZvaWQpdXNlWDI1NTE5OworICAgICh2b2lkKXVzZVg0NDg7CisgICAgKHZvaWQpaGVsbG9SZXRyeTsKKyAgICAodm9pZClvbmx5S2V5U2hhcmU7CisgICAgKHZvaWQpdmVyc2lvbjsKKyAgICAodm9pZCllYXJseURhdGE7CisKKyAgICB3aGlsZSAobG9vcHMtLSkgeworICAgICNpZm5kZWYgTk9fU0VTU0lPTl9DQUNIRQorICAgICAgICBpbnQgYmVuY2hSZXN1bWUgPSByZXN1bWVTZXNzaW9uICYmIGxvb3BzID09IDA7CisgICAgI2VuZGlmCisgICAgICAgIGRvdWJsZSBzdGFydCA9IGN1cnJlbnRfdGltZSgxKSwgYXZnOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aW1lczsgaSsrKSB7CisgICAgICAgICAgICBTT0NLRVRfVCBzb2NrZmQ7CisgICAgICAgICAgICBXT0xGU1NMKiBzc2w7CisKKyAgICAgICAgICAgIGlmIChpID09IHNraXApCisgICAgICAgICAgICAgICAgc3RhcnQgPSBjdXJyZW50X3RpbWUoMSk7CisKKyAgICAgICAgICAgIHNzbCA9IHdvbGZTU0xfbmV3KGN0eCk7CisgICAgICAgICAgICBpZiAoc3NsID09IE5VTEwpCisgICAgICAgICAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIGdldCBTU0wgb2JqZWN0Iik7CisKKyAgICAgICAgI2lmbmRlZiBOT19TRVNTSU9OX0NBQ0hFCisgICAgICAgICAgICBpZiAoYmVuY2hSZXN1bWUpCisgICAgICAgICAgICAgICAgd29sZlNTTF9zZXRfc2Vzc2lvbihzc2wsIGJlbmNoU2Vzc2lvbik7CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBkZWZpbmVkKEhBVkVfU1VQUE9SVEVEX0NVUlZFUykKKyAgICAgICAgICAgIGVsc2UgaWYgKHZlcnNpb24gPj0gNCkgeworICAgICAgICAgICAgICAgIGlmICghaGVsbG9SZXRyeSkKKyAgICAgICAgICAgICAgICAgICAgU2V0S2V5U2hhcmUoc3NsLCBvbmx5S2V5U2hhcmUsIHVzZVgyNTUxOSwgdXNlWDQ0OCwgMSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX05vS2V5U2hhcmVzKHNzbCk7CisgICAgICAgICAgICB9CisgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICB0Y3BfY29ubmVjdCgmc29ja2ZkLCBob3N0LCBwb3J0LCBkdGxzVURQLCBkdGxzU0NUUCwgc3NsKTsKKworICAgICAgICAgICAgaWYgKHdvbGZTU0xfc2V0X2ZkKHNzbCwgc29ja2ZkKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJlcnJvciBpbiBzZXR0aW5nIGZkIik7CisgICAgICAgICAgICB9CisKKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiAhZGVmaW5lZChOT19TRVNTSU9OX0NBQ0hFKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoV09MRlNTTF9FQVJMWV9EQVRBKQorICAgICAgICAgICAgaWYgKHZlcnNpb24gPj0gNCAmJiBiZW5jaFJlc3VtZSAmJiBlYXJseURhdGEpIHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1ZmZlcltXT0xGU1NMX01BWF9FUlJPUl9TWl07CisgICAgICAgICAgICAgICAgRWFybHlEYXRhKGN0eCwgc3NsLCBrRWFybHlNc2csIHNpemVvZihrRWFybHlNc2cpLTEsIGJ1ZmZlcik7CisgICAgICAgICAgICB9CisgICAgI2VuZGlmCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgZXJyID0gMDsgLyogcmVzZXQgZXJyb3IgKi8KKyAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX2Nvbm5lY3Qoc3NsKTsKKyNpZmRlZiBXT0xGU1NMX0VBUkxZX0RBVEEKKyAgICAgICAgICAgICAgICBFYXJseURhdGFTdGF0dXMoc3NsKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoZXJyID09IFdDX1BFTkRJTkdfRSk7CisgICAgICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGVycl9zeXMoIlNTTF9jb25uZWN0IGZhaWxlZCIpOworICAgICAgICAgICAgfQorCisgICAgI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgI2lmbmRlZiBOT19TRVNTSU9OX0NBQ0hFCisgICAgICAgICAgICBpZiAodmVyc2lvbiA+PSA0ICYmIHJlc3VtZVNlc3Npb24gJiYgIWJlbmNoUmVzdW1lKQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgaWYgKHZlcnNpb24gPj0gNCAmJiByZXN1bWVTZXNzaW9uKQorICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBubyBudWxsIHRlcm0gKi8KKyAgICAgICAgICAgICAgICBpZiAod29sZlNTTF93cml0ZShzc2wsIGtIdHRwR2V0TXNnLCBzaXplb2Yoa0h0dHBHZXRNc2cpLTEpIDw9IDApCisgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoIlNTTF93cml0ZSBmYWlsZWQiKTsKKworICAgICAgICAgICAgICAgIGlmICh3b2xmU1NMX3JlYWQoc3NsLCByZXBseSwgc2l6ZW9mKHJlcGx5KS0xKSA8PSAwKQorICAgICAgICAgICAgICAgICAgICBlcnJfc3lzKCJTU0xfcmVhZCBmYWlsZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAjZW5kaWYKKworCisgICAgICAgICAgICB3b2xmU1NMX3NodXRkb3duKHNzbCk7CisgICAgI2lmbmRlZiBOT19TRVNTSU9OX0NBQ0hFCisgICAgICAgICAgICBpZiAoaSA9PSAodGltZXMtMSkgJiYgcmVzdW1lU2Vzc2lvbikgeworICAgICAgICAgICAgICAgIGJlbmNoU2Vzc2lvbiA9IHdvbGZTU0xfZ2V0X3Nlc3Npb24oc3NsKTsKKyAgICAgICAgICAgIH0KKyAgICAjZW5kaWYKKyAgICAgICAgICAgIHdvbGZTU0xfZnJlZShzc2wpOyBzc2wgPSBOVUxMOworICAgICAgICAgICAgQ2xvc2VTb2NrZXQoc29ja2ZkKTsKKyAgICAgICAgfQorICAgICAgICBhdmcgPSBjdXJyZW50X3RpbWUoMCkgLSBzdGFydDsKKyAgICAgICAgYXZnIC89ICh0aW1lcyAtIHNraXApOworICAgICAgICBhdmcgKj0gMTAwMDsgICAvKiBtaWxsaXNlY29uZHMgKi8KKyAgICAjaWZuZGVmIE5PX1NFU1NJT05fQ0FDSEUKKyAgICAgICAgaWYgKGJlbmNoUmVzdW1lKQorICAgICAgICAgICAgcHJpbnRmKCIlcyAlOC4zZiAlc1xuIiwgd29yZHNbMF0sYXZnLCB3b3Jkc1sxXSk7CisgICAgICAgIGVsc2UKKyAgICAjZW5kaWYKKyAgICAgICAgICAgIHByaW50ZigiJXMgJTguM2YgJXNcbiIsIHdvcmRzWzJdLGF2Zywgd29yZHNbM10pOworCisgICAgICAgIFdPTEZTU0xfVElNRSh0aW1lcyk7CisgICAgfQorCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworLyogTWVhc3VyZXMgdGhyb3VnaHB1dCBpbiBtYnBzLiBUaHJvdWdocHV0ID0gbnVtYmVyIG9mIGJ5dGVzICovCitzdGF0aWMgaW50IENsaWVudEJlbmNobWFya1Rocm91Z2hwdXQoV09MRlNTTF9DVFgqIGN0eCwgY2hhciogaG9zdCwgd29yZDE2IHBvcnQsCisgICAgaW50IGR0bHNVRFAsIGludCBkdGxzU0NUUCwgaW50IGJsb2NrLCBzaXplX3QgdGhyb3VnaHB1dCwgaW50IHVzZVgyNTUxOSwKKyAgICBpbnQgdXNlWDQ0OCwgaW50IGV4aXRXaXRoUmV0LCBpbnQgdmVyc2lvbiwgaW50IG9ubHlLZXlTaGFyZSkKK3sKKyAgICBkb3VibGUgc3RhcnQsIGNvbm5fdGltZSA9IDAsIHR4X3RpbWUgPSAwLCByeF90aW1lID0gMDsKKyAgICBTT0NLRVRfVCBzb2NrZmQ7CisgICAgV09MRlNTTCogc3NsOworICAgIGludCByZXQgPSAwLCBlcnIgPSAwOworCisgICAgc3RhcnQgPSBjdXJyZW50X3RpbWUoMSk7CisgICAgc3NsID0gd29sZlNTTF9uZXcoY3R4KTsKKyAgICBpZiAoc3NsID09IE5VTEwpCisgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byBnZXQgU1NMIG9iamVjdCIpOworCisgICAgdGNwX2Nvbm5lY3QoJnNvY2tmZCwgaG9zdCwgcG9ydCwgZHRsc1VEUCwgZHRsc1NDVFAsIHNzbCk7CisgICAgaWYgKHdvbGZTU0xfc2V0X2ZkKHNzbCwgc29ja2ZkKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgZXJyX3N5cygiZXJyb3IgaW4gc2V0dGluZyBmZCIpOworICAgIH0KKworICAgICh2b2lkKXVzZVgyNTUxOTsKKyAgICAodm9pZCl1c2VYNDQ4OworICAgICh2b2lkKXZlcnNpb247CisgICAgKHZvaWQpb25seUtleVNoYXJlOworI2lmIGRlZmluZWQoV09MRlNTTF9UTFMxMykgJiYgZGVmaW5lZChIQVZFX1NVUFBPUlRFRF9DVVJWRVMpCisgICAgaWYgKHZlcnNpb24gPj0gNCkgeworICAgICAgICBTZXRLZXlTaGFyZShzc2wsIG9ubHlLZXlTaGFyZSwgdXNlWDI1NTE5LCB1c2VYNDQ4LCAxKTsKKyAgICB9CisjZW5kaWYKKworICAgIGRvIHsKKyAgICAgICAgZXJyID0gMDsgLyogcmVzZXQgZXJyb3IgKi8KKyAgICAgICAgcmV0ID0gd29sZlNTTF9jb25uZWN0KHNzbCk7CisgICAgICAgIGlmIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICBlcnIgPSB3b2xmU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgICAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgaWYgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX0FzeW5jUG9sbChzc2wsIFdPTEZfUE9MTF9GTEFHX0NIRUNLX0hXKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICNlbmRpZgorICAgICAgICB9CisgICAgfSB3aGlsZSAoZXJyID09IFdDX1BFTkRJTkdfRSk7CisgICAgaWYgKHJldCA9PSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgLyogUGVyZm9ybSB0aHJvdWdocHV0IHRlc3QgKi8KKyAgICAgICAgY2hhciAqdHhfYnVmZmVyLCAqcnhfYnVmZmVyOworCisgICAgICAgIC8qIFJlY29yZCBjb25uZWN0aW9uIHRpbWUgKi8KKyAgICAgICAgY29ubl90aW1lID0gY3VycmVudF90aW1lKDApIC0gc3RhcnQ7CisKKyAgICAgICAgLyogQWxsb2NhdGUgVFgvUlggYnVmZmVycyAqLworICAgICAgICB0eF9idWZmZXIgPSAoY2hhciopWE1BTExPQyhibG9jaywgTlVMTCwgRFlOQU1JQ19UWVBFX1RNUF9CVUZGRVIpOworICAgICAgICByeF9idWZmZXIgPSAoY2hhciopWE1BTExPQyhibG9jaywgTlVMTCwgRFlOQU1JQ19UWVBFX1RNUF9CVUZGRVIpOworICAgICAgICBpZiAodHhfYnVmZmVyICYmIHJ4X2J1ZmZlcikgeworICAgICAgICAgICAgV0NfUk5HIHJuZzsKKworICAgICAgICAgICAgLyogU3RhcnR1cCB0aGUgUk5HICovCisgICAgICAgICNpZiAhZGVmaW5lZChIQVZFX0ZJUFMpICYmIGRlZmluZWQoV09MRlNTTF9BU1lOQ19DUllQVCkKKyAgICAgICAgICAgIHJldCA9IHdjX0luaXRSbmdfZXgoJnJuZywgTlVMTCwgZGV2SWQpOworICAgICAgICAjZWxzZQorICAgICAgICAgICAgcmV0ID0gd2NfSW5pdFJuZygmcm5nKTsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgeGZlcl9ieXRlczsKKworICAgICAgICAgICAgICAgIC8qIEdlbmVyYXRlIHJhbmRvbSBkYXRhIHRvIHNlbmQgKi8KKyAgICAgICAgICAgICAgICByZXQgPSB3Y19STkdfR2VuZXJhdGVCbG9jaygmcm5nLCAoYnl0ZSopdHhfYnVmZmVyLCBibG9jayk7CisgICAgICAgICAgICAgICAgd2NfRnJlZVJuZygmcm5nKTsKKyAgICAgICAgICAgICAgICBpZihyZXQgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBlcnJfc3lzKCJ3Y19STkdfR2VuZXJhdGVCbG9jayBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBQZXJmb3JtIFRYIGFuZCBSWCBvZiBieXRlcyAqLworICAgICAgICAgICAgICAgIHhmZXJfYnl0ZXMgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlICh0aHJvdWdocHV0ID4geGZlcl9ieXRlcykgeworICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCByeF9wb3MsIHNlbGVjdF9yZXQ7CisKKyAgICAgICAgICAgICAgICAgICAgLyogRGV0ZXJtaW5lIHBhY2tldCBzaXplICovCisgICAgICAgICAgICAgICAgICAgIGxlbiA9IG1pbihibG9jaywgKGludCkodGhyb3VnaHB1dCAtIHhmZXJfYnl0ZXMpKTsKKworICAgICAgICAgICAgICAgICAgICAvKiBQZXJmb3JtIFRYICovCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gY3VycmVudF90aW1lKDEpOworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAwOyAvKiByZXNldCBlcnJvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF93cml0ZShzc2wsIHR4X2J1ZmZlciwgbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IGxlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0xfd3JpdGUgYmVuY2ggZXJyb3IgJWQhXG4iLCBlcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFleGl0V2l0aFJldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfc3lzKCJTU0xfd3JpdGUgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvRXhpdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0eF90aW1lICs9IGN1cnJlbnRfdGltZSgwKSAtIHN0YXJ0OworCisgICAgICAgICAgICAgICAgICAgIC8qIFBlcmZvcm0gUlggKi8KKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0X3JldCA9IHRjcF9zZWxlY3Qoc29ja2ZkLCBERUZBVUxUX1RJTUVPVVRfU0VDKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdF9yZXQgPT0gVEVTVF9SRUNWX1JFQURZKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGN1cnJlbnRfdGltZSgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ4X3BvcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocnhfcG9zIDwgbGVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9yZWFkKHNzbCwgJnJ4X2J1ZmZlcltyeF9wb3NdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtIHJ4X3Bvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBXT0xGU1NMX0VSUk9SX1dBTlRfUkVBRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0xfcmVhZCBiZW5jaCBlcnJvciAlZFxuIiwgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoIlNTTF9yZWFkIGZhaWxlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9wb3MgKz0gcmV0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJ4X3RpbWUgKz0gY3VycmVudF90aW1lKDApIC0gc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKiBDb21wYXJlIFRYIGFuZCBSWCBidWZmZXJzICovCisgICAgICAgICAgICAgICAgICAgIGlmIChYTUVNQ01QKHR4X2J1ZmZlciwgcnhfYnVmZmVyLCBsZW4pICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUodHhfYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR4X2J1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHJ4X2J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICByeF9idWZmZXIgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyX3N5cygiQ29tcGFyZSBUWCBhbmQgUlggYnVmZmVycyBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBvdmVyYWxsIHBvc2l0aW9uICovCisgICAgICAgICAgICAgICAgICAgIHhmZXJfYnl0ZXMgKz0gbGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGVycl9zeXMoIndjX0luaXRSbmcgZmFpbGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAodm9pZClybmc7IC8qIGZvciBXQ19OT19STkcgY2FzZSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZXJyX3N5cygiQ2xpZW50IGJ1ZmZlciBtYWxsb2MgZmFpbGVkIik7CisgICAgICAgIH0KK2RvRXhpdDoKKyAgICAgICAgaWYgKHR4X2J1ZmZlcikgWEZSRUUodHhfYnVmZmVyLCBOVUxMLCBEWU5BTUlDX1RZUEVfVE1QX0JVRkZFUik7CisgICAgICAgIGlmIChyeF9idWZmZXIpIFhGUkVFKHJ4X2J1ZmZlciwgTlVMTCwgRFlOQU1JQ19UWVBFX1RNUF9CVUZGRVIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZXJyX3N5cygid29sZlNTTF9jb25uZWN0IGZhaWxlZCIpOworICAgIH0KKworICAgIHdvbGZTU0xfc2h1dGRvd24oc3NsKTsKKyAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICBDbG9zZVNvY2tldChzb2NrZmQpOworCisgICAgaWYgKGV4aXRXaXRoUmV0KQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcHJpbnRmKAorI2lmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgICAgICAid29sZlNTTCBDbGllbnQgQmVuY2htYXJrICV6dSBieXRlc1xuIgorI2Vsc2UKKyAgICAgICAgIndvbGZTU0wgQ2xpZW50IEJlbmNobWFyayAlZCBieXRlc1xuIgorI2VuZGlmCisgICAgICAgICJcdENvbm5lY3QgJTguM2YgbXNcbiIKKyAgICAgICAgIlx0VFggICAgICAlOC4zZiBtcyAoJTguM2YgTUJwcylcbiIKKyAgICAgICAgIlx0UlggICAgICAlOC4zZiBtcyAoJTguM2YgTUJwcylcbiIsCisjaWYgIWRlZmluZWQoX19NSU5HVzMyX18pCisgICAgICAgIHRocm91Z2hwdXQsCisjZWxzZQorICAgICAgICAoaW50KXRocm91Z2hwdXQsCisjZW5kaWYKKyAgICAgICAgY29ubl90aW1lICogMTAwMCwKKyAgICAgICAgdHhfdGltZSAqIDEwMDAsIHRocm91Z2hwdXQgLyB0eF90aW1lIC8gMTAyNCAvIDEwMjQsCisgICAgICAgIHJ4X3RpbWUgKiAxMDAwLCB0aHJvdWdocHV0IC8gcnhfdGltZSAvIDEwMjQgLyAxMDI0CisgICAgKTsKKworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKK2NvbnN0IGNoYXIqIHN0YXJ0dGxzQ21kWzZdID0geworICAgICIyMjAiLAorICAgICJFSExPIG1haWwuZXhhbXBsZS5jb21cclxuIiwKKyAgICAiMjUwIiwKKyAgICAiU1RBUlRUTFNcclxuIiwKKyAgICAiMjIwIiwKKyAgICAiUVVJVFxyXG4iLAorfTsKKworLyogSW5pdGlhdGVzIHRoZSBTVEFSVFRMUyBjb21tYW5kIHNlcXVlbmNlIG92ZXIgVENQICovCitzdGF0aWMgaW50IFN0YXJ0VExTX0luaXQoU09DS0VUX1QqIHNvY2tmZCkKK3sKKyAgICBjaGFyIHRtcEJ1ZlsyNTZdOworCisgICAgaWYgKHNvY2tmZCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gQkFEX0ZVTkNfQVJHOworCisgICAgLyogUzogMjIwIDxob3N0PiBTTVRQIHNlcnZpY2UgcmVhZHkgKi8KKyAgICBYTUVNU0VUKHRtcEJ1ZiwgMCwgc2l6ZW9mKHRtcEJ1ZikpOworICAgIGlmIChyZWN2KCpzb2NrZmQsIHRtcEJ1Ziwgc2l6ZW9mKHRtcEJ1ZiktMSwgMCkgPCAwKQorICAgICAgICBlcnJfc3lzKCJmYWlsZWQgdG8gcmVhZCBTVEFSVFRMUyBjb21tYW5kXG4iKTsKKworICAgIGlmICghWFNUUk5DTVAodG1wQnVmLCBzdGFydHRsc0NtZFswXSwgWFNUUkxFTihzdGFydHRsc0NtZFswXSkpKSB7CisgICAgICAgIHByaW50ZigiJXNcbiIsIHRtcEJ1Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyX3N5cygiaW5jb3JyZWN0IFNUQVJUVExTIGNvbW1hbmQgcmVjZWl2ZWQiKTsKKyAgICB9CisKKyAgICAvKiBDOiBFSExPIG1haWwuZXhhbXBsZS5jb20gKi8KKyAgICBpZiAoc2VuZCgqc29ja2ZkLCBzdGFydHRsc0NtZFsxXSwgKGludClYU1RSTEVOKHN0YXJ0dGxzQ21kWzFdKSwgMCkgIT0KKyAgICAgICAgICAgICAgKGludClYU1RSTEVOKHN0YXJ0dGxzQ21kWzFdKSkKKyAgICAgICAgZXJyX3N5cygiZmFpbGVkIHRvIHNlbmQgU1RBUlRUTFMgRUhMTyBjb21tYW5kXG4iKTsKKworICAgIC8qIFM6IDI1MCA8aG9zdD4gb2ZmZXJzIGEgd2FybSBodWcgb2Ygd2VsY29tZSAqLworICAgIFhNRU1TRVQodG1wQnVmLCAwLCBzaXplb2YodG1wQnVmKSk7CisgICAgaWYgKHJlY3YoKnNvY2tmZCwgdG1wQnVmLCBzaXplb2YodG1wQnVmKS0xLCAwKSA8IDApCisgICAgICAgIGVycl9zeXMoImZhaWxlZCB0byByZWFkIFNUQVJUVExTIGNvbW1hbmRcbiIpOworCisgICAgaWYgKCFYU1RSTkNNUCh0bXBCdWYsIHN0YXJ0dGxzQ21kWzJdLCBYU1RSTEVOKHN0YXJ0dGxzQ21kWzJdKSkpIHsKKyAgICAgICAgcHJpbnRmKCIlc1xuIiwgdG1wQnVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlcnJfc3lzKCJpbmNvcnJlY3QgU1RBUlRUTFMgY29tbWFuZCByZWNlaXZlZCIpOworICAgIH0KKworICAgIC8qIEM6IFNUQVJUVExTICovCisgICAgaWYgKHNlbmQoKnNvY2tmZCwgc3RhcnR0bHNDbWRbM10sIChpbnQpWFNUUkxFTihzdGFydHRsc0NtZFszXSksIDApICE9CisgICAgICAgICAgICAgIChpbnQpWFNUUkxFTihzdGFydHRsc0NtZFszXSkpIHsKKyAgICAgICAgZXJyX3N5cygiZmFpbGVkIHRvIHNlbmQgU1RBUlRUTFMgY29tbWFuZFxuIik7CisgICAgfQorCisgICAgLyogUzogMjIwIEdvIGFoZWFkICovCisgICAgWE1FTVNFVCh0bXBCdWYsIDAsIHNpemVvZih0bXBCdWYpKTsKKyAgICBpZiAocmVjdigqc29ja2ZkLCB0bXBCdWYsIHNpemVvZih0bXBCdWYpLTEsIDApIDwgMCkKKyAgICAgICAgZXJyX3N5cygiZmFpbGVkIHRvIHJlYWQgU1RBUlRUTFMgY29tbWFuZFxuIik7CisgICAgdG1wQnVmW3NpemVvZih0bXBCdWYpLTFdID0gJ1wwJzsKKyAgICBpZiAoIVhTVFJOQ01QKHRtcEJ1Ziwgc3RhcnR0bHNDbWRbNF0sIFhTVFJMRU4oc3RhcnR0bHNDbWRbNF0pKSkgeworICAgICAgICBwcmludGYoIiVzXG4iLCB0bXBCdWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycl9zeXMoImluY29ycmVjdCBTVEFSVFRMUyBjb21tYW5kIHJlY2VpdmVkLCBleHBlY3RlZCAyMjAiKTsKKyAgICB9CisKKyAgICByZXR1cm4gV09MRlNTTF9TVUNDRVNTOworfQorCisvKiBDbG9zZXMgZG93biB0aGUgU01UUCBjb25uZWN0aW9uICovCitzdGF0aWMgaW50IFNNVFBfU2h1dGRvd24oV09MRlNTTCogc3NsLCBpbnQgd2Nfc2h1dGRvd24pCit7CisgICAgaW50IHJldCwgZXJyID0gMDsKKyAgICBjaGFyIHRtcEJ1ZlsyNTZdOworCisgICAgaWYgKHNzbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gQkFEX0ZVTkNfQVJHOworCisgICAgcHJpbnRmKCJcbndvbGZTU0wgY2xpZW50IHNodXR0aW5nIGRvd24gU01UUCBjb25uZWN0aW9uXG4iKTsKKworICAgIFhNRU1TRVQodG1wQnVmLCAwLCBzaXplb2YodG1wQnVmKSk7CisKKyAgICAvKiBDOiBRVUlUICovCisgICAgZG8geworICAgICAgICByZXQgPSB3b2xmU1NMX3dyaXRlKHNzbCwgc3RhcnR0bHNDbWRbNV0sIChpbnQpWFNUUkxFTihzdGFydHRsc0NtZFs1XSkpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgZXJyID0gd29sZlNTTF9nZXRfZXJyb3Ioc3NsLCAwKTsKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9Bc3luY1BvbGwoc3NsLCBXT0xGX1BPTExfRkxBR19DSEVDS19IVyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAjZW5kaWYKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpOworICAgIGlmIChyZXQgIT0gKGludClYU1RSTEVOKHN0YXJ0dGxzQ21kWzVdKSkgeworICAgICAgICBlcnJfc3lzKCJmYWlsZWQgdG8gc2VuZCBTTVRQIFFVSVQgY29tbWFuZFxuIik7CisgICAgfQorCisgICAgLyogUzogMjIxIDIuMC4wIFNlcnZpY2UgY2xvc2luZyB0cmFuc21pc3Npb24gY2hhbm5lbCAqLworICAgIGRvIHsKKyAgICAgICAgcmV0ID0gd29sZlNTTF9yZWFkKHNzbCwgdG1wQnVmLCBzaXplb2YodG1wQnVmKS0xKTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICBpZiAoZXJyID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisgICAgICAgIH0KKyAgICB9IHdoaWxlIChlcnIgPT0gV0NfUEVORElOR19FKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBlcnJfc3lzKCJmYWlsZWQgdG8gcmVhZCBTTVRQIGNsb3NpbmcgZG93biByZXNwb25zZVxuIik7CisgICAgfQorICAgIHRtcEJ1ZltyZXRdID0gMDsgLyogbnVsbCB0ZXJtaW5hdGUgbWVzc2FnZSAqLworICAgIHByaW50ZigiJXNcbiIsIHRtcEJ1Zik7CisKKyAgICByZXQgPSB3b2xmU1NMX3NodXRkb3duKHNzbCk7CisgICAgaWYgKHdjX3NodXRkb3duICYmIHJldCA9PSBXT0xGU1NMX1NIVVRET1dOX05PVF9ET05FKSB7CisgICAgICAgIGlmICh0Y3Bfc2VsZWN0KHdvbGZTU0xfZ2V0X2ZkKHNzbCksIERFRkFVTFRfVElNRU9VVF9TRUMpID09CisgICAgICAgICAgICAgICAgVEVTVF9SRUNWX1JFQURZKSB7CisgICAgICAgICAgICByZXQgPSB3b2xmU1NMX3NodXRkb3duKHNzbCk7ICAgIC8qIGJpZGlyZWN0aW9uYWwgc2h1dGRvd24gKi8KKyAgICAgICAgICAgIGlmIChyZXQgPT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgICAgIHByaW50ZigiQmlkaXJlY3Rpb25hbCBzaHV0ZG93biBjb21wbGV0ZVxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBwcmludGYoIkJpZGlyZWN0aW9uYWwgc2h1dGRvd24gZmFpbGVkXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gV09MRlNTTF9TVUNDRVNTOworfQorCitzdGF0aWMgaW50IENsaWVudFdyaXRlKFdPTEZTU0wqIHNzbCwgY29uc3QgY2hhciogbXNnLCBpbnQgbXNnU3osIGNvbnN0IGNoYXIqIHN0ciwKKyAgICBpbnQgZXhpdFdpdGhSZXQpCit7CisgICAgaW50IHJldCwgZXJyOworICAgIGNoYXIgYnVmZmVyW1dPTEZTU0xfTUFYX0VSUk9SX1NaXTsKKworICAgIGRvIHsKKyAgICAgICAgZXJyID0gMDsgLyogcmVzZXQgZXJyb3IgKi8KKyAgICAgICAgcmV0ID0gd29sZlNTTF93cml0ZShzc2wsIG1zZywgbXNnU3opOworICAgICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICBpZiAoZXJyID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisgICAgICAgIH0KKyAgICB9IHdoaWxlIChlcnIgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1dSSVRFIHx8CisgICAgICAgICAgICAgZXJyID09IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFECisgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgfHwgZXJyID09IFdDX1BFTkRJTkdfRQorICAgICNlbmRpZgorICAgICk7CisgICAgaWYgKHJldCAhPSBtc2dTeikgeworICAgICAgICBwcmludGYoIlNTTF93cml0ZSVzIG1zZyBlcnJvciAlZCwgJXNcbiIsIHN0ciwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZyhlcnIsIGJ1ZmZlcikpOworICAgICAgICBpZiAoIWV4aXRXaXRoUmV0KSB7CisgICAgICAgICAgICBlcnJfc3lzKCJTU0xfd3JpdGUgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IENsaWVudFJlYWQoV09MRlNTTCogc3NsLCBjaGFyKiByZXBseSwgaW50IHJlcGx5TGVuLCBpbnQgbXVzdFJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc3RyLCBpbnQgZXhpdFdpdGhSZXQpCit7CisgICAgaW50IHJldCwgZXJyOworICAgIGNoYXIgYnVmZmVyW1dPTEZTU0xfTUFYX0VSUk9SX1NaXTsKKyAgICBkb3VibGUgc3RhcnQgPSBjdXJyZW50X3RpbWUoMSksIGVsYXBzZWQ7CisKKyAgICBkbyB7CisgICAgICAgIGVyciA9IDA7IC8qIHJlc2V0IGVycm9yICovCisgICAgICAgIHJldCA9IHdvbGZTU0xfcmVhZChzc2wsIHJlcGx5LCByZXBseUxlbik7CisgICAgICAgIGlmIChyZXQgPD0gMCkgeworICAgICAgICAgICAgZXJyID0gd29sZlNTTF9nZXRfZXJyb3Ioc3NsLCAwKTsKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9Bc3luY1BvbGwoc3NsLCBXT0xGX1BPTExfRkxBR19DSEVDS19IVyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGlmIChlcnIgIT0gV09MRlNTTF9FUlJPUl9XQU5UX1JFQUQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlNTTF9yZWFkIHJlcGx5IGVycm9yICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9lcnJvcl9zdHJpbmcoZXJyLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4aXRXaXRoUmV0KSB7CisgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoIlNTTF9yZWFkIGZhaWxlZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG11c3RSZWFkICYmIGVyciA9PSBXT0xGU1NMX0VSUk9SX1dBTlRfUkVBRCkgeworICAgICAgICAgICAgZWxhcHNlZCA9IGN1cnJlbnRfdGltZSgwKSAtIHN0YXJ0OworICAgICAgICAgICAgaWYgKGVsYXBzZWQgPiBNQVhfTk9OX0JMT0NLX1NFQykgeworICAgICAgICAgICAgICAgIHByaW50ZigiTm9uYmxvY2tpbmcgcmVhZCB0aW1lb3V0XG4iKTsKKyAgICAgICAgICAgICAgICByZXQgPSBXT0xGU1NMX0ZBVEFMX0VSUk9SOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoKG11c3RSZWFkICYmIGVyciA9PSBXT0xGU1NMX0VSUk9SX1dBTlRfUkVBRCkKKyAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICB8fCBlcnIgPT0gV0NfUEVORElOR19FCisgICAgI2VuZGlmCisgICAgKTsKKyAgICBpZiAocmV0ID4gMCkgeworICAgICAgICByZXBseVtyZXRdID0gMDsgLyogbnVsbCB0ZXJtaW5hdGUgKi8KKyAgICAgICAgcHJpbnRmKCIlcyVzXG4iLCBzdHIsIHJlcGx5KTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyOworfQorCisKKy8qIHdoZW4gYWRkaW5nIG5ldyBvcHRpb24sIHBsZWFzZSBmb2xsb3cgdGhlIHN0ZXBzIGJlbG93OiAqLworLyogIDEuIGFkZCBuZXcgb3B0aW9uIG1lc3NhZ2UgaW4gRW5nbGlzaCBzZWN0aW9uICAgICAgICAgICovCisvKiAgMi4gaW5jcmVhc2UgdGhlIG51bWJlciBvZiB0aGUgc2Vjb25kIGNvbHVtbiAgICAgICAgICAgKi8KKy8qICAzLiBpbmNyZWFzZSB0aGUgYXJyYXkgZGltZW5zaW9uICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIDQuIGFkZCB0aGUgc2FtZSBtZXNzYWdlIGludG8gSmFwYW5lc2Ugc2VjdGlvbiAgICAgICAgICovCisvKiAgICAgKHdpbGwgYmUgdHJhbnNsYXRlZCBsYXRlcikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICA1LiBhZGQgcHJpbnRmKCkgaW50byBzdWl0YWJsZSBwb3NpdGlvbiBvZiBVc2FnZSgpICAgICAqLworc3RhdGljIGNvbnN0IGNoYXIqIGNsaWVudF91c2FnZV9tc2dbXVs2OV0gPSB7CisgICAgLyogRW5nbGlzaCAqLworICAgIHsKKyAgICAgICAgIiBOT1RFOiBBbGwgZmlsZXMgcmVsYXRpdmUgdG8gd29sZlNTTCBob21lIGRpclxuIiwgICAgICAgICAgLyogMCAqLworICAgICAgICAiTWF4IFJTQSBrZXkgc2l6ZSBpbiBiaXRzIGZvciBidWlsZCBpcyBzZXQgYXQgOiAiLCAgICAgICAgICAvKiAxICovCisjaWZkZWYgTk9fUlNBCisgICAgICAgICJSU0Egbm90IHN1cHBvcnRlZFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgKi8KKyNlbGlmIGRlZmluZWQoV09MRlNTTF9TUF9NQVRIKSAvKiBjYXNlIG9mIFNQIG1hdGggb25seSAqLworI2lmZGVmIFdPTEZTU0xfU1BfNDA5NgorICAgICAgICAiNDA5NlxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyICovCisjZWxpZiAhZGVmaW5lZChXT0xGU1NMX1NQX05PXzMwNzIpCisgICAgICAgICIzMDcyXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgKi8KKyNlbGlmICFkZWZpbmVkKFdPTEZTU0xfU1BfTk9fMjA0OCkKKyAgICAgICAgIjIwNDhcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMiAqLworI2Vsc2UKKyAgICAgICAgIjBcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMiAqLworI2VuZGlmCisjZWxpZiBkZWZpbmVkKFVTRV9GQVNUX01BVEgpCisjZWxzZQorICAgICAgICAiSU5GSU5JVEVcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyICovCisjZW5kaWYKKyAgICAgICAgIi0/IDxudW0+ICAgIEhlbHAsIHByaW50IHRoaXMgdXNhZ2VcbiIKKyAgICAgICAgIiAgICAgICAgICAgIDA6IEVuZ2xpc2gsIDE6IEphcGFuZXNlXG4iCisgICAgICAgICItLWhlbHAgICAgICBIZWxwLCBpbiBFbmdsaXNoXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMgKi8KKyAgICAgICAgIi1oIDxob3N0PiAgIEhvc3QgdG8gY29ubmVjdCB0bywgZGVmYXVsdCIsICAgICAgICAgICAgICAgICAgLyogNCAqLworICAgICAgICAiLXAgPG51bT4gICAgUG9ydCB0byBjb25uZWN0IG9uLCBub3QgMCwgZGVmYXVsdCIsICAgICAgICAgICAvKiA1ICovCisKKyNpZm5kZWYgV09MRlNTTF9UTFMxMworICAgICAgICAiLXYgPG51bT4gICAgU1NMIHZlcnNpb24gWzAtM10sIFNTTHYzKDApIC0gVExTMS4yKDMpKSwgZGVmYXVsdCIsIC8qIDYgKi8KKyAgICAgICAgIi1WICAgICAgICAgIFByaW50cyB2YWxpZCBzc2wgdmVyc2lvbiBudW1iZXJzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgU1NMdjMoMCkgLSBUTFMxLjIoMylcbiIsIC8qIDcgKi8KKyNlbHNlCisgICAgICAgICItdiA8bnVtPiAgICBTU0wgdmVyc2lvbiBbMC00XSwgU1NMdjMoMCkgLSBUTFMxLjMoNCkpLCBkZWZhdWx0IiwgLyogNiAqLworICAgICAgICAiLVYgICAgICAgICAgUHJpbnRzIHZhbGlkIHNzbCB2ZXJzaW9uIG51bWJlcnMsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFNTTHYzKDApIC0gVExTMS4zKDQpXG4iLCAgIC8qIDcgKi8KKyNlbmRpZgorICAgICAgICAiLWwgPHN0cj4gICAgQ2lwaGVyIHN1aXRlIGxpc3QgKDogZGVsaW1pdGVkKVxuIiwgICAgICAgICAgICAgICAgLyogOCAqLworI2lmbmRlZiBOT19DRVJUUworICAgICAgICAiLWMgPGZpbGU+ICAgQ2VydGlmaWNhdGUgZmlsZSwgICAgICAgICAgIGRlZmF1bHQiLCAgICAgICAgICAgICAgLyogOSAqLworICAgICAgICAiLWsgPGZpbGU+ICAgS2V5IGZpbGUsICAgICAgICAgICAgICAgICAgIGRlZmF1bHQiLCAgICAgICAgICAgICAgLyogMTAgKi8KKyAgICAgICAgIi1BIDxmaWxlPiAgIENlcnRpZmljYXRlIEF1dGhvcml0eSBmaWxlLCBkZWZhdWx0IiwgICAgICAgICAgICAgIC8qIDExICovCisjZW5kaWYKKyNpZm5kZWYgTk9fREgKKyAgICAgICAgIi1aIDxudW0+ICAgIE1pbmltdW0gREgga2V5IGJpdHMsICAgICAgICBkZWZhdWx0IiwgICAgICAgICAgICAgIC8qIDEyICovCisjZW5kaWYKKyAgICAgICAgIi1iIDxudW0+ICAgIEJlbmNobWFyayA8bnVtPiBjb25uZWN0aW9ucyBhbmQgcHJpbnQgc3RhdHNcbiIsICAgIC8qIDEzICovCisjaWZkZWYgSEFWRV9BTFBOCisgICAgICAgICItTCA8c3RyPiAgICBBcHBsaWNhdGlvbi1MYXllciBQcm90b2NvbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBOZWdvdGlhdGlvbiAoe0MsRn06PGxpc3Q+KVxuIiwgIC8qIDE0ICovCisjZW5kaWYKKyAgICAgICAgIi1CIDxudW0+ICAgIEJlbmNobWFyayB0aHJvdWdocHV0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHVzaW5nIDxudW0+IGJ5dGVzIGFuZCBwcmludCBzdGF0c1xuIiwgLyogMTUgKi8KKyNpZm5kZWYgTk9fUFNLCisgICAgICAgICItcyAgICAgICAgICBVc2UgcHJlIFNoYXJlZCBrZXlzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNiAqLworI2VuZGlmCisgICAgICAgICItZCAgICAgICAgICBEaXNhYmxlIHBlZXIgY2hlY2tzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNyAqLworICAgICAgICAiLUQgICAgICAgICAgT3ZlcnJpZGUgRGF0ZSBFcnJvcnMgZXhhbXBsZVxuIiwgICAgICAgICAgICAgICAgICAgLyogMTggKi8KKyAgICAgICAgIi1lICAgICAgICAgIExpc3QgRXZlcnkgY2lwaGVyIHN1aXRlIGF2YWlsYWJsZSwgXG4iLCAgICAgICAgICAgIC8qIDE5ICovCisgICAgICAgICItZyAgICAgICAgICBTZW5kIHNlcnZlciBIVFRQIEdFVFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMCAqLworICAgICAgICAiLXUgICAgICAgICAgVXNlIFVEUCBEVExTLCIKKyAgICAgICAgICAgICAgICAgIiBhZGQgLXYgMiBmb3IgRFRMU3YxLCAtdiAzIGZvciBEVExTdjEuMiAoZGVmYXVsdClcbiIsIC8qIDIxICovCisjaWZkZWYgV09MRlNTTF9TQ1RQCisgICAgICAgICItRyAgICAgICAgICBVc2UgU0NUUCBEVExTLCIKKyAgICAgICAgICAgICAgICAiIGFkZCAtdiAyIGZvciBEVExTdjEsIC12IDMgZm9yIERUTFN2MS4yIChkZWZhdWx0KVxuIiwgIC8qIDIyICovCisjZW5kaWYKKyNpZm5kZWYgTk9fQ0VSVFMKKyAgICAgICAgIi1tICAgICAgICAgIE1hdGNoIGRvbWFpbiBuYW1lIGluIGNlcnRcbiIsICAgICAgICAgICAgICAgICAgICAgIC8qIDIzICovCisjZW5kaWYKKyAgICAgICAgIi1OICAgICAgICAgIFVzZSBOb24tYmxvY2tpbmcgc29ja2V0c1xuIiwgICAgICAgICAgICAgICAgICAgICAgIC8qIDI0ICovCisjaWZuZGVmIE5PX1NFU1NJT05fQ0FDSEUKKyAgICAgICAgIi1yICAgICAgICAgIFJlc3VtZSBzZXNzaW9uXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI1ICovCisjZW5kaWYKKyAgICAgICAgIi13ICAgICAgICAgIFdhaXQgZm9yIGJpZGlyZWN0aW9uYWwgc2h1dGRvd25cbiIsICAgICAgICAgICAgICAgIC8qIDI2ICovCisgICAgICAgICItTSA8cHJvdD4gICBVc2UgU1RBUlRUTFMsIHVzaW5nIDxwcm90PiBwcm90b2NvbCAoc210cClcbiIsICAgICAvKiAyNyAqLworI2lmZGVmIEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04KKyAgICAgICAgIi1SICAgICAgICAgIEFsbG93IFNlY3VyZSBSZW5lZ290aWF0aW9uXG4iLCAgICAgICAgICAgICAgICAgICAgIC8qIDI4ICovCisgICAgICAgICItaSA8c3RyPiAgICBGb3JjZSBjbGllbnQgSW5pdGlhdGVkIFNlY3VyZSBSZW5lZ290aWF0aW9uLiBJZiB0aGVcbiIKKyAgICAgICAgIiAgICAgICAgICAgIHN0cmluZyAnc2NyLWFwcC1kYXRhJyBpcyBwYXNzZWQgaW4gYXMgdGhlIHZhbHVlIGFuZFxuIgorICAgICAgICAiICAgICAgICAgICAgTm9uLWJsb2NraW5nIHNvY2tldHMgYXJlIGVuYWJsZWQgKCctTicpIHRoZW4gd29sZlNTTFxuIgorICAgICAgICAiICAgICAgICAgICAgc2VuZHMgYSB0ZXN0IG1lc3NhZ2UgZHVyaW5nIHRoZSBzZWN1cmUgcmVuZWdvdGlhdGlvbi5cbiIKKyAgICAgICAgIiAgICAgICAgICAgIFRoZSBzdHJpbmcgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLlxuIiwgLyogMjkgKi8KKyNlbmRpZgorICAgICAgICAiLWYgICAgICAgICAgRmV3ZXIgcGFja2V0cy9ncm91cCBtZXNzYWdlc1xuIiwgICAgICAgICAgICAgICAgICAgLyogMzAgKi8KKyNpZm5kZWYgTk9fQ0VSVFMKKyAgICAgICAgIi14ICAgICAgICAgIERpc2FibGUgY2xpZW50IGNlcnQva2V5IGxvYWRpbmdcbiIsICAgICAgICAgICAgICAgIC8qIDMxICovCisjZW5kaWYKKyAgICAgICAgIi1YICAgICAgICAgIERyaXZlbiBieSBlWHRlcm5hbCB0ZXN0IGNhc2VcbiIsICAgICAgICAgICAgICAgICAgIC8qIDMyICovCisgICAgICAgICItaiAgICAgICAgICBVc2UgdmVyaWZ5IGNhbGxiYWNrIG92ZXJyaWRlXG4iLCAgICAgICAgICAgICAgICAgICAvKiAzMyAqLworI2lmZGVmIFNIT1dfU0laRVMKKyAgICAgICAgIi16ICAgICAgICAgIFByaW50IHN0cnVjdHVyZSBzaXplc1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM0ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NOSQorICAgICAgICAiLVMgPHN0cj4gICAgVXNlIEhvc3QgTmFtZSBJbmRpY2F0aW9uXG4iLCAgICAgICAgICAgICAgICAgICAgICAgLyogMzUgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfTUFYX0ZSQUdNRU5UCisgICAgICAgICItRiA8bnVtPiAgICBVc2UgTWF4aW11bSBGcmFnbWVudCBMZW5ndGggWzEtNl1cbiIsICAgICAgICAgICAgICAvKiAzNiAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9UUlVOQ0FURURfSE1BQworICAgICAgICAiLVQgICAgICAgICAgVXNlIFRydW5jYXRlZCBITUFDXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzcgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfRVhURU5ERURfTUFTVEVSCisgICAgICAgICItbiAgICAgICAgICBEaXNhYmxlIEV4dGVuZGVkIE1hc3RlciBTZWNyZXRcbiIsICAgICAgICAgICAgICAgICAvKiAzOCAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9PQ1NQCisgICAgICAgICItbyAgICAgICAgICBQZXJmb3JtIE9DU1AgbG9va3VwIG9uIHBlZXIgY2VydGlmaWNhdGVcbiIsICAgICAgICAvKiAzOSAqLworICAgICAgICAiLU8gPHVybD4gICAgUGVyZm9ybSBPQ1NQIGxvb2t1cCB1c2luZyA8dXJsPiBhcyByZXNwb25kZXJcbiIsICAgLyogNDAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9DRVJUSUZJQ0FURV9TVEFUVVNfUkVRVUVTVCkgXAorIHx8IGRlZmluZWQoSEFWRV9DRVJUSUZJQ0FURV9TVEFUVVNfUkVRVUVTVF9WMikKKyAgICAgICAgIi1XIDxudW0+ICAgIFVzZSBPQ1NQIFN0YXBsaW5nICgxIHYxLCAyIHYyLCAzIHYyIG11bHRpKVxuIiwgICAgIC8qIDQxICovCisgICAgICAgICIgICAgICAgICAgICBXaXRoICdtJyBhdCBlbmQgaW5kaWNhdGVzIE1VU1Qgc3RhcGxlXG4iLCAgICAgICAgICAvKiA0MiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChBVE9NSUNfVVNFUikgJiYgIWRlZmluZWQoV09MRlNTTF9BRUFEX09OTFkpCisgICAgICAgICItVSAgICAgICAgICBBdG9taWMgVXNlciBSZWNvcmQgTGF5ZXIgQ2FsbGJhY2tzXG4iLCAgICAgICAgICAgICAvKiA0MyAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9QS19DQUxMQkFDS1MKKyAgICAgICAgIi1QICAgICAgICAgIFB1YmxpYyBLZXkgQ2FsbGJhY2tzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ0ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FOT04KKyAgICAgICAgIi1hICAgICAgICAgIEFub255bW91cyBjbGllbnRcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ1ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0NSTAorICAgICAgICAiLUMgICAgICAgICAgRGlzYWJsZSBDUkxcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDYgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfVFJVU1RfUEVFUl9DRVJUCisgICAgICAgICItRSA8ZmlsZT4gICBQYXRoIHRvIGxvYWQgdHJ1c3RlZCBwZWVyIGNlcnRcbiIsICAgICAgICAgICAgICAgICAvKiA0NyAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9XTlIKKyAgICAgICAgIi1xIDxmaWxlPiAgIFdoaXRld29vZCBjb25maWcgZmlsZSwgICAgICBkZWZhdWx0c1xuIiwgICAgICAgICAgIC8qIDQ4ICovCisjZW5kaWYKKyAgICAgICAgIi1IIDxhcmc+ICAgIEludGVybmFsIHRlc3RzIgorICAgICAgICAgICAgIiBbZGVmQ2lwaGVyTGlzdCwgZXhpdFdpdGhSZXQsIHZlcmlmeUZhaWwsIHVzZVN1cEN1cnZlLFxuIiwgLyogNDkgKi8KKyAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkU1NMLCBkaXNhbGxvd0VUTV1cbiIsICAgICAgICAgIC8qIDUwICovCisjaWZkZWYgV09MRlNTTF9UTFMxMworICAgICAgICAiLUogICAgICAgICAgVXNlIEhlbGxvUmV0cnlSZXF1ZXN0IHRvIGNob29zZSBncm91cCBmb3IgS0VcbiIsICAgLyogNTEgKi8KKyAgICAgICAgIi1LICAgICAgICAgIEtleSBFeGNoYW5nZSBmb3IgUFNLIG5vdCB1c2luZyAoRUMpREhFXG4iLCAgICAgICAgIC8qIDUyICovCisgICAgICAgICItSSAgICAgICAgICBVcGRhdGUga2V5cyBhbmQgSVZzIGJlZm9yZSBzZW5kaW5nIGRhdGFcbiIsICAgICAgICAvKiA1MyAqLworI2lmbmRlZiBOT19ESAorICAgICAgICAiLXkgICAgICAgICAgS2V5IFNoYXJlIHdpdGggRkZESEUgbmFtZWQgZ3JvdXBzIG9ubHlcbiIsICAgICAgICAgLyogNTQgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfRUNDCisgICAgICAgICItWSAgICAgICAgICBLZXkgU2hhcmUgd2l0aCBFQ0MgbmFtZWQgZ3JvdXBzIG9ubHlcbiIsICAgICAgICAgICAvKiA1NSAqLworI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9UTFMxMyAqLworI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorICAgICAgICAiLXQgICAgICAgICAgVXNlIFgyNTUxOSBmb3Iga2V5IGV4Y2hhbmdlXG4iLCAgICAgICAgICAgICAgICAgICAgLyogNTYgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9UTFMxMykgJiYgZGVmaW5lZChXT0xGU1NMX1BPU1RfSEFORFNIQUtFX0FVVEgpCisgICAgICAgICItUSAgICAgICAgICBTdXBwb3J0IHJlcXVlc3RpbmcgY2VydGlmaWNhdGUgcG9zdC1oYW5kc2hha2VcbiIsICAvKiA1NyAqLworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9FQVJMWV9EQVRBCisgICAgICAgICItMCAgICAgICAgICBFYXJseSBkYXRhIHNlbnQgdG8gc2VydmVyICgwLVJUVCBoYW5kc2hha2UpXG4iLCAgICAvKiA1OCAqLworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9NVUxUSUNBU1QKKyAgICAgICAgIi0zIDxncnBpZD4gIE11bHRpY2FzdCwgZ3JwaWQgPCAyNTZcbiIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU5ICovCisjZW5kaWYKKyAgICAgICAgIi0xIDxudW0+ICAgIERpc3BsYXkgYSByZXN1bHQgYnkgc3BlY2lmaWVkIGxhbmd1YWdlLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAwOiBFbmdsaXNoLCAxOiBKYXBhbmVzZVxuIiwgLyogNjAgKi8KKyNpZiAhZGVmaW5lZChOT19ESCkgJiYgIWRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkgJiYgIWRlZmluZWQoV09MRlNTTF9PTERfUFJJTUVfQ0hFQ0spCisgICAgICAgICItMiAgICAgICAgICBEaXNhYmxlIERIIFByaW1lIGNoZWNrXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2MSAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTgorICAgICAgICAiLTQgICAgICAgICAgVXNlIHJlc3VtcHRpb24gZm9yIHJlbmVnb3RpYXRpb25cbiIsICAgICAgICAgICAgICAgLyogNjIgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfVFJVU1RFRF9DQQorICAgICAgICAiLTUgICAgICAgICAgVXNlIFRydXN0ZWQgQ0EgS2V5IEluZGljYXRpb25cbiIsICAgICAgICAgICAgICAgICAgLyogNjMgKi8KKyNlbmRpZgorICAgICAgICAiLTYgICAgICAgICAgU2ltdWxhdGUgV0FOVF9XUklURSBlcnJvcnMgb24gZXZlcnkgb3RoZXIgSU8gc2VuZFxuIiwKKyNpZmRlZiBIQVZFX0NVUlZFNDQ4CisgICAgICAgICItOCAgICAgICAgICBVc2UgWDQ0OCBmb3Iga2V5IGV4Y2hhbmdlXG4iLCAgICAgICAgICAgICAgICAgICAgICAvKiA2NiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgJiYgZGVmaW5lZChXT0xGU1NMX0NFUlRfR0VOKSAmJiBcCisgICAgKGRlZmluZWQoV09MRlNTTF9DRVJUX1JFUSkgfHwgZGVmaW5lZChXT0xGU1NMX0NFUlRfRVhUKSkgJiYgXAorICAgICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKE5PX1dPTEZTU0xfRElSKQorICAgICAgICAiLTkgICAgICAgICAgVXNlIGhhc2ggZGlyIGxvb2sgdXAgZm9yIGNlcnRpZmljYXRlIGxvYWRpbmdcbiIKKyAgICAgICAgIiAgICAgICAgICAgIGxvYWRpbmcgZnJvbSA8d29sZlNTTCBob21lPi9jZXJ0cyBmb2xkZXJcbiIKKyAgICAgICAgIiAgICAgICAgICAgIGZpbGVzIGluIHRoZSBmb2xkZXIgd291bGQgaGF2ZSB0aGUgZm9ybSBcImhhc2guTlwiIGZpbGUgbmFtZVxuIgorICAgICAgICAiICAgICAgICAgICAgZS5nIHN5bWJvbGljIGxpbmsgdG8gdGhlIGZpbGUgYXQgY2VydHMgZm9sZGVyXG4iCisgICAgICAgICIgICAgICAgICAgICBsbiAtcyBjYS1jZXJ0LnBlbSAgYG9wZW5zc2wgeDUwOSAtaW4gY2EtY2VydC5wZW0gLWhhc2ggLW5vb3V0YC4wXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2NyAqLworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX1dPTEZTRU5UUllfSE9PS1MpICYmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmIFwKKyAgICAhZGVmaW5lZChXT0xGU0VOVFJZX05PX0pTT04pCisgICAgICAgICItLXdvbGZzZW50cnktY29uZmlnIDxmaWxlPiAgICBQYXRoIGZvciBKU09OIHdvbGZTZW50cnkgY29uZmlnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2OCAqLworI2VuZGlmCisjaWZuZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgIi03ICAgICAgICAgIFNldCBtaW5pbXVtIGRvd25ncmFkZSBwcm90b2NvbCB2ZXJzaW9uIFswLTNdICIKKyAgICAgICAgIiBTU0x2MygwKSAtIFRMUzEuMigzKVxuIiwKKyNlbHNlCisgICAgICAgICItNyAgICAgICAgICBTZXQgbWluaW11bSBkb3duZ3JhZGUgcHJvdG9jb2wgdmVyc2lvbiBbMC00XSAiCisgICAgICAgICIgU1NMdjMoMCkgLSBUTFMxLjMoNClcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjkgKi8KKyNlbmRpZgorICAgICAgICBOVUxMLAorICAgIH0sCisjaWZuZGVmIE5PX01VTFRJQllURV9QUklOVAorICAgIC8qIEphcGFuZXNlICovCisgICAgICAgIHsKKyAgICAgICAgIiDms6jmhI8gOiDlhajjgabjga7jg5XjgqHjgqTjg6vjga8gd29sZlNTTCDjg5vjg7zjg6Djg7vjg4fjgqPjg6zjgq/jg4jjg6rjgYvjgonjga7nm7jlr77jgafjgZnjgIIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iLCAgICAgLyogMCAqLworICAgICAgICAiUlNB44Gu5pyA5aSn44OT44OD44OI44Gv5qyh44Gu44KI44GG44Gr6Kit5a6a44GV44KM44Gm44GE44G+44GZOiAiLCAgICAgICAgICAgICAgICAgLyogMSAqLworI2lmZGVmIE5PX1JTQQorICAgICAgICAiUlNB44Gv44K144Od44O844OI44GV44KM44Gm44GE44G+44Gb44KT44CCXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyICovCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfU1BfTUFUSCkgLyogY2FzZSBvZiBTUCBtYXRoIG9ubHkgKi8KKyNpZm5kZWYgV09MRlNTTF9TUF9OT18zMDcyCisgICAgICAgICIzMDcyXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMiAqLworI2VsaWYgIWRlZmluZWQoV09MRlNTTF9TUF9OT18yMDQ4KQorICAgICAgICAiMjA0OFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgKi8KKyNlbHNlCisgICAgICAgICIwXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMiAqLworI2VuZGlmCisjZWxpZiBkZWZpbmVkKFVTRV9GQVNUX01BVEgpCisjZWxzZQorICAgICAgICAi54Sh6ZmQXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMiAqLworI2VuZGlmCisgICAgICAgICItPyA8bnVtPiAgICDjg5jjg6vjg5csIOS9v+OBhOaWueOCkuihqOekulxuIgorICAgICAgICAiICAgICAgICAgICAgMDog6Iux6Kqe44CBIDE6IOaXpeacrOiqnlxuIgorICAgICAgICAiLS3jg5jjg6vjg5cgICAgIOS9v+OBhOaWueOCkuihqOekuiwg5pel5pys6Kqe44GnXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMyAqLworICAgICAgICAiLWggPGhvc3Q+ICAg5o6l57aa5YWI44Ob44K544OILCDml6LlrprlgKQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQgKi8KKyAgICAgICAgIi1wIDxudW0+ICAgIOaOpee2muWFiOODneODvOODiCwgMOOBr+eEoeWKuSwg5pei5a6a5YCkIiwgICAgICAgICAgICAgICAgICAgICAvKiA1ICovCisKKyNpZm5kZWYgV09MRlNTTF9UTFMxMworICAgICAgICAiLXYgPG51bT4gICAgU1NMIOODkOODvOOCuOODp+ODsyBbMC0zXSwgU1NMdjMoMCkgLSBUTFMxLjIoMykpLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiDml6LlrprlgKQiLCAvKiA2ICovCisgICAgICAgICItViAgICAgICAgICDmnInlirnjgaogc3NsIOODkOODvOOCuOODp+ODs+eVquWPt+OCkuWHuuWKmywgU1NMdjMoMCkgLSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFRMUzEuMigzKVxuIiwgICAgICAgICAvKiA3ICovCisjZWxzZQorICAgICAgICAiLXYgPG51bT4gICAgU1NMIOODkOODvOOCuOODp+ODsyBbMC00XSwgU1NMdjMoMCkgLSBUTFMxLjMoNCkpLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIOaXouWumuWApCIsICAgICAgICAgICAvKiA2ICovCisgICAgICAgICItViAgICAgICAgICDmnInlirnjgaogc3NsIOODkOODvOOCuOODp+ODs+eVquWPt+OCkuWHuuWKmywgU1NMdjMoMCkgLSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFRMUzEuMyg0KVxuIiwgICAgICAgICAvKiA3ICovCisjZW5kaWYKKyAgICAgICAgIi1sIDxzdHI+ICAgIOaal+WPt+OCueOCpOODvOODiOODquOCueODiCAo5Yy65YiH44KK5paH5a2XIDopXG4iLCAgICAgICAgICAgICAgIC8qIDggKi8KKyNpZm5kZWYgTk9fQ0VSVFMKKyAgICAgICAgIi1jIDxmaWxlPiAgIOiovOaYjuabuOODleOCoeOCpOODqywgIOaXouWumuWApCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOSAqLworICAgICAgICAiLWsgPGZpbGU+ICAg6Y2144OV44Kh44Kk44OrLCAgICAgIOaXouWumuWApCIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMCAqLworICAgICAgICAiLUEgPGZpbGU+ICAg6KqN6Ki85bGA44OV44Kh44Kk44OrLCAg5pei5a6a5YCkIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDExICovCisjZW5kaWYKKyNpZm5kZWYgTk9fREgKKyAgICAgICAgIi1aIDxudW0+ICAgIOacgOWwjyBESCDpjbUg44OT44OD44OILCDml6LlrprlgKQiLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEyICovCisjZW5kaWYKKyAgICAgICAgIi1iIDxudW0+ICAgIOODmeODs+ODgeODnuODvOOCryA8bnVtPiDmjqXntprlj4rjgbPntZDmnpzlh7rlipvjgZnjgotcbiIsICAgICAgICAvKiAxMyAqLworI2lmZGVmIEhBVkVfQUxQTgorICAgICAgICAiLUwgPHN0cj4gICAg44Ki44OX44Oq44Kx44O844K344On44Oz5bGk44OX44Ot44OI44Kz44Or44ON44K044K344Ko44O844K344On44Oz44KS6KGM44GGIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHtDLEZ9OjxsaXN0PilcbiIsICAgLyogMTQgKi8KKyNlbmRpZgorICAgICAgICAiLUIgPG51bT4gICAgPG51bT4g44OQ44Kk44OI44KS55So44GE44Gm44Gu44OZ44Oz44OB44Oe44O844Kv44O744K544Or44O844OX44OD44OI5ris5a6aIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi44Go57WQ5p6c44KS5Ye65Yqb44GZ44KLXG4iLCAvKiAxNSAqLworI2lmbmRlZiBOT19QU0sKKyAgICAgICAgIi1zICAgICAgICAgIOS6i+WJjeWFseaciemNteOCkuS9v+eUqOOBmeOCi1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNiAqLworI2VuZGlmCisgICAgICAgICItZCAgICAgICAgICDjg5TjgqLnorroqo3jgpLnhKHlirnjgajjgZnjgotcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTcgKi8KKyAgICAgICAgIi1EICAgICAgICAgIOaXpeS7mOOCqOODqeODvOeUqOOCs+ODvOODq+ODkOODg+OCr+S+i+OBruS4iuabuOOBjeOCkuihjOOBhlxuIiwgICAgICAgLyogMTggKi8KKyAgICAgICAgIi1lICAgICAgICAgIOWIqeeUqOWPr+iDveOBquWFqOOBpuOBruaal+WPt+OCueOCpOODvOODiOOCkuODquOCueODiCwgXG4iLCAgICAgICAgIC8qIDE5ICovCisgICAgICAgICItZyAgICAgICAgICDjgrXjg7zjg5Djg7zjgbggSFRUUCBHRVQg44KS6YCB5L+hXG4iLCAgICAgICAgICAgICAgICAgICAgIC8qIDIwICovCisgICAgICAgICItdSAgICAgICAgICBVRFAgRFRMU+OCkuS9v+eUqOOBmeOCi+OAgi12IDIg44KS6L+95Yqg5oyH5a6a44GZ44KL44GoIgorICAgICAgICAgICAgICAgIiBEVExTdjEsIC12IDMg44KS6L+95Yqg5oyH5a6a44GZ44KL44GoIERUTFN2MS4yICjml6LlrprlgKQpXG4iLCAgICAvKiAyMSAqLworI2lmZGVmIFdPTEZTU0xfU0NUUAorICAgICAgICAiLUcgICAgICAgICAgU0NUUCBEVExT44KS5L2/55So44GZ44KL44CCLXYgMiDjgpLov73liqDmjIflrprjgZnjgovjgagiCisgICAgICAgICAgICAgICAgIiBEVExTdjEsIC12IDMg44KS6L+95Yqg5oyH5a6a44GZ44KL44GoIERUTFN2MS4yICjml6LlrprlgKQpXG4iLCAgIC8qIDIyICovCisjZW5kaWYKKyNpZm5kZWYgTk9fQ0VSVFMKKyAgICAgICAgIi1tICAgICAgICAgIOiovOaYjuabuOWGheOBruODieODoeOCpOODs+WQjeS4gOiHtOOCkueiuuiqjeOBmeOCi1xuIiwgICAgICAgICAgICAgLyogMjMgKi8KKyNlbmRpZgorICAgICAgICAiLU4gICAgICAgICAg44OO44Oz44OW44Ot44OD44Kt44Oz44Kw44O744K944Kx44OD44OI44KS5L2/55So44GZ44KLXG4iLCAgICAgICAgICAgLyogMjQgKi8KKyNpZm5kZWYgTk9fU0VTU0lPTl9DQUNIRQorICAgICAgICAiLXIgICAgICAgICAg44K744OD44K344On44Oz44KS57aZ57aa44GZ44KLXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI1ICovCisjZW5kaWYKKyAgICAgICAgIi13ICAgICAgICAgIOWPjOaWueWQkeOCt+ODo+ODg+ODiOODgOOCpuODs+OCkuW+heOBpFxuIiwgICAgICAgICAgICAgICAgICAgICAvKiAyNiAqLworICAgICAgICAiLU0gPHByb3Q+ICAgU1RBUlRUTFPjgpLkvb/nlKjjgZnjgossIDxwcm90PuODl+ODreODiOOCs+ODqyhzbXRwKeOCkiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi5L2/55So44GZ44KLXG4iLCAgICAgICAgICAgICAvKiAyNyAqLworI2lmZGVmIEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04KKyAgICAgICAgIi1SICAgICAgICAgIOOCu+OCreODpeOCouOBquWGjeODjeOCtOOCt+OCqOODvOOCt+ODp+ODs+OCkuioseWPr+OBmeOCi1xuIiwgICAgICAgICAvKiAyOCAqLworICAgICAgICAiLWkgPHN0cj4gICAg44Kv44Op44Kk44Ki44Oz44OI5Li75bCO44Gu44ON44K044K344Ko44O844K344On44Oz44KS5by35Yi244GZ44KLXG4iLCAgIC8qIDI5ICovCisjZW5kaWYKKyAgICAgICAgIi1mICAgICAgICAgIOOCiOOCiuWwkeOBquOBhOODkeOCseODg+ODiC/jgrDjg6vjg7zjg5fjg6Hjg4Pjgrvjg7zjgrjjgpLkvb/nlKjjgZnjgotcbiIsLyogMzAgKi8KKyNpZm5kZWYgTk9fQ0VSVFMKKyAgICAgICAgIi14ICAgICAgICAgIOOCr+ODqeOCpOOCouODs+ODiOOBruiovOaYjuabuC/pjbXjga7jg63jg7zjg4njgpLnhKHlirnjgZnjgotcbiIsICAgICAgLyogMzEgKi8KKyNlbmRpZgorICAgICAgICAiLVggICAgICAgICAg5aSW6YOo44OG44K544OI44O744Kx44O844K544Gr44KI44KK5YuV5L2c44GZ44KLXG4iLCAgICAgICAgICAgICAgIC8qIDMyICovCisgICAgICAgICItaiAgICAgICAgICDjgrPjg7zjg6vjg5Djg4Pjgq/jg7vjgqrjg7zjg5Djg7zjg6njgqTjg4njga7mpJzoqLzjgpLkvb/nlKjjgZnjgotcbiIsICAgLyogMzMgKi8KKyNpZmRlZiBTSE9XX1NJWkVTCisgICAgICAgICIteiAgICAgICAgICDmp4vpgKDkvZPjga7jgrXjgqTjgrrjgpLooajnpLrjgZnjgotcbiIsICAgICAgICAgICAgICAgICAgICAgICAvKiAzNCAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9TTkkKKyAgICAgICAgIi1TIDxzdHI+ICAgIOODm+OCueODiOWQjeihqOekuuOCkuS9v+eUqOOBmeOCi1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzUgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfTUFYX0ZSQUdNRU5UCisgICAgICAgICItRiA8bnVtPiAgICDmnIDlpKfjg5Xjg6njgrDjg6Hjg7Pjg4jplbdbMS02XeOCkuioreWumuOBmeOCi1xuIiwgICAgICAgICAgICAgIC8qIDM2ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX1RSVU5DQVRFRF9ITUFDCisgICAgICAgICItVCAgICAgICAgICBUcnVuY2F0ZWQgSE1BQ+OCkuS9v+eUqOOBmeOCi1xuIiwgICAgICAgICAgICAgICAgICAgICAgIC8qIDM3ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0VYVEVOREVEX01BU1RFUgorICAgICAgICAiLW4gICAgICAgICAg44Oe44K544K/44O844K344O844Kv44Os44OD44OI5ouh5by144KS54Sh5Yq544Gr44GZ44KLXG4iLCAgICAgICAgICAgLyogMzggKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfT0NTUAorICAgICAgICAiLW8gICAgICAgICAgT0NTUOODq+ODg+OCr+OCouODg+ODl+OCkuODlOOCouiovOaYjuabuOOBp+Wun+aWveOBmeOCi1xuIiwgICAgICAgICAvKiAzOSAqLworICAgICAgICAiLU8gPHVybD4gICAgT0NTUOODq+ODg+OCr+OCouODg+ODl+OCkuOAgTx1cmw+44KS5L2/55So44GXIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi5b+c562U6ICF44Go44GX44Gm5a6f5pa944GZ44KLXG4iLCAgICAgICAgICAgIC8qIDQwICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1QpIFwKKyB8fCBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1RfVjIpCisgICAgICAgICItVyA8bnVtPiAgICBPQ1NQIFN0YXBsaW5n44KS5L2/55So44GZ44KLIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICgxIHYxLCAyIHYyLCAzIHYyIG11bHRpKVxuIiwgLyogNDEgKi8KKyAgICAgICAgIiAgICAgICAgICAgIFdpdGggJ20nIGF0IGVuZCBpbmRpY2F0ZXMgTVVTVCBzdGFwbGVcbiIsICAgICAgICAgIC8qIDQyICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFUT01JQ19VU0VSKSAmJiAhZGVmaW5lZChXT0xGU1NMX0FFQURfT05MWSkKKyAgICAgICAgIi1VICAgICAgICAgIOOCouODiOODn+ODg+OCr+ODu+ODpuODvOOCtuODvOiomOmMsuOBriIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi44Kz44O844Or44OQ44OD44Kv44KS5Yip55So44GZ44KLXG4iLCAgLyogNDMgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfUEtfQ0FMTEJBQ0tTCisgICAgICAgICItUCAgICAgICAgICDlhazplovpjbXjgrPjg7zjg6vjg5Djg4Pjgq9cbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0NCAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9BTk9OCisgICAgICAgICItYSAgICAgICAgICDljL/lkI3jgq/jg6njgqTjgqLjg7Pjg4hcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ1ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0NSTAorICAgICAgICAiLUMgICAgICAgICAgQ1JM44KS54Sh5Yq5XG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDYgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfVFJVU1RfUEVFUl9DRVJUCisgICAgICAgICItRSA8ZmlsZT4gICDkv6HpoLzlh7rmnaXjgovjg5TjgqLjga7oqLzmmI7mm7jjg63jg7zjg4njga7ngrrjga7jg5HjgrlcbiIsICAgICAgICAgLyogNDcgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfV05SCisgICAgICAgICItcSA8ZmlsZT4gICBXaGl0ZXdvb2Qg44Kz44Oz44OV44Kj44Kw44OV44Kh44Kk44OrLCAgICAgIOaXouWumuWApFxuIiwgICAgICAvKiA0OCAqLworI2VuZGlmCisgICAgICAgICItSCA8YXJnPiAgICDlhoXpg6jjg4bjgrnjg4giCisgICAgICAgICAgICAiIFtkZWZDaXBoZXJMaXN0LCBleGl0V2l0aFJldCwgdmVyaWZ5RmFpbCwgdXNlU3VwQ3VydmUsXG4iLCAvKiA0OSAqLworICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRTU0wsIGRpc2FsbG93RVRNXVxuIiwgICAgICAgICAgLyogNTAgKi8KKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgICItSiAgICAgICAgICBIZWxsb1JldHJ5UmVxdWVzdOOCkktF44Gu44Kw44Or44O844OX6YG45oqe44Gr5L2/55So44GZ44KLXG4iLCAgLyogNTEgKi8KKyAgICAgICAgIi1LICAgICAgICAgIOmNteS6pOaPm+OBq1BTS+OCkuS9v+eUqOOAgShFQylESEXjga/kvb/nlKjjgZfjgarjgYRcbiIsICAgICAgICAgLyogNTIgKi8KKyAgICAgICAgIi1JICAgICAgICAgIOODh+ODvOOCv+mAgeS/oeWJjeOBq+OAgemNteOBqElW44KS5pu05paw44GZ44KLXG4iLCAgICAgICAgICAgICAgIC8qIDUzICovCisjaWZuZGVmIE5PX0RICisgICAgICAgICIteSAgICAgICAgICBGRkRIReWQjeWJjeS7mOOBjeOCsOODq+ODvOODl+OBqOOBrumNteWFseacieOBruOBv1xuIiwgICAgICAgICAgICAvKiA1NCAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9FQ0MKKyAgICAgICAgIi1ZICAgICAgICAgIEVDQ+WQjeWJjeS7mOOBjeOCsOODq+ODvOODl+OBqOOBrumNteWFseacieOBruOBv1xuIiwgICAgICAgICAgICAgIC8qIDU1ICovCisjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX1RMUzEzICovCisjaWZkZWYgSEFWRV9DVVJWRTI1NTE5CisgICAgICAgICItdCAgICAgICAgICBYMjU1MTnjgpLpjbXkuqTmj5vjgavkvb/nlKjjgZnjgotcbiIsICAgICAgICAgICAgICAgICAgICAgICAvKiA1NiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBkZWZpbmVkKFdPTEZTU0xfUE9TVF9IQU5EU0hBS0VfQVVUSCkKKyAgICAgICAgIi1RICAgICAgICAgIOODneOCueODiOODj+ODs+ODieOCt+OCp+ODvOOCr+OBruiovOaYjuimgeaxguOCkuOCteODneODvOODiOOBmeOCi1xuIiwgICAvKiA1NyAqLworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9FQVJMWV9EQVRBCisgICAgICAgICItMCAgICAgICAgICBFYXJseSBkYXRhIOOCkuOCteODvOODkOODvOOBuOmAgeS/oeOBmeOCiyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAi77yIMC1SVFTjg4/jg7Pjg4njgrfjgqfjgqTjgq/vvIlcbiIsICAgICAgICAgICAgICAgIC8qIDU4ICovCisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX01VTFRJQ0FTVAorICAgICAgICAiLTMgPGdycGlkPiAg44Oe44Or44OB44Kt44Oj44K544OILCBncnBpZCA8IDI1NlxuIiwgICAgICAgICAgICAgICAgICAgIC8qIDU5ICovCisjZW5kaWYKKyAgICAgICAgIi0xIDxudW0+ICAgIOaMh+WumuOBleOCjOOBn+iogOiqnuOBp+e1kOaenOOCkuihqOekuuOBl+OBvuOBmeOAglxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgMDog6Iux6Kqe44CBIDE6IOaXpeacrOiqnlxuIiwgLyogNjAgKi8KKyNpZiAhZGVmaW5lZChOT19ESCkgJiYgIWRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkgJiYgIWRlZmluZWQoV09MRlNTTF9PTERfUFJJTUVfQ0hFQ0spCisgICAgICAgICItMiAgICAgICAgICBESOODl+ODqeOCpOODoOeVquWPt+ODgeOCp+ODg+OCr+OCkueEoeWKueOBq+OBmeOCi1xuIiwgICAgICAgICAgICAgLyogNjEgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04KKyAgICAgICAgIi00ICAgICAgICAgIOWGjeS6pOa4ieOBq+WGjemWi+OCkuS9v+eUqFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYyICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX1RSVVNURURfQ0EKKyAgICAgICAgIi01ICAgICAgICAgIOS/oemgvOOBp+OBjeOCi+iqjeiovOWxgOOBrumNteihqOekuuOCkuS9v+eUqOOBmeOCi1xuIiwgICAgICAgICAgICAgLyogNjMgKi8KKyNlbmRpZgorICAgICAgICAiLTYgICAgICAgICAgV0FOVF9XUklURSDjgqjjg6njg7zjgpLlhajjgabjga5JTyDpgIHkv6Hjgafjgrfjg6Xjg5/jg6zjg7zjg4jjgZfjgb7jgZlcbiIsCisjaWZkZWYgSEFWRV9DVVJWRTQ0OAorICAgICAgICAiLTggICAgICAgICAgVXNlIFg0NDggZm9yIGtleSBleGNoYW5nZVxuIiwgICAgICAgICAgICAgICAgICAgICAgLyogNjYgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpICYmIGRlZmluZWQoV09MRlNTTF9DRVJUX0dFTikgJiYgXAorICAgIChkZWZpbmVkKFdPTEZTU0xfQ0VSVF9SRVEpIHx8IGRlZmluZWQoV09MRlNTTF9DRVJUX0VYVCkpICYmIFwKKyAgICAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX0RJUikKKyAgICAgICAgIi05ICAgICAgICAgIOiovOaYjuabuOOBruiqreOBv+i+vOOBv+OBqyBoYXNoIGRpciDmqZ/og73jgpLkvb/nlKjjgZnjgotcbiIKKyAgICAgICAgIiAgICAgICAgICAgIDx3b2xmU1NMIGhvbWU+L2NlcnRzIOODleOCqeODq+ODgOODvOOBi+OCieODreODvOODieOBl+OBvuOBmVxuIgorICAgICAgICAiICAgICAgICAgICAg44OV44Kp44Or44OA44O85Lit44Gu44OV44Kh44Kk44Or44Gv44CBXCJoYXNoLk5cIltOOjAtOV3lkI3jgafjgYLjgovlv4XopoHjgYzjgYLjgorjgb7jgZlcbiIKKyAgICAgICAgIiAgICAgICAgICAgIOS7peS4i+OBruS+i+OBp+OBr2NhLWNlcnQucGVt44Gr44K344Oz44Oc44Oq44OD44Kv44Oq44Oz44Kv44KS6Kit5a6a44GX44G+44GZXG4iCisgICAgICAgICIgICAgICAgICAgICBsbiAtcyBjYS1jZXJ0LnBlbSAgYG9wZW5zc2wgeDUwOSAtaW4gY2EtY2VydC5wZW0gLWhhc2ggLW5vb3V0YC4wXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjcgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9XT0xGU0VOVFJZX0hPT0tTKSAmJiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiBcCisgICAgIWRlZmluZWQoV09MRlNFTlRSWV9OT19KU09OKQorICAgICAgICAiLS13b2xmc2VudHJ5LWNvbmZpZyA8ZmlsZT4gICAgd29sZlNlbnRyeSDjgrPjg7Pjg5XjgqPjgrDjg5XjgqHjgqTjg6tcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjggKi8KKyNlbmRpZgorI2lmbmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgICItNyAgICAgICAgICDmnIDlsI/jg4Djgqbjg7PjgrDjg6zjg7zjg4nlj6/og73jgarjg5fjg63jg4jjgrPjg6vjg5Djg7zjgrjjg6fjg7PjgpLoqK3lrprjgZfjgb7jgZkgWzAtM10gIgorICAgICAgICAiIFNTTHYzKDApIC0gVExTMS4yKDMpXG4iLAorI2Vsc2UKKyAgICAgICAgIi03ICAgICAgICAgIOacgOWwj+ODgOOCpuODs+OCsOODrOODvOODieWPr+iDveOBquODl+ODreODiOOCs+ODq+ODkOODvOOCuOODp+ODs+OCkuioreWumuOBl+OBvuOBmSBbMC00XSAiCisgICAgICAgICIgU1NMdjMoMCkgLSBUTFMxLjMoNClcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY5ICovCisjZW5kaWYKKyAgICAgICAgTlVMTCwKKyAgICB9LAorI2VuZGlmCisKK307CisKK3N0YXRpYyB2b2lkIFVzYWdlKHZvaWQpCit7CisgICAgaW50IG1zZ2lkID0gMDsKKyAgICBjb25zdCBjaGFyKiogbXNnID0gY2xpZW50X3VzYWdlX21zZ1tsbmdfaW5kZXhdOworCisgICAgcHJpbnRmKCIlcyVzJXMiLCAid29sZlNTTCBjbGllbnQgIiwgICAgTElCV09MRlNTTF9WRVJTSU9OX1NUUklORywKKyAgICAgICAgICAgbXNnW21zZ2lkXSk7CisKKyAgICAvKiBwcmludCBvdXQgc28gdGhhdCBzY3JpcHRzIGNhbiBrbm93IHdoYXQgdGhlIG1heCBzdXBwb3J0ZWQga2V5IHNpemUgaXMgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsKKyNpZmRlZiBOT19SU0EKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9TUF9NQVRIKSAvKiBjYXNlIG9mIFNQIG1hdGggb25seSAqLworICAgICNpZm5kZWYgV09MRlNTTF9TUF9OT18zMDcyCisgICAgICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOworICAgICNlbGlmICFkZWZpbmVkKFdPTEZTU0xfU1BfTk9fMjA0OCkKKyAgICAgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7CisgICAgI2Vsc2UKKyAgICAgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7CisgICAgI2VuZGlmCisjZWxpZiBkZWZpbmVkKFVTRV9GQVNUX01BVEgpCisgICAgI2lmICFkZWZpbmVkKFdPTEZTU0xfU1BfTUFUSF9BTEwpICYmICFkZWZpbmVkKFdPTEZTU0xfU1BfTUFUSCkKKyAgICBwcmludGYoIiVkXG4iLCBGUF9NQVhfQklUUy8yKTsKKyAgICAjZWxzZQorICAgIHByaW50ZigiJWRcbiIsIFNQX0lOVF9NQVhfQklUUy8yKTsKKyAgICAjZW5kaWYKKyNlbHNlCisgICAgLyogbm9ybWFsIG1hdGggaGFzIHVubGltaXRlZCBtYXggc2l6ZSAqLworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOworI2VuZGlmCisKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogPyAqLworICAgIHByaW50ZigiJXMgJXNcbiIsIG1zZ1srK21zZ2lkXSwgd29sZlNTTElQKTsgICAvKiAtaCAqLworICAgIHByaW50ZigiJXMgJWRcbiIsIG1zZ1srK21zZ2lkXSwgd29sZlNTTFBvcnQpOyAvKiAtcCAqLworI2lmbmRlZiBXT0xGU1NMX1RMUzEzCisgICAgcHJpbnRmKCIlcyAlZFxuIiwgbXNnWysrbXNnaWRdLCBDTElFTlRfREVGQVVMVF9WRVJTSU9OKTsgLyogLXYgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLVYgKi8KKyNlbHNlCisgICAgcHJpbnRmKCIlcyAlZFxuIiwgbXNnWysrbXNnaWRdLCBDTElFTlRfREVGQVVMVF9WRVJTSU9OKTsgLyogLXYgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtViAqLworI2VuZGlmCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1sICovCisjaWZuZGVmIE5PX0NFUlRTCisgICAgcHJpbnRmKCIlcyAlc1xuIiwgbXNnWysrbXNnaWRdLCBjbGlDZXJ0RmlsZSk7IC8qIC1jICovCisgICAgcHJpbnRmKCIlcyAlc1xuIiwgbXNnWysrbXNnaWRdLCBjbGlLZXlGaWxlKTsgIC8qIC1rICovCisgICAgcHJpbnRmKCIlcyAlc1xuIiwgbXNnWysrbXNnaWRdLCBjYUNlcnRGaWxlKTsgIC8qIC1BICovCisjZW5kaWYKKyNpZm5kZWYgTk9fREgKKyAgICBwcmludGYoIiVzICVkXG4iLCBtc2dbKyttc2dpZF0sIERFRkFVTFRfTUlOX0RIS0VZX0JJVFMpOworI2VuZGlmCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1iICovCisjaWZkZWYgSEFWRV9BTFBOCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1MIDxzdHI+ICovCisjZW5kaWYKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLUIgPG51bT4gKi8KKyNpZm5kZWYgTk9fUFNLCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1zICovCisjZW5kaWYKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLWQgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLUQgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLWUgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLWcgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLXUgKi8KKyNpZmRlZiBXT0xGU1NMX1NDVFAKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLUcgKi8KKyNlbmRpZgorI2lmbmRlZiBOT19DRVJUUworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAtbSAqLworI2VuZGlmCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1OICovCisjaWZuZGVmIE5PX1NFU1NJT05fQ0FDSEUKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLXIgKi8KKyNlbmRpZgorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAtdyAqLworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAtTSAqLworI2lmZGVmIEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLVIgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLWkgKi8KKyNlbmRpZgorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAtZiAqLworI2lmbmRlZiBOT19DRVJUUworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAteCAqLworI2VuZGlmCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1YICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1qICovCisjaWZkZWYgU0hPV19TSVpFUworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAteiAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9TTkkKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLVMgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfTUFYX0ZSQUdNRU5UCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1GICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX1RSVU5DQVRFRF9ITUFDCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1UICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0VYVEVOREVEX01BU1RFUgorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAtbiAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9PQ1NQCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1vICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1PICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1QpIFwKKyB8fCBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1RfVjIpCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1XICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIG5vdGUgZm9yIC1XICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFUT01JQ19VU0VSKSAmJiAhZGVmaW5lZChXT0xGU1NMX0FFQURfT05MWSkKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLVUgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfUEtfQ0FMTEJBQ0tTCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1QICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FOT04KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLWEgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfQ1JMCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1DICovCisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1RSVVNUX1BFRVJfQ0VSVAorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAtRSAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9XTlIKKyAgICBwcmludGYoIiVzICVzXG4iLCBtc2dbKyttc2dpZF0sIHduckNvbmZpZyk7IC8qIC1xICovCisjZW5kaWYKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgICAgICAgICAgICAgICAgLyogLUggICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7ICAgICAgICAgICAgICAgIC8qIG1vcmUgLUggb3B0aW9ucyAgKi8KKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1KICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1LICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC1JICovCisjaWZuZGVmIE5PX0RICisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC15ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0VDQworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAtWSAqLworI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9UTFMxMyAqLworI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAtdCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBkZWZpbmVkKFdPTEZTU0xfUE9TVF9IQU5EU0hBS0VfQVVUSCkKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLVEgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfRUFSTFlfREFUQQorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAvKiAtMCAqLworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9NVUxUSUNBU1QKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLTMgKi8KKyNlbmRpZgorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAgLyogLTEgKi8KKyNpZiAhZGVmaW5lZChOT19ESCkgJiYgIWRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkgJiYgIWRlZmluZWQoV09MRlNTTF9PTERfUFJJTUVfQ0hFQ0spCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7ICAvKiAtMiAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTgorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAgLyogLTQgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfVFJVU1RFRF9DQQorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAgLyogLTUgKi8KKyNlbmRpZgorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dpZF0pOyAgLyogLTYgKi8KKyNpZmRlZiBIQVZFX0NVUlZFNDQ4CisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC04ICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSAmJiBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9HRU4pICYmIFwKKyAgICAoZGVmaW5lZChXT0xGU1NMX0NFUlRfUkVRKSB8fCBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9FWFQpKSAmJiBcCisgICAgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgIWRlZmluZWQoTk9fV09MRlNTTF9ESVIpCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC05ICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUykgJiYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgXAorICAgICFkZWZpbmVkKFdPTEZTRU5UUllfTk9fSlNPTikKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnaWRdKTsgLyogLS13b2xmc2VudHJ5LWNvbmZpZyAqLworI2VuZGlmCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ2lkXSk7IC8qIC03ICovCit9CisKK1RIUkVBRF9SRVRVUk4gV09MRlNTTF9USFJFQUQgY2xpZW50X3Rlc3Qodm9pZCogYXJncykKK3sKKyAgICBTT0NLRVRfVCBzb2NrZmQgPSBXT0xGU1NMX1NPQ0tFVF9JTlZBTElEOworCisgICAgd29sZlNTTF9tZXRob2RfZnVuYyBtZXRob2QgPSBOVUxMOworICAgIFdPTEZTU0xfQ1RYKiAgICAgY3R4ICAgICA9IDA7CisgICAgV09MRlNTTCogICAgICAgICBzc2wgICAgID0gMDsKKworI2lmZGVmIFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUworICAgIHdvbGZzZW50cnlfZXJyY29kZV90IHdvbGZzZW50cnlfcmV0OworI2VuZGlmCisKKyAgICBXT0xGU1NMKiAgICAgICAgIHNzbFJlc3VtZSA9IDA7CisgICAgV09MRlNTTF9TRVNTSU9OKiBzZXNzaW9uID0gMDsKKyAgICBieXRlKiAgICAgICAgICAgIGZsYXRTZXNzaW9uID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgIGZsYXRTZXNzaW9uU3ogPSAwOworCisgICAgY2hhciBtc2dbQ0xJX01TR19TWl07CisgICAgaW50ICBtc2dTeiA9IDA7CisgICAgY2hhciByZXBseVtDTElfUkVQTFlfU1pdOworCisgICAgd29yZDE2IHBvcnQgICA9IHdvbGZTU0xQb3J0OworICAgIGNoYXIqIGhvc3QgICA9IChjaGFyKil3b2xmU1NMSVA7CisgICAgY29uc3QgY2hhciogZG9tYWluID0gImxvY2FsaG9zdCI7ICAvKiBjYW4ndCBkZWZhdWx0IHRvIHd3dy53b2xmc3NsLmNvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSBjYW4ndCB0ZWxsIGlmIHdlJ3JlIHJlYWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29pbmcgdGhlcmUgdG8gZGV0ZWN0IG9sZCBjaGFjaGEtcG9seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZm5kZWYgV09MRlNTTF9WWFdPUktTCisgICAgaW50ICAgIGNoOworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXlnZXRvcHRfbG9uZ19jb25maWcgbG9uZ19vcHRpb25zW10gPSB7CisjaWYgZGVmaW5lZChXT0xGU1NMX1dPTEZTRU5UUllfSE9PS1MpICYmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmIFwKKyAgICAhZGVmaW5lZChXT0xGU0VOVFJZX05PX0pTT04pCisgICAgICAgIHsgIndvbGZzZW50cnktY29uZmlnIiwgMSwgMjU2IH0sCisjZW5kaWYKKyAgICAgICAgeyAiaGVscCIsIDAsIDI1NyB9LAorICAgICAgICB7ICLjg5jjg6vjg5ciLCAwLCAyNTggfSwKKyAgICAgICAgeyAwLCAwLCAwIH0KKyAgICB9OworI2VuZGlmCisgICAgaW50ICAgIHZlcnNpb24gPSBDTElFTlRfSU5WQUxJRF9WRVJTSU9OOworICAgIGludCAgICBtaW5WZXJzaW9uID0gQ0xJRU5UX0lOVkFMSURfVkVSU0lPTjsKKyAgICBpbnQgICAgdXNlUHNrICAgPSAwOworICAgIGludCAgICB1c2VBbm9uICA9IDA7CisgICAgaW50ICAgIHNlbmRHRVQgID0gMDsKKyAgICBpbnQgICAgYmVuY2htYXJrID0gMDsKKyAgICBpbnQgICAgYmxvY2sgPSBURVNUX0JVRkZFUl9TSVpFOworICAgIHNpemVfdCB0aHJvdWdocHV0ID0gMDsKKyAgICBpbnQgICAgZG9EVExTICAgID0gMDsKKyAgICBpbnQgICAgZHRsc1VEUCAgID0gMDsKKyNpZiAoZGVmaW5lZChXT0xGU1NMX1NDVFApIHx8IGRlZmluZWQoV09MRlNTTF9EVExTX01UVSkpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZChXT0xGU1NMX0RUTFMpCisgICAgaW50ICAgIGR0bHNNVFUgPSAwOworI2VuZGlmCisgICAgaW50ICAgIGR0bHNTQ1RQICA9IDA7CisgICAgaW50ICAgIGRvTWNhc3QgICA9IDA7CisgICAgaW50ICAgIG1hdGNoTmFtZSA9IDA7CisgICAgaW50ICAgIGRvUGVlckNoZWNrID0gMTsKKyAgICBpbnQgICAgbm9uQmxvY2tpbmcgPSAwOworICAgIGludCAgICBzaW11bGF0ZVdhbnRXcml0ZSA9IDA7CisgICAgaW50ICAgIHJlc3VtZVNlc3Npb24gPSAwOworICAgIGludCAgICB3Y19zaHV0ZG93biAgID0gMDsKKyAgICBpbnQgICAgZGlzYWJsZUNSTCAgICA9IDA7CisgICAgaW50ICAgIGV4dGVybmFsVGVzdCAgPSAwOworICAgIGludCAgICByZXQ7CisgICAgaW50ICAgIGVyciAgICAgICAgICAgPSAwOworICAgIGludCAgICBzY3IgICAgICAgICAgID0gMDsgICAgLyogYWxsb3cgc2VjdXJlIHJlbmVnb3RpYXRpb24gKi8KKyAgICBpbnQgICAgZm9yY2VTY3IgICAgICA9IDA7ICAgIC8qIGZvcmNlIGNsaWVudCBpbml0aWF0ZWQgc2NyICovCisgICAgaW50ICAgIHNjckFwcERhdGEgICAgPSAwOworICAgIGludCAgICByZXN1bWVTY3IgICAgID0gMDsgICAgLyogdXNlIHJlc3VtcHRpb24gZm9yIHJlbmVnb3RpYXRpb24gKi8KKyNpZm5kZWYgV09MRlNTTF9OT19DTElFTlRfQVVUSAorICAgIGludCAgICB1c2VDbGllbnRDZXJ0ID0gMTsKKyNlbHNlCisgICAgaW50ICAgIHVzZUNsaWVudENlcnQgPSAwOworI2VuZGlmCisgICAgaW50ICAgIGZld2VyUGFja2V0cyAgPSAwOworICAgIGludCAgICBhdG9taWNVc2VyICAgID0gMDsKKyNpZmRlZiBIQVZFX1BLX0NBTExCQUNLUworICAgIGludCAgICBwa0NhbGxiYWNrcyAgID0gMDsKKyAgICBQa0NiSW5mbyBwa0NiSW5mbzsKKyNlbmRpZgorICAgIGludCAgICBtaW5EaEtleUJpdHMgID0gREVGQVVMVF9NSU5fREhLRVlfQklUUzsKKyAgICBjaGFyKiAgYWxwbkxpc3QgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgYWxwbl9vcHQgPSAwOworICAgIGNoYXIqICBjaXBoZXJMaXN0ID0gTlVMTDsKKyAgICBpbnQgICAgdXNlRGVmQ2lwaGVyTGlzdCA9IDA7CisgICAgY29uc3QgY2hhciogdmVyaWZ5Q2VydDsKKyAgICBjb25zdCBjaGFyKiBvdXJDZXJ0OworICAgIGNvbnN0IGNoYXIqIG91cktleTsKKworICAgIGludCAgIGRvU1RBUlRUTFMgICAgPSAwOworICAgIGNoYXIqIHN0YXJ0dGxzUHJvdCA9IE5VTEw7CisgICAgaW50ICAgdXNlVmVyaWZ5Q2IgPSAwOworICAgIGludCAgIHVzZVN1cEN1cnZlID0gMDsKKworI2lmZGVmIFdPTEZTU0xfVFJVU1RfUEVFUl9DRVJUCisgICAgY29uc3QgY2hhciogdHJ1c3RDZXJ0ICA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU05JCisgICAgY2hhciogIHNuaUhvc3ROYW1lID0gTlVMTDsKKyNlbmRpZgorI2lmZGVmIEhBVkVfVFJVU1RFRF9DQQorICAgIGludCB0cnVzdGVkQ2FLZXlJZCA9IDA7CisjZW5kaWYKKyNpZmRlZiBIQVZFX01BWF9GUkFHTUVOVAorICAgIGJ5dGUgbWF4RnJhZ21lbnQgPSAwOworI2VuZGlmCisjaWZkZWYgSEFWRV9UUlVOQ0FURURfSE1BQworICAgIGJ5dGUgdHJ1bmNhdGVkSE1BQyA9IDA7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1QpIFwKKyB8fCBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1RfVjIpCisgICAgYnl0ZSBzdGF0dXNSZXF1ZXN0ID0gMDsKKyAgICBieXRlIG11c3RTdGFwbGUgPSAwOworI2VuZGlmCisjaWZkZWYgSEFWRV9FWFRFTkRFRF9NQVNURVIKKyAgICBieXRlIGRpc2FibGVFeHRNYXN0ZXJTZWNyZXQgPSAwOworI2VuZGlmCisgICAgaW50IGhlbGxvUmV0cnkgPSAwOworICAgIGludCBvbmx5S2V5U2hhcmUgPSAwOworI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICBpbnQgbm9Qc2tEaGVLZSA9IDA7CisgICAgaW50IHBvc3RIYW5kQXV0aCA9IDA7CisjZW5kaWYKKyAgICBpbnQgdXBkYXRlS2V5c0lWcyA9IDA7CisgICAgaW50IGVhcmx5RGF0YSA9IDA7CisjaWZkZWYgV09MRlNTTF9NVUxUSUNBU1QKKyAgICBieXRlIG1jYXN0SUQgPSAwOworI2VuZGlmCisjaWYgIWRlZmluZWQoTk9fREgpICYmICFkZWZpbmVkKEhBVkVfRklQUykgJiYgXAorICAgICFkZWZpbmVkKEhBVkVfU0VMRlRFU1QpICYmICFkZWZpbmVkKFdPTEZTU0xfT0xEX1BSSU1FX0NIRUNLKQorICAgIGludCBkb0RoS2V5Q2hlY2sgPSAxOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX09DU1AKKyAgICBpbnQgICAgdXNlT2NzcCAgPSAwOworICAgIGNoYXIqICBvY3NwVXJsICA9IE5VTEw7CisjZW5kaWYKKyAgICBpbnQgdXNlWDI1NTE5ID0gMDsKKyAgICBpbnQgdXNlWDQ0OCA9IDA7CisgICAgaW50IGV4aXRXaXRoUmV0ID0gMDsKKyAgICBpbnQgbG9hZENlcnRLZXlJbnRvU1NMT2JqID0gMDsKKworI2lmZGVmIEhBVkVfRU5DUllQVF9USEVOX01BQworICAgIGludCBkaXNhbGxvd0VUTSA9IDA7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfV05SCisgICAgY29uc3QgY2hhciogd25yQ29uZmlnRmlsZSA9IHduckNvbmZpZzsKKyNlbmRpZgorI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpICYmIGRlZmluZWQoV09MRlNTTF9DRVJUX0dFTikgJiYgXAorICAgIChkZWZpbmVkKFdPTEZTU0xfQ0VSVF9SRVEpIHx8IGRlZmluZWQoV09MRlNTTF9DRVJUX0VYVCkpICYmIFwKKyAgICAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX0RJUikKKyAgICBpbnQgdXNlQ2VydEZvbGRlciA9IDA7CisjZW5kaWYKKyAgICBjaGFyIGJ1ZmZlcltXT0xGU1NMX01BWF9FUlJPUl9TWl07CisKKyAgICBpbnQgICAgIGFyZ2MgPSAoKGZ1bmNfYXJncyopYXJncyktPmFyZ2M7CisgICAgY2hhcioqICBhcmd2ID0gKChmdW5jX2FyZ3MqKWFyZ3MpLT5hcmd2OworCisKKyNpZmRlZiBXT0xGU1NMX1NUQVRJQ19NRU1PUlkKKyAgICAjaWYgKGRlZmluZWQoSEFWRV9FQ0MpICYmICFkZWZpbmVkKEFMVF9FQ0NfU0laRSkpIFwKKyAgICAgICAgfHwgZGVmaW5lZChTRVNTSU9OX0NFUlRTKQorICAgICAgICAvKiBiaWcgZW5vdWdoIHRvIGhhbmRsZSBtb3N0IGNhc2VzIGluY2x1ZGluZyBzZXNzaW9uIGNlcnRzICovCisgICAgICAgIGJ5dGUgbWVtb3J5WzMyMDAwMF07CisgICAgI2Vsc2UKKyAgICAgICAgYnl0ZSBtZW1vcnlbODAwMDBdOworICAgICNlbmRpZgorICAgIGJ5dGUgbWVtb3J5SU9bMzQ1MDBdOyAvKiBtYXggZm9yIElPIGJ1ZmZlciAoVExTIHBhY2tldCBjYW4gYmUgMTZrKSAqLworICAgIFdPTEZTU0xfTUVNX0NPTk5fU1RBVFMgc3NsX3N0YXRzOworICAgICNpZmRlZiBERUJVR19XT0xGU1NMCisgICAgICAgIFdPTEZTU0xfTUVNX1NUQVRTIG1lbV9zdGF0czsKKyAgICAjZW5kaWYKKyAgICBXT0xGU1NMX0hFQVBfSElOVCAqaGVhcCA9IE5VTEw7CisjZW5kaWYKKworICAgICgoZnVuY19hcmdzKilhcmdzKS0+cmV0dXJuX2NvZGUgPSAtMTsgLyogZXJyb3Igc3RhdGUgKi8KKworI2lmbmRlZiBOT19SU0EKKyAgICB2ZXJpZnlDZXJ0ID0gY2FDZXJ0RmlsZTsKKyAgICBvdXJDZXJ0ICAgID0gY2xpQ2VydEZpbGU7CisgICAgb3VyS2V5ICAgICA9IGNsaUtleUZpbGU7CisjZWxzZQorICAgICNpZmRlZiBIQVZFX0VDQworICAgICAgICB2ZXJpZnlDZXJ0ID0gY2FFY2NDZXJ0RmlsZTsKKyAgICAgICAgb3VyQ2VydCAgICA9IGNsaUVjY0NlcnRGaWxlOworICAgICAgICBvdXJLZXkgICAgID0gY2xpRWNjS2V5RmlsZTsKKyAgICAjZWxpZiBkZWZpbmVkKEhBVkVfRUQyNTUxOSkKKyAgICAgICAgdmVyaWZ5Q2VydCA9IGNhRWRDZXJ0RmlsZTsKKyAgICAgICAgb3VyQ2VydCAgICA9IGNsaUVkQ2VydEZpbGU7CisgICAgICAgIG91cktleSAgICAgPSBjbGlFZEtleUZpbGU7CisgICAgI2VsaWYgZGVmaW5lZChIQVZFX0VENDQ4KQorICAgICAgICB2ZXJpZnlDZXJ0ID0gY2FFZDQ0OENlcnRGaWxlOworICAgICAgICBvdXJDZXJ0ICAgID0gY2xpRWQ0NDhDZXJ0RmlsZTsKKyAgICAgICAgb3VyS2V5ICAgICA9IGNsaUVkNDQ4S2V5RmlsZTsKKyAgICAjZWxzZQorICAgICAgICB2ZXJpZnlDZXJ0ID0gTlVMTDsKKyAgICAgICAgb3VyQ2VydCAgICA9IE5VTEw7CisgICAgICAgIG91cktleSAgICAgPSBOVUxMOworICAgICNlbmRpZgorI2VuZGlmCisKKyAgICAodm9pZClzZXNzaW9uOworICAgICh2b2lkKWZsYXRTZXNzaW9uOworICAgICh2b2lkKWZsYXRTZXNzaW9uU3o7CisgICAgKHZvaWQpc3NsUmVzdW1lOworICAgICh2b2lkKWF0b21pY1VzZXI7CisgICAgKHZvaWQpc2NyOworICAgICh2b2lkKWZvcmNlU2NyOworICAgICh2b2lkKXNjckFwcERhdGE7CisgICAgKHZvaWQpcmVzdW1lU2NyOworICAgICh2b2lkKW91cktleTsKKyAgICAodm9pZClvdXJDZXJ0OworICAgICh2b2lkKXZlcmlmeUNlcnQ7CisgICAgKHZvaWQpdXNlQ2xpZW50Q2VydDsKKyAgICAodm9pZClkaXNhYmxlQ1JMOworICAgICh2b2lkKW1pbkRoS2V5Qml0czsKKyAgICAodm9pZClhbHBuTGlzdDsKKyAgICAodm9pZClhbHBuX29wdDsKKyAgICAodm9pZCl1cGRhdGVLZXlzSVZzOworICAgICh2b2lkKWVhcmx5RGF0YTsKKyAgICAodm9pZCl1c2VYMjU1MTk7CisgICAgKHZvaWQpdXNlWDQ0ODsKKyAgICAodm9pZCloZWxsb1JldHJ5OworICAgICh2b2lkKW9ubHlLZXlTaGFyZTsKKyAgICAodm9pZCl1c2VTdXBDdXJ2ZTsKKyAgICAodm9pZClsb2FkQ2VydEtleUludG9TU0xPYmo7CisKKyAgICBTdGFja1RyYXAoKTsKKworICAgIC8qIFJlaW5pdGlhbGl6ZSB0aGUgZ2xvYmFsIG15VmVyaWZ5QWN0aW9uLiAqLworICAgIG15VmVyaWZ5QWN0aW9uID0gVkVSSUZZX09WRVJSSURFX0VSUk9SOworCisjaWZuZGVmIFdPTEZTU0xfVlhXT1JLUworICAgIC8qIE5vdCB1c2VkOiBBbGwgdXNlZCAqLworICAgIHdoaWxlICgoY2ggPSBteWdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICI/OiIKKyAgICAgICAgICAgICJhYjpjOmRlZmdoOmk7ams6bDptbm9wOnE6cnN0dTt2Ond4eXoiCisgICAgICAgICAgICAiQTpCOkNERTpGOkdIOklKS0w6TTpOTzpQUVJTOlRVVlc6WFlaOiIKKyAgICAgICAgICAgICIwMToyMzo0NTY3Ojg5IgorICAgICAgICAgICAgIkAjIiwgbG9uZ19vcHRpb25zLCAwKSkgIT0gLTEpIHsKKyAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAgY2FzZSAnPycgOgorICAgICAgICAgICAgICAgIGlmKG15b3B0YXJnIT1OVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGxuZ19pbmRleCA9IGF0b2kobXlvcHRhcmcpOworICAgICAgICAgICAgICAgICAgICBpZihsbmdfaW5kZXg8MHx8bG5nX2luZGV4PjEpeworICAgICAgICAgICAgICAgICAgICAgICAgbG5nX2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBVc2FnZSgpOworICAgICAgICAgICAgICAgIFhFWElUX1QoRVhJVF9TVUNDRVNTKTsKKworICAgICAgICAgICAgY2FzZSAyNTcgOgorICAgICAgICAgICAgICAgIGxuZ19pbmRleCA9IDA7CisgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICBYRVhJVF9UKEVYSVRfU1VDQ0VTUyk7CisKKyAgICAgICAgICAgIGNhc2UgMjU4IDoKKyAgICAgICAgICAgICAgICBsbmdfaW5kZXggPSAxOworICAgICAgICAgICAgICAgIFVzYWdlKCk7CisgICAgICAgICAgICAgICAgWEVYSVRfVChFWElUX1NVQ0NFU1MpOworCisgICAgICAgICAgICBjYXNlICdnJyA6CisgICAgICAgICAgICAgICAgc2VuZEdFVCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2QnIDoKKyAgICAgICAgICAgICAgICBkb1BlZXJDaGVjayA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2UnIDoKKyAgICAgICAgICAgICAgICBTaG93Q2lwaGVycygpOworICAgICAgICAgICAgICAgIFhFWElUX1QoRVhJVF9TVUNDRVNTKTsKKworICAgICAgICAgICAgY2FzZSAnRCcgOgorICAgICAgICAgICAgICAgIG15VmVyaWZ5QWN0aW9uID0gVkVSSUZZX09WRVJSSURFX0RBVEVfRVJSOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdDJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfQ1JMCisgICAgICAgICAgICAgICAgICAgIGRpc2FibGVDUkwgPSAxOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICd1JyA6CisgICAgICAgICAgICAgICAgZG9EVExTID0gMTsKKyAgICAgICAgICAgICAgICBkdGxzVURQID0gMTsKKyAgICAgICAgICAgICNpZiAoZGVmaW5lZChXT0xGU1NMX1NDVFApIHx8IGRlZmluZWQoV09MRlNTTF9EVExTX01UVSkpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZChXT0xGU1NMX0RUTFMpCisgICAgICAgICAgICAgICAgZHRsc01UVSA9IGF0b2kobXlvcHRhcmcpOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ0cnIDoKKyAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX1NDVFAKKyAgICAgICAgICAgICAgICBkb0RUTFMgPSAxOworICAgICAgICAgICAgICAgIGR0bHNTQ1RQID0gMTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdzJyA6CisgICAgICAgICAgICAgICAgdXNlUHNrID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfVFJVU1RfUEVFUl9DRVJUCisgICAgICAgICAgICBjYXNlICdFJyA6CisgICAgICAgICAgICAgICAgdHJ1c3RDZXJ0ID0gbXlvcHRhcmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgY2FzZSAnbScgOgorICAgICAgICAgICAgICAgIG1hdGNoTmFtZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3gnIDoKKyAgICAgICAgICAgICAgICB1c2VDbGllbnRDZXJ0ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnWCcgOgorICAgICAgICAgICAgICAgIGV4dGVybmFsVGVzdCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2YnIDoKKyAgICAgICAgICAgICAgICBmZXdlclBhY2tldHMgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdVJyA6CisgICAgICAgICAgICAjaWYgZGVmaW5lZChBVE9NSUNfVVNFUikgJiYgIWRlZmluZWQoV09MRlNTTF9BRUFEX09OTFkpCisgICAgICAgICAgICAgICAgYXRvbWljVXNlciA9IDE7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnUCcgOgorICAgICAgICAgICAgI2lmZGVmIEhBVkVfUEtfQ0FMTEJBQ0tTCisgICAgICAgICAgICAgICAgcGtDYWxsYmFja3MgPSAxOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2gnIDoKKyAgICAgICAgICAgICAgICBob3N0ICAgPSBteW9wdGFyZzsKKyAgICAgICAgICAgICAgICBkb21haW4gPSBteW9wdGFyZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAncCcgOgorICAgICAgICAgICAgICAgIHBvcnQgPSAod29yZDE2KWF0b2kobXlvcHRhcmcpOworICAgICAgICAgICAgICAgICNpZiAhZGVmaW5lZChOT19NQUlOX0RSSVZFUikgfHwgZGVmaW5lZChVU0VfV0lORE9XU19BUEkpCisgICAgICAgICAgICAgICAgICAgIGlmIChwb3J0ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJfc3lzKCJwb3J0IG51bWJlciBjYW5ub3QgYmUgMCIpOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICd2JyA6CisgICAgICAgICAgICAgICAgaWYgKG15b3B0YXJnWzBdID09ICdkJykgeworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gQ0xJRU5UX0RPV05HUkFERV9WRVJTSU9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFdPTEZTU0xfRUlUSEVSX1NJREUpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAobXlvcHRhcmdbMF0gPT0gJ2UnKSB7CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBFSVRIRVJfRE9XTkdSQURFX1ZFUlNJT047CisgICAgICAgICAgICAgICAgI2lmbmRlZiBOT19DRVJUUworICAgICAgICAgICAgICAgICAgICBsb2FkQ2VydEtleUludG9TU0xPYmogPSAxOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gYXRvaShteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPCAwIHx8IHZlcnNpb24gPiA0KSB7CisgICAgICAgICAgICAgICAgICAgIFVzYWdlKCk7CisgICAgICAgICAgICAgICAgICAgIFhFWElUX1QoTVlfRVhfVVNBR0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnVicgOgorICAgICAgICAgICAgICAgIFNob3dWZXJzaW9ucygpOworICAgICAgICAgICAgICAgIFhFWElUX1QoRVhJVF9TVUNDRVNTKTsKKworICAgICAgICAgICAgY2FzZSAnbCcgOgorICAgICAgICAgICAgICAgIGNpcGhlckxpc3QgPSBteW9wdGFyZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnSCcgOgorICAgICAgICAgICAgICAgIGlmIChYU1RSTkNNUChteW9wdGFyZywgImRlZkNpcGhlckxpc3QiLCAxMykgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlVzaW5nIGRlZmF1bHQgY2lwaGVyIGxpc3QgZm9yIHRlc3RpbmdcbiIpOworICAgICAgICAgICAgICAgICAgICB1c2VEZWZDaXBoZXJMaXN0ID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoWFNUUk5DTVAobXlvcHRhcmcsICJleGl0V2l0aFJldCIsIDExKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU2tpcCBleGl0KCkgZm9yIHRlc3RpbmdcbiIpOworICAgICAgICAgICAgICAgICAgICBleGl0V2l0aFJldCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFhTVFJOQ01QKG15b3B0YXJnLCAidmVyaWZ5RmFpbCIsIDEwKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiVmVyaWZ5IHNob3VsZCBmYWlsXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbXlWZXJpZnlBY3Rpb24gPSBWRVJJRllfRk9SQ0VfRkFJTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoWFNUUk5DTVAobXlvcHRhcmcsICJ2ZXJpZnlJbmZvIiwgMTApID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJWZXJpZnkgc2hvdWxkIG5vdCBvdmVycmlkZSBlcnJvclxuIik7CisgICAgICAgICAgICAgICAgICAgIG15VmVyaWZ5QWN0aW9uID0gVkVSSUZZX1VTRV9QUkVWRVJGSVk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFhTVFJOQ01QKG15b3B0YXJnLCAidXNlU3VwQ3VydmUiLCAxMSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIkF0dGVtcHRpbmcgdG8gdGVzdCB1c2Ugc3VwcG9ydGVkIGN1cnZlXG4iKTsKKyAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChIQVZFX0VDQykgJiYgZGVmaW5lZChIQVZFX1NVUFBPUlRFRF9DVVJWRVMpCisgICAgICAgICAgICAgICAgICAgIHVzZVN1cEN1cnZlID0gMTsKKyAgICAgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIlN1cHBvcnRlZCBjdXJ2ZXMgbm90IGNvbXBpbGVkIGluIVxuIik7CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFhTVFJOQ01QKG15b3B0YXJnLCAibG9hZFNTTCIsIDcpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJMb2FkIGNlcnQva2V5IGludG8gd29sZlNTTCBvYmplY3RcbiIpOworICAgICAgICAgICAgICAgICNpZm5kZWYgTk9fQ0VSVFMKKyAgICAgICAgICAgICAgICAgICAgbG9hZENlcnRLZXlJbnRvU1NMT2JqID0gMTsKKyAgICAgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNlcnRzIHR1cm5lZCBvZmYgd2l0aCBOT19DRVJUUyFcbiIpOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChYU1RSTkNNUChteW9wdGFyZywgImRpc2FsbG93RVRNIiwgNykgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIkRpc2FsbG93IEVuY3J5cHQtVGhlbi1NQUNcbiIpOworICAgICAgICAgICAgICAgICNpZmRlZiBIQVZFX0VOQ1JZUFRfVEhFTl9NQUMKKyAgICAgICAgICAgICAgICAgICAgZGlzYWxsb3dFVE0gPSAxOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgWEVYSVRfVChNWV9FWF9VU0FHRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdBJyA6CisgICAgICAgICAgICAgICAgdmVyaWZ5Q2VydCA9IG15b3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdjJyA6CisgICAgICAgICAgICAgICAgb3VyQ2VydCA9IG15b3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdrJyA6CisgICAgICAgICAgICAgICAgb3VyS2V5ID0gbXlvcHRhcmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1onIDoKKyAgICAgICAgICAgICAgICAjaWZuZGVmIE5PX0RICisgICAgICAgICAgICAgICAgICAgIG1pbkRoS2V5Qml0cyA9IGF0b2kobXlvcHRhcmcpOworICAgICAgICAgICAgICAgICAgICBpZiAobWluRGhLZXlCaXRzIDw9IDAgfHwgbWluRGhLZXlCaXRzID4gMTYwMDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzYWdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBYRVhJVF9UKE1ZX0VYX1VTQUdFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdiJyA6CisgICAgICAgICAgICAgICAgYmVuY2htYXJrID0gYXRvaShteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgaWYgKGJlbmNobWFyayA8IDAgfHwgYmVuY2htYXJrID4gMTAwMDAwMCkgeworICAgICAgICAgICAgICAgICAgICBVc2FnZSgpOworICAgICAgICAgICAgICAgICAgICBYRVhJVF9UKE1ZX0VYX1VTQUdFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ0InIDoKKyAgICAgICAgICAgICAgICB0aHJvdWdocHV0ID0gYXRvbChteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgZm9yICg7ICpteW9wdGFyZyAhPSAnXDAnOyBteW9wdGFyZysrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqbXlvcHRhcmcgPT0gJywnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBibG9jayA9IGF0b2kobXlvcHRhcmcgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aHJvdWdocHV0ID09IDAgfHwgYmxvY2sgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICBVc2FnZSgpOworICAgICAgICAgICAgICAgICAgICBYRVhJVF9UKE1ZX0VYX1VTQUdFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ04nIDoKKyAgICAgICAgICAgICAgICBub25CbG9ja2luZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3InIDoKKyAgICAgICAgICAgICAgICByZXN1bWVTZXNzaW9uID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAndycgOgorICAgICAgICAgICAgICAgIHdjX3NodXRkb3duID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnUicgOgorICAgICAgICAgICAgICAgICNpZmRlZiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9OCisgICAgICAgICAgICAgICAgICAgIHNjciA9IDE7CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2knIDoKKyAgICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTgorICAgICAgICAgICAgICAgICAgICBzY3IgICAgICA9IDE7CisgICAgICAgICAgICAgICAgICAgIGZvcmNlU2NyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFhTVFJOQ01QKG15b3B0YXJnLCAic2NyLWFwcC1kYXRhIiwgMTIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjckFwcERhdGEgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3onIDoKKyAgICAgICAgICAgICAgICAjaWZuZGVmIFdPTEZTU0xfTEVBTlBTSworICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0dldE9iamVjdFNpemUoKTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnUycgOgorICAgICAgICAgICAgICAgIGlmIChYU1RSTkNNUChteW9wdGFyZywgImNoZWNrIiwgNSkgPT0gMCkgeworICAgICAgICAgICAgICAgICNpZmRlZiBIQVZFX1NOSQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNOSSBpczogT05cbiIpOworICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU05JIGlzOiBPRkZcbiIpOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBYRVhJVF9UKEVYSVRfU1VDQ0VTUyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICNpZmRlZiBIQVZFX1NOSQorICAgICAgICAgICAgICAgICAgICBzbmlIb3N0TmFtZSA9IG15b3B0YXJnOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdGJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfTUFYX0ZSQUdNRU5UCisgICAgICAgICAgICAgICAgICAgIG1heEZyYWdtZW50ID0gYXRvaShteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXhGcmFnbWVudCA8IFdPTEZTU0xfTUZMX01JTiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhGcmFnbWVudCA+IFdPTEZTU0xfTUZMX01BWCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFhFWElUX1QoTVlfRVhfVVNBR0UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1QnIDoKKyAgICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9UUlVOQ0FURURfSE1BQworICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZWRITUFDID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnbicgOgorICAgICAgICAgICAgICAgICNpZmRlZiBIQVZFX0VYVEVOREVEX01BU1RFUgorICAgICAgICAgICAgICAgICAgICBkaXNhYmxlRXh0TWFzdGVyU2VjcmV0ID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnVycgOgorICAgICAgICAgICAgICAgICNpZiBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1QpIFwKKyAgICAgICAgICAgICAgICAgfHwgZGVmaW5lZChIQVZFX0NFUlRJRklDQVRFX1NUQVRVU19SRVFVRVNUX1YyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZDMyIG15b3B0YXJnU3o7CisKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzUmVxdWVzdCA9IGF0b2kobXlvcHRhcmcpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzUmVxdWVzdCA+IE9DU1BfU1RBUExJTkdfT1BUX01BWCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFhFWElUX1QoTVlfRVhfVVNBR0UpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbXlvcHRhcmdTeiA9ICh3b3JkMzIpWFNUUkxFTihteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChteW9wdGFyZ1N6ID4gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhUT1VQUEVSKG15b3B0YXJnW215b3B0YXJnU3otMV0pID09ICdNJykgeworICAgICAgICAgICAgICAgICAgICAgICAgbXVzdFN0YXBsZSA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ28nIDoKKyAgICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9PQ1NQCisgICAgICAgICAgICAgICAgICAgIHVzZU9jc3AgPSAxOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdPJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfT0NTUAorICAgICAgICAgICAgICAgICAgICB1c2VPY3NwID0gMTsKKyAgICAgICAgICAgICAgICAgICAgb2NzcFVybCA9IG15b3B0YXJnOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdhJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfQU5PTgorICAgICAgICAgICAgICAgICAgICB1c2VBbm9uID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnTCcgOgorICAgICAgICAgICAgICAgICNpZmRlZiBIQVZFX0FMUE4KKyAgICAgICAgICAgICAgICAgICAgYWxwbkxpc3QgPSBteW9wdGFyZzsKKworICAgICAgICAgICAgICAgICAgICBpZiAoYWxwbkxpc3RbMF0gPT0gJ0MnICYmIGFscG5MaXN0WzFdID09ICc6JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscG5fb3B0ID0gV09MRlNTTF9BTFBOX0NPTlRJTlVFX09OX01JU01BVENIOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhbHBuTGlzdFswXSA9PSAnRicgJiYgYWxwbkxpc3RbMV0gPT0gJzonKQorICAgICAgICAgICAgICAgICAgICAgICAgYWxwbl9vcHQgPSBXT0xGU1NMX0FMUE5fRkFJTEVEX09OX01JU01BVENIOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzYWdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBYRVhJVF9UKE1ZX0VYX1VTQUdFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGFscG5MaXN0ICs9IDI7CisKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnTScgOgorICAgICAgICAgICAgICAgIGRvU1RBUlRUTFMgPSAxOworICAgICAgICAgICAgICAgIHN0YXJ0dGxzUHJvdCA9IG15b3B0YXJnOworCisgICAgICAgICAgICAgICAgaWYgKFhTVFJOQ01QKHN0YXJ0dGxzUHJvdCwgInNtdHAiLCA0KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIFVzYWdlKCk7CisgICAgICAgICAgICAgICAgICAgIFhFWElUX1QoTVlfRVhfVVNBR0UpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdxJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfV05SCisgICAgICAgICAgICAgICAgICAgIHduckNvbmZpZ0ZpbGUgPSBteW9wdGFyZzsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnSicgOgorICAgICAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgICAgICAgICAgICAgIGhlbGxvUmV0cnkgPSAxOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdLJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgICAgICAgICAgICAgbm9Qc2tEaGVLZSA9IDE7CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ0knIDoKKyAgICAgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9UTFMxMworICAgICAgICAgICAgICAgICAgICB1cGRhdGVLZXlzSVZzID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAneScgOgorICAgICAgICAgICAgICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKEhBVkVfU1VQUE9SVEVEX0NVUlZFUykgJiYgIWRlZmluZWQoTk9fREgpCisgICAgICAgICAgICAgICAgICAgIG9ubHlLZXlTaGFyZSA9IDE7CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1knIDoKKyAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoSEFWRV9TVVBQT1JURURfQ1VSVkVTKSAmJiBkZWZpbmVkKEhBVkVfRUNDKQorICAgICAgICAgICAgICAgICAgICBvbmx5S2V5U2hhcmUgPSAyOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdqJyA6CisgICAgICAgICAgICAgICAgdXNlVmVyaWZ5Q2IgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICd0JyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorICAgICAgICAgICAgICAgICAgICB1c2VYMjU1MTkgPSAxOworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9FQ0MKKyAgICAgICAgICAgICAgICAgICAgdXNlU3VwQ3VydmUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgI2lmIGRlZmluZWQoV09MRlNTTF9UTFMxMykgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKEhBVkVfU1VQUE9SVEVEX0NVUlZFUykKKyAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlLZXlTaGFyZSA9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1EnIDoKKyAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoV09MRlNTTF9QT1NUX0hBTkRTSEFLRV9BVVRIKQorICAgICAgICAgICAgICAgICAgICBwb3N0SGFuZEF1dGggPSAxOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICcwJyA6CisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9FQVJMWV9EQVRBCisgICAgICAgICAgICAgICAgZWFybHlEYXRhID0gMTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICcxJyA6CisgICAgICAgICAgICAgICAgbG5nX2luZGV4ID0gYXRvaShteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgaWYobG5nX2luZGV4PDB8fGxuZ19pbmRleD4xKXsKKyAgICAgICAgICAgICAgICAgICAgICBsbmdfaW5kZXggPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnMicgOgorICAgICAgICAgICAgICAgI2lmICFkZWZpbmVkKE5PX0RIKSAmJiAhZGVmaW5lZChIQVZFX0ZJUFMpICYmIFwKKyAgICAgICAgICAgICAgICAgICAhZGVmaW5lZChIQVZFX1NFTEZURVNUKSAmJiAhZGVmaW5lZChXT0xGU1NMX09MRF9QUklNRV9DSEVDSykKKyAgICAgICAgICAgICAgICAgICAgZG9EaEtleUNoZWNrID0gMDsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnMycgOgorICAgICAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX01VTFRJQ0FTVAorICAgICAgICAgICAgICAgICAgICBkb01jYXN0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgbWNhc3RJRCA9IChieXRlKShhdG9pKG15b3B0YXJnKSAmIDB4RkYpOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICc0JyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04KKyAgICAgICAgICAgICAgICAgICAgc2NyICAgICAgID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZm9yY2VTY3IgID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdW1lU2NyID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnNScgOgorICAgICAgICAgICAgI2lmZGVmIEhBVkVfVFJVU1RFRF9DQQorICAgICAgICAgICAgICAgIHRydXN0ZWRDYUtleUlkID0gMTsKKyAgICAgICAgICAgICNlbmRpZiAvKiBIQVZFX1RSVVNURURfQ0EgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnNicgOgorICAgICAgICAgICAgICAgIG5vbkJsb2NraW5nID0gMTsKKyAgICAgICAgICAgICAgICBzaW11bGF0ZVdhbnRXcml0ZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICc3JyA6CisgICAgICAgICAgICAgICAgbWluVmVyc2lvbiA9IGF0b2kobXlvcHRhcmcpOworICAgICAgICAgICAgICAgIGlmIChtaW5WZXJzaW9uIDwgMCB8fCBtaW5WZXJzaW9uID4gNCkgeworICAgICAgICAgICAgICAgICAgICBVc2FnZSgpOworICAgICAgICAgICAgICAgICAgICBYRVhJVF9UKE1ZX0VYX1VTQUdFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICc4JyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfQ1VSVkU0NDgKKyAgICAgICAgICAgICAgICAgICAgdXNlWDQ0OCA9IDE7CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBIQVZFX0VDQworICAgICAgICAgICAgICAgICAgICB1c2VTdXBDdXJ2ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoSEFWRV9TVVBQT1JURURfQ1VSVkVTKQorICAgICAgICAgICAgICAgICAgICAgICAgb25seUtleVNoYXJlID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJzknIDoKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSAmJiBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9HRU4pICYmIFwKKyAgICAoZGVmaW5lZChXT0xGU1NMX0NFUlRfUkVRKSB8fCBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9FWFQpKSAmJiBcCisgICAgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgIWRlZmluZWQoTk9fV09MRlNTTF9ESVIpCisgICAgICAgICAgICAgICAgICAgIHVzZUNlcnRGb2xkZXIgPSAxOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnQCcgOgorICAgICAgICAgICAgeworI2lmZGVmIEhBVkVfV0NfSU5UUk9TUEVDVElPTgorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbmZfYXJncyA9IHdvbGZTU0xfY29uZmlndXJlX2FyZ3MoKTsKKyAgICAgICAgICAgICAgICBpZiAoY29uZl9hcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIHB1dHMoY29uZl9hcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgWEVYSVRfVChFWElUX1NVQ0NFU1MpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwdXRzKCJjb25maWd1cmUgYXJncyBub3QgY29tcGlsZWQgaW4uXG4iLHN0ZGVycik7CisgICAgICAgICAgICAgICAgICAgIFhFWElUX1QoTVlfRVhfVVNBR0UpOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgZnB1dHMoImNvbXBpbGVkIHdpdGhvdXQgQlVJTERfSU5UUk9TUEVDVElPTi5cbiIsc3RkZXJyKTsKKyAgICAgICAgICAgICAgICBYRVhJVF9UKE1ZX0VYX1VTQUdFKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlICcjJyA6CisgICAgICAgICAgICB7CisjaWZkZWYgSEFWRV9XQ19JTlRST1NQRUNUSU9OCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY2ZsYWdzID0gd29sZlNTTF9nbG9iYWxfY2ZsYWdzKCk7CisgICAgICAgICAgICAgICAgaWYgKGNmbGFncykgeworICAgICAgICAgICAgICAgICAgICBwdXRzKGNmbGFncyk7CisgICAgICAgICAgICAgICAgICAgIFhFWElUX1QoRVhJVF9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcHV0cygiQ0ZMQUdTIG5vdCBjb21waWxlZCBpbi5cbiIsc3RkZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgWEVYSVRfVChNWV9FWF9VU0FHRSk7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICBmcHV0cygiY29tcGlsZWQgd2l0aG91dCBCVUlMRF9JTlRST1NQRUNUSU9OLlxuIixzdGRlcnIpOworICAgICAgICAgICAgICAgIFhFWElUX1QoTVlfRVhfVVNBR0UpOworI2VuZGlmCisgICAgICAgICAgICB9CisKKyNpZmRlZiBXT0xGU1NMX1dPTEZTRU5UUllfSE9PS1MKKyAgICAgICAgICAgIGNhc2UgMjU2OgorI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKFdPTEZTRU5UUllfTk9fSlNPTikKKyAgICAgICAgICAgICAgICB3b2xmc2VudHJ5X2NvbmZpZ19wYXRoID0gbXlvcHRhcmc7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVzYWdlKCk7CisgICAgICAgICAgICAgICAgWEVYSVRfVChNWV9FWF9VU0FHRSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBteW9wdGluZCA9IDA7ICAgICAgLyogcmVzZXQgZm9yIHRlc3QgY2FzZXMgKi8KKyNlbmRpZiAvKiAhV09MRlNTTF9WWFdPUktTICovCisKKyAgICBpZiAoZXh0ZXJuYWxUZXN0KSB7CisgICAgICAgIC8qIGRldGVjdCBidWlsZCBjYXNlcyB0aGF0IHdvdWxkbid0IGFsbG93IHRlc3QgYWdhaW5zdCB3b2xmc3NsLmNvbSAqLworICAgICAgICBpbnQgZG9uZSA9IDA7CisKKyAgICAgICAgI2lmZGVmIE5PX1JTQQorICAgICAgICAgICAgZG9uZSArPSAxOyAvKiByZXF1aXJlIFJTQSBmb3IgZXh0ZXJuYWwgdGVzdHMgKi8KKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgaWYgKCFYU1RSTkNNUChkb21haW4sICJ3d3cuZ2xvYmFsc2lnbi5jb20iLCAxNCkpIHsKKyAgICAgICAgLyogd3d3Lmdsb2JhbHNpZ24uY29tIGRvZXMgbm90IHJlc3BvbmQgdG8gaXB2NiBvY3NwIHJlcXVlc3RzICovCisgICAgICAgICNpZiBkZWZpbmVkKFRFU1RfSVBWNikgJiYgZGVmaW5lZChIQVZFX09DU1ApCisgICAgICAgICAgICBkb25lICs9IDE7CisgICAgICAgICNlbmRpZgorCisgICAgICAgIC8qIHd3dy5nbG9iYWxzaWduLmNvbSBoYXMgbGltaXRlZCBzdXBwb3J0ZWQgY2lwaGVyIHN1aXRlcyAqLworICAgICAgICAjaWYgZGVmaW5lZChOT19BRVMpICYmIGRlZmluZWQoSEFWRV9PQ1NQKQorICAgICAgICAgICAgZG9uZSArPSAxOworICAgICAgICAjZW5kaWYKKworICAgICAgICAvKiB3d3cuZ2xvYmFsc2lnbi5jb20gb25seSBzdXBwb3J0cyBzdGF0aWMgUlNBIG9yIEVDREhFIHdpdGggQUVTICovCisgICAgICAgIC8qIFdlIGNhbm5vdCBleHBlY3QgdXNlcnMgdG8gaGF2ZSBvbiBzdGF0aWMgUlNBIHNvIHRlc3QgZm9yIEVDQyBvbmx5CisgICAgICAgICAqIGFzIHNvbWUgdXNlcnMgd2lsbCBtb3N0IGxpa2VseSBiZSBvbiAzMi1iaXQgc3lzdGVtcyB3aGVyZSBFQ0MKKyAgICAgICAgICogaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCAqLworICAgICAgICAjaWYgZGVmaW5lZChIQVZFX09DU1ApICYmICFkZWZpbmVkKEhBVkVfRUNDKQorICAgICAgICAgICAgZG9uZSArPSAxOworICAgICAgICAjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgICNpZm5kZWYgTk9fUFNLCisgICAgICAgIGlmICh1c2VQc2spIHsKKyAgICAgICAgICAgIGRvbmUgKz0gMTsgLyogZG9uJ3QgcGVyZm9ybSBleHRlcm5hbCB0ZXN0cyBpZiBQU0sgaXMgZW5hYmxlZCAqLworICAgICAgICB9CisgICAgICAgICNlbmRpZgorCisgICAgICAgICNpZmRlZiBOT19TSEEKKyAgICAgICAgICAgIGRvbmUgKz0gMTsgIC8qIGV4dGVybmFsIGNlcnQgY2hhaW4gbW9zdCBsaWtlbHkgaGFzIFNIQSAqLworICAgICAgICAjZW5kaWYKKworICAgICAgICAjaWYgIWRlZmluZWQoSEFWRV9FQ0MpICYmICFkZWZpbmVkKFdPTEZTU0xfU1RBVElDX1JTQSkgXAorICAgICAgICAgICAgfHwgKCBkZWZpbmVkKEhBVkVfRUNDKSAmJiAhZGVmaW5lZChIQVZFX1NVUFBPUlRFRF9DVVJWRVMpIFwKKyAgICAgICAgICAgICAgICAgICYmICFkZWZpbmVkKFdPTEZTU0xfU1RBVElDX1JTQSkgKQorICAgICAgICAgICAgLyogZ29vZ2xlIG5lZWRzIEVDREhFK1N1cHBvcnRlZCBDdXJ2ZXMgb3Igc3RhdGljIFJTQSAqLworICAgICAgICAgICAgaWYgKCFYU1RSTkNNUChkb21haW4sICJ3d3cuZ29vZ2xlLmNvbSIsIDE0KSkKKyAgICAgICAgICAgICAgICBkb25lICs9IDE7CisgICAgICAgICNlbmRpZgorCisgICAgICAgICNpZiAhZGVmaW5lZChIQVZFX0VDQykgJiYgIWRlZmluZWQoV09MRlNTTF9TVEFUSUNfUlNBKQorICAgICAgICAgICAgLyogd29sZnNzbCBuZWVkcyBFQ0RIRSBvciBzdGF0aWMgUlNBICovCisgICAgICAgICAgICBpZiAoIVhTVFJOQ01QKGRvbWFpbiwgInd3dy53b2xmc3NsLmNvbSIsIDE1KSkKKyAgICAgICAgICAgICAgICBkb25lICs9IDE7CisgICAgICAgICNlbmRpZgorCisgICAgICAgICNpZiAhZGVmaW5lZChXT0xGU1NMX1NIQTM4NCkKKyAgICAgICAgICAgIGlmICghWFNUUk5DTVAoZG9tYWluLCAid3d3LndvbGZzc2wuY29tIiwgMTUpKSB7CisgICAgICAgICAgICAgICAgLyogd29sZnNzbCBuZWVkIHNoYTM4NCBmb3IgY2VydCBjaGFpbiB2ZXJpZnkgKi8KKyAgICAgICAgICAgICAgICBkb25lICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICNlbmRpZgorCisgICAgICAgICNpZiAhZGVmaW5lZChIQVZFX0FFU0dDTSkgJiYgZGVmaW5lZChOT19BRVMpICYmIFwKKyAgICAgICAgICAgICEoZGVmaW5lZChIQVZFX0NIQUNIQSkgJiYgZGVmaW5lZChIQVZFX1BPTFkxMzA1KSkKKyAgICAgICAgICAgIC8qIG5lZWQgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGZvciBleHRlcm5hbCB0ZXN0cyAqLworICAgICAgICAgICAgZG9uZSArPSAxOworICAgICAgICAjZW5kaWYKKworICAgICAgICAjaWYgZGVmaW5lZChIQVZFX1FTSCkKKyAgICAgICAgICAgIC8qY3VycmVudGx5IGdvb2dsZSBzZXJ2ZXIgcmVqZWN0cyBjbGllbnQgaGVsbG8gd2l0aCBRU0ggZXh0ZW5zaW9uLiovCisgICAgICAgICAgICBkb25lICs9IDE7CisgICAgICAgICNlbmRpZgorCisgICAgICAgIC8qIEZvciB0aGUgZXh0ZXJuYWwgdGVzdCwgaWYgd2UgZGlzYWJsZSBBRVMsIEdvRGFkZHkgd2lsbCByZWplY3QgdGhlCisgICAgICAgICAqIGNvbm5lY3Rpb24uIFRoZXkgb25seSBjdXJyZW50bHkgc3VwcG9ydCBBRVMgc3VpdGVzLCBSQzQgYW5kIDNERVMKKyAgICAgICAgICogc3VpdGVzLiBXaXRoIEFFUyBkaXNhYmxlZCB3ZSBvbmx5IG9mZmVyIFBvbHlDaGFjaGEgc3VpdGVzLiAqLworICAgICAgICAjaWYgZGVmaW5lZChOT19BRVMpICYmICFkZWZpbmVkKEhBVkVfQUVTR0NNKQorICAgICAgICAgICAgaWYgKCFYU1RSTkNNUChkb21haW4sICJ3d3cud29sZnNzbC5jb20iLCAxNSkpIHsKKyAgICAgICAgICAgICAgICBkb25lICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICNlbmRpZgorCisgICAgICAgIGlmIChkb25lKSB7CisgICAgICAgICAgICBwcmludGYoImV4dGVybmFsIHRlc3QgY2FuJ3QgYmUgcnVuIGluIHRoaXMgbW9kZVxuIik7CisKKyAgICAgICAgICAgICgoZnVuY19hcmdzKilhcmdzKS0+cmV0dXJuX2NvZGUgPSAwOworICAgICAgICAgICAgWEVYSVRfVChFWElUX1NVQ0NFU1MpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogc29ydCBvdXQgRFRMUyB2ZXJzdXMgVExTIHZlcnNpb25zICovCisgICAgaWYgKHZlcnNpb24gPT0gQ0xJRU5UX0lOVkFMSURfVkVSU0lPTikgeworICAgICAgICBpZiAoZG9EVExTKQorICAgICAgICAgICAgdmVyc2lvbiA9IENMSUVOVF9EVExTX0RFRkFVTFRfVkVSU0lPTjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmVyc2lvbiA9IENMSUVOVF9ERUZBVUxUX1ZFUlNJT047CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoZG9EVExTKSB7CisgICAgICAgICAgICBpZiAodmVyc2lvbiA9PSAzKQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSAtMjsKKyAgICAgICAgI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChXT0xGU1NMX0VJVEhFUl9TSURFKQorICAgICAgICAgICAgZWxzZSBpZiAodmVyc2lvbiA9PSBFSVRIRVJfRE9XTkdSQURFX1ZFUlNJT04pCisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IC0zOworICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBIQVZFX1dOUgorICAgIGlmICh3Y19Jbml0TmV0UmFuZG9tKHduckNvbmZpZ0ZpbGUsIE5VTEwsIDUwMDApICE9IDApCisgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgd2hpdGV3b29kIG5ldCByYW5kb20gY29uZmlnIGZpbGUiKTsKKyNlbmRpZgorCisgICAgc3dpdGNoICh2ZXJzaW9uKSB7CisjaWZuZGVmIE5PX09MRF9UTFMKKyAgICAjaWZkZWYgV09MRlNTTF9BTExPV19TU0xWMworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBtZXRob2QgPSB3b2xmU1NMdjNfY2xpZW50X21ldGhvZF9leDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICNlbmRpZgorCisgICAgI2lmbmRlZiBOT19UTFMKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfQUxMT1dfVExTVjEwCisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1ldGhvZCA9IHdvbGZUTFN2MV9jbGllbnRfbWV0aG9kX2V4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICNlbmRpZgorCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1ldGhvZCA9IHdvbGZUTFN2MV8xX2NsaWVudF9tZXRob2RfZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAjZW5kaWYgLyogIU5PX1RMUyAqLworI2VuZGlmIC8qICFOT19PTERfVExTICovCisKKyNpZm5kZWYgTk9fVExTCisgICAgI2lmbmRlZiBXT0xGU1NMX05PX1RMUzEyCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1ldGhvZCA9IHdvbGZUTFN2MV8yX2NsaWVudF9tZXRob2RfZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAjZW5kaWYKKworICAgICNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIG1ldGhvZCA9IHdvbGZUTFN2MV8zX2NsaWVudF9tZXRob2RfZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAjZW5kaWYKKworICAgICAgICBjYXNlIENMSUVOVF9ET1dOR1JBREVfVkVSU0lPTjoKKyAgICAgICAgICAgIG1ldGhvZCA9IHdvbGZTU0x2MjNfY2xpZW50X21ldGhvZF9leDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoV09MRlNTTF9FSVRIRVJfU0lERSkKKyAgICAgICAgY2FzZSBFSVRIRVJfRE9XTkdSQURFX1ZFUlNJT046CisgICAgICAgICAgICBtZXRob2QgPSB3b2xmU1NMdjIzX21ldGhvZF9leDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICNlbmRpZgorI2VuZGlmIC8qIE5PX1RMUyAqLworCisjaWZkZWYgV09MRlNTTF9EVExTCisgICAgICAgICNpZm5kZWYgTk9fT0xEX1RMUworICAgICAgICBjYXNlIC0xOgorICAgICAgICAgICAgbWV0aG9kID0gd29sZkRUTFN2MV9jbGllbnRfbWV0aG9kX2V4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICNlbmRpZgorCisgICAgI2lmbmRlZiBXT0xGU1NMX05PX1RMUzEyCisgICAgICAgIGNhc2UgLTI6CisgICAgICAgICAgICBtZXRob2QgPSB3b2xmRFRMU3YxXzJfY2xpZW50X21ldGhvZF9leDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICNlbmRpZgorICAgICNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoV09MRlNTTF9FSVRIRVJfU0lERSkKKyAgICAgICAgY2FzZSAtMzoKKyAgICAgICAgICAgIG1ldGhvZCA9IHdvbGZEVExTdjFfMl9tZXRob2RfZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAjZW5kaWYKKyNlbmRpZgorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJfc3lzKCJCYWQgU1NMIHZlcnNpb24iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChtZXRob2QgPT0gTlVMTCkKKyAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIGdldCBtZXRob2QiKTsKKworCisjaWZkZWYgV09MRlNTTF9TVEFUSUNfTUVNT1JZCisgICAgI2lmZGVmIERFQlVHX1dPTEZTU0wKKyAgICAvKiBwcmludCBvZmYgaGVscGVyIGJ1ZmZlciBzaXplcyBmb3IgdXNlIHdpdGggc3RhdGljIG1lbW9yeQorICAgICAqIHByaW50aW5nIHRvIHN0ZGVyciBpbiBjYXNlIG9mIGRlYnVnIG1vZGUgdHVybmVkIG9uICovCisgICAgZnByaW50ZihzdGRlcnIsICJzdGF0aWMgbWVtb3J5IG1hbmFnZW1lbnQgc2l6ZSA9ICVkXG4iLAorICAgICAgICAgICAgd29sZlNTTF9NZW1vcnlQYWRkaW5nU3ooKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJjYWxjdWxhdGVkIG9wdGltdW0gZ2VuZXJhbCBidWZmZXIgc2l6ZSA9ICVkXG4iLAorICAgICAgICAgICAgd29sZlNTTF9TdGF0aWNCdWZmZXJTeihtZW1vcnksIHNpemVvZihtZW1vcnkpLCAwKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJjYWxjdWxhdGVkIG9wdGltdW0gSU8gYnVmZmVyIHNpemUgICAgICA9ICVkXG4iLAorICAgICAgICAgICAgd29sZlNTTF9TdGF0aWNCdWZmZXJTeihtZW1vcnlJTywgc2l6ZW9mKG1lbW9yeUlPKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRk1FTV9JT19QT09MX0ZJWEVEKSk7CisgICAgI2VuZGlmIC8qIERFQlVHX1dPTEZTU0wgKi8KKworICAgIGlmICh3Y19Mb2FkU3RhdGljTWVtb3J5KCZoZWFwLCBtZW1vcnksIHNpemVvZihtZW1vcnkpLCBXT0xGTUVNX0dFTkVSQUwsIDEpCisgICAgICAgICAgICAhPSAwKSB7CisgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byBsb2FkIHN0YXRpYyBtZW1vcnkiKTsKKyAgICB9CisKKyAgICBjdHggPSB3b2xmU1NMX0NUWF9uZXdfZXgobWV0aG9kKGhlYXApLCBoZWFwKTsKKyAgICBpZiAoY3R4ID09IE5VTEwpCisgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byBnZXQgY3R4Iik7CisKKyAgICBpZiAod29sZlNTTF9DVFhfbG9hZF9zdGF0aWNfbWVtb3J5KCZjdHgsIE5VTEwsIG1lbW9yeUlPLCBzaXplb2YobWVtb3J5SU8pLAorICAgICAgICAgICBXT0xGTUVNX0lPX1BPT0xfRklYRUQgfCBXT0xGTUVNX1RSQUNLX1NUQVRTLCAxKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIGxvYWQgc3RhdGljIG1lbW9yeSIpOworICAgIH0KKyNlbHNlCisgICAgaWYgKG1ldGhvZCAhPSBOVUxMKSB7CisgICAgICAgIGN0eCA9IHdvbGZTU0xfQ1RYX25ldyhtZXRob2QoTlVMTCkpOworICAgICAgICBpZiAoY3R4ID09IE5VTEwpCisgICAgICAgICAgICBlcnJfc3lzKCJ1bmFibGUgdG8gZ2V0IGN0eCIpOworICAgIH0KKyNlbmRpZgorICAgIGlmIChtaW5WZXJzaW9uICE9IENMSUVOVF9JTlZBTElEX1ZFUlNJT04pIHsKKyAgICAgICAgd29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihjdHgsIG1pblZlcnNpb24pOworICAgIH0KKyAgICBpZiAoc2ltdWxhdGVXYW50V3JpdGUpIHsKKyAgICAjaWZkZWYgVVNFX1dPTEZTU0xfSU8KKyAgICAgICAgd29sZlNTTF9DVFhfU2V0SU9TZW5kKGN0eCwgU2ltdWxhdGVXYW50V3JpdGVJT1NlbmRDYik7CisgICAgI2VuZGlmCisgICAgfQorCisjaWZkZWYgU0lOR0xFX1RIUkVBREVECisgICAgaWYgKHdvbGZTU0xfQ1RYX25ld19ybmcoY3R4KSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICBlcnJfc3lzKCJTaW5nbGUgVGhyZWFkZWQgbmV3IHJuZyBhdCBDVFggZmFpbGVkIik7CisgICAgfQorI2VuZGlmCisKKworCisjaWZkZWYgV09MRlNTTF9XT0xGU0VOVFJZX0hPT0tTCisgICAgaWYgKHdvbGZzZW50cnlfc2V0dXAoJndvbGZzZW50cnksIHdvbGZzZW50cnlfY29uZmlnX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9ST1VURV9GTEFHX0RJUkVDVElPTl9PVVQpIDwgMCkgeworICAgICAgICBlcnJfc3lzKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3b2xmU2VudHJ5Iik7CisgICAgfQorCisgICAgaWYgKHdvbGZTU0xfQ1RYX3NldF9Db25uZWN0RmlsdGVyKAorICAgICAgICAgICAgY3R4LAorICAgICAgICAgICAgKE5ldHdvcmtGaWx0ZXJDYWxsYmFja190KXdvbGZTZW50cnlfTmV0d29ya0ZpbHRlckNhbGxiYWNrLAorICAgICAgICAgICAgd29sZnNlbnRyeSkgPCAwKSB7CisgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byBpbnN0YWxsIHdvbGZTZW50cnlfTmV0d29ya0ZpbHRlckNhbGxiYWNrIik7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoY2lwaGVyTGlzdCAmJiAhdXNlRGVmQ2lwaGVyTGlzdCkgeworICAgICAgICBpZiAod29sZlNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGN0eCwgY2lwaGVyTGlzdCkgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICBlcnJfc3lzKCJjbGllbnQgY2FuJ3Qgc2V0IGNpcGhlciBsaXN0IDEiKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmZGVmIFdPTEZTU0xfTEVBTlBTSworICAgIGlmICghdXNlUHNrKSB7CisgICAgICAgIHVzZVBzayA9IDE7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE5PX1JTQSkgJiYgIWRlZmluZWQoSEFWRV9FQ0MpICYmICFkZWZpbmVkKEhBVkVfRUQyNTUxOSkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmluZWQoSEFWRV9FRDQ0OCkKKyAgICBpZiAoIXVzZVBzaykgeworICAgICAgICB1c2VQc2sgPSAxOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKGZld2VyUGFja2V0cykKKyAgICAgICAgd29sZlNTTF9DVFhfc2V0X2dyb3VwX21lc3NhZ2VzKGN0eCk7CisjaWYgKGRlZmluZWQoV09MRlNTTF9TQ1RQKSB8fCBkZWZpbmVkKFdPTEZTU0xfRFRMU19NVFUpKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoV09MRlNTTF9EVExTKQorICAgIGlmIChkdGxzTVRVKQorICAgICAgICB3b2xmU1NMX0NUWF9kdGxzX3NldF9tdHUoY3R4LCBkdGxzTVRVKTsKKyNlbmRpZgorCisjaWZuZGVmIE5PX0RICisgICAgaWYgKHdvbGZTU0xfQ1RYX1NldE1pbkRoS2V5X1N6KGN0eCwgKHdvcmQxNiltaW5EaEtleUJpdHMpCisgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgZXJyX3N5cygiRXJyb3Igc2V0dGluZyBtaW5pbXVtIERIIGtleSBzaXplIik7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAodXNlUHNrKSB7CisjaWZuZGVmIE5PX1BTSworICAgICAgICBjb25zdCBjaGFyICpkZWZhdWx0Q2lwaGVyTGlzdCA9IGNpcGhlckxpc3Q7CisKKyAgICAgICAgd29sZlNTTF9DVFhfc2V0X3Bza19jbGllbnRfY2FsbGJhY2soY3R4LCBteV9wc2tfY2xpZW50X2NiKTsKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgI2lmICFkZWZpbmVkKFdPTEZTU0xfUFNLX1RMUzEzX0NCKSAmJiAhZGVmaW5lZChXT0xGU1NMX1BTS19PTkVfSUQpCisgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9wc2tfY2xpZW50X2NzX2NhbGxiYWNrKGN0eCwgbXlfcHNrX2NsaWVudF9jc19jYik7CisgICAgI2Vsc2UKKyAgICAgICAgd29sZlNTTF9DVFhfc2V0X3Bza19jbGllbnRfdGxzMTNfY2FsbGJhY2soY3R4LCBteV9wc2tfY2xpZW50X3RsczEzX2NiKTsKKyAgICAjZW5kaWYKKyNlbmRpZgorICAgICAgICBpZiAoZGVmYXVsdENpcGhlckxpc3QgPT0gTlVMTCkgeworICAgICAgICAjaWYgZGVmaW5lZChIQVZFX0FFU0dDTSkgJiYgIWRlZmluZWQoTk9fREgpCisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9UTFMxMworICAgICAgICAgICAgICAgIGRlZmF1bHRDaXBoZXJMaXN0ID0gIlRMUzEzLUFFUzEyOC1HQ00tU0hBMjU2IgorICAgICAgICAgICAgICAgICNpZm5kZWYgV09MRlNTTF9OT19UTFMxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjpESEUtUFNLLUFFUzEyOC1HQ00tU0hBMjU2IgorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgZGVmYXVsdENpcGhlckxpc3QgPSAiREhFLVBTSy1BRVMxMjgtR0NNLVNIQTI1NiI7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VsaWYgZGVmaW5lZChIQVZFX0FFU0dDTSkgJiYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKQorICAgICAgICAgICAgICAgIGRlZmF1bHRDaXBoZXJMaXN0ID0gIlRMUzEzLUFFUzEyOC1HQ00tU0hBMjU2IgorICAgICAgICAgICAgICAgICNpZm5kZWYgV09MRlNTTF9OT19UTFMxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjpQU0stQUVTMTI4LUdDTS1TSEEyNTYiCisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgOworICAgICAgICAjZWxpZiBkZWZpbmVkKEhBVkVfTlVMTF9DSVBIRVIpCisgICAgICAgICAgICAgICAgZGVmYXVsdENpcGhlckxpc3QgPSAiUFNLLU5VTEwtU0hBMjU2IjsKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICBkZWZhdWx0Q2lwaGVyTGlzdCA9ICJQU0stQUVTMTI4LUNCQy1TSEEyNTYiOworICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGlmICh3b2xmU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoY3R4LCBkZWZhdWx0Q2lwaGVyTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9V09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgICAgIGVycl9zeXMoImNsaWVudCBjYW4ndCBzZXQgY2lwaGVyIGxpc3QgMiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9wc2tfY2FsbGJhY2tfY3R4KGN0eCwgKHZvaWQqKWRlZmF1bHRDaXBoZXJMaXN0KTsKKyNlbmRpZgorICAgICAgICBpZiAodXNlQ2xpZW50Q2VydCkgeworICAgICAgICAgICAgdXNlQ2xpZW50Q2VydCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodXNlQW5vbikgeworI2lmZGVmIEhBVkVfQU5PTgorICAgICAgICBpZiAoY2lwaGVyTGlzdCA9PSBOVUxMIHx8IChjaXBoZXJMaXN0ICYmIHVzZURlZkNpcGhlckxpc3QpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBkZWZhdWx0Q2lwaGVyTGlzdDsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2FsbG93X2Fub25fY2lwaGVyKGN0eCk7CisgICAgICAgICAgICBkZWZhdWx0Q2lwaGVyTGlzdCA9ICJBREgtQUVTMjU2LUdDTS1TSEEzODQ6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQURILUFFUzEyOC1TSEEiOworICAgICAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChjdHgsZGVmYXVsdENpcGhlckxpc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJjbGllbnQgY2FuJ3Qgc2V0IGNpcGhlciBsaXN0IDQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmICh1c2VDbGllbnRDZXJ0KSB7CisgICAgICAgICAgICB1c2VDbGllbnRDZXJ0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworI2lmZGVmIFdPTEZTU0xfU0NUUAorICAgIGlmIChkdGxzU0NUUCkKKyAgICAgICAgd29sZlNTTF9DVFhfZHRsc19zZXRfc2N0cChjdHgpOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0VOQ1JZUFRFRF9LRVlTCisgICAgd29sZlNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKGN0eCwgUGFzc3dvcmRDYWxsQmFjayk7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfU05JRkZFUgorICAgIGlmIChjaXBoZXJMaXN0ID09IE5VTEwgJiYgdmVyc2lvbiA8IDQpIHsKKyAgICAgICAgLyogc3RhdGljIFJTQSBvciBFQ0MgY2lwaGVyIHN1aXRlcyAqLworICAgICAgICBjb25zdCBjaGFyKiBzdGF0aWNDaXBoZXJMaXN0ID0gIkFFUzEyOC1TSEE6RUNESC1FQ0RTQS1BRVMxMjgtU0hBIjsKKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChjdHgsIHN0YXRpY0NpcGhlckxpc3QpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygiY2xpZW50IGNhbid0IHNldCBjaXBoZXIgbGlzdCAzIik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfT0NTUAorICAgIGlmICh1c2VPY3NwKSB7CisgICAgI2lmIGRlZmluZWQoSEFWRV9JT19USU1FT1VUKSAmJiBkZWZpbmVkKEhBVkVfSFRUUF9DTElFTlQpCisgICAgICAgIHdvbGZJT19TZXRUaW1lb3V0KERFRkFVTFRfVElNRU9VVF9TRUMpOworICAgICNlbmRpZgorCisgICAgICAgIGlmIChvY3NwVXJsICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX1NldE9DU1BfT3ZlcnJpZGVVUkwoY3R4LCBvY3NwVXJsKTsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX0VuYWJsZU9DU1AoY3R4LCBXT0xGU1NMX09DU1BfTk9fTk9OQ0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdPTEZTU0xfT0NTUF9VUkxfT1ZFUlJJREUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgd29sZlNTTF9DVFhfRW5hYmxlT0NTUChjdHgsIFdPTEZTU0xfT0NTUF9DSEVDS0FMTCk7CisgICAgICAgIH0KKworICAgICNpZmRlZiBXT0xGU1NMX05PTkJMT0NLX09DU1AKKyAgICAgICAgd29sZlNTTF9DVFhfU2V0T0NTUF9DYihjdHgsIE9DU1BJT0NiLCBPQ1NQUmVzcEZyZWVDYiwgTlVMTCk7CisgICAgI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBVU0VSX0NBX0NCCisgICAgd29sZlNTTF9DVFhfU2V0Q0FDYihjdHgsIENhQ2IpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfRVhUX0NBQ0hFKSAmJiAhZGVmaW5lZChOT19TRVNTSU9OX0NBQ0hFKQorICAgIHdvbGZTU0xfQ1RYX3Nlc3Nfc2V0X2dldF9jYihjdHgsIG15U2Vzc0dldENiKTsKKyAgICB3b2xmU1NMX0NUWF9zZXNzX3NldF9uZXdfY2IoY3R4LCBteVNlc3NOZXdDYik7CisgICAgd29sZlNTTF9DVFhfc2Vzc19zZXRfcmVtb3ZlX2NiKGN0eCwgbXlTZXNzUmVtQ2IpOworI2VuZGlmCisKKyNpZm5kZWYgTk9fQ0VSVFMKKyAgICBpZiAodXNlQ2xpZW50Q2VydCAmJiAhbG9hZENlcnRLZXlJbnRvU1NMT2JqKXsKKyAgICAjaWZkZWYgTk9fRklMRVNZU1RFTQorICAgICAgICBpZiAod29sZlNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2J1ZmZlcihjdHgsIGNsaWVudF9jZXJ0X2Rlcl8yMDQ4LAorICAgICAgICAgICAgc2l6ZW9mX2NsaWVudF9jZXJ0X2Rlcl8yMDQ4KSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBsb2FkIGNsaWVudCBjZXJ0IGJ1ZmZlciIpOworICAgICNlbGlmICFkZWZpbmVkKFRFU1RfTE9BRF9CVUZGRVIpCisgICAgICAgIGlmICh3b2xmU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShjdHgsIG91ckNlcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBjbGllbnQgY2VydCBmaWxlLCBjaGVjayBmaWxlIGFuZCBydW4gZnJvbSIKKyAgICAgICAgICAgICAgICAgICAgIiB3b2xmU1NMIGhvbWUgZGlyIik7CisgICAgICAgIH0KKyAgICAjZWxzZQorICAgICAgICBsb2FkX2J1ZmZlcihjdHgsIG91ckNlcnQsIFdPTEZTU0xfQ0VSVF9DSEFJTik7CisgICAgI2VuZGlmCisgICAgfQorCisgICAgI2lmZGVmIEhBVkVfUEtfQ0FMTEJBQ0tTCisgICAgICAgIHBrQ2JJbmZvLm91cktleSA9IG91cktleTsKKyAgICAjZW5kaWYKKyAgICBpZiAodXNlQ2xpZW50Q2VydCAmJiAhbG9hZENlcnRLZXlJbnRvU1NMT2JqCisgICAgI2lmIGRlZmluZWQoSEFWRV9QS19DQUxMQkFDS1MpICYmIGRlZmluZWQoVEVTVF9QS19QUklWS0VZKQorICAgICAgICAmJiAhcGtDYWxsYmFja3MKKyAgICAjZW5kaWYKKyAgICApIHsKKyAgICAjaWZkZWYgTk9fRklMRVNZU1RFTQorICAgICAgICBpZiAod29sZlNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfYnVmZmVyKGN0eCwgY2xpZW50X2tleV9kZXJfMjA0OCwKKyAgICAgICAgICAgIHNpemVvZl9jbGllbnRfa2V5X2Rlcl8yMDQ4LCBTU0xfRklMRVRZUEVfQVNOMSkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBjbGllbnQgcHJpdmF0ZSBrZXkgYnVmZmVyIik7CisgICAgI2VsaWYgIWRlZmluZWQoVEVTVF9MT0FEX0JVRkZFUikKKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY3R4LCBvdXJLZXksIFdPTEZTU0xfRklMRVRZUEVfUEVNKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgY2xpZW50IHByaXZhdGUga2V5IGZpbGUsIGNoZWNrIGZpbGUgYW5kIHJ1biAiCisgICAgICAgICAgICAgICAgICAgICJmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAgICAgfQorICAgICNlbHNlCisgICAgICAgIGxvYWRfYnVmZmVyKGN0eCwgb3VyS2V5LCBXT0xGU1NMX0tFWSk7CisgICAgI2VuZGlmCisgICAgfQorCisgICAgaWYgKCF1c2VQc2sgJiYgIXVzZUFub24gJiYgIXVzZVZlcmlmeUNiICYmIG15VmVyaWZ5QWN0aW9uICE9IFZFUklGWV9GT1JDRV9GQUlMKSB7CisgICAgI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpICYmIGRlZmluZWQoV09MRlNTTF9DRVJUX0dFTikgJiYgXAorICAgIChkZWZpbmVkKFdPTEZTU0xfQ0VSVF9SRVEpIHx8IGRlZmluZWQoV09MRlNTTF9DRVJUX0VYVCkpICYmIFwKKyAgICAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX0RJUikKKyAgICAgICAgaWYgKHVzZUNlcnRGb2xkZXIpIHsKKyAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9TVE9SRSAgICAgICpzdG9yZTsKKyAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9MT09LVVAgICAgICpsb29rdXA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0b3JlID0gd29sZlNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoY3R4KTsKKyAgICAgICAgICAgIGlmIChzdG9yZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGdldCBXT0xGU1NMX1g1MDlfU1RPUkUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvb2t1cCA9IHdvbGZTU0xfWDUwOV9TVE9SRV9hZGRfbG9va3VwKHN0b3JlLCBYNTA5X0xPT0tVUF9oYXNoX2RpcigpKTsKKyAgICAgICAgICAgIGlmIChsb29rdXAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBhZGQgbG9va3VwIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod29sZlNTTF9YNTA5X0xPT0tVUF9jdHJsKGxvb2t1cCwgV09MRlNTTF9YNTA5X0xfQUREX0RJUiwgY2FDZXJ0Rm9sZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNLCBOVUxMKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJYNTA5X0xPT0tVUF9jdHJsIHcvIExfQUREX0RJUiBmYWlsZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgTk9fRklMRVNZU1RFTQorICAgICAgICBpZiAod29sZlNTTF9DVFhfbG9hZF92ZXJpZnlfYnVmZmVyKGN0eCwgY2FfY2VydF9kZXJfMjA0OCwKKyAgICAgICAgICAgIHNpemVvZl9jYV9jZXJ0X2Rlcl8yMDQ4LCBTU0xfRklMRVRZUEVfQVNOMSkgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBsb2FkIGNhIGJ1ZmZlciwgUGxlYXNlIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAgICAgfQorICAgICNlbGlmICFkZWZpbmVkKFRFU1RfTE9BRF9CVUZGRVIpCisgICAgICAgIHVuc2lnbmVkIGludCB2ZXJpZnlfZmxhZ3MgPSAwOworICAgICNpZmRlZiBURVNUX0JFRk9SRV9EQVRFCisgICAgICAgIHZlcmlmeV9mbGFncyB8PSBXT0xGU1NMX0xPQURfRkxBR19EQVRFX0VSUl9PS0FZOworICAgICNlbmRpZgorICAgICAgICBpZiAod29sZlNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zX2V4KGN0eCwgdmVyaWZ5Q2VydCwgMCwgdmVyaWZ5X2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgY2EgZmlsZSwgUGxlYXNlIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAgICAgfQorICAgICNlbHNlCisgICAgICAgIGxvYWRfYnVmZmVyKGN0eCwgdmVyaWZ5Q2VydCwgV09MRlNTTF9DQSk7CisgICAgI2VuZGlmICAvKiAhTk9fRklMRVNZU1RFTSAqLworCisgICAgI2lmZGVmIEhBVkVfRUNDCisgICAgICAgIC8qIGxvYWQgZWNjIHZlcmlmeSB0b28sIGVjaG9zZXJ2ZXIgdXNlcyBpdCBieSBkZWZhdWx0IHcvIGVjYyAqLworICAgICAgICAjaWZkZWYgTk9fRklMRVNZU1RFTQorICAgICAgICBpZiAod29sZlNTTF9DVFhfbG9hZF92ZXJpZnlfYnVmZmVyKGN0eCwgY2FfZWNjX2NlcnRfZGVyXzI1NiwKKyAgICAgICAgICAgICAgICBzaXplb2ZfY2FfZWNjX2NlcnRfZGVyXzI1NiwgU1NMX0ZJTEVUWVBFX0FTTjEpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBlY2MgY2EgYnVmZmVyIik7CisgICAgICAgIH0KKyAgICAgICAgI2VsaWYgIWRlZmluZWQoVEVTVF9MT0FEX0JVRkZFUikKKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9uc19leChjdHgsIGVjY0NlcnRGaWxlLCAwLCB2ZXJpZnlfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBlY2MgY2EgZmlsZSwgUGxlYXNlIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAgICAgfQorICAgICAgICAjZWxzZQorICAgICAgICBsb2FkX2J1ZmZlcihjdHgsIGVjY0NlcnRGaWxlLCBXT0xGU1NMX0NBKTsKKyAgICAgICAgI2VuZGlmIC8qICFURVNUX0xPQURfQlVGRkVSICovCisgICAgI2VuZGlmIC8qIEhBVkVfRUNDICovCisgICAgI2lmIGRlZmluZWQoV09MRlNTTF9UUlVTVF9QRUVSX0NFUlQpICYmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pCisgICAgICAgIGlmICh0cnVzdENlcnQpIHsKKyAgICAgICAgICAgIGlmICgocmV0ID0gd29sZlNTTF9DVFhfdHJ1c3RfcGVlcl9jZXJ0KGN0eCwgdHJ1c3RDZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9GSUxFVFlQRV9QRU0pKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCB0cnVzdGVkIHBlZXIgY2VydCBmaWxlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAjZW5kaWYgLyogV09MRlNTTF9UUlVTVF9QRUVSX0NFUlQgJiYgIU5PX0ZJTEVTWVNURU0gKi8KKyAgICAjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgJiYgZGVmaW5lZChXT0xGU1NMX0NFUlRfR0VOKSAmJiBcCisgICAgKGRlZmluZWQoV09MRlNTTF9DRVJUX1JFUSkgfHwgZGVmaW5lZChXT0xGU1NMX0NFUlRfRVhUKSkgJiYgXAorICAgICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKE5PX1dPTEZTU0xfRElSKQorICAgIH0KKyAgICAjZW5kaWYKKyAgICB9CisgICAgaWYgKHVzZVZlcmlmeUNiIHx8IG15VmVyaWZ5QWN0aW9uID09IFZFUklGWV9GT1JDRV9GQUlMIHx8CisgICAgICAgICAgICBteVZlcmlmeUFjdGlvbiA9PSBWRVJJRllfVVNFX1BSRVZFUkZJWSkgeworICAgICAgICB3b2xmU1NMX0NUWF9zZXRfdmVyaWZ5KGN0eCwgV09MRlNTTF9WRVJJRllfUEVFUiwgbXlWZXJpZnkpOworICAgIH0KKyAgICBlbHNlIGlmICghdXNlUHNrICYmICF1c2VBbm9uICYmIGRvUGVlckNoZWNrID09IDApIHsKKyAgICAgICAgd29sZlNTTF9DVFhfc2V0X3ZlcmlmeShjdHgsIFdPTEZTU0xfVkVSSUZZX05PTkUsIDApOworICAgIH0KKyAgICBlbHNlIGlmICghdXNlUHNrICYmICF1c2VBbm9uICYmIG15VmVyaWZ5QWN0aW9uID09IFZFUklGWV9PVkVSUklERV9EQVRFX0VSUikgeworICAgICAgICB3b2xmU1NMX0NUWF9zZXRfdmVyaWZ5KGN0eCwgV09MRlNTTF9WRVJJRllfUEVFUiwgbXlWZXJpZnkpOworICAgIH0KKyNlbmRpZiAvKiAhTk9fQ0VSVFMgKi8KKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICByZXQgPSB3b2xmQXN5bmNfRGV2T3BlbigmZGV2SWQpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIHByaW50ZigiQXN5bmMgZGV2aWNlIG9wZW4gZmFpbGVkXG5SdW5uaW5nIHdpdGhvdXQgYXN5bmNcbiIpOworICAgIH0KKyAgICB3b2xmU1NMX0NUWF9TZXREZXZJZChjdHgsIGRldklkKTsKKyNlbmRpZiAvKiBXT0xGU1NMX0FTWU5DX0NSWVBUICovCisKKyNpZmRlZiBIQVZFX1NOSQorICAgIGlmIChzbmlIb3N0TmFtZSkgeworICAgICAgICBpZiAod29sZlNTTF9DVFhfVXNlU05JKGN0eCwgV09MRlNTTF9TTklfSE9TVF9OQU1FLCBzbmlIb3N0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgKHdvcmQxNikgWFNUUkxFTihzbmlIb3N0TmFtZSkpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygiVXNlU05JIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisjaWZkZWYgSEFWRV9NQVhfRlJBR01FTlQKKyAgICBpZiAobWF4RnJhZ21lbnQpCisgICAgICAgIGlmICh3b2xmU1NMX0NUWF9Vc2VNYXhGcmFnbWVudChjdHgsIG1heEZyYWdtZW50KSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgIGVycl9zeXMoIlVzZU1heEZyYWdtZW50IGZhaWxlZCIpOworICAgICAgICB9CisjZW5kaWYKKyNpZmRlZiBIQVZFX1RSVU5DQVRFRF9ITUFDCisgICAgaWYgKHRydW5jYXRlZEhNQUMpCisgICAgICAgIGlmICh3b2xmU1NMX0NUWF9Vc2VUcnVuY2F0ZWRITUFDKGN0eCkgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICBlcnJfc3lzKCJVc2VUcnVuY2F0ZWRITUFDIGZhaWxlZCIpOworICAgICAgICB9CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NFU1NJT05fVElDS0VUCisgICAgaWYgKHdvbGZTU0xfQ1RYX1VzZVNlc3Npb25UaWNrZXQoY3R4KSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICBlcnJfc3lzKCJVc2VTZXNzaW9uVGlja2V0IGZhaWxlZCIpOworICAgIH0KKyNlbmRpZgorI2lmZGVmIEhBVkVfRVhURU5ERURfTUFTVEVSCisgICAgaWYgKGRpc2FibGVFeHRNYXN0ZXJTZWNyZXQpCisgICAgICAgIGlmICh3b2xmU1NMX0NUWF9EaXNhYmxlRXh0ZW5kZWRNYXN0ZXJTZWNyZXQoY3R4KSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgIGVycl9zeXMoIkRpc2FibGVFeHRlbmRlZE1hc3RlclNlY3JldCBmYWlsZWQiKTsKKyAgICAgICAgfQorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX1NVUFBPUlRFRF9DVVJWRVMpCisgICAgI2lmIGRlZmluZWQoSEFWRV9DVVJWRTI1NTE5KQorICAgIGlmICh1c2VYMjU1MTkpIHsKKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX1VzZVN1cHBvcnRlZEN1cnZlKGN0eCwgV09MRlNTTF9FQ0NfWDI1NTE5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byBzdXBwb3J0IFgyNTUxOSIpOworICAgICAgICB9CisgICAgfQorICAgICNlbmRpZiAvKiBIQVZFX0NVUlZFMjU1MTkgKi8KKyAgICAjaWYgZGVmaW5lZChIQVZFX0NVUlZFNDQ4KQorICAgIGlmICh1c2VYNDQ4KSB7CisgICAgICAgIGlmICh3b2xmU1NMX0NUWF9Vc2VTdXBwb3J0ZWRDdXJ2ZShjdHgsIFdPTEZTU0xfRUNDX1g0NDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIHN1cHBvcnQgWDQ0OCIpOworICAgICAgICB9CisgICAgfQorICAgICNlbmRpZiAvKiBIQVZFX0NVUlZFNDQ4ICovCisgICAgI2lmZGVmIEhBVkVfRUNDCisgICAgaWYgKHVzZVN1cEN1cnZlKSB7CisgICAgICAgICNpZiAhZGVmaW5lZChOT19FQ0NfU0VDUCkgJiYgXAorICAgICAgICAgICAgKGRlZmluZWQoSEFWRV9FQ0MzODQpIHx8IGRlZmluZWQoSEFWRV9BTExfQ1VSVkVTKSkKKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX1VzZVN1cHBvcnRlZEN1cnZlKGN0eCwgV09MRlNTTF9FQ0NfU0VDUDM4NFIxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byBzdXBwb3J0IHNlY3AzODRyMSIpOworICAgICAgICB9CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWYgIWRlZmluZWQoTk9fRUNDX1NFQ1ApICYmIFwKKyAgICAgICAgICAgICghZGVmaW5lZChOT19FQ0MyNTYpIHx8IGRlZmluZWQoSEFWRV9BTExfQ1VSVkVTKSkKKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX1VzZVN1cHBvcnRlZEN1cnZlKGN0eCwgV09MRlNTTF9FQ0NfU0VDUDI1NlIxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byBzdXBwb3J0IHNlY3AyNTZyMSIpOworICAgICAgICB9CisgICAgICAgICNlbmRpZgorICAgIH0KKyAgICAjZW5kaWYgLyogSEFWRV9FQ0MgKi8KKyAgICAjaWZkZWYgSEFWRV9GRkRIRV8yMDQ4CisgICAgaWYgKHVzZVN1cEN1cnZlKSB7CisgICAgICAgIGlmICh3b2xmU1NMX0NUWF9Vc2VTdXBwb3J0ZWRDdXJ2ZShjdHgsIFdPTEZTU0xfRkZESEVfMjA0OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICBlcnJfc3lzKCJ1bmFibGUgdG8gc3VwcG9ydCBGRkRIRSAyMDQ4Iik7CisgICAgICAgIH0KKyAgICB9CisgICAgI2VuZGlmCisjZW5kaWYgLyogSEFWRV9TVVBQT1JURURfQ1VSVkVTICovCisKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgaWYgKG5vUHNrRGhlS2UpCisgICAgICAgIHdvbGZTU0xfQ1RYX25vX2RoZV9wc2soY3R4KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9UTFMxMykgJiYgZGVmaW5lZChXT0xGU1NMX1BPU1RfSEFORFNIQUtFX0FVVEgpCisgICAgaWYgKHBvc3RIYW5kQXV0aCkKKyAgICAgICAgd29sZlNTTF9DVFhfYWxsb3dfcG9zdF9oYW5kc2hha2VfYXV0aChjdHgpOworI2VuZGlmCisKKyAgICBpZiAoYmVuY2htYXJrKSB7CisgICAgICAgICgoZnVuY19hcmdzKilhcmdzKS0+cmV0dXJuX2NvZGUgPQorICAgICAgICAgICAgQ2xpZW50QmVuY2htYXJrQ29ubmVjdGlvbnMoY3R4LCBob3N0LCBwb3J0LCBkdGxzVURQLCBkdGxzU0NUUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlbmNobWFyaywgcmVzdW1lU2Vzc2lvbiwgdXNlWDI1NTE5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlWDQ0OCwgaGVsbG9SZXRyeSwgb25seUtleVNoYXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiwgZWFybHlEYXRhKTsKKyAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICBYRVhJVF9UKEVYSVRfU1VDQ0VTUyk7CisgICAgfQorCisgICAgaWYgKHRocm91Z2hwdXQpIHsKKyAgICAgICAgKChmdW5jX2FyZ3MqKWFyZ3MpLT5yZXR1cm5fY29kZSA9CisgICAgICAgICAgICBDbGllbnRCZW5jaG1hcmtUaHJvdWdocHV0KGN0eCwgaG9zdCwgcG9ydCwgZHRsc1VEUCwgZHRsc1NDVFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCB0aHJvdWdocHV0LCB1c2VYMjU1MTksIHVzZVg0NDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRXaXRoUmV0LCB2ZXJzaW9uLCBvbmx5S2V5U2hhcmUpOworICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgIGlmICghZXhpdFdpdGhSZXQpCisgICAgICAgICAgICBYRVhJVF9UKEVYSVRfU1VDQ0VTUyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX01ES19BUk0pCisgICAgd29sZlNTTF9DVFhfc2V0X3ZlcmlmeShjdHgsIFdPTEZTU0xfVkVSSUZZX05PTkUsIDApOworICAgICNlbmRpZgorCisgICAgI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkKKyAgICBpZiAod29sZlNTTF9DVFhfZ2V0X3JlYWRfYWhlYWQoY3R4KSAhPSAwKSB7CisgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgZXJyX3N5cygiYmFkIHJlYWQgYWhlYWQgZGVmYXVsdCB2YWx1ZSIpOworICAgIH0KKyAgICBpZiAod29sZlNTTF9DVFhfc2V0X3JlYWRfYWhlYWQoY3R4LCAxKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICBlcnJfc3lzKCJlcnJvciBzZXR0aW5nIHJlYWQgYWhlYWQgdmFsdWUiKTsKKyAgICB9CisgICAgI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfU1RBVElDX01FTU9SWSkgJiYgZGVmaW5lZChERUJVR19XT0xGU1NMKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJlZm9yZSBjcmVhdGluZyBTU0xcbiIpOworICAgICAgICBpZiAod29sZlNTTF9DVFhfaXNfc3RhdGljX21lbW9yeShjdHgsICZtZW1fc3RhdHMpICE9IDEpCisgICAgICAgICAgICBlcnJfc3lzKCJjdHggbm90IHVzaW5nIHN0YXRpYyBtZW1vcnkiKTsKKyAgICAgICAgaWYgKHdvbGZTU0xfUHJpbnRTdGF0cygmbWVtX3N0YXRzKSAhPSAxKSAvKiBmdW5jdGlvbiBpbiB0ZXN0LmggKi8KKyAgICAgICAgICAgIGVycl9zeXMoImVycm9yIHByaW50aW5nIG91dCBtZW1vcnkgc3RhdHMiKTsKKyNlbmRpZgorCisgICAgaWYgKGRvTWNhc3QpIHsKKyNpZmRlZiBXT0xGU1NMX01VTFRJQ0FTVAorICAgICAgICB3b2xmU1NMX0NUWF9tY2FzdF9zZXRfbWVtYmVyX2lkKGN0eCwgbWNhc3RJRCk7CisgICAgICAgIGlmICh3b2xmU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoY3R4LCAiV0RNLU5VTEwtU0hBMjU2IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICBlcnJfc3lzKCJDb3VsZG4ndCBzZXQgbXVsdGljYXN0IGNpcGhlciBsaXN0LiIpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyNpZmRlZiBIQVZFX1BLX0NBTExCQUNLUworICAgIGlmIChwa0NhbGxiYWNrcykKKyAgICAgICAgU2V0dXBQa0NhbGxiYWNrcyhjdHgpOworI2VuZGlmCisKKyAgICBzc2wgPSB3b2xmU1NMX25ldyhjdHgpOworICAgIGlmIChzc2wgPT0gTlVMTCkgeworICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byBnZXQgU1NMIG9iamVjdCIpOworICAgIH0KKworI2lmbmRlZiBOT19QU0sKKyAgICBpZiAodXNlUHNrKSB7CisgICAgI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgJiYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBkZWZpbmVkKFRFU1RfUFNLX1VTRV9TRVNTSU9OKQorICAgICAgICBTU0xfc2V0X3Bza191c2Vfc2Vzc2lvbl9jYWxsYmFjayhzc2wsIG15X3Bza191c2Vfc2Vzc2lvbl9jYik7CisgICAgI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyNpZm5kZWYgTk9fQ0VSVFMKKyAgICBpZiAodXNlQ2xpZW50Q2VydCAmJiBsb2FkQ2VydEtleUludG9TU0xPYmopeworICAgICNpZmRlZiBOT19GSUxFU1lTVEVNCisgICAgICAgIGlmICh3b2xmU1NMX3VzZV9jZXJ0aWZpY2F0ZV9idWZmZXIoc3NsLCBjbGllbnRfY2VydF9kZXJfMjA0OCwKKyAgICAgICAgICAgIHNpemVvZl9jbGllbnRfY2VydF9kZXJfMjA0OCwgU1NMX0ZJTEVUWVBFX0FTTjEpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBjbGllbnQgY2VydCBidWZmZXIiKTsKKyAgICAgICAgfQorICAgICNlbGlmICFkZWZpbmVkKFRFU1RfTE9BRF9CVUZGRVIpCisgICAgICAgIGlmICh3b2xmU1NMX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKHNzbCwgb3VyQ2VydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBsb2FkIGNsaWVudCBjZXJ0IGZpbGUsIGNoZWNrIGZpbGUgYW5kIHJ1biBmcm9tIgorICAgICAgICAgICAgICAgICAgICAiIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAgICAgfQorICAgICNlbHNlCisgICAgICAgIGxvYWRfc3NsX2J1ZmZlcihzc2wsIG91ckNlcnQsIFdPTEZTU0xfQ0VSVF9DSEFJTik7CisgICAgI2VuZGlmCisgICAgfQorCisgICAgaWYgKGxvYWRDZXJ0S2V5SW50b1NTTE9iagorICAgICNpZiBkZWZpbmVkKEhBVkVfUEtfQ0FMTEJBQ0tTKSAmJiBkZWZpbmVkKFRFU1RfUEtfUFJJVktFWSkKKyAgICAgICAgJiYgIXBrQ2FsbGJhY2tzCisgICAgI2VuZGlmCisgICAgKSB7CisgICAgI2lmZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2J1ZmZlcihjdHgsIGNsaWVudF9rZXlfZGVyXzIwNDgsCisgICAgICAgICAgICBzaXplb2ZfY2xpZW50X2tleV9kZXJfMjA0OCwgU1NMX0ZJTEVUWVBFX0FTTjEpICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgY2xpZW50IHByaXZhdGUga2V5IGJ1ZmZlciIpOworICAgICNlbGlmICFkZWZpbmVkKFRFU1RfTE9BRF9CVUZGRVIpCisgICAgICAgIGlmICh3b2xmU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGUoc3NsLCBvdXJLZXksIFdPTEZTU0xfRklMRVRZUEVfUEVNKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgY2xpZW50IHByaXZhdGUga2V5IGZpbGUsIGNoZWNrIGZpbGUgYW5kIHJ1biAiCisgICAgICAgICAgICAgICAgICAgICJmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAgICAgfQorICAgICNlbHNlCisgICAgICAgIGxvYWRfc3NsX2J1ZmZlcihzc2wsIG91cktleSwgV09MRlNTTF9LRVkpOworICAgICNlbmRpZgorICAgIH0KKyNlbmRpZiAvKiAhTk9fQ0VSVFMgKi8KKworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgICB3b2xmU1NMX0tlZXBBcnJheXMoc3NsKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXT0xGU1NMX1NUQVRJQ19NRU1PUlkpICYmIGRlZmluZWQoREVCVUdfV09MRlNTTCkKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkFmdGVyIGNyZWF0aW5nIFNTTFxuIik7CisgICAgaWYgKHdvbGZTU0xfQ1RYX2lzX3N0YXRpY19tZW1vcnkoY3R4LCAmbWVtX3N0YXRzKSAhPSAxKQorICAgICAgICBlcnJfc3lzKCJjdHggbm90IHVzaW5nIHN0YXRpYyBtZW1vcnkiKTsKKyAgICBpZiAod29sZlNTTF9QcmludFN0YXRzKCZtZW1fc3RhdHMpICE9IDEpIC8qIGZ1bmN0aW9uIGluIHRlc3QuaCAqLworICAgICAgICAgICAgZXJyX3N5cygiZXJyb3IgcHJpbnRpbmcgb3V0IG1lbW9yeSBzdGF0cyIpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIGRlZmluZWQoSEFWRV9TVVBQT1JURURfQ1VSVkVTKQorICAgIGlmICghaGVsbG9SZXRyeSAmJiB2ZXJzaW9uID49IDQpIHsKKyAgICAgICAgU2V0S2V5U2hhcmUoc3NsLCBvbmx5S2V5U2hhcmUsIHVzZVgyNTUxOSwgdXNlWDQ0OCwgMCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB3b2xmU1NMX05vS2V5U2hhcmVzKHNzbCk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoZG9NY2FzdCkgeworI2lmZGVmIFdPTEZTU0xfTVVMVElDQVNUCisgICAgICAgIC8qIERUTFMgbXVsdGljYXN0IHNlY3JldCBmb3IgdGVzdGluZyBvbmx5ICovCisgICAgICAgICNkZWZpbmUgQ0xJX1NSVl9SQU5ET01fU1ogMzIgICAgIC8qIFJBTl9MRU4gKHNlZSBpbnRlcm5hbC5oKSAqLworICAgICAgICAjZGVmaW5lIFBNU19TWiAgICAgICAgICAgIDUxMiAgICAvKiBFTkNSWVBUX0xFTiAoc2VlIGludGVybmFsLmgpICovCisgICAgICAgIGJ5dGUgcG1zW1BNU19TWl07ICAgICAgICAgICAgICAgIC8qIHByZSBtYXN0ZXIgc2VjcmV0ICovCisgICAgICAgIGJ5dGUgY3JbQ0xJX1NSVl9SQU5ET01fU1pdOyAgICAgIC8qIGNsaWVudCByYW5kb20gKi8KKyAgICAgICAgYnl0ZSBzcltDTElfU1JWX1JBTkRPTV9TWl07ICAgICAgLyogc2VydmVyIHJhbmRvbSAqLworICAgICAgICBjb25zdCBieXRlIHN1aXRlWzJdID0gezAsIDB4ZmV9OyAvKiBXRE1fV0lUSF9OVUxMX1NIQTI1NiAqLworCisgICAgICAgIFhNRU1TRVQocG1zLCAweDIzLCBzaXplb2YocG1zKSk7CisgICAgICAgIFhNRU1TRVQoY3IsIDB4QTUsIHNpemVvZihjcikpOworICAgICAgICBYTUVNU0VUKHNyLCAweDVBLCBzaXplb2Yoc3IpKTsKKworICAgICAgICBpZiAod29sZlNTTF9zZXRfc2VjcmV0KHNzbCwgMSwgcG1zLCBzaXplb2YocG1zKSwgY3IsIHNyLCBzdWl0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICBlcnJfc3lzKCJ1bmFibGUgdG8gc2V0IG1jYXN0IHNlY3JldCIpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICAjaWZkZWYgSEFWRV9TRVNTSU9OX1RJQ0tFVAorICAgIHdvbGZTU0xfc2V0X1Nlc3Npb25UaWNrZXRfY2Ioc3NsLCBzZXNzaW9uVGlja2V0Q0IsICh2b2lkKikiaW5pdGlhbCBzZXNzaW9uIik7CisgICAgI2VuZGlmCisKKyNpZmRlZiBIQVZFX1RSVVNURURfQ0EKKyAgICBpZiAodHJ1c3RlZENhS2V5SWQpIHsKKyAgICAgICAgaWYgKHdvbGZTU0xfVXNlVHJ1c3RlZENBKHNzbCwgV09MRlNTTF9UUlVTVEVEX0NBX1BSRV9BR1JFRUQsCisgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgZXJyX3N5cygiVXNlVHJ1c3RlZENBIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisjaWZkZWYgSEFWRV9BTFBOCisgICAgaWYgKGFscG5MaXN0ICE9IE5VTEwpIHsKKyAgICAgICBwcmludGYoIkFMUE4gYWNjZXB0ZWQgcHJvdG9jb2xzIGxpc3QgOiAlc1xuIiwgYWxwbkxpc3QpOworICAgICAgIHdvbGZTU0xfVXNlQUxQTihzc2wsIGFscG5MaXN0LCAod29yZDMyKVhTVFJMRU4oYWxwbkxpc3QpLCBhbHBuX29wdCk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1QpIHx8IFwKKyAgICBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1RfVjIpCisgICAgaWYgKHN0YXR1c1JlcXVlc3QpIHsKKyAgICAgICAgaWYgKHZlcnNpb24gPT0gNCAmJgorICAgICAgICAgICAgKHN0YXR1c1JlcXVlc3QgPT0gT0NTUF9TVEFQTElOR1YyIHx8IFwKKyAgICAgICAgICAgICBzdGF0dXNSZXF1ZXN0ID09IE9DU1BfU1RBUExJTkdWMl9NVUxUSSkpIHsKKyAgICAgICAgICAgIGVycl9zeXMoIkNhbm5vdCB1c2UgT0NTUCBTdGFwbGluZyBWMiB3aXRoIFRMU3YxLjMiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3b2xmU1NMX0NUWF9FbmFibGVPQ1NQU3RhcGxpbmcoY3R4KSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBlbmFibGUgT0NTUCBTdGFwbGluZyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIik7CisgICAgICAgIGlmIChtdXN0U3RhcGxlKSB7CisgICAgICAgICAgICBpZiAod29sZlNTTF9DVFhfRW5hYmxlT0NTUE11c3RTdGFwbGUoY3R4KSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgZW5hYmxlIE9DU1AgTXVzdCBTdGFwbGUiKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoc3RhdHVzUmVxdWVzdCkgeworICAgICAgICAjaWZkZWYgSEFWRV9DRVJUSUZJQ0FURV9TVEFUVVNfUkVRVUVTVAorICAgICAgICAgICAgY2FzZSBPQ1NQX1NUQVBMSU5HOgorICAgICAgICAgICAgICAgIGlmICh3b2xmU1NMX1VzZU9DU1BTdGFwbGluZyhzc2wsIFdPTEZTU0xfQ1NSX09DU1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9DU1JfT0NTUF9VU0VfTk9OQ0UpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBlcnJfc3lzKCJVc2VDZXJ0aWZpY2F0ZVN0YXR1c1JlcXVlc3QgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZkZWYgSEFWRV9DRVJUSUZJQ0FURV9TVEFUVVNfUkVRVUVTVF9WMgorICAgICAgICAgICAgY2FzZSBPQ1NQX1NUQVBMSU5HVjI6CisgICAgICAgICAgICAgICAgaWYgKHdvbGZTU0xfVXNlT0NTUFN0YXBsaW5nVjIoc3NsLAorICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0NTUjJfT0NTUCwgV09MRlNTTF9DU1IyX09DU1BfVVNFX05PTkNFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9mcmVlKHNzbCk7IHNzbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgZXJyX3N5cygiVXNlQ2VydGlmaWNhdGVTdGF0dXNSZXF1ZXN0IGZhaWxlZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBPQ1NQX1NUQVBMSU5HVjJfTVVMVEk6CisgICAgICAgICAgICAgICAgaWYgKHdvbGZTU0xfVXNlT0NTUFN0YXBsaW5nVjIoc3NsLAorICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0NTUjJfT0NTUF9NVUxUSSwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZnJlZShzc2wpOyBzc2wgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoIlVzZUNlcnRpZmljYXRlU3RhdHVzUmVxdWVzdCBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGVycl9zeXMoIkludmFsaWQgT0NTUCBTdGFwbGluZyBvcHRpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIHdvbGZTU0xfQ1RYX0VuYWJsZU9DU1AoY3R4LCAwKTsKKyAgICB9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5PX0RIKSAmJiAhZGVmaW5lZChXT0xGU1NMX09MRF9QUklNRV9DSEVDSykgJiYgXAorICAgICFkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkKKyAgICBpZiAoIWRvRGhLZXlDaGVjaykKKyAgICAgICAgd29sZlNTTF9TZXRFbmFibGVEaEtleVRlc3Qoc3NsLCAwKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9FTkNSWVBUX1RIRU5fTUFDCisgICAgaWYgKGRpc2FsbG93RVRNKQorICAgICAgICB3b2xmU1NMX0FsbG93RW5jcnlwdFRoZW5NYWMoc3NsLCAwKTsKKyNlbmRpZgorCisKKyAgICB0Y3BfY29ubmVjdCgmc29ja2ZkLCBob3N0LCBwb3J0LCBkdGxzVURQLCBkdGxzU0NUUCwgc3NsKTsKKyAgICBpZiAod29sZlNTTF9zZXRfZmQoc3NsLCBzb2NrZmQpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICBlcnJfc3lzKCJlcnJvciBpbiBzZXR0aW5nIGZkIik7CisgICAgfQorCisgICAgLyogU1RBUlRUTFMgKi8KKyAgICBpZiAoZG9TVEFSVFRMUykgeworICAgICAgICBpZiAoU3RhcnRUTFNfSW5pdCgmc29ja2ZkKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfZnJlZShzc2wpOyBzc2wgPSBOVUxMOworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygiZXJyb3IgZHVyaW5nIFNUQVJUVExTIHByb3RvY29sIik7CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBIQVZFX0NSTAorICAgIGlmIChkaXNhYmxlQ1JMID09IDAgJiYgIXVzZVZlcmlmeUNiKSB7CisgICAgI2lmIGRlZmluZWQoSEFWRV9JT19USU1FT1VUKSAmJiBkZWZpbmVkKEhBVkVfSFRUUF9DTElFTlQpCisgICAgICAgIHdvbGZJT19TZXRUaW1lb3V0KERFRkFVTFRfVElNRU9VVF9TRUMpOworICAgICNlbmRpZgorCisgICAgICAgIGlmICh3b2xmU1NMX0VuYWJsZUNSTChzc2wsIFdPTEZTU0xfQ1JMX0NIRUNLQUxMKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfZnJlZShzc2wpOyBzc2wgPSBOVUxMOworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgZW5hYmxlIGNybCBjaGVjayIpOworICAgICAgICB9CisgICAgICAgIGlmICh3b2xmU1NMX0xvYWRDUkwoc3NsLCBjcmxQZW1EaXIsIFdPTEZTU0xfRklMRVRZUEVfUEVNLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfZnJlZShzc2wpOyBzc2wgPSBOVUxMOworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBjcmwsIGNoZWNrIGNybGZpbGUgYW5kIGRhdGUgdmFsaWRpdHkiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAod29sZlNTTF9TZXRDUkxfQ2Ioc3NsLCBDUkxfQ2FsbEJhY2spICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgd29sZlNTTF9mcmVlKHNzbCk7IHNzbCA9IE5VTEw7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBzZXQgY3JsIGNhbGxiYWNrIik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9OCisgICAgaWYgKHNjcikgeworICAgICAgICBpZiAod29sZlNTTF9Vc2VTZWN1cmVSZW5lZ290aWF0aW9uKHNzbCkgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGVuYWJsZSBzZWN1cmUgcmVuZWdvdGlhdGlvbiIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisjaWYgZGVmaW5lZChBVE9NSUNfVVNFUikgJiYgIWRlZmluZWQoV09MRlNTTF9BRUFEX09OTFkpCisgICAgaWYgKGF0b21pY1VzZXIpCisgICAgICAgIFNldHVwQXRvbWljVXNlcihjdHgsIHNzbCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1BLX0NBTExCQUNLUworICAgIGlmIChwa0NhbGxiYWNrcykKKyAgICAgICAgU2V0dXBQa0NhbGxiYWNrQ29udGV4dHMoc3NsLCAmcGtDYkluZm8pOworI2VuZGlmCisgICAgaWYgKG1hdGNoTmFtZSAmJiBkb1BlZXJDaGVjaykKKyAgICAgICAgd29sZlNTTF9jaGVja19kb21haW5fbmFtZShzc2wsIGRvbWFpbik7CisjaWZuZGVmIFdPTEZTU0xfQ0FMTEJBQ0tTCisgICAgaWYgKG5vbkJsb2NraW5nKSB7CisjaWZkZWYgV09MRlNTTF9EVExTCisgICAgICAgIGlmIChkb0RUTFMpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfZHRsc19zZXRfdXNpbmdfbm9uYmxvY2soc3NsLCAxKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHRjcF9zZXRfbm9uYmxvY2tpbmcoJnNvY2tmZCk7CisgICAgICAgIHJldCA9IE5vbkJsb2NraW5nU1NMX0Nvbm5lY3Qoc3NsKTsKKyAgICB9CisgICAgZWxzZSB7CisjaWZkZWYgV09MRlNTTF9FQVJMWV9EQVRBCisgICAgICAgIGlmICh1c2VQc2sgJiYgZWFybHlEYXRhKQorICAgICAgICAgICAgRWFybHlEYXRhKGN0eCwgc3NsLCBrRWFybHlNc2csIHNpemVvZihrRWFybHlNc2cpLTEsIGJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAgZG8geworICAgICAgICAgICAgZXJyID0gMDsgLyogcmVzZXQgZXJyb3IgKi8KKyAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfY29ubmVjdChzc2wpOworICAgICAgICAgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBlcnIgPSB3b2xmU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICBpZiAoZXJyID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX0FzeW5jUG9sbChzc2wsIFdPTEZfUE9MTF9GTEFHX0NIRUNLX0hXKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChlcnIgPT0gV0NfUEVORElOR19FKTsKKyAgICB9CisjZWxzZQorICAgIHRpbWVvdXRDb25uZWN0LnR2X3NlYyAgPSBERUZBVUxUX1RJTUVPVVRfU0VDOworICAgIHRpbWVvdXRDb25uZWN0LnR2X3VzZWMgPSAwOworICAgIHJldCA9IE5vbkJsb2NraW5nU1NMX0Nvbm5lY3Qoc3NsKTsgIC8qIHdpbGwga2VlcCByZXRyeWluZyBvbiB0aW1lb3V0ICovCisjZW5kaWYKKyAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICBlcnIgPSB3b2xmU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgICAgICBwcmludGYoIndvbGZTU0xfY29ubmVjdCBlcnJvciAlZCwgJXNcbiIsIGVyciwKKyAgICAgICAgICAgIHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZyhlcnIsIGJ1ZmZlcikpOworCisgICAgICAgIC8qIGNsZWFudXAgKi8KKyAgICAgICAgd29sZlNTTF9mcmVlKHNzbCk7IHNzbCA9IE5VTEw7CisgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgQ2xvc2VTb2NrZXQoc29ja2ZkKTsKKworICAgICAgICBpZiAoIWV4aXRXaXRoUmV0KQorICAgICAgICAgICAgZXJyX3N5cygid29sZlNTTF9jb25uZWN0IGZhaWxlZCIpOworICAgICAgICAvKiBzZWUgbm90ZSBhdCB0b3Agb2YgUkVBRE1FICovCisgICAgICAgIC8qIGlmIHlvdSdyZSBnZXR0aW5nIGFuIGVycm9yIGhlcmUgICovCisKKyAgICAgICAgKChmdW5jX2FyZ3MqKWFyZ3MpLT5yZXR1cm5fY29kZSA9IGVycjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHNob3dQZWVyRXgoc3NsLCBsbmdfaW5kZXgpOworCisgICAgLyogaWYgdGhlIGNhbGxlciByZXF1ZXN0ZWQgYSBwYXJ0aWN1bGFyIGNpcGhlciwgY2hlY2sgaGVyZSB0aGF0IGVpdGhlcgorICAgICAqIGEgY2Fub25pY2FsIG5hbWUgb2YgdGhlIGVzdGFibGlzaGVkIGNpcGhlciBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQKKyAgICAgKiBjaXBoZXIgbmFtZSwgb3IgdGhlIHJlcXVlc3RlZCBjaXBoZXIgbmFtZSBpcyBtYXJrZWQgYXMgYW4gYWxpYXMKKyAgICAgKiB0aGF0IG1hdGNoZXMgdGhlIGVzdGFibGlzaGVkIGNpcGhlci4KKyAgICAgKi8KKyAgICBpZiAoY2lwaGVyTGlzdCAmJiAhdXNlRGVmQ2lwaGVyTGlzdCAmJiAoISBYU1RSU1RSKGNpcGhlckxpc3QsICI6IikpKSB7CisgICAgICAgIFdPTEZTU0xfQ0lQSEVSKiBlc3RhYmxpc2hlZF9jaXBoZXIgPSB3b2xmU1NMX2dldF9jdXJyZW50X2NpcGhlcihzc2wpOworICAgICAgICBieXRlIHJlcXVlc3RlZF9jaXBoZXJTdWl0ZTAsIHJlcXVlc3RlZF9jaXBoZXJTdWl0ZTsKKyAgICAgICAgaW50IHJlcXVlc3RlZF9jaXBoZXJGbGFnczsKKyAgICAgICAgaWYgKGVzdGFibGlzaGVkX2NpcGhlciAmJgorICAgICAgICAgICAgLyogZG9uJ3QgdGVzdCBmb3IgcHNldWRvLWNpcGhlcnMgbGlrZSAiQUxMIiBhbmQgIkRFRkFVTFQiLiAqLworICAgICAgICAgICAgKHdvbGZTU0xfZ2V0X2NpcGhlcl9zdWl0ZV9mcm9tX25hbWUoY2lwaGVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXF1ZXN0ZWRfY2lwaGVyU3VpdGUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlcXVlc3RlZF9jaXBoZXJTdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXF1ZXN0ZWRfY2lwaGVyRmxhZ3MpID09IDApKSB7CisgICAgICAgICAgICB3b3JkMzIgZXN0YWJsaXNoZWRfY2lwaGVyX2lkID0KKyAgICAgICAgICAgICAgICB3b2xmU1NMX0NJUEhFUl9nZXRfaWQoZXN0YWJsaXNoZWRfY2lwaGVyKTsKKyAgICAgICAgICAgIGJ5dGUgZXN0YWJsaXNoZWRfY2lwaGVyU3VpdGUwID0gKGVzdGFibGlzaGVkX2NpcGhlcl9pZCA+PiA4KSAmIDB4ZmY7CisgICAgICAgICAgICBieXRlIGVzdGFibGlzaGVkX2NpcGhlclN1aXRlID0gZXN0YWJsaXNoZWRfY2lwaGVyX2lkICYgMHhmZjsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVzdGFibGlzaGVkX2NpcGhlcl9uYW1lID0KKyAgICAgICAgICAgICAgICB3b2xmU1NMX2dldF9jaXBoZXJfbmFtZV9mcm9tX3N1aXRlKGVzdGFibGlzaGVkX2NpcGhlclN1aXRlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFibGlzaGVkX2NpcGhlclN1aXRlKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVzdGFibGlzaGVkX2NpcGhlcl9uYW1lX2lhbmEgPQorICAgICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X2NpcGhlcl9uYW1lX2lhbmFfZnJvbV9zdWl0ZShlc3RhYmxpc2hlZF9jaXBoZXJTdWl0ZTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFibGlzaGVkX2NpcGhlclN1aXRlKTsKKworICAgICAgICAgICAgaWYgKGVzdGFibGlzaGVkX2NpcGhlcl9uYW1lID09IE5VTEwpCisgICAgICAgICAgICAgICAgZXJyX3N5cygiZXJyb3IgbG9va2luZyB1cCBuYW1lIG9mIGVzdGFibGlzaGVkIGNpcGhlciIpOworCisgICAgICAgICAgICBpZiAoc3RyY21wKGNpcGhlckxpc3QsIGVzdGFibGlzaGVkX2NpcGhlcl9uYW1lKSAmJgorICAgICAgICAgICAgICAgICgoZXN0YWJsaXNoZWRfY2lwaGVyX25hbWVfaWFuYSA9PSBOVUxMKSB8fAorICAgICAgICAgICAgICAgICBzdHJjbXAoY2lwaGVyTGlzdCwgZXN0YWJsaXNoZWRfY2lwaGVyX25hbWVfaWFuYSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCEgKHJlcXVlc3RlZF9jaXBoZXJGbGFncyAmIFdPTEZTU0xfQ0lQSEVSX1NVSVRFX0ZMQUdfTkFNRUFMSUFTKSkKKyAgICAgICAgICAgICAgICAgICAgZXJyX3N5cygiVW5leHBlY3RlZCBtaXNtYXRjaCBiZXR3ZWVuIG5hbWVzIG9mIHJlcXVlc3RlZCBhbmQgZXN0YWJsaXNoZWQgY2lwaGVycy4iKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgocmVxdWVzdGVkX2NpcGhlclN1aXRlMCAhPSBlc3RhYmxpc2hlZF9jaXBoZXJTdWl0ZTApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3RlZF9jaXBoZXJTdWl0ZSAhPSBlc3RhYmxpc2hlZF9jaXBoZXJTdWl0ZSkpCisgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoIk1pc21hdGNoIGJldHdlZW4gSURzIG9mIHJlcXVlc3RlZCBhbmQgZXN0YWJsaXNoZWQgY2lwaGVycy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoSEFWRV9PQ1NQKSAmJiAhZGVmaW5lZChOT19BU05fVElNRSkKKyNpZmRlZiBIQVZFX1NUUkZUSU1FCisgICAgeworICAgICAgICBzdHJ1Y3QgdG0gdG07CisgICAgICAgIGNoYXIgZGF0ZVszMl07CisgICAgICAgIHJldCA9IHdvbGZTU0xfZ2V0X29jc3BfcHJvZHVjZWREYXRlX3RtKHNzbCwgJnRtKTsKKyAgICAgICAgaWYgKChyZXQgPT0gMCkgJiYgKHN0cmZ0aW1lKGRhdGUsIHNpemVvZiBkYXRlLCAiJVktJW0tJWQgJUg6JU06JVMgJXoiLCAmdG0pID4gMCkpCisgICAgICAgICAgICBwcmludGYoIk9DU1AgcmVzcG9uc2UgdGltZXN0YW1wOiAlc1xuIiwgZGF0ZSk7CisgICAgfQorI2Vsc2UKKyAgICB7CisgICAgICAgIGJ5dGUgZGF0ZVtNQVhfREFURV9TSVpFXTsKKyAgICAgICAgaW50IGFzbl9kYXRlX2Zvcm1hdDsKKyAgICAgICAgcmV0ID0gd29sZlNTTF9nZXRfb2NzcF9wcm9kdWNlZERhdGUoc3NsLCBkYXRlLCBzaXplb2YgZGF0ZSwgJmFzbl9kYXRlX2Zvcm1hdCk7CisgICAgICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgICAgIHByaW50ZigiT0NTUCByZXNwb25zZSB0aW1lc3RhbXA6ICVzIChBU04uMSB0eXBlICVkKVxuIiwgKGNoYXIgKilkYXRlLCBhc25fZGF0ZV9mb3JtYXQpOworICAgIH0KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoSEFWRV9TRUNSRVRfQ0FMTEJBQ0spCisgICAgcHJpbnRmKCJTZXNzaW9uIHRpbWVvdXQgc2V0IHRvICVsZCBzZWNvbmRzXG4iLCB3b2xmU1NMX2dldF90aW1lb3V0KHNzbCkpOworICAgIHsKKyAgICAgICAgYnl0ZSogIHJuZDsKKyAgICAgICAgYnl0ZSogIHB0OworICAgICAgICBzaXplX3Qgc2l6ZTsKKworICAgICAgICAvKiBnZXQgc2l6ZSBvZiBidWZmZXIgdGhlbiBwcmludCAqLworICAgICAgICBzaXplID0gd29sZlNTTF9nZXRfY2xpZW50X3JhbmRvbShOVUxMLCBOVUxMLCAwKTsKKyAgICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICAgICAgd29sZlNTTF9mcmVlKHNzbCk7IHNzbCA9IE5VTEw7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICBlcnJfc3lzKCJlcnJvciBnZXR0aW5nIGNsaWVudCByYW5kb20gYnVmZmVyIHNpemUiKTsKKyAgICAgICAgfQorCisgICAgICAgIHJuZCA9IChieXRlKilYTUFMTE9DKHNpemUsIE5VTEwsIERZTkFNSUNfVFlQRV9UTVBfQlVGRkVSKTsKKyAgICAgICAgaWYgKHJuZCA9PSBOVUxMKSB7CisgICAgICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgIGVycl9zeXMoImVycm9yIGNyZWF0aW5nIGNsaWVudCByYW5kb20gYnVmZmVyIik7CisgICAgICAgIH0KKworICAgICAgICBzaXplID0gd29sZlNTTF9nZXRfY2xpZW50X3JhbmRvbShzc2wsIHJuZCwgc2l6ZSk7CisgICAgICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgICAgIFhGUkVFKHJuZCwgTlVMTCwgRFlOQU1JQ19UWVBFX1RNUF9CVUZGRVIpOworICAgICAgICAgICAgd29sZlNTTF9mcmVlKHNzbCk7IHNzbCA9IE5VTEw7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICBlcnJfc3lzKCJlcnJvciBnZXR0aW5nIGNsaWVudCByYW5kb20gYnVmZmVyIik7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoIkNsaWVudCBSYW5kb20gOiAiKTsKKyAgICAgICAgZm9yIChwdCA9IHJuZDsgcHQgPCBybmQgKyBzaXplOyBwdCsrKSBwcmludGYoIiUwMlgiLCAqcHQpOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIFhGUkVFKHJuZCwgTlVMTCwgRFlOQU1JQ19UWVBFX1RNUF9CVUZGRVIpOworCisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSB8fCAoZGVmaW5lZChPUEVOU1NMX0VYVFJBKSAmJiAoZGVmaW5lZChIQVZFX1NUVU5ORUwpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZChXT0xGU1NMX05HSU5YKSB8fCBkZWZpbmVkKEhBVkVfTElHSFRZKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoV09MRlNTTF9IQVBST1hZKSB8fCBkZWZpbmVkKFdPTEZTU0xfT1BFTlNTSCkpKQorI2lmICFkZWZpbmVkKE5PX1NFU1NJT05fQ0FDSEUpICYmIFwKKyAgICAoZGVmaW5lZChIQVZFX1NFU1NJT05fVElDS0VUKSB8fCBkZWZpbmVkKFNFU1NJT05fQ0VSVFMpKSAmJiBcCisgICAgICAgICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pCisgICAgI2lmbmRlZiBOT19CSU8KKyAgICAvKiBwcmludCBvdXQgc2Vzc2lvbiB0byBzdGRvdXQgKi8KKyAgICB7CisgICAgICAgIFdPTEZTU0xfQklPKiBiaW8gPSB3b2xmU1NMX0JJT19uZXdfZnAoc3Rkb3V0LCBCSU9fTk9DTE9TRSk7CisgICAgICAgIGlmIChiaW8gIT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHdvbGZTU0xfU0VTU0lPTl9wcmludChiaW8sIHdvbGZTU0xfZ2V0X3Nlc3Npb24oc3NsKSkgIT0KKyAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgd29sZlNTTF9CSU9fcHJpbnRmKGJpbywgIkJJTyBlcnJvciBwcmludGluZyBzZXNzaW9uXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3b2xmU1NMX0JJT19mcmVlKGJpbyk7CisgICAgfQorICAgICNlbmRpZiAvKiAhTk9fQklPICovCisjZW5kaWYKKyNlbmRpZgorCisgICAgaWYgKGRvU1RBUlRUTFMgJiYgc3RhcnR0bHNQcm90ICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKFhTVFJOQ01QKHN0YXJ0dGxzUHJvdCwgInNtdHAiLCA0KSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoU01UUF9TaHV0ZG93bihzc2wsIHdjX3NodXRkb3duKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICAgICAgZXJyX3N5cygiZXJyb3IgY2xvc2luZyBTVEFSVFRMUyBjb25uZWN0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgQ2xvc2VTb2NrZXQoc29ja2ZkKTsKKworICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisKKyAgICAgICAgKChmdW5jX2FyZ3MqKWFyZ3MpLT5yZXR1cm5fY29kZSA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworI2lmZGVmIEhBVkVfQUxQTgorICAgIGlmIChhbHBuTGlzdCAhPSBOVUxMKSB7CisgICAgICAgIGNoYXIgKnByb3RvY29sX25hbWUgPSBOVUxMOworICAgICAgICB3b3JkMTYgcHJvdG9jb2xfbmFtZVN6ID0gMDsKKworICAgICAgICBlcnIgPSB3b2xmU1NMX0FMUE5fR2V0UHJvdG9jb2woc3NsLCAmcHJvdG9jb2xfbmFtZSwgJnByb3RvY29sX25hbWVTeik7CisgICAgICAgIGlmIChlcnIgPT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgcHJpbnRmKCJSZWNlaXZlZCBBTFBOIHByb3RvY29sIDogJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICBwcm90b2NvbF9uYW1lLCBwcm90b2NvbF9uYW1lU3opOworICAgICAgICBlbHNlIGlmIChlcnIgPT0gV09MRlNTTF9BTFBOX05PVF9GT1VORCkKKyAgICAgICAgICAgIHByaW50ZigiTm8gQUxQTiByZXNwb25zZSByZWNlaXZlZCAobm8gbWF0Y2ggd2l0aCBzZXJ2ZXIpXG4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJHZXR0aW5nIEFMUE4gcHJvdG9jb2wgbmFtZSBmYWlsZWRcbiIpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTgorICAgIGlmIChzY3IgJiYgZm9yY2VTY3IpIHsKKyAgICAgICAgaWYgKG5vbkJsb2NraW5nKSB7CisgICAgICAgICAgICBpZiAoIXJlc3VtZVNjcikgeworICAgICAgICAgICAgICAgIGlmICgocmV0ID0gd29sZlNTTF9SZWhhbmRzaGFrZShzc2wpKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gd29sZlNTTF9nZXRfZXJyb3Ioc3NsLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBXT0xGU1NMX0VSUk9SX1dBTlRfUkVBRCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9PSBXT0xGU1NMX0VSUk9SX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JBcHBEYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQ2xpZW50V3JpdGUoc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1zZyBzZW50IGR1cmluZyByZW5lZ290aWF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJtc2cgc2VudCBkdXJpbmcgcmVuZWdvdGlhdGlvbiIpIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBXT0xGU1NMX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gQVBQX0RBVEFfUkVBRFkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmV0ID0gd29sZlNTTF9yZWFkKHNzbCwgcmVwbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyZXBseSktMSkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoIkFQUCBEQVRBIHNob3VsZCBiZSBwcmVzZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgZXJyb3IgcmV0dXJuZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUmVjZWl2ZWQgbWVzc2FnZSBkdXJpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW5lZ290aWF0aW9uOiAlc1xuIiwgcmVwbHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmV0ID0gd29sZlNTTF9jb25uZWN0KHNzbCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSB3b2xmU1NMX2dldF9lcnJvcihzc2wsIHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyID09IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID09IFdPTEZTU0xfRVJST1JfV0FOVF9XUklURSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9PSBBUFBfREFUQV9SRUFEWSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ3b2xmU1NMX1JlaGFuZHNoYWtlIGVycm9yICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9lcnJvcl9zdHJpbmcoZXJyLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX3N5cygibm9uLWJsb2NraW5nIHdvbGZTU0xfUmVoYW5kc2hha2UgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIk5PTi1CTE9DS0lORyBSRU5FR09USUFUSU9OIFNVQ0NFU1NGVUxcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ3b2xmU1NMX1JlaGFuZHNoYWtlIGVycm9yICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZyhlcnIsIGJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9mcmVlKHNzbCk7IHNzbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJfc3lzKCJub24tYmxvY2tpbmcgd29sZlNTTF9SZWhhbmRzaGFrZSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50Zigibm90IGRvaW5nIHNlY3VyZSByZXN1bXB0aW9uIHdpdGggbm9uLWJsb2NraW5nIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXJlc3VtZVNjcikgeworICAgICAgICAgICAgICAgIHByaW50ZigiQmVnaW5uaW5nIHNlY3VyZSByZW5lZ290aWF0aW9uLlxuIik7CisgICAgICAgICAgICAgICAgaWYgKChyZXQgPSB3b2xmU1NMX1JlaGFuZHNoYWtlKHNzbCkpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICBlcnIgPSB3b2xmU1NMX2dldF9lcnJvcihzc2wsIDApOworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX25lZ290aWF0ZShzc2wpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSB3b2xmU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiZXJyID0gJWQsICVzXG4iLCBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FUlJfZXJyb3Jfc3RyaW5nKGVyciwgYnVmZmVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoIndvbGZTU0xfUmVoYW5kc2hha2UgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUkVORUdPVElBVElPTiBTVUNDRVNTRlVMXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkJlZ2lubmluZyBzZWN1cmUgcmVzdW1wdGlvbi5cbiIpOworICAgICAgICAgICAgICAgIGlmICgocmV0ID0gd29sZlNTTF9TZWN1cmVSZXN1bWUoc3NsKSkgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZXJyID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfbmVnb3RpYXRlKHNzbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9Bc3luY1BvbGwoc3NsLCBXT0xGX1BPTExfRkxBR19DSEVDS19IVyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnIgPSAlZCwgJXNcbiIsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9lcnJvcl9zdHJpbmcoZXJyLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZnJlZShzc2wpOyBzc2wgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyX3N5cygid29sZlNTTF9TZWN1cmVSZXN1bWUgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU0VDVVJFIFJFU1VNUFRJT04gU1VDQ0VTU0ZVTFxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04gKi8KKworICAgIFhNRU1TRVQobXNnLCAwLCBzaXplb2YobXNnKSk7CisgICAgaWYgKHNlbmRHRVQpIHsKKyAgICAgICAgcHJpbnRmKCJTU0wgY29ubmVjdCBvaywgc2VuZGluZyBHRVQuLi5cbiIpOworCisgICAgICAgIG1zZ1N6ID0gKGludClYU1RSTEVOKGtIdHRwR2V0TXNnKTsKKyAgICAgICAgWE1FTUNQWShtc2csIGtIdHRwR2V0TXNnLCBtc2dTeik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtc2dTeiA9IChpbnQpWFNUUkxFTihrSGVsbG9Nc2cpOworICAgICAgICBYTUVNQ1BZKG1zZywga0hlbGxvTXNnLCBtc2dTeik7CisgICAgfQorCisvKiBhbGxvdyBzb21lIHRpbWUgZm9yIGV4cG9ydGluZyB0aGUgc2Vzc2lvbiAqLworI2lmZGVmIFdPTEZTU0xfU0VTU0lPTl9FWFBPUlRfREVCVUcKKyAgICBURVNUX0RFTEFZKCk7CisjZW5kaWYgLyogV09MRlNTTF9TRVNTSU9OX0VYUE9SVF9ERUJVRyAqLworCisjaWZkZWYgV09MRlNTTF9UTFMxMworICAgIGlmICh1cGRhdGVLZXlzSVZzKQorICAgICAgICB3b2xmU1NMX3VwZGF0ZV9rZXlzKHNzbCk7CisjZW5kaWYKKworICAgIGVyciA9IENsaWVudFdyaXRlKHNzbCwgbXNnLCBtc2dTeiwgIiIsIGV4aXRXaXRoUmV0KTsKKyAgICBpZiAoZXhpdFdpdGhSZXQgJiYgKGVyciAhPSAwKSkgeworICAgICAgICAoKGZ1bmNfYXJncyopYXJncyktPnJldHVybl9jb2RlID0gZXJyOworICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZXJyID0gQ2xpZW50UmVhZChzc2wsIHJlcGx5LCBzaXplb2YocmVwbHkpLTEsIDEsICIiLCBleGl0V2l0aFJldCk7CisgICAgaWYgKGV4aXRXaXRoUmV0ICYmIChlcnIgIT0gMCkpIHsKKyAgICAgICAgKChmdW5jX2FyZ3MqKWFyZ3MpLT5yZXR1cm5fY29kZSA9IGVycjsKKyAgICAgICAgd29sZlNTTF9mcmVlKHNzbCk7IHNzbCA9IE5VTEw7CisgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmIGRlZmluZWQoV09MRlNTTF9UTFMxMykKKyAgICBpZiAodXBkYXRlS2V5c0lWcyB8fCBwb3N0SGFuZEF1dGgpCisgICAgICAgICh2b2lkKUNsaWVudFdyaXRlKHNzbCwgbXNnLCBtc2dTeiwgIiIsIDApOworI2VuZGlmCisKKyNpZm5kZWYgTk9fU0VTU0lPTl9DQUNIRQorICAgIGlmIChyZXN1bWVTZXNzaW9uKSB7CisgICAgICAgIHNlc3Npb24gPSB3b2xmU1NMX2dldF9zZXNzaW9uKHNzbCk7CisgICAgfQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOT19TRVNTSU9OX0NBQ0hFKSAmJiAoZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBcCisgICAgICAgIGRlZmluZWQoSEFWRV9FWFRfQ0FDSEUpKQorICAgIGlmIChzZXNzaW9uICE9IE5VTEwgJiYgcmVzdW1lU2Vzc2lvbikgeworICAgICAgICBmbGF0U2Vzc2lvblN6ID0gd29sZlNTTF9pMmRfU1NMX1NFU1NJT04oc2Vzc2lvbiwgTlVMTCk7CisgICAgICAgIGlmIChmbGF0U2Vzc2lvblN6ICE9IDApIHsKKyAgICAgICAgICAgIGludCBjaGVja1N6ID0gd29sZlNTTF9pMmRfU1NMX1NFU1NJT04oc2Vzc2lvbiwgJmZsYXRTZXNzaW9uKTsKKyAgICAgICAgICAgIGlmIChmbGF0U2Vzc2lvbiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGVycl9zeXMoImVycm9yIGNyZWF0aW5nIGZsYXR0ZW5lZCBzZXNzaW9uIGJ1ZmZlciIpOworICAgICAgICAgICAgaWYgKGNoZWNrU3ogIT0gZmxhdFNlc3Npb25TeikgeworICAgICAgICAgICAgICAgIFhGUkVFKGZsYXRTZXNzaW9uLCBOVUxMLCBEWU5BTUlDX1RZUEVfVE1QX0JVRkZFUik7CisgICAgICAgICAgICAgICAgZXJyX3N5cygiZmxhdCBzZXNzaW9uIHNpemUgY2hlY2sgZmFpbHVyZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoZHRsc1VEUCA9PSAwKSB7ICAgICAgICAgICAvKiBkb24ndCBzZW5kIGFsZXJ0IGFmdGVyICJicmVhayIgY29tbWFuZCAqLworICAgICAgICByZXQgPSB3b2xmU1NMX3NodXRkb3duKHNzbCk7CisgICAgICAgIGlmICh3Y19zaHV0ZG93biAmJiByZXQgPT0gV09MRlNTTF9TSFVURE9XTl9OT1RfRE9ORSkgeworICAgICAgICAgICAgaWYgKHRjcF9zZWxlY3Qoc29ja2ZkLCBERUZBVUxUX1RJTUVPVVRfU0VDKSA9PSBURVNUX1JFQ1ZfUkVBRFkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX3NodXRkb3duKHNzbCk7IC8qIGJpZGlyZWN0aW9uYWwgc2h1dGRvd24gKi8KKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJCaWRpcmVjdGlvbmFsIHNodXRkb3duIGNvbXBsZXRlXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgICAgIHByaW50ZigiQmlkaXJlY3Rpb25hbCBzaHV0ZG93biBmYWlsZWRcbiIpOworICAgICAgICB9CisgICAgfQorI2lmIGRlZmluZWQoQVRPTUlDX1VTRVIpICYmICFkZWZpbmVkKFdPTEZTU0xfQUVBRF9PTkxZKQorICAgIGlmIChhdG9taWNVc2VyKQorICAgICAgICBGcmVlQXRvbWljVXNlcihzc2wpOworI2VuZGlmCisKKyAgICAvKiBkaXNwbGF5IGNvbGxlY3RlZCBzdGF0aXN0aWNzICovCisjaWZkZWYgV09MRlNTTF9TVEFUSUNfTUVNT1JZCisgICAgaWYgKHdvbGZTU0xfaXNfc3RhdGljX21lbW9yeShzc2wsICZzc2xfc3RhdHMpICE9IDEpCisgICAgICAgIGVycl9zeXMoInN0YXRpYyBtZW1vcnkgd2FzIG5vdCB1c2VkIHdpdGggc3NsIik7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxucHJpbnQgb2ZmIFNTTCBtZW1vcnkgc3RhdHNcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiKioqIFRoaXMgaXMgbWVtb3J5IHN0YXRlIGJlZm9yZSB3b2xmU1NMX2ZyZWUgaXMgY2FsbGVkXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInBlYWsgY29ubmVjdGlvbiBtZW1vcnkgPSAlZFxuIiwgc3NsX3N0YXRzLnBlYWtNZW0pOworICAgIGZwcmludGYoc3RkZXJyLCAiY3VycmVudCBtZW1vcnkgaW4gdXNlICA9ICVkXG4iLCBzc2xfc3RhdHMuY3VyTWVtKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInBlYWsgY29ubmVjdGlvbiBhbGxvY3MgPSAlZFxuIiwgc3NsX3N0YXRzLnBlYWtBbGxvYyk7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJyZW50IGNvbm5lY3Rpb24gYWxsb2NzID0gJWRcbiIsIHNzbF9zdGF0cy5jdXJBbGxvYyk7CisgICAgZnByaW50ZihzdGRlcnIsICJ0b3RhbCBjb25uZWN0aW9uIGFsbG9jcyAgID0gJWRcbiIsIHNzbF9zdGF0cy50b3RhbEFsbG9jKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInRvdGFsIGNvbm5lY3Rpb24gZnJlZXMgICAgPSAlZFxuXG4iLCBzc2xfc3RhdHMudG90YWxGcik7CisjZW5kaWYKKworICAgIHdvbGZTU0xfZnJlZShzc2wpOyBzc2wgPSBOVUxMOworICAgIENsb3NlU29ja2V0KHNvY2tmZCk7CisKKyNpZm5kZWYgTk9fU0VTU0lPTl9DQUNIRQorICAgIGlmIChyZXN1bWVTZXNzaW9uKSB7CisgICAgICAgIHNzbFJlc3VtZSA9IHdvbGZTU0xfbmV3KGN0eCk7CisgICAgICAgIGlmIChzc2xSZXN1bWUgPT0gTlVMTCkgeworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIGdldCBTU0wgb2JqZWN0Iik7CisgICAgICAgIH0KKworI2lmICFkZWZpbmVkKE5PX0RIKSAmJiAhZGVmaW5lZChXT0xGU1NMX09MRF9QUklNRV9DSEVDSykgJiYgXAorICAgICFkZWZpbmVkKEhBVkVfRklQUykgJiYgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkKKyAgICAgICAgaWYgKCFkb0RoS2V5Q2hlY2spCisgICAgICAgICAgICB3b2xmU1NMX1NldEVuYWJsZURoS2V5VGVzdChzc2xSZXN1bWUsIDApOworI2VuZGlmCisKKyAgICAgICAgaWYgKGR0bHNVRFApIHsKKyAgICAgICAgICAgIFRFU1RfREVMQVkoKTsKKyAgICAgICAgfQorICAgICAgICB0Y3BfY29ubmVjdCgmc29ja2ZkLCBob3N0LCBwb3J0LCBkdGxzVURQLCBkdGxzU0NUUCwgc3NsUmVzdW1lKTsKKyAgICAgICAgaWYgKHdvbGZTU0xfc2V0X2ZkKHNzbFJlc3VtZSwgc29ja2ZkKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHdvbGZTU0xfZnJlZShzc2xSZXN1bWUpOyBzc2xSZXN1bWUgPSBOVUxMOworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygiZXJyb3IgaW4gc2V0dGluZyBmZCIpOworICAgICAgICB9CisjaWZkZWYgSEFWRV9BTFBOCisgICAgICAgIGlmIChhbHBuTGlzdCAhPSBOVUxMKSB7CisgICAgICAgICAgICBwcmludGYoIkFMUE4gYWNjZXB0ZWQgcHJvdG9jb2xzIGxpc3QgOiAlc1xuIiwgYWxwbkxpc3QpOworICAgICAgICAgICAgd29sZlNTTF9Vc2VBTFBOKHNzbFJlc3VtZSwgYWxwbkxpc3QsICh3b3JkMzIpWFNUUkxFTihhbHBuTGlzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwbl9vcHQpOworICAgICAgICB9CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9OCisgICAgICAgIGlmIChzY3IpIHsKKyAgICAgICAgICAgIGlmICh3b2xmU1NMX1VzZVNlY3VyZVJlbmVnb3RpYXRpb24oc3NsUmVzdW1lKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsUmVzdW1lKTsgc3NsUmVzdW1lID0gTlVMTDsKKyAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgZW5hYmxlIHNlY3VyZSByZW5lZ290aWF0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSAmJiBkZWZpbmVkKEhBVkVfRVhUX0NBQ0hFKQorICAgICAgICBpZiAoZmxhdFNlc3Npb24pIHsKKyAgICAgICAgICAgIGNvbnN0IGJ5dGUqIGNvbnN0RmxhdFNlc3Npb24gPSBmbGF0U2Vzc2lvbjsKKyAgICAgICAgICAgIHNlc3Npb24gPSB3b2xmU1NMX2QyaV9TU0xfU0VTU0lPTihOVUxMLAorICAgICAgICAgICAgICAgICAgICAmY29uc3RGbGF0U2Vzc2lvbiwgZmxhdFNlc3Npb25Teik7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIHdvbGZTU0xfc2V0X3Nlc3Npb24oc3NsUmVzdW1lLCBzZXNzaW9uKTsKKworI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgJiYgZGVmaW5lZChIQVZFX0VYVF9DQUNIRSkKKyAgICAgICAgaWYgKGZsYXRTZXNzaW9uKSB7CisgICAgICAgICAgICBYRlJFRShmbGF0U2Vzc2lvbiwgTlVMTCwgRFlOQU1JQ19UWVBFX1RNUF9CVUZGRVIpOworICAgICAgICAgICAgd29sZlNTTF9TRVNTSU9OX2ZyZWUoc2Vzc2lvbik7CisgICAgICAgIH0KKyNlbmRpZgorI2lmZGVmIEhBVkVfU0VTU0lPTl9USUNLRVQKKyAgICAgICAgd29sZlNTTF9zZXRfU2Vzc2lvblRpY2tldF9jYihzc2xSZXN1bWUsIHNlc3Npb25UaWNrZXRDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikicmVzdW1lZCBzZXNzaW9uIik7CisjZW5kaWYKKworI2lmbmRlZiBXT0xGU1NMX0NBTExCQUNLUworICAgICAgICBpZiAobm9uQmxvY2tpbmcpIHsKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgICAgIGlmIChkb0RUTFMpIHsKKyAgICAgICAgICAgICAgICB3b2xmU1NMX2R0bHNfc2V0X3VzaW5nX25vbmJsb2NrKHNzbFJlc3VtZSwgMSk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIHRjcF9zZXRfbm9uYmxvY2tpbmcoJnNvY2tmZCk7CisgICAgICAgICAgICByZXQgPSBOb25CbG9ja2luZ1NTTF9Db25uZWN0KHNzbFJlc3VtZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgI2lmZGVmIFdPTEZTU0xfRUFSTFlfREFUQQorICAgICAgICAjaWZuZGVmIEhBVkVfU0VTU0lPTl9USUNLRVQKKyAgICAgICAgICAgIGlmICghdXNlUHNrKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICNlbmRpZgorICAgICAgICAgICAgaWYgKGVhcmx5RGF0YSkgeworICAgICAgICAgICAgICAgIEVhcmx5RGF0YShjdHgsIHNzbFJlc3VtZSwga0Vhcmx5TXNnLCBzaXplb2Yoa0Vhcmx5TXNnKS0xLCBidWZmZXIpOworICAgICAgICAgICAgfQorICAgICNlbmRpZgorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGVyciA9IDA7IC8qIHJlc2V0IGVycm9yICovCisgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9jb25uZWN0KHNzbFJlc3VtZSk7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gd29sZlNTTF9nZXRfZXJyb3Ioc3NsUmVzdW1lLCAwKTsKKyAgICAgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9Bc3luY1BvbGwoc3NsUmVzdW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZfUE9MTF9GTEFHX0NIRUNLX0hXKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpOworICAgICAgICB9CisjZWxzZQorICAgICAgICB0aW1lb3V0Q29ubmVjdC50dl9zZWMgID0gREVGQVVMVF9USU1FT1VUX1NFQzsKKyAgICAgICAgdGltZW91dENvbm5lY3QudHZfdXNlYyA9IDA7CisgICAgICAgIHJldCA9IE5vbkJsb2NraW5nU1NMX0Nvbm5lY3Qoc3NsUmVzdW1lKTsgIC8qIHdpbGwga2VlcCByZXRyeWluZyBvbiB0aW1lb3V0ICovCisjZW5kaWYKKyAgICAgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHByaW50Zigid29sZlNTTF9jb25uZWN0IHJlc3VtZSBlcnJvciAlZCwgJXNcbiIsIGVyciwKKyAgICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9lcnJvcl9zdHJpbmcoZXJyLCBidWZmZXIpKTsKKyAgICAgICAgICAgIHdvbGZTU0xfZnJlZShzc2xSZXN1bWUpOyBzc2xSZXN1bWUgPSBOVUxMOworICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgZXJyX3N5cygid29sZlNTTF9jb25uZWN0IHJlc3VtZSBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHNob3dQZWVyRXgoc3NsUmVzdW1lLCBsbmdfaW5kZXgpOworCisgICAgICAgIGlmICh3b2xmU1NMX3Nlc3Npb25fcmV1c2VkKHNzbFJlc3VtZSkpCisgICAgICAgICAgICBwcmludGYoInJldXNlZCBzZXNzaW9uIGlkXG4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJkaWRuJ3QgcmV1c2Ugc2Vzc2lvbiBpZCEhIVxuIik7CisKKyNpZmRlZiBIQVZFX0FMUE4KKyAgICAgICAgaWYgKGFscG5MaXN0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGNoYXIgKnByb3RvY29sX25hbWUgPSBOVUxMOworICAgICAgICAgICAgd29yZDE2IHByb3RvY29sX25hbWVTeiA9IDA7CisKKyAgICAgICAgICAgIHByaW50ZigiU2VuZGluZyBBTFBOIGFjY2VwdGVkIGxpc3QgOiAlc1xuIiwgYWxwbkxpc3QpOworICAgICAgICAgICAgZXJyID0gd29sZlNTTF9BTFBOX0dldFByb3RvY29sKHNzbFJlc3VtZSwgJnByb3RvY29sX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb3RvY29sX25hbWVTeik7CisgICAgICAgICAgICBpZiAoZXJyID09IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBwcmludGYoIlJlY2VpdmVkIEFMUE4gcHJvdG9jb2wgOiAlcyAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbF9uYW1lLCBwcm90b2NvbF9uYW1lU3opOworICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IFdPTEZTU0xfQUxQTl9OT1RfRk9VTkQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJOb3QgcmVjZWl2ZWQgQUxQTiByZXNwb25zZSAobm8gbWF0Y2ggd2l0aCBzZXJ2ZXIpXG4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIkdldHRpbmcgQUxQTiBwcm90b2NvbCBuYW1lIGZhaWxlZFxuIik7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgLyogYWxsb3cgc29tZSB0aW1lIGZvciBleHBvcnRpbmcgdGhlIHNlc3Npb24gKi8KKyAgICAjaWZkZWYgV09MRlNTTF9TRVNTSU9OX0VYUE9SVF9ERUJVRworICAgICAgICBURVNUX0RFTEFZKCk7CisgICAgI2VuZGlmIC8qIFdPTEZTU0xfU0VTU0lPTl9FWFBPUlRfREVCVUcgKi8KKworI2lmZGVmIEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04KKyAgICBpZiAoc2NyICYmIGZvcmNlU2NyKSB7CisgICAgICAgIGlmIChub25CbG9ja2luZykgeworICAgICAgICAgICAgcHJpbnRmKCJub3QgZG9pbmcgc2VjdXJlIHJlbmVnb3RpYXRpb24gb24gZXhhbXBsZSB3aXRoIgorICAgICAgICAgICAgICAgICAgICIgbm9uYmxvY2tpbmcgeWV0XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghcmVzdW1lU2NyKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJCZWdpbm5pbmcgc2VjdXJlIHJlbmVnb3RpYXRpb24uXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAod29sZlNTTF9SZWhhbmRzaGFrZShzc2xSZXN1bWUpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICBlcnIgPSB3b2xmU1NMX2dldF9lcnJvcihzc2xSZXN1bWUsIDApOworICAgICAgICAgICAgICAgICAgICBwcmludGYoImVyciA9ICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9FUlJfZXJyb3Jfc3RyaW5nKGVyciwgYnVmZmVyKSk7CisgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZnJlZShzc2xSZXN1bWUpOyBzc2xSZXN1bWUgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoIndvbGZTU0xfUmVoYW5kc2hha2UgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlJFTkVHT1RJQVRJT04gU1VDQ0VTU0ZVTFxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJCZWdpbm5pbmcgc2VjdXJlIHJlc3VtcHRpb24uXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAod29sZlNTTF9TZWN1cmVSZXN1bWUoc3NsUmVzdW1lKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gd29sZlNTTF9nZXRfZXJyb3Ioc3NsUmVzdW1lLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnIgPSAlZCwgJXNcbiIsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZyhlcnIsIGJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsUmVzdW1lKTsgc3NsUmVzdW1lID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBlcnJfc3lzKCJ3b2xmU1NMX1NlY3VyZVJlc3VtZSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU0VDVVJFIFJFU1VNUFRJT04gU1VDQ0VTU0ZVTFxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04gKi8KKworICAgICAgICBYTUVNU0VUKG1zZywgMCwgc2l6ZW9mKG1zZykpOworICAgICAgICBpZiAoc2VuZEdFVCkgeworICAgICAgICAgICAgbXNnU3ogPSAoaW50KVhTVFJMRU4oa0h0dHBHZXRNc2cpOworICAgICAgICAgICAgWE1FTUNQWShtc2csIGtIdHRwR2V0TXNnLCBtc2dTeik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtc2dTeiA9IChpbnQpWFNUUkxFTihrUmVzdW1lTXNnKTsKKyAgICAgICAgICAgIFhNRU1DUFkobXNnLCBrUmVzdW1lTXNnLCBtc2dTeik7CisgICAgICAgIH0KKyAgICAgICAgKHZvaWQpQ2xpZW50V3JpdGUoc3NsUmVzdW1lLCBtc2csIG1zZ1N6LCAiIHJlc3VtZSIsIDApOworCisgICAgICAgICh2b2lkKUNsaWVudFJlYWQoc3NsUmVzdW1lLCByZXBseSwgc2l6ZW9mKHJlcGx5KS0xLCBzZW5kR0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2ZXIgcmVzdW1lOiAiLCAwKTsKKworICAgICAgICByZXQgPSB3b2xmU1NMX3NodXRkb3duKHNzbFJlc3VtZSk7CisgICAgICAgIGlmICh3Y19zaHV0ZG93biAmJiByZXQgPT0gV09MRlNTTF9TSFVURE9XTl9OT1RfRE9ORSkKKyAgICAgICAgICAgIHdvbGZTU0xfc2h1dGRvd24oc3NsUmVzdW1lKTsgICAgLyogYmlkaXJlY3Rpb25hbCBzaHV0ZG93biAqLworCisgICAgICAgIC8qIGRpc3BsYXkgY29sbGVjdGVkIHN0YXRpc3RpY3MgKi8KKyAgICAjaWZkZWYgV09MRlNTTF9TVEFUSUNfTUVNT1JZCisgICAgICAgIGlmICh3b2xmU1NMX2lzX3N0YXRpY19tZW1vcnkoc3NsUmVzdW1lLCAmc3NsX3N0YXRzKSAhPSAxKQorICAgICAgICAgICAgZXJyX3N5cygic3RhdGljIG1lbW9yeSB3YXMgbm90IHVzZWQgd2l0aCBzc2wiKTsKKworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxucHJpbnQgb2ZmIFNTTHJlc3VtZSBtZW1vcnkgc3RhdHNcbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIioqKiBUaGlzIGlzIG1lbW9yeSBzdGF0ZSBiZWZvcmUgd29sZlNTTF9mcmVlIGlzIGNhbGxlZFxuIik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicGVhayBjb25uZWN0aW9uIG1lbW9yeSA9ICVkXG4iLCBzc2xfc3RhdHMucGVha01lbSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY3VycmVudCBtZW1vcnkgaW4gdXNlICA9ICVkXG4iLCBzc2xfc3RhdHMuY3VyTWVtKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwZWFrIGNvbm5lY3Rpb24gYWxsb2NzID0gJWRcbiIsIHNzbF9zdGF0cy5wZWFrQWxsb2MpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImN1cnJlbnQgY29ubmVjdGlvbiBhbGxvY3MgPSAlZFxuIiwgc3NsX3N0YXRzLmN1ckFsbG9jKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0b3RhbCBjb25uZWN0aW9uIGFsbG9jcyAgID0gJWRcbiIsIHNzbF9zdGF0cy50b3RhbEFsbG9jKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0b3RhbCBjb25uZWN0aW9uIGZyZWVzICAgID0gJWRcblxuIiwgc3NsX3N0YXRzLnRvdGFsRnIpOworICAgICNlbmRpZgorCisgICAgICAgIHdvbGZTU0xfZnJlZShzc2xSZXN1bWUpOyBzc2xSZXN1bWUgPSBOVUxMOworICAgICAgICBDbG9zZVNvY2tldChzb2NrZmQpOworICAgIH0KKyNlbmRpZiAvKiAhTk9fU0VTU0lPTl9DQUNIRSAqLworCisgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworCisgICAgKChmdW5jX2FyZ3MqKWFyZ3MpLT5yZXR1cm5fY29kZSA9IDA7CisKK2V4aXQ6CisKKyNpZmRlZiBXT0xGU1NMX1dPTEZTRU5UUllfSE9PS1MKKyAgICB3b2xmc2VudHJ5X3JldCA9IHdvbGZzZW50cnlfc2h1dGRvd24oJndvbGZzZW50cnkpOworICAgIGlmICh3b2xmc2VudHJ5X3JldCA8IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgIndvbGZzZW50cnlfc2h1dGRvd24oKSByZXR1cm5lZCAiIFdPTEZTRU5UUllfRVJST1JfRk1UICJcbiIsCisgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9FUlJPUl9GTVRfQVJHUyh3b2xmc2VudHJ5X3JldCkpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIHdvbGZBc3luY19EZXZDbG9zZSgmZGV2SWQpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfRUNDKSAmJiBkZWZpbmVkKEZQX0VDQykgJiYgZGVmaW5lZChIQVZFX1RIUkVBRF9MUykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkZWZpbmVkKEhBVkVfU1RBQ0tfU0laRSkKKyAgICB3Y19lY2NfZnBfZnJlZSgpOyAgLyogZnJlZSBwZXIgdGhyZWFkIGNhY2hlICovCisjZW5kaWYKKworICAgIC8qIFRoZXJlIGFyZSB1c2UgY2FzZXMgIHdoZW4gdGhlc2UgYXNzaWdubWVudHMgYXJlIG5vdCByZWFkLiBUbyBhdm9pZAorICAgICAqIHBvdGVudGlhbCBjb25mdXNpb24gdGhvc2Ugd2FybmluZ3MgaGF2ZSBiZWVuIGhhbmRsZWQgaGVyZS4KKyAgICAgKi8KKyAgICAodm9pZCkgdXNlQ2xpZW50Q2VydDsKKyAgICAodm9pZCkgdmVyaWZ5Q2VydDsKKyAgICAodm9pZCkgb3VyQ2VydDsKKyAgICAodm9pZCkgb3VyS2V5OworICAgICh2b2lkKSB1c2VWZXJpZnlDYjsKKworI2lmICFkZWZpbmVkKFdPTEZTU0xfVElSVE9TKQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiAhTk9fV09MRlNTTF9DTElFTlQgKi8KKworCisvKiBzbyBvdmVyYWxsIHRlc3RzIGNhbiBwdWxsIGluIHRlc3QgZnVuY3Rpb24gKi8KKyNpZm5kZWYgTk9fTUFJTl9EUklWRVIKKworICAgIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKKyAgICB7CisgICAgICAgIGZ1bmNfYXJncyBhcmdzOworCisKKyAgICAgICAgU3RhcnRUQ1AoKTsKKworICAgICAgICBhcmdzLmFyZ2MgPSBhcmdjOworICAgICAgICBhcmdzLmFyZ3YgPSBhcmd2OworICAgICAgICBhcmdzLnJldHVybl9jb2RlID0gMDsKKworI2lmIGRlZmluZWQoREVCVUdfV09MRlNTTCkgJiYgIWRlZmluZWQoV09MRlNTTF9NREtfU0hFTEwpICYmICFkZWZpbmVkKFNUQUNLX1RSQVApCisgICAgICAgIHdvbGZTU0xfRGVidWdnaW5nX09OKCk7CisjZW5kaWYKKyAgICAgICAgd29sZlNTTF9Jbml0KCk7CisgICAgICAgIENoYW5nZVRvV29sZlJvb3QoKTsKKworI2lmbmRlZiBOT19XT0xGU1NMX0NMSUVOVAorI2lmZGVmIEhBVkVfU1RBQ0tfU0laRQorICAgICAgICBTdGFja1NpemVDaGVjaygmYXJncywgY2xpZW50X3Rlc3QpOworI2Vsc2UKKyAgICAgICAgY2xpZW50X3Rlc3QoJmFyZ3MpOworI2VuZGlmCisjZWxzZQorICAgICAgICBwcmludGYoIkNsaWVudCBub3QgY29tcGlsZWQgaW4hXG4iKTsKKyNlbmRpZgorICAgICAgICB3b2xmU1NMX0NsZWFudXAoKTsKKworI2lmZGVmIEhBVkVfV05SCisgICAgaWYgKHdjX0ZyZWVOZXRSYW5kb20oKSA8IDApCisgICAgICAgIGVycl9zeXMoIkZhaWxlZCB0byBmcmVlIG5ldFJhbmRvbSBjb250ZXh0Iik7CisjZW5kaWYgLyogSEFWRV9XTlIgKi8KKworICAgICAgICByZXR1cm4gYXJncy5yZXR1cm5fY29kZTsKKyAgICB9CisKKyAgICBpbnQgbXlvcHRpbmQgPSAwOworICAgIGNoYXIqIG15b3B0YXJnID0gTlVMTDsKKworI2VuZGlmIC8qIE5PX01BSU5fRFJJVkVSICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL3NoYXJlL2RvYy93b2xmc3NsL2V4YW1wbGUvZWNob2NsaWVudC5jIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9leGFtcGxlL2VjaG9jbGllbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDViMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9leGFtcGxlL2VjaG9jbGllbnQuYwpAQCAtMCwwICsxLDQwOSBAQAorLyogZWNob2NsaWVudC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorICAgICNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9zZXR0aW5ncy5oPgorLyogbGV0J3MgdXNlIGN5YXNzbCBsYXllciBBTkQgY3lhc3NsIG9wZW5zc2wgbGF5ZXIgKi8KKyNpbmNsdWRlIDxjeWFzc2wvc3NsLmg+CisjaW5jbHVkZSA8Y3lhc3NsL29wZW5zc2wvc3NsLmg+CisjaWZkZWYgQ1lBU1NMX0RUTFMKKyAgICAjaW5jbHVkZSA8Y3lhc3NsL2Vycm9yLXNzbC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkgfHwgZGVmaW5lZChXT0xGU1NMX0tFSUxfVENQX05FVCkKKyAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgI2luY2x1ZGUgImNtc2lzX29zLmgiCisgICAgICAgICNpbmNsdWRlICJybF9mcy5oIgorICAgICAgICAjaW5jbHVkZSAicmxfbmV0LmgiCisgICAgICAgICNpbmNsdWRlICJ3b2xmc3NsX01ES19BUk0uaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3lhc3NsL3Rlc3QuaD4KKworI2luY2x1ZGUgPGV4YW1wbGVzL2VjaG9jbGllbnQvZWNob2NsaWVudC5oPgorCisjaWZuZGVmIE5PX1dPTEZTU0xfQ0xJRU5UCisKKworI2lmZGVmIE5PX0ZJTEVTWVNURU0KKyNpZmRlZiBOT19SU0EKKyNlcnJvciBjdXJyZW50bHkgdGhlIGV4YW1wbGUgb25seSB0cmllcyB0byBsb2FkIGluIGEgUlNBIGJ1ZmZlcgorI2VuZGlmCisjdW5kZWYgVVNFX0NFUlRfQlVGRkVSU18yMDQ4CisjZGVmaW5lIFVTRV9DRVJUX0JVRkZFUlNfMjA0OAorI2luY2x1ZGUgPHdvbGZzc2wvY2VydHNfdGVzdC5oPgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgc3RhdGljIGludCBkZXZJZCA9IElOVkFMSURfREVWSUQ7CisjZW5kaWYKKworCit2b2lkIGVjaG9jbGllbnRfdGVzdCh2b2lkKiBhcmdzKQoreworICAgIFNPQ0tFVF9UIHNvY2tmZCA9IDA7CisKKyAgICBGSUxFKiBmaW4gICA9IHN0ZGluICA7CisgICAgRklMRSogZm91dCA9IHN0ZG91dDsKKworI2lmbmRlZiBXT0xGU1NMX01ES19TSEVMTAorICAgIGludCBpbkNyZWF0ZWQgID0gMDsKKyAgICBpbnQgb3V0Q3JlYXRlZCA9IDA7CisjZW5kaWYKKworICAgIGNoYXIgbXNnWzEwMjRdOworICAgIGNoYXIgcmVwbHlbMTAyNCsxXTsKKworICAgIFNTTF9NRVRIT0QqIG1ldGhvZCA9IDA7CisgICAgU1NMX0NUWCogICAgY3R4ICAgID0gMDsKKyAgICBTU0wqICAgICAgICBzc2wgICAgPSAwOworCisgICAgaW50IHJldCA9IDAsIGVyciA9IDA7CisgICAgaW50IGRvRFRMUyA9IDA7CisgICAgaW50IGRvUFNLID0gMDsKKyAgICBpbnQgc2VuZFN6OworI2lmbmRlZiBXT0xGU1NMX01ES19TSEVMTAorICAgIGludCBhcmdjICAgID0gMDsKKyAgICBjaGFyKiogYXJndiA9IDA7CisjZW5kaWYKKyAgICB3b3JkMTYgcG9ydDsKKyAgICBjaGFyIGJ1ZmZlcltDWUFTU0xfTUFYX0VSUk9SX1NaXTsKKworICAgICgoZnVuY19hcmdzKilhcmdzKS0+cmV0dXJuX2NvZGUgPSAtMTsgLyogZXJyb3Igc3RhdGUgKi8KKworI2lmbmRlZiBXT0xGU1NMX01ES19TSEVMTAorICAgIGFyZ2MgPSAoKGZ1bmNfYXJncyopYXJncyktPmFyZ2M7CisgICAgYXJndiA9ICgoZnVuY19hcmdzKilhcmdzKS0+YXJndjsKKworICAgIGlmIChhcmdjID49IDIpIHsKKyAgICAgICAgZmluICA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisgICAgICAgIGluQ3JlYXRlZCA9IDE7CisgICAgfQorICAgIGlmIChhcmdjID49IDMpIHsKKyAgICAgICAgZm91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisgICAgICAgIG91dENyZWF0ZWQgPSAxOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCFmaW4pICBlcnJfc3lzKCJjYW4ndCBvcGVuIGlucHV0IGZpbGUiKTsKKyAgICBpZiAoIWZvdXQpIGVycl9zeXMoImNhbid0IG9wZW4gb3V0cHV0IGZpbGUiKTsKKworI2lmZGVmIENZQVNTTF9EVExTCisgICAgZG9EVExTICA9IDE7CisjZW5kaWYKKworI2lmZGVmIENZQVNTTF9MRUFOUFNLCisgICAgZG9QU0sgPSAxOworI2VuZGlmCisjaWYgZGVmaW5lZChOT19SU0EpICYmICFkZWZpbmVkKEhBVkVfRUNDKSAmJiAhZGVmaW5lZChIQVZFX0VEMjU1MTkpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZpbmVkKEhBVkVfRUQ0NDgpCisgICAgZG9QU0sgPSAxOworI2VuZGlmCisgICAgKHZvaWQpZG9QU0s7CisKKyNpZiBkZWZpbmVkKE5PX01BSU5fRFJJVkVSKSAmJiAhZGVmaW5lZChVU0VfV0lORE9XU19BUEkpICYmICFkZWZpbmVkKFdPTEZTU0xfTURLX1NIRUxMKQorICAgIHBvcnQgPSAoKGZ1bmNfYXJncyopYXJncyktPnNpZ25hbC0+cG9ydDsKKyNlbHNlCisgICAgcG9ydCA9IHlhc3NsUG9ydDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDWUFTU0xfRFRMUykKKyAgICBtZXRob2QgID0gRFRMU3YxXzJfY2xpZW50X21ldGhvZCgpOworI2VsaWYgIWRlZmluZWQoTk9fVExTKQorICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIGRlZmluZWQoV09MRlNTTF9TTklGRkVSKQorICAgIG1ldGhvZCA9IEN5YVRMU3YxXzJfY2xpZW50X21ldGhvZCgpOworICAgICNlbHNlCisgICAgbWV0aG9kID0gQ3lhU1NMdjIzX2NsaWVudF9tZXRob2QoKTsKKyAgICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoV09MRlNTTF9BTExPV19TU0xWMykKKyAgICBtZXRob2QgPSBTU0x2M19jbGllbnRfbWV0aG9kKCk7CisjZWxzZQorICAgICNlcnJvciAibm8gdmFsaWQgY2xpZW50IG1ldGhvZCB0eXBlIgorI2VuZGlmCisgICAgY3R4ICAgID0gU1NMX0NUWF9uZXcobWV0aG9kKTsKKworI2lmbmRlZiBOT19GSUxFU1lTVEVNCisgICAgI2lmbmRlZiBOT19SU0EKKyAgICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY3R4LCBjYUNlcnRGaWxlLCAwKSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgY2EgZmlsZSwgUGxlYXNlIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgSEFWRV9FQ0MKKyAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eCwgY2FFY2NDZXJ0RmlsZSwgMCkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBjYSBmaWxlLCBQbGVhc2UgcnVuIGZyb20gd29sZlNTTCBob21lIGRpciIpOworICAgICNlbGlmIGRlZmluZWQoSEFWRV9FRDI1NTE5KQorICAgICAgICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY3R4LCBjYUVkQ2VydEZpbGUsIDApICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgY2EgZmlsZSwgUGxlYXNlIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAjZWxpZiBkZWZpbmVkKEhBVkVfRUQ0NDgpCisgICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjdHgsIGNhRWQ0NDhDZXJ0RmlsZSwgMCkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBjYSBmaWxlLCBQbGVhc2UgcnVuIGZyb20gd29sZlNTTCBob21lIGRpciIpOworICAgICNlbmRpZgorI2VsaWYgIWRlZmluZWQoTk9fQ0VSVFMpCisgICAgaWYgKCFkb1BTSykKKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX2xvYWRfdmVyaWZ5X2J1ZmZlcihjdHgsIGNhX2NlcnRfZGVyXzIwNDgsCisgICAgICAgICAgICBzaXplb2ZfY2FfY2VydF9kZXJfMjA0OCwgV09MRlNTTF9GSUxFVFlQRV9BU04xKSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBsb2FkIGNhIGJ1ZmZlciIpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENZQVNTTF9TTklGRkVSKQorICAgIC8qIE9ubHkgc2V0IGlmIG5vdCBydW5uaW5nIHRlc3RzdWl0ZSAqLworICAgIGlmIChYU1RSU1RSKGFyZ3ZbMF0sICJ0ZXN0c3VpdGUiKSAhPSAwKSB7CisgICAgICAgIC8qIGRvbid0IHVzZSBFREgsIGNhbid0IHNuaWZmIHRtcCBrZXlzICovCisgICAgICAgIFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGN0eCwgIkFFUzI1Ni1TSEEiKTsKKyAgICB9CisjZW5kaWYKKyNpZm5kZWYgTk9fUFNLCisgICAgaWYgKGRvUFNLKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRDaXBoZXJMaXN0OworCisgICAgICAgIEN5YVNTTF9DVFhfc2V0X3Bza19jbGllbnRfY2FsbGJhY2soY3R4LCBteV9wc2tfY2xpZW50X2NiKTsKKyAgICAgICAgI2lmZGVmIEhBVkVfTlVMTF9DSVBIRVIKKyAgICAgICAgICAgIGRlZmF1bHRDaXBoZXJMaXN0ID0gIlBTSy1OVUxMLVNIQTI1NiI7CisgICAgICAgICNlbGlmIGRlZmluZWQoSEFWRV9BRVNHQ00pICYmICFkZWZpbmVkKE5PX0RIKQorICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgICAgIGRlZmF1bHRDaXBoZXJMaXN0ID0gIlRMUzEzLUFFUzEyOC1HQ00tU0hBMjU2IgorICAgICAgICAgICAgICAgICNpZm5kZWYgV09MRlNTTF9OT19UTFMxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOkRIRS1QU0stQUVTMTI4LUdDTS1TSEEyNTYiCisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgIGRlZmF1bHRDaXBoZXJMaXN0ID0gIkRIRS1QU0stQUVTMTI4LUdDTS1TSEEyNTYiOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICNlbGlmIGRlZmluZWQoSEFWRV9BRVNHQ00pICYmIGRlZmluZWQoV09MRlNTTF9UTFMxMykKKyAgICAgICAgICAgIGRlZmF1bHRDaXBoZXJMaXN0ID0gIlRMUzEzLUFFUzEyOC1HQ00tU0hBMjU2IgorICAgICAgICAgICAgICAgICNpZm5kZWYgV09MRlNTTF9OT19UTFMxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOkRIRS1QU0stQUVTMTI4LUdDTS1TSEEyNTYiCisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgOworICAgICAgICAjZWxzZQorICAgICAgICAgICAgZGVmYXVsdENpcGhlckxpc3QgPSAiUFNLLUFFUzEyOC1DQkMtU0hBMjU2IjsKKyAgICAgICAgI2VuZGlmCisgICAgICAgIGlmIChDeWFTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChjdHgsZGVmYXVsdENpcGhlckxpc3QpICE9V09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5cygiY2xpZW50IGNhbid0IHNldCBjaXBoZXIgbGlzdCAyIik7CisgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9wc2tfY2FsbGJhY2tfY3R4KGN0eCwgKHZvaWQqKWRlZmF1bHRDaXBoZXJMaXN0KTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfRU5DUllQVEVEX0tFWVMKKyAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYihjdHgsIFBhc3N3b3JkQ2FsbEJhY2spOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkKKyAgICBDeWFTU0xfQ1RYX3NldF92ZXJpZnkoY3R4LCBXT0xGU1NMX1ZFUklGWV9OT05FLCAwKTsKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIHJldCA9IHdvbGZBc3luY19EZXZPcGVuKCZkZXZJZCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgcHJpbnRmKCJBc3luYyBkZXZpY2Ugb3BlbiBmYWlsZWRcblJ1bm5pbmcgd2l0aG91dCBhc3luY1xuIik7CisgICAgfQorICAgIHdvbGZTU0xfQ1RYX1NldERldklkKGN0eCwgZGV2SWQpOworI2VuZGlmIC8qIFdPTEZTU0xfQVNZTkNfQ1JZUFQgKi8KKworICAgIHNzbCA9IFNTTF9uZXcoY3R4KTsKKyAgICB0Y3BfY29ubmVjdCgmc29ja2ZkLCB5YXNzbElQLCBwb3J0LCBkb0RUTFMsIDAsIHNzbCk7CisKKyAgICBTU0xfc2V0X2ZkKHNzbCwgc29ja2ZkKTsKKyNpZiBkZWZpbmVkKFVTRV9XSU5ET1dTX0FQSSkgJiYgZGVmaW5lZChDWUFTU0xfRFRMUykgJiYgZGVmaW5lZChOT19NQUlOX0RSSVZFUikKKyAgICAvKiBsZXQgZWNob3NlcnZlciBiaW5kIGZpcnN0LCBUT0RPOiBhZGQgV2luZG93cyBzaWduYWwgbGlrZSBwdGhyZWFkcyBkb2VzICovCisgICAgU2xlZXAoMTAwKTsKKyNlbmRpZgorCisgICAgZG8geworICAgICAgICBlcnIgPSAwOyAvKiBSZXNldCBlcnJvciAqLworICAgICAgICByZXQgPSBTU0xfY29ubmVjdChzc2wpOworICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgZXJyID0gU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgICAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgaWYgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX0FzeW5jUG9sbChzc2wsIFdPTEZfUE9MTF9GTEFHX0NIRUNLX0hXKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICNlbmRpZgorICAgICAgICB9CisgICAgfSB3aGlsZSAoZXJyID09IFdDX1BFTkRJTkdfRSk7CisgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgcHJpbnRmKCJTU0xfY29ubmVjdCBlcnJvciAlZCwgJXNcbiIsIGVyciwKKyAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoZXJyLCBidWZmZXIpKTsKKyAgICAgICAgZXJyX3N5cygiU1NMX2Nvbm5lY3QgZmFpbGVkIik7CisgICAgfQorCisgICAgd2hpbGUgKGZnZXRzKG1zZywgc2l6ZW9mKG1zZyksIGZpbikgIT0gMCkgeworCisgICAgICAgIHNlbmRTeiA9IChpbnQpWFNUUkxFTihtc2cpOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGVyciA9IDA7IC8qIHJlc2V0IGVycm9yICovCisgICAgICAgICAgICByZXQgPSBTU0xfd3JpdGUoc3NsLCBtc2csIHNlbmRTeik7CisgICAgICAgICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpOworICAgICAgICBpZiAocmV0ICE9IHNlbmRTeikgeworICAgICAgICAgICAgcHJpbnRmKCJTU0xfd3JpdGUgbXNnIGVycm9yICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoZXJyLCBidWZmZXIpKTsKKyAgICAgICAgICAgIGVycl9zeXMoIlNTTF93cml0ZSBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJuY21wKG1zZywgInF1aXQiLCA0KSA9PSAwKSB7CisgICAgICAgICAgICBmcHV0cygic2VuZGluZyBzZXJ2ZXIgc2h1dGRvd24gY29tbWFuZDogcXVpdCFcbiIsIGZvdXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RybmNtcChtc2csICJicmVhayIsIDUpID09IDApIHsKKyAgICAgICAgICAgIGZwdXRzKCJzZW5kaW5nIHNlcnZlciBzZXNzaW9uIGNsb3NlOiBicmVhayFcbiIsIGZvdXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICNpZm5kZWYgV09MRlNTTF9NREtfU0hFTEwKKyAgICAgICAgd2hpbGUgKHNlbmRTeikKKyAgICAjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGVyciA9IDA7IC8qIHJlc2V0IGVycm9yICovCisgICAgICAgICAgICAgICAgcmV0ID0gU1NMX3JlYWQoc3NsLCByZXBseSwgc2l6ZW9mKHJlcGx5KS0xKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgICAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX0FzeW5jUG9sbChzc2wsIFdPTEZfUE9MTF9GTEFHX0NIRUNLX0hXKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpOworICAgICAgICAgICAgaWYgKHJldCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXBseVtyZXRdID0gMDsKKyAgICAgICAgICAgICAgICBmcHV0cyhyZXBseSwgZm91dCk7CisgICAgICAgICAgICAgICAgZmZsdXNoKGZvdXQpIDsKKyAgICAgICAgICAgICAgICBzZW5kU3ogLT0gcmV0OworICAgICAgICAgICAgfQorI2lmZGVmIENZQVNTTF9EVExTCisgICAgICAgICAgICBlbHNlIGlmICh3b2xmU1NMX2R0bHMoc3NsKSAmJiBlcnIgPT0gREVDUllQVF9FUlJPUikgeworICAgICAgICAgICAgICAgIC8qIFRoaXMgY29uZGl0aW9uIGlzIE9LLiBUaGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkCisgICAgICAgICAgICAgICAgICogc2lsZW50bHkgd2hlbiB0aGVyZSBpcyBhIGRlY3J5cHQgb3IgTUFDIGVycm9yIG9uCisgICAgICAgICAgICAgICAgICogYSBEVExTIHJlY29yZC4gKi8KKyAgICAgICAgICAgICAgICBzZW5kU3ogPSAwOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlNTTF9yZWFkIG1zZyBlcnJvciAlZCwgJXNcbiIsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhlcnIsIGJ1ZmZlcikpOworICAgICAgICAgICAgICAgIGVycl9zeXMoIlNTTF9yZWFkIGZhaWxlZCIpOworCisgICAgICAgICAgICAjaWZuZGVmIFdPTEZTU0xfTURLX1NIRUxMCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworCisjaWZkZWYgQ1lBU1NMX0RUTFMKKyAgICBzdHJuY3B5KG1zZywgImJyZWFrIiwgNik7CisgICAgc2VuZFN6ID0gKGludClzdHJsZW4obXNnKTsKKyAgICAvKiB0cnkgdG8gdGVsbCBzZXJ2ZXIgZG9uZSAqLworICAgIGRvIHsKKyAgICAgICAgZXJyID0gMDsgLyogcmVzZXQgZXJyb3IgKi8KKyAgICAgICAgcmV0ID0gU1NMX3dyaXRlKHNzbCwgbXNnLCBzZW5kU3opOworICAgICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgIGVyciA9IFNTTF9nZXRfZXJyb3Ioc3NsLCAwKTsKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9Bc3luY1BvbGwoc3NsLCBXT0xGX1BPTExfRkxBR19DSEVDS19IVyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAjZW5kaWYKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpOworI2Vsc2UKKyAgICBTU0xfc2h1dGRvd24oc3NsKTsKKyNlbmRpZgorCisgICAgU1NMX2ZyZWUoc3NsKTsKKyAgICBTU0xfQ1RYX2ZyZWUoY3R4KTsKKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICB3b2xmQXN5bmNfRGV2Q2xvc2UoJmRldklkKTsKKyNlbmRpZgorCisgICAgZmZsdXNoKGZvdXQpOworI2lmbmRlZiBXT0xGU1NMX01ES19TSEVMTAorICAgIGlmIChpbkNyZWF0ZWQpICBmY2xvc2UoZmluKTsKKyAgICBpZiAob3V0Q3JlYXRlZCkgZmNsb3NlKGZvdXQpOworI2VuZGlmCisKKyAgICBDbG9zZVNvY2tldChzb2NrZmQpOworICAgICgoZnVuY19hcmdzKilhcmdzKS0+cmV0dXJuX2NvZGUgPSAwOworfQorCisjZW5kaWYgLyogIU5PX1dPTEZTU0xfQ0xJRU5UICovCisKKy8qIHNvIG92ZXJhbGwgdGVzdHMgY2FuIHB1bGwgaW4gdGVzdCBmdW5jdGlvbiAqLworI2lmbmRlZiBOT19NQUlOX0RSSVZFUgorCisgICAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorICAgIHsKKyAgICAgICAgZnVuY19hcmdzIGFyZ3M7CisKKyNpZmRlZiBIQVZFX1dOUgorICAgICAgICBpZiAod2NfSW5pdE5ldFJhbmRvbSh3bnJDb25maWcsIE5VTEwsIDUwMDApICE9IDApCisgICAgICAgICAgICBlcnJfc3lzKCJXaGl0ZXdvb2QgbmV0UmFuZG9tIGdsb2JhbCBjb25maWcgZmFpbGVkIik7CisjZW5kaWYKKworICAgICAgICBTdGFydFRDUCgpOworCisgICAgICAgIGFyZ3MuYXJnYyA9IGFyZ2M7CisgICAgICAgIGFyZ3MuYXJndiA9IGFyZ3Y7CisgICAgICAgIGFyZ3MucmV0dXJuX2NvZGUgPSAwOworCisgICAgICAgIEN5YVNTTF9Jbml0KCk7CisjaWYgZGVmaW5lZChERUJVR19DWUFTU0wpICYmICFkZWZpbmVkKFdPTEZTU0xfTURLX1NIRUxMKQorICAgICAgICBDeWFTU0xfRGVidWdnaW5nX09OKCk7CisjZW5kaWYKKyNpZm5kZWYgQ1lBU1NMX1RJUlRPUworICAgICAgICBDaGFuZ2VUb1dvbGZSb290KCk7CisjZW5kaWYKKyNpZm5kZWYgTk9fV09MRlNTTF9DTElFTlQKKyAgICAgICAgZWNob2NsaWVudF90ZXN0KCZhcmdzKTsKKyNlbmRpZgorCisgICAgICAgIEN5YVNTTF9DbGVhbnVwKCk7CisKKyNpZmRlZiBIQVZFX1dOUgorICAgICAgICBpZiAod2NfRnJlZU5ldFJhbmRvbSgpIDwgMCkKKyAgICAgICAgICAgIGVycl9zeXMoIkZhaWxlZCB0byBmcmVlIG5ldFJhbmRvbSBjb250ZXh0Iik7CisjZW5kaWYgLyogSEFWRV9XTlIgKi8KKworICAgICAgICByZXR1cm4gYXJncy5yZXR1cm5fY29kZTsKKyAgICB9CisKKyNlbmRpZiAvKiBOT19NQUlOX0RSSVZFUiAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9leGFtcGxlL2VjaG9zZXJ2ZXIuYyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvZXhhbXBsZS9lY2hvc2VydmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzNmEyNgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvZXhhbXBsZS9lY2hvc2VydmVyLmMKQEAgLTAsMCArMSw1NzYgQEAKKy8qIGVjaG9zZXJ2ZXIuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAgICAjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGN5YXNzbC9zc2wuaD4gLyogbmFtZSBjaGFuZ2UgcG9ydGFiaWxpdHkgbGF5ZXIgKi8KKyNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3NldHRpbmdzLmg+CisjaWZkZWYgSEFWRV9FQ0MKKyAgICAjaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9lY2MuaD4gICAvKiBlY2NfZnBfZnJlZSAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfTURLX0FSTSkgfHwgZGVmaW5lZChXT0xGU1NMX0tFSUxfVENQX05FVCkKKyAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgI2luY2x1ZGUgImNtc2lzX29zLmgiCisgICAgICAgICNpbmNsdWRlICJybF9mcy5oIgorICAgICAgICAjaW5jbHVkZSAicmxfbmV0LmgiCisgICAgICAgICNpbmNsdWRlICJ3b2xmc3NsX01ES19BUk0uaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3lhc3NsL3NzbC5oPgorI2luY2x1ZGUgPGN5YXNzbC90ZXN0Lmg+CisKKyNpZm5kZWYgTk9fTUFJTl9EUklWRVIKKyAgICAjZGVmaW5lIEVDSE9fT1VUCisjZW5kaWYKKworI2luY2x1ZGUgImV4YW1wbGVzL2VjaG9zZXJ2ZXIvZWNob3NlcnZlci5oIgorCisjaWZuZGVmIE5PX1dPTEZTU0xfU0VSVkVSCisKKyNpZmRlZiBOT19GSUxFU1lTVEVNCisjaWZkZWYgTk9fUlNBCisjZXJyb3IgY3VycmVudGx5IHRoZSBleGFtcGxlIG9ubHkgdHJpZXMgdG8gbG9hZCBpbiBhIFJTQSBidWZmZXIKKyNlbmRpZgorI3VuZGVmIFVTRV9DRVJUX0JVRkZFUlNfMjA0OAorI2RlZmluZSBVU0VfQ0VSVF9CVUZGRVJTXzIwNDgKKyNpbmNsdWRlIDx3b2xmc3NsL2NlcnRzX3Rlc3QuaD4KKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIHN0YXRpYyBpbnQgZGV2SWQgPSBJTlZBTElEX0RFVklEOworI2VuZGlmCisKKyNkZWZpbmUgU1ZSX0NPTU1BTkRfU0laRSAyNTYKKworc3RhdGljIHZvaWQgU2lnbmFsUmVhZHkodm9pZCogYXJncywgd29yZDE2IHBvcnQpCit7CisjaWYgZGVmaW5lZChfUE9TSVhfVEhSRUFEUykgJiYgZGVmaW5lZChOT19NQUlOX0RSSVZFUikgJiYgIWRlZmluZWQoX19NSU5HVzMyX18pCisgICAgLyogc2lnbmFsIHJlYWR5IHRvIHRjcF9hY2NlcHQgKi8KKyAgICBmdW5jX2FyZ3MqIHNlcnZlcl9hcmdzID0gKGZ1bmNfYXJncyopYXJnczsKKyAgICB0Y3BfcmVhZHkqIHJlYWR5ID0gc2VydmVyX2FyZ3MtPnNpZ25hbDsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJnJlYWR5LT5tdXRleCk7CisgICAgcmVhZHktPnJlYWR5ID0gMTsKKyAgICByZWFkeS0+cG9ydCA9IHBvcnQ7CisgICAgcHRocmVhZF9jb25kX3NpZ25hbCgmcmVhZHktPmNvbmQpOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZyZWFkeS0+bXV0ZXgpOworI2VuZGlmCisgICAgKHZvaWQpYXJnczsKKyAgICAodm9pZClwb3J0OworfQorCisKK1RIUkVBRF9SRVRVUk4gQ1lBU1NMX1RIUkVBRCBlY2hvc2VydmVyX3Rlc3Qodm9pZCogYXJncykKK3sKKyAgICBTT0NLRVRfVCAgICAgICBzb2NrZmQgPSAwOworICAgIENZQVNTTF9NRVRIT0QqIG1ldGhvZCA9IDA7CisgICAgQ1lBU1NMX0NUWCogICAgY3R4ICAgID0gMDsKKworICAgIGludCAgICByZXQgPSAwOworICAgIGludCAgICBkb0RUTFMgPSAwOworICAgIGludCAgICBkb1BTSzsKKyAgICBpbnQgICAgb3V0Q3JlYXRlZCA9IDA7CisgICAgaW50ICAgIHNodXREb3duID0gMDsKKyAgICBpbnQgICAgdXNlQW55QWRkciA9IDA7CisgICAgd29yZDE2IHBvcnQ7CisgICAgaW50ICAgIGFyZ2MgPSAoKGZ1bmNfYXJncyopYXJncyktPmFyZ2M7CisgICAgY2hhcioqIGFyZ3YgPSAoKGZ1bmNfYXJncyopYXJncyktPmFyZ3Y7CisgICAgY2hhciAgIGJ1ZmZlcltDWUFTU0xfTUFYX0VSUk9SX1NaXTsKKworI2lmZGVmIEVDSE9fT1VUCisgICAgRklMRSogZm91dCA9IHN0ZG91dDsKKyAgICBpZiAoYXJnYyA+PSAyKSB7CisgICAgICAgIGZvdXQgPSBmb3Blbihhcmd2WzFdLCAidyIpOworICAgICAgICBvdXRDcmVhdGVkID0gMTsKKyAgICB9CisgICAgaWYgKCFmb3V0KSBlcnJfc3lzKCJjYW4ndCBvcGVuIG91dHB1dCBmaWxlIik7CisjZW5kaWYKKyAgICAodm9pZClvdXRDcmVhdGVkOworICAgICh2b2lkKWFyZ2M7CisgICAgKHZvaWQpYXJndjsKKworICAgICgoZnVuY19hcmdzKilhcmdzKS0+cmV0dXJuX2NvZGUgPSAtMTsgLyogZXJyb3Igc3RhdGUgKi8KKworI2lmZGVmIENZQVNTTF9EVExTCisgICAgZG9EVExTICA9IDE7CisjZW5kaWYKKworI2lmIChkZWZpbmVkKE5PX1JTQSkgJiYgIWRlZmluZWQoSEFWRV9FQ0MpICYmICFkZWZpbmVkKEhBVkVfRUQyNTUxOSkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZChIQVZFX0VENDQ4KSkgfHwgZGVmaW5lZChDWUFTU0xfTEVBTlBTSykKKyAgICBkb1BTSyA9IDE7CisjZWxzZQorICAgIGRvUFNLID0gMDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChOT19NQUlOX0RSSVZFUikgJiYgIWRlZmluZWQoQ1lBU1NMX1NOSUZGRVIpICYmIFwKKyAgICAgIWRlZmluZWQoV09MRlNTTF9NREtfU0hFTEwpICYmICFkZWZpbmVkKENZQVNTTF9USVJUT1MpICYmIFwKKyAgICAgIWRlZmluZWQoVVNFX1dJTkRPV1NfQVBJKQorICAgIC8qIExldCB0Y3BfbGlzdGVuIGFzc2lnbiBwb3J0ICovCisgICAgcG9ydCA9IDA7CisjZWxzZQorICAgIC8qIFVzZSBkZWZhdWx0IHBvcnQgKi8KKyAgICBwb3J0ID0gd29sZlNTTFBvcnQ7CisjZW5kaWYKKworI2lmIGRlZmluZWQoVVNFX0FOWV9BRERSKQorICAgIHVzZUFueUFkZHIgPSAxOworI2VuZGlmCisKKyNpZmRlZiBDWUFTU0xfVElSVE9TCisgICAgZmRPcGVuU2Vzc2lvbihUYXNrX3NlbGYoKSk7CisjZW5kaWYKKworICAgIHRjcF9saXN0ZW4oJnNvY2tmZCwgJnBvcnQsIHVzZUFueUFkZHIsIGRvRFRMUywgMCk7CisKKyNpZiBkZWZpbmVkKENZQVNTTF9EVExTKQorICAgIG1ldGhvZCAgPSBDeWFEVExTdjFfMl9zZXJ2ZXJfbWV0aG9kKCk7CisjZWxpZiAhZGVmaW5lZChOT19UTFMpCisgICAgI2lmIChkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIGRlZmluZWQoV09MRlNTTF9TTklGRkVSKSkgfHwgXAorICAgICAgICBkZWZpbmVkKEhBVkVfTlRSVSkKKyAgICBtZXRob2QgPSBDeWFUTFN2MV8yX3NlcnZlcl9tZXRob2QoKTsKKyAgICAjZWxzZQorICAgIG1ldGhvZCA9IEN5YVNTTHYyM19zZXJ2ZXJfbWV0aG9kKCk7CisgICAgI2VuZGlmCisjZWxpZiBkZWZpbmVkKFdPTEZTU0xfQUxMT1dfU1NMVjMpCisgICAgbWV0aG9kID0gQ3lhU1NMdjNfc2VydmVyX21ldGhvZCgpOworI2Vsc2UKKyAgICAjZXJyb3IgIm5vIHZhbGlkIHNlcnZlciBtZXRob2QgYnVpbHQgaW4iCisjZW5kaWYKKyAgICBjdHggICAgPSBDeWFTU0xfQ1RYX25ldyhtZXRob2QpOworICAgIC8qIEN5YVNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZShjdHgsIFdPTEZTU0xfU0VTU19DQUNIRV9PRkYpOyAqLworCisjaWZkZWYgV09MRlNTTF9FTkNSWVBURURfS0VZUworICAgIEN5YVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKGN0eCwgUGFzc3dvcmRDYWxsQmFjayk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TRVNTSU9OX1RJQ0tFVCkgJiYgZGVmaW5lZChXT0xGU1NMX05PX0RFRl9USUNLRVRfRU5DX0NCKSAmJiBcCisgICAgKChkZWZpbmVkKEhBVkVfQ0hBQ0hBKSAmJiBkZWZpbmVkKEhBVkVfUE9MWTEzMDUpKSB8fCBkZWZpbmVkKEhBVkVfQUVTR0NNKSkKKyAgICBpZiAoVGlja2V0SW5pdCgpICE9IDApCisgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byBzZXR1cCBTZXNzaW9uIFRpY2tldCBLZXkgY29udGV4dCIpOworICAgIHdvbGZTU0xfQ1RYX3NldF9UaWNrZXRFbmNDYihjdHgsIG15VGlja2V0RW5jQ2IpOworI2VuZGlmCisKKyNpZm5kZWYgTk9fRklMRVNZU1RFTQorICAgIGlmIChkb1BTSyA9PSAwKSB7CisgICAgI2lmIGRlZmluZWQoSEFWRV9OVFJVKSAmJiBkZWZpbmVkKFdPTEZTU0xfU1RBVElDX1JTQSkKKyAgICAgICAgLyogbnRydSAqLworICAgICAgICBpZiAoQ3lhU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZShjdHgsIG50cnVDZXJ0RmlsZSwgV09MRlNTTF9GSUxFVFlQRV9QRU0pCisgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBudHJ1IGNlcnQgZmlsZSwgIgorICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKworICAgICAgICBpZiAoQ3lhU1NMX0NUWF91c2VfTlRSVVByaXZhdGVLZXlfZmlsZShjdHgsIG50cnVLZXlGaWxlKQorICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgbnRydSBrZXkgZmlsZSwgIgorICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAjZWxpZiBkZWZpbmVkKEhBVkVfRUNDKSAmJiAhZGVmaW5lZChDWUFTU0xfU05JRkZFUikKKyAgICAgICAgLyogZWNjICovCisgICAgICAgIGlmIChDeWFTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKGN0eCwgZWNjQ2VydEZpbGUsIFdPTEZTU0xfRklMRVRZUEVfUEVNKQorICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgc2VydmVyIGNlcnQgZmlsZSwgIgorICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKworICAgICAgICBpZiAoQ3lhU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKGN0eCwgZWNjS2V5RmlsZSwgV09MRlNTTF9GSUxFVFlQRV9QRU0pCisgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBzZXJ2ZXIga2V5IGZpbGUsICIKKyAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBydW4gZnJvbSB3b2xmU1NMIGhvbWUgZGlyIik7CisgICAgI2VsaWYgZGVmaW5lZChIQVZFX0VEMjU1MTkpICYmICFkZWZpbmVkKENZQVNTTF9TTklGRkVSKQorICAgICAgICAvKiBlZDI1NTE5ICovCisgICAgICAgIGlmIChDeWFTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKGN0eCwgZWRDZXJ0RmlsZSkKKyAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBsb2FkIHNlcnZlciBjZXJ0IGZpbGUsICIKKyAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBydW4gZnJvbSB3b2xmU1NMIGhvbWUgZGlyIik7CisKKyAgICAgICAgaWYgKEN5YVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShjdHgsIGVkS2V5RmlsZSwgV09MRlNTTF9GSUxFVFlQRV9QRU0pCisgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBzZXJ2ZXIga2V5IGZpbGUsICIKKyAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBydW4gZnJvbSB3b2xmU1NMIGhvbWUgZGlyIik7CisgICAgI2VsaWYgZGVmaW5lZChIQVZFX0VENDQ4KSAmJiAhZGVmaW5lZChDWUFTU0xfU05JRkZFUikKKyAgICAgICAgLyogZWQ0NDggKi8KKyAgICAgICAgaWYgKEN5YVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoY3R4LCBlZDQ0OENlcnRGaWxlKQorICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgc2VydmVyIGNlcnQgZmlsZSwgIgorICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKworICAgICAgICBpZiAoQ3lhU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKGN0eCwgZWQ0NDhLZXlGaWxlLAorICAgICAgICAgICAgICAgIFdPTEZTU0xfRklMRVRZUEVfUEVNKSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBsb2FkIHNlcnZlciBrZXkgZmlsZSwgIgorICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAjZWxpZiBkZWZpbmVkKE5PX0NFUlRTKQorICAgICAgICAvKiBkbyBub3RoaW5nLCBqdXN0IGRvbid0IGxvYWQgY2VydCBmaWxlcyAqLworICAgICNlbHNlCisgICAgICAgIC8qIG5vcm1hbCAqLworICAgICAgICBpZiAoQ3lhU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZShjdHgsIHN2ckNlcnRGaWxlLCBXT0xGU1NMX0ZJTEVUWVBFX1BFTSkKKyAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBsb2FkIHNlcnZlciBjZXJ0IGZpbGUsICIKKyAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBydW4gZnJvbSB3b2xmU1NMIGhvbWUgZGlyIik7CisKKyAgICAgICAgaWYgKEN5YVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShjdHgsIHN2cktleUZpbGUsIFdPTEZTU0xfRklMRVRZUEVfUEVNKQorICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGxvYWQgc2VydmVyIGtleSBmaWxlLCAiCisgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgcnVuIGZyb20gd29sZlNTTCBob21lIGRpciIpOworICAgICNlbmRpZgorICAgIH0gLyogZG9QU0sgKi8KKyNlbGlmICFkZWZpbmVkKE5PX0NFUlRTKQorICAgIGlmICghZG9QU0spIHsKKyAgICAgICAgaWYgKEN5YVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2J1ZmZlcihjdHgsIHNlcnZlcl9jZXJ0X2Rlcl8yMDQ4LAorICAgICAgICAgICAgc2l6ZW9mX3NlcnZlcl9jZXJ0X2Rlcl8yMDQ4LCBXT0xGU1NMX0ZJTEVUWVBFX0FTTjEpCisgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBsb2FkIHNlcnZlciBjZXJ0IGJ1ZmZlciIpOworCisgICAgICAgIGlmIChDeWFTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2J1ZmZlcihjdHgsIHNlcnZlcl9rZXlfZGVyXzIwNDgsCisgICAgICAgICAgICBzaXplb2Zfc2VydmVyX2tleV9kZXJfMjA0OCwgV09MRlNTTF9GSUxFVFlQRV9BU04xKQorICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5cygiY2FuJ3QgbG9hZCBzZXJ2ZXIga2V5IGJ1ZmZlciIpOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDWUFTU0xfU05JRkZFUikKKyAgICAvKiBPbmx5IHNldCBpZiBub3QgcnVubmluZyB0ZXN0c3VpdGUgKi8KKyAgICBpZiAoWFNUUlNUUihhcmd2WzBdLCAidGVzdHN1aXRlIikgIT0gMCkgeworICAgICAgICAvKiBkb24ndCB1c2UgRURILCBjYW4ndCBzbmlmZiB0bXAga2V5cyAqLworICAgICAgICBDeWFTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChjdHgsICJBRVMyNTYtU0hBIik7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoZG9QU0spIHsKKyNpZm5kZWYgTk9fUFNLCisgICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRDaXBoZXJMaXN0OworCisgICAgICAgIEN5YVNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2soY3R4LCBteV9wc2tfc2VydmVyX2NiKTsKKyAgICAgICAgQ3lhU1NMX0NUWF91c2VfcHNrX2lkZW50aXR5X2hpbnQoY3R4LCAiY3lhc3NsIHNlcnZlciIpOworICAgICAgICAjaWZkZWYgSEFWRV9OVUxMX0NJUEhFUgorICAgICAgICAgICAgZGVmYXVsdENpcGhlckxpc3QgPSAiUFNLLU5VTEwtU0hBMjU2IjsKKyAgICAgICAgI2VsaWYgZGVmaW5lZChIQVZFX0FFU0dDTSkgJiYgIWRlZmluZWQoTk9fREgpCisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9UTFMxMworICAgICAgICAgICAgZGVmYXVsdENpcGhlckxpc3QgPSAiVExTMTMtQUVTMTI4LUdDTS1TSEEyNTYiCisgICAgICAgICAgICAgICAgI2lmbmRlZiBXT0xGU1NMX05PX1RMUzEyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6REhFLVBTSy1BRVMxMjgtR0NNLVNIQTI1NiIKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgZGVmYXVsdENpcGhlckxpc3QgPSAiREhFLVBTSy1BRVMxMjgtR0NNLVNIQTI1NiI7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VsaWYgZGVmaW5lZChIQVZFX0FFU0dDTSkgJiYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKQorICAgICAgICAgICAgZGVmYXVsdENpcGhlckxpc3QgPSAiVExTMTMtQUVTMTI4LUdDTS1TSEEyNTYiCisgICAgICAgICAgICAgICAgI2lmbmRlZiBXT0xGU1NMX05PX1RMUzEyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6UFNLLUFFUzEyOC1HQ00tU0hBMjU2IgorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgIGRlZmF1bHRDaXBoZXJMaXN0ID0gIlBTSy1BRVMxMjgtQ0JDLVNIQTI1NiI7CisgICAgICAgICNlbmRpZgorICAgICAgICBpZiAoQ3lhU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoY3R4LCBkZWZhdWx0Q2lwaGVyTGlzdCkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5cygic2VydmVyIGNhbid0IHNldCBjaXBoZXIgbGlzdCAyIik7CisgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9wc2tfY2FsbGJhY2tfY3R4KGN0eCwgKHZvaWQqKWRlZmF1bHRDaXBoZXJMaXN0KTsKKyNlbmRpZgorICAgIH0KKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICByZXQgPSB3b2xmQXN5bmNfRGV2T3BlbigmZGV2SWQpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIHByaW50ZigiQXN5bmMgZGV2aWNlIG9wZW4gZmFpbGVkXG5SdW5uaW5nIHdpdGhvdXQgYXN5bmNcbiIpOworICAgIH0KKyAgICB3b2xmU1NMX0NUWF9TZXREZXZJZChjdHgsIGRldklkKTsKKyNlbmRpZiAvKiBXT0xGU1NMX0FTWU5DX0NSWVBUICovCisKKyAgICBTaWduYWxSZWFkeShhcmdzLCBwb3J0KTsKKworICAgIHdoaWxlICghc2h1dERvd24pIHsKKyAgICAgICAgQ1lBU1NMKiBzc2wgPSBOVUxMOworICAgICAgICBDWUFTU0wqIHdyaXRlX3NzbCA9IE5VTEw7ICAgLyogbWF5IGhhdmUgc2VwYXJhdGUgdy8gSEFWRV9XUklURV9EVVAgKi8KKyAgICAgICAgY2hhciAgICBjb21tYW5kW1NWUl9DT01NQU5EX1NJWkUrMV07CisgICAgICAgIGludCAgICAgZWNob1N6ID0gMDsKKyAgICAgICAgaW50ICAgICBjbGllbnRmZDsKKyAgICAgICAgaW50ICAgICBmaXJzdFJlYWQgPSAxOworICAgICAgICBpbnQgICAgIGdvdEZpcnN0RyA9IDA7CisgICAgICAgIGludCAgICAgZXJyID0gMDsKKyAgICAgICAgU09DS0FERFJfSU5fVCBjbGllbnQ7CisgICAgICAgIHNvY2tsZW5fdCAgICAgY2xpZW50X2xlbiA9IHNpemVvZihjbGllbnQpOworI2lmbmRlZiBDWUFTU0xfRFRMUworICAgICAgICBjbGllbnRmZCA9IGFjY2VwdChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VQVF9USElSRF9UKSZjbGllbnRfbGVuKTsKKyNlbHNlCisgICAgICAgIGNsaWVudGZkID0gc29ja2ZkOworICAgICAgICB7CisgICAgICAgICAgICAvKiBGb3IgRFRMUywgcGVlayBhdCB0aGUgbmV4dCBkYXRhZ3JhbSBzbyB3ZSBjYW4gZ2V0IHRoZSBjbGllbnQncworICAgICAgICAgICAgICogYWRkcmVzcyBhbmQgc2V0IGl0IGludG8gdGhlIHNzbCBvYmplY3QgbGF0ZXIgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgKiBjb29raWUuICovCisgICAgICAgICAgICBpbnQgbjsKKyAgICAgICAgICAgIGJ5dGUgYlsxNTAwXTsKKyAgICAgICAgICAgIG4gPSAoaW50KXJlY3Zmcm9tKGNsaWVudGZkLCAoY2hhciopYiwgc2l6ZW9mKGIpLCBNU0dfUEVFSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIqKSZjbGllbnQsICZjbGllbnRfbGVuKTsKKyAgICAgICAgICAgIGlmIChuIDw9IDApCisgICAgICAgICAgICAgICAgZXJyX3N5cygicmVjdmZyb20gZmFpbGVkIik7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAoV09MRlNTTF9TT0NLRVRfSVNfSU5WQUxJRChjbGllbnRmZCkpIGVycl9zeXMoInRjcCBhY2NlcHQgZmFpbGVkIik7CisKKyAgICAgICAgc3NsID0gQ3lhU1NMX25ldyhjdHgpOworICAgICAgICBpZiAoc3NsID09IE5VTEwpIGVycl9zeXMoIlNTTF9uZXcgZmFpbGVkIik7CisgICAgICAgIEN5YVNTTF9zZXRfZmQoc3NsLCBjbGllbnRmZCk7CisgICAgICAgICNpZmRlZiBDWUFTU0xfRFRMUworICAgICAgICAgICAgd29sZlNTTF9kdGxzX3NldF9wZWVyKHNzbCwgJmNsaWVudCwgY2xpZW50X2xlbik7CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgIWRlZmluZWQoTk9fREgpICYmICFkZWZpbmVkKE5PX0FTTikKKyAgICAgICAgICAgIEN5YVNTTF9TZXRUbXBESF9maWxlKHNzbCwgZGhQYXJhbUZpbGUsIFdPTEZTU0xfRklMRVRZUEVfUEVNKTsKKyAgICAgICAgI2VsaWYgIWRlZmluZWQoTk9fREgpCisgICAgICAgICAgICBTZXRESChzc2wpOyAgLyogd2lsbCByZXBpY2sgc3VpdGVzIHdpdGggREhFLCBoaWdoZXIgdGhhbiBQU0sgKi8KKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgZG8geworICAgICAgICAgICAgZXJyID0gMDsgLyogUmVzZXQgZXJyb3IgKi8KKyAgICAgICAgICAgIHJldCA9IEN5YVNTTF9hY2NlcHQoc3NsKTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgZXJyID0gQ3lhU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICBpZiAoZXJyID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX0FzeW5jUG9sbChzc2wsIFdPTEZfUE9MTF9GTEFHX0NIRUNLX0hXKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChlcnIgPT0gV0NfUEVORElOR19FKTsKKyAgICAgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHByaW50ZigiU1NMX2FjY2VwdCBlcnJvciA9ICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgIEN5YVNTTF9FUlJfZXJyb3Jfc3RyaW5nKGVyciwgYnVmZmVyKSk7CisgICAgICAgICAgICBwcmludGYoIlNTTF9hY2NlcHQgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIEN5YVNTTF9mcmVlKHNzbCk7CisgICAgICAgICAgICBDbG9zZVNvY2tldChjbGllbnRmZCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2lmIGRlZmluZWQoUEVFUl9JTkZPKQorICAgICAgICBzaG93UGVlcihzc2wpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1dSSVRFX0RVUAorICAgICAgICB3cml0ZV9zc2wgPSB3b2xmU1NMX3dyaXRlX2R1cChzc2wpOworICAgICAgICBpZiAod3JpdGVfc3NsID09IE5VTEwpIHsKKyAgICAgICAgICAgIHByaW50Zigid29sZlNTTF93cml0ZV9kdXAgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIEN5YVNTTF9mcmVlKHNzbCk7CisgICAgICAgICAgICBDbG9zZVNvY2tldChjbGllbnRmZCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgd3JpdGVfc3NsID0gc3NsOworI2VuZGlmCisKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBlcnIgPSAwOyAvKiByZXNldCBlcnJvciAqLworICAgICAgICAgICAgICAgIHJldCA9IEN5YVNTTF9yZWFkKHNzbCwgY29tbWFuZCwgc2l6ZW9mKGNvbW1hbmQpLTEpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICBlcnIgPSBDeWFTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoZXJyID09IFdDX1BFTkRJTkdfRSk7CisgICAgICAgICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoZXJyICE9IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEICYmIGVyciAhPSBXT0xGU1NMX0VSUk9SX1pFUk9fUkVUVVJOKXsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0xfcmVhZCBlY2hvIGVycm9yICVkLCAlcyFcbiIsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEN5YVNTTF9FUlJfZXJyb3Jfc3RyaW5nKGVyciwgYnVmZmVyKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlY2hvU3ogPSByZXQ7CisKKyAgICAgICAgICAgIGlmIChmaXJzdFJlYWQgPT0gMSkgeworICAgICAgICAgICAgICAgIGZpcnN0UmVhZCA9IDA7ICAvKiBicm93c2VyIG1heSBzZW5kIDEgYnl0ZSAnRycgdG8gc3RhcnQgKi8KKyAgICAgICAgICAgICAgICBpZiAoZWNob1N6ID09IDEgJiYgY29tbWFuZFswXSA9PSAnRycpIHsKKyAgICAgICAgICAgICAgICAgICAgZ290Rmlyc3RHID0gMTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ290Rmlyc3RHID09IDEgJiYgc3RybmNtcChjb21tYW5kLCAiRVQgLyIsIDQpID09IDApIHsKKyAgICAgICAgICAgICAgICBzdHJuY3B5KGNvbW1hbmQsICJHRVQiLCA0KTsKKyAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggdG8gbm9ybWFsIEdFVCAqLworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHN0cm5jbXAoY29tbWFuZCwgInF1aXQiLCA0KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJjbGllbnQgc2VudCBxdWl0IGNvbW1hbmQ6IHNodXR0aW5nIGRvd24hXG4iKTsKKyAgICAgICAgICAgICAgICBzaHV0RG93biA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIHN0cm5jbXAoY29tbWFuZCwgImJyZWFrIiwgNSkgPT0gMCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiY2xpZW50IHNlbnQgYnJlYWsgY29tbWFuZDogY2xvc2luZyBzZXNzaW9uIVxuIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjaWZkZWYgUFJJTlRfU0VTU0lPTl9TVEFUUworICAgICAgICAgICAgaWYgKCBzdHJuY21wKGNvbW1hbmQsICJwcmludHN0YXRzIiwgMTApID09IDApIHsKKyAgICAgICAgICAgICAgICBDeWFTU0xfUHJpbnRTZXNzaW9uU3RhdHMoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgaWYgKHN0cm5jbXAoY29tbWFuZCwgIkdFVCIsIDMpID09IDApIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHJlc3BbXSA9CisgICAgICAgICAgICAgICAgICAgICJIVFRQLzEuMCAyMDAgb2tcclxuQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcclxuXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5IEJHQ09MT1I9XCIjZmZmZmZmXCI+PHByZT5cclxuIgorICAgICAgICAgICAgICAgICAgICAiZ3JlZXRpbmdzIGZyb20gd29sZlNTTFxyXG48L3ByZT48L2JvZHk+PC9odG1sPlxyXG5cclxuIjsKKworICAgICAgICAgICAgICAgIGVjaG9TeiA9IChpbnQpc3RybGVuKHJlc3ApICsgMTsKKyAgICAgICAgICAgICAgICBpZiAoZWNob1N6ID4gKGludClzaXplb2YoY29tbWFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgZXJyb3IuICovCisgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoIkhUVFAgcmVzcG9uc2UgZ3JlYXRlciB0aGFuIGJ1ZmZlci4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RybmNweShjb21tYW5kLCByZXNwLCBzaXplb2YoY29tbWFuZCkpOworCisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBlcnIgPSAwOyAvKiByZXNldCBlcnJvciAqLworICAgICAgICAgICAgICAgICAgICByZXQgPSBDeWFTU0xfd3JpdGUod3JpdGVfc3NsLCBjb21tYW5kLCBlY2hvU3opOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IEN5YVNTTF9nZXRfZXJyb3Iod3JpdGVfc3NsLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9Bc3luY1BvbGwod3JpdGVfc3NsLCBXT0xGX1BPTExfRkxBR19DSEVDS19IVyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gZWNob1N6KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU1NMX3dyaXRlIGdldCBlcnJvciA9ICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ3lhU1NMX0VSUl9lcnJvcl9zdHJpbmcoZXJyLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyX3N5cygiU1NMX3dyaXRlIGdldCBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb21tYW5kW2VjaG9Tel0gPSAwOworCisgICAgICAgICNpZmRlZiBFQ0hPX09VVAorICAgICAgICAgICAgZnB1dHMoY29tbWFuZCwgZm91dCk7CisgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgZXJyID0gMDsgLyogcmVzZXQgZXJyb3IgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBDeWFTU0xfd3JpdGUod3JpdGVfc3NsLCBjb21tYW5kLCBlY2hvU3opOworICAgICAgICAgICAgICAgIGlmIChyZXQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICBlcnIgPSBDeWFTU0xfZ2V0X2Vycm9yKHdyaXRlX3NzbCwgMCk7CisgICAgICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHdyaXRlX3NzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoZXJyID09IFdDX1BFTkRJTkdfRSk7CisKKyAgICAgICAgICAgIGlmIChyZXQgIT0gZWNob1N6KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0xfd3JpdGUgZWNobyBlcnJvciA9ICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ3lhU1NMX0VSUl9lcnJvcl9zdHJpbmcoZXJyLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJTU0xfd3JpdGUgZWNobyBmYWlsZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmbmRlZiBDWUFTU0xfRFRMUworICAgICAgICBDeWFTU0xfc2h1dGRvd24oc3NsKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfV1JJVEVfRFVQCisgICAgICAgIEN5YVNTTF9mcmVlKHdyaXRlX3NzbCk7CisjZW5kaWYKKyAgICAgICAgQ3lhU1NMX2ZyZWUoc3NsKTsKKyAgICAgICAgQ2xvc2VTb2NrZXQoY2xpZW50ZmQpOworI2lmZGVmIENZQVNTTF9EVExTCisgICAgICAgIHRjcF9saXN0ZW4oJnNvY2tmZCwgJnBvcnQsIHVzZUFueUFkZHIsIGRvRFRMUywgMCk7CisgICAgICAgIFNpZ25hbFJlYWR5KGFyZ3MsIHBvcnQpOworI2VuZGlmCisgICAgfQorCisgICAgQ2xvc2VTb2NrZXQoc29ja2ZkKTsKKyAgICBDeWFTU0xfQ1RYX2ZyZWUoY3R4KTsKKworI2lmZGVmIEVDSE9fT1VUCisgICAgaWYgKG91dENyZWF0ZWQpCisgICAgICAgIGZjbG9zZShmb3V0KTsKKyNlbmRpZgorCisgICAgKChmdW5jX2FyZ3MqKWFyZ3MpLT5yZXR1cm5fY29kZSA9IDA7CisKKyNpZiBkZWZpbmVkKE5PX01BSU5fRFJJVkVSKSAmJiBkZWZpbmVkKEhBVkVfRUNDKSAmJiBkZWZpbmVkKEZQX0VDQykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRlZmluZWQoSEFWRV9USFJFQURfTFMpCisgICAgZWNjX2ZwX2ZyZWUoKTsgIC8qIGZyZWUgcGVyIHRocmVhZCBjYWNoZSAqLworI2VuZGlmCisKKyNpZmRlZiBDWUFTU0xfVElSVE9TCisgICAgZmRDbG9zZVNlc3Npb24oVGFza19zZWxmKCkpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VTU0lPTl9USUNLRVQpICYmIGRlZmluZWQoV09MRlNTTF9OT19ERUZfVElDS0VUX0VOQ19DQikgJiYgXAorICAgICgoZGVmaW5lZChIQVZFX0NIQUNIQSkgJiYgZGVmaW5lZChIQVZFX1BPTFkxMzA1KSkgfHwgZGVmaW5lZChIQVZFX0FFU0dDTSkpCisgICAgVGlja2V0Q2xlYW51cCgpOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgd29sZkFzeW5jX0RldkNsb3NlKCZkZXZJZCk7CisjZW5kaWYKKworI2lmbmRlZiBDWUFTU0xfVElSVE9TCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworI2VuZGlmIC8qICFOT19XT0xGU1NMX1NFUlZFUiAqLworCisKKy8qIHNvIG92ZXJhbGwgdGVzdHMgY2FuIHB1bGwgaW4gdGVzdCBmdW5jdGlvbiAqLworI2lmbmRlZiBOT19NQUlOX0RSSVZFUgorCisgICAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorICAgIHsKKyAgICAgICAgZnVuY19hcmdzIGFyZ3M7CisKKyNpZmRlZiBIQVZFX1dOUgorICAgICAgICBpZiAod2NfSW5pdE5ldFJhbmRvbSh3bnJDb25maWcsIE5VTEwsIDUwMDApICE9IDApCisgICAgICAgICAgICBlcnJfc3lzKCJXaGl0ZXdvb2QgbmV0UmFuZG9tIGdsb2JhbCBjb25maWcgZmFpbGVkIik7CisjZW5kaWYKKworICAgICAgICBTdGFydFRDUCgpOworCisgICAgICAgIGFyZ3MuYXJnYyA9IGFyZ2M7CisgICAgICAgIGFyZ3MuYXJndiA9IGFyZ3Y7CisgICAgICAgIGFyZ3MucmV0dXJuX2NvZGUgPSAwOworCisgICAgICAgIEN5YVNTTF9Jbml0KCk7CisjaWYgZGVmaW5lZChERUJVR19DWUFTU0wpICYmICFkZWZpbmVkKENZQVNTTF9NREtfU0hFTEwpCisgICAgICAgIEN5YVNTTF9EZWJ1Z2dpbmdfT04oKTsKKyNlbmRpZgorICAgICAgICBDaGFuZ2VUb1dvbGZSb290KCk7CisjaWZuZGVmIE5PX1dPTEZTU0xfU0VSVkVSCisgICAgICAgIGVjaG9zZXJ2ZXJfdGVzdCgmYXJncyk7CisjZW5kaWYKKyAgICAgICAgQ3lhU1NMX0NsZWFudXAoKTsKKworI2lmZGVmIEhBVkVfV05SCisgICAgICAgIGlmICh3Y19GcmVlTmV0UmFuZG9tKCkgPCAwKQorICAgICAgICAgICAgZXJyX3N5cygiRmFpbGVkIHRvIGZyZWUgbmV0UmFuZG9tIGNvbnRleHQiKTsKKyNlbmRpZiAvKiBIQVZFX1dOUiAqLworCisgICAgICAgIHJldHVybiBhcmdzLnJldHVybl9jb2RlOworICAgIH0KKworI2VuZGlmIC8qIE5PX01BSU5fRFJJVkVSICovCmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL3NoYXJlL2RvYy93b2xmc3NsL2V4YW1wbGUvc2N0cC1jbGllbnQtZHRscy5jIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9leGFtcGxlL3NjdHAtY2xpZW50LWR0bHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIyZTUwCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9leGFtcGxlL3NjdHAtY2xpZW50LWR0bHMuYwpAQCAtMCwwICsxLDEzMCBAQAorLyogc2N0cC1jbGllbnQtZHRscy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworCisvKiB3b2xmc3NsICovCisjaWZuZGVmIFdPTEZTU0xfVVNFUl9TRVRUSU5HUworICAgICNpbmNsdWRlIDx3b2xmc3NsL29wdGlvbnMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NldHRpbmdzLmg+CisjaW5jbHVkZSA8d29sZnNzbC9zc2wuaD4KKworI2lmIGRlZmluZWQoV09MRlNTTF9TQ1RQKSAmJiBkZWZpbmVkKFdPTEZTU0xfRFRMUykKKy8qIHNjdHAgKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisvKiBzdGQgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIGNhY2VydCAiLi9jZXJ0cy9jYS1jZXJ0LnBlbSIKKworc3RhdGljIGludCBlcnJfc3lzKGNvbnN0IGNoYXIqIG1zZykKK3sKKyAgICBwZXJyb3IobXNnKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYgLyogV09MRlNTTF9TQ1RQICYmIFdPTEZTU0xfRFRMUyAqLworCitpbnQgbWFpbigpCit7CisjaWYgZGVmaW5lZChXT0xGU1NMX1NDVFApICYmIGRlZmluZWQoV09MRlNTTF9EVExTKQorICAgIGludCBzZCA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKKworICAgIGlmIChzZCA8IDApCisgICAgICAgIGVycl9zeXMoInNjdHAgc29ja2V0IGVycm9yIik7CisKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2E7CisgICAgbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisgICAgc2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgc2Euc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKCIxMjcuMC4wLjEiKTsKKyAgICBzYS5zaW5fcG9ydCA9IGh0b25zKDEyMzQ1KTsKKworICAgIGludCByZXQgPSBjb25uZWN0KHNkLCAoc3RydWN0IHNvY2thZGRyKikmc2EsIHNpemVvZihzYSkpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBlcnJfc3lzKCJzY3RwIGNvbm5lY3QgZXJyb3IiKTsKKworICAgIGNvbnN0IGNoYXIqIHJlc3BvbnNlID0gImhlbGxvIHRoZXJlIjsKKyAgICBjaGFyIGJ1ZmZlcls4MF07CisKKyAgICBXT0xGU1NMX0NUWCogY3R4ID0gd29sZlNTTF9DVFhfbmV3KHdvbGZEVExTdjFfMl9jbGllbnRfbWV0aG9kKCkpOworICAgIGlmIChjdHggPT0gTlVMTCkKKyAgICAgICAgZXJyX3N5cygiY3R4IG5ldyBkdGxzIGNsaWVudCBmYWlsZWQiKTsKKworICAgIHJldCA9IHdvbGZTU0xfQ1RYX2R0bHNfc2V0X3NjdHAoY3R4KTsKKyAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgZXJyX3N5cygic2V0IHNjdHAgbW9kZSBmYWlsZWQiKTsKKworICAgIHJldCA9IHdvbGZTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjdHgsIGNhY2VydCwgTlVMTCk7CisgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgIGVycl9zeXMoImNhIGNlcnQgZXJyb3IiKTsKKworICAgIFdPTEZTU0wqIHNzbCA9IHdvbGZTU0xfbmV3KGN0eCk7CisgICAgaWYgKHNzbCA9PSBOVUxMKQorICAgICAgICBlcnJfc3lzKCJzc2wgbmV3IGR0bHMgY2xpZW50IGZhaWxlZCIpOworCisgICAgd29sZlNTTF9zZXRfZmQoc3NsLCBzZCk7CisKKyAgICByZXQgPSB3b2xmU1NMX2Nvbm5lY3Qoc3NsKTsKKyAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgZXJyX3N5cygic3NsIGNvbm5lY3QgZmFpbGVkIik7CisKKyAgICBwcmludGYoIlRMUyB2ZXJzaW9uIGlzICVzXG4iLCB3b2xmU1NMX2dldF92ZXJzaW9uKHNzbCkpOworICAgIHByaW50ZigiQ2lwaGVyIFN1aXRlIGlzICVzXG4iLAorICAgICAgICAgICB3b2xmU1NMX0NJUEhFUl9nZXRfbmFtZSh3b2xmU1NMX2dldF9jdXJyZW50X2NpcGhlcihzc2wpKSk7CisKKyAgICB3b2xmU1NMX3dyaXRlKHNzbCwgcmVzcG9uc2UsIChpbnQpc3RybGVuKHJlc3BvbnNlKSk7CisgICAgaW50IGdvdCA9IHdvbGZTU0xfcmVhZChzc2wsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgIGlmIChnb3QgPiAwKSB7CisgICAgICAgIGJ1ZmZlcltnb3RdID0gMDsKKyAgICAgICAgcHJpbnRmKCJzZXJ2ZXIgc2FpZDogJXNcbiIsIGJ1ZmZlcik7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBiaWdCdWZbNDA5Nl07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgKGludClzaXplb2YoYmlnQnVmKTsgaSsrKQorICAgICAgICBiaWdCdWZbaV0gPSAodW5zaWduZWQgY2hhcikoaSAmIDB4RkYpOworICAgIHdvbGZTU0xfd3JpdGUoc3NsLCBiaWdCdWYsIHNpemVvZihiaWdCdWYpKTsKKyAgICBtZW1zZXQoYmlnQnVmLCAwLCBzaXplb2YoYmlnQnVmKSk7CisKKyAgICB3b2xmU1NMX3JlYWQoc3NsLCBiaWdCdWYsIHNpemVvZihiaWdCdWYpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJpZ0J1Zik7IGkrKykgeworICAgICAgICBpZiAoYmlnQnVmW2ldICE9ICh1bnNpZ25lZCBjaGFyKShpICYgMHhGRikpIHsKKyAgICAgICAgICAgIHByaW50ZigiYmlnIG1lc3NhZ2UgY2hlY2sgZmFpbFxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdvbGZTU0xfc2h1dGRvd24oc3NsKTsKKyAgICB3b2xmU1NMX2ZyZWUoc3NsKTsKKyAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7CisKKyAgICBjbG9zZShzZCk7CisjZW5kaWYgLyogV09MRlNTTF9TQ1RQICYmIFdPTEZTU0xfRFRMUyAqLworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL3NoYXJlL2RvYy93b2xmc3NsL2V4YW1wbGUvc2N0cC1jbGllbnQuYyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvZXhhbXBsZS9zY3RwLWNsaWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNTVjZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL3NoYXJlL2RvYy93b2xmc3NsL2V4YW1wbGUvc2N0cC1jbGllbnQuYwpAQCAtMCwwICsxLDcyIEBACisvKiBzY3RwLWNsaWVudC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgd29sZlNTTCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd29sZlNTTC4KKyAqCisgKiB3b2xmU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiB3b2xmU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBCisgKi8KKworI2lmbmRlZiBXT0xGU1NMX1VTRVJfU0VUVElOR1MKKyAgICAjaW5jbHVkZSA8d29sZnNzbC9vcHRpb25zLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaWZkZWYgV09MRlNTTF9TQ1RQCisKKy8qIHNjdHAgKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisvKiBzdGQgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIC8qIFdPTEZTU0xfU0NUUCAqLworCitpbnQgbWFpbigpCit7CisjaWZkZWYgV09MRlNTTF9TQ1RQCisgICAgaW50IHNkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOworCisgICAgaWYgKHNkIDwgMCkKKyAgICAgICAgcGVycm9yKCJzY3RwIHNvY2tldCBlcnJvciIpOworCisgICAgc3RydWN0IHNvY2thZGRyX2luIHNhOworICAgIG1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOworICAgIHNhLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIHNhLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcigiMTI3LjAuMC4xIik7CisgICAgc2Euc2luX3BvcnQgPSBodG9ucygxMjM0NSk7CisKKyAgICBpbnQgcmV0ID0gY29ubmVjdChzZCwgKHN0cnVjdCBzb2NrYWRkciopJnNhLCBzaXplb2Yoc2EpKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcGVycm9yKCJzY3RwIGNvbm5lY3QgZXJyb3IiKTsKKworICAgIGNvbnN0IGNoYXIqIG1zZyA9ICJoZWxsbyBzY3RwIjsKKyAgICBjaGFyIGJ1ZmZlcls4MF07CisKKyAgICBzZW5kKHNkLCBtc2csIHN0cmxlbihtc2cpLCAwKTsKKyAgICBpbnQgZ290ID0gKGludClyZWN2KHNkLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCAwKTsKKyAgICBpZiAoZ290ID4gMCkgeworICAgICAgICBidWZmZXJbZ290XSA9IDA7CisgICAgICAgIHByaW50Zigic2VydmVyIHNhaWQ6ICVzXG4iLCBidWZmZXIpOworICAgIH0KKworICAgIGNsb3NlKHNkKTsKKyNlbmRpZiAvKiBXT0xGU1NMX1NDVFAgKi8KKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvZXhhbXBsZS9zY3RwLXNlcnZlci1kdGxzLmMgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL3NoYXJlL2RvYy93b2xmc3NsL2V4YW1wbGUvc2N0cC1zZXJ2ZXItZHRscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMTRjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL3NoYXJlL2RvYy93b2xmc3NsL2V4YW1wbGUvc2N0cC1zZXJ2ZXItZHRscy5jCkBAIC0wLDAgKzEsMTI4IEBACisvKiBzY3RwLXNlcnZlci1kdGxzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisvKiB3b2xmc3NsICovCisjaWZuZGVmIFdPTEZTU0xfVVNFUl9TRVRUSU5HUworICAgICNpbmNsdWRlIDx3b2xmc3NsL29wdGlvbnMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NldHRpbmdzLmg+CisjaW5jbHVkZSA8d29sZnNzbC9zc2wuaD4KKworI2lmIGRlZmluZWQoV09MRlNTTF9TQ1RQKSAmJiBkZWZpbmVkKFdPTEZTU0xfRFRMUykKKy8qIHNjdHAgKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisvKiBzdGQgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisKKyNkZWZpbmUga2V5ICIuL2NlcnRzL3NlcnZlci1rZXkucGVtIgorI2RlZmluZSBjZXJ0ICIuL2NlcnRzL3NlcnZlci1jZXJ0LnBlbSIKKworc3RhdGljIGludCBlcnJfc3lzKGNvbnN0IGNoYXIqIG1zZykKK3sKKyAgICBwZXJyb3IobXNnKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYgLyogV09MRlNTTF9TQ1RQICYmIFdPTEZTU0xfRFRMUyAqLworCitpbnQgbWFpbigpCit7CisjaWYgZGVmaW5lZChXT0xGU1NMX1NDVFApICYmIGRlZmluZWQoV09MRlNTTF9EVExTKQorICAgIGludCBzZCA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKKworICAgIGlmIChzZCA8IDApCisgICAgICAgIGVycl9zeXMoInNjdHAgc29ja2V0IGVycm9yIik7CisKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2E7CisgICAgbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisgICAgc2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgc2Euc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgc2Euc2luX3BvcnQgPSBodG9ucygxMjM0NSk7CisKKyAgICBpbnQgcmV0ID0gYmluZChzZCwgKHN0cnVjdCBzb2NrYWRkciopJnNhLCBzaXplb2Yoc2EpKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZXJyX3N5cygic2N0cCBiaW5kIGVycm9yIik7CisKKyAgICBsaXN0ZW4oc2QsIDMpOworCisgICAgaW50IGNsaWVudF9zZCA9IGFjY2VwdChzZCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKGNsaWVudF9zZCA8IDApCisgICAgICAgIGVycl9zeXMoInNjdHAgYWNjZXB0IGVycm9yIik7CisKKyAgICBjb25zdCBjaGFyKiByZXNwb25zZSA9ICJ3ZWxsIGhlbGxvIHRvIHlvdSI7CisgICAgY2hhciBidWZmZXJbODBdOworCisgICAgV09MRlNTTF9DVFgqIGN0eCA9IHdvbGZTU0xfQ1RYX25ldyh3b2xmRFRMU3YxXzJfc2VydmVyX21ldGhvZCgpKTsKKyAgICBpZiAoY3R4ID09IE5VTEwpCisgICAgICAgIGVycl9zeXMoImN0eCBuZXcgZHRscyBzZXJ2ZXIgZmFpbGVkIik7CisKKyAgICByZXQgPSB3b2xmU1NMX0NUWF9kdGxzX3NldF9zY3RwKGN0eCk7CisgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgIGVycl9zeXMoInNldCBzY3RwIG1vZGUgZmFpbGVkIik7CisKKyAgICByZXQgPSB3b2xmU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKGN0eCwga2V5LCBXT0xGU1NMX0ZJTEVUWVBFX1BFTSk7CisgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgIGVycl9zeXMoInVzZSBwcml2YXRlIGtleSBlcnJvciIpOworCisgICAgcmV0ID0gd29sZlNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoY3R4LCBjZXJ0LCBXT0xGU1NMX0ZJTEVUWVBFX1BFTSk7CisgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgIGVycl9zeXMoInVzZSBjZXJ0IGVycm9yIik7CisKKyAgICBXT0xGU1NMKiBzc2wgPSB3b2xmU1NMX25ldyhjdHgpOworICAgIGlmIChzc2wgPT0gTlVMTCkKKyAgICAgICAgZXJyX3N5cygic3NsIG5ldyBkdGxzIHNlcnZlciBmYWlsZWQiKTsKKworICAgIHdvbGZTU0xfc2V0X2ZkKHNzbCwgY2xpZW50X3NkKTsKKworICAgIHJldCA9IHdvbGZTU0xfYWNjZXB0KHNzbCk7CisgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgIGVycl9zeXMoInNzbCBhY2NlcHQgZmFpbGVkIik7CisKKyAgICBwcmludGYoIlRMUyB2ZXJzaW9uIGlzICVzXG4iLCB3b2xmU1NMX2dldF92ZXJzaW9uKHNzbCkpOworICAgIHByaW50ZigiQ2lwaGVyIFN1aXRlIGlzICVzXG4iLAorICAgICAgICAgICB3b2xmU1NMX0NJUEhFUl9nZXRfbmFtZSh3b2xmU1NMX2dldF9jdXJyZW50X2NpcGhlcihzc2wpKSk7CisKKyAgICBpbnQgZ290ID0gd29sZlNTTF9yZWFkKHNzbCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgICAgaWYgKGdvdCA+IDApIHsKKyAgICAgICAgYnVmZmVyW2dvdF0gPSAwOworICAgICAgICBwcmludGYoImNsaWVudCBzYWlkOiAlc1xuIiwgYnVmZmVyKTsKKyAgICB9CisgICAgd29sZlNTTF93cml0ZShzc2wsIHJlc3BvbnNlLCAoaW50KXN0cmxlbihyZXNwb25zZSkpOworCisgICAgdW5zaWduZWQgY2hhciBiaWdCdWZbNDA5Nl07CisKKyAgICB3b2xmU1NMX3JlYWQoc3NsLCBiaWdCdWYsIHNpemVvZihiaWdCdWYpKTsKKyAgICB3b2xmU1NMX3dyaXRlKHNzbCwgYmlnQnVmLCBzaXplb2YoYmlnQnVmKSk7CisKKyAgICB3b2xmU1NMX3NodXRkb3duKHNzbCk7CisgICAgd29sZlNTTF9mcmVlKHNzbCk7CisgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOworCisgICAgY2xvc2Uoc2QpOworI2VuZGlmIC8qIFdPTEZTU0xfU0NUUCAmJiBXT0xGU1NMX0RUTFMgKi8KKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvZXhhbXBsZS9zY3RwLXNlcnZlci5jIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9leGFtcGxlL3NjdHAtc2VydmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwMzRjYQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvZXhhbXBsZS9zY3RwLXNlcnZlci5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qIHNjdHAtc2VydmVyLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisjaWZuZGVmIFdPTEZTU0xfVVNFUl9TRVRUSU5HUworICAgICNpbmNsdWRlIDx3b2xmc3NsL29wdGlvbnMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L3NldHRpbmdzLmg+CisKKyNpZmRlZiBXT0xGU1NMX1NDVFAKKy8qIHNjdHAgKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisvKiBzdGQgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIC8qIFdPTEZTU0xfU0NUUCAqLworCitpbnQgbWFpbigpCit7CisjaWZkZWYgV09MRlNTTF9TQ1RQCisgICAgaW50IHNkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOworCisgICAgaWYgKHNkIDwgMCkKKyAgICAgICAgcGVycm9yKCJzY3RwIHNvY2tldCBlcnJvciIpOworCisgICAgc3RydWN0IHNvY2thZGRyX2luIHNhOworICAgIG1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOworICAgIHNhLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIHNhLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworICAgIHNhLnNpbl9wb3J0ID0gaHRvbnMoMTIzNDUpOworCisgICAgaW50IHJldCA9IGJpbmQoc2QsIChzdHJ1Y3Qgc29ja2FkZHIqKSZzYSwgc2l6ZW9mKHNhKSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHBlcnJvcigic2N0cCBiaW5kIGVycm9yIik7CisKKyAgICBsaXN0ZW4oc2QsIDMpOworCisgICAgaW50IGNsaWVudF9zZCA9IGFjY2VwdChzZCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKGNsaWVudF9zZCA8IDApCisgICAgICAgIHBlcnJvcigic2N0cCBhY2NlcHQgZXJyb3IiKTsKKworICAgIGNvbnN0IGNoYXIqIHJlc3BvbnNlID0gImhpIHRoZXJlIjsKKyAgICBjaGFyIGJ1ZmZlcls4MF07CisKKyAgICBpbnQgZ290ID0gKGludClyZWN2KGNsaWVudF9zZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgMCk7CisgICAgaWYgKGdvdCA+IDApIHsKKyAgICAgICAgYnVmZmVyW2dvdF0gPSAwOworICAgICAgICBwcmludGYoImNsaWVudCBzYWlkOiAlc1xuIiwgYnVmZmVyKTsKKyAgICB9CisgICAgc2VuZChjbGllbnRfc2QsIHJlc3BvbnNlLCBzdHJsZW4ocmVzcG9uc2UpLCAwKTsKKworCisgICAgY2xvc2Uoc2QpOworI2VuZGlmIC8qIFdPTEZTU0xfU0NUUCAqLworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9leGFtcGxlL3NlcnZlci5jIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9leGFtcGxlL3NlcnZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ODdjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlid29sZnNzbC9pbnN0YWxsL3NoYXJlL2RvYy93b2xmc3NsL2V4YW1wbGUvc2VydmVyLmMKQEAgLTAsMCArMSwzMTY0IEBACisvKiBzZXJ2ZXIuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIHdvbGZTU0wgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdvbGZTU0wuCisgKgorICogd29sZlNTTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogd29sZlNTTCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQQorICovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAgICAjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lmbmRlZiBXT0xGU1NMX1VTRVJfU0VUVElOR1MKKyAgICAjaW5jbHVkZSA8d29sZnNzbC9vcHRpb25zLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9zZXR0aW5ncy5oPgorCisjaW5jbHVkZSA8d29sZnNzbC9zc2wuaD4gLyogbmFtZSBjaGFuZ2UgcG9ydGFiaWxpdHkgbGF5ZXIgKi8KKworI2lmZGVmIEhBVkVfRUNDCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2VjYy5oPiAgIC8qIHdjX2VjY19mcF9mcmVlICovCisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUworI2luY2x1ZGUgPHdvbGZzZW50cnkvd29sZnNlbnRyeS5oPgorI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKFdPTEZTRU5UUllfTk9fSlNPTikKK3N0YXRpYyBjb25zdCBjaGFyICp3b2xmc2VudHJ5X2NvbmZpZ19wYXRoID0gTlVMTDsKKyNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUyAqLworCisjaWYgZGVmaW5lZChXT0xGU1NMX01ES19BUk0pIHx8IGRlZmluZWQoV09MRlNTTF9LRUlMX1RDUF9ORVQpCisgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgICAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgICAgICNpbmNsdWRlICJybF9mcy5oIgorICAgICAgICAjaW5jbHVkZSAicmxfbmV0LmgiCisjZW5kaWYKKworI2lmZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAjaWZkZWYgTk9fUlNBCisgICAgI2Vycm9yIGN1cnJlbnRseSB0aGUgZXhhbXBsZSBvbmx5IHRyaWVzIHRvIGxvYWQgaW4gYSBSU0EgYnVmZmVyCisgICAgI2VuZGlmCisgICAgI3VuZGVmIFVTRV9DRVJUX0JVRkZFUlNfMjA0OAorICAgICNkZWZpbmUgVVNFX0NFUlRfQlVGRkVSU18yMDQ4CisgICAgI2luY2x1ZGUgPHdvbGZzc2wvY2VydHNfdGVzdC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8d29sZnNzbC90ZXN0Lmg+CisjaW5jbHVkZSA8d29sZnNzbC9lcnJvci1zc2wuaD4KKworI2luY2x1ZGUgImV4YW1wbGVzL3NlcnZlci9zZXJ2ZXIuaCIKKworI2lmbmRlZiBOT19XT0xGU1NMX1NFUlZFUgorCisjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgIHN0YXRpYyBpbnQgZGV2SWQgPSBJTlZBTElEX0RFVklEOworI2VuZGlmCisKKyNkZWZpbmUgREVGQVVMVF9USU1FT1VUX1NFQyAyCisKKy8qIE5vdGUgb24gdXNpbmcgcG9ydCAwOiBpZiB0aGUgc2VydmVyIHVzZXMgcG9ydCAwIHRvIGJpbmQgYW4gZXBoZW1lcmFsIHBvcnQKKyAqIG51bWJlciBhbmQgaXMgdXNpbmcgdGhlIHJlYWR5IGZpbGUgZm9yIHNjcmlwdGVkIHRlc3RpbmcsIHRoZSBjb2RlIGluCisgKiB0ZXN0Lmggd2lsbCB3cml0ZSB0aGUgYWN0dWFsIHBvcnQgbnVtYmVyIGludG8gdGhlIHJlYWR5IGZpbGUgZm9yIHVzZQorICogYnkgdGhlIGNsaWVudC4gKi8KKworI2lmbmRlZiBXT0xGU1NMX0FMVF9URVNUX1NUUklOR1MKK3N0YXRpYyBjb25zdCBjaGFyIGtSZXBseU1zZ1tdID0gIkkgaGVhciB5b3UgZmEgc2hpenpsZSEiOworI2Vsc2UKK3N0YXRpYyBjb25zdCBjaGFyIGtSZXBseU1zZ1tdID0gIkkgaGVhciB5b3UgZmEgc2hpenpsZSFcbiI7CisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIga0h0dHBTZXJ2ZXJNc2dbXSA9CisgICAgIkhUVFAvMS4xIDIwMCBPS1xyXG4iCisgICAgIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sXHJcbiIKKyAgICAiQ29ubmVjdGlvbjogY2xvc2VcclxuIgorICAgICJDb250ZW50LUxlbmd0aDogMTQxXHJcbiIKKyAgICAiXHJcbiIKKyAgICAiPGh0bWw+XHJcbiIKKyAgICAiPGhlYWQ+XHJcbiIKKyAgICAiPHRpdGxlPldlbGNvbWUgdG8gd29sZlNTTCE8L3RpdGxlPlxyXG4iCisgICAgIjwvaGVhZD5cclxuIgorICAgICI8Ym9keT5cclxuIgorICAgICI8cD53b2xmU1NMIGhhcyBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkIGhhbmRzaGFrZSE8L3A+XHJcbiIKKyAgICAiPC9ib2R5PlxyXG4iCisgICAgIjwvaHRtbD5cclxuIjsKKworLyogUmVhZCBuZWVkcyB0byBiZSBsYXJnZXN0IG9mIHRoZSBjbGllbnQuYyBtZXNzYWdlIHN0cmluZ3MgKDI5KSAqLworI2RlZmluZSBTUlZfUkVBRF9TWiAgICAzMgorCisKK2ludCBydW5XaXRoRXJyb3JzID0gMDsgLyogVXNlZCB3aXRoIC14IGZsYWcgdG8gcnVuIGVycl9zeXMgdnMuIHByaW50IGVycm9ycyAqLworaW50IGNhdGFzdHJvcGhpYyA9IDA7IC8qIFVzZSB3aXRoIC14IGZsYWcgdG8gc3RpbGwgZXhpdCB3aGVuIGFuIGVycm9yIGlzCisgICAgICAgICAgICAgICAgICAgICAgKiBjb25zaWRlcmVkIGNhdGFzdHJvcGhpYyBFRyB0aGUgc2VydmVycyBvd24gY2VydCBmYWlsaW5nCisgICAgICAgICAgICAgICAgICAgICAgKiB0byBsb2FkIHdvdWxkIGJlIGNhdGFzdHJvcGhpYyBzaW5jZSB0aGVyZSB3b3VsZCBiZSBubworICAgICAgICAgICAgICAgICAgICAgICogY2VydCB0byBzZW5kIHRvIGNsaWVudHMgYXR0ZW1wdGluZyB0byBjb25uZWN0LiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAqIHNlcnZlciBzaG91bGQgZXJyb3Igb3V0IGNvbXBsZXRlbHkgaW4gdGhhdCBjYXNlCisgICAgICAgICAgICAgICAgICAgICAgKi8KK3N0YXRpYyBpbnQgbG5nX2luZGV4ID0gMDsKKworI2lmZGVmIFdPTEZTU0xfQ0FMTEJBQ0tTCisgICAgI2lmICFkZWZpbmVkKE5PX09MRF9USU1FVkFMX05BTUUpCisgICAgICAgIFRpbWV2YWwgc3J2VG87CisgICAgI2Vsc2UKKyAgICAgICAgV09MRlNTTF9USU1FVkFMIHNydlRvOworICAgICNlbmRpZgorICAgIHN0YXRpYyBpbnQgc3J2SGFuZFNoYWtlQ0IoSGFuZFNoYWtlSW5mbyogaW5mbykKKyAgICB7CisgICAgICAgICh2b2lkKWluZm87CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgc3J2VGltZW91dENCKFRpbWVvdXRJbmZvKiBpbmZvKQorICAgIHsKKyAgICAgICAgKHZvaWQpaW5mbzsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisjZW5kaWYKKworI2lmbmRlZiBOT19IQU5EU0hBS0VfRE9ORV9DQgorICAgIHN0YXRpYyBpbnQgbXlIc0RvbmVDYihXT0xGU1NMKiBzc2wsIHZvaWQqIHVzZXJfY3R4KQorICAgIHsKKyAgICAgICAgKHZvaWQpdXNlcl9jdHg7CisgICAgICAgICh2b2lkKXNzbDsKKworICAgICAgICAvKiBwcmludGYoIk5vdGlmaWVkIEhhbmRTaGFrZSBkb25lXG4iKTsgKi8KKworICAgICAgICAvKiByZXR1cm4gbmVnYXRpdmUgbnVtYmVyIHRvIGVuZCBUTFMgY29ubmVjdGlvbiBub3cgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGVycl9zeXNfZXgoaW50IG91dCwgY29uc3QgY2hhciogbXNnKQoreworICAgIGlmIChvdXQgPT0gMSkgeyAvKiBpZiBzZXJ2ZXIgaXMgcnVubmluZyB3LyAteCBmbGFnLCBwcmludCBlcnJvciB3L28gZXhpdCAqLworICAgICAgICBwcmludGYoIndvbGZTU0wgZXJyb3I6ICVzXG4iLCBtc2cpOworICAgICAgICBwcmludGYoIkNvbnRpbnVpbmcgc2VydmVyIGV4ZWN1dGlvbi4uLlxuXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlcnJfc3lzKG1zZyk7CisgICAgfQorfQorCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfRFRMUykgJiYgZGVmaW5lZChVU0VfV09MRlNTTF9JTykKKworLyogVHJhbnNsYXRlcyByZXR1cm4gY29kZXMgcmV0dXJuZWQgZnJvbQorICogc2VuZCgpIGFuZCByZWN2KCkgaWYgbmVlZCBiZS4KKyAqLworc3RhdGljIFdDX0lOTElORSBpbnQgVHJhbnNsYXRlUmV0dXJuQ29kZShpbnQgb2xkLCBpbnQgc2QpCit7CisgICAgKHZvaWQpc2Q7CisKKyNpZiBkZWZpbmVkKEZSRUVTQ0FMRV9NUVgpIHx8IGRlZmluZWQoRlJFRVNDQUxFX0tTREtfTVFYKQorICAgIGlmIChvbGQgPT0gMCkgeworICAgICAgICBlcnJubyA9IFNPQ0tFVF9FV09VTERCTE9DSzsKKyAgICAgICAgcmV0dXJuIC0xOyAgLyogY29udmVydCB0byBCU0Qgc3R5bGUgd291bGRibG9jayBhcyBlcnJvciAqLworICAgIH0KKworICAgIGlmIChvbGQgPCAwKSB7CisgICAgICAgIGVycm5vID0gUlRDU19nZXRlcnJvcihzZCk7CisgICAgICAgIGlmIChlcnJubyA9PSBSVENTRVJSX1RDUF9DT05OX0NMT1NJTkcpCisgICAgICAgICAgICByZXR1cm4gMDsgICAvKiBjb252ZXJ0IHRvIEJTRCBzdHlsZSBjbG9zaW5nICovCisgICAgICAgIGlmIChlcnJubyA9PSBSVENTRVJSX1RDUF9DT05OX1JMU0QpCisgICAgICAgICAgICBlcnJubyA9IFNPQ0tFVF9FQ09OTlJFU0VUOworICAgICAgICBpZiAoZXJybm8gPT0gUlRDU0VSUl9UQ1BfVElNRURfT1VUKQorICAgICAgICAgICAgZXJybm8gPSBTT0NLRVRfRUFHQUlOOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIG9sZDsKK30KKworc3RhdGljIFdDX0lOTElORSBpbnQgd29sZlNTTF9MYXN0RXJyb3Iodm9pZCkKK3sKKyNpZmRlZiBVU0VfV0lORE9XU19BUEkKKyAgICByZXR1cm4gV1NBR2V0TGFzdEVycm9yKCk7CisjZWxpZiBkZWZpbmVkKEVCU05FVCkKKyAgICByZXR1cm4geG5fZ2V0bGFzdGVycm9yKCk7CisjZWxzZQorICAgIHJldHVybiBlcnJubzsKKyNlbmRpZgorfQorCisvKiB3b2xmU1NMIFNvY2sgQWRkciAqLworc3RydWN0IFdPTEZTU0xfVEVTVF9TT0NLQUREUiB7CisgICAgdW5zaWduZWQgaW50ICBzejsgLyogc29ja2FkZHIgc2l6ZSAqLworICAgIFNPQ0tBRERSX0lOX1Qgc2E7IC8qIHBvaW50ZXIgdG8gdGhlIHNvY2thZGRyX2luIG9yIHNvY2thZGRyX2luNiAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgV09MRlNTTF9URVNUX0RUTFNfQ1RYIHsKKyAgICBzdHJ1Y3QgV09MRlNTTF9URVNUX1NPQ0tBRERSIHBlZXI7CisgICAgaW50IHJmZDsKKyAgICBpbnQgd2ZkOworICAgIGludCBmYWlsT25jZTsKKyAgICB3b3JkMzIgYmxvY2tTZXE7Cit9IFdPTEZTU0xfVEVTVF9EVExTX0NUWDsKKworCitzdGF0aWMgV0NfSU5MSU5FIGludCBQZWVrU2VxKGNvbnN0IGNoYXIqIGJ1Ziwgd29yZDMyKiBzZXEpCit7CisgICAgY29uc3QgY2hhciogYyA9IGJ1ZiArIDM7CisKKyAgICBpZiAoKGNbMF0gfCBjWzFdIHwgY1syXSB8IGNbM10pID09IDApIHsKKyAgICAgICAgKnNlcSA9IChjWzRdIDw8IDI0KSB8IChjWzVdIDw8IDE2KSB8IChjWzZdIDw8IDgpIHwgY1s3XTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworLyogVGhlIHNlbmQgZW1iZWRkZWQgY2FsbGJhY2sKKyAqICByZXR1cm4gOiBuYiBieXRlcyBzZW50LCBvciBlcnJvcgorICovCitzdGF0aWMgaW50IFRlc3RFbWJlZFNlbmRUbyhXT0xGU1NMKiBzc2wsIGNoYXIgKmJ1ZiwgaW50IHN6LCB2b2lkICpjdHgpCit7CisgICAgV09MRlNTTF9URVNUX0RUTFNfQ1RYKiBkdGxzQ3R4ID0gKFdPTEZTU0xfVEVTVF9EVExTX0NUWCopY3R4OworICAgIGludCBzZCA9IGR0bHNDdHgtPndmZDsKKyAgICBpbnQgc2VudDsKKyAgICBpbnQgZXJyOworCisgICAgKHZvaWQpc3NsOworCisgICAgV09MRlNTTF9FTlRFUigiVGVzdEVtYmVkU2VuZFRvKCkiKTsKKworICAgIGlmIChkdGxzQ3R4LT5mYWlsT25jZSkgeworICAgICAgICB3b3JkMzIgc2VxID0gMDsKKworICAgICAgICBpZiAoUGVla1NlcShidWYsICZzZXEpICYmIHNlcSA9PSBkdGxzQ3R4LT5ibG9ja1NlcSkgeworICAgICAgICAgICAgZHRsc0N0eC0+ZmFpbE9uY2UgPSAwOworICAgICAgICAgICAgV09MRlNTTF9NU0coIkZvcmNpbmcgV0FOVF9XUklURSIpOworICAgICAgICAgICAgcmV0dXJuIFdPTEZTU0xfQ0JJT19FUlJfV0FOVF9XUklURTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNlbnQgPSAoaW50KXNlbmR0byhzZCwgYnVmLCBzeiwgMCwgKGNvbnN0IFNPQ0tBRERSKikmZHRsc0N0eC0+cGVlci5zYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdGxzQ3R4LT5wZWVyLnN6KTsKKworICAgIHNlbnQgPSBUcmFuc2xhdGVSZXR1cm5Db2RlKHNlbnQsIHNkKTsKKworICAgIGlmIChzZW50IDwgMCkgeworICAgICAgICBlcnIgPSB3b2xmU1NMX0xhc3RFcnJvcigpOworICAgICAgICBXT0xGU1NMX01TRygiRW1iZWQgU2VuZCBUbyBlcnJvciIpOworCisgICAgICAgIGlmIChlcnIgPT0gU09DS0VUX0VXT1VMREJMT0NLIHx8IGVyciA9PSBTT0NLRVRfRUFHQUlOKSB7CisgICAgICAgICAgICBXT0xGU1NMX01TRygiXHRXb3VsZCBCbG9jayIpOworICAgICAgICAgICAgcmV0dXJuIFdPTEZTU0xfQ0JJT19FUlJfV0FOVF9XUklURTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChlcnIgPT0gU09DS0VUX0VDT05OUkVTRVQpIHsKKyAgICAgICAgICAgIFdPTEZTU0xfTVNHKCJcdENvbm5lY3Rpb24gcmVzZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0NPTk5fUlNUOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVyciA9PSBTT0NLRVRfRUlOVFIpIHsKKyAgICAgICAgICAgIFdPTEZTU0xfTVNHKCJcdFNvY2tldCBpbnRlcnJ1cHRlZCIpOworICAgICAgICAgICAgcmV0dXJuIFdPTEZTU0xfQ0JJT19FUlJfSVNSOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVyciA9PSBTT0NLRVRfRVBJUEUpIHsKKyAgICAgICAgICAgIFdPTEZTU0xfTVNHKCJcdFNvY2tldCBFUElQRSIpOworICAgICAgICAgICAgcmV0dXJuIFdPTEZTU0xfQ0JJT19FUlJfQ09OTl9DTE9TRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFdPTEZTU0xfTVNHKCJcdEdlbmVyYWwgZXJyb3IiKTsKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0dFTkVSQUw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc2VudDsKK30KKyNlbmRpZiAvKiBXT0xGU1NMX0RUTFMgJiYgVVNFX1dPTEZTU0xfSU8gKi8KKworc3RhdGljIGludCBOb25CbG9ja2luZ1NTTF9BY2NlcHQoU1NMKiBzc2wpCit7CisjaWZuZGVmIFdPTEZTU0xfQ0FMTEJBQ0tTCisgICAgaW50IHJldCA9IFNTTF9hY2NlcHQoc3NsKTsKKyNlbHNlCisgICAgaW50IHJldCA9IHdvbGZTU0xfYWNjZXB0X2V4KHNzbCwgc3J2SGFuZFNoYWtlQ0IsIHNydlRpbWVvdXRDQiwgc3J2VG8pOworI2VuZGlmCisgICAgaW50IGVycm9yID0gU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgIFNPQ0tFVF9UIHNvY2tmZCA9IChTT0NLRVRfVClTU0xfZ2V0X2ZkKHNzbCk7CisgICAgaW50IHNlbGVjdF9yZXQgPSAwOworCisgICAgd2hpbGUgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MgJiYKKyAgICAgICAgKGVycm9yID09IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEIHx8IGVycm9yID09IFdPTEZTU0xfRVJST1JfV0FOVF9XUklURQorICAgICAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgfHwgZXJyb3IgPT0gV0NfUEVORElOR19FCisgICAgICAgICNlbmRpZgorICAgICkpIHsKKyAgICAgICAgaW50IGN1cnJUaW1lb3V0ID0gMTsKKworICAgICAgICBpZiAoZXJyb3IgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1JFQUQpIHsKKyAgICAgICAgICAgIC8qIHByaW50ZigiLi4uIHNlcnZlciB3b3VsZCByZWFkIGJsb2NrXG4iKTsgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChlcnJvciA9PSBXT0xGU1NMX0VSUk9SX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgICAgIC8qIHByaW50ZigiLi4uIHNlcnZlciB3b3VsZCB3cml0ZSBibG9ja1xuIik7ICovCisgICAgICAgIH0KKworICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgIGlmIChlcnJvciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm9yID09IFdPTEZTU0xfRVJST1JfV0FOVF9XUklURSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzZWxlY3RfcmV0ID0gdGNwX3NlbGVjdF90eChzb2NrZmQsIGN1cnJUaW1lb3V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfRFRMUworICAgICAgICAgICAgICAgIGN1cnJUaW1lb3V0ID0gd29sZlNTTF9kdGxzX2dldF9jdXJyZW50X3RpbWVvdXQoc3NsKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIHNlbGVjdF9yZXQgPSB0Y3Bfc2VsZWN0KHNvY2tmZCwgY3VyclRpbWVvdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKChzZWxlY3RfcmV0ID09IFRFU1RfUkVDVl9SRUFEWSkgfHwgKHNlbGVjdF9yZXQgPT0gVEVTVF9TRU5EX1JFQURZKQorICAgICAgICAgICAgfHwgKHNlbGVjdF9yZXQgPT0gVEVTVF9FUlJPUl9SRUFEWSkKKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgIHx8IGVycm9yID09IFdDX1BFTkRJTkdfRQorICAgICAgICAjZW5kaWYKKyAgICAgICAgKSB7CisgICAgICAgICAgICAjaWZuZGVmIFdPTEZTU0xfQ0FMTEJBQ0tTCisgICAgICAgICAgICAgICAgcmV0ID0gU1NMX2FjY2VwdChzc2wpOworICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX2FjY2VwdF9leChzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnZIYW5kU2hha2VDQiwgc3J2VGltZW91dENCLCBzcnZUbyk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNlbGVjdF9yZXQgPT0gVEVTVF9USU1FT1VUICYmICF3b2xmU1NMX2R0bHMoc3NsKSkgeworICAgICAgICAgICAgZXJyb3IgPSBXT0xGU1NMX0VSUk9SX1dBTlRfUkVBRDsKKyAgICAgICAgfQorICAgICNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgZWxzZSBpZiAoc2VsZWN0X3JldCA9PSBURVNUX1RJTUVPVVQgJiYgd29sZlNTTF9kdGxzKHNzbCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2R0bHNfZ290X3RpbWVvdXQoc3NsKSA+PSAwKSB7CisgICAgICAgICAgICBlcnJvciA9IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEOworICAgICAgICB9CisgICAgI2VuZGlmCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZXJyb3IgPSBXT0xGU1NMX0ZBVEFMX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLyogRWNobyBudW1iZXIgb2YgYnl0ZXMgc3BlY2lmaWVkIGJ5IC1CIGFyZyAqLworaW50IFNlcnZlckVjaG9EYXRhKFNTTCogc3NsLCBpbnQgY2xpZW50ZmQsIGludCBlY2hvRGF0YSwgaW50IGJsb2NrLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCB0aHJvdWdocHV0KQoreworICAgIGludCByZXQgPSAwLCBlcnI7CisgICAgZG91YmxlIHN0YXJ0ID0gMCwgcnhfdGltZSA9IDAsIHR4X3RpbWUgPSAwOworICAgIGludCBzZWxlY3RfcmV0LCBsZW4sIHJ4X3BvczsKKyAgICBzaXplX3QgeGZlcl9ieXRlcyA9IDA7CisgICAgY2hhciogYnVmZmVyOworCisgICAgYnVmZmVyID0gKGNoYXIqKW1hbGxvYyhibG9jayk7CisgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiU2VydmVyIGJ1ZmZlciBtYWxsb2MgZmFpbGVkIik7CisgICAgfQorCisgICAgd2hpbGUgKChlY2hvRGF0YSAmJiB0aHJvdWdocHV0ID09IDApIHx8CisgICAgICAgICAgKCFlY2hvRGF0YSAmJiB4ZmVyX2J5dGVzIDwgdGhyb3VnaHB1dCkpCisgICAgeworICAgICAgICBzZWxlY3RfcmV0ID0gdGNwX3NlbGVjdChjbGllbnRmZCwgMSk7IC8qIFRpbWVvdXQ9MSBzZWNvbmQgKi8KKyAgICAgICAgaWYgKHNlbGVjdF9yZXQgPT0gVEVTVF9SRUNWX1JFQURZKSB7CisKKyAgICAgICAgICAgIGlmICh0aHJvdWdocHV0KQorICAgICAgICAgICAgICAgIGxlbiA9IG1pbihibG9jaywgKGludCkodGhyb3VnaHB1dCAtIHhmZXJfYnl0ZXMpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW4gPSBibG9jazsKKyAgICAgICAgICAgIHJ4X3BvcyA9IDA7CisKKyAgICAgICAgICAgIGlmICh0aHJvdWdocHV0KSB7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBjdXJyZW50X3RpbWUoMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFJlYWQgZGF0YSAqLworICAgICAgICAgICAgd2hpbGUgKHJ4X3BvcyA8IGxlbikgeworICAgICAgICAgICAgICAgIHJldCA9IFNTTF9yZWFkKHNzbCwgJmJ1ZmZlcltyeF9wb3NdLCBsZW4gLSByeF9wb3MpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IFNTTF9nZXRfZXJyb3Ioc3NsLCAwKTsKKyAgICAgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9Bc3luY1BvbGwoc3NsLCBXT0xGX1BPTExfRkxBR19DSEVDS19IVyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgIT0gV09MRlNTTF9FUlJPUl9aRVJPX1JFVFVSTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyICE9IEFQUF9EQVRBX1JFQURZKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNTTF9yZWFkIGVjaG8gZXJyb3IgJWRcbiIsIGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJfc3lzX2V4KHJ1bldpdGhFcnJvcnMsICJTU0xfcmVhZCBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gV09MRlNTTF9FUlJPUl9aRVJPX1JFVFVSTikgeworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShidWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdPTEZTU0xfRVJST1JfWkVST19SRVRVUk47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJ4X3BvcyArPSByZXQ7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhyb3VnaHB1dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aHJvdWdocHV0KSB7CisgICAgICAgICAgICAgICAgcnhfdGltZSArPSBjdXJyZW50X3RpbWUoMCkgLSBzdGFydDsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGN1cnJlbnRfdGltZSgxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogV3JpdGUgZGF0YSAqLworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGVyciA9IDA7IC8qIHJlc2V0IGVycm9yICovCisgICAgICAgICAgICAgICAgcmV0ID0gU1NMX3dyaXRlKHNzbCwgYnVmZmVyLCBtaW4obGVuLCByeF9wb3MpKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgICAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX0FzeW5jUG9sbChzc2wsIFdPTEZfUE9MTF9GTEFHX0NIRUNLX0hXKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpOworICAgICAgICAgICAgaWYgKHJldCAhPSAoaW50KW1pbihsZW4sIHJ4X3BvcykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlNTTF93cml0ZSBlY2hvIGVycm9yICVkXG4iLCBlcnIpOworICAgICAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgIlNTTF93cml0ZSBmYWlsZWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRocm91Z2hwdXQpIHsKKyAgICAgICAgICAgICAgICB0eF90aW1lICs9IGN1cnJlbnRfdGltZSgwKSAtIHN0YXJ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB4ZmVyX2J5dGVzICs9IGxlbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyZWUoYnVmZmVyKTsKKworICAgIGlmICh0aHJvdWdocHV0KSB7CisgICAgICAgIHByaW50ZigKKyAgICAgICAgI2lmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgICAgICAgICAgIndvbGZTU0wgU2VydmVyIEJlbmNobWFyayAlenUgYnl0ZXNcbiIKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICJ3b2xmU1NMIFNlcnZlciBCZW5jaG1hcmsgJWQgYnl0ZXNcbiIKKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAiXHRSWCAgICAgICU4LjNmIG1zICglOC4zZiBNQnBzKVxuIgorICAgICAgICAgICAgIlx0VFggICAgICAlOC4zZiBtcyAoJTguM2YgTUJwcylcbiIsCisgICAgI2lmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgICAgICAgICAgdGhyb3VnaHB1dCwKKyAgICAjZWxzZQorICAgICAgICAgICAgKGludCl0aHJvdWdocHV0LAorICAgICNlbmRpZgorICAgICAgICAgICAgcnhfdGltZSAqIDEwMDAsIHRocm91Z2hwdXQgLyByeF90aW1lIC8gMTAyNCAvIDEwMjQsCisgICAgICAgICAgICB0eF90aW1lICogMTAwMCwgdGhyb3VnaHB1dCAvIHR4X3RpbWUgLyAxMDI0IC8gMTAyNAorICAgICAgICApOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBTZXJ2ZXJSZWFkKFdPTEZTU0wqIHNzbCwgY2hhciogaW5wdXQsIGludCBpbnB1dExlbikKK3sKKyAgICBpbnQgcmV0LCBlcnI7CisgICAgY2hhciBidWZmZXJbV09MRlNTTF9NQVhfRVJST1JfU1pdOworCisgICAgLyogUmVhZCBkYXRhICovCisgICAgZG8geworICAgICAgICBlcnIgPSAwOyAvKiByZXNldCBlcnJvciAqLworICAgICAgICByZXQgPSBTU0xfcmVhZChzc2wsIGlucHV0LCBpbnB1dExlbik7CisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKHNzbCwgcmV0KTsKKworICAgICAgICAjaWZkZWYgSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTgorICAgICAgICAgICAgaWYgKGVyciA9PSBBUFBfREFUQV9SRUFEWSkgeworICAgICAgICAgICAgICAgIC8qIElmIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGR1cmluZyByZW5lZ290aWF0aW9uCisgICAgICAgICAgICAgICAgICogdGhlbiBqdXN0IHByaW50IGl0LiBXZSByZXR1cm4gdGhlIG1lc3NhZ2Ugc2VudAorICAgICAgICAgICAgICAgICAqIGFmdGVyIHRoZSByZW5lZ290aWF0aW9uLiAqLworICAgICAgICAgICAgICAgIHJldCA9IFNTTF9yZWFkKHNzbCwgaW5wdXQsIGlucHV0TGVuKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogbnVsbCB0ZXJtaW5hdGUgbWVzc2FnZSAqLworICAgICAgICAgICAgICAgICAgICBpbnB1dFtyZXRdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDbGllbnQgbWVzc2FnZSByZWNlaXZlZCBkdXJpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlY3VyZSByZW5lZ290aWF0aW9uOiAlc1xuIiwgaW5wdXQpOworICAgICAgICAgICAgICAgICAgICBlcnIgPSBXT0xGU1NMX0VSUk9SX1dBTlRfUkVBRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IFNTTF9nZXRfZXJyb3Ioc3NsLCByZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICBpZiAoZXJyID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgI2VuZGlmCisgICAgICAgICNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgICAgIGlmICh3b2xmU1NMX2R0bHMoc3NsKSAmJiBlcnIgPT0gREVDUllQVF9FUlJPUikgeworICAgICAgICAgICAgICAgIHByaW50ZigiRHJvcHBlZCBjbGllbnQncyBtZXNzYWdlIGR1ZSB0byBhIGJhZCBNQUNcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGlmIChlcnIgIT0gV09MRlNTTF9FUlJPUl9XQU5UX1JFQUQKKyAgICAgICAgI2lmZGVmIEhBVkVfU0VDVVJFX1JFTkVHT1RJQVRJT04KKyAgICAgICAgICAgICAgICAgICAgJiYgZXJyICE9IEFQUF9EQVRBX1JFQURZCisgICAgICAgICNlbmRpZgorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0xfcmVhZCBpbnB1dCBlcnJvciAlZCwgJXNcbiIsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGVyciwgYnVmZmVyKSk7CisgICAgICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiU1NMX3JlYWQgZmFpbGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoU1NMX2dldF9lcnJvcihzc2wsIDApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc2VsZWN0KFNTTF9nZXRfZmQoc3NsKSwgMCkgPT0gVEVTVF9SRUNWX1JFQURZKSB7CisgICAgICAgICAgICAgICAgZXJyID0gV09MRlNTTF9FUlJPUl9XQU5UX1JFQUQ7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChlcnIgPT0gV0NfUEVORElOR19FIHx8IGVyciA9PSBXT0xGU1NMX0VSUk9SX1dBTlRfUkVBRCk7CisgICAgaWYgKHJldCA+IDApIHsKKyAgICAgICAgLyogbnVsbCB0ZXJtaW5hdGUgbWVzc2FnZSAqLworICAgICAgICBpbnB1dFtyZXRdID0gJ1wwJzsKKyAgICAgICAgcHJpbnRmKCJDbGllbnQgbWVzc2FnZTogJXNcbiIsIGlucHV0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIFNlcnZlcldyaXRlKFdPTEZTU0wqIHNzbCwgY29uc3QgY2hhciogb3V0cHV0LCBpbnQgb3V0cHV0TGVuKQoreworICAgIGludCByZXQsIGVycjsKKyAgICBjaGFyIGJ1ZmZlcltXT0xGU1NMX01BWF9FUlJPUl9TWl07CisgICAgaW50IGxlbjsKKworI2lmZGVmIE9QRU5TU0xfQUxMCisgICAgLyogRnV6eiB0ZXN0aW5nIGV4cGVjdHMgcmVwbHkgc3BsaXQgb3ZlciB0d28gbXNncyB3aGVuIFRMU3YxLjAgb3IgYmVsb3cgKi8KKyAgICBpZiAod29sZlNTTF9HZXRWZXJzaW9uKHNzbCkgPD0gV09MRlNTTF9UTFNWMSkKKyAgICAgICAgIGxlbiA9IG91dHB1dExlbiAvIDI7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGxlbiA9IG91dHB1dExlbjsKKworICAgIGRvIHsKKyAgICAgICAgZXJyID0gMDsgLyogcmVzZXQgZXJyb3IgKi8KKyAgICAgICAgcmV0ID0gU1NMX3dyaXRlKHNzbCwgb3V0cHV0LCBsZW4pOworICAgICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgIGVyciA9IFNTTF9nZXRfZXJyb3Ioc3NsLCAwKTsKKworICAgICAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgaWYgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX0FzeW5jUG9sbChzc2wsIFdPTEZfUE9MTF9GTEFHX0NIRUNLX0hXKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJldCAhPSBvdXRwdXRMZW4pIHsKKyAgICAgICAgICAgIG91dHB1dCArPSByZXQ7CisgICAgICAgICAgICBsZW4gPSAob3V0cHV0TGVuIC09IHJldCk7CisgICAgICAgICAgICBlcnIgPSBXT0xGU1NMX0VSUk9SX1dBTlRfV1JJVEU7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChlcnIgPT0gV0NfUEVORElOR19FIHx8IGVyciA9PSBXT0xGU1NMX0VSUk9SX1dBTlRfV1JJVEUpOworICAgIGlmIChyZXQgIT0gb3V0cHV0TGVuKSB7CisgICAgICAgIHByaW50ZigiU1NMX3dyaXRlIG1zZyBlcnJvciAlZCwgJXNcbiIsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGVyciwgYnVmZmVyKSk7CisgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgIlNTTF93cml0ZSBmYWlsZWQiKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIGRlZmluZWQoSEFWRV9TVVBQT1JURURfQ1VSVkVTKQorI2RlZmluZSBNQVhfR1JPVVBfTlVNQkVSIDQKK3N0YXRpYyB2b2lkIFNldEtleVNoYXJlKFdPTEZTU0wqIHNzbCwgaW50IG9ubHlLZXlTaGFyZSwgaW50IHVzZVgyNTUxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2VYNDQ4KQoreworICAgIGludCByZXQ7CisgICAgaW50IGdyb3Vwc1tNQVhfR1JPVVBfTlVNQkVSXSA9IHswfTsKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgKHZvaWQpdXNlWDI1NTE5OworICAgICh2b2lkKXVzZVg0NDg7CisKKyAgICBXT0xGU1NMX1NUQVJUKFdDX0ZVTkNfQ0xJRU5UX0tFWV9FWENIQU5HRV9TRU5EKTsKKyAgICBpZiAob25seUtleVNoYXJlID09IDIpIHsKKyAgICAgICAgaWYgKHVzZVgyNTUxOSkgeworICAgICNpZmRlZiBIQVZFX0NVUlZFMjU1MTkKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX1VzZUtleVNoYXJlKHNzbCwgV09MRlNTTF9FQ0NfWDI1NTE5KTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW2NvdW50KytdID0gV09MRlNTTF9FQ0NfWDI1NTE5OworICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXQgPT0gV0NfUEVORElOR19FKQorICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0FzeW5jUG9sbChzc2wsIFdPTEZfUE9MTF9GTEFHX0NIRUNLX0hXKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIHVzZSBjdXJ2ZSB4MjU1MTkiKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHJldCA9PSBXQ19QRU5ESU5HX0UpOworICAgICNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHVzZVg0NDgpIHsKKyAgICAjaWZkZWYgSEFWRV9DVVJWRTQ0OAorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfVXNlS2V5U2hhcmUoc3NsLCBXT0xGU1NMX0VDQ19YNDQ4KTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW2NvdW50KytdID0gV09MRlNTTF9FQ0NfWDQ0ODsKKyAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICAgICAgZWxzZSBpZiAocmV0ID09IFdDX1BFTkRJTkdfRSkKKyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9Bc3luY1BvbGwoc3NsLCBXT0xGX1BPTExfRkxBR19DSEVDS19IVyk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoInVuYWJsZSB0byB1c2UgY3VydmUgeDQ0OCIpOworICAgICAgICAgICAgfSB3aGlsZSAocmV0ID09IFdDX1BFTkRJTkdfRSk7CisgICAgI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgI2lmZGVmIEhBVkVfRUNDCisgICAgICAgICNpZiAhZGVmaW5lZChOT19FQ0MyNTYpIHx8IGRlZmluZWQoSEFWRV9BTExfQ1VSVkVTKQorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfVXNlS2V5U2hhcmUoc3NsLCBXT0xGU1NMX0VDQ19TRUNQMjU2UjEpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgICAgICAgICBncm91cHNbY291bnQrK10gPSBXT0xGU1NMX0VDQ19TRUNQMjU2UjE7CisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9BU1lOQ19DUllQVAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJldCA9PSBXQ19QRU5ESU5HX0UpCisgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlcnJfc3lzKCJ1bmFibGUgdG8gdXNlIGN1cnZlIHNlY3AyNTZyMSIpOworICAgICAgICAgICAgfSB3aGlsZSAocmV0ID09IFdDX1BFTkRJTkdfRSk7CisgICAgICAgICNlbmRpZgorICAgICNlbmRpZgorICAgICAgICB9CisgICAgfQorICAgIGlmIChvbmx5S2V5U2hhcmUgPT0gMSkgeworICAgICNpZmRlZiBIQVZFX0ZGREhFXzIwNDgKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9Vc2VLZXlTaGFyZShzc2wsIFdPTEZTU0xfRkZESEVfMjA0OCk7CisgICAgICAgICAgICBpZiAocmV0ID09IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBncm91cHNbY291bnQrK10gPSBXT0xGU1NMX0ZGREhFXzIwNDg7CisgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICBlbHNlIGlmIChyZXQgPT0gV0NfUEVORElOR19FKQorICAgICAgICAgICAgICAgIHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJ1bmFibGUgdG8gdXNlIERIIDIwNDgtYml0IHBhcmFtZXRlcnMiKTsKKyAgICAgICAgfSB3aGlsZSAocmV0ID09IFdDX1BFTkRJTkdfRSk7CisgICAgI2VuZGlmCisgICAgfQorICAgIGlmIChjb3VudCA+PSBNQVhfR1JPVVBfTlVNQkVSKQorICAgICAgICBlcnJfc3lzKCJleGFtcGxlIGdyb3VwIGFycmF5IHNpemUgZXJyb3IiKTsKKyAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICAgIGlmICh3b2xmU1NMX3NldF9ncm91cHMoc3NsLCBncm91cHMsIGNvdW50KSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzKCJ1bmFibGUgdG8gc2V0IGdyb3VwcyIpOworICAgIH0KKyAgICBXT0xGU1NMX0VORChXQ19GVU5DX0NMSUVOVF9LRVlfRVhDSEFOR0VfU0VORCk7Cit9CisjZW5kaWYgLyogV09MRlNTTF9UTFMxMyAmJiBIQVZFX1NVUFBPUlRFRF9DVVJWRVMgKi8KKworCisvKiB3aGVuIGFkZGluZyBuZXcgb3B0aW9uLCBwbGVhc2UgZm9sbG93IHRoZSBzdGVwcyBiZWxvdzogKi8KKy8qICAxLiBhZGQgbmV3IG9wdGlvbiBtZXNzYWdlIGluIEVuZ2xpc2ggc2VjdGlvbiAgICAgICAgICAqLworLyogIDIuIGluY3JlYXNlIHRoZSBudW1iZXIgb2YgdGhlIHNlY29uZCBjb2x1bW4gICAgICAgICAgICovCisvKiAgMy4gaW5jcmVhc2UgdGhlIGFycmF5IGRpbWVuc2lvbiAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICA0LiBhZGQgdGhlIHNhbWUgbWVzc2FnZSBpbnRvIEphcGFuZXNlIHNlY3Rpb24gICAgICAgICAqLworLyogICAgICh3aWxsIGJlIHRyYW5zbGF0ZWQgbGF0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgNS4gYWRkIHByaW50ZigpIGludG8gc3VpdGFibGUgcG9zaXRpb24gb2YgVXNhZ2UoKSAgICAgKi8KK3N0YXRpYyBjb25zdCBjaGFyKiBzZXJ2ZXJfdXNhZ2VfbXNnW11bNTldID0geworICAgIC8qIEVuZ2xpc2ggKi8KKyAgICB7CisgICAgICAgICIgTk9URTogQWxsIGZpbGVzIHJlbGF0aXZlIHRvIHdvbGZTU0wgaG9tZSBkaXJcbiIsICAgICAgICAgICAgICAgLyogMCAqLworICAgICAgICAiLT8gPG51bT4gICAgSGVscCwgcHJpbnQgdGhpcyB1c2FnZVxuIgorICAgICAgICAiICAgICAgICAgICAgMDogRW5nbGlzaCwgMTogSmFwYW5lc2VcbiIKKyAgICAgICAgIi0taGVscCAgICAgIEhlbHAsIGluIEVuZ2xpc2hcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxICovCisgICAgICAgICItcCA8bnVtPiAgICBQb3J0IHRvIGxpc3RlbiBvbiwgbm90IDAsIGRlZmF1bHQiLCAgICAgICAgICAgICAgICAgLyogMiAqLworI2lmbmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgICItdiA8bnVtPiAgICBTU0wgdmVyc2lvbiBbMC0zXSwgU1NMdjMoMCkgLSBUTFMxLjIoMykpLCBkZWZhdWx0IiwgLyogMyAqLworI2Vsc2UKKyAgICAgICAgIi12IDxudW0+ICAgIFNTTCB2ZXJzaW9uIFswLTRdLCBTU0x2MygwKSAtIFRMUzEuMyg0KSksIGRlZmF1bHQiLCAvKiAzICovCisjZW5kaWYKKyAgICAgICAgIi1sIDxzdHI+ICAgIENpcGhlciBzdWl0ZSBsaXN0ICg6IGRlbGltaXRlZClcbiIsICAgICAgICAgICAgICAgICAvKiA0ICovCisgICAgICAgICItYyA8ZmlsZT4gICBDZXJ0aWZpY2F0ZSBmaWxlLCAgICAgICAgICAgZGVmYXVsdCIsICAgICAgICAgICAgICAgLyogNSAqLworICAgICAgICAiLWsgPGZpbGU+ICAgS2V5IGZpbGUsICAgICAgICAgICAgICAgICAgIGRlZmF1bHQiLCAgICAgICAgICAgICAgIC8qIDYgKi8KKyAgICAgICAgIi1BIDxmaWxlPiAgIENlcnRpZmljYXRlIEF1dGhvcml0eSBmaWxlLCBkZWZhdWx0IiwgICAgICAgICAgICAgICAvKiA3ICovCisgICAgICAgICItUiA8ZmlsZT4gICBDcmVhdGUgUmVhZHkgZmlsZSBmb3IgZXh0ZXJuYWwgbW9uaXRvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkZWZhdWx0IG5vbmVcbiIsICAvKiA4ICovCisjaWZuZGVmIE5PX0RICisgICAgICAgICItRCA8ZmlsZT4gICBEaWZmaWUtSGVsbG1hbiBQYXJhbXMgZmlsZSwgZGVmYXVsdCIsICAgICAgICAgICAgICAgLyogOSAqLworICAgICAgICAiLVogPG51bT4gICAgTWluaW11bSBESCBrZXkgYml0cywgICAgICAgIGRlZmF1bHQiLCAgICAgICAgICAgICAgLyogMTAgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfQUxQTgorICAgICAgICAiLUwgPHN0cj4gICAgQXBwbGljYXRpb24tTGF5ZXIgUHJvdG9jb2wgTmVnb3RpYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHtDLEZ9OjxsaXN0PilcbiIsICAvKiAxMSAqLworI2VuZGlmCisgICAgICAgICItZCAgICAgICAgICBEaXNhYmxlIGNsaWVudCBjZXJ0IGNoZWNrXG4iLCAgICAgICAgICAgICAgICAgICAgICAvKiAxMiAqLworICAgICAgICAiLWIgICAgICAgICAgQmluZCB0byBhbnkgaW50ZXJmYWNlIGluc3RlYWQgb2YgbG9jYWxob3N0IG9ubHlcbiIsLyogMTMgKi8KKyAgICAgICAgIi1zICAgICAgICAgIFVzZSBwcmUgU2hhcmVkIGtleXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE0ICovCisgICAgICAgICItdSAgICAgICAgICBVc2UgVURQIERUTFMsIgorICAgICAgICAgICAiIGFkZCAtdiAyIGZvciBEVExTdjEsIC12IDMgZm9yIERUTFN2MS4yIChkZWZhdWx0KVxuIiwgICAgICAgLyogMTUgKi8KKyNpZmRlZiBXT0xGU1NMX1NDVFAKKyAgICAgICAgIi1HICAgICAgICAgIFVzZSBTQ1RQIERUTFMsIgorICAgICAgICAgICAiIGFkZCAtdiAyIGZvciBEVExTdjEsIC12IDMgZm9yIERUTFN2MS4yIChkZWZhdWx0KVxuIiwgICAgICAgLyogMTYgKi8KKyNlbmRpZgorICAgICAgICAiLWYgICAgICAgICAgRmV3ZXIgcGFja2V0cy9ncm91cCBtZXNzYWdlc1xuIiwgICAgICAgICAgICAgICAgICAgLyogMTcgKi8KKyAgICAgICAgIi1yICAgICAgICAgIEFsbG93IG9uZSBjbGllbnQgUmVzdW1wdGlvblxuIiwgICAgICAgICAgICAgICAgICAgIC8qIDE4ICovCisgICAgICAgICItTiAgICAgICAgICBVc2UgTm9uLWJsb2NraW5nIHNvY2tldHNcbiIsICAgICAgICAgICAgICAgICAgICAgICAvKiAxOSAqLworICAgICAgICAiLVMgPHN0cj4gICAgVXNlIEhvc3QgTmFtZSBJbmRpY2F0aW9uXG4iLCAgICAgICAgICAgICAgICAgICAgICAgLyogMjAgKi8KKyAgICAgICAgIi13ICAgICAgICAgIFdhaXQgZm9yIGJpZGlyZWN0aW9uYWwgc2h1dGRvd25cbiIsICAgICAgICAgICAgICAgIC8qIDIxICovCisjaWZkZWYgSEFWRV9PQ1NQCisgICAgICAgICItbyAgICAgICAgICBQZXJmb3JtIE9DU1AgbG9va3VwIG9uIHBlZXIgY2VydGlmaWNhdGVcbiIsICAgICAgICAvKiAyMiAqLworICAgICAgICAiLU8gPHVybD4gICAgUGVyZm9ybSBPQ1NQIGxvb2t1cCB1c2luZyA8dXJsPiBhcyByZXNwb25kZXJcbiIsICAgLyogMjMgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfUEtfQ0FMTEJBQ0tTCisgICAgICAgICItUCAgICAgICAgICBQdWJsaWMgS2V5IENhbGxiYWNrc1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNCAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9BTk9OCisgICAgICAgICItYSAgICAgICAgICBBbm9ueW1vdXMgc2VydmVyXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNSAqLworI2VuZGlmCisjaWZuZGVmIE5PX1BTSworICAgICAgICAiLUkgICAgICAgICAgRG8gbm90IHNlbmQgUFNLIGlkZW50aXR5IGhpbnRcbiIsICAgICAgICAgICAgICAgICAgLyogMjYgKi8KKyNlbmRpZgorICAgICAgICAiLXggICAgICAgICAgUHJpbnQgc2VydmVyIGVycm9ycyBidXQgZG8gbm90IGNsb3NlIGNvbm5lY3Rpb25cbiIsLyogMjcgKi8KKyAgICAgICAgIi1pICAgICAgICAgIExvb3AgaW5kZWZpbml0ZWx5IChhbGxvdyByZXBlYXRlZCBjb25uZWN0aW9ucylcbiIsIC8qIDI4ICovCisgICAgICAgICItZSAgICAgICAgICBFY2hvIGRhdGEgbW9kZSAocmV0dXJuIHJhdyBieXRlcyByZWNlaXZlZClcbiIsICAgICAvKiAyOSAqLworI2lmZGVmIEhBVkVfTlRSVQorICAgICAgICAiLW4gICAgICAgICAgVXNlIE5UUlUga2V5IChuZWVkZWQgZm9yIE5UUlUgc3VpdGVzKVxuIiwgICAgICAgICAgLyogMzAgKi8KKyNlbmRpZgorICAgICAgICAiLUIgPG51bT4gICAgQmVuY2htYXJrIHRocm91Z2hwdXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB1c2luZyA8bnVtPiBieXRlcyBhbmQgcHJpbnQgc3RhdHNcbiIsICAgICAvKiAzMSAqLworI2lmZGVmIEhBVkVfQ1JMCisgICAgICAgICItViAgICAgICAgICBEaXNhYmxlIENSTFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMiAqLworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9UUlVTVF9QRUVSX0NFUlQKKyAgICAgICAgIi1FIDxmaWxlPiAgIFBhdGggdG8gbG9hZCB0cnVzdGVkIHBlZXIgY2VydFxuIiwgICAgICAgICAgICAgICAgIC8qIDMzICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX1dOUgorICAgICAgICAiLXEgPGZpbGU+ICAgV2hpdGV3b29kIGNvbmZpZyBmaWxlLCAgICAgIGRlZmF1bHQiLCAgICAgICAgICAgICAgLyogMzQgKi8KKyNlbmRpZgorICAgICAgICAiLWcgICAgICAgICAgUmV0dXJuIGJhc2ljIEhUTUwgd2ViIHBhZ2VcbiIsICAgICAgICAgICAgICAgICAgICAgLyogMzUgKi8KKyAgICAgICAgIi1DIDxudW0+ICAgIFRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgdG8gYWNjZXB0LCBkZWZhdWx0OiAxXG4iLC8qIDM2ICovCisgICAgICAgICItSCA8YXJnPiAgICBJbnRlcm5hbCB0ZXN0cyIKKyAgICAgICAgICAgICIgW2RlZkNpcGhlckxpc3QsIGV4aXRXaXRoUmV0LCB2ZXJpZnlGYWlsLCB1c2VTdXBDdXJ2ZSxcbiIsIC8qIDM3ICovCisgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFNTTCwgZGlzYWxsb3dFVE1dXG4iLCAgICAgICAgICAvKiAzOCAqLworI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgIi1VICAgICAgICAgIFVwZGF0ZSBrZXlzIGFuZCBJVnMgYmVmb3JlIHNlbmRpbmdcbiIsICAgICAgICAgICAgIC8qIDM5ICovCisgICAgICAgICItSyAgICAgICAgICBLZXkgRXhjaGFuZ2UgZm9yIFBTSyBub3QgdXNpbmcgKEVDKURIRVxuIiwgICAgICAgICAvKiA0MCAqLworI2lmbmRlZiBOT19ESAorICAgICAgICAiLXkgICAgICAgICAgUHJlLWdlbmVyYXRlIEtleSBTaGFyZSB1c2luZyBGRkRIRV8yMDQ4IG9ubHlcbiIsICAgLyogNDEgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfRUNDCisgICAgICAgICItWSAgICAgICAgICBQcmUtZ2VuZXJhdGUgS2V5IFNoYXJlIHVzaW5nIFAtMjU2IG9ubHkgXG4iLCAgICAgICAvKiA0MiAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9DVVJWRTI1NTE5CisgICAgICAgICItdCAgICAgICAgICBQcmUtZ2VuZXJhdGUgS2V5IHNoYXJlIHVzaW5nIEN1cnZlMjU1MTkgb25seVxuIiwgICAvKiA0MyAqLworI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9UTFMxMyAqLworI2lmZGVmIEhBVkVfU0VTU0lPTl9USUNLRVQKKyNpZiBkZWZpbmVkKFdPTEZTU0xfTk9fVExTMTIpICYmIGRlZmluZWQoTk9fT0xEX1RMUykKKyAgICAgICAgIi1UICAgICAgICAgIERvIG5vdCBnZW5lcmF0ZSBzZXNzaW9uIHRpY2tldFxuIiwgICAgICAgICAgICAgICAgIC8qIDQ0ICovCisjZWxzZQorICAgICAgICAiLVQgW2Fvbl0gICAgRG8gbm90IGdlbmVyYXRlIHNlc3Npb24gdGlja2V0XG4iLCAgICAgICAgICAgICAgICAgLyogNDQgKi8KKyAgICAgICAgIiAgICAgICAgICAgIE5vIG9wdGlvbiBhZmZlY3RzIFRMUyAxLjMgb25seSwgJ2EnIGFmZmVjdHMgYWxsIgorICAgICAgICAgICAgIiBwcm90b2NvbCB2ZXJzaW9ucyxcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDUgKi8KKyAgICAgICAgIiAgICAgICAgICAgICdvJyBhZmZlY3RzIFRMUyAxLjIgYW5kIGJlbG93IG9ubHlcbiIsICAgICAgICAgICAgIC8qIDQ2ICovCisgICAgICAgICIgICAgICAgICAgICAnbicgYWZmZWN0cyBUTFMgMS4zIG9ubHlcbiIsICAgICAgICAgICAgICAgICAgICAgICAvKiA0NyAqLworI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgICItRiAgICAgICAgICBTZW5kIGFsZXJ0IGlmIG5vIG11dHVhbCBhdXRoZW50aWNhdGlvblxuIiwgICAgICAgICAvKiA0OCAqLworI2lmZGVmIFdPTEZTU0xfUE9TVF9IQU5EU0hBS0VfQVVUSAorICAgICAgICAiLVEgICAgICAgICAgUmVxdWVzdCBjZXJ0aWZpY2F0ZSBmcm9tIGNsaWVudCBwb3N0LWhhbmRzaGFrZVxuIiwgLyogNDkgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfU0VORF9IUlJfQ09PS0lFCisgICAgICAgICItSiAgICAgICAgICBTZXJ2ZXIgc2VuZHMgQ29va2llIEV4dGVuc2lvbiBjb250YWluaW5nIHN0YXRlXG4iLCAvKiA1MCAqLworI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9UTFMxMyAqLworI2lmZGVmIFdPTEZTU0xfRUFSTFlfREFUQQorICAgICAgICAiLTAgICAgICAgICAgRWFybHkgZGF0YSByZWFkIGZyb20gY2xpZW50ICgwLVJUVCBoYW5kc2hha2UpXG4iLCAgLyogNTEgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfTVVMVElDQVNUCisgICAgICAgICItMyA8Z3JwaWQ+ICBNdWx0aWNhc3QsIGdycGlkIDwgMjU2XG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1MiAqLworI2VuZGlmCisgICAgICAgICItMSA8bnVtPiAgICBEaXNwbGF5IGEgcmVzdWx0IGJ5IHNwZWNpZmllZCBsYW5ndWFnZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiAgICAgICAgICAgIDA6IEVuZ2xpc2gsIDE6IEphcGFuZXNlXG4iLCAvKiA1MyAqLworI2lmZGVmIEhBVkVfVFJVU1RFRF9DQQorICAgICAgICAiLTUgICAgICAgICAgVXNlIFRydXN0ZWQgQ0EgS2V5IEluZGljYXRpb25cbiIsICAgICAgICAgICAgICAgICAgLyogNTQgKi8KKyNlbmRpZgorICAgICAgICAiLTYgICAgICAgICAgU2ltdWxhdGUgV0FOVF9XUklURSBlcnJvcnMgb24gZXZlcnkgb3RoZXIgSU8gc2VuZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU1ICovCisjaWZkZWYgSEFWRV9DVVJWRTQ0OAorICAgICAgICAiLTggICAgICAgICAgUHJlLWdlbmVyYXRlIEtleSBzaGFyZSB1c2luZyBDdXJ2ZTQ0OCBvbmx5XG4iLCAgICAgLyogNTYgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpICYmIGRlZmluZWQoV09MRlNTTF9DRVJUX0dFTikgJiYgXAorICAgIChkZWZpbmVkKFdPTEZTU0xfQ0VSVF9SRVEpIHx8IGRlZmluZWQoV09MRlNTTF9DRVJUX0VYVCkpICYmIFwKKyAgICAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX0RJUikKKyAgICAgICAgIi05ICAgICAgICAgIFVzZSBoYXNoIGRpciBsb29rIHVwIGZvciBjZXJ0aWZpY2F0ZSBsb2FkaW5nXG4iCisgICAgICAgICIgICAgICAgICAgICBsb2FkaW5nIGZyb20gPHdvbGZTU0wgaG9tZT4vY2VydHMgZm9sZGVyXG4iCisgICAgICAgICIgICAgICAgICAgICBmaWxlcyBpbiB0aGUgZm9sZGVyIHdvdWxkIGhhdmUgdGhlIGZvcm0gXCJoYXNoLk5cIiBmaWxlIG5hbWVcbiIKKyAgICAgICAgIiAgICAgICAgICAgIGUuZyBzeW1ib2xpYyBsaW5rIHRvIHRoZSBmaWxlIGF0IGNlcnRzIGZvbGRlclxuIgorICAgICAgICAiICAgICAgICAgICAgbG4gLXMgY2xpZW50LWNhLnBlbSAgYG9wZW5zc2wgeDUwOSAtaW4gY2xpZW50LWNhLnBlbSAtaGFzaCAtbm9vdXRgLjBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU3ICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUykgJiYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgIWRlZmluZWQoV09MRlNFTlRSWV9OT19KU09OKQorICAgICAgICAiLS13b2xmc2VudHJ5LWNvbmZpZyA8ZmlsZT4gICAgUGF0aCBmb3IgSlNPTiB3b2xmU2VudHJ5IGNvbmZpZ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTggKi8KKyNlbmRpZgorCisjaWZuZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgIi03ICAgICAgICAgIFNldCBtaW5pbXVtIGRvd25ncmFkZSBwcm90b2NvbCB2ZXJzaW9uIFswLTNdICIKKyAgICAgICAgIiBTU0x2MygwKSAtIFRMUzEuMigzKVxuIiwKKyNlbHNlCisgICAgICAgICItNyAgICAgICAgICBTZXQgbWluaW11bSBkb3duZ3JhZGUgcHJvdG9jb2wgdmVyc2lvbiBbMC00XSAiCisgICAgICAgICIgU1NMdjMoMCkgLSBUTFMxLjMoNClcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTkgKi8KKyNlbmRpZgorICAgICAgICBOVUxMLAorICAgIH0sCisjaWZuZGVmIE5PX01VTFRJQllURV9QUklOVAorICAgIC8qIEphcGFuZXNlICovCisgICAgeworICAgICAgICAiIOazqOaEjyA6IOWFqOOBpuOBruODleOCoeOCpOODq+OBryIKKyAgICAgICAgIiB3b2xmU1NMIOODm+ODvOODoOODu+ODh+OCo+ODrOOCr+ODiOODquOBi+OCieOBruebuOWvvuOBp+OBmeOAglxuIiwgICAgICAgICAgICAgICAvKiAwICovCisgICAgICAgICItPyA8bnVtPiAgICDjg5jjg6vjg5csIOS9v+OBhOaWueOCkuihqOekulxuIgorICAgICAgICAiICAgICAgICAgICAgMDog6Iux6Kqe44CBIDE6IOaXpeacrOiqnlxuIgorICAgICAgICAiLS3jg5jjg6vjg5cgICAgIOS9v+OBhOaWueOCkuihqOekuiwg5pel5pys6Kqe44GnXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxICovCisgICAgICAgICItcCA8bnVtPiAgICDmjqXntprlhYjjg53jg7zjg4gsIDDjga/nhKHlirksIOaXouWumuWApCIsICAgICAgICAgICAgICAgICAgICAgLyogMiAqLworI2lmbmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgICItdiA8bnVtPiAgICBTU0wg44OQ44O844K444On44OzIFswLTNdLCBTU0x2MygwKSAtIFRMUzEuMigzKSksIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiDml6LlrprlgKQiLCAgIC8qIDMgKi8KKyNlbHNlCisgICAgICAgICItdiA8bnVtPiAgICBTU0wg44OQ44O844K444On44OzIFswLTRdLCBTU0x2MygwKSAtIFRMUzEuMyg0KSksIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiDml6LlrprlgKQiLCAgIC8qIDMgKi8KKyNlbmRpZgorICAgICAgICAiLWwgPHN0cj4gICAg5pqX5Y+344K544Kk44O844OI44Oq44K544OIICjljLrliIfjgormloflrZcgOilcbiIsICAgICAgICAgICAgICAgLyogNCAqLworICAgICAgICAiLWMgPGZpbGU+ICAg6Ki85piO5pu444OV44Kh44Kk44OrLCAg5pei5a6a5YCkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1ICovCisgICAgICAgICItayA8ZmlsZT4gICDpjbXjg5XjgqHjgqTjg6ssICAgICAg5pei5a6a5YCkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2ICovCisgICAgICAgICItQSA8ZmlsZT4gICDoqo3oqLzlsYDjg5XjgqHjgqTjg6ssICDml6LlrprlgKQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcgKi8KKyAgICAgICAgIi1SIDxmaWxlPiAgIOWklumDqOODouODi+OCv+eUqOOBrua6luWCmeWujOS6huODleOCoeOCpOODq+OCkuS9nOaIkOOBmeOCi+OAgiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLml6LlrprlgKQgIOOBquOBl1xuIiwgIC8qIDggKi8KKyNpZm5kZWYgTk9fREgKKyAgICAgICAgIi1EIDxmaWxlPiAgIOODh+OCo+ODleOCo+ODvOODu+ODmOODq+ODnuODs+OBruODkeODqeODoeODvOOCv+ODleOCoeOCpOODqywiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg5pei5a6a5YCkIiwgICAgICAgICAgLyogOSAqLworICAgICAgICAiLVogPG51bT4gICAg5pyA5bCPIERIIOmNtSDjg5Pjg4Pjg4gsIOaXouWumuWApCIsICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfQUxQTgorICAgICAgICAiLUwgPHN0cj4gICAg44Ki44OX44Oq44Kx44O844K344On44Oz5bGk44OX44Ot44OI44Kz44Or44ON44K044K344Ko44O844K344On44Oz44KS6KGM44GGIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICh7QyxGfTo8bGlzdD4pXG4iLCAgLyogMTEgKi8KKyNlbmRpZgorICAgICAgICAiLWQgICAgICAgICAg44Kv44Op44Kk44Ki44Oz44OI6KqN6Ki844KS54Sh5Yq544Go44GZ44KLXG4iLCAgICAgICAgICAgICAgICAgICAvKiAxMiAqLworICAgICAgICAiLWIgICAgICAgICAg44Ot44O844Kr44Or44Ob44K544OI5Lul5aSW44Gu44Kk44Oz44K/44O844OV44Kn44O844K544G444KCIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIuODkOOCpOODs+ODieOBmeOCi1xuIiwgICAgICAgLyogMTMgKi8KKyAgICAgICAgIi1zICAgICAgICAgIOS6i+WJjeWFseaciemNteOCkuS9v+eUqOOBmeOCi1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNCAqLworICAgICAgICAiLXUgICAgICAgICAgVURQIERUTFPjgpLkvb/nlKjjgZnjgovjgIItdiAyIOOCkui/veWKoOaMh+WumuOBmeOCi+OBqCIKKyAgICAgICAgICAgICAiIERUTFN2MSwgLXYgMyDjgpLov73liqDmjIflrprjgZnjgovjgaggRFRMU3YxLjIgKOaXouWumuWApClcbiIsICAgICAgLyogMTUgKi8KKyNpZmRlZiBXT0xGU1NMX1NDVFAKKyAgICAgICAgIi1HICAgICAgICAgIFNDVFAgRFRMU+OCkuS9v+eUqOOBmeOCi+OAgi12IDIg44KS6L+95Yqg5oyH5a6a44GZ44KL44GoIgorICAgICAgICAgICAgICAiIERUTFN2MSwgLXYgMyDjgpLov73liqDmjIflrprjgZnjgovjgaggRFRMU3YxLjIgKOaXouWumuWApClcbiIsICAgICAvKiAxNiAqLworI2VuZGlmCisgICAgICAgICItZiAgICAgICAgICDjgojjgorlsJHjgarjgYTjg5HjgrHjg4Pjg4gv44Kw44Or44O844OX44Oh44OD44K744O844K444KS5L2/55So44GZ44KLXG4iLC8qIDE3ICovCisgICAgICAgICItciAgICAgICAgICDjgq/jg6njgqTjgqLjg7Pjg4jjga7lho3plovjgpLoqLHlj6/jgZnjgotcbiIsICAgICAgICAgICAgICAgICAgIC8qIDE4ICovCisgICAgICAgICItTiAgICAgICAgICDjg47jg7Pjg5bjg63jg4Pjgq3jg7PjgrDjg7vjgr3jgrHjg4Pjg4jjgpLkvb/nlKjjgZnjgotcbiIsICAgICAgICAgICAvKiAxOSAqLworICAgICAgICAiLVMgPHN0cj4gICAg44Ob44K544OI5ZCN6KGo56S644KS5L2/55So44GZ44KLXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMCAqLworICAgICAgICAiLXcgICAgICAgICAg5Y+M5pa55ZCR44K344Oj44OD44OI44OA44Km44Oz44KS5b6F44GkXG4iLCAgICAgICAgICAgICAgICAgICAgIC8qIDIxICovCisjaWZkZWYgSEFWRV9PQ1NQCisgICAgICAgICItbyAgICAgICAgICBPQ1NQ44Or44OD44Kv44Ki44OD44OX44KS44OU44Ki6Ki85piO5pu444Gn5a6f5pa944GZ44KLXG4iLCAgICAgICAgIC8qIDIyICovCisgICAgICAgICItTyA8dXJsPiAgICBPQ1NQ44Or44OD44Kv44Ki44OD44OX44KS44CBIgorICAgICAgICAgICAgICAgICAgICAgICAgIjx1cmw+44KS5L2/55So44GX5b+c562U6ICF44Go44GX44Gm5a6f5pa944GZ44KLXG4iLCAgICAgICAgICAvKiAyMyAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9QS19DQUxMQkFDS1MKKyAgICAgICAgIi1QICAgICAgICAgIOWFrOmWi+mNteOCs+ODvOODq+ODkOODg+OCr1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI0ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FOT04KKyAgICAgICAgIi1hICAgICAgICAgIOWMv+WQjeOCteODvOODkOODvFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI1ICovCisjZW5kaWYKKyNpZm5kZWYgTk9fUFNLCisgICAgICAgICItSSAgICAgICAgICBQU0vjgqLjgqTjg4fjg7Pjg4bjgqPjg4bjgqPjga7jg5Ljg7Pjg4jjgpLpgIHkv6HjgZfjgarjgYRcbiIsICAgICAgICAvKiAyNiAqLworI2VuZGlmCisgICAgICAgICIteCAgICAgICAgICDjgrXjg7zjg5Djg7zjgqjjg6njg7zjgpLlh7rlipvjgZnjgovjgYzmjqXntprjgpLliIfmlq3jgZfjgarjgYRcbiIsICAgICAvKiAyNyAqLworICAgICAgICAiLWkgICAgICAgICAg54Sh5pyf6ZmQ44Gr44Or44O844OX44GZ44KLKOe5sOOCiui/lOOBl+aOpee2muOCkuioseWPrylcbiIsICAgICAgICAgLyogMjggKi8KKyAgICAgICAgIi1lICAgICAgICAgIOOCqOOCs+ODvOODu+ODh+ODvOOCv+ODouODvOODiSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIijlj5fjgZHlj5bjgaPjgZ/jg5DjgqTjg4jjg4fjg7zjgr/jgpLov5TjgZkpXG4iLCAgLyogMjkgKi8KKyNpZmRlZiBIQVZFX05UUlUKKyAgICAgICAgIi1uICAgICAgICAgIE5UUlXpjbXjgpLkvb/nlKjjgZnjgosoTlRSVeOCueOCpOODvOODiOOBq+W/heimgSlcbiIsICAgICAgICAgICAvKiAzMCAqLworI2VuZGlmCisgICAgICAgICItQiA8bnVtPiAgICA8bnVtPiDjg5DjgqTjg4jjgpLnlKjjgYTjgabjga7jg5njg7Pjg4Hjg57jg7zjgq/jg7vjgrnjg6vjg7zjg5fjg4Pjg4giCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi5ris5a6a44Go57WQ5p6c44KS5Ye65Yqb44GZ44KLXG4iLCAgICAgLyogMzEgKi8KKyNpZmRlZiBIQVZFX0NSTAorICAgICAgICAiLVYgICAgICAgICAgQ1JM44KS54Sh5Yq544Go44GZ44KLXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfVFJVU1RfUEVFUl9DRVJUCisgICAgICAgICItRSA8ZmlsZT4gICDkv6HpoLzlh7rmnaXjgovjg5TjgqLjga7oqLzmmI7mm7jjg63jg7zjg4njga7ngrrjga7jg5HjgrlcblxuIiwgICAgICAgLyogMzMgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfV05SCisgICAgICAgICItcSA8ZmlsZT4gICBXaGl0ZXdvb2Qg44Kz44Oz44OV44Kj44Kw44OV44Kh44Kk44OrLCAgICAgIOaXouWumuWApCIsICAgICAgICAvKiAzNCAqLworI2VuZGlmCisgICAgICAgICItZyAgICAgICAgICDln7rmnKznmoTjgaogV2ViIOODmuODvOOCuOOCkui/lOOBmVxuIiwgICAgICAgICAgICAgICAgICAgICAgLyogMzUgKi8KKyAgICAgICAgIi1DIDxudW0+ICAgIOOCouOCr+OCu+ODl+ODiOWPr+iDveOBquaOpee2muaVsOOCkuaMh+WumuOBmeOCi+OAguaXouWumuWApDogMVxuIiwgICAgLyogMzYgKi8KKyAgICAgICAgIi1IIDxhcmc+ICAgIOWGhemDqOODhuOCueODiCIKKyAgICAgICAgICAgICIgW2RlZkNpcGhlckxpc3QsIGV4aXRXaXRoUmV0LCB2ZXJpZnlGYWlsLCB1c2VTdXBDdXJ2ZSxcbiIsIC8qIDM3ICovCisgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFNTTCwgZGlzYWxsb3dFVE1dXG4iLCAgICAgICAgICAvKiAzOCAqLworI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgIi1VICAgICAgICAgIOODh+ODvOOCv+mAgeS/oeWJjeOBq+OAgemNteOBqElW44KS5pu05paw44GZ44KLXG4iLCAgICAgICAgICAgICAgIC8qIDM5ICovCisgICAgICAgICItSyAgICAgICAgICDpjbXkuqTmj5vjgatQU0vjgpLkvb/nlKjjgIEoRUMpREhF44Gv5L2/55So44GX44Gq44GEXG4iLCAgICAgICAgIC8qIDQwICovCisjaWZuZGVmIE5PX0RICisgICAgICAgICIteSAgICAgICAgICBGRkRIRV8yMDQ444Gu44G/44KS5L2/55So44GX44Gm6Y215YWx5pyJ44KS5LqL5YmN55Sf5oiQ44GZ44KLXG4iLCAgIC8qIDQxICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0VDQworICAgICAgICAiLVkgICAgICAgICAgUC0yNTbjga7jgb/jgpLkvb/nlKjjgZfjgZ/jgq3jg7zlhbHmnInjga7kuovliY3nlJ/miJBcbiIsICAgICAgICAgIC8qIDQyICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0NVUlZFMjU1MTkKKyAgICAgICAgIi10ICAgICAgICAgIEN1cnZlMjU1MTnjga7jgb/jgpLkvb/nlKjjgZfjgabpjbXlhbHmnInjgpLkuovliY3nlJ/miJDjgZnjgotcbiIsICAgLyogNDMgKi8KKyNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfVExTMTMgKi8KKyNpZiBkZWZpbmVkKFdPTEZTU0xfTk9fVExTMTIpICYmIGRlZmluZWQoTk9fT0xEX1RMUykKKyAgICAgICAgIi1UICAgICAgICAgIOOCu+ODg+OCt+ODp+ODs+ODgeOCseODg+ODiOOCkueUn+aIkOOBl+OBquOBhFxuIiwgICAgICAgICAgICAgICAgIC8qIDQ0ICovCisjZWxzZQorICAgICAgICAiLVQgW2Fvbl0gICAg44K744OD44K344On44Oz44OB44Kx44OD44OI44KS55Sf5oiQ44GX44Gq44GEXG4iLCAgICAgICAgICAgICAgICAgLyogNDQgKi8KKyAgICAgICAgIiAgICAgICAgICAgIE5vIG9wdGlvbiBhZmZlY3RzIFRMUyAxLjMgb25seSwgJ2EnIGFmZmVjdHMgYWxsIgorICAgICAgICAgICAgIiBwcm90b2NvbCB2ZXJzaW9ucyxcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDUgKi8KKyAgICAgICAgIiAgICAgICAgICAgICdvJyBhZmZlY3RzIFRMUyAxLjIgYW5kIGJlbG93IG9ubHlcbiIsICAgICAgICAgICAgIC8qIDQ2ICovCisgICAgICAgICIgICAgICAgICAgICAnbicgYWZmZWN0cyBUTFMgMS4zIG9ubHlcbiIsICAgICAgICAgICAgICAgICAgICAgICAvKiA0NyAqLworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9UTFMxMworICAgICAgICAiLUYgICAgICAgICAgU2VuZCBhbGVydCBpZiBubyBtdXR1YWwgYXV0aGVudGljYXRpb25cbiIsICAgICAgICAgLyogNDggKi8KKyNpZmRlZiBXT0xGU1NMX1BPU1RfSEFORFNIQUtFX0FVVEgKKyAgICAgICAgIi1RICAgICAgICAgIOOCr+ODqeOCpOOCouODs+ODiOOBruODneOCueODiOODj+ODs+ODieOCt+OCp+OCpOOCr+OBi+OCiSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi6Ki85piO5pu444KS6KaB5rGC44GZ44KLXG4iLCAgICAgLyogNDkgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfU0VORF9IUlJfQ09PS0lFCisgICAgICAgICItSiAgICAgICAgICDjgrXjg7zjg5Djg7zjga7nirbmhYvjgpLlkKvjgoBUTFMgQ29va2llIOaLoeW8teOCkumAgeS/oeOBmeOCi1xuIiwgIC8qIDUwICovCisjZW5kaWYKKyNlbmRpZiAvKiBXT0xGU1NMX1RMUzEzICovCisjaWZkZWYgV09MRlNTTF9FQVJMWV9EQVRBCisgICAgICAgICItMCAgICAgICAgICDjgq/jg6njgqTjgqLjg7Pjg4jjgYvjgonjga4gRWFybHkgRGF0YSDoqq3jgb/lj5bjgooiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLvvIgwLVJUVOODj+ODs+ODieOCt+OCp+OCpOOCr++8iVxuIiwgICAgICAvKiA1MSAqLworI2VuZGlmCisjaWZkZWYgV09MRlNTTF9NVUxUSUNBU1QKKyAgICAgICAgIi0zIDxncnBpZD4gIOODnuODq+ODgeOCreODo+OCueODiCwgZ3JwaWQgPCAyNTZcbiIsICAgICAgICAgICAgICAgICAgICAvKiA1MiAqLworI2VuZGlmCisgICAgICAgICItMSA8bnVtPiAgICDmjIflrprjgZXjgozjgZ/oqIDoqp7jgafntZDmnpzjgpLooajnpLrjgZfjgb7jgZnjgIIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4gICAgICAgICAgICAwOiDoi7Hoqp7jgIEgMTog5pel5pys6KqeXG4iLCAvKiA1MyAqLworI2lmZGVmIEhBVkVfVFJVU1RFRF9DQQorICAgICAgICAiLTUgICAgICAgICAg5L+h6aC844Gn44GN44KL6KqN6Ki85bGA44Gu6Y216KGo56S644KS5L2/55So44GZ44KLXG4iLCAgICAgICAgICAgICAvKiA1NCAqLworI2VuZGlmCisgICAgICAgICItNiAgICAgICAgICBTaW11bGF0ZSBXQU5UX1dSSVRFIGVycm9ycyBvbiBldmVyeSBvdGhlciBJTyBzZW5kXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTUgKi8KKyNpZmRlZiBIQVZFX0NVUlZFNDQ4CisgICAgICAgICItOCAgICAgICAgICBQcmUtZ2VuZXJhdGUgS2V5IHNoYXJlIHVzaW5nIEN1cnZlNDQ4IG9ubHlcbiIsICAgICAvKiA1NiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgJiYgZGVmaW5lZChXT0xGU1NMX0NFUlRfR0VOKSAmJiBcCisgICAgKGRlZmluZWQoV09MRlNTTF9DRVJUX1JFUSkgfHwgZGVmaW5lZChXT0xGU1NMX0NFUlRfRVhUKSkgJiYgXAorICAgICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKE5PX1dPTEZTU0xfRElSKQorICAgICAgICAiLTkgICAgICAgICAg6Ki85piO5pu444Gu6Kqt44G/6L6844G/44GrIGhhc2ggZGlyIOapn+iDveOCkuS9v+eUqOOBmeOCi1xuIgorICAgICAgICAiICAgICAgICAgICAgPHdvbGZTU0wgaG9tZT4vY2VydHMg44OV44Kp44Or44OA44O844GL44KJ44Ot44O844OJ44GX44G+44GZXG4iCisgICAgICAgICIgICAgICAgICAgICDjg5Xjgqnjg6vjg4Djg7zkuK3jga7jg5XjgqHjgqTjg6vjga/jgIFcImhhc2guTlwiW046MC05XeWQjeOBp+OBguOCi+W/heimgeOBjOOBguOCiuOBvuOBmVxuIgorICAgICAgICAiICAgICAgICAgICAg5Lul5LiL44Gu5L6L44Gn44GvY2EtY2VydC5wZW3jgavjgrfjg7Pjg5zjg6rjg4Pjgq/jg6rjg7Pjgq/jgpLoqK3lrprjgZfjgb7jgZlcbiIKKyAgICAgICAgIiAgICAgICAgICAgIGxuIC1zIGNsaWVudC1jYS5wZW0gIGBvcGVuc3NsIHg1MDkgLWluIGNsaWVudC1jYS5wZW0gLWhhc2ggLW5vb3V0YC4wXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTcgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9XT0xGU0VOVFJZX0hPT0tTKSAmJiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChXT0xGU0VOVFJZX05PX0pTT04pCisgICAgICAgICItLXdvbGZzZW50cnktY29uZmlnIDxmaWxlPiAgICB3b2xmU2VudHJ5IOOCs+ODs+ODleOCo+OCsOODleOCoeOCpOODq1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTggKi8KKyNlbmRpZgorI2lmbmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgICItNyAgICAgICAgICDmnIDlsI/jg4Djgqbjg7PjgrDjg6zjg7zjg4nlj6/og73jgarjg5fjg63jg4jjgrPjg6vjg5Djg7zjgrjjg6fjg7PjgpLoqK3lrprjgZfjgb7jgZkgWzAtM10gIgorICAgICAgICAiIFNTTHYzKDApIC0gVExTMS4yKDMpXG4iLAorI2Vsc2UKKyAgICAgICAgIi03ICAgICAgICAgIOacgOWwj+ODgOOCpuODs+OCsOODrOODvOODieWPr+iDveOBquODl+ODreODiOOCs+ODq+ODkOODvOOCuOODp+ODs+OCkuioreWumuOBl+OBvuOBmSBbMC00XSAiCisgICAgICAgICIgU1NMdjMoMCkgLSBUTFMxLjMoNClcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU5ICovCisjZW5kaWYKKyAgICAgICAgTlVMTCwKKyAgICB9LAorI2VuZGlmCit9OworCitzdGF0aWMgdm9pZCBVc2FnZSh2b2lkKQoreworICAgIGludCBtc2dJZCA9IDA7CisgICAgY29uc3QgY2hhcioqIG1zZyA9IHNlcnZlcl91c2FnZV9tc2dbbG5nX2luZGV4XTsKKworICAgIHByaW50ZigiJXMlcyVzIiwgInNlcnZlciAiLCBMSUJXT0xGU1NMX1ZFUlNJT05fU1RSSU5HLAorICAgICAgICAgICBtc2dbbXNnSWRdKTsKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgICAgICAgICAgICAgICAgICAvKiA/ICovCisgICAgcHJpbnRmKCIlcyAlZFxuIiwgbXNnWysrbXNnSWRdLCB3b2xmU1NMUG9ydCk7ICAgLyogLXAgKi8KKyNpZm5kZWYgV09MRlNTTF9UTFMxMworICAgIHByaW50ZigiJXMgJWRcbiIsIG1zZ1srK21zZ0lkXSwgU0VSVkVSX0RFRkFVTFRfVkVSU0lPTik7IC8qIC12ICovCisjZWxzZQorICAgIHByaW50ZigiJXMgJWRcbiIsIG1zZ1srK21zZ0lkXSwgU0VSVkVSX0RFRkFVTFRfVkVSU0lPTik7IC8qIC12ICovCisjZW5kaWYKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC1sICovCisgICAgcHJpbnRmKCIlcyAlc1xuIiwgbXNnWysrbXNnSWRdLCBzdnJDZXJ0RmlsZSk7ICAgIC8qIC1jICovCisgICAgcHJpbnRmKCIlcyAlc1xuIiwgbXNnWysrbXNnSWRdLCBzdnJLZXlGaWxlKTsgICAgIC8qIC1rICovCisgICAgcHJpbnRmKCIlcyAlc1xuIiwgbXNnWysrbXNnSWRdLCBjbGlDZXJ0RmlsZSk7ICAgIC8qIC1BICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtUiAqLworI2lmbmRlZiBOT19ESAorICAgIHByaW50ZigiJXMgJXNcbiIsIG1zZ1srK21zZ0lkXSwgZGhQYXJhbUZpbGUpOyAgICAgICAgICAgLyogLUQgKi8KKyAgICBwcmludGYoIiVzICVkXG4iLCBtc2dbKyttc2dJZF0sIERFRkFVTFRfTUlOX0RIS0VZX0JJVFMpOy8qIC1aICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FMUE4KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC1MICovCisjZW5kaWYKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC1kICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtYiAqLworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLXMgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC11ICovCisjaWZkZWYgV09MRlNTTF9TQ1RQCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtRyAqLworI2VuZGlmCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtZiAqLworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLXIgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC1OICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtUyAqLworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLXcgKi8KKyNpZmRlZiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9OCisgICAgcHJpbnRmKCItTSAgICAgICAgICBBbGxvdyBTZWN1cmUgUmVuZWdvdGlhdGlvblxuIik7CisgICAgcHJpbnRmKCItbSAgICAgICAgICBGb3JjZSBTZXJ2ZXIgSW5pdGlhdGVkIFNlY3VyZSBSZW5lZ290aWF0aW9uXG4iKTsKKyNlbmRpZiAvKiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9OICovCisjaWZkZWYgSEFWRV9PQ1NQCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtbyAqLworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLU8gKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfUEtfQ0FMTEJBQ0tTCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtUCAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9BTk9OCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtYSAqLworI2VuZGlmCisjaWZuZGVmIE5PX1BTSworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLUkgKi8KKyNlbmRpZgorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLXggKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC1pICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtZSAqLworI2lmZGVmIEhBVkVfTlRSVQorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLW4gKi8KKyNlbmRpZgorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLUIgKi8KKyNpZmRlZiBIQVZFX0NSTAorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLVYgKi8KKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfVFJVU1RfUEVFUl9DRVJUCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtRSAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9XTlIKKyAgICBwcmludGYoIiVzICVzXG4iLCBtc2dbKyttc2dJZF0sIHduckNvbmZpZyk7ICAvKiAtcSAqLworI2VuZGlmCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtZyAqLworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLUMgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC1IICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiBtb3JlIC1IIG9wdGlvbnMgKi8KKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtVSAqLworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLUsgKi8KKyNpZm5kZWYgTk9fREgKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC15ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0VDQworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLVkgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfQ1VSVkUyNTUxOQorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLXQgKi8KKyNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfVExTMTMgKi8KKyNpZmRlZiBIQVZFX1NFU1NJT05fVElDS0VUCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtVCAqLworICAgICNpZiAhZGVmaW5lZChXT0xGU1NMX05PX1RMUzEyKSB8fCAhZGVmaW5lZChOT19PTERfVExTKQorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLVQgKi8KKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC1UICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtVCAqLworICAgICNlbmRpZgorI2VuZGlmCisjaWZkZWYgV09MRlNTTF9UTFMxMworICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLUYgKi8KKyNpZmRlZiBXT0xGU1NMX1BPU1RfSEFORFNIQUtFX0FVVEgKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC1RICovCisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1NFTkRfSFJSX0NPT0tJRQorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLUogKi8KKyNlbmRpZgorI2VuZGlmIC8qIFdPTEZTU0xfVExTMTMgKi8KKyNpZmRlZiBXT0xGU1NMX0VBUkxZX0RBVEEKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC0wICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChOT19ESCkgJiYgIWRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkgJiYgIWRlZmluZWQoV09MRlNTTF9PTERfUFJJTUVfQ0hFQ0spCisgICAgcHJpbnRmKCItMiAgICAgICAgICBEaXNhYmxlIERIIFByaW1lIGNoZWNrXG4iKTsKKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfRFRMUworICAgIHByaW50ZigiLTQgPHNlcT4gICAgRFRMUyBmYWtlIHdvdWxkLWJsb2NrIGZvciBtZXNzYWdlIHNlcVxuIik7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX01VTFRJQ0FTVAorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLTMgKi8KKyNlbmRpZgorICAgIHByaW50ZigiJXMiLCBtc2dbKyttc2dJZF0pOyAgICAgLyogLTEgKi8KKyNpZmRlZiBIQVZFX1RSVVNURURfQ0EKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC01ICovCisjZW5kaWYgLyogSEFWRV9UUlVTVEVEX0NBICovCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7ICAgICAvKiAtNiAqLworI2lmZGVmIEhBVkVfQ1VSVkU0NDgKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgICAgIC8qIC04ICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQUxMKSAmJiBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9HRU4pICYmIFwKKyAgICAoZGVmaW5lZChXT0xGU1NMX0NFUlRfUkVRKSB8fCBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9FWFQpKSAmJiBcCisgICAgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgIWRlZmluZWQoTk9fV09MRlNTTF9ESVIpCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7IC8qIC05ICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUykgJiYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgXAorICAgICFkZWZpbmVkKFdPTEZTRU5UUllfTk9fSlNPTikKKyAgICBwcmludGYoIiVzIiwgbXNnWysrbXNnSWRdKTsgLyogLS13b2xmc2VudHJ5LWNvbmZpZyAqLworI2VuZGlmCisgICAgcHJpbnRmKCIlcyIsIG1zZ1srK21zZ0lkXSk7IC8qIC03ICovCit9CisKK1RIUkVBRF9SRVRVUk4gV09MRlNTTF9USFJFQUQgc2VydmVyX3Rlc3Qodm9pZCogYXJncykKK3sKKyAgICBTT0NLRVRfVCBzb2NrZmQgICA9IFdPTEZTU0xfU09DS0VUX0lOVkFMSUQ7CisgICAgU09DS0VUX1QgY2xpZW50ZmQgPSBXT0xGU1NMX1NPQ0tFVF9JTlZBTElEOworICAgIFNPQ0tBRERSX0lOX1QgY2xpZW50X2FkZHI7CisgICAgc29ja2xlbl90IGNsaWVudF9sZW47CisKKyAgICB3b2xmU1NMX21ldGhvZF9mdW5jIG1ldGhvZCA9IE5VTEw7CisgICAgU1NMX0NUWCogICAgY3R4ICAgID0gMDsKKyAgICBTU0wqICAgICAgICBzc2wgICAgPSAwOworI2lmZGVmIFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUworICAgIHdvbGZzZW50cnlfZXJyY29kZV90IHdvbGZzZW50cnlfcmV0OworI2VuZGlmCisgICAgaW50ICAgIG1pblZlcnNpb24gPSBTRVJWRVJfSU5WQUxJRF9WRVJTSU9OOworICAgIGludCAgICB1c2VXZWJTZXJ2ZXJNc2cgPSAwOworICAgIGNoYXIgICBpbnB1dFtTUlZfUkVBRF9TWl07CisjaWZuZGVmIFdPTEZTU0xfVlhXT1JLUworICAgIGludCAgICBjaDsKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IG15Z2V0b3B0X2xvbmdfY29uZmlnIGxvbmdfb3B0aW9uc1tdID0geworI2lmIGRlZmluZWQoV09MRlNTTF9XT0xGU0VOVFJZX0hPT0tTKSAmJiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiBcCisgICAgIWRlZmluZWQoV09MRlNFTlRSWV9OT19KU09OKQorICAgICAgICB7ICJ3b2xmc2VudHJ5LWNvbmZpZyIsIDEsIDI1NiB9LAorI2VuZGlmCisgICAgICAgIHsgImhlbHAiLCAwLCAyNTcgfSwKKyAgICAgICAgeyAi44OY44Or44OXIiwgMCwgMjU4IH0sCisgICAgICAgIHsgMCwgMCwgMCB9CisgICAgfTsKKyNlbmRpZgorICAgIGludCAgICB2ZXJzaW9uID0gU0VSVkVSX0RFRkFVTFRfVkVSU0lPTjsKKyNpZm5kZWYgV09MRlNTTF9OT19DTElFTlRfQVVUSAorICAgIGludCAgICBkb0NsaUNlcnRDaGVjayA9IDE7CisjZWxzZQorICAgIGludCAgICBkb0NsaUNlcnRDaGVjayA9IDA7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0NSTAorICAgIGludCAgICBkaXNhYmxlQ1JMID0gMDsKKyNlbmRpZgorICAgIGludCAgICB1c2VBbnlBZGRyID0gMDsKKyAgICB3b3JkMTYgcG9ydCA9IHdvbGZTU0xQb3J0OworICAgIGludCAgICB1c2VQc2sgPSAwOworICAgIGludCAgICB1c2VQc2tQbHVzID0gMDsKKyAgICBpbnQgICAgdXNlQW5vbiA9IDA7CisgICAgaW50ICAgIGRvRFRMUyA9IDA7CisgICAgaW50ICAgIGR0bHNVRFAgPSAwOworI2lmIChkZWZpbmVkKFdPTEZTU0xfU0NUUCkgfHwgZGVmaW5lZChXT0xGU1NMX0RUTFNfTVRVKSkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKFdPTEZTU0xfRFRMUykKKyAgICBpbnQgICAgZHRsc01UVSA9IDA7CisjZW5kaWYKKyAgICBpbnQgICAgZHRsc1NDVFAgPSAwOworICAgIGludCAgICBkb01jYXN0ID0gMDsKKyNpZiBkZWZpbmVkKFdPTEZTU0xfRFRMUykgJiYgZGVmaW5lZChVU0VfV09MRlNTTF9JTykKKyAgICBpbnQgICAgZG9CbG9ja1NlcSA9IDA7CisgICAgV09MRlNTTF9URVNUX0RUTFNfQ1RYIGR0bHNDdHg7CisjZW5kaWYKKyAgICBpbnQgICAgbmVlZERIID0gMDsKKyAgICBpbnQgICAgdXNlTnRydUtleSAgID0gMDsKKyAgICBpbnQgICAgbm9uQmxvY2tpbmcgID0gMDsKKyAgICBpbnQgICAgc2ltdWxhdGVXYW50V3JpdGUgPSAwOworICAgIGludCAgICBmZXdlclBhY2tldHMgPSAwOworI2lmZGVmIEhBVkVfUEtfQ0FMTEJBQ0tTCisgICAgaW50ICAgIHBrQ2FsbGJhY2tzICA9IDA7CisgICAgUGtDYkluZm8gcGtDYkluZm87CisjZW5kaWYKKyAgICBpbnQgICAgd2Nfc2h1dGRvd24gICAgID0gMDsKKyAgICBpbnQgICAgcmVzdW1lID0gMDsKKyAgICBpbnQgICAgcmVzdW1lQ291bnQgPSAwOworICAgIGludCAgICBsb29wcyA9IDE7CisgICAgaW50ICAgIGNudCA9IDA7CisgICAgaW50ICAgIGVjaG9EYXRhID0gMDsKKyAgICBpbnQgICAgYmxvY2sgPSBURVNUX0JVRkZFUl9TSVpFOworICAgIHNpemVfdCB0aHJvdWdocHV0ID0gMDsKKyAgICBpbnQgICAgbWluRGhLZXlCaXRzICA9IERFRkFVTFRfTUlOX0RIS0VZX0JJVFM7CisgICAgc2hvcnQgIG1pblJzYUtleUJpdHMgPSBERUZBVUxUX01JTl9SU0FLRVlfQklUUzsKKyAgICBzaG9ydCAgbWluRWNjS2V5Qml0cyA9IERFRkFVTFRfTUlOX0VDQ0tFWV9CSVRTOworICAgIGludCAgICBkb0xpc3RlbiA9IDE7CisgICAgaW50ICAgIGNybEZsYWdzID0gMDsKKyAgICBpbnQgICAgcmV0OworICAgIGludCAgICBlcnIgPSAwOworICAgIGNoYXIqICBzZXJ2ZXJSZWFkeUZpbGUgPSBOVUxMOworICAgIGNoYXIqICBhbHBuTGlzdCA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciBhbHBuX29wdCA9IDA7CisgICAgY2hhciogIGNpcGhlckxpc3QgPSBOVUxMOworICAgIGludCAgICB1c2VEZWZDaXBoZXJMaXN0ID0gMDsKKyAgICBjb25zdCBjaGFyKiB2ZXJpZnlDZXJ0OworICAgIGNvbnN0IGNoYXIqIG91ckNlcnQ7CisgICAgY29uc3QgY2hhciogb3VyS2V5OworICAgIGNvbnN0IGNoYXIqIG91ckRoUGFyYW0gPSBkaFBhcmFtRmlsZTsKKyAgICB0Y3BfcmVhZHkqICByZWFkeVNpZ25hbCA9IE5VTEw7CisgICAgaW50ICAgIGFyZ2MgPSAoKGZ1bmNfYXJncyopYXJncyktPmFyZ2M7CisgICAgY2hhcioqIGFyZ3YgPSAoKGZ1bmNfYXJncyopYXJncyktPmFyZ3Y7CisKKyNpZmRlZiBXT0xGU1NMX1RSVVNUX1BFRVJfQ0VSVAorICAgIGNvbnN0IGNoYXIqIHRydXN0Q2VydCAgPSBOVUxMOworI2VuZGlmCisKKyNpZm5kZWYgTk9fUFNLCisgICAgaW50IHNlbmRQc2tJZGVudGl0eUhpbnQgPSAxOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NOSQorICAgIGNoYXIqICBzbmlIb3N0TmFtZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVFJVU1RFRF9DQQorICAgIGludCB0cnVzdGVkQ2FLZXlJZCA9IDA7CisjZW5kaWYgLyogSEFWRV9UUlVTVEVEX0NBICovCisKKyNpZmRlZiBIQVZFX09DU1AKKyAgICBpbnQgICAgdXNlT2NzcCAgPSAwOworICAgIGNoYXIqICBvY3NwVXJsICA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfV05SCisgICAgY29uc3QgY2hhciogd25yQ29uZmlnRmlsZSA9IHduckNvbmZpZzsKKyNlbmRpZgorICAgIGNoYXIgYnVmZmVyW1dPTEZTU0xfTUFYX0VSUk9SX1NaXTsKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgaW50IG5vUHNrRGhlS2UgPSAwOworI2VuZGlmCisgICAgaW50IHVwZGF0ZUtleXNJVnMgPSAwOworI2lmbmRlZiBOT19DRVJUUworICAgIGludCBtdXR1YWxBdXRoID0gMDsKKyNlbmRpZgorICAgIGludCBwb3N0SGFuZEF1dGggPSAwOworI2lmZGVmIFdPTEZTU0xfRUFSTFlfREFUQQorICAgIGludCBlYXJseURhdGEgPSAwOworI2VuZGlmCisjaWZkZWYgSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTgorICAgIGludCBzY3IgPSAwOworICAgIGludCBmb3JjZVNjciA9IDA7CisjZW5kaWYgLyogSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTiAqLworI2lmZGVmIFdPTEZTU0xfU0VORF9IUlJfQ09PS0lFCisgICAgaW50IGhyckNvb2tpZSA9IDA7CisjZW5kaWYKKyAgICBieXRlIG1jYXN0SUQgPSAwOworI2lmICFkZWZpbmVkKE5PX0RIKSAmJiAhZGVmaW5lZChIQVZFX0ZJUFMpICYmIFwKKyAgICAhZGVmaW5lZChIQVZFX1NFTEZURVNUKSAmJiAhZGVmaW5lZChXT0xGU1NMX09MRF9QUklNRV9DSEVDSykKKyAgICBpbnQgZG9EaEtleUNoZWNrID0gMTsKKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9TVEFUSUNfTUVNT1JZCisgICAgI2lmIChkZWZpbmVkKEhBVkVfRUNDKSAmJiAhZGVmaW5lZChBTFRfRUNDX1NJWkUpKSBcCisgICAgICAgIHx8IGRlZmluZWQoU0VTU0lPTl9DRVJUUykKKyAgICAgICAgLyogYmlnIGVub3VnaCB0byBoYW5kbGUgbW9zdCBjYXNlcyBpbmNsdWRpbmcgc2Vzc2lvbiBjZXJ0cyAqLworICAgICAgICBieXRlIG1lbW9yeVsyMzk5MzZdOworICAgICNlbHNlCisgICAgICAgIGJ5dGUgbWVtb3J5WzgwMDAwXTsKKyAgICAjZW5kaWYKKyAgICBieXRlIG1lbW9yeUlPWzM0NTAwXTsgLyogbWF4IGZvciBJTyBidWZmZXIgKFRMUyBwYWNrZXQgY2FuIGJlIDE2aykgKi8KKyAgICBXT0xGU1NMX01FTV9DT05OX1NUQVRTIHNzbF9zdGF0czsKKyAgICAjaWZkZWYgREVCVUdfV09MRlNTTAorICAgICAgICBXT0xGU1NMX01FTV9TVEFUUyBtZW1fc3RhdHM7CisgICAgI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIGRlZmluZWQoSEFWRV9TVVBQT1JURURfQ1VSVkVTKQorICAgIGludCBvbmx5S2V5U2hhcmUgPSAwOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX1NFU1NJT05fVElDS0VUKQorI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICBpbnQgbm9UaWNrZXRUbHMxMyA9IDA7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChXT0xGU1NMX05PX1RMUzEyKSB8fCAhZGVmaW5lZChOT19PTERfVExTKQorICAgIGludCBub1RpY2tldFRsczEyID0gMDsKKyNlbmRpZgorI2VuZGlmCisgICAgaW50IHVzZVgyNTUxOSA9IDA7CisgICAgaW50IHVzZVg0NDggPSAwOworICAgIGludCBleGl0V2l0aFJldCA9IDA7CisgICAgaW50IGxvYWRDZXJ0S2V5SW50b1NTTE9iaiA9IDA7CisKKyNpZmRlZiBIQVZFX0VOQ1JZUFRfVEhFTl9NQUMKKyAgICBpbnQgZGlzYWxsb3dFVE0gPSAwOworI2VuZGlmCisjaWYgZGVmaW5lZChPUEVOU1NMX0FMTCkgJiYgZGVmaW5lZChXT0xGU1NMX0NFUlRfR0VOKSAmJiBcCisgICAgKGRlZmluZWQoV09MRlNTTF9DRVJUX1JFUSkgfHwgZGVmaW5lZChXT0xGU1NMX0NFUlRfRVhUKSkgJiYgXAorICAgICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKE5PX1dPTEZTU0xfRElSKQorICAgIGludCB1c2VDZXJ0Rm9sZGVyID0gMDsKKyNlbmRpZgorCisgICAgKChmdW5jX2FyZ3MqKWFyZ3MpLT5yZXR1cm5fY29kZSA9IC0xOyAvKiBlcnJvciBzdGF0ZSAqLworCisjaWZuZGVmIE5PX1JTQQorICAgIHZlcmlmeUNlcnQgPSBjbGlDZXJ0RmlsZTsKKyAgICBvdXJDZXJ0ICAgID0gc3ZyQ2VydEZpbGU7CisgICAgb3VyS2V5ICAgICA9IHN2cktleUZpbGU7CisjZWxzZQorICAgICNpZmRlZiBIQVZFX0VDQworICAgICAgICB2ZXJpZnlDZXJ0ID0gY2xpRWNjQ2VydEZpbGU7CisgICAgICAgIG91ckNlcnQgICAgPSBlY2NDZXJ0RmlsZTsKKyAgICAgICAgb3VyS2V5ICAgICA9IGVjY0tleUZpbGU7CisgICAgI2VsaWYgZGVmaW5lZChIQVZFX0VEMjU1MTkpCisgICAgICAgIHZlcmlmeUNlcnQgPSBjbGlFZENlcnRGaWxlOworICAgICAgICBvdXJDZXJ0ICAgID0gZWRDZXJ0RmlsZTsKKyAgICAgICAgb3VyS2V5ICAgICA9IGVkS2V5RmlsZTsKKyAgICAjZWxpZiBkZWZpbmVkKEhBVkVfRUQ0NDgpCisgICAgICAgIHZlcmlmeUNlcnQgPSBjbGlFZDQ0OENlcnRGaWxlOworICAgICAgICBvdXJDZXJ0ICAgID0gZWQ0NDhDZXJ0RmlsZTsKKyAgICAgICAgb3VyS2V5ICAgICA9IGVkNDQ4S2V5RmlsZTsKKyAgICAjZWxzZQorICAgICAgICB2ZXJpZnlDZXJ0ID0gTlVMTDsKKyAgICAgICAgb3VyQ2VydCAgICA9IE5VTEw7CisgICAgICAgIG91cktleSAgICAgPSBOVUxMOworICAgICNlbmRpZgorI2VuZGlmCisKKyAgICAodm9pZCluZWVkREg7CisgICAgKHZvaWQpb3VyS2V5OworICAgICh2b2lkKW91ckNlcnQ7CisgICAgKHZvaWQpb3VyRGhQYXJhbTsKKyAgICAodm9pZCl2ZXJpZnlDZXJ0OworICAgICh2b2lkKXVzZU50cnVLZXk7CisgICAgKHZvaWQpZG9DbGlDZXJ0Q2hlY2s7CisgICAgKHZvaWQpbWluRGhLZXlCaXRzOworICAgICh2b2lkKW1pblJzYUtleUJpdHM7CisgICAgKHZvaWQpbWluRWNjS2V5Qml0czsKKyAgICAodm9pZClhbHBuTGlzdDsKKyAgICAodm9pZClhbHBuX29wdDsKKyAgICAodm9pZCljcmxGbGFnczsKKyAgICAodm9pZClyZWFkeVNpZ25hbDsKKyAgICAodm9pZCl1cGRhdGVLZXlzSVZzOworI2lmbmRlZiBOT19DRVJUUworICAgICh2b2lkKW11dHVhbEF1dGg7CisjZW5kaWYKKyAgICAodm9pZClwb3N0SGFuZEF1dGg7CisgICAgKHZvaWQpbWNhc3RJRDsKKyAgICAodm9pZClsb2FkQ2VydEtleUludG9TU0xPYmo7CisgICAgKHZvaWQpbm9uQmxvY2tpbmc7CisKKyNpZmRlZiBXT0xGU1NMX1RJUlRPUworICAgIGZkT3BlblNlc3Npb24oVGFza19zZWxmKCkpOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX1ZYV09SS1MKKyAgICB1c2VBbnlBZGRyID0gMTsKKyNlbHNlCisKKyAgICAvKiBSZWluaXRpYWxpemUgdGhlIGdsb2JhbCBteVZlcmlmeUFjdGlvbi4gKi8KKyAgICBteVZlcmlmeUFjdGlvbiA9IFZFUklGWV9PVkVSUklERV9FUlJPUjsKKworICAgIC8qIE5vdCBVc2VkOiBoLCB6LCBXLCBYLCA3ICovCisgICAgd2hpbGUgKChjaCA9IG15Z2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIj86IgorICAgICAgICAgICAgICAgICJhYmM6ZGVmZ2lqazpsOm1ub3A6cTpyc3R1O3Y6d3h5IgorICAgICAgICAgICAgICAgICJBOkI6QzpEOkU6RkdIOklKS0w6TU5POlBRUjpTOlQ7VVZZWjoiCisgICAgICAgICAgICAgICAgIjAxOjIzOjQ6NTY4OSIKKyAgICAgICAgICAgICAgICAiQCMiLCBsb25nX29wdGlvbnMsIDApKSAhPSAtMSkgeworICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAgICBjYXNlICc/JyA6CisgICAgICAgICAgICAgICAgaWYobXlvcHRhcmchPU5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgbG5nX2luZGV4ID0gYXRvaShteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGlmKGxuZ19pbmRleDwwfHxsbmdfaW5kZXg+MSl7CisgICAgICAgICAgICAgICAgICAgICAgICBsbmdfaW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFVzYWdlKCk7CisgICAgICAgICAgICAgICAgWEVYSVRfVChFWElUX1NVQ0NFU1MpOworCisgICAgICAgICAgICBjYXNlIDI1NyA6CisgICAgICAgICAgICAgICAgbG5nX2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBVc2FnZSgpOworICAgICAgICAgICAgICAgIFhFWElUX1QoRVhJVF9TVUNDRVNTKTsKKworICAgICAgICAgICAgY2FzZSAyNTggOgorICAgICAgICAgICAgICAgIGxuZ19pbmRleCA9IDE7CisgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICBYRVhJVF9UKEVYSVRfU1VDQ0VTUyk7CisKKyAgICAgICAgICAgIGNhc2UgJ3gnIDoKKyAgICAgICAgICAgICAgICBydW5XaXRoRXJyb3JzID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnZCcgOgorICAgICAgICAgICAgICAgIGRvQ2xpQ2VydENoZWNrID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnVicgOgorICAgICAgICAgICAgICAgICNpZmRlZiBIQVZFX0NSTAorICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ1JMID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnYicgOgorICAgICAgICAgICAgICAgIHVzZUFueUFkZHIgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdzJyA6CisgICAgICAgICAgICAgICAgdXNlUHNrID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnaicgOgorICAgICAgICAgICAgICAgIHVzZVBza1BsdXMgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICduJyA6CisgICAgICAgICAgICAgICAgdXNlTnRydUtleSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3UnIDoKKyAgICAgICAgICAgICAgICBkb0RUTFMgID0gMTsKKyAgICAgICAgICAgICAgICBkdGxzVURQID0gMTsKKyAgICAgICAgICAgICNpZiAoZGVmaW5lZChXT0xGU1NMX1NDVFApIHx8IGRlZmluZWQoV09MRlNTTF9EVExTX01UVSkpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZChXT0xGU1NMX0RUTFMpCisgICAgICAgICAgICAgICAgZHRsc01UVSA9IGF0b2kobXlvcHRhcmcpOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ0cnIDoKKyAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX1NDVFAKKyAgICAgICAgICAgICAgICBkb0RUTFMgID0gMTsKKyAgICAgICAgICAgICAgICBkdGxzU0NUUCA9IDE7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnZicgOgorICAgICAgICAgICAgICAgIGZld2VyUGFja2V0cyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1InIDoKKyAgICAgICAgICAgICAgICBzZXJ2ZXJSZWFkeUZpbGUgPSBteW9wdGFyZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAncicgOgorICAgICAgICAgICAgICAgICNpZm5kZWYgTk9fU0VTU0lPTl9DQUNIRQorICAgICAgICAgICAgICAgICAgICByZXN1bWUgPSAxOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdQJyA6CisgICAgICAgICAgICAjaWZkZWYgSEFWRV9QS19DQUxMQkFDS1MKKyAgICAgICAgICAgICAgICBwa0NhbGxiYWNrcyA9IDE7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAncCcgOgorICAgICAgICAgICAgICAgIHBvcnQgPSAod29yZDE2KWF0b2kobXlvcHRhcmcpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICd3JyA6CisgICAgICAgICAgICAgICAgd2Nfc2h1dGRvd24gPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICd2JyA6CisgICAgICAgICAgICAgICAgaWYgKG15b3B0YXJnWzBdID09ICdkJykgeworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gU0VSVkVSX0RPV05HUkFERV9WRVJTSU9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKFdPTEZTU0xfRUlUSEVSX1NJREUpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAobXlvcHRhcmdbMF0gPT0gJ2UnKSB7CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBFSVRIRVJfRE9XTkdSQURFX1ZFUlNJT047CisgICAgICAgICAgICAgICAgI2lmbmRlZiBOT19DRVJUUworICAgICAgICAgICAgICAgICAgICBsb2FkQ2VydEtleUludG9TU0xPYmogPSAxOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gYXRvaShteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPCAwIHx8IHZlcnNpb24gPiA0KSB7CisgICAgICAgICAgICAgICAgICAgIFVzYWdlKCk7CisgICAgICAgICAgICAgICAgICAgIFhFWElUX1QoTVlfRVhfVVNBR0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnbCcgOgorICAgICAgICAgICAgICAgIGNpcGhlckxpc3QgPSBteW9wdGFyZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnSCcgOgorICAgICAgICAgICAgICAgIGlmIChYU1RSTkNNUChteW9wdGFyZywgImRlZkNpcGhlckxpc3QiLCAxMykgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlVzaW5nIGRlZmF1bHQgY2lwaGVyIGxpc3QgZm9yIHRlc3RpbmdcbiIpOworICAgICAgICAgICAgICAgICAgICB1c2VEZWZDaXBoZXJMaXN0ID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoWFNUUk5DTVAobXlvcHRhcmcsICJleGl0V2l0aFJldCIsIDExKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU2tpcCBleGl0KCkgZm9yIHRlc3RpbmdcbiIpOworICAgICAgICAgICAgICAgICAgICBleGl0V2l0aFJldCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFhTVFJOQ01QKG15b3B0YXJnLCAidmVyaWZ5RmFpbCIsIDEwKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiVmVyaWZ5IHNob3VsZCBmYWlsXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbXlWZXJpZnlBY3Rpb24gPSBWRVJJRllfRk9SQ0VfRkFJTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoWFNUUk5DTVAobXlvcHRhcmcsICJ2ZXJpZnlJbmZvIiwgMTApID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJWZXJpZnkgc2hvdWxkIHVzZSBwcmV2ZXJpZnkgKGp1c3Qgc2hvdyBpbmZvKVxuIik7CisgICAgICAgICAgICAgICAgICAgIG15VmVyaWZ5QWN0aW9uID0gVkVSSUZZX1VTRV9QUkVWRVJGSVk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFhTVFJOQ01QKG15b3B0YXJnLCAibG9hZFNTTCIsIDcpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBbHNvIGxvYWQgY2VydC9rZXkgaW50byB3b2xmU1NMIG9iamVjdFxuIik7CisgICAgICAgICAgICAgICAgI2lmbmRlZiBOT19DRVJUUworICAgICAgICAgICAgICAgICAgICBsb2FkQ2VydEtleUludG9TU0xPYmogPSAyOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChYU1RSTkNNUChteW9wdGFyZywgImxvYWRTU0xPbmx5IiwgMTEpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJPbmx5IGxvYWQgY2VydC9rZXkgaW50byB3b2xmU1NMIG9iamVjdFxuIik7CisgICAgICAgICAgICAgICAgI2lmbmRlZiBOT19DRVJUUworICAgICAgICAgICAgICAgICAgICBsb2FkQ2VydEtleUludG9TU0xPYmogPSAxOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChYU1RSTkNNUChteW9wdGFyZywgImRpc2FsbG93RVRNIiwgMTEpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJEaXNhbGxvdyBFbmNyeXB0LVRoZW4tTUFDXG4iKTsKKyAgICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9FTkNSWVBUX1RIRU5fTUFDCisgICAgICAgICAgICAgICAgICAgIGRpc2FsbG93RVRNID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoWFNUUk5DTVAobXlvcHRhcmcsICJvdmVycmlkZURhdGVFcnIiLCAxNSkgPT0gMCkgeworICAgICAgICAgICAgICAgICNpZiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19DRVJUUykKKyAgICAgICAgICAgICAgICAgICAgbXlWZXJpZnlBY3Rpb24gPSBWRVJJRllfT1ZFUlJJREVfREFURV9FUlI7CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBVc2FnZSgpOworICAgICAgICAgICAgICAgICAgICBYRVhJVF9UKE1ZX0VYX1VTQUdFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ0EnIDoKKyAgICAgICAgICAgICAgICB2ZXJpZnlDZXJ0ID0gbXlvcHRhcmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2MnIDoKKyAgICAgICAgICAgICAgICBvdXJDZXJ0ID0gbXlvcHRhcmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2snIDoKKyAgICAgICAgICAgICAgICBvdXJLZXkgPSBteW9wdGFyZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnRCcgOgorICAgICAgICAgICAgICAgICNpZm5kZWYgTk9fREgKKyAgICAgICAgICAgICAgICAgICAgb3VyRGhQYXJhbSA9IG15b3B0YXJnOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdaJyA6CisgICAgICAgICAgICAgICAgI2lmbmRlZiBOT19ESAorICAgICAgICAgICAgICAgICAgICBtaW5EaEtleUJpdHMgPSBhdG9pKG15b3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1pbkRoS2V5Qml0cyA8PSAwIHx8IG1pbkRoS2V5Qml0cyA+IDE2MDAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBVc2FnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgWEVYSVRfVChNWV9FWF9VU0FHRSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnTic6CisgICAgICAgICAgICAgICAgbm9uQmxvY2tpbmcgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdTJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfU05JCisgICAgICAgICAgICAgICAgICAgIHNuaUhvc3ROYW1lID0gbXlvcHRhcmc7CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ28nIDoKKyAgICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9PQ1NQCisgICAgICAgICAgICAgICAgICAgIHVzZU9jc3AgPSAxOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdPJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfT0NTUAorICAgICAgICAgICAgICAgICAgICB1c2VPY3NwID0gMTsKKyAgICAgICAgICAgICAgICAgICAgb2NzcFVybCA9IG15b3B0YXJnOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdhJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfQU5PTgorICAgICAgICAgICAgICAgICAgICB1c2VBbm9uID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ0knOgorICAgICAgICAgICAgICAgICNpZm5kZWYgTk9fUFNLCisgICAgICAgICAgICAgICAgICAgIHNlbmRQc2tJZGVudGl0eUhpbnQgPSAwOworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdMJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfQUxQTgorICAgICAgICAgICAgICAgICAgICBhbHBuTGlzdCA9IG15b3B0YXJnOworCisgICAgICAgICAgICAgICAgICAgIGlmIChhbHBuTGlzdFswXSA9PSAnQycgJiYgYWxwbkxpc3RbMV0gPT0gJzonKQorICAgICAgICAgICAgICAgICAgICAgICAgYWxwbl9vcHQgPSBXT0xGU1NMX0FMUE5fQ09OVElOVUVfT05fTUlTTUFUQ0g7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFscG5MaXN0WzBdID09ICdGJyAmJiBhbHBuTGlzdFsxXSA9PSAnOicpCisgICAgICAgICAgICAgICAgICAgICAgICBhbHBuX29wdCA9IFdPTEZTU0xfQUxQTl9GQUlMRURfT05fTUlTTUFUQ0g7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFhFWElUX1QoTVlfRVhfVVNBR0UpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYWxwbkxpc3QgKz0gMjsKKworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdpJyA6CisgICAgICAgICAgICAgICAgbG9vcHMgPSAtMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnQycgOgorICAgICAgICAgICAgICAgIGxvb3BzID0gYXRvaShteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgaWYgKGxvb3BzIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgWEVYSVRfVChNWV9FWF9VU0FHRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdlJyA6CisgICAgICAgICAgICAgICAgZWNob0RhdGEgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdCJzoKKyAgICAgICAgICAgICAgICB0aHJvdWdocHV0ID0gYXRvbChteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgZm9yICg7ICpteW9wdGFyZyAhPSAnXDAnOyBteW9wdGFyZysrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqbXlvcHRhcmcgPT0gJywnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBibG9jayA9IGF0b2kobXlvcHRhcmcgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aHJvdWdocHV0ID09IDAgfHwgYmxvY2sgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICBVc2FnZSgpOworICAgICAgICAgICAgICAgICAgICBYRVhJVF9UKE1ZX0VYX1VTQUdFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX1RSVVNUX1BFRVJfQ0VSVAorICAgICAgICAgICAgY2FzZSAnRScgOgorICAgICAgICAgICAgICAgICB0cnVzdENlcnQgPSBteW9wdGFyZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICBjYXNlICdxJyA6CisgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfV05SCisgICAgICAgICAgICAgICAgICAgIHduckNvbmZpZ0ZpbGUgPSBteW9wdGFyZzsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnZycgOgorICAgICAgICAgICAgICAgIHVzZVdlYlNlcnZlck1zZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3knIDoKKyAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBkZWZpbmVkKEhBVkVfU1VQUE9SVEVEX0NVUlZFUykgXAorICAgICAgICAgICAgICAgICAgICAmJiAhZGVmaW5lZChOT19ESCkKKyAgICAgICAgICAgICAgICAgICAgb25seUtleVNoYXJlID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnWScgOgorICAgICAgICAgICAgICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIGRlZmluZWQoSEFWRV9TVVBQT1JURURfQ1VSVkVTKSBcCisgICAgICAgICAgICAgICAgICAgICYmIGRlZmluZWQoSEFWRV9FQ0MpCisgICAgICAgICAgICAgICAgICAgIG9ubHlLZXlTaGFyZSA9IDI7CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3QnIDoKKyAgICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9DVVJWRTI1NTE5CisgICAgICAgICAgICAgICAgICAgIHVzZVgyNTUxOSA9IDE7CisgICAgICAgICAgICAgICAgICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpICYmIGRlZmluZWQoSEFWRV9TVVBQT1JURURfQ1VSVkVTKQorICAgICAgICAgICAgICAgICAgICAgICAgb25seUtleVNoYXJlID0gMjsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ0snIDoKKyAgICAgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9UTFMxMworICAgICAgICAgICAgICAgICAgICBub1Bza0RoZUtlID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnVCcgOgorICAgICAgICAgICAgICAgICNpZiBkZWZpbmVkKEhBVkVfU0VTU0lPTl9USUNLRVQpCisgICAgICAgICAgICAgICAgICAgIGlmIChYU1RSTEVOKG15b3B0YXJnKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpCisgICAgICAgICAgICAgICAgICAgICAgICBub1RpY2tldFRsczEzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAjaWYgIWRlZmluZWQoV09MRlNTTF9OT19UTFMxMikgfHwgIWRlZmluZWQoTk9fT0xEX1RMUykKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoWFNUUk5DTVAobXlvcHRhcmcsICJhIiwgMikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9UaWNrZXRUbHMxMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpCisgICAgICAgICAgICAgICAgICAgICAgICBub1RpY2tldFRsczEzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoWFNUUk5DTVAobXlvcHRhcmcsICJvIiwgMikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9UaWNrZXRUbHMxMiA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoWFNUUk5DTVAobXlvcHRhcmcsICJuIiwgMikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9UaWNrZXRUbHMxMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFhFWElUX1QoTVlfRVhfVVNBR0UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1UnIDoKKyAgICAgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9UTFMxMworICAgICAgICAgICAgICAgICAgICB1cGRhdGVLZXlzSVZzID0gMTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAjaWZuZGVmIE5PX0NFUlRTCisgICAgICAgICAgICBjYXNlICdGJyA6CisgICAgICAgICAgICAgICAgbXV0dWFsQXV0aCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICBjYXNlICdRJyA6CisgICAgICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBkZWZpbmVkKFdPTEZTU0xfUE9TVF9IQU5EU0hBS0VfQVVUSCkKKyAgICAgICAgICAgICAgICBwb3N0SGFuZEF1dGggPSAxOworICAgICAgICAgICAgICAgIGRvQ2xpQ2VydENoZWNrID0gMDsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdKJyA6CisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9TRU5EX0hSUl9DT09LSUUKKyAgICAgICAgICAgICAgICBocnJDb29raWUgPSAxOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ00nIDoKKyAgICAgICAgICAgICNpZmRlZiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9OCisgICAgICAgICAgICAgICAgc2NyID0gMTsKKyAgICAgICAgICAgICNlbmRpZiAvKiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9OICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ20nIDoKKyAgICAgICAgICAgICNpZmRlZiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9OCisgICAgICAgICAgICAgICAgc2NyID0gMTsKKyAgICAgICAgICAgICAgICBmb3JjZVNjciA9IDE7CisgICAgICAgICAgICAjZW5kaWYgLyogSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTiAqLworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICcwJyA6CisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9FQVJMWV9EQVRBCisgICAgICAgICAgICAgICAgZWFybHlEYXRhID0gMTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICcxJyA6CisgICAgICAgICAgICAgICAgbG5nX2luZGV4ID0gYXRvaShteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgaWYobG5nX2luZGV4PDB8fGxuZ19pbmRleD4xKXsKKyAgICAgICAgICAgICAgICAgICAgbG5nX2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJzInIDoKKyAgICAgICAgICAgICAgICNpZiAhZGVmaW5lZChOT19ESCkgJiYgIWRlZmluZWQoSEFWRV9GSVBTKSAmJiBcCisgICAgICAgICAgICAgICAgICAgIWRlZmluZWQoSEFWRV9TRUxGVEVTVCkgJiYgIWRlZmluZWQoV09MRlNTTF9PTERfUFJJTUVfQ0hFQ0spCisgICAgICAgICAgICAgICAgICAgIGRvRGhLZXlDaGVjayA9IDA7CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJzMnIDoKKyAgICAgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9NVUxUSUNBU1QKKyAgICAgICAgICAgICAgICAgICAgZG9NY2FzdCA9IDE7CisgICAgICAgICAgICAgICAgICAgIG1jYXN0SUQgPSAoYnl0ZSkoYXRvaShteW9wdGFyZykgJiAweEZGKTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnNCcgOgorICAgICAgICAgICAgICAgICNpZiBkZWZpbmVkKFdPTEZTU0xfRFRMUykgJiYgZGVmaW5lZChVU0VfV09MRlNTTF9JTykKKyAgICAgICAgICAgICAgICAgICAgWE1FTVNFVCgmZHRsc0N0eCwgMCwgc2l6ZW9mKGR0bHNDdHgpKTsKKyAgICAgICAgICAgICAgICAgICAgZG9CbG9ja1NlcSA9IDE7CisgICAgICAgICAgICAgICAgICAgIGR0bHNDdHguYmxvY2tTZXEgPSBhdG9pKG15b3B0YXJnKTsKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJzUnIDoKKyAgICAgICAgICAgICNpZmRlZiBIQVZFX1RSVVNURURfQ0EKKyAgICAgICAgICAgICAgICB0cnVzdGVkQ2FLZXlJZCA9IDE7CisgICAgICAgICAgICAjZW5kaWYgLyogSEFWRV9UUlVTVEVEX0NBICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJzYnIDoKKyAgICAgICAgICAgICAgICBub25CbG9ja2luZyA9IDE7CisgICAgICAgICAgICAgICAgc2ltdWxhdGVXYW50V3JpdGUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnNycgOgorICAgICAgICAgICAgICAgIG1pblZlcnNpb24gPSBhdG9pKG15b3B0YXJnKTsKKyAgICAgICAgICAgICAgICBpZiAobWluVmVyc2lvbiA8IDAgfHwgbWluVmVyc2lvbiA+IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgWEVYSVRfVChNWV9FWF9VU0FHRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnOCcgOgorICAgICAgICAgICAgICAgICNpZmRlZiBIQVZFX0NVUlZFNDQ4CisgICAgICAgICAgICAgICAgICAgIHVzZVg0NDggPSAxOworICAgICAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBkZWZpbmVkKEhBVkVfU1VQUE9SVEVEX0NVUlZFUykKKyAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlLZXlTaGFyZSA9IDI7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnOScgOgorI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpICYmIGRlZmluZWQoV09MRlNTTF9DRVJUX0dFTikgJiYgXAorICAgIChkZWZpbmVkKFdPTEZTU0xfQ0VSVF9SRVEpIHx8IGRlZmluZWQoV09MRlNTTF9DRVJUX0VYVCkpICYmIFwKKyAgICAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX0RJUikKKyAgICAgICAgICAgICAgICAgICAgdXNlQ2VydEZvbGRlciA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICBjYXNlICdAJyA6CisgICAgICAgICAgICB7CisjaWZkZWYgSEFWRV9XQ19JTlRST1NQRUNUSU9OCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29uZl9hcmdzID0gd29sZlNTTF9jb25maWd1cmVfYXJncygpOworICAgICAgICAgICAgICAgIGlmIChjb25mX2FyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgcHV0cyhjb25mX2FyZ3MpOworICAgICAgICAgICAgICAgICAgICBYRVhJVF9UKEVYSVRfU1VDQ0VTUyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZnB1dHMoImNvbmZpZ3VyZSBhcmdzIG5vdCBjb21waWxlZCBpbi5cbiIsc3RkZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgWEVYSVRfVChNWV9FWF9VU0FHRSk7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICBmcHV0cygiY29tcGlsZWQgd2l0aG91dCBCVUlMRF9JTlRST1NQRUNUSU9OLlxuIixzdGRlcnIpOworICAgICAgICAgICAgICAgIFhFWElUX1QoTVlfRVhfVVNBR0UpOworI2VuZGlmCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgJyMnIDoKKyAgICAgICAgICAgIHsKKyNpZmRlZiBIQVZFX1dDX0lOVFJPU1BFQ1RJT04KKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjZmxhZ3MgPSB3b2xmU1NMX2dsb2JhbF9jZmxhZ3MoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ZsYWdzKSB7CisgICAgICAgICAgICAgICAgICAgIHB1dHMoY2ZsYWdzKTsKKyAgICAgICAgICAgICAgICAgICAgWEVYSVRfVChFWElUX1NVQ0NFU1MpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwdXRzKCJDRkxBR1Mgbm90IGNvbXBpbGVkIGluLlxuIixzdGRlcnIpOworICAgICAgICAgICAgICAgICAgICBYRVhJVF9UKE1ZX0VYX1VTQUdFKTsKKyAgICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgIGZwdXRzKCJjb21waWxlZCB3aXRob3V0IEJVSUxEX0lOVFJPU1BFQ1RJT04uXG4iLHN0ZGVycik7CisgICAgICAgICAgICAgICAgWEVYSVRfVChNWV9FWF9VU0FHRSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKworI2lmZGVmIFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUworICAgICAgICAgICAgY2FzZSAyNTY6CisjaWYgIWRlZmluZWQoTk9fRklMRVNZU1RFTSkgJiYgIWRlZmluZWQoV09MRlNFTlRSWV9OT19KU09OKQorICAgICAgICAgICAgICAgIHdvbGZzZW50cnlfY29uZmlnX3BhdGggPSBteW9wdGFyZzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICBYRVhJVF9UKE1ZX0VYX1VTQUdFKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG15b3B0aW5kID0gMDsgICAgICAvKiByZXNldCBmb3IgdGVzdCBjYXNlcyAqLworI2VuZGlmIC8qICFXT0xGU1NMX1ZYV09SS1MgKi8KKworICAgIC8qIENhbiBvbmx5IHVzZSBEVExTIG92ZXIgVURQIG9yIFNDVFAsIGNhbid0IGRvIGJvdGguICovCisgICAgaWYgKGR0bHNVRFAgJiYgZHRsc1NDVFApIHsKKyAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiQ2Fubm90IHVzZSBEVExTIHdpdGggYm90aCBVRFAgYW5kIFNDVFAuIik7CisgICAgfQorCisgICAgLyogc29ydCBvdXQgRFRMUyB2ZXJzdXMgVExTIHZlcnNpb25zICovCisgICAgaWYgKHZlcnNpb24gPT0gQ0xJRU5UX0lOVkFMSURfVkVSU0lPTikgeworICAgICAgICBpZiAoZG9EVExTKQorICAgICAgICAgICAgdmVyc2lvbiA9IENMSUVOVF9EVExTX0RFRkFVTFRfVkVSU0lPTjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmVyc2lvbiA9IENMSUVOVF9ERUZBVUxUX1ZFUlNJT047CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoZG9EVExTKSB7CisgICAgICAgICAgICBpZiAodmVyc2lvbiA9PSAzKQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSAtMjsKKyAgICAgICAgI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChXT0xGU1NMX0VJVEhFUl9TSURFKQorICAgICAgICAgICAgZWxzZSBpZiAodmVyc2lvbiA9PSBFSVRIRVJfRE9XTkdSQURFX1ZFUlNJT04pCisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IC0zOworICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBIQVZFX1dOUgorICAgIGlmICh3Y19Jbml0TmV0UmFuZG9tKHduckNvbmZpZ0ZpbGUsIE5VTEwsIDUwMDApICE9IDApCisgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgImNhbid0IGxvYWQgd2hpdGV3b29kIG5ldCByYW5kb20gY29uZmlnICIKKyAgICAgICAgICAgICAgICAgICAiZmlsZSIpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKHZlcnNpb24pIHsKKyNpZm5kZWYgTk9fT0xEX1RMUworICAgICNpZmRlZiBXT0xGU1NMX0FMTE9XX1NTTFYzCisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIG1ldGhvZCA9IHdvbGZTU0x2M19zZXJ2ZXJfbWV0aG9kX2V4OworICAgICAgICAgICAgYnJlYWs7CisgICAgI2VuZGlmCisKKyAgICAjaWZuZGVmIE5PX1RMUworICAgICAgICAjaWZkZWYgV09MRlNTTF9BTExPV19UTFNWMTAKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbWV0aG9kID0gd29sZlRMU3YxX3NlcnZlcl9tZXRob2RfZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbWV0aG9kID0gd29sZlRMU3YxXzFfc2VydmVyX21ldGhvZF9leDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICNlbmRpZiAvKiAhTk9fVExTICovCisjZW5kaWYgLyogIU5PX09MRF9UTFMgKi8KKworI2lmbmRlZiBOT19UTFMKKyAgICAjaWZuZGVmIFdPTEZTU0xfTk9fVExTMTIKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgbWV0aG9kID0gd29sZlRMU3YxXzJfc2VydmVyX21ldGhvZF9leDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICNlbmRpZgorCisgICAgI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgbWV0aG9kID0gd29sZlRMU3YxXzNfc2VydmVyX21ldGhvZF9leDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICNlbmRpZgorCisgICAgICAgIGNhc2UgU0VSVkVSX0RPV05HUkFERV9WRVJTSU9OOgorICAgICAgICAgICAgbWV0aG9kID0gd29sZlNTTHYyM19zZXJ2ZXJfbWV0aG9kX2V4OworICAgICAgICAgICAgYnJlYWs7CisgICAgI2lmIGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgfHwgZGVmaW5lZChXT0xGU1NMX0VJVEhFUl9TSURFKQorICAgICAgICBjYXNlIEVJVEhFUl9ET1dOR1JBREVfVkVSU0lPTjoKKyAgICAgICAgICAgIG1ldGhvZCA9IHdvbGZTU0x2MjNfbWV0aG9kX2V4OworICAgICAgICAgICAgYnJlYWs7CisgICAgI2VuZGlmCisjZW5kaWYgLyogTk9fVExTICovCisKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAjaWZuZGVmIE5PX09MRF9UTFMKKyAgICAgICAgY2FzZSAtMToKKyAgICAgICAgICAgIG1ldGhvZCA9IHdvbGZEVExTdjFfc2VydmVyX21ldGhvZF9leDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICNlbmRpZgorCisgICAgI2lmbmRlZiBXT0xGU1NMX05PX1RMUzEyCisgICAgICAgIGNhc2UgLTI6CisgICAgICAgICAgICBtZXRob2QgPSB3b2xmRFRMU3YxXzJfc2VydmVyX21ldGhvZF9leDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICNlbmRpZgorICAgICNpZiBkZWZpbmVkKE9QRU5TU0xfRVhUUkEpIHx8IGRlZmluZWQoV09MRlNTTF9FSVRIRVJfU0lERSkKKyAgICAgICAgY2FzZSAtMzoKKyAgICAgICAgICAgIG1ldGhvZCA9IHdvbGZEVExTdjFfMl9tZXRob2RfZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAjZW5kaWYKKyNlbmRpZgorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJfc3lzX2V4KHJ1bldpdGhFcnJvcnMsICJCYWQgU1NMIHZlcnNpb24iKTsKKyAgICB9CisKKyAgICBpZiAobWV0aG9kID09IE5VTEwpCisgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgInVuYWJsZSB0byBnZXQgbWV0aG9kIik7CisKKyNpZmRlZiBXT0xGU1NMX1NUQVRJQ19NRU1PUlkKKyAgICAjaWZkZWYgREVCVUdfV09MRlNTTAorICAgIC8qIHByaW50IG9mZiBoZWxwZXIgYnVmZmVyIHNpemVzIGZvciB1c2Ugd2l0aCBzdGF0aWMgbWVtb3J5CisgICAgICogcHJpbnRpbmcgdG8gc3RkZXJyIGluIGNhc2Ugb2YgZGVidWcgbW9kZSB0dXJuZWQgb24gKi8KKyAgICBmcHJpbnRmKHN0ZGVyciwgInN0YXRpYyBtZW1vcnkgbWFuYWdlbWVudCBzaXplID0gJWRcbiIsCisgICAgICAgICAgICB3b2xmU1NMX01lbW9yeVBhZGRpbmdTeigpKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImNhbGN1bGF0ZWQgb3B0aW11bSBnZW5lcmFsIGJ1ZmZlciBzaXplID0gJWRcbiIsCisgICAgICAgICAgICB3b2xmU1NMX1N0YXRpY0J1ZmZlclN6KG1lbW9yeSwgc2l6ZW9mKG1lbW9yeSksIDApKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImNhbGN1bGF0ZWQgb3B0aW11bSBJTyBidWZmZXIgc2l6ZSAgICAgID0gJWRcbiIsCisgICAgICAgICAgICB3b2xmU1NMX1N0YXRpY0J1ZmZlclN6KG1lbW9yeUlPLCBzaXplb2YobWVtb3J5SU8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGTUVNX0lPX1BPT0xfRklYRUQpKTsKKyAgICAjZW5kaWYgLyogREVCVUdfV09MRlNTTCAqLworCisgICAgaWYgKHdvbGZTU0xfQ1RYX2xvYWRfc3RhdGljX21lbW9yeSgmY3R4LCBtZXRob2QsIG1lbW9yeSwgc2l6ZW9mKG1lbW9yeSksMCwxKQorICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICBlcnJfc3lzX2V4KGNhdGFzdHJvcGhpYywgInVuYWJsZSB0byBsb2FkIHN0YXRpYyBtZW1vcnkgYW5kIGNyZWF0ZSBjdHgiKTsKKworICAgIC8qIGxvYWQgaW4gYSBidWZmZXIgZm9yIElPICovCisgICAgaWYgKHdvbGZTU0xfQ1RYX2xvYWRfc3RhdGljX21lbW9yeSgmY3R4LCBOVUxMLCBtZW1vcnlJTywgc2l6ZW9mKG1lbW9yeUlPKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZNRU1fSU9fUE9PTF9GSVhFRCB8IFdPTEZNRU1fVFJBQ0tfU1RBVFMsIDEpCisgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgIGVycl9zeXNfZXgoY2F0YXN0cm9waGljLCAidW5hYmxlIHRvIGxvYWQgc3RhdGljIG1lbW9yeSBhbmQgY3JlYXRlIGN0eCIpOworI2Vsc2UKKyAgICBpZiAobWV0aG9kICE9IE5VTEwpIHsKKyAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcobWV0aG9kKE5VTEwpKTsKKyAgICB9CisjZW5kaWYgLyogV09MRlNTTF9TVEFUSUNfTUVNT1JZICovCisgICAgaWYgKGN0eCA9PSBOVUxMKQorICAgICAgICBlcnJfc3lzX2V4KGNhdGFzdHJvcGhpYywgInVuYWJsZSB0byBnZXQgY3R4Iik7CisgICAgCisgICAgaWYgKG1pblZlcnNpb24gIT0gU0VSVkVSX0lOVkFMSURfVkVSU0lPTikgeworICAgICAgICB3b2xmU1NMX0NUWF9TZXRNaW5WZXJzaW9uKGN0eCwgbWluVmVyc2lvbik7CisgICAgfQorCisjaWZkZWYgV09MRlNTTF9XT0xGU0VOVFJZX0hPT0tTCisgICAgaWYgKHdvbGZzZW50cnlfc2V0dXAoJndvbGZzZW50cnksIHdvbGZzZW50cnlfY29uZmlnX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTRU5UUllfUk9VVEVfRkxBR19ESVJFQ1RJT05fSU4pIDwgMCkgeworICAgICAgICBlcnJfc3lzKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3b2xmU2VudHJ5Iik7CisgICAgfQorCisgICAgaWYgKHdvbGZTU0xfQ1RYX3NldF9BY2NlcHRGaWx0ZXIoCisgICAgICAgICAgICBjdHgsCisgICAgICAgICAgICAoTmV0d29ya0ZpbHRlckNhbGxiYWNrX3Qpd29sZlNlbnRyeV9OZXR3b3JrRmlsdGVyQ2FsbGJhY2ssCisgICAgICAgICAgICB3b2xmc2VudHJ5KSA8IDApIHsKKyAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsCisgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBpbnN0YWxsIHdvbGZTZW50cnlfTmV0d29ya0ZpbHRlckNhbGxiYWNrIik7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoc2ltdWxhdGVXYW50V3JpdGUpCisgICAgeworICAgICNpZmRlZiBVU0VfV09MRlNTTF9JTworICAgICAgICB3b2xmU1NMX0NUWF9TZXRJT1NlbmQoY3R4LCBTaW11bGF0ZVdhbnRXcml0ZUlPU2VuZENiKTsKKyAgICAjZW5kaWYKKyAgICB9CisKKyNpZiBkZWZpbmVkKEhBVkVfU0VTU0lPTl9USUNLRVQpICYmIGRlZmluZWQoV09MRlNTTF9OT19ERUZfVElDS0VUX0VOQ19DQikgJiYgXAorICAgICgoZGVmaW5lZChIQVZFX0NIQUNIQSkgJiYgZGVmaW5lZChIQVZFX1BPTFkxMzA1KSkgfHwgZGVmaW5lZChIQVZFX0FFU0dDTSkpCisgICAgaWYgKFRpY2tldEluaXQoKSAhPSAwKQorICAgICAgICBlcnJfc3lzX2V4KGNhdGFzdHJvcGhpYywgInVuYWJsZSB0byBzZXR1cCBTZXNzaW9uIFRpY2tldCBLZXkgY29udGV4dCIpOworICAgIHdvbGZTU0xfQ1RYX3NldF9UaWNrZXRFbmNDYihjdHgsIG15VGlja2V0RW5jQ2IpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdPTEZTU0xfU05JRkZFUikgJiYgZGVmaW5lZChXT0xGU1NMX1NUQVRJQ19FUEhFTUVSQUwpCisgICAgLyogdXNlZCBmb3IgdGVzdGluZyBvbmx5IHRvIHNldCBhIHN0YXRpYy9maXhlZCBlcGhlbWVyYWwga2V5IAorICAgICAgICBmb3IgdXNlIHdpdGggdGhlIHNuaWZmZXIgKi8KKyNpZiBkZWZpbmVkKEhBVkVfRUNDKSAmJiAhZGVmaW5lZChOT19FQ0NfU0VDUCkgJiYgXAorICAgICAgICAoIWRlZmluZWQoTk9fRUNDMjU2KSB8fCBkZWZpbmVkKEhBVkVfQUxMX0NVUlZFUykpCisgICAgcmV0ID0gd29sZlNTTF9DVFhfc2V0X2VwaGVtZXJhbF9rZXkoY3R4LCBXQ19QS19UWVBFX0VDREgsCisgICAgICAgICIuL2NlcnRzL3N0YXRpY2tleXMvZWNjLXNlY3AyNTZyMS5wZW0iLCAwLCBXT0xGU1NMX0ZJTEVUWVBFX1BFTSk7CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgImVycm9yIGxvYWRpbmcgc3RhdGljIEVDREgga2V5Iik7CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3QgYnl0ZSoga2V5ID0gTlVMTDsKKyAgICAgICAgd29yZDMyIGtleVN6ID0gMDsKKyAgICAgICAgLyogZXhhbXBsZSBmb3IgZ2V0dGluZyBwb2ludGVyIHRvIGxvYWRlZCBzdGF0aWMgZXBoZW1lcmFsIGtleSAqLworICAgICAgICB3b2xmU1NMX0NUWF9nZXRfZXBoZW1lcmFsX2tleShjdHgsIFdDX1BLX1RZUEVfRUNESCwgJmtleSwgJmtleVN6KTsKKyAgICAgICAgKHZvaWQpa2V5OworICAgICAgICAodm9pZClrZXlTejsKKyAgICB9CisjZW5kaWYKKyNpZm5kZWYgTk9fREgKKyAgICByZXQgPSB3b2xmU1NMX0NUWF9zZXRfZXBoZW1lcmFsX2tleShjdHgsIFdDX1BLX1RZUEVfREgsCisgICAgICAgICIuL2NlcnRzL3N0YXRpY2tleXMvZGgtZmZkaGUyMDQ4LnBlbSIsIDAsIFdPTEZTU0xfRklMRVRZUEVfUEVNKTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiZXJyb3IgbG9hZGluZyBzdGF0aWMgREgga2V5Iik7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogV09MRlNTTF9TTklGRkVSICYmIFdPTEZTU0xfU1RBVElDX0VQSEVNRVJBTCAqLworCisgICAgaWYgKGNpcGhlckxpc3QgJiYgIXVzZURlZkNpcGhlckxpc3QpIHsKKyAgICAgICAgaWYgKFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGN0eCwgY2lwaGVyTGlzdCkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAic2VydmVyIGNhbid0IHNldCBjdXN0b20gY2lwaGVyIGxpc3QiKTsKKyAgICB9CisKKyNpZmRlZiBXT0xGU1NMX0xFQU5QU0sKKyAgICBpZiAoIXVzZVBzaykgeworICAgICAgICB1c2VQc2sgPSAxOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChOT19SU0EpICYmICFkZWZpbmVkKEhBVkVfRUNDKSAmJiAhZGVmaW5lZChIQVZFX0VEMjU1MTkpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZpbmVkKEhBVkVfRUQ0NDgpCisgICAgaWYgKCF1c2VQc2spIHsKKyAgICAgICAgdXNlUHNrID0gMTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChmZXdlclBhY2tldHMpCisgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9ncm91cF9tZXNzYWdlcyhjdHgpOworI2lmIChkZWZpbmVkKFdPTEZTU0xfU0NUUCkgfHwgZGVmaW5lZChXT0xGU1NMX0RUTFNfTVRVKSkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKFdPTEZTU0xfRFRMUykKKyAgICBpZiAoZHRsc01UVSkKKyAgICAgICAgd29sZlNTTF9DVFhfZHRsc19zZXRfbXR1KGN0eCwgZHRsc01UVSk7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfU0NUUAorICAgIGlmIChkdGxzU0NUUCkKKyAgICAgICAgd29sZlNTTF9DVFhfZHRsc19zZXRfc2N0cChjdHgpOworI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0VOQ1JZUFRFRF9LRVlTCisgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2IoY3R4LCBQYXNzd29yZENhbGxCYWNrKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTk9fQ0VSVFMpCisgICAgaWYgKCghdXNlUHNrIHx8IHVzZVBza1BsdXMpICYmICF1c2VBbm9uICYmICEobG9hZENlcnRLZXlJbnRvU1NMT2JqID09IDEpKSB7CisgICAgI2lmZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9idWZmZXIoY3R4LCBzZXJ2ZXJfY2VydF9kZXJfMjA0OCwKKyAgICAgICAgICAgIHNpemVvZl9zZXJ2ZXJfY2VydF9kZXJfMjA0OCkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsICJjYW4ndCBsb2FkIHNlcnZlciBjZXJ0IGJ1ZmZlciIpOworICAgICNlbGlmICFkZWZpbmVkKFRFU1RfTE9BRF9CVUZGRVIpCisgICAgICAgIGlmIChTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKGN0eCwgb3VyQ2VydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsICJjYW4ndCBsb2FkIHNlcnZlciBjZXJ0IGZpbGUsIGNoZWNrIGZpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAiYW5kIHJ1biBmcm9tIHdvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAjZWxzZQorICAgICAgICAvKiBsb2FkcyBjZXJ0IGNoYWluIGZpbGUgdXNpbmcgYnVmZmVyIEFQSSAqLworICAgICAgICBsb2FkX2J1ZmZlcihjdHgsIG91ckNlcnQsIFdPTEZTU0xfQ0VSVF9DSEFJTik7CisgICAgI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyNpZm5kZWYgTk9fREgKKyAgICBpZiAod29sZlNTTF9DVFhfU2V0TWluRGhLZXlfU3ooY3R4LCAod29yZDE2KW1pbkRoS2V5Qml0cykKKyAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgIkVycm9yIHNldHRpbmcgbWluaW11bSBESCBrZXkgc2l6ZSIpOworICAgIH0KKyNlbmRpZgorI2lmbmRlZiBOT19SU0EKKyAgICBpZiAod29sZlNTTF9DVFhfU2V0TWluUnNhS2V5X1N6KGN0eCwgbWluUnNhS2V5Qml0cykgIT0gV09MRlNTTF9TVUNDRVNTKXsKKyAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiRXJyb3Igc2V0dGluZyBtaW5pbXVtIFJTQSBrZXkgc2l6ZSIpOworICAgIH0KKyNlbmRpZgorI2lmZGVmIEhBVkVfRUNDCisgICAgaWYgKHdvbGZTU0xfQ1RYX1NldE1pbkVjY0tleV9TeihjdHgsIG1pbkVjY0tleUJpdHMpICE9IFdPTEZTU0xfU1VDQ0VTUyl7CisgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgIkVycm9yIHNldHRpbmcgbWluaW11bSBFQ0Mga2V5IHNpemUiKTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTlRSVQorICAgIGlmICh1c2VOdHJ1S2V5KSB7CisgICAgICAgIGlmICh3b2xmU1NMX0NUWF91c2VfTlRSVVByaXZhdGVLZXlfZmlsZShjdHgsIG91cktleSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsICJjYW4ndCBsb2FkIG50cnUga2V5IGZpbGUsICIKKyAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBydW4gZnJvbSB3b2xmU1NMIGhvbWUgZGlyIik7CisgICAgfQorI2VuZGlmCisjaWYgIWRlZmluZWQoTk9fQ0VSVFMpCisgICAgI2lmZGVmIEhBVkVfUEtfQ0FMTEJBQ0tTCisgICAgICAgIHBrQ2JJbmZvLm91cktleSA9IG91cktleTsKKyAgICAjZW5kaWYKKyAgICBpZiAoIXVzZU50cnVLZXkgJiYgKCF1c2VQc2sgfHwgdXNlUHNrUGx1cykgJiYgIXVzZUFub24KKyAgICAgICAgJiYgIShsb2FkQ2VydEtleUludG9TU0xPYmogPT0gMSkKKyAgICAjaWYgZGVmaW5lZChIQVZFX1BLX0NBTExCQUNLUykgJiYgZGVmaW5lZChURVNUX1BLX1BSSVZLRVkpCisgICAgICAgICYmICFwa0NhbGxiYWNrcworICAgICNlbmRpZiAvKiBIQVZFX1BLX0NBTExCQUNLUyAmJiBURVNUX1BLX1BSSVZLRVkgKi8KKyAgICApIHsKKyAgICAjaWZkZWYgTk9fRklMRVNZU1RFTQorICAgICAgICBpZiAod29sZlNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfYnVmZmVyKGN0eCwgc2VydmVyX2tleV9kZXJfMjA0OCwKKyAgICAgICAgICAgIHNpemVvZl9zZXJ2ZXJfa2V5X2Rlcl8yMDQ4LCBTU0xfRklMRVRZUEVfQVNOMSkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsICJjYW4ndCBsb2FkIHNlcnZlciBwcml2YXRlIGtleSBidWZmZXIiKTsKKyAgICAjZWxpZiAhZGVmaW5lZChURVNUX0xPQURfQlVGRkVSKQorICAgICAgICBpZiAoU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKGN0eCwgb3VyS2V5LCBXT0xGU1NMX0ZJTEVUWVBFX1BFTSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsICJjYW4ndCBsb2FkIHNlcnZlciBwcml2YXRlIGtleSBmaWxlLCAiCisgICAgICAgICAgICAgICAgICAgICAgICJjaGVjayBmaWxlIGFuZCBydW4gZnJvbSB3b2xmU1NMIGhvbWUgZGlyIik7CisgICAgI2Vsc2UKKyAgICAgICAgLyogbG9hZHMgcHJpdmF0ZSBrZXkgZmlsZSB1c2luZyBidWZmZXIgQVBJICovCisgICAgICAgIGxvYWRfYnVmZmVyKGN0eCwgb3VyS2V5LCBXT0xGU1NMX0tFWSk7CisgICAgI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyAgICBpZiAodXNlUHNrIHx8IHVzZVBza1BsdXMpIHsKKyNpZm5kZWYgTk9fUFNLCisgICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRDaXBoZXJMaXN0ID0gY2lwaGVyTGlzdDsKKworICAgICAgICBTU0xfQ1RYX3NldF9wc2tfc2VydmVyX2NhbGxiYWNrKGN0eCwgbXlfcHNrX3NlcnZlcl9jYik7CisgICAgI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgd29sZlNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfdGxzMTNfY2FsbGJhY2soY3R4LCBteV9wc2tfc2VydmVyX3RsczEzX2NiKTsKKyAgICAjZW5kaWYKKyAgICAgICAgaWYgKHNlbmRQc2tJZGVudGl0eUhpbnQgPT0gMSkKKyAgICAgICAgICAgIFNTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50KGN0eCwgImN5YXNzbCBzZXJ2ZXIiKTsKKworICAgICAgICBpZiAoZGVmYXVsdENpcGhlckxpc3QgPT0gTlVMTCAmJiAhdXNlUHNrUGx1cykgeworICAgICAgICAjaWYgZGVmaW5lZChIQVZFX0FFU0dDTSkgJiYgIWRlZmluZWQoTk9fREgpCisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9UTFMxMworICAgICAgICAgICAgICAgIGRlZmF1bHRDaXBoZXJMaXN0ID0gIlRMUzEzLUFFUzEyOC1HQ00tU0hBMjU2IgorICAgICAgICAgICAgICAgICNpZm5kZWYgV09MRlNTTF9OT19UTFMxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjpESEUtUFNLLUFFUzEyOC1HQ00tU0hBMjU2IgorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgZGVmYXVsdENpcGhlckxpc3QgPSAiREhFLVBTSy1BRVMxMjgtR0NNLVNIQTI1NiI7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBuZWVkREggPSAxOworICAgICAgICAjZWxpZiBkZWZpbmVkKEhBVkVfQUVTR0NNKSAmJiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpCisgICAgICAgICAgICAgICAgZGVmYXVsdENpcGhlckxpc3QgPSAiVExTMTMtQUVTMTI4LUdDTS1TSEEyNTYiCisgICAgICAgICAgICAgICAgI2lmbmRlZiBXT0xGU1NMX05PX1RMUzEyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOlBTSy1BRVMxMjgtR0NNLVNIQTI1NiIKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICNlbGlmIGRlZmluZWQoSEFWRV9OVUxMX0NJUEhFUikKKyAgICAgICAgICAgICAgICBkZWZhdWx0Q2lwaGVyTGlzdCA9ICJQU0stTlVMTC1TSEEyNTYiOworICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgIGRlZmF1bHRDaXBoZXJMaXN0ID0gIlBTSy1BRVMxMjgtQ0JDLVNIQTI1NiI7CisgICAgICAgICNlbmRpZgorICAgICAgICAgICAgaWYgKFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGN0eCwgZGVmYXVsdENpcGhlckxpc3QpCisgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgInNlcnZlciBjYW4ndCBzZXQgY2lwaGVyIGxpc3QgMiIpOworICAgICAgICB9CisgICAgICAgIHdvbGZTU0xfQ1RYX3NldF9wc2tfY2FsbGJhY2tfY3R4KGN0eCwgKHZvaWQqKWRlZmF1bHRDaXBoZXJMaXN0KTsKKyNlbmRpZiAvKiAhTk9fUFNLICovCisgICAgfQorI2lmbmRlZiBOT19DRVJUUworICAgIGlmIChtdXR1YWxBdXRoKQorICAgICAgICB3b2xmU1NMX0NUWF9tdXR1YWxfYXV0aChjdHgsIDEpOworI2VuZGlmCisKKworI2lmZGVmIEhBVkVfRUNDCisgICAgLyogVXNlIEVDREhFIGtleSBzaXplIHRoYXQgbWF0Y2hlcyBsb25nIHRlcm0ga2V5LgorICAgICAqIFplcm8gbWVhbnMgdXNlIGN0eC0+cHJpdmF0ZUtleVN6LgorICAgICAqIERlZmF1bHQgRUNESEVfU0laRSBpcyAzMiBieXRlcworICAgICAqLworICAgIGlmICh3b2xmU1NMX0NUWF9TZXRUbXBFQ19ESEVfU3ooY3R4LCAwKSAhPSBXT0xGU1NMX1NVQ0NFU1MpeworICAgICAgICBlcnJfc3lzX2V4KHJ1bldpdGhFcnJvcnMsICJFcnJvciBzZXR0aW5nIEVDREhFIHNpemUiKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICh1c2VBbm9uKSB7CisjaWZkZWYgSEFWRV9BTk9OCisgICAgICAgIHdvbGZTU0xfQ1RYX2FsbG93X2Fub25fY2lwaGVyKGN0eCk7CisgICAgICAgIGlmIChjaXBoZXJMaXN0ID09IE5VTEwgfHwgKGNpcGhlckxpc3QgJiYgdXNlRGVmQ2lwaGVyTGlzdCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlZmF1bHRDaXBoZXJMaXN0OworICAgICAgICAgICAgZGVmYXVsdENpcGhlckxpc3QgPSAiQURILUFFUzI1Ni1HQ00tU0hBMzg0OiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFESC1BRVMxMjgtU0hBIjsKKyAgICAgICAgICAgIGlmIChTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChjdHgsIGRlZmF1bHRDaXBoZXJMaXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgInNlcnZlciBjYW4ndCBzZXQgY2lwaGVyIGxpc3QgNCIpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyNpZiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19DRVJUUykKKyAgICAvKiBpZiBub3QgdXNpbmcgUFNLLCB2ZXJpZnkgcGVlciB3aXRoIGNlcnRzCisgICAgICAgaWYgdXNpbmcgUFNLIFBsdXMgdGhlbiB2ZXJpZnkgcGVlciBjZXJ0cyBleGNlcHQgUFNLIHN1aXRlcyAqLworICAgIGlmIChkb0NsaUNlcnRDaGVjayAmJiAodXNlUHNrID09IDAgfHwgdXNlUHNrUGx1cykgJiYgdXNlQW5vbiA9PSAwKSB7CisgICAgICAgIHVuc2lnbmVkIGludCB2ZXJpZnlfZmxhZ3MgPSAwOworICAgICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoY3R4LCBXT0xGU1NMX1ZFUklGWV9QRUVSIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlUHNrUGx1cyA/IFdPTEZTU0xfVkVSSUZZX0ZBSUxfRVhDRVBUX1BTSyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPTEZTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSwKKyAgICAgICAgICAgICAgICAgIChteVZlcmlmeUFjdGlvbiA9PSBWRVJJRllfT1ZFUlJJREVfREFURV9FUlIgfHwKKyAgICAgICAgICAgICAgICAgICBteVZlcmlmeUFjdGlvbiA9PSBWRVJJRllfRk9SQ0VfRkFJTCkgPyBteVZlcmlmeSA6IE5VTEwpOworCisgICAgI2lmZGVmIFRFU1RfQkVGT1JFX0RBVEUKKyAgICAgICAgdmVyaWZ5X2ZsYWdzIHw9IFdPTEZTU0xfTE9BRF9GTEFHX0RBVEVfRVJSX09LQVk7CisgICAgI2VuZGlmCisgICAgI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpICYmIGRlZmluZWQoV09MRlNTTF9DRVJUX0dFTikgJiYgXAorICAgIChkZWZpbmVkKFdPTEZTU0xfQ0VSVF9SRVEpIHx8IGRlZmluZWQoV09MRlNTTF9DRVJUX0VYVCkpICYmIFwKKyAgICAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX0RJUikKKyAgICAgICAgaWYgKHVzZUNlcnRGb2xkZXIpIHsKKyAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9TVE9SRSAgICAgICpzdG9yZTsKKyAgICAgICAgICAgIFdPTEZTU0xfWDUwOV9MT09LVVAgICAgICpsb29rdXA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0b3JlID0gd29sZlNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoY3R4KTsKKyAgICAgICAgICAgIGlmIChzdG9yZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgd29sZlNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworICAgICAgICAgICAgICAgIGVycl9zeXMoImNhbid0IGdldCBXT0xGU1NMX1g1MDlfU1RPUkUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvb2t1cCA9IHdvbGZTU0xfWDUwOV9TVE9SRV9hZGRfbG9va3VwKHN0b3JlLCBYNTA5X0xPT0tVUF9oYXNoX2RpcigpKTsKKyAgICAgICAgICAgIGlmIChsb29rdXAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJjYW4ndCBhZGQgbG9va3VwIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod29sZlNTTF9YNTA5X0xPT0tVUF9jdHJsKGxvb2t1cCwgV09MRlNTTF9YNTA5X0xfQUREX0RJUiwgY2FDZXJ0Rm9sZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNLCBOVUxMKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBlcnJfc3lzKCJYNTA5X0xPT0tVUF9jdHJsIHcvIExfQUREX0RJUiBmYWlsZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAjZW5kaWYKKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9uc19leChjdHgsIHZlcmlmeUNlcnQsIDAsCisgICAgICAgICAgICB2ZXJpZnlfZmxhZ3MpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsCisgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBsb2FkIGNhIGZpbGUsIFBsZWFzZSBydW4gZnJvbSB3b2xmU1NMIGhvbWUgZGlyIik7CisgICAgICAgIH0KKyAgICAgICAgI2lmZGVmIFdPTEZTU0xfVFJVU1RfUEVFUl9DRVJUCisgICAgICAgIGlmICh0cnVzdENlcnQpIHsKKyAgICAgICAgICAgIGlmICgocmV0ID0gd29sZlNTTF9DVFhfdHJ1c3RfcGVlcl9jZXJ0KGN0eCwgdHJ1c3RDZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9GSUxFVFlQRV9QRU0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiY2FuJ3QgbG9hZCB0cnVzdGVkIHBlZXIgY2VydCBmaWxlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgI2VuZGlmIC8qIFdPTEZTU0xfVFJVU1RfUEVFUl9DRVJUICovCisgICAgI2lmIGRlZmluZWQoT1BFTlNTTF9BTEwpICYmIGRlZmluZWQoV09MRlNTTF9DRVJUX0dFTikgJiYgXAorICAgICAgICAoZGVmaW5lZChXT0xGU1NMX0NFUlRfUkVRKSB8fCBkZWZpbmVkKFdPTEZTU0xfQ0VSVF9FWFQpKSAmJiBcCisgICAgICAgICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKE5PX1dPTEZTU0xfRElSKQorICAgICAgICB9CisgICAgI2VuZGlmCisgICB9CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfU05JRkZFUgorICAgIGlmIChjaXBoZXJMaXN0ID09IE5VTEwgJiYgdmVyc2lvbiA8IDQpIHsKKyAgICAgICAgLyogc3RhdGljIFJTQSBvciBzdGF0aWMgRUNDIGNpcGhlciBzdWl0ZXMgKi8KKyAgICAgICAgY29uc3QgY2hhciogc3RhdGljQ2lwaGVyTGlzdCA9ICJBRVMxMjgtU0hBOkVDREgtRUNEU0EtQUVTMTI4LVNIQSI7CisgICAgICAgIGlmIChTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChjdHgsIHN0YXRpY0NpcGhlckxpc3QpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAic2VydmVyIGNhbid0IHNldCBjaXBoZXIgbGlzdCAzIik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU05JCisgICAgaWYgKHNuaUhvc3ROYW1lKQorICAgICAgICBpZiAod29sZlNTTF9DVFhfVXNlU05JKGN0eCwgV09MRlNTTF9TTklfSE9TVF9OQU1FLCBzbmlIb3N0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgKHdvcmQxNikgWFNUUkxFTihzbmlIb3N0TmFtZSkpICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgIlVzZVNOSSBmYWlsZWQiKTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX1dJTkRPV1NfQVBJCisgICAgaWYgKHBvcnQgPT0gMCkgeworICAgICAgICAvKiBHZW5lcmF0ZSByYW5kb20gcG9ydCBmb3IgdGVzdGluZyAqLworICAgICAgICBwb3J0ID0gR2V0UmFuZG9tUG9ydCgpOworICAgIH0KKyNlbmRpZiAvKiBVU0VfV0lORE9XU19BUEkgKi8KKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICByZXQgPSB3b2xmQXN5bmNfRGV2T3BlbigmZGV2SWQpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIHByaW50ZigiQXN5bmMgZGV2aWNlIG9wZW4gZmFpbGVkXG5SdW5uaW5nIHdpdGhvdXQgYXN5bmNcbiIpOworICAgIH0KKyAgICB3b2xmU1NMX0NUWF9TZXREZXZJZChjdHgsIGRldklkKTsKKyNlbmRpZiAvKiBXT0xGU1NMX0FTWU5DX0NSWVBUICovCisKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgaWYgKG5vUHNrRGhlS2UpCisgICAgICAgIHdvbGZTU0xfQ1RYX25vX2RoZV9wc2soY3R4KTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfU0VTU0lPTl9USUNLRVQKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgaWYgKG5vVGlja2V0VGxzMTMpCisgICAgICAgIHdvbGZTU0xfQ1RYX25vX3RpY2tldF9UTFN2MTMoY3R4KTsKKyNlbmRpZgorI2lmICFkZWZpbmVkKFdPTEZTU0xfTk9fVExTMTIpIHx8ICFkZWZpbmVkKE5PX09MRF9UTFMpCisgICAgaWYgKG5vVGlja2V0VGxzMTIpCisgICAgICAgIHdvbGZTU0xfQ1RYX05vVGlja2V0VExTdjEyKGN0eCk7CisjZW5kaWYKKyNlbmRpZgorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgLyogYWxsb3cgcmVzdW1lIG9wdGlvbiAqLworICAgICAgICBpZiAocmVzdW1lQ291bnQgPiAxKSB7CisgICAgICAgICAgICBpZiAoZHRsc1VEUCA9PSAwKSB7CisgICAgICAgICAgICAgICAgY2xpZW50X2xlbiA9IHNpemVvZiBjbGllbnRfYWRkcjsKKyAgICAgICAgICAgICAgICBjbGllbnRmZCA9IGFjY2VwdChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZjbGllbnRfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBQ0NFUFRfVEhJUkRfVCkmY2xpZW50X2xlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0Y3BfbGlzdGVuKCZzb2NrZmQsICZwb3J0LCB1c2VBbnlBZGRyLCBkdGxzVURQLCBkdGxzU0NUUCk7CisgICAgICAgICAgICAgICAgY2xpZW50ZmQgPSBzb2NrZmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoV09MRlNTTF9TT0NLRVRfSVNfSU5WQUxJRChjbGllbnRmZCkpIHsKKyAgICAgICAgICAgICAgICBlcnJfc3lzX2V4KHJ1bldpdGhFcnJvcnMsICJ0Y3AgYWNjZXB0IGZhaWxlZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjaWYgZGVmaW5lZChXT0xGU1NMX1NUQVRJQ19NRU1PUlkpICYmIGRlZmluZWQoREVCVUdfV09MRlNTTCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJCZWZvcmUgY3JlYXRpbmcgU1NMXG4iKTsKKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX2lzX3N0YXRpY19tZW1vcnkoY3R4LCAmbWVtX3N0YXRzKSAhPSAxKQorICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiY3R4IG5vdCB1c2luZyBzdGF0aWMgbWVtb3J5Iik7CisgICAgICAgIGlmICh3b2xmU1NMX1ByaW50U3RhdHMoJm1lbV9zdGF0cykgIT0gMSkgLyogZnVuY3Rpb24gaW4gdGVzdC5oICovCisgICAgICAgICAgICBlcnJfc3lzX2V4KHJ1bldpdGhFcnJvcnMsICJlcnJvciBwcmludGluZyBvdXQgbWVtb3J5IHN0YXRzIik7CisjZW5kaWYKKworICAgIGlmIChkb01jYXN0KSB7CisjaWZkZWYgV09MRlNTTF9NVUxUSUNBU1QKKyAgICAgICAgd29sZlNTTF9DVFhfbWNhc3Rfc2V0X21lbWJlcl9pZChjdHgsIG1jYXN0SUQpOworICAgICAgICBpZiAod29sZlNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGN0eCwgIldETS1OVUxMLVNIQTI1NiIpCisgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzKCJDb3VsZG4ndCBzZXQgbXVsdGljYXN0IGNpcGhlciBsaXN0LiIpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKGRvRFRMUyAmJiBkdGxzVURQKSB7CisjaWYgZGVmaW5lZChXT0xGU1NMX0RUTFMpICYmIGRlZmluZWQoVVNFX1dPTEZTU0xfSU8pCisgICAgICAgIGlmIChkb0Jsb2NrU2VxKSB7CisgICAgICAgICAgICB3b2xmU1NMX0NUWF9TZXRJT1NlbmQoY3R4LCBUZXN0RW1iZWRTZW5kVG8pOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyNpZmRlZiBIQVZFX1BLX0NBTExCQUNLUworICAgICAgICBpZiAocGtDYWxsYmFja3MpCisgICAgICAgICAgICBTZXR1cFBrQ2FsbGJhY2tzKGN0eCk7CisjZW5kaWYKKworICAgICAgICBzc2wgPSBTU0xfbmV3KGN0eCk7CisgICAgICAgIGlmIChzc2wgPT0gTlVMTCkKKyAgICAgICAgICAgIGVycl9zeXNfZXgoY2F0YXN0cm9waGljLCAidW5hYmxlIHRvIGNyZWF0ZSBhbiBTU0wgb2JqZWN0Iik7CisgICAgICAgICNpZmRlZiBPUEVOU1NMX0VYVFJBCisgICAgICAgIHdvbGZTU0xfS2VlcEFycmF5cyhzc2wpOworICAgICAgICAjZW5kaWYKKworICAgIC8qIFN1cHBvcnQgZm9yIGxvYWRpbmcgcHJpdmF0ZSBrZXkgYW5kIGNlcnQgdXNpbmcgV09MRlNTTCBvYmplY3QgKi8KKyNpZiAhZGVmaW5lZChOT19DRVJUUykKKyAgICBpZiAoKCF1c2VQc2sgfHwgdXNlUHNrUGx1cykgJiYgIXVzZUFub24gJiYgbG9hZENlcnRLZXlJbnRvU1NMT2JqKSB7CisgICAgI2lmZGVmIE5PX0ZJTEVTWVNURU0KKyAgICAgICAgaWYgKHdvbGZTU0xfdXNlX2NlcnRpZmljYXRlX2NoYWluX2J1ZmZlcihzc2wsIHNlcnZlcl9jZXJ0X2Rlcl8yMDQ4LAorICAgICAgICAgICAgc2l6ZW9mX3NlcnZlcl9jZXJ0X2Rlcl8yMDQ4KSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzX2V4KGNhdGFzdHJvcGhpYywgImNhbid0IGxvYWQgc2VydmVyIGNlcnQgYnVmZmVyIik7CisgICAgI2VsaWYgIWRlZmluZWQoVEVTVF9MT0FEX0JVRkZFUikKKyAgICAgICAgaWYgKFNTTF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShzc2wsIG91ckNlcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgIGVycl9zeXNfZXgoY2F0YXN0cm9waGljLCAiY2FuJ3QgbG9hZCBzZXJ2ZXIgY2VydCBmaWxlLCBjaGVjayBmaWxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgImFuZCBydW4gZnJvbSB3b2xmU1NMIGhvbWUgZGlyIik7CisgICAgI2Vsc2UKKyAgICAgICAgLyogbG9hZHMgY2VydCBjaGFpbiBmaWxlIHVzaW5nIGJ1ZmZlciBBUEkgKi8KKyAgICAgICAgbG9hZF9zc2xfYnVmZmVyKHNzbCwgb3VyQ2VydCwgV09MRlNTTF9DRVJUX0NIQUlOKTsKKyAgICAjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoIXVzZU50cnVLZXkgJiYgKCF1c2VQc2sgfHwgdXNlUHNrUGx1cykgJiYgIXVzZUFub24gJiYKKyAgICAgICAgbG9hZENlcnRLZXlJbnRvU1NMT2JqCisgICAgI2lmIGRlZmluZWQoSEFWRV9QS19DQUxMQkFDS1MpICYmIGRlZmluZWQoVEVTVF9QS19QUklWS0VZKQorICAgICAgICAmJiAhcGtDYWxsYmFja3MKKyAgICAjZW5kaWYgLyogSEFWRV9QS19DQUxMQkFDS1MgJiYgVEVTVF9QS19QUklWS0VZICovCisgICAgKSB7CisgICAgI2lmIGRlZmluZWQoTk9fRklMRVNZU1RFTSkKKyAgICAgICAgaWYgKHdvbGZTU0xfdXNlX1ByaXZhdGVLZXlfYnVmZmVyKHNzbCwgc2VydmVyX2tleV9kZXJfMjA0OCwKKyAgICAgICAgICAgIHNpemVvZl9zZXJ2ZXJfa2V5X2Rlcl8yMDQ4LCBTU0xfRklMRVRZUEVfQVNOMSkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsICJjYW4ndCBsb2FkIHNlcnZlciBwcml2YXRlIGtleSBidWZmZXIiKTsKKyAgICAjZWxpZiAhZGVmaW5lZChURVNUX0xPQURfQlVGRkVSKQorICAgICAgICBpZiAoU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGUoc3NsLCBvdXJLZXksIFdPTEZTU0xfRklMRVRZUEVfUEVNKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICBlcnJfc3lzX2V4KGNhdGFzdHJvcGhpYywgImNhbid0IGxvYWQgc2VydmVyIHByaXZhdGUga2V5IGZpbGUsIGNoZWNrIgorICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSBhbmQgcnVuIGZyb20gd29sZlNTTCBob21lIGRpciIpOworICAgICNlbHNlCisgICAgICAgIC8qIGxvYWRzIHByaXZhdGUga2V5IGZpbGUgdXNpbmcgYnVmZmVyIEFQSSAqLworICAgICAgICBsb2FkX3NzbF9idWZmZXIoc3NsLCBvdXJLZXksIFdPTEZTU0xfS0VZKTsKKyAgICAjZW5kaWYKKyAgICB9CisjZW5kaWYgLyogIU5PX0NFUlRTICovCisKKyNpZmRlZiBXT0xGU1NMX1NFTkRfSFJSX0NPT0tJRQorICAgICAgICBpZiAoaHJyQ29va2llICYmIHdvbGZTU0xfc2VuZF9ocnJfY29va2llKHNzbCwgTlVMTCwgMCkKKyAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIHNldCB1c2Ugb2YgY29va2llIHdpdGggSFJSIG1zZyIpOworICAgICAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF9TVEFUSUNfTUVNT1JZKSAmJiBkZWZpbmVkKERFQlVHX1dPTEZTU0wpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQWZ0ZXIgY3JlYXRpbmcgU1NMXG4iKTsKKyAgICAgICAgaWYgKHdvbGZTU0xfQ1RYX2lzX3N0YXRpY19tZW1vcnkoY3R4LCAmbWVtX3N0YXRzKSAhPSAxKQorICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiY3R4IG5vdCB1c2luZyBzdGF0aWMgbWVtb3J5Iik7CisgICAgICAgIGlmICh3b2xmU1NMX1ByaW50U3RhdHMoJm1lbV9zdGF0cykgIT0gMSkgLyogZnVuY3Rpb24gaW4gdGVzdC5oICovCisgICAgICAgICAgICBlcnJfc3lzX2V4KHJ1bldpdGhFcnJvcnMsICJlcnJvciBwcmludGluZyBvdXQgbWVtb3J5IHN0YXRzIik7CisjZW5kaWYKKworICAgIGlmIChkb01jYXN0KSB7CisjaWZkZWYgV09MRlNTTF9NVUxUSUNBU1QKKyAgICAgICAgLyogRFRMUyBtdWx0aWNhc3Qgc2VjcmV0IGZvciB0ZXN0aW5nIG9ubHkgKi8KKyAgICAgICAgI2RlZmluZSBDTElfU1JWX1JBTkRPTV9TWiAzMiAgICAgLyogUkFOX0xFTiAoc2VlIGludGVybmFsLmgpICovCisgICAgICAgICNkZWZpbmUgUE1TX1NaICAgICAgICAgICAgNTEyICAgIC8qIEVOQ1JZUFRfTEVOIChzZWUgaW50ZXJuYWwuaCkgKi8KKyAgICAgICAgYnl0ZSBwbXNbUE1TX1NaXTsgICAgICAgICAgICAgICAgLyogcHJlIG1hc3RlciBzZWNyZXQgKi8KKyAgICAgICAgYnl0ZSBjcltDTElfU1JWX1JBTkRPTV9TWl07ICAgICAgLyogY2xpZW50IHJhbmRvbSAqLworICAgICAgICBieXRlIHNyW0NMSV9TUlZfUkFORE9NX1NaXTsgICAgICAvKiBzZXJ2ZXIgcmFuZG9tICovCisgICAgICAgIGNvbnN0IGJ5dGUgc3VpdGVbMl0gPSB7MCwgMHhmZX07IC8qIFdETV9XSVRIX05VTExfU0hBMjU2ICovCisKKyAgICAgICAgWE1FTVNFVChwbXMsIDB4MjMsIHNpemVvZihwbXMpKTsKKyAgICAgICAgWE1FTVNFVChjciwgMHhBNSwgc2l6ZW9mKGNyKSk7CisgICAgICAgIFhNRU1TRVQoc3IsIDB4NUEsIHNpemVvZihzcikpOworCisgICAgICAgIGlmICh3b2xmU1NMX3NldF9zZWNyZXQoc3NsLCAxLCBwbXMsIHNpemVvZihwbXMpLCBjciwgc3IsIHN1aXRlKQorICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgZXJyX3N5cygidW5hYmxlIHRvIHNldCBtY2FzdCBzZWNyZXQiKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisjaWZkZWYgSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTgorICAgICAgICBpZiAoc2NyKSB7CisgICAgICAgICAgICBpZiAod29sZlNTTF9Vc2VTZWN1cmVSZW5lZ290aWF0aW9uKHNzbCkgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiY2FuJ3QgZW5hYmxlIHNlY3VyZSByZW5lZ290aWF0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9OICovCisKKyNpZiAhZGVmaW5lZChOT19GSUxFU1lTVEVNKSAmJiAhZGVmaW5lZChOT19DRVJUUykKKyAgICAjaWYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAmJiBkZWZpbmVkKFdPTEZTU0xfUE9TVF9IQU5EU0hBS0VfQVVUSCkKKyAgICAgICAgaWYgKHBvc3RIYW5kQXV0aCkgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlcmlmeV9mbGFncyA9IDA7CisKKyAgICAgICAgICAgIFNTTF9zZXRfdmVyaWZ5KHNzbCwgV09MRlNTTF9WRVJJRllfUEVFUiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodXNlUHNrUGx1cykgPyBXT0xGU1NMX1ZFUklGWV9GQUlMX0VYQ0VQVF9QU0sgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCksIDApOworCisgICAgICAgICNpZmRlZiBURVNUX0JFRk9SRV9EQVRFCisgICAgICAgICAgICB2ZXJpZnlfZmxhZ3MgfD0gV09MRlNTTF9MT0FEX0ZMQUdfREFURV9FUlJfT0tBWTsKKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgIGlmICh3b2xmU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnNfZXgoY3R4LCB2ZXJpZnlDZXJ0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZnlfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgImNhbid0IGxvYWQgY2EgZmlsZSwgUGxlYXNlIHJ1biBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2xmU1NMIGhvbWUgZGlyIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9UUlVTVF9QRUVSX0NFUlQKKyAgICAgICAgICAgIGlmICh0cnVzdENlcnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHJldCA9IHdvbGZTU0xfdHJ1c3RfcGVlcl9jZXJ0KHNzbCwgdHJ1c3RDZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTTF9GSUxFVFlQRV9QRU0pKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiY2FuJ3QgbG9hZCB0cnVzdGVkIHBlZXIgY2VydCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjZW5kaWYgLyogV09MRlNTTF9UUlVTVF9QRUVSX0NFUlQgKi8KKyAgICAgICB9CisgICAgI2VuZGlmCisjZW5kaWYKKworCisjaWZuZGVmIE5PX0hBTkRTSEFLRV9ET05FX0NCCisgICAgICAgIHdvbGZTU0xfU2V0SHNEb25lQ2Ioc3NsLCBteUhzRG9uZUNiLCBOVUxMKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfQ1JMCisgICAgaWYgKCFkaXNhYmxlQ1JMKSB7CisjaWZkZWYgSEFWRV9DUkxfTU9OSVRPUgorICAgICAgICBjcmxGbGFncyA9IFdPTEZTU0xfQ1JMX01PTklUT1IgfCBXT0xGU1NMX0NSTF9TVEFSVF9NT047CisjZW5kaWYKKyAgICAgICAgaWYgKHdvbGZTU0xfRW5hYmxlQ1JMKHNzbCwgMCkgIT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAidW5hYmxlIHRvIGVuYWJsZSBDUkwiKTsKKyAgICAgICAgaWYgKHdvbGZTU0xfTG9hZENSTChzc2wsIGNybFBlbURpciwgV09MRlNTTF9GSUxFVFlQRV9QRU0sIGNybEZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgInVuYWJsZSB0byBsb2FkIENSTCIpOworICAgICAgICBpZiAod29sZlNTTF9TZXRDUkxfQ2Ioc3NsLCBDUkxfQ2FsbEJhY2spICE9IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgInVuYWJsZSB0byBzZXQgQ1JMIGNhbGxiYWNrIHVybCIpOworICAgIH0KKyNlbmRpZgorI2lmZGVmIEhBVkVfT0NTUAorICAgICAgICBpZiAodXNlT2NzcCkgeworICAgICAgICAgICAgaWYgKG9jc3BVcmwgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX1NldE9DU1BfT3ZlcnJpZGVVUkwoY3R4LCBvY3NwVXJsKTsKKyAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9FbmFibGVPQ1NQKGN0eCwgV09MRlNTTF9PQ1NQX05PX05PTkNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdPTEZTU0xfT0NTUF9VUkxfT1ZFUlJJREUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHdvbGZTU0xfQ1RYX0VuYWJsZU9DU1AoY3R4LCBXT0xGU1NMX09DU1BfTk9fTk9OQ0UpOworICAgICAgICB9CisjaWZuZGVmIE5PX1JTQQorICAgIC8qIEFsbCB0aGUgT1NDUCBTdGFwbGluZyB0ZXN0IGNlcnRzIGFyZSBSU0EuICovCisjaWYgZGVmaW5lZChIQVZFX0NFUlRJRklDQVRFX1NUQVRVU19SRVFVRVNUKSBcCisgICAgfHwgZGVmaW5lZChIQVZFX0NFUlRJRklDQVRFX1NUQVRVU19SRVFVRVNUX1YyKQorICAgICAgICB7IC8qIHNjb3BlIHN0YXJ0ICovCisgICAgICAgICAgICBjb25zdCBjaGFyKiBjYTEgPSAiY2VydHMvb2NzcC9pbnRlcm1lZGlhdGUxLWNhLWNlcnQucGVtIjsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNhMiA9ICJjZXJ0cy9vY3NwL2ludGVybWVkaWF0ZTItY2EtY2VydC5wZW0iOworICAgICAgICAgICAgY29uc3QgY2hhciogY2EzID0gImNlcnRzL29jc3AvaW50ZXJtZWRpYXRlMy1jYS1jZXJ0LnBlbSI7CisgICAgICAgICAgICBpbnQgZmFpbHMgPSAwOworCisgICAgICAgICAgICBpZiAod29sZlNTTF9DVFhfRW5hYmxlT0NTUFN0YXBsaW5nKGN0eCkgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsICJjYW4ndCBlbmFibGUgT0NTUCBTdGFwbGluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2VydGlmaWNhdGUgTWFuYWdlciIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eCwgY2ExLCAwKSAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBmYWlscysrOworICAgICAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgImNhbid0IGxvYWQgY2EgZmlsZSwgUGxlYXNlIHJ1biBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2xmU1NMIGhvbWUgZGlyIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY3R4LCBjYTIsIDApICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGZhaWxzKys7CisgICAgICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiY2FuJ3QgbG9hZCBjYSBmaWxlLCBQbGVhc2UgcnVuIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvbGZTU0wgaG9tZSBkaXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjdHgsIGNhMywgMCkgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgZmFpbHMrKzsKKyAgICAgICAgICAgICAgICBlcnJfc3lzX2V4KHJ1bldpdGhFcnJvcnMsICJjYW4ndCBsb2FkIGNhIGZpbGUsIFBsZWFzZSBydW4gZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAid29sZlNTTCBob21lIGRpciIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZhaWxzID4gMikgeworICAgICAgICAgICAgICAgIGVycl9zeXNfZXgoY2F0YXN0cm9waGljLCAiRmFpbGVkIHRvIGxvYWQgYW55IGludGVybWVkaWF0ZXMgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJPQ1NQIHN0YXBsaW5nIHRlc3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAvKiBzY29wZSBlbmQgKi8KKyNlbmRpZiAvKiBIQVZFX0NFUlRJRklDQVRFX1NUQVRVU19SRVFVRVNUIEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1RfVjIgKi8KKyNlbmRpZiAvKiBOT19SU0EgKi8KKyNlbmRpZiAvKiBIQVZFX09DU1AgKi8KKworI2lmZGVmIEhBVkVfUEtfQ0FMTEJBQ0tTCisgICAgICAgIGlmIChwa0NhbGxiYWNrcykKKyAgICAgICAgICAgIFNldHVwUGtDYWxsYmFja0NvbnRleHRzKHNzbCwgJnBrQ2JJbmZvKTsKKyNlbmRpZgorCisgICAgI2lmIGRlZmluZWQoV09MRlNTTF9UTFMxMykgJiYgZGVmaW5lZChIQVZFX1NVUFBPUlRFRF9DVVJWRVMpCisgICAgICAgIGlmICh2ZXJzaW9uID49IDQpIHsKKyAgICAgICAgICAgIFNldEtleVNoYXJlKHNzbCwgb25seUtleVNoYXJlLCB1c2VYMjU1MTksIHVzZVg0NDgpOyAgIAorICAgICAgICB9CisgICAgI2VuZGlmCisKKyAgICAjaWZkZWYgSEFWRV9FTkNSWVBUX1RIRU5fTUFDCisgICAgICAgIGlmIChkaXNhbGxvd0VUTSkKKyAgICAgICAgICAgIHdvbGZTU0xfQWxsb3dFbmNyeXB0VGhlbk1hYyhzc2wsIDApOworICAgICNlbmRpZgorCisKKyAgICAgICAgLyogZG8gYWNjZXB0ICovCisgICAgICAgIHJlYWR5U2lnbmFsID0gKChmdW5jX2FyZ3MqKWFyZ3MpLT5zaWduYWw7CisgICAgICAgIGlmIChyZWFkeVNpZ25hbCkgeworICAgICAgICAgICAgcmVhZHlTaWduYWwtPnNyZk5hbWUgPSBzZXJ2ZXJSZWFkeUZpbGU7CisgICAgICAgIH0KKworICAgICAgICBjbGllbnRfbGVuID0gc2l6ZW9mIGNsaWVudF9hZGRyOworICAgICAgICB0Y3BfYWNjZXB0KCZzb2NrZmQsICZjbGllbnRmZCwgKGZ1bmNfYXJncyopYXJncywgcG9ydCwgdXNlQW55QWRkciwKKyAgICAgICAgICAgICAgICAgICBkdGxzVURQLCBkdGxzU0NUUCwgc2VydmVyUmVhZHlGaWxlID8gMSA6IDAsIGRvTGlzdGVuLAorICAgICAgICAgICAgICAgICAgICZjbGllbnRfYWRkciwgJmNsaWVudF9sZW4pOworCisgICAgICAgIGRvTGlzdGVuID0gMDsgLyogRG9uJ3QgbGlzdGVuIG5leHQgdGltZSAqLworCisgICAgICAgIGlmIChwb3J0ID09IDApIHsKKyAgICAgICAgICAgIHBvcnQgPSByZWFkeVNpZ25hbC0+cG9ydDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChTU0xfc2V0X2ZkKHNzbCwgY2xpZW50ZmQpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsICJlcnJvciBpbiBzZXR0aW5nIGZkIik7CisgICAgICAgIH0KKworI2lmZGVmIEhBVkVfVFJVU1RFRF9DQQorICAgICAgICBpZiAodHJ1c3RlZENhS2V5SWQpIHsKKyAgICAgICAgICAgIGlmICh3b2xmU1NMX1VzZVRydXN0ZWRDQShzc2wsIFdPTEZTU0xfVFJVU1RFRF9DQV9QUkVfQUdSRUVELAorICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCkgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiVXNlVHJ1c3RlZENBIGZhaWxlZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogSEFWRV9UUlVTVEVEX0NBICovCisKKyNpZmRlZiBIQVZFX0FMUE4KKyAgICAgICAgaWYgKGFscG5MaXN0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHByaW50ZigiQUxQTiBhY2NlcHRlZCBwcm90b2NvbHMgbGlzdCA6ICVzXG4iLCBhbHBuTGlzdCk7CisgICAgICAgICAgICB3b2xmU1NMX1VzZUFMUE4oc3NsLCBhbHBuTGlzdCwgKHdvcmQzMilYU1RSTEVOKGFscG5MaXN0KSwgYWxwbl9vcHQpOworICAgICAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF9EVExTKSAmJiBkZWZpbmVkKFVTRV9XT0xGU1NMX0lPKQorICAgICAgICBpZiAoZG9EVExTICYmIGR0bHNVRFApIHsKKyAgICAgICAgICAgIGJ5dGUgICAgICAgICAgYlsxNTAwXTsKKyAgICAgICAgICAgIGludCAgICAgICAgICAgbjsKKworICAgICAgICAgICAgY2xpZW50X2xlbiA9IHNpemVvZiBjbGllbnRfYWRkcjsKKworICAgICAgICAgICAgLyogRm9yIERUTFMsIHBlZWsgYXQgdGhlIG5leHQgZGF0YWdyYW0gc28gd2UgY2FuIGdldCB0aGUgY2xpZW50J3MKKyAgICAgICAgICAgICAqIGFkZHJlc3MgYW5kIHNldCBpdCBpbnRvIHRoZSBzc2wgb2JqZWN0IGxhdGVyIHRvIGdlbmVyYXRlIHRoZQorICAgICAgICAgICAgICogY29va2llLiAqLworICAgICAgICAgICAgbiA9IChpbnQpcmVjdmZyb20oY2xpZW50ZmQsIChjaGFyKiliLCBzaXplb2YoYiksIE1TR19QRUVLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciopJmNsaWVudF9hZGRyLCAmY2xpZW50X2xlbik7CisgICAgICAgICAgICBpZiAobiA8PSAwKQorICAgICAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgInJlY3Zmcm9tIGZhaWxlZCIpOworCisgICAgICAgICAgICBpZiAoZG9CbG9ja1NlcSkgeworICAgICAgICAgICAgICAgIFhNRU1DUFkoJmR0bHNDdHgucGVlci5zYSwgJmNsaWVudF9hZGRyLCBjbGllbnRfbGVuKTsKKyAgICAgICAgICAgICAgICBkdGxzQ3R4LnBlZXIuc3ogPSBjbGllbnRfbGVuOworICAgICAgICAgICAgICAgIGR0bHNDdHgud2ZkID0gY2xpZW50ZmQ7CisgICAgICAgICAgICAgICAgZHRsc0N0eC5mYWlsT25jZSA9IDE7CisKKyAgICAgICAgICAgICAgICB3b2xmU1NMX1NldElPV3JpdGVDdHgoc3NsLCAmZHRsc0N0eCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB3b2xmU1NMX2R0bHNfc2V0X3BlZXIoc3NsLCAmY2xpZW50X2FkZHIsIGNsaWVudF9sZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfV09MRlNFTlRSWV9IT09LUworICAgICAgICB7CisgICAgICAgICAgICBTT0NLQUREUl9JTl9UIGxvY2FsX2FkZHI7CisgICAgICAgICAgICBzb2NrbGVuX3QgbG9jYWxfbGVuID0gc2l6ZW9mKGxvY2FsX2FkZHIpOworICAgICAgICAgICAgZ2V0c29ja25hbWUoY2xpZW50ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmbG9jYWxfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzb2NrbGVuX3QgKikmbG9jYWxfbGVuKTsKKworICAgICAgICAgICAgaWYgKCgoc3RydWN0IHNvY2thZGRyICopJmNsaWVudF9hZGRyKS0+c2FfZmFtaWx5ICE9CisgICAgICAgICAgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHIgKikmbG9jYWxfYWRkciktPnNhX2ZhbWlseSkKKyAgICAgICAgICAgICAgICBlcnJfc3lzX2V4KGNhdGFzdHJvcGhpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnRfYWRkci5zYV9mYW1pbHkgIT0gbG9jYWxfYWRkci5zYV9mYW1pbHkiKTsKKworICAgICAgICAgICAgaWYgKHdvbGZzZW50cnlfc3RvcmVfZW5kcG9pbnRzKAorICAgICAgICAgICAgICAgICAgICBzc2wsICZjbGllbnRfYWRkciwgJmxvY2FsX2FkZHIsCisgICAgICAgICAgICAgICAgICAgIGR0bHNVRFAgPyBJUFBST1RPX1VEUCA6IElQUFJPVE9fVENQLAorICAgICAgICAgICAgICAgICAgICBXT0xGU0VOVFJZX1JPVVRFX0ZMQUdfRElSRUNUSU9OX0lOLCBOVUxMKSAhPSBXT0xGU1NMX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgZXJyX3N5c19leChjYXRhc3Ryb3BoaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgaW4gd29sZnNlbnRyeV9zdG9yZV9lbmRwb2ludHMoKSIpOworICAgICAgICB9CisjZW5kaWYgLyogV09MRlNTTF9XT0xGU0VOVFJZX0hPT0tTICovCisKKyAgICAgICAgaWYgKCh1c2VQc2sgPT0gMCB8fCB1c2VQc2tQbHVzKSB8fCB1c2VBbm9uID09IDEgfHwgY2lwaGVyTGlzdCAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBuZWVkREggPT0gMSkgeworICAgICAgICAgICAgI2lmICFkZWZpbmVkKE5PX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKE5PX0RIKSAmJiAhZGVmaW5lZChOT19BU04pCisgICAgICAgICAgICAgICAgd29sZlNTTF9TZXRUbXBESF9maWxlKHNzbCwgb3VyRGhQYXJhbSwgV09MRlNTTF9GSUxFVFlQRV9QRU0pOworICAgICAgICAgICAgI2VsaWYgIWRlZmluZWQoTk9fREgpCisgICAgICAgICAgICAgICAgU2V0REgoc3NsKTsgIC8qIHJlcGljayBzdWl0ZXMgd2l0aCBESEUsIGhpZ2hlciBwcmlvcml0eSB0aGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFBTSyAqLworICAgICAgICAgICAgI2VuZGlmCisjaWYgIWRlZmluZWQoTk9fREgpICYmICFkZWZpbmVkKFdPTEZTU0xfT0xEX1BSSU1FX0NIRUNLKSAmJiBcCisgICAgIWRlZmluZWQoSEFWRV9GSVBTKSAmJiAhZGVmaW5lZChIQVZFX1NFTEZURVNUKQorICAgICAgICAgICAgaWYgKCFkb0RoS2V5Q2hlY2spCisgICAgICAgICAgICAgICAgd29sZlNTTF9TZXRFbmFibGVEaEtleVRlc3Qoc3NsLCAwKTsKKyNlbmRpZgorICAgICAgICB9CisKKyNpZm5kZWYgV09MRlNTTF9DQUxMQkFDS1MKKyAgICAgICAgaWYgKG5vbkJsb2NraW5nKSB7CisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9EVExTCisgICAgICAgICAgICBpZiAoZG9EVExTKSB7CisgICAgICAgICAgICAgICAgd29sZlNTTF9kdGxzX3NldF91c2luZ19ub25ibG9jayhzc2wsIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICB0Y3Bfc2V0X25vbmJsb2NraW5nKCZjbGllbnRmZCk7CisKKyAgICAgICAgICAgIHJldCA9IE5vbkJsb2NraW5nU1NMX0FjY2VwdChzc2wpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICNpZmRlZiBXT0xGU1NMX0VBUkxZX0RBVEEKKyAgICAgICAgICAgIGlmIChlYXJseURhdGEpIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAgICAgIGVyciA9IDA7IC8qIHJlc2V0IGVycm9yICovCisgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfcmVhZF9lYXJseV9kYXRhKHNzbCwgaW5wdXQsIHNpemVvZihpbnB1dCktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX0FTWU5DX0NSWVBUCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IFdDX1BFTkRJTkdfRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT0xGX1BPTExfRkxBR19DSEVDS19IVyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbcmV0XSA9IDA7IC8qIG51bGwgdGVybWluYXRlIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRWFybHkgRGF0YSBDbGllbnQgbWVzc2FnZTogJXNcbiIsIGlucHV0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UgfHwgcmV0ID4gMCk7CisgICAgICAgICAgICB9CisgICAgI2VuZGlmCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgZXJyID0gMDsgLyogcmVzZXQgZXJyb3IgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBTU0xfYWNjZXB0KHNzbCk7CisjaWZkZWYgV09MRlNTTF9FQVJMWV9EQVRBCisgICAgICAgICAgICAgICAgRWFybHlEYXRhU3RhdHVzKHNzbCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAgICAgI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoZXJyID09IFdDX1BFTkRJTkdfRSk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHJldCA9IE5vbkJsb2NraW5nU1NMX0FjY2VwdChzc2wpOworI2VuZGlmCisgICAgICAgIGlmIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICBwcmludGYoIlNTTF9hY2NlcHQgZXJyb3IgJWQsICVzXG4iLCBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGVyciwgYnVmZmVyKSk7CisgICAgICAgICAgICBpZiAoIWV4aXRXaXRoUmV0KSB7CisgICAgICAgICAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiU1NMX2FjY2VwdCBmYWlsZWQiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogY2xlYW51cCAqLworICAgICAgICAgICAgICAgIFNTTF9mcmVlKHNzbCk7IHNzbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICAgICAgQ2xvc2VTb2NrZXQoY2xpZW50ZmQpOworICAgICAgICAgICAgICAgIENsb3NlU29ja2V0KHNvY2tmZCk7CisgICAgICAgICAgICAgICAgKChmdW5jX2FyZ3MqKWFyZ3MpLT5yZXR1cm5fY29kZSA9IGVycjsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzaG93UGVlckV4KHNzbCwgbG5nX2luZGV4KTsKKyAgICAgICAgaWYgKFNTTF9zdGF0ZShzc2wpICE9IDApIHsKKyAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgIlNTTCBpbiBlcnJvciBzdGF0ZSIpOworICAgICAgICB9CisKKyAgICAgICAgLyogaWYgdGhlIGNhbGxlciByZXF1ZXN0ZWQgYSBwYXJ0aWN1bGFyIGNpcGhlciwgY2hlY2sgaGVyZSB0aGF0IGVpdGhlcgorICAgICAgICAgKiBhIGNhbm9uaWNhbCBuYW1lIG9mIHRoZSBlc3RhYmxpc2hlZCBjaXBoZXIgbWF0Y2hlcyB0aGUgcmVxdWVzdGVkCisgICAgICAgICAqIGNpcGhlciBuYW1lLCBvciB0aGUgcmVxdWVzdGVkIGNpcGhlciBuYW1lIGlzIG1hcmtlZCBhcyBhbiBhbGlhcworICAgICAgICAgKiB0aGF0IG1hdGNoZXMgdGhlIGVzdGFibGlzaGVkIGNpcGhlci4KKyAgICAgICAgICovCisgICAgICAgIGlmIChjaXBoZXJMaXN0ICYmICF1c2VEZWZDaXBoZXJMaXN0ICYmICghIFhTVFJTVFIoY2lwaGVyTGlzdCwgIjoiKSkpIHsKKyAgICAgICAgICAgIFdPTEZTU0xfQ0lQSEVSKiBlc3RhYmxpc2hlZF9jaXBoZXIgPSB3b2xmU1NMX2dldF9jdXJyZW50X2NpcGhlcihzc2wpOworICAgICAgICAgICAgYnl0ZSByZXF1ZXN0ZWRfY2lwaGVyU3VpdGUwLCByZXF1ZXN0ZWRfY2lwaGVyU3VpdGU7CisgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2NpcGhlckZsYWdzOworICAgICAgICAgICAgaWYgKGVzdGFibGlzaGVkX2NpcGhlciAmJgorICAgICAgICAgICAgICAgIC8qIGRvbid0IHRlc3QgZm9yIHBzZXVkby1jaXBoZXJzIGxpa2UgIkFMTCIgYW5kICJERUZBVUxUIi4gKi8KKyAgICAgICAgICAgICAgICAod29sZlNTTF9nZXRfY2lwaGVyX3N1aXRlX2Zyb21fbmFtZShjaXBoZXJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXF1ZXN0ZWRfY2lwaGVyU3VpdGUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXF1ZXN0ZWRfY2lwaGVyU3VpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlcXVlc3RlZF9jaXBoZXJGbGFncykgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICB3b3JkMzIgZXN0YWJsaXNoZWRfY2lwaGVyX2lkID0gd29sZlNTTF9DSVBIRVJfZ2V0X2lkKGVzdGFibGlzaGVkX2NpcGhlcik7CisgICAgICAgICAgICAgICAgYnl0ZSBlc3RhYmxpc2hlZF9jaXBoZXJTdWl0ZTAgPSAoZXN0YWJsaXNoZWRfY2lwaGVyX2lkID4+IDgpICYgMHhmZjsKKyAgICAgICAgICAgICAgICBieXRlIGVzdGFibGlzaGVkX2NpcGhlclN1aXRlID0gZXN0YWJsaXNoZWRfY2lwaGVyX2lkICYgMHhmZjsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplc3RhYmxpc2hlZF9jaXBoZXJfbmFtZSA9CisgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfZ2V0X2NpcGhlcl9uYW1lX2Zyb21fc3VpdGUoZXN0YWJsaXNoZWRfY2lwaGVyU3VpdGUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFibGlzaGVkX2NpcGhlclN1aXRlKTsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplc3RhYmxpc2hlZF9jaXBoZXJfbmFtZV9pYW5hID0KKyAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9nZXRfY2lwaGVyX25hbWVfaWFuYV9mcm9tX3N1aXRlKGVzdGFibGlzaGVkX2NpcGhlclN1aXRlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFibGlzaGVkX2NpcGhlclN1aXRlKTsKKworICAgICAgICAgICAgICAgIGlmIChlc3RhYmxpc2hlZF9jaXBoZXJfbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBlcnJfc3lzX2V4KGNhdGFzdHJvcGhpYywgImVycm9yIGxvb2tpbmcgdXAgbmFtZSBvZiBlc3RhYmxpc2hlZCBjaXBoZXIiKTsKKworICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoY2lwaGVyTGlzdCwgZXN0YWJsaXNoZWRfY2lwaGVyX25hbWUpICYmCisgICAgICAgICAgICAgICAgICAgICgoZXN0YWJsaXNoZWRfY2lwaGVyX25hbWVfaWFuYSA9PSBOVUxMKSB8fAorICAgICAgICAgICAgICAgICAgICAgc3RyY21wKGNpcGhlckxpc3QsIGVzdGFibGlzaGVkX2NpcGhlcl9uYW1lX2lhbmEpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoISAocmVxdWVzdGVkX2NpcGhlckZsYWdzICYgV09MRlNTTF9DSVBIRVJfU1VJVEVfRkxBR19OQU1FQUxJQVMpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJyX3N5c19leCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRhc3Ryb3BoaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgbWlzbWF0Y2ggYmV0d2VlbiBuYW1lcyBvZiByZXF1ZXN0ZWQgYW5kIGVzdGFibGlzaGVkIGNpcGhlcnMuIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChyZXF1ZXN0ZWRfY2lwaGVyU3VpdGUwICE9IGVzdGFibGlzaGVkX2NpcGhlclN1aXRlMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3RlZF9jaXBoZXJTdWl0ZSAhPSBlc3RhYmxpc2hlZF9jaXBoZXJTdWl0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJfc3lzX2V4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGFzdHJvcGhpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzbWF0Y2ggYmV0d2VlbiBJRHMgb2YgcmVxdWVzdGVkIGFuZCBlc3RhYmxpc2hlZCBjaXBoZXJzLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChPUEVOU1NMX0VYVFJBKSB8fCBkZWZpbmVkKEhBVkVfU0VDUkVUX0NBTExCQUNLKQorICAgIHsKKyAgICAgICAgYnl0ZSogIHJuZCA9IE5VTEw7CisgICAgICAgIGJ5dGUqICBwdDsKKyAgICAgICAgc2l6ZV90IHNpemU7CisKKyAgICAgICAgLyogZ2V0IHNpemUgb2YgYnVmZmVyIHRoZW4gcHJpbnQgKi8KKyAgICAgICAgc2l6ZSA9IHdvbGZTU0xfZ2V0X3NlcnZlcl9yYW5kb20oTlVMTCwgTlVMTCwgMCk7CisgICAgICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgImVycm9yIGdldHRpbmcgc2VydmVyIHJhbmRvbSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAic2l6ZSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcm5kID0gKGJ5dGUqKVhNQUxMT0Moc2l6ZSwgTlVMTCwgRFlOQU1JQ19UWVBFX1RNUF9CVUZGRVIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJuZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJfc3lzX2V4KHJ1bldpdGhFcnJvcnMsICJlcnJvciBjcmVhdGluZyBzZXJ2ZXIgcmFuZG9tIGJ1ZmZlciIpOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZSA9IHdvbGZTU0xfZ2V0X3NlcnZlcl9yYW5kb20oc3NsLCBybmQsIHNpemUpOworICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICBpZiAocm5kKSB7CisgICAgICAgICAgICAgICAgWEZSRUUocm5kLCBOVUxMLCBEWU5BTUlDX1RZUEVfVE1QX0JVRkZFUik7CisgICAgICAgICAgICAgICAgcm5kID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVycl9zeXNfZXgocnVuV2l0aEVycm9ycywgImVycm9yIGdldHRpbmcgc2VydmVyIHJhbmRvbSBidWZmZXIiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChybmQpIHsKKyAgICAgICAgICAgIHByaW50ZigiU2VydmVyIFJhbmRvbSA6ICIpOworICAgICAgICAgICAgZm9yIChwdCA9IHJuZDsgcHQgPCBybmQgKyBzaXplOyBwdCsrKSBwcmludGYoIiUwMlgiLCAqcHQpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworCisgICAgICAgICAgICBYRlJFRShybmQsIE5VTEwsIERZTkFNSUNfVFlQRV9UTVBfQlVGRkVSKTsKKyAgICAgICAgICAgIHJuZCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQUxQTgorICAgICAgICBpZiAoYWxwbkxpc3QgIT0gTlVMTCkgeworICAgICAgICAgICAgY2hhciAqcHJvdG9jb2xfbmFtZSA9IE5VTEwsICpsaXN0ID0gTlVMTDsKKyAgICAgICAgICAgIHdvcmQxNiBwcm90b2NvbF9uYW1lU3ogPSAwLCBsaXN0U3ogPSAwOworCisgICAgICAgICAgICBlcnIgPSB3b2xmU1NMX0FMUE5fR2V0UHJvdG9jb2woc3NsLCAmcHJvdG9jb2xfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvdG9jb2xfbmFtZVN6KTsKKyAgICAgICAgICAgIGlmIChlcnIgPT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgICAgIHByaW50ZigiU2VudCBBTFBOIHByb3RvY29sIDogJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfbmFtZSwgcHJvdG9jb2xfbmFtZVN6KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSBXT0xGU1NMX0FMUE5fTk9UX0ZPVU5EKQorICAgICAgICAgICAgICAgIHByaW50ZigiTm8gQUxQTiByZXNwb25zZSBzZW50IChubyBtYXRjaClcbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiR2V0dGluZyBBTFBOIHByb3RvY29sIG5hbWUgZmFpbGVkXG4iKTsKKworICAgICAgICAgICAgZXJyID0gd29sZlNTTF9BTFBOX0dldFBlZXJQcm90b2NvbChzc2wsICZsaXN0LCAmbGlzdFN6KTsKKyAgICAgICAgICAgIGlmIChlcnIgPT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICAgICAgICAgIHByaW50ZigiTGlzdCBvZiBwcm90b2NvbCBuYW1lcyBzZW50IGJ5IENsaWVudDogJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbGlzdCwgbGlzdFN6KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIkdldCBsaXN0IG9mIGNsaWVudCdzIHByb3RvY29sIG5hbWUgZmFpbGVkXG4iKTsKKworICAgICAgICAgICAgZnJlZShsaXN0KTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgaWYgKGVjaG9EYXRhID09IDAgJiYgdGhyb3VnaHB1dCA9PSAwKSB7CisgICAgICAgICAgICBTZXJ2ZXJSZWFkKHNzbCwgaW5wdXQsIHNpemVvZihpbnB1dCktMSk7CisgICAgICAgICAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTikgJiYgXAorICAgIGRlZmluZWQoSEFWRV9TRVJWRVJfUkVORUdPVElBVElPTl9JTkZPKQorICAgICAgICBpZiAoc2NyICYmIGZvcmNlU2NyKSB7CisgICAgICAgICAgICBpZiAobm9uQmxvY2tpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHJldCA9IHdvbGZTU0xfUmVoYW5kc2hha2Uoc3NsKSkgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1dSSVRFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBBUFBfREFUQV9SRUFEWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJldCA9IHdvbGZTU0xfcmVhZChzc2wsIGlucHV0LCBzaXplb2YoaW5wdXQpLTEpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl9zeXMoIkFQUCBEQVRBIHNob3VsZCBiZSBwcmVzZW50IGJ1dCBlcnJvciByZXR1cm5lZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUmVjZWl2ZWQgbWVzc2FnZTogJXNcbiIsIGlucHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJldCA9IHdvbGZTU0xfYWNjZXB0KHNzbCkpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSB3b2xmU1NMX2dldF9lcnJvcihzc2wsIHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyID09IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID09IFdPTEZTU0xfRVJST1JfV0FOVF9XUklURSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9PSBBUFBfREFUQV9SRUFEWSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ3b2xmU1NMX1JlaGFuZHNoYWtlIGVycm9yICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0VSUl9lcnJvcl9zdHJpbmcoZXJyLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX3N5cygibm9uLWJsb2NraW5nIHdvbGZTU0xfUmVoYW5kc2hha2UgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIk5PTi1CTE9DS0lORyBSRU5FR09USUFUSU9OIFNVQ0NFU1NGVUxcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ3b2xmU1NMX1JlaGFuZHNoYWtlIGVycm9yICVkLCAlc1xuIiwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZyhlcnIsIGJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgd29sZlNTTF9mcmVlKHNzbCk7IHNzbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJfc3lzKCJub24tYmxvY2tpbmcgd29sZlNTTF9SZWhhbmRzaGFrZSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKChyZXQgPSB3b2xmU1NMX1JlaGFuZHNoYWtlKHNzbCkpICE9IFdPTEZTU0xfU1VDQ0VTUykgeworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gd29sZlNTTF9nZXRfZXJyb3Ioc3NsLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVyciA9PSBXQ19QRU5ESU5HX0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX25lZ290aWF0ZShzc2wpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSB3b2xmU1NMX2dldF9lcnJvcihzc2wsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gV0NfUEVORElOR19FKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfQXN5bmNQb2xsKHNzbCwgV09MRl9QT0xMX0ZMQUdfQ0hFQ0tfSFcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTKQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIm5vdCBkb2luZyBzZWN1cmUgcmVuZWdvdGlhdGlvblxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlJFTkVHT1RJQVRJT04gU1VDQ0VTU0ZVTFxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTiAqLworCisgICAgICAgIGlmIChlcnIgPT0gMCAmJiBlY2hvRGF0YSA9PSAwICYmIHRocm91Z2hwdXQgPT0gMCkgeworICAgICAgICAgICAgY29uc3QgY2hhciogd3JpdGVfbXNnOworICAgICAgICAgICAgaW50IHdyaXRlX21zZ19zejsKKworI2lmZGVmIFdPTEZTU0xfVExTMTMKKyAgICAgICAgICAgIGlmICh1cGRhdGVLZXlzSVZzKQorICAgICAgICAgICAgICAgIHdvbGZTU0xfdXBkYXRlX2tleXMoc3NsKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9UTFMxMykgJiYgZGVmaW5lZChXT0xGU1NMX1BPU1RfSEFORFNIQUtFX0FVVEgpCisgICAgICAgICAgICBpZiAocG9zdEhhbmRBdXRoKQorICAgICAgICAgICAgICAgIHdvbGZTU0xfcmVxdWVzdF9jZXJ0aWZpY2F0ZShzc2wpOworI2VuZGlmCisKKyAgICAgICAgICAgIC8qIFdyaXRlIGRhdGEgKi8KKyAgICAgICAgICAgIGlmICghdXNlV2ViU2VydmVyTXNnKSB7CisgICAgICAgICAgICAgICAgd3JpdGVfbXNnID0ga1JlcGx5TXNnOworICAgICAgICAgICAgICAgIHdyaXRlX21zZ19zeiA9IChpbnQpWFNUUkxFTihrUmVwbHlNc2cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgd3JpdGVfbXNnID0ga0h0dHBTZXJ2ZXJNc2c7CisgICAgICAgICAgICAgICAgd3JpdGVfbXNnX3N6ID0gKGludClYU1RSTEVOKGtIdHRwU2VydmVyTXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNlcnZlcldyaXRlKHNzbCwgd3JpdGVfbXNnLCB3cml0ZV9tc2dfc3opOworCisjaWZkZWYgV09MRlNTTF9UTFMxMworICAgICAgICAgICAgaWYgKHVwZGF0ZUtleXNJVnMgfHwgcG9zdEhhbmRBdXRoKQorICAgICAgICAgICAgICAgIFNlcnZlclJlYWQoc3NsLCBpbnB1dCwgc2l6ZW9mKGlucHV0KS0xKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwIHx8IGVyciA9PSBXT0xGU1NMX0VSUk9SX1pFUk9fUkVUVVJOKSB7CisgICAgICAgICAgICBlcnIgPSBTZXJ2ZXJFY2hvRGF0YShzc2wsIGNsaWVudGZkLCBlY2hvRGF0YSwgYmxvY2ssIHRocm91Z2hwdXQpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgU1NMX2ZyZWUoc3NsKTsgc3NsID0gTlVMTDsKKyAgICAgICAgICAgICAgICBTU0xfQ1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBDbG9zZVNvY2tldChjbGllbnRmZCk7CisgICAgICAgICAgICAgICAgQ2xvc2VTb2NrZXQoc29ja2ZkKTsKKyAgICAgICAgICAgICAgICAoKGZ1bmNfYXJncyopYXJncyktPnJldHVybl9jb2RlID0gZXJyOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChXT0xGU1NMX01ES19TSEVMTCkgJiYgZGVmaW5lZChIQVZFX01ES19SVFgpCisgICAgICAgIG9zX2RseV93YWl0KDUwMCkgOworI2VsaWYgZGVmaW5lZCAoV09MRlNTTF9USVJUT1MpCisgICAgICAgIFRhc2tfeWllbGQoKTsKKyNlbmRpZgorCisgICAgICAgIGlmIChkdGxzVURQID09IDApIHsKKyAgICAgICAgICAgIHJldCA9IFNTTF9zaHV0ZG93bihzc2wpOworICAgICAgICAgICAgaWYgKHdjX3NodXRkb3duICYmIHJldCA9PSBXT0xGU1NMX1NIVVRET1dOX05PVF9ET05FKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gU1NMX3NodXRkb3duKHNzbCk7IC8qIGJpZGlyZWN0aW9uYWwgc2h1dGRvd24gKi8KKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFdPTEZTU0xfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJCaWRpcmVjdGlvbmFsIHNodXRkb3duIGNvbXBsZXRlXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIGRpc3BsYXkgY29sbGVjdGVkIHN0YXRpc3RpY3MgKi8KKyNpZmRlZiBXT0xGU1NMX1NUQVRJQ19NRU1PUlkKKyAgICAgICAgaWYgKHdvbGZTU0xfaXNfc3RhdGljX21lbW9yeShzc2wsICZzc2xfc3RhdHMpICE9IDEpCisgICAgICAgICAgICBlcnJfc3lzX2V4KHJ1bldpdGhFcnJvcnMsICJzdGF0aWMgbWVtb3J5IHdhcyBub3QgdXNlZCB3aXRoIHNzbCIpOworCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5wcmludCBvZmYgU1NMIG1lbW9yeSBzdGF0c1xuIik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKioqIFRoaXMgaXMgbWVtb3J5IHN0YXRlIGJlZm9yZSB3b2xmU1NMX2ZyZWUgaXMgIgorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBlYWsgY29ubmVjdGlvbiBtZW1vcnkgPSAlZFxuIiwgc3NsX3N0YXRzLnBlYWtNZW0pOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImN1cnJlbnQgbWVtb3J5IGluIHVzZSAgPSAlZFxuIiwgc3NsX3N0YXRzLmN1ck1lbSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicGVhayBjb25uZWN0aW9uIGFsbG9jcyA9ICVkXG4iLCBzc2xfc3RhdHMucGVha0FsbG9jKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJjdXJyZW50IGNvbm5lY3Rpb24gYWxsb2NzID0gJWRcbiIsc3NsX3N0YXRzLmN1ckFsbG9jKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0b3RhbCBjb25uZWN0aW9uIGFsbG9jcyAgID0gJWRcbiIsCisgICAgICAgICAgICAgICAgc3NsX3N0YXRzLnRvdGFsQWxsb2MpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRvdGFsIGNvbm5lY3Rpb24gZnJlZXMgICAgPSAlZFxuXG4iLAorICAgICAgICAgICAgICAgIHNzbF9zdGF0cy50b3RhbEZyKTsKKworI2VuZGlmCisgICAgICAgIFNTTF9mcmVlKHNzbCk7IHNzbCA9IE5VTEw7CisKKyAgICAgICAgQ2xvc2VTb2NrZXQoY2xpZW50ZmQpOworCisgICAgICAgIGlmIChyZXN1bWUgPT0gMSAmJiByZXN1bWVDb3VudCA9PSAwKSB7CisgICAgICAgICAgICByZXN1bWVDb3VudCsrOyAgICAgICAgICAgLyogb25seSBkbyBvbmUgcmVzdW1lIGZvciB0ZXN0aW5nICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICByZXN1bWVDb3VudCA9IDA7CisKKyAgICAgICAgY250Kys7CisgICAgICAgIGlmIChsb29wcyA+IDAgJiYgLS1sb29wcyA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsgIC8qIG91dCBvZiB3aGlsZSBsb29wLCBkb25lIHdpdGggbm9ybWFsIGFuZCByZXN1bWUgb3B0aW9uICovCisgICAgICAgIH0KKyAgICB9IC8qIHdoaWxlKDEpICovCisKKyAgICBXT0xGU1NMX1RJTUUoY250KTsKKyAgICAodm9pZCljbnQ7CisKKyNpZiBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1QpIFwKKyB8fCBkZWZpbmVkKEhBVkVfQ0VSVElGSUNBVEVfU1RBVFVTX1JFUVVFU1RfVjIpCisgICAgd29sZlNTTF9DVFhfRGlzYWJsZU9DU1BTdGFwbGluZyhjdHgpOworI2VuZGlmCisKKyAgICBDbG9zZVNvY2tldChzb2NrZmQpOworICAgIFNTTF9DVFhfZnJlZShjdHgpOyBjdHggPSBOVUxMOworCisgICAgKChmdW5jX2FyZ3MqKWFyZ3MpLT5yZXR1cm5fY29kZSA9IDA7CisKK2V4aXQ6CisKKyNpZmRlZiBXT0xGU1NMX1dPTEZTRU5UUllfSE9PS1MKKyAgICB3b2xmc2VudHJ5X3JldCA9IHdvbGZzZW50cnlfc2h1dGRvd24oJndvbGZzZW50cnkpOworICAgIGlmICh3b2xmc2VudHJ5X3JldCA8IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgIndvbGZzZW50cnlfc2h1dGRvd24oKSByZXR1cm5lZCAiIFdPTEZTRU5UUllfRVJST1JfRk1UICJcbiIsCisgICAgICAgICAgICAgICAgV09MRlNFTlRSWV9FUlJPUl9GTVRfQVJHUyh3b2xmc2VudHJ5X3JldCkpOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0VDQykgJiYgZGVmaW5lZChGUF9FQ0MpICYmIGRlZmluZWQoSEFWRV9USFJFQURfTFMpIFwKKyAgICAgICAgICAgICAgICAgICAgICAmJiAoZGVmaW5lZChOT19NQUlOX0RSSVZFUikgfHwgZGVmaW5lZChIQVZFX1NUQUNLX1NJWkUpKQorICAgIHdjX2VjY19mcF9mcmVlKCk7ICAvKiBmcmVlIHBlciB0aHJlYWQgY2FjaGUgKi8KKyNlbmRpZgorCisjaWZkZWYgV09MRlNTTF9USVJUT1MKKyAgICBmZENsb3NlU2Vzc2lvbihUYXNrX3NlbGYoKSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TRVNTSU9OX1RJQ0tFVCkgJiYgZGVmaW5lZChXT0xGU1NMX05PX0RFRl9USUNLRVRfRU5DX0NCKSAmJiBcCisgICAgKChkZWZpbmVkKEhBVkVfQ0hBQ0hBKSAmJiBkZWZpbmVkKEhBVkVfUE9MWTEzMDUpKSB8fCBkZWZpbmVkKEhBVkVfQUVTR0NNKSkKKyAgICBUaWNrZXRDbGVhbnVwKCk7CisjZW5kaWYKKworI2lmZGVmIFdPTEZTU0xfQVNZTkNfQ1JZUFQKKyAgICB3b2xmQXN5bmNfRGV2Q2xvc2UoJmRldklkKTsKKyNlbmRpZgorCisgICAgLyogVGhlcmUgYXJlIHVzZSBjYXNlcyAgd2hlbiB0aGVzZSBhc3NpZ25tZW50cyBhcmUgbm90IHJlYWQuIFRvIGF2b2lkCisgICAgICogcG90ZW50aWFsIGNvbmZ1c2lvbiB0aG9zZSB3YXJuaW5ncyBoYXZlIGJlZW4gaGFuZGxlZCBoZXJlLgorICAgICAqLworICAgICh2b2lkKSBvdXJLZXk7CisgICAgKHZvaWQpIHZlcmlmeUNlcnQ7CisgICAgKHZvaWQpIGRvQ2xpQ2VydENoZWNrOworICAgICh2b2lkKSB1c2VOdHJ1S2V5OworICAgICh2b2lkKSBvdXJEaFBhcmFtOworICAgICh2b2lkKSBvdXJDZXJ0OworICAgICh2b2lkKSB1c2VYMjU1MTk7CisgICAgKHZvaWQpIHVzZVg0NDg7CisjaWZkZWYgSEFWRV9TRUNVUkVfUkVORUdPVElBVElPTgorICAgICh2b2lkKSBmb3JjZVNjcjsKKyNlbmRpZgorI2lmbmRlZiBXT0xGU1NMX1RJUlRPUworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiAhTk9fV09MRlNTTF9TRVJWRVIgKi8KKworCisvKiBzbyBvdmVyYWxsIHRlc3RzIGNhbiBwdWxsIGluIHRlc3QgZnVuY3Rpb24gKi8KKyNpZm5kZWYgTk9fTUFJTl9EUklWRVIKKworICAgIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKKyAgICB7CisgICAgICAgIGZ1bmNfYXJncyBhcmdzOworICAgICAgICB0Y3BfcmVhZHkgcmVhZHk7CisKKyAgICAgICAgU3RhcnRUQ1AoKTsKKworICAgICAgICBhcmdzLmFyZ2MgPSBhcmdjOworICAgICAgICBhcmdzLmFyZ3YgPSBhcmd2OworICAgICAgICBhcmdzLnNpZ25hbCA9ICZyZWFkeTsKKyAgICAgICAgYXJncy5yZXR1cm5fY29kZSA9IDA7CisgICAgICAgIEluaXRUY3BSZWFkeSgmcmVhZHkpOworCisjaWYgZGVmaW5lZChERUJVR19XT0xGU1NMKSAmJiAhZGVmaW5lZChXT0xGU1NMX01ES19TSEVMTCkKKyAgICAgICAgd29sZlNTTF9EZWJ1Z2dpbmdfT04oKTsKKyNlbmRpZgorICAgICAgICB3b2xmU1NMX0luaXQoKTsKKyAgICAgICAgQ2hhbmdlVG9Xb2xmUm9vdCgpOworCisjaWZuZGVmIE5PX1dPTEZTU0xfU0VSVkVSCisjaWZkZWYgSEFWRV9TVEFDS19TSVpFCisgICAgICAgIFN0YWNrU2l6ZUNoZWNrKCZhcmdzLCBzZXJ2ZXJfdGVzdCk7CisjZWxzZQorICAgICAgICBzZXJ2ZXJfdGVzdCgmYXJncyk7CisjZW5kaWYKKyNlbHNlCisgICAgICAgIHByaW50ZigiU2VydmVyIG5vdCBjb21waWxlZCBpbiFcbiIpOworI2VuZGlmCisKKyAgICAgICAgd29sZlNTTF9DbGVhbnVwKCk7CisgICAgICAgIEZyZWVUY3BSZWFkeSgmcmVhZHkpOworCisjaWZkZWYgSEFWRV9XTlIKKyAgICBpZiAod2NfRnJlZU5ldFJhbmRvbSgpIDwgMCkKKyAgICAgICAgZXJyX3N5c19leChydW5XaXRoRXJyb3JzLCAiRmFpbGVkIHRvIGZyZWUgbmV0UmFuZG9tIGNvbnRleHQiKTsKKyNlbmRpZiAvKiBIQVZFX1dOUiAqLworCisgICAgICAgIHJldHVybiBhcmdzLnJldHVybl9jb2RlOworICAgIH0KKworICAgIGludCBteW9wdGluZCA9IDA7CisgICAgY2hhciogbXlvcHRhcmcgPSBOVUxMOworCisjZW5kaWYgLyogTk9fTUFJTl9EUklWRVIgKi8KZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvZXhhbXBsZS90bHNfYmVuY2guYyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvZXhhbXBsZS90bHNfYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2JkZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC9leGFtcGxlL3Rsc19iZW5jaC5jCkBAIC0wLDAgKzEsMTk1MyBAQAorLyogdGxzX2JlbmNoLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSB3b2xmU1NMIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3b2xmU1NMLgorICoKKyAqIHdvbGZTU0wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHdvbGZTU0wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EKKyAqLworCisKKy8qCitFeGFtcGxlIGdjYyBidWlsZCBzdGF0ZW1lbnQKK2djYyAtbHdvbGZzc2wgLWxwdGhyZWFkIC1vIHRsc19iZW5jaCB0bHNfYmVuY2guYworLi90bHNfYmVuY2gKKworT3IKKworI2luY2x1ZGUgPGV4YW1wbGVzL2JlbmNobWFyay90bHNfYmVuY2guaD4KK2JlbmNoX3RscyhhcmdzKTsKKyovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAgICAjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpZm5kZWYgV09MRlNTTF9VU0VSX1NFVFRJTkdTCisgICAgI2luY2x1ZGUgPHdvbGZzc2wvb3B0aW9ucy5oPgorI2VuZGlmCisjaW5jbHVkZSA8d29sZnNzbC93b2xmY3J5cHQvc2V0dGluZ3MuaD4KKyNpbmNsdWRlIDx3b2xmc3NsL3NzbC5oPgorI2luY2x1ZGUgPHdvbGZzc2wvd29sZmNyeXB0L2hhc2guaD4gLyogV0NfTUFYX0RJR0VTVF9TSVpFICovCisjaW5jbHVkZSA8d29sZnNzbC90ZXN0Lmg+CisjaW5jbHVkZSA8d29sZnNzbC93b2xmaW8uaD4KKyNpbmNsdWRlIDxleGFtcGxlcy9iZW5jaG1hcmsvdGxzX2JlbmNoLmg+CisKKy8qIGZvcmNlIGNlcnRpZmljYXRlIHRlc3QgYnVmZmVycyB0byBiZSBpbmNsdWRlZCB2aWEgaGVhZGVycyAqLworI3VuZGVmICBVU0VfQ0VSVF9CVUZGRVJTXzIwNDgKKyNkZWZpbmUgVVNFX0NFUlRfQlVGRkVSU18yMDQ4CisjdW5kZWYgIFVTRV9DRVJUX0JVRkZFUlNfMjU2CisjZGVmaW5lIFVTRV9DRVJUX0JVRkZFUlNfMjU2CisjaW5jbHVkZSA8d29sZnNzbC9jZXJ0c190ZXN0Lmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyogRm9yIHRlc3Rpbmcgbm8gcHRocmVhZCBzdXBwb3J0ICovCisjaWYgMAorICAgICN1bmRlZiBIQVZFX1BUSFJFQUQKKyNlbmRpZgorCisvKiBQVEhSRUFEIHJlcXVpcmVzIHNlcnZlciBhbmQgY2xpZW50IGVuYWJsZWQgKi8KKyNpZiBkZWZpbmVkKEhBVkVfUFRIUkVBRCkgJiYgKGRlZmluZWQoTk9fV09MRlNTTF9DTElFTlQpIHx8IGRlZmluZWQoTk9fV09MRlNTTF9TRVJWRVIpKQorICAgICN1bmRlZiBIQVZFX1BUSFJFQUQKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9QVEhSRUFECisgICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgorCisjaWYgMAorI2RlZmluZSBCRU5DSF9VU0VfTk9OQkxPQ0sKKyNlbmRpZgorCisvKiBEZWZhdWx0cyBmb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCisjZGVmaW5lIEJFTkNIX0RFRkFVTFRfSE9TVCAgImxvY2FsaG9zdCIKKyNkZWZpbmUgQkVOQ0hfREVGQVVMVF9QT1JUICAxMTExMgorI2RlZmluZSBOVU1fVEhSRUFEX1BBSVJTICAgIDEgLyogVGhyZWFkIHBhaXJzIG9mIHNlcnZlci9jbGllbnQgKi8KKyNpZm5kZWYgQkVOQ0hfUlVOVElNRV9TRUMKKyAgICAjaWZkZWYgQkVOQ0hfRU1CRURERUQKKyAgICAgICAgI2RlZmluZSBCRU5DSF9SVU5USU1FX1NFQyAgIDE1CisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBCRU5DSF9SVU5USU1FX1NFQyAgIDEKKyAgICAjZW5kaWYKKyNlbmRpZgorLyogVExTIHBhY2tldCBzaXplICovCisjaWZuZGVmIFRFU1RfUEFDS0VUX1NJWkUKKyAgICAjaWZkZWYgQkVOQ0hfRU1CRURERUQKKyAgICAgICAgI2RlZmluZSBURVNUX1BBQ0tFVF9TSVpFICAgICgyICogMTAyNCkKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIFRFU1RfUEFDS0VUX1NJWkUgICAgKDE2ICogMTAyNCkKKyAgICAjZW5kaWYKKyNlbmRpZgorLyogVG90YWwgYnl0ZXMgdG8gYmVuY2htYXJrIHBlciBjb25uZWN0aW9uICovCisjaWZuZGVmIFRFU1RfTUFYX1NJWkUKKyAgICAjaWZkZWYgQkVOQ0hfRU1CRURERUQKKyAgICAgICAgI2RlZmluZSBURVNUX01BWF9TSVpFICAgICAgICgxNiAqIDEwMjQpCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBURVNUX01BWF9TSVpFICAgICAgICgxMjggKiAxMDI0KQorICAgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAjaWZkZWYgQkVOQ0hfRU1CRURERUQKKyAgICAgICAgLyogV09MRlNTTF9NQVhfTVRVIGluIGludGVybmFsLmggKi8KKyAgICAgICAgI2RlZmluZSBURVNUX0RUTFNfUEFDS0VUX1NJWkUgICAoMTUwMCkKKyAgICAjZWxzZQorICAgICAgICAvKiBNQVhfVURQX1NJWkUgaW4gaW50ZXJuYS5oICovCisgICAgICAgICNkZWZpbmUgVEVTVF9EVExTX1BBQ0tFVF9TSVpFICAgKDgwOTIpCisgICAgI2VuZGlmCisjZW5kaWYKKworLyogSW4gbWVtb3J5IHRyYW5zZmVyIGJ1ZmZlciBtYXhpbXVtIHNpemUgKi8KKy8qIE11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhhbmRsZSBtYXggVExTIHBhY2tldCBzaXplIHBsdXMgbWF4IFRMUyBoZWFkZXIgTUFYX01TR19FWFRSQSAqLworI2RlZmluZSBNRU1fQlVGRkVSX1NaICAgICAgIChURVNUX1BBQ0tFVF9TSVpFICsgMzggKyBXQ19NQVhfRElHRVNUX1NJWkUpCisjZGVmaW5lIFNIT1dfVkVSQk9TRSAgICAgICAgMCAvKiBEZWZhdWx0IG91dHB1dCBpcyB0YWIgZGVsaW1pdGVkIGZvcm1hdCAqLworCisjaWYgKCFkZWZpbmVkKE5PX1dPTEZTU0xfQ0xJRU5UKSB8fCAhZGVmaW5lZChOT19XT0xGU1NMX1NFUlZFUikpICYmIFwKKyAgICAhZGVmaW5lZChXT0xGQ1JZUFRfT05MWSkgJiYgZGVmaW5lZChVU0VfV09MRlNTTF9JTykKKworLyogc2h1dGRvd24gbWVzc2FnZSAtIG5pY2Ugc2lnbmFsIHRvIHNlcnZlciwgd2UgYXJlIGRvbmUgKi8KK3N0YXRpYyBjb25zdCBjaGFyKiBrU2h1dGRvd24gPSAic2h1dGRvd24iOworCisjaWZuZGVmIE5PX1dPTEZTU0xfQ0xJRU5UCitQRURBTlRJQ19FWFRFTlNJT04gc3RhdGljIGNvbnN0IGNoYXIqIGtUZXN0U3RyID0KKyJCaW9kaWVzZWwgY3VwaWRhdGF0IG1hcmZhLCBjbGljaGUgYXV0ZSBwdXQgYSBiaXJkIG9uIGl0IGluY2lkaWR1bnQgZWxpdFxuIgorInBvbGFyb2lkLiBTdW50IHRhdHRvb2VkIGJlc3Bva2UgcmVwcmVoZW5kZXJpdC4gU2ludCB0d2VlIG9yZ2FuaWMgaWRcbiIKKyJtYXJmYS4gQ29tbW9kbyB2ZW5pYW0gYWQgZXNzZSBnYXN0cm9wdWIuIDMgd29sZiBtb29uIHNhcnRvcmlhbCB2ZXJvLFxuIgorInBsYWlkIGRlbGVjdHVzIGJpb2RpZXNlbCBzcXVpZCArMSB2aWNlLiBQb3N0LWlyb25pYyBrZWZmaXllaCBsZWdnaW5nc1xuIgorInNlbGZpZXMgY3JheSBmYXAgaG9vZGllLCBmb3JhZ2UgYW5pbS4gQ2FybGVzIGN1cGlkYXRhdCBzaG9yZWRpdGNoLCBWSFNcbiIKKyJzbWFsbCBiYXRjaCBtZWdnaW5ncyBrb2dpIGRvbG9yZSBmb29kIHRydWNrIGJlc3Bva2UgZ2FzdHJvcHViLlxuIgorIlxuIgorIlRlcnJ5IHJpY2hhcmRzb24gYWRpcGlzaWNpbmcgYWN0dWFsbHkgdHlwZXdyaXRlciB0dW1ibHIsIHR3ZWUgd2hhdGV2ZXJcbiIKKyJmb3VyIGxva28geW91IHByb2JhYmx5IGhhdmVuJ3QgaGVhcmQgb2YgdGhlbSBoaWdoIGxpZmUuIE1lc3NlbmdlciBiYWdcbiIKKyJ3aGF0ZXZlciB0YXR0b29lZCBkZWVwIHYgbWxrc2hrLiBCcm9va2x5biBwaW50ZXJlc3QgYXNzdW1lbmRhIGNoaWxsd2F2ZVxuIgorImV0LCBiYW5rc3kgdWxsYW1jbyBtZXNzZW5nZXIgYmFnIHVtYW1pIHBhcmlhdHVyIGRpcmVjdCB0cmFkZSBmb3JhZ2UuXG4iCisiVHlwZXdyaXRlciBjdWxwYSB0cnktaGFyZCwgcGFyaWF0dXIgc2ludCBicm9va2x5biBtZWdnaW5ncy4gR2VudHJpZnlcbiIKKyJmb29kIHRydWNrIG5leHQgbGV2ZWwsIHRvdXNsZWQgaXJvbnkgbm9uIHNlbWlvdGljcyBQQlIgZXRoaWNhbCBhbmltIGNyZWRcbiIKKyJyZWFkeW1hZGUuIE11bWJsZWNvcmUgYnJ1bmNoIGxvbW8gb2RkIGZ1dHVyZSwgcG9ydGxhbmQgb3JnYW5pYyB0ZXJyeVxuIgorInJpY2hhcmRzb24gZWxpdCBsZWdnaW5ncyBhZGlwaXNpY2luZyBlbm51aSByYXcgZGVuaW0gYmFuam8gaGVsbGEuIEdvZGFyZFxuIgorIm1peHRhcGUgcG9sYXJvaWQsIHBvcmsgYmVsbHkgcmVhZHltYWRlIG9yZ2FuaWMgY3JheSB0eXBld3JpdGVyIGhlbHZldGljYVxuIgorImZvdXIgbG9rbyB3aGF0ZXZlciBzdHJlZXQgYXJ0IHlyIGZhcm0tdG8tdGFibGUuXG4iCisiXG4iCisiVmlueWwga2V5dGFyIHZpY2UgdG9mdS4gTG9jYXZvcmUgeW91IHByb2JhYmx5IGhhdmVuJ3QgaGVhcmQgb2YgdGhlbSBwdWdcbiIKKyJwaWNrbGVkLCBoZWxsYSB0b254IGxhYm9yZSB0cnVmZmF1dCBESVkgbWxrc2hrIGVsaXQgY29zYnkgc3dlYXRlciBzaW50XG4iCisiZXQgbXVtYmxlY29yZS4gRWxpdCBzd2FnIHNlbWlvdGljcywgcmVwcmVoZW5kZXJpdCBESVkgc2FydG9yaWFsIG5pc2kgdWdoXG4iCisibmVzY2l1bnQgcHVnIHBvcmsgYmVsbHkgd2F5ZmFyZXJzIHNlbGZpZXMgZGVsZWN0dXMuIEV0aGljYWwgaG9vZGllXG4iCisic2VpdGFuIGZpbmdlcnN0YWNoZSBrYWxlIGNoaXBzLiBUZXJyeSByaWNoYXJkc29uIGFydGlzYW4gd2lsbGlhbXNidXJnLFxuIgorImVpdXNtb2QgZmFubnkgcGFjayBpcm9ueSB0b254IGVubnVpIGxvLWZpIGluY2lkaWR1bnQgdG9mdSBZT0xPXG4iCisicmVhZHltYWRlLiA4LWJpdCBzZWQgZXRobmljIGJlYXJkIG9mZmljaWEuIFBvdXItb3ZlciBpcGhvbmUgRElZIGJ1dGNoZXIsXG4iCisiZXRobmljIGFydCBwYXJ0eSBxdWkgbGV0dGVycHJlc3MgbmlzaSBwcm9pZGVudCBqZWFuIHNob3J0cyBtbGtzaGtcbiIKKyJsb2Nhdm9yZS5cbiIKKyJcbiIKKyJOYXJ3aGFsIGZsZXhpdGFyaWFuIGxldHRlcnByZXNzLCBkbyBnbHV0ZW4tZnJlZSB2b2x1cHRhdGUgbmV4dCBsZXZlbFxuIgorImJhbmggbWkgdG9ueCBpbmNpZGlkdW50IGNhcmxlcyBESVkuIE9kZCBmdXR1cmUgbnVsbGEgOC1iaXQgYmVhcmQgdXRcbiIKKyJjaWxsdW0gcGlja2xlZCB2ZWxpdCwgWU9MTyBvZmZpY2lhIHlvdSBwcm9iYWJseSBoYXZlbid0IGhlYXJkIG9mIHRoZW1cbiIKKyJ0cnVzdCBmdW5kIGdhc3Ryb3B1Yi4gTmlzaSBhZGlwaXNpY2luZyB0YXR0b29lZCwgQXVzdGluIG1sa3NoayA5MCdzXG4iCisic21hbGwgYmF0Y2ggYW1lcmljYW4gYXBwYXJlbC4gUHV0IGEgYmlyZCBvbiBpdCBjb3NieSBzd2VhdGVyIGJlZm9yZSB0aGV5XG4iCisic29sZCBvdXQgcG9yayBiZWxseSBrb2dpIGhlbGxhLiBTdHJlZXQgYXJ0IG1vbGxpdCBzdXN0YWluYWJsZSBwb2xhcm9pZCxcbiIKKyJESVkgZXRobmljIGVhIHB1ZyBiZWFyZCBkcmVhbWNhdGNoZXIgY29zYnkgc3dlYXRlciBtYWduYSBzY2VuZXN0ZXIgbmlzaS5cbiIKKyJTZWQgcG9yayBiZWxseSBza2F0ZWJvYXJkIG1vbGxpdCwgbGFib3JlIHByb2lkZW50IGVpdXNtb2QuIFNyaXJhY2hhXG4iCisiZXhjZXB0ZXVyIGNvc2J5IHN3ZWF0ZXIsIGFuaW0gZGVzZXJ1bnQgbGFib3J1bSBldSBhbGlxdWlwIGV0aGljYWwgZXRcbiIKKyJuZXV0cmEgUEJSIHNlbHZhZ2UuXG4iCisiXG4iCisiUmF3IGRlbmltIHBvcmsgYmVsbHkgdHJ1ZmZhdXQsIGlyb255IHBsYWlkIHN1c3RhaW5hYmxlIHB1dCBhIGJpcmQgb24gaXRcbiIKKyJuZXh0IGxldmVsIGplYW4gc2hvcnRzIGV4ZXJjaXRhdGlvbi4gSGFzaHRhZyBrZXl0YXIgd2hhdGV2ZXIsIG5paGlsXG4iCisiYXV0aGVudGljIGFsaXF1aXAgZGlzcnVwdCBsYWJvcnVtLiBUYXR0b29lZCBzZWxmaWVzIGRlc2VydW50IHRydXN0IGZ1bmRcbiIKKyJ3YXlmYXJlcnMuIDMgd29sZiBtb29uIHN5bnRoIGNodXJjaC1rZXkgc2FydG9yaWFsLCBnYXN0cm9wdWIgbGVnZ2luZ3NcbiIKKyJ0YXR0b29lZC4gTGFib3JlIGhpZ2ggbGlmZSBjb21tb2RvLCBtZWdnaW5ncyByYXcgZGVuaW0gZmluZ2Vyc3RhY2hlIHB1Z1xuIgorInRydXN0IGZ1bmQgbGVnZ2luZ3Mgc2VpdGFuIGZvcmFnZS4gTm9zdHJ1ZCB1bGxhbWNvIGR1aXMsIHJlcHJlaGVuZGVyaXRcbiIKKyJpbmNpZGlkdW50IGZsYW5uZWwgc3VzdGFpbmFibGUgaGVsdmV0aWNhIHBvcmsgYmVsbHkgcHVnIGJhbmtzeSB5b3VcbiIKKyJwcm9iYWJseSBoYXZlbid0IGhlYXJkIG9mIHRoZW0gbmVzY2l1bnQgZmFybS10by10YWJsZS4gRGlzcnVwdCBub3N0cnVkXG4iCisibW9sbGl0IG1hZ25hLCBzcmlyYWNoYSBzYXJ0b3JpYWwgaGVsdmV0aWNhLlxuIgorIlxuIgorIk51bGxhIGtvZ2kgcmVwcmVoZW5kZXJpdCwgc2thdGVib2FyZCBzdXN0YWluYWJsZSBkdWlzIGFkaXBpc2ljaW5nIHZpcmFsXG4iCisiYWQgZmFubnkgcGFjayBzYWx2aWEuIEZhbm55IHBhY2sgdHJ1c3QgZnVuZCB5b3UgcHJvYmFibHkgaGF2ZW4ndCBoZWFyZFxuIgorIm9mIHRoZW0gWU9MTyB2aWNlIG5paGlsLiBLZWZmaXllaCBjcmF5IGxvLWZpIHBpbnRlcmVzdCBjYXJkaWdhbiBhbGlxdWEsXG4iCisicmVwcmVoZW5kZXJpdCBhdXRlLiBDdWxwYSB0b3VzbGVkIHdpbGxpYW1zYnVyZywgbWFyZmEgbG9tbyBhY3R1YWxseSBhbmltXG4iCisic2thdGVib2FyZC4gSXBob25lIGFsaXF1YSB1Z2gsIHNlbWlvdGljcyBwYXJpYXR1ciB2ZXJvIHJlYWR5bWFkZVxuIgorIm9yZ2FuaWMuIE1hcmZhIHNxdWlkIG51bGxhLCBpbiBsYWJvcnVtIGRpc3J1cHQgbGFib3JpcyBpcnVyZSBnYXN0cm9wdWIuXG4iCisiVmVuaWFtIHN1bnQgZm9vZCB0cnVjayBsZWdnaW5ncywgc2ludCB2aW55bCBmYXAuXG4iCisiXG4iCisiSGVsbGEgZG9sb3JlIHBvcmsgYmVsbHksIHRydWZmYXV0IGNhcmxlcyB5b3UgcHJvYmFibHkgaGF2ZW4ndCBoZWFyZCBvZlxuIgorInRoZW0gUEJSIGhlbHZldGljYSBpbiBzYXBpZW50ZS4gRmFzaGlvbiBheGUgdWdoIGJ1c2h3aWNrIGFtZXJpY2FuXG4iCisiYXBwYXJlbC4gRmluZ2Vyc3RhY2hlIHNlZCBpcGhvbmUsIGplYW4gc2hvcnRzIGJsdWUgYm90dGxlIG5pc2kgYnVzaHdpY2tcbiIKKyJmbGV4aXRhcmlhbiBvZmZpY2lhIHZlbmlhbSBwbGFpZCBiZXNwb2tlIGZhcCBZT0xPIGxvLWZpLiBCbG9nXG4iCisibGV0dGVycHJlc3MgbXVtYmxlY29yZSwgZm9vZCB0cnVjayBpZCBjcmF5IGJyb29rbHluIGNpbGx1bSBhZCBzZWQuXG4iCisiQXNzdW1lbmRhIGNoYW1icmF5IHdheWZhcmVycyB2aW55bCBtaXh0YXBlIHN1c3RhaW5hYmxlLiBWSFMgdmlueWxcbiIKKyJkZWxlY3R1cywgY3VscGEgd2lsbGlhbXNidXJnIHBvbGFyb2lkIGNsaWNoZSBzd2FnIGNodXJjaC1rZXkgc3ludGgga29naVxuIgorIm1hZ25hIHBvcC11cCBsaXRlcmFsbHkuIFN3YWcgdGh1bmRlcmNhdHMgZW5udWkgc2hvcmVkaXRjaCB2ZWdhblxuIgorInBpdGNoZm9yayBuZXV0cmEgdHJ1ZmZhdXQgZXRzeSwgc2VkIHNpbmdsZS1vcmlnaW4gY29mZmVlIGNyYWZ0IGJlZXIuXG4iCisiXG4iCisiT2RpbyBsZXR0ZXJwcmVzcyBicm9va2x5biBlbGl0LiBOdWxsYSBzaW5nbGUtb3JpZ2luIGNvZmZlZSBpbiBvY2NhZWNhdFxuIgorIm1lZ2dpbmdzLiBJcm9ueSBtZWdnaW5ncyA4LWJpdCwgY2hpbGx3YXZlIGxvLWZpIGFkaXBpc2ljaW5nIGNyZWRcbiIKKyJkcmVhbWNhdGNoZXIgdmVuaWFtLiBQdXQgYSBiaXJkIG9uIGl0IGlyb255IHVtYW1pLCB0cnVzdCBmdW5kIGJ1c2h3aWNrXG4iCisibG9jYXZvcmUga2FsZSBjaGlwcy4gU3JpcmFjaGEgc3dhZyB0aHVuZGVyY2F0cywgY2hpbGx3YXZlIGRpc3J1cHRcbiIKKyJ0b3VzbGVkIGJlYXJkIG1vbGxpdCBtdXN0YWNoZSBsZWdnaW5ncyBwb3J0bGFuZCBuZXh0IGxldmVsLiBOaWhpbCBlc3NlXG4iCisiZXN0LCBza2F0ZWJvYXJkIGFydCBwYXJ0eSBldHN5IHRodW5kZXJjYXRzIHNlZCBkcmVhbWNhdGNoZXIgdXQgaXBob25lXG4iCisic3dhZyBjb25zZWN0ZXR1ciBldC4gSXJ1cmUgc2thdGVib2FyZCBiYW5qbywgbnVsbGEgZGVzZXJ1bnQgbWVzc2VuZ2VyXG4iCisiYmFnIGRvbG9yIHRlcnJ5IHJpY2hhcmRzb24gc2FwaWVudGUuXG4iOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOT19ESCkKKworI2RlZmluZSBNSU5fREhLRVlfQklUUyAgICAgIDEwMjQKKworI2lmICFkZWZpbmVkKE5PX1dPTEZTU0xfU0VSVkVSKQorLyogZGgyMDQ4IHAgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRocFtdID0KK3sKKyAgICAweGIwLCAweGExLCAweDA4LCAweDA2LCAweDljLCAweDA4LCAweDEzLCAweGJhLCAweDU5LCAweDA2LCAweDNjLCAweGJjLCAweDMwLAorICAgIDB4ZDUsIDB4ZjUsIDB4MDAsIDB4YzEsIDB4NGYsIDB4NDQsIDB4YTcsIDB4ZDYsIDB4ZWYsIDB4NGEsIDB4YzYsIDB4MjUsIDB4MjcsCisgICAgMHgxYywgMHhlOCwgMHhkMiwgMHg5NiwgMHg1MywgMHgwYSwgMHg1YywgMHg5MSwgMHhkZCwgMHhhMiwgMHhjMiwgMHg5NCwgMHg4NCwKKyAgICAweGJmLCAweDdkLCAweGIyLCAweDQ0LCAweDlmLCAweDliLCAweGQyLCAweGMxLCAweDhhLCAweGM1LCAweGJlLCAweDcyLCAweDVjLAorICAgIDB4YTcsIDB4ZTcsIDB4OTEsIDB4ZTYsIDB4ZDQsIDB4OWYsIDB4NzMsIDB4MDcsIDB4ODUsIDB4NWIsIDB4NjYsIDB4NDgsIDB4YzcsCisgICAgMHg3MCwgMHhmYSwgMHhiNCwgMHhlZSwgMHgwMiwgMHhjOSwgMHgzZCwgMHg5YSwgMHg0YSwgMHhkYSwgMHgzZCwgMHhjMSwgMHg0NiwKKyAgICAweDNlLCAweDE5LCAweDY5LCAweGQxLCAweDE3LCAweDQ2LCAweDA3LCAweGEzLCAweDRkLCAweDlmLCAweDJiLCAweDk2LCAweDE3LAorICAgIDB4MzksIDB4NmQsIDB4MzAsIDB4OGQsIDB4MmEsIDB4ZjMsIDB4OTQsIDB4ZDMsIDB4NzUsIDB4Y2YsIDB4YTAsIDB4NzUsIDB4ZTYsCisgICAgMHhmMiwgMHg5MiwgMHgxZiwgMHgxYSwgMHg3MCwgMHgwNSwgMHhhYSwgMHgwNCwgMHg4MywgMHg1NywgMHgzMCwgMHhmYiwgMHhkYSwKKyAgICAweDc2LCAweDkzLCAweDM4LCAweDUwLCAweGU4LCAweDI3LCAweGZkLCAweDYzLCAweGVlLCAweDNjLCAweGU1LCAweGI3LCAweGM4LAorICAgIDB4MDksIDB4YWUsIDB4NmYsIDB4NTAsIDB4MzUsIDB4OGUsIDB4ODQsIDB4Y2UsIDB4NGEsIDB4MDAsIDB4ZTksIDB4MTIsIDB4N2UsCisgICAgMHg1YSwgMHgzMSwgMHhkNywgMHgzMywgMHhmYywgMHgyMSwgMHgxMywgMHg3NiwgMHhjYywgMHgxNiwgMHgzMCwgMHhkYiwgMHgwYywKKyAgICAweGZjLCAweGM1LCAweDYyLCAweGE3LCAweDM1LCAweGI4LCAweGVmLCAweGI3LCAweGIwLCAweGFjLCAweGMwLCAweDM2LCAweGY2LAorICAgIDB4ZDksIDB4YzksIDB4NDYsIDB4NDgsIDB4ZjksIDB4NDAsIDB4OTAsIDB4MDAsIDB4MmIsIDB4MWIsIDB4YWEsIDB4NmMsIDB4ZTMsCisgICAgMHgxYSwgMHhjMywgMHgwYiwgMHgwMywgMHg5ZSwgMHgxYiwgMHhjMiwgMHg0NiwgMHhlNCwgMHg0OCwgMHg0ZSwgMHgyMiwgMHg3MywKKyAgICAweDZmLCAweGMzLCAweDVmLCAweGQ0LCAweDlhLCAweGQ2LCAweDMwLCAweDA3LCAweDQ4LCAweGQ2LCAweDhjLCAweDkwLCAweGFiLAorICAgIDB4ZDQsIDB4ZjYsIDB4ZjEsIDB4ZTMsIDB4NDgsIDB4ZDMsIDB4NTgsIDB4NGIsIDB4YTYsIDB4YjksIDB4Y2QsIDB4MjksIDB4YmYsCisgICAgMHg2OCwgMHgxZiwgMHgwOCwgMHg0YiwgMHg2MywgMHg4NiwgMHgyZiwgMHg1YywgMHg2YiwgMHhkNiwgMHhiNiwgMHgwNiwgMHg2NSwKKyAgICAweGY3LCAweGE2LCAweGRjLCAweDAwLCAweDY3LCAweDZiLCAweGJiLCAweGMzLCAweGE5LCAweDQxLCAweDgzLCAweGZiLCAweGM3LAorICAgIDB4ZmEsIDB4YzgsIDB4ZTIsIDB4MWUsIDB4N2UsIDB4YWYsIDB4MDAsIDB4M2YsIDB4OTMKK307CisKKy8qIGRoMjA0OCBnICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaGdbXSA9Cit7CisgICAgMHgwMiwKK307CisjZW5kaWYgLyogIU5PX1dPTEZTU0xfU0VSVkVSICovCisjZW5kaWYgLyogIU5PX0RIICovCisKKyNpZmRlZiBIQVZFX1BUSFJFQUQKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNRU1fQlVGRkVSX1NaXTsKKyAgICBpbnQgd3JpdGVfYnl0ZXM7CisgICAgaW50IHdyaXRlX2lkeDsKKyAgICBpbnQgcmVhZF9ieXRlczsKKyAgICBpbnQgcmVhZF9pZHg7CisKKyAgICBwdGhyZWFkX3QgdGlkOworICAgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKKyAgICBwdGhyZWFkX2NvbmRfdCBjb25kOworCisgICAgaW50IGRvbmU7Cit9IG1lbUJ1Zl90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBkb3VibGUgY29ublRpbWU7CisgICAgZG91YmxlIHJ4VGltZTsKKyAgICBkb3VibGUgdHhUaW1lOworICAgIGludCBjb25uQ291bnQ7CisgICAgaW50IHJ4VG90YWw7CisgICAgaW50IHR4VG90YWw7Cit9IHN0YXRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgc2h1dGRvd247CisgICAgaW50IHNvY2tGZDsKKyAgICBpbnQgcmV0OworfSBzaWRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyKiBjaXBoZXI7CisgICAgY29uc3QgY2hhciogaG9zdDsKKyAgICB3b3JkMzIgcG9ydDsKKyAgICBpbnQgcGFja2V0U2l6ZTsgLyogVGhlIGRhdGEgcGF5bG9hZCBzaXplIGluIHRoZSBwYWNrZXQgKi8KKyAgICBpbnQgbWF4U2l6ZTsKKyAgICBpbnQgcnVuVGltZVNlYzsKKyAgICBpbnQgc2hvd1BlZXJJbmZvOworICAgIGludCBzaG93VmVyYm9zZTsKKyNpZm5kZWYgTk9fV09MRlNTTF9TRVJWRVIKKyAgICBpbnQgbGlzdGVuRmQ7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICBpbnQgZG9EVExTOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXJBZGRyOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnRBZGRyOworI2lmZGVmIEhBVkVfUFRIUkVBRAorICAgIGludCBzZXJ2ZXJSZWFkeTsKKyAgICBpbnQgY2xpZW50T3JzZXJ2ZXJPbmx5OworICAgIHB0aHJlYWRfbXV0ZXhfdCBkdGxzX211dGV4OworICAgIHB0aHJlYWRfY29uZF90IGR0bHNfY29uZDsKKyNlbmRpZgorI2VuZGlmCisgICAgc2lkZV90IGNsaWVudDsKKyAgICBzaWRlX3Qgc2VydmVyOworCisjaWZkZWYgSEFWRV9QVEhSRUFECisgICAgaW50IHVzZUxvY2FsTWVtOworCisgICAgLyogY2xpZW50IG1lc3NhZ2VzIHRvIHNlcnZlciBpbiBtZW1vcnkgKi8KKyAgICBtZW1CdWZfdCB0b19zZXJ2ZXI7CisKKyAgICAvKiBzZXJ2ZXIgbWVzc2FnZXMgdG8gY2xpZW50IGluIG1lbW9yeSAqLworICAgIG1lbUJ1Zl90IHRvX2NsaWVudDsKKyNlbmRpZgorCisgICAgLyogc2VydmVyICovCisgICAgc3RhdHNfdCBzZXJ2ZXJfc3RhdHM7CisKKyAgICAvKiBjbGllbnQgKi8KKyAgICBzdGF0c190IGNsaWVudF9zdGF0czsKK30gaW5mb190OworCisvKiBHbG9iYWwgdmFycyBmb3IgYXJndW1lbnQgcGFyc2luZyAqLworaW50IG15b3B0aW5kID0gMDsKK2NoYXIqIG15b3B0YXJnID0gTlVMTDsKKworI2lmZGVmIFdPTEZTU0xfRFRMUworaW50IERvbmVIYW5kU2hha2UgPSAwOworI2VuZGlmCisKK3N0YXRpYyBkb3VibGUgZ2V0dGltZV9zZWNzKGludCByZXNldCkKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICBnZXR0aW1lb2ZkYXkoJnR2LCAwKTsKKyAgICAodm9pZClyZXNldDsKKworICAgIHJldHVybiAoZG91YmxlKXR2LnR2X3NlYyArIChkb3VibGUpdHYudHZfdXNlYyAvIDEwMDAwMDA7Cit9CisKKworI2lmZGVmIEhBVkVfUFRIUkVBRAorLyogc2VydmVyIHNlbmQgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgU2VydmVyTWVtU2VuZChpbmZvX3QqIGluZm8sIGNoYXIqIGJ1ZiwgaW50IHN6KQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmaW5mby0+dG9fY2xpZW50Lm11dGV4KTsKKworI2lmbmRlZiBCRU5DSF9VU0VfTk9OQkxPQ0sKKyAgICAvKiBjaGVjayBmb3Igb3ZlcmZsb3cgKi8KKyAgICBpZiAoaW5mby0+dG9fY2xpZW50LndyaXRlX2lkeCArIHN6ID4gTUVNX0JVRkZFUl9TWikgeworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaW5mby0+dG9fY2xpZW50Lm11dGV4KTsKKyAgICAgICAgcHJpbnRmKCJTZXJ2ZXJNZW1TZW5kIG92ZXJmbG93XG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbHNlCisgICAgaWYgKGluZm8tPnRvX2NsaWVudC53cml0ZV9pZHggKyBzeiA+IE1FTV9CVUZGRVJfU1opCisgICAgICAgIHN6ID0gTUVNX0JVRkZFUl9TWiAtIGluZm8tPnRvX2NsaWVudC53cml0ZV9pZHg7CisjZW5kaWYKKworICAgIFhNRU1DUFkoJmluZm8tPnRvX2NsaWVudC5idWZbaW5mby0+dG9fY2xpZW50LndyaXRlX2lkeF0sIGJ1Ziwgc3opOworICAgIGluZm8tPnRvX2NsaWVudC53cml0ZV9pZHggKz0gc3o7CisgICAgaW5mby0+dG9fY2xpZW50LndyaXRlX2J5dGVzICs9IHN6OworCisgICAgcHRocmVhZF9jb25kX3NpZ25hbCgmaW5mby0+dG9fY2xpZW50LmNvbmQpOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbmZvLT50b19jbGllbnQubXV0ZXgpOworCisjaWZkZWYgQkVOQ0hfVVNFX05PTkJMT0NLCisgICAgaWYgKHN6ID09IDApCisgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX1dBTlRfV1JJVEU7CisjZW5kaWYKKyAgICByZXR1cm4gc3o7Cit9CisKKy8qIHNlcnZlciByZWN2IGNhbGxiYWNrICovCitzdGF0aWMgaW50IFNlcnZlck1lbVJlY3YoaW5mb190KiBpbmZvLCBjaGFyKiBidWYsIGludCBzeikKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmluZm8tPnRvX3NlcnZlci5tdXRleCk7CisKKyNpZm5kZWYgQkVOQ0hfVVNFX05PTkJMT0NLCisgICAgd2hpbGUgKGluZm8tPnRvX3NlcnZlci53cml0ZV9pZHggLSBpbmZvLT50b19zZXJ2ZXIucmVhZF9pZHggPCBzeiAmJiAhaW5mby0+dG9fY2xpZW50LmRvbmUpCisgICAgICAgIHB0aHJlYWRfY29uZF93YWl0KCZpbmZvLT50b19zZXJ2ZXIuY29uZCwgJmluZm8tPnRvX3NlcnZlci5tdXRleCk7CisjZWxzZQorICAgIGlmIChpbmZvLT50b19zZXJ2ZXIud3JpdGVfaWR4IC0gaW5mby0+dG9fc2VydmVyLnJlYWRfaWR4IDwgc3opCisgICAgICAgIHN6ID0gaW5mby0+dG9fc2VydmVyLndyaXRlX2lkeCAtIGluZm8tPnRvX3NlcnZlci5yZWFkX2lkeDsKKyNlbmRpZgorCisgICAgWE1FTUNQWShidWYsICZpbmZvLT50b19zZXJ2ZXIuYnVmW2luZm8tPnRvX3NlcnZlci5yZWFkX2lkeF0sIHN6KTsKKyAgICBpbmZvLT50b19zZXJ2ZXIucmVhZF9pZHggKz0gc3o7CisgICAgaW5mby0+dG9fc2VydmVyLnJlYWRfYnl0ZXMgKz0gc3o7CisKKyAgICAvKiBpZiB0aGUgcnggaGFzIGNhdWdodCB1cCB3aXRoIHBlbmRpbmcgdGhlbiByZXNldCBidWZmZXIgcG9zaXRpb25zICovCisgICAgaWYgKGluZm8tPnRvX3NlcnZlci5yZWFkX2J5dGVzID09IGluZm8tPnRvX3NlcnZlci53cml0ZV9ieXRlcykgeworICAgICAgICBpbmZvLT50b19zZXJ2ZXIucmVhZF9ieXRlcyA9IGluZm8tPnRvX3NlcnZlci5yZWFkX2lkeCA9IDA7CisgICAgICAgIGluZm8tPnRvX3NlcnZlci53cml0ZV9ieXRlcyA9IGluZm8tPnRvX3NlcnZlci53cml0ZV9pZHggPSAwOworICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbmZvLT50b19zZXJ2ZXIubXV0ZXgpOworCisgICAgaWYgKGluZm8tPnRvX2NsaWVudC5kb25lICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKworI2lmZGVmIEJFTkNIX1VTRV9OT05CTE9DSworICAgIGlmIChzeiA9PSAwKQorICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9XQU5UX1JFQUQ7CisjZW5kaWYKKyAgICByZXR1cm4gc3o7Cit9CisKKy8qIGNsaWVudCBzZW5kIGNhbGxiYWNrICovCitzdGF0aWMgaW50IENsaWVudE1lbVNlbmQoaW5mb190KiBpbmZvLCBjaGFyKiBidWYsIGludCBzeikKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmluZm8tPnRvX3NlcnZlci5tdXRleCk7CisKKyNpZm5kZWYgQkVOQ0hfVVNFX05PTkJMT0NLCisgICAgLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCisgICAgaWYgKGluZm8tPnRvX2NsaWVudC53cml0ZV9pZHggKyBzeiA+IE1FTV9CVUZGRVJfU1opIHsKKyAgICAgICAgcHJpbnRmKCJDbGllbnRNZW1TZW5kIG92ZXJmbG93ICVkICVkICVkXG4iLCBpbmZvLT50b19jbGllbnQud3JpdGVfaWR4LCBzeiwgTUVNX0JVRkZFUl9TWik7CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbmZvLT50b19zZXJ2ZXIubXV0ZXgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoaW5mby0+dG9fc2VydmVyLndyaXRlX2lkeCArIHN6ID4gTUVNX0JVRkZFUl9TWikKKyAgICAgICAgc3ogPSBNRU1fQlVGRkVSX1NaIC0gaW5mby0+dG9fc2VydmVyLndyaXRlX2lkeDsKKyNlbmRpZgorCisgICAgWE1FTUNQWSgmaW5mby0+dG9fc2VydmVyLmJ1ZltpbmZvLT50b19zZXJ2ZXIud3JpdGVfaWR4XSwgYnVmLCBzeik7CisgICAgaW5mby0+dG9fc2VydmVyLndyaXRlX2lkeCArPSBzejsKKyAgICBpbmZvLT50b19zZXJ2ZXIud3JpdGVfYnl0ZXMgKz0gc3o7CisKKyAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZpbmZvLT50b19zZXJ2ZXIuY29uZCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmluZm8tPnRvX3NlcnZlci5tdXRleCk7CisKKyNpZmRlZiBCRU5DSF9VU0VfTk9OQkxPQ0sKKyAgICBpZiAoc3ogPT0gMCkKKyAgICAgICAgcmV0dXJuIFdPTEZTU0xfQ0JJT19FUlJfV0FOVF9XUklURTsKKyNlbmRpZgorICAgIHJldHVybiBzejsKK30KKworLyogY2xpZW50IHJlY3YgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgQ2xpZW50TWVtUmVjdihpbmZvX3QqIGluZm8sIGNoYXIqIGJ1ZiwgaW50IHN6KQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmaW5mby0+dG9fY2xpZW50Lm11dGV4KTsKKworI2lmbmRlZiBCRU5DSF9VU0VfTk9OQkxPQ0sKKyAgICB3aGlsZSAoaW5mby0+dG9fY2xpZW50LndyaXRlX2lkeCAtIGluZm8tPnRvX2NsaWVudC5yZWFkX2lkeCA8IHN6KQorICAgICAgICBwdGhyZWFkX2NvbmRfd2FpdCgmaW5mby0+dG9fY2xpZW50LmNvbmQsICZpbmZvLT50b19jbGllbnQubXV0ZXgpOworI2Vsc2UKKyAgICBpZiAoaW5mby0+dG9fY2xpZW50LndyaXRlX2lkeCAtIGluZm8tPnRvX2NsaWVudC5yZWFkX2lkeCA8IHN6KQorICAgICAgICBzeiA9IGluZm8tPnRvX2NsaWVudC53cml0ZV9pZHggLSBpbmZvLT50b19jbGllbnQucmVhZF9pZHg7CisjZW5kaWYKKworICAgIFhNRU1DUFkoYnVmLCAmaW5mby0+dG9fY2xpZW50LmJ1ZltpbmZvLT50b19jbGllbnQucmVhZF9pZHhdLCBzeik7CisgICAgaW5mby0+dG9fY2xpZW50LnJlYWRfaWR4ICs9IHN6OworICAgIGluZm8tPnRvX2NsaWVudC5yZWFkX2J5dGVzICs9IHN6OworCisgICAgLyogaWYgdGhlIHJ4IGhhcyBjYXVnaHQgdXAgd2l0aCBwZW5kaW5nIHRoZW4gcmVzZXQgYnVmZmVyIHBvc2l0aW9ucyAqLworICAgIGlmIChpbmZvLT50b19jbGllbnQucmVhZF9ieXRlcyA9PSBpbmZvLT50b19jbGllbnQud3JpdGVfYnl0ZXMpIHsKKyAgICAgICAgaW5mby0+dG9fY2xpZW50LnJlYWRfYnl0ZXMgPSBpbmZvLT50b19jbGllbnQucmVhZF9pZHggPSAwOworICAgICAgICBpbmZvLT50b19jbGllbnQud3JpdGVfYnl0ZXMgPSBpbmZvLT50b19jbGllbnQud3JpdGVfaWR4ID0gMDsKKyAgICB9CisKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmaW5mby0+dG9fY2xpZW50Lm11dGV4KTsKKworI2lmZGVmIEJFTkNIX1VTRV9OT05CTE9DSworICAgIGlmIChzeiA9PSAwKQorICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9XQU5UX1JFQUQ7CisjZW5kaWYKKyAgICByZXR1cm4gc3o7Cit9CisjZW5kaWYgLyogSEFWRV9QVEhSRUFEICovCisKK3N0YXRpYyBpbnQgU29ja2V0UmVjdihpbnQgc29ja0ZkLCBjaGFyKiBidWYsIGludCBzeikKK3sKKyAgICBpbnQgcmVjdmQgPSAoaW50KXJlY3Yoc29ja0ZkLCBidWYsIHN6LCAwKTsKKyAgICBpZiAocmVjdmQgPT0gLTEpIHsKKyAgICAgICAgc3dpdGNoIChlcnJubykgeworICAgICNpZiBFQUdBSU4gIT0gU09DS0VUX0VXT1VMREJMT0NLCisgICAgICAgIGNhc2UgRUFHQUlOOiAvKiBFQUdBSU4gPT0gRVdPVUxEQkxPQ0sgb24gc29tZSBzeXN0ZW1zLCBidXQgbm90IG90aGVycyAqLworICAgICNlbmRpZgorICAgICAgICBjYXNlIFNPQ0tFVF9FV09VTERCTE9DSzoKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX1dBTlRfUkVBRDsKKyAgICAgICAgY2FzZSBTT0NLRVRfRUNPTk5SRVNFVDoKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0NPTk5fUlNUOworICAgICAgICBjYXNlIFNPQ0tFVF9FSU5UUjoKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0lTUjsKKyAgICAgICAgY2FzZSBTT0NLRVRfRUNPTk5SRUZVU0VEOiAvKiBEVExTIGNhc2UgKi8KKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX1dBTlRfUkVBRDsKKyAgICAgICAgY2FzZSBTT0NLRVRfRUNPTk5BQk9SVEVEOgorICAgICAgICAgICAgcmV0dXJuIFdPTEZTU0xfQ0JJT19FUlJfQ09OTl9DTE9TRTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0dFTkVSQUw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAocmVjdmQgPT0gMCkgeworICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9DT05OX0NMT1NFOworICAgIH0KKyAgICByZXR1cm4gcmVjdmQ7Cit9CisKK3N0YXRpYyBpbnQgU29ja2V0U2VuZChpbnQgc29ja0ZkLCBjaGFyKiBidWYsIGludCBzeikKK3sKKyAgICBpbnQgc2VudCA9IChpbnQpc2VuZChzb2NrRmQsIGJ1Ziwgc3osIDApOworICAgIGlmIChzZW50ID09IC0xKSB7CisgICAgICAgIHN3aXRjaCAoZXJybm8pIHsKKyAgICAjaWYgRUFHQUlOICE9IFNPQ0tFVF9FV09VTERCTE9DSworICAgICAgICBjYXNlIEVBR0FJTjogLyogRUFHQUlOID09IEVXT1VMREJMT0NLIG9uIHNvbWUgc3lzdGVtcywgYnV0IG5vdCBvdGhlcnMgKi8KKyAgICAjZW5kaWYKKyAgICAgICAgY2FzZSBTT0NLRVRfRVdPVUxEQkxPQ0s6CisgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9XQU5UX1JFQUQ7CisgICAgICAgIGNhc2UgU09DS0VUX0VDT05OUkVTRVQ6CisgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9DT05OX1JTVDsKKyAgICAgICAgY2FzZSBTT0NLRVRfRUlOVFI6CisgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9JU1I7CisgICAgICAgIGNhc2UgU09DS0VUX0VQSVBFOgorICAgICAgICAgICAgcmV0dXJuIFdPTEZTU0xfQ0JJT19FUlJfQ09OTl9DTE9TRTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0dFTkVSQUw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc2VudCA9PSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gc2VudDsKK30KKyNpZiBkZWZpbmVkKFdPTEZTU0xfRFRMUykgJiYgIWRlZmluZWQoTk9fV09MRlNTTF9TRVJWRVIpCitzdGF0aWMgaW50IFJlY2VpdmVGcm9tKFdPTEZTU0wgKnNzbCwgaW50IHNkLCBjaGFyICpidWYsIGludCBzeikKK3sKKyAgICBpbnQgcmVjdmQ7CisgICAgaW50IGR0bHNfdGltZW91dCA9IHdvbGZTU0xfZHRsc19nZXRfY3VycmVudF90aW1lb3V0KHNzbCk7CisgICAgc3RydWN0IHNvY2thZGRyIHBlZXI7CisgICAgc29ja2xlbl90IHBlZXJTeiA9IDA7CisKKyAgICBpZiAoRG9uZUhhbmRTaGFrZSkgZHRsc190aW1lb3V0ID0gMDsKKworICAgIGlmICghd29sZlNTTF9nZXRfdXNpbmdfbm9uYmxvY2soc3NsKSkgeworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgICAgICBYTUVNU0VUKCZ0aW1lb3V0LCAwLCBzaXplb2YodGltZW91dCkpOworICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IGR0bHNfdGltZW91dDsKKworICAgICAgICBpZiAoc2V0c29ja29wdChzZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIChjaGFyKikmdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRpbWVvdXQpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJzZXRzb2Nrb3B0IHJjdnRpbWVvIGZhaWxlZFxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZWN2ZCA9IChpbnQpcmVjdmZyb20oc2QsIGJ1Ziwgc3osIDAsIChTT0NLQUREUiopJnBlZXIsICZwZWVyU3opOworCisgICAgaWYgKHJlY3ZkIDwgMCkgeworCisgICAgICAgIGlmIChlcnJubyA9PSBTT0NLRVRfRVdPVUxEQkxPQ0sgfHwgZXJybm8gPT0gU09DS0VUX0VBR0FJTikgeworICAgICAgICAgICAgaWYgKHdvbGZTU0xfZHRsc19nZXRfdXNpbmdfbm9uYmxvY2soc3NsKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX1dBTlRfUkVBRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX1RJTUVPVVQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXJybm8gPT0gU09DS0VUX0VDT05OUkVTRVQpIHsKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0NPTk5fUlNUOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVycm5vID09IFNPQ0tFVF9FSU5UUikgeworICAgICAgICAgICAgcmV0dXJuIFdPTEZTU0xfQ0JJT19FUlJfSVNSOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVycm5vID09IFNPQ0tFVF9FQ09OTlJFRlVTRUQpIHsKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX1dBTlRfUkVBRDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0dFTkVSQUw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChyZWN2ZCA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9DT05OX0NMT1NFOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlY3ZkOworfQorI2VuZGlmIC8qIFdPTEZTU0xfRFRMUyAmJiAhTk9fV09MRlNTTF9TRVJWRVIgKi8KKworI2lmIGRlZmluZWQoV09MRlNTTF9EVExTKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX0NMSUVOVCkKK3N0YXRpYyBpbnQgU2VuZFRvKGludCBzZCwgY2hhciAqYnVmLCBpbnQgc3osIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqcGVlciwKKyAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBwZWVyU3opCit7CisgICAgaW50IHNlbnQ7CisKKyAgICBzZW50ID0gKGludClzZW5kdG8oc2QsIGJ1Ziwgc3osIDAsIHBlZXIsIHBlZXJTeik7CisKKyAgICBpZiAoc2VudCA8IDApIHsKKyAgICAgICAgaWYgKGVycm5vID09IFNPQ0tFVF9FV09VTERCTE9DSyB8fCBlcnJubyA9PSBTT0NLRVRfRUFHQUlOKSB7CisgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9XQU5UX1dSSVRFOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVycm5vID09IFNPQ0tFVF9FQ09OTlJFU0VUKSB7CisgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9DT05OX1JTVDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChlcnJubyA9PSBTT0NLRVRfRUlOVFIpIHsKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0lTUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChlcnJubyA9PSBTT0NLRVRfRVBJUEUpIHsKKyAgICAgICAgICAgIHJldHVybiBXT0xGU1NMX0NCSU9fRVJSX0NPTk5fQ0xPU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gV09MRlNTTF9DQklPX0VSUl9HRU5FUkFMOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNlbnQ7Cit9CisKK3N0YXRpYyBpbnQgbXlEb25lSHNDYihXT0xGU1NMKiBzc2wsIHZvaWQqIHVzZXJfY3R4KQoreworICAgICh2b2lkKSBzc2w7CisgICAgKHZvaWQpIHVzZXJfY3R4OworCisgICAgRG9uZUhhbmRTaGFrZSA9IDE7CisgICAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogV09MRlNTTF9EVExTICYmICFOT19XT0xGU1NMX0NMSUVOVCAqLworCisjaWZuZGVmIE5PX1dPTEZTU0xfU0VSVkVSCitzdGF0aWMgaW50IFNlcnZlclNlbmQoV09MRlNTTCogc3NsLCBjaGFyKiBidWYsIGludCBzeiwgdm9pZCogY3R4KQoreworICAgIGluZm9fdCogaW5mbyA9IChpbmZvX3QqKWN0eDsKKyAgICAodm9pZClzc2w7CisjaWZkZWYgSEFWRV9QVEhSRUFECisgICAgaWYgKGluZm8tPnVzZUxvY2FsTWVtKQorICAgICAgICByZXR1cm4gU2VydmVyTWVtU2VuZChpbmZvLCBidWYsIHN6KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9EVExTKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX0NMSUVOVCkKKyAgICBpZiAoaW5mby0+ZG9EVExTKSB7CisgICAgICAgIHJldHVybiBTZW5kVG8oaW5mby0+c2VydmVyLnNvY2tGZCwgYnVmLCBzeiwKKyAgICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSZpbmZvLT5jbGllbnRBZGRyLCBzaXplb2YoaW5mby0+Y2xpZW50QWRkcikpOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHJldHVybiBTb2NrZXRTZW5kKGluZm8tPnNlcnZlci5zb2NrRmQsIGJ1Ziwgc3opOworfQorc3RhdGljIGludCBTZXJ2ZXJSZWN2KFdPTEZTU0wqIHNzbCwgY2hhciogYnVmLCBpbnQgc3osIHZvaWQqIGN0eCkKK3sKKyAgICBpbmZvX3QqIGluZm8gPSAoaW5mb190KiljdHg7CisgICAgKHZvaWQpc3NsOworI2lmZGVmIEhBVkVfUFRIUkVBRAorICAgIGlmIChpbmZvLT51c2VMb2NhbE1lbSkKKyAgICAgICAgcmV0dXJuIFNlcnZlck1lbVJlY3YoaW5mbywgYnVmLCBzeik7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICBpZiAoaW5mby0+ZG9EVExTKSB7CisgICAgICAgIHJldHVybiBSZWNlaXZlRnJvbShzc2wsIGluZm8tPnNlcnZlci5zb2NrRmQsIGJ1Ziwgc3opOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHJldHVybiBTb2NrZXRSZWN2KGluZm8tPnNlcnZlci5zb2NrRmQsIGJ1Ziwgc3opOworfQorI2VuZGlmIC8qICFOT19XT0xGU1NMX1NFUlZFUiAqLworCisjaWZuZGVmIE5PX1dPTEZTU0xfQ0xJRU5UCitzdGF0aWMgaW50IENsaWVudFNlbmQoV09MRlNTTCogc3NsLCBjaGFyKiBidWYsIGludCBzeiwgdm9pZCogY3R4KQoreworICAgIGluZm9fdCogaW5mbyA9IChpbmZvX3QqKWN0eDsKKyAgICAodm9pZClzc2w7CisjaWZkZWYgSEFWRV9QVEhSRUFECisgICAgaWYgKGluZm8tPnVzZUxvY2FsTWVtKQorICAgICAgICByZXR1cm4gQ2xpZW50TWVtU2VuZChpbmZvLCBidWYsIHN6KTsKKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfRFRMUworICAgIGlmIChpbmZvLT5kb0RUTFMpIHsKKyAgICAgICAgcmV0dXJuIFNlbmRUbyhpbmZvLT5jbGllbnQuc29ja0ZkLCBidWYsIHN6LAorICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopJmluZm8tPnNlcnZlckFkZHIsIHNpemVvZihpbmZvLT5zZXJ2ZXJBZGRyKSk7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFNvY2tldFNlbmQoaW5mby0+Y2xpZW50LnNvY2tGZCwgYnVmLCBzeik7Cit9CitzdGF0aWMgaW50IENsaWVudFJlY3YoV09MRlNTTCogc3NsLCBjaGFyKiBidWYsIGludCBzeiwgdm9pZCogY3R4KQoreworICAgIGluZm9fdCogaW5mbyA9IChpbmZvX3QqKWN0eDsKKyAgICAodm9pZClzc2w7CisjaWZkZWYgSEFWRV9QVEhSRUFECisgICAgaWYgKGluZm8tPnVzZUxvY2FsTWVtKQorICAgICAgICByZXR1cm4gQ2xpZW50TWVtUmVjdihpbmZvLCBidWYsIHN6KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoV09MRlNTTF9EVExTKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX1NFUlZFUikKKyAgICBpZiAoaW5mby0+ZG9EVExTKSB7CisgICAgICAgIHJldHVybiBSZWNlaXZlRnJvbShzc2wsIGluZm8tPmNsaWVudC5zb2NrRmQsIGJ1Ziwgc3opOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHJldHVybiBTb2NrZXRSZWN2KGluZm8tPmNsaWVudC5zb2NrRmQsIGJ1Ziwgc3opOworfQorI2VuZGlmIC8qICFOT19XT0xGU1NMX0NMSUVOVCAqLworCitzdGF0aWMgdm9pZCBDbG9zZUFuZENsZWFudXBTb2NrZXQoaW50KiBzb2NrRmQpCit7CisgICAgaWYgKCpzb2NrRmQgIT0gLTEpIHsKKyAgICAgICAgY2xvc2UoKnNvY2tGZCk7CisgICAgICAgICpzb2NrRmQgPSAtMTsKKyAgICB9CisjaWZkZWYgV09MRlNTTF9EVExTCisgICAgRG9uZUhhbmRTaGFrZSA9IDA7CisjZW5kaWYKK30KKworI2lmZGVmIEJFTkNIX1VTRV9OT05CTE9DSworc3RhdGljIGludCBTZXRTb2NrZXROb25CbG9ja2luZyhpbnQgc29ja0ZkKQoreworICAgIGludCBmbGFncyA9IGZjbnRsKHNvY2tGZCwgRl9HRVRGTCwgMCk7CisgICAgaWYgKGZsYWdzIDwgMCkgeworICAgICAgICBwcmludGYoImZjbnRsIGdldCBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGZsYWdzID0gZmNudGwoc29ja0ZkLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spOworICAgIGlmIChmbGFncyA8IDApIHsKKyAgICAgICAgcHJpbnRmKCJmY250bCBzZXQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWZuZGVmIE5PX1dPTEZTU0xfQ0xJRU5UCitzdGF0aWMgaW50IFNldHVwU29ja2V0QW5kQ29ubmVjdChpbmZvX3QqIGluZm8sIGNvbnN0IGNoYXIqIGhvc3QsCisgICAgd29yZDMyIHBvcnQpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luIHNlcnZBZGRyOworICAgIHN0cnVjdCBob3N0ZW50KiBlbnRyeTsKKworICAgIC8qIFNldHVwIHNlcnZlciBhZGRyZXNzICovCisgICAgWE1FTVNFVCgmc2VydkFkZHIsIDAsIHNpemVvZihzZXJ2QWRkcikpOworICAgIHNlcnZBZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIHNlcnZBZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisKKyAgICAvKiBSZXNvbHZlIGhvc3QgKi8KKyAgICBlbnRyeSA9IGdldGhvc3RieW5hbWUoaG9zdCk7CisgICAgaWYgKGVudHJ5KSB7CisgICAgICAgIFhNRU1DUFkoJnNlcnZBZGRyLnNpbl9hZGRyLnNfYWRkciwgZW50cnktPmhfYWRkcl9saXN0WzBdLAorICAgICAgICAgICAgZW50cnktPmhfbGVuZ3RoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNlcnZBZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihob3N0KTsKKyAgICB9CisKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICBpZiAoaW5mby0+ZG9EVExTKSB7CisgICAgICAgIC8qIENyZWF0ZSB0aGUgU09DS19ER1JBTSBzb2NrZXQgdHlwZSBpcyBpbXBsZW1lbnRlZCBvbiB0aGUgVXNlcgorICAgICAgICAqICBEYXRhZ3JhbSBQcm90b2NvbC9JbnRlcm5ldCBQcm90b2NvbChVRFAvSVAgcHJvdG9jb2wpLiovCisgICAgICAgIGlmICgoaW5mby0+Y2xpZW50LnNvY2tGZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKSB7CisgICAgICAgICAgICBwcmludGYoIkVSUk9SOiBmYWlsZWQgdG8gY3JlYXRlIHRoZSBTT0NLX0RHUkFNIHNvY2tldFxuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgWE1FTUNQWSgmaW5mby0+c2VydmVyQWRkciwgJnNlcnZBZGRyLCBzaXplb2Yoc2VydkFkZHIpKTsKKyAgICB9IGVsc2UgeworI2VuZGlmCisgICAgLyogQ3JlYXRlIGEgc29ja2V0IHRoYXQgdXNlcyBhbiBJbnRlcm5ldCBJUHY0IGFkZHJlc3MsCisgICAgICogU2V0cyB0aGUgc29ja2V0IHRvIGJlIHN0cmVhbSBiYXNlZCAoVENQKSwKKyAgICAgKiAwIG1lYW5zIGNob29zZSB0aGUgZGVmYXVsdCBwcm90b2NvbC4gKi8KKyAgICBpZiAoKGluZm8tPmNsaWVudC5zb2NrRmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA9PSAtMSkgeworICAgICAgICBwcmludGYoIkVSUk9SOiBmYWlsZWQgdG8gY3JlYXRlIHRoZSBzb2NrZXRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogQ29ubmVjdCB0byB0aGUgc2VydmVyICovCisgICAgaWYgKGNvbm5lY3QoaW5mby0+Y2xpZW50LnNvY2tGZCwgKHN0cnVjdCBzb2NrYWRkciopJnNlcnZBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXJ2QWRkcikpID09IC0xKSB7CisgICAgICAgIHByaW50ZigiRVJST1I6IGZhaWxlZCB0byBjb25uZWN0XG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEJFTkNIX1VTRV9OT05CTE9DSworICAgIGlmIChTZXRTb2NrZXROb25CbG9ja2luZyhpbmZvLT5jbGllbnQuc29ja0ZkKSAhPSAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChpbmZvLT5zaG93VmVyYm9zZSkgeworICAgICAgICBwcmludGYoIkNvbm5lY3RlZCB0byAlcyBvbiBwb3J0ICVkXG4iLCBob3N0LCBwb3J0KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZW5jaF90bHNfY2xpZW50KGluZm9fdCogaW5mbykKK3sKKyAgICBieXRlICp3cml0ZUJ1ZiA9IE5VTEwsICpyZWFkQnVmID0gTlVMTDsKKyAgICBkb3VibGUgc3RhcnQsIHRvdGFsID0gMDsKKyAgICBpbnQgcmV0LCByZWFkQnVmU3o7CisgICAgV09MRlNTTF9DVFgqIGNsaV9jdHggPSBOVUxMOworICAgIFdPTEZTU0wqIGNsaV9zc2wgPSBOVUxMOworICAgIGludCBoYXZlU2hvd25QZWVySW5mbyA9IDA7CisgICAgaW50IHRsczEzID0gWFNUUk5DTVAoaW5mby0+Y2lwaGVyLCAiVExTMTMiLCA1KSA9PSAwOworICAgIGludCB0b3RhbF9zejsKKworICAgIHRvdGFsID0gZ2V0dGltZV9zZWNzKDApOworCisgICAgLyogc2V0IHVwIGNsaWVudCAqLworI2lmZGVmIFdPTEZTU0xfRFRMUworICAgIGlmKGluZm8tPmRvRFRMUykgeworICAgICAgICBpZiAodGxzMTMpIHJldHVybiBXT0xGU1NMX1NVQ0NFU1M7CisgICAgICAgIGNsaV9jdHggPSB3b2xmU1NMX0NUWF9uZXcod29sZkRUTFN2MV8yX2NsaWVudF9tZXRob2QoKSk7CisgICAgfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgaWYgKHRsczEzKQorICAgICAgICBjbGlfY3R4ID0gd29sZlNTTF9DVFhfbmV3KHdvbGZUTFN2MV8zX2NsaWVudF9tZXRob2QoKSk7CisjZW5kaWYKKyAgICBpZiAoIXRsczEzKQorI2lmZGVmIFdPTEZTU0xfRFRMUworICAgICAgICBpZighaW5mby0+ZG9EVExTKQorI2VuZGlmCisjaWYgIWRlZmluZWQoV09MRlNTTF9UTFMxMykKKyAgICAgICAgY2xpX2N0eCA9IHdvbGZTU0xfQ1RYX25ldyh3b2xmU1NMdjIzX2NsaWVudF9tZXRob2QoKSk7CisjZWxpZiAhZGVmaW5lZChXT0xGU1NMX05PX1RMUzEyKQorICAgICAgICBjbGlfY3R4ID0gd29sZlNTTF9DVFhfbmV3KHdvbGZUTFN2MV8yX2NsaWVudF9tZXRob2QoKSk7CisjZW5kaWYKKworICAgIGlmIChjbGlfY3R4ID09IE5VTEwpIHsKKyAgICAgICAgcHJpbnRmKCJlcnJvciBjcmVhdGluZyBjdHhcbiIpOworICAgICAgICByZXQgPSBNRU1PUllfRTsgZ290byBleGl0OworICAgIH0KKworI2lmbmRlZiBOT19DRVJUUworI2lmZGVmIEhBVkVfRUNDCisgICAgaWYgKFhTVFJTVFIoaW5mby0+Y2lwaGVyLCAiRUNEU0EiKSkgeworICAgICAgICByZXQgPSB3b2xmU1NMX0NUWF9sb2FkX3ZlcmlmeV9idWZmZXIoY2xpX2N0eCwgY2FfZWNjX2NlcnRfZGVyXzI1NiwKKyAgICAgICAgICAgIHNpemVvZl9jYV9lY2NfY2VydF9kZXJfMjU2LCBXT0xGU1NMX0ZJTEVUWVBFX0FTTjEpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIHJldCA9IHdvbGZTU0xfQ1RYX2xvYWRfdmVyaWZ5X2J1ZmZlcihjbGlfY3R4LCBjYV9jZXJ0X2Rlcl8yMDQ4LAorICAgICAgICAgICAgc2l6ZW9mX2NhX2NlcnRfZGVyXzIwNDgsIFdPTEZTU0xfRklMRVRZUEVfQVNOMSk7CisgICAgfQorICAgIGlmIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgIHByaW50ZigiZXJyb3IgbG9hZGluZyBDQVxuIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKworICAgIHdvbGZTU0xfQ1RYX1NldElPU2VuZChjbGlfY3R4LCBDbGllbnRTZW5kKTsKKyAgICB3b2xmU1NMX0NUWF9TZXRJT1JlY3YoY2xpX2N0eCwgQ2xpZW50UmVjdik7CisKKyAgICAvKiBzZXQgY2lwaGVyIHN1aXRlICovCisgICAgcmV0ID0gd29sZlNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGNsaV9jdHgsIGluZm8tPmNpcGhlcik7CisgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgcHJpbnRmKCJlcnJvciBzZXR0aW5nIGNpcGhlciBzdWl0ZVxuIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyNpZm5kZWYgTk9fREgKKyAgICByZXQgPSB3b2xmU1NMX0NUWF9TZXRNaW5EaEtleV9TeihjbGlfY3R4LCBNSU5fREhLRVlfQklUUyk7CisgICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgcHJpbnRmKCJFcnJvciBzZXR0aW5nIG1pbmltdW0gREgga2V5IHNpemVcbiIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIHBhY2tldCBzaXplZCBidWZmZXIgKi8KKyAgICB3cml0ZUJ1ZiA9ICh1bnNpZ25lZCBjaGFyKilYTUFMTE9DKGluZm8tPnBhY2tldFNpemUsIE5VTEwsCisgICAgICAgIERZTkFNSUNfVFlQRV9UTVBfQlVGRkVSKTsKKyAgICBpZiAod3JpdGVCdWYgPT0gTlVMTCkgeworICAgICAgICBwcmludGYoImZhaWxlZCB0byBhbGxvY2F0ZSB3cml0ZSBtZW1vcnlcbiIpOworICAgICAgICByZXQgPSBNRU1PUllfRTsgZ290byBleGl0OworICAgIH0KKworICAgIC8qIEFsbG9jYXRlIHJlYWQgYnVmZmVyICovCisgICAgcmVhZEJ1ZlN6ID0gaW5mby0+cGFja2V0U2l6ZTsKKyAgICByZWFkQnVmID0gKHVuc2lnbmVkIGNoYXIqKVhNQUxMT0MocmVhZEJ1ZlN6LCBOVUxMLCBEWU5BTUlDX1RZUEVfVE1QX0JVRkZFUik7CisgICAgaWYgKHJlYWRCdWYgPT0gTlVMTCkgeworICAgICAgICBwcmludGYoImZhaWxlZCB0byBhbGxvY2F0ZSByZWFkIG1lbW9yeVxuIik7CisgICAgICAgIHJldCA9IE1FTU9SWV9FOyBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyogQkVOQ0hNQVJLIENPTk5FQ1RJT05TIExPT1AgKi8KKyAgICB3aGlsZSAoIWluZm8tPmNsaWVudC5zaHV0ZG93bikgeworICAgICAgICBpbnQgd3JpdGVTeiA9IGluZm8tPnBhY2tldFNpemU7CisgICAgI2lmZGVmIEJFTkNIX1VTRV9OT05CTE9DSworICAgICAgICBpbnQgZXJyOworICAgICNlbmRpZgorCisgICAgI2lmZGVmIEhBVkVfUFRIUkVBRAorICAgICAgICBpZiAoIWluZm8tPnVzZUxvY2FsTWVtKQorICAgICNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXR1cCBzb2NrZXQgYW5kIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgIHJldCA9IFNldHVwU29ja2V0QW5kQ29ubmVjdChpbmZvLCBpbmZvLT5ob3N0LCBpbmZvLT5wb3J0KTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgY2xpX3NzbCA9IHdvbGZTU0xfbmV3KGNsaV9jdHgpOworICAgICAgICBpZiAoY2xpX3NzbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBwcmludGYoImVycm9yIGNyZWF0aW5nIGNsaWVudCBvYmplY3RcbiIpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgaWYgKGluZm8tPmRvRFRMUykgeworICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9kdGxzX3NldF9wZWVyKGNsaV9zc2wsICZpbmZvLT5zZXJ2ZXJBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpbmZvLT5zZXJ2ZXJBZGRyKSk7CisgICAgICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3Igc2V0dGluZyBkdGxzIHBlZXJcbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfU2V0SHNEb25lQ2IoY2xpX3NzbCwgbXlEb25lSHNDYiwgTlVMTCk7CisgICAgICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3IgaGFuZHNoYWtlIGRvbmUgY2FsbGJhY2tcbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHdvbGZTU0xfU2V0SU9SZWFkQ3R4KGNsaV9zc2wsIGluZm8pOworICAgICAgICB3b2xmU1NMX1NldElPV3JpdGVDdHgoY2xpX3NzbCwgaW5mbyk7CisKKyNpZiBkZWZpbmVkKEhBVkVfUFRIUkVBRCkgJiYgZGVmaW5lZChXT0xGU1NMX0RUTFMpCisgICAgICAgIC8qIHN5bmNocm9uaXplIHdpdGggc2VydmVyICovCisgICAgICAgIGlmIChpbmZvLT5kb0RUTFMgJiYgIWluZm8tPmNsaWVudE9yc2VydmVyT25seSkgeworICAgICAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZpbmZvLT5kdGxzX211dGV4KTsKKyAgICAgICAgICAgIGlmIChpbmZvLT5zZXJ2ZXJSZWFkeSAhPSAxKSB7CisgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX3dhaXQoJmluZm8tPmR0bHNfY29uZCwgJmluZm8tPmR0bHNfbXV0ZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogZm9yIG5leHQgbG9vcCAqLworICAgICAgICAgICAgaW5mby0+c2VydmVyUmVhZHkgPSAwOworICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmluZm8tPmR0bHNfbXV0ZXgpOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgLyogcGVyZm9ybSBjb25uZWN0ICovCisgICAgICAgIHN0YXJ0ID0gZ2V0dGltZV9zZWNzKDEpOworICAgICNpZm5kZWYgQkVOQ0hfVVNFX05PTkJMT0NLCisgICAgICAgIHJldCA9IHdvbGZTU0xfY29ubmVjdChjbGlfc3NsKTsKKyAgICAjZWxzZQorICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICByZXQgPSB3b2xmU1NMX2Nvbm5lY3QoY2xpX3NzbCk7CisgICAgICAgICAgICBlcnIgPSB3b2xmU1NMX2dldF9lcnJvcihjbGlfc3NsLCByZXQpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChlcnIgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1JFQUQgfHwgZXJyID09IFdPTEZTU0xfRVJST1JfV0FOVF9XUklURSk7CisgICAgI2VuZGlmCisgICAgICAgIHN0YXJ0ID0gZ2V0dGltZV9zZWNzKDApIC0gc3RhcnQ7CisgICAgICAgIGlmIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgICAgICBwcmludGYoImVycm9yIGNvbm5lY3RpbmcgY2xpZW50XG4iKTsKKyAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfZ2V0X2Vycm9yKGNsaV9zc2wsIHJldCk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgaW5mby0+Y2xpZW50X3N0YXRzLmNvbm5UaW1lICs9IHN0YXJ0OworICAgICAgICBpbmZvLT5jbGllbnRfc3RhdHMuY29ubkNvdW50Kys7CisKKyAgICAgICAgaWYgKChpbmZvLT5zaG93UGVlckluZm8pICYmICghaGF2ZVNob3duUGVlckluZm8pKSB7CisgICAgICAgICAgICBoYXZlU2hvd25QZWVySW5mbyA9IDE7CisgICAgICAgICAgICBzaG93UGVlcihjbGlfc3NsKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNoZWNrIGZvciBydW4gdGltZSBjb21wbGV0aW9uIGFuZCBpc3N1ZSBzaHV0ZG93biAqLworICAgICAgICBpZiAoZ2V0dGltZV9zZWNzKDApIC0gdG90YWwgPj0gaW5mby0+cnVuVGltZVNlYykgeworICAgICAgICAgICAgaW5mby0+Y2xpZW50LnNodXRkb3duID0gMTsKKworICAgICAgICAgICAgd3JpdGVTeiA9IChpbnQpWFNUUkxFTihrU2h1dGRvd24pICsgMTsKKyAgICAgICAgICAgIFhNRU1DUFkod3JpdGVCdWYsIGtTaHV0ZG93biwgd3JpdGVTeik7IC8qIGluY2x1ZGUgbnVsbCB0ZXJtICovCisgICAgICAgICAgICBpZiAoaW5mby0+c2hvd1ZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlNlbmRpbmcgc2h1dGRvd25cbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgPSB3b2xmU1NMX3dyaXRlKGNsaV9zc2wsIHdyaXRlQnVmLCB3cml0ZVN6KTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvciBvbiBjbGllbnQgd3JpdGVcbiIpOworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfZ2V0X2Vycm9yKGNsaV9zc2wsIHJldCk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgWE1FTVNFVCh3cml0ZUJ1ZiwgMCwgaW5mby0+cGFja2V0U2l6ZSk7CisgICAgICAgICAgICBYU1RSTkNQWSgoY2hhciopd3JpdGVCdWYsIGtUZXN0U3RyLCBpbmZvLT5wYWNrZXRTaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdyaXRlIC8gcmVhZCBlY2hvIGxvb3AgKi8KKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgdG90YWxfc3ogPSAwOworICAgICAgICB3aGlsZSAocmV0ID09IDAgJiYgdG90YWxfc3ogPCBpbmZvLT5tYXhTaXplICYmICFpbmZvLT5jbGllbnQuc2h1dGRvd24pIHsKKyAgICAgICAgICAgIC8qIHdyaXRlIHRlc3QgbWVzc2FnZSB0byBzZXJ2ZXIgKi8KKyAgICAgICAgICAgIHN0YXJ0ID0gZ2V0dGltZV9zZWNzKDEpOworICAgICAgICAjaWZuZGVmIEJFTkNIX1VTRV9OT05CTE9DSworICAgICAgICAgICAgcmV0ID0gd29sZlNTTF93cml0ZShjbGlfc3NsLCB3cml0ZUJ1Ziwgd3JpdGVTeik7CisgICAgICAgICNlbHNlCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF93cml0ZShjbGlfc3NsLCB3cml0ZUJ1Ziwgd3JpdGVTeik7CisgICAgICAgICAgICAgICAgZXJyID0gd29sZlNTTF9nZXRfZXJyb3IoY2xpX3NzbCwgcmV0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChlcnIgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1dSSVRFKTsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBpbmZvLT5jbGllbnRfc3RhdHMudHhUaW1lICs9IGdldHRpbWVfc2VjcygwKSAtIHN0YXJ0OworICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImVycm9yIG9uIGNsaWVudCB3cml0ZVxuIik7CisgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9nZXRfZXJyb3IoY2xpX3NzbCwgcmV0KTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmZvLT5jbGllbnRfc3RhdHMudHhUb3RhbCArPSByZXQ7CisgICAgICAgICAgICB0b3RhbF9zeiArPSByZXQ7CisKKyAgICAgICAgICAgIC8qIHJlYWQgZWNobyBvZiBtZXNzYWdlIGZyb20gc2VydmVyICovCisgICAgICAgICAgICBYTUVNU0VUKHJlYWRCdWYsIDAsIHJlYWRCdWZTeik7CisgICAgICAgICAgICBzdGFydCA9IGdldHRpbWVfc2VjcygxKTsKKyAgICAgICAgI2lmbmRlZiBCRU5DSF9VU0VfTk9OQkxPQ0sKKyAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfcmVhZChjbGlfc3NsLCByZWFkQnVmLCByZWFkQnVmU3opOworICAgICAgICAjZWxzZQorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfcmVhZChjbGlfc3NsLCByZWFkQnVmLCByZWFkQnVmU3opOworICAgICAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKGNsaV9zc2wsIHJldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoZXJyID09IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEKTsKKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBpbmZvLT5jbGllbnRfc3RhdHMucnhUaW1lICs9IGdldHRpbWVfc2VjcygwKSAtIHN0YXJ0OworICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImVycm9yIG9uIGNsaWVudCByZWFkXG4iKTsKKyAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX2dldF9lcnJvcihjbGlfc3NsLCByZXQpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZm8tPmNsaWVudF9zdGF0cy5yeFRvdGFsICs9IHJldDsKKyAgICAgICAgICAgIHJldCA9IDA7IC8qIHJlc2V0IHJldHVybiBjb2RlICovCisKKyAgICAgICAgICAgIC8qIHZhbGlkYXRlIGVjaG8gKi8KKyAgICAgICAgICAgIGlmIChYTUVNQ01QKChjaGFyKil3cml0ZUJ1ZiwgKGNoYXIqKXJlYWRCdWYsIHdyaXRlU3opICE9IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImVjaG8gY2hlY2sgZmFpbGVkIVxuIik7CisgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9nZXRfZXJyb3IoY2xpX3NzbCwgcmV0KTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBDbG9zZUFuZENsZWFudXBTb2NrZXQoJmluZm8tPmNsaWVudC5zb2NrRmQpOworCisgICAgICAgIHdvbGZTU0xfZnJlZShjbGlfc3NsKTsKKyAgICAgICAgY2xpX3NzbCA9IE5VTEw7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKHJldCAhPSAwICYmIHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpIHsKKyAgICAgICAgcHJpbnRmKCJDbGllbnQgRXJyb3I6ICVkICglcylcbiIsIHJldCwKKyAgICAgICAgICAgIHdvbGZTU0xfRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmcocmV0KSk7CisgICAgfQorCisgICAgLyogY2xlYW4gdXAgKi8KKyAgICBDbG9zZUFuZENsZWFudXBTb2NrZXQoJmluZm8tPmNsaWVudC5zb2NrRmQpOworICAgIGlmIChjbGlfc3NsICE9IE5VTEwpCisgICAgICAgIHdvbGZTU0xfZnJlZShjbGlfc3NsKTsKKyAgICBpZiAoY2xpX2N0eCAhPSBOVUxMKQorICAgICAgICB3b2xmU1NMX0NUWF9mcmVlKGNsaV9jdHgpOworICAgIFhGUkVFKHJlYWRCdWYsIE5VTEwsIERZTkFNSUNfVFlQRV9UTVBfQlVGRkVSKTsKKyAgICBYRlJFRSh3cml0ZUJ1ZiwgTlVMTCwgRFlOQU1JQ19UWVBFX1RNUF9CVUZGRVIpOworICAgIGluZm8tPmNsaWVudC5yZXQgPSByZXQ7CisKKyAgICByZXR1cm4gcmV0OworfQorCisjaWZkZWYgSEFWRV9QVEhSRUFECitzdGF0aWMgdm9pZCogY2xpZW50X3RocmVhZCh2b2lkKiBhcmdzKQoreworICAgIGludCByZXQ7CisgICAgaW5mb190KiBpbmZvID0gKGluZm9fdCopYXJnczsKKworICAgIHJldCA9IGJlbmNoX3Rsc19jbGllbnQoaW5mbyk7CisKKyAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZpbmZvLT50b19zZXJ2ZXIuY29uZCk7CisgICAgaW5mby0+dG9fY2xpZW50LmRvbmUgPSAxOworICAgIGluZm8tPmNsaWVudC5yZXQgPSByZXQ7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBIQVZFX1BUSFJFQUQgKi8KKyNlbmRpZiAvKiAhTk9fV09MRlNTTF9DTElFTlQgKi8KKworCisjaWZuZGVmIE5PX1dPTEZTU0xfU0VSVkVSCitzdGF0aWMgaW50IFNldHVwU29ja2V0QW5kTGlzdGVuKGludCogbGlzdGVuRmQsIHdvcmQzMiBwb3J0LCBpbnQgZG9EVExTKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2QWRkcjsKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgIGNoYXIgb3B0dmFsID0gMTsKKyNlbHNlCisgICAgaW50IG9wdHZhbCA9IDE7CisjZW5kaWYKKyNpZm5kZWYgV09MRlNTTF9EVExTCisgICAgKHZvaWQpIGRvRFRMUzsKKyNlbmRpZgorICAgIC8qIFNldHVwIHNlcnZlciBhZGRyZXNzICovCisgICAgWE1FTVNFVCgmc2VydkFkZHIsIDAsIHNpemVvZihzZXJ2QWRkcikpOworICAgIHNlcnZBZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIHNlcnZBZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgc2VydkFkZHIuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKworI2lmZGVmIFdPTEZTU0xfRFRMUworICAgIGlmIChkb0RUTFMpIHsKKyAgICAgICAgLyogQ3JlYXRlIGEgc29ja2V0IHRoYXQgaXMgaW1wbGVtZW50ZWQgb24gdGhlIFVzZXIgRGF0YWdyYW0gUHJvdG9jb2wvCisgICAgICAgICogSW50ZXJldCBQcm90b2NvbChVRFAvSVAgcHJvdG9jb2wpLiAqLworICAgICAgICBpZigoKmxpc3RlbkZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA9PSAtMSkgeworICAgICAgICAgICAgcHJpbnRmKCJFUlJPUjogZmFpbGVkIHRvIGNyZWF0ZSB0aGUgc29ja2V0XG4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorI2VuZGlmCisgICAgLyogQ3JlYXRlIGEgc29ja2V0IHRoYXQgdXNlcyBhbiBJbnRlcm5ldCBJUHY0IGFkZHJlc3MsCisgICAgICogU2V0cyB0aGUgc29ja2V0IHRvIGJlIHN0cmVhbSBiYXNlZCAoVENQKSwKKyAgICAgKiAwIG1lYW5zIGNob29zZSB0aGUgZGVmYXVsdCBwcm90b2NvbC4gKi8KKyAgICBpZiAoKCpsaXN0ZW5GZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpID09IC0xKSB7CisgICAgICAgIHByaW50ZigiRVJST1I6IGZhaWxlZCB0byBjcmVhdGUgdGhlIHNvY2tldFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBhbGxvdyByZXVzZSAqLworICAgIGlmIChzZXRzb2Nrb3B0KCpsaXN0ZW5GZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAorICAgICAgICAgICAgICAgICZvcHR2YWwsIHNpemVvZihvcHR2YWwpKSA9PSAtMSkgeworICAgICAgICBwcmludGYoInNldHNvY2tvcHQgU09fUkVVU0VBRERSIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBDb25uZWN0IHRvIHRoZSBzZXJ2ZXIgKi8KKyAgICBpZiAoYmluZCgqbGlzdGVuRmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZzZXJ2QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2VydkFkZHIpKSA9PSAtMSkgeworICAgICAgICBwcmludGYoIkVSUk9SOiBmYWlsZWQgdG8gYmluZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjaWZkZWYgV09MRlNTTF9EVExTCisgICAgaWYgKCFkb0RUTFMpCisjZW5kaWYKKyAgICBpZiAobGlzdGVuKCpsaXN0ZW5GZCwgNSkgIT0gMCkgeworICAgICAgICBwcmludGYoIkVSUk9SOiBmYWlsZWQgdG8gbGlzdGVuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworI2lmZGVmIEJFTkNIX1VTRV9OT05CTE9DSworICAgIGlmIChTZXRTb2NrZXROb25CbG9ja2luZygqbGlzdGVuRmQpICE9IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgU29ja2V0V2FpdENsaWVudChpbmZvX3QqIGluZm8pCit7CisgICAgaW50IGNvbm5kOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnRBZGRyOworICAgIHNvY2tsZW5fdCBzaXplID0gc2l6ZW9mKGNsaWVudEFkZHIpOworI2lmZGVmIFdPTEZTU0xfRFRMUworICAgIGNoYXIgbXNnWzY0XTsKKworICAgIGlmIChpbmZvLT5kb0RUTFMpIHsKKyNpZmRlZiBIQVZFX1BUSFJFQUQKKyAgICAgICAgaWYgKCFpbmZvLT5jbGllbnRPcnNlcnZlck9ubHkpIHsKKyAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmaW5mby0+ZHRsc19tdXRleCk7CisgICAgICAgICAgICBpbmZvLT5zZXJ2ZXJSZWFkeSA9IDE7CisgICAgICAgICAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZpbmZvLT5kdGxzX2NvbmQpOworICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmluZm8tPmR0bHNfbXV0ZXgpOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgY29ubmQgPSAoaW50KXJlY3Zmcm9tKGluZm8tPmxpc3RlbkZkLCAoY2hhciAqKW1zZywgc2l6ZW9mKG1zZyksCisgICAgICAgICAgICBNU0dfUEVFSywgKHN0cnVjdCBzb2NrYWRkciopJmNsaWVudEFkZHIsICZzaXplKTsKKyAgICAgICAgaWYgKGNvbm5kIDwgLTEpIHsKKyAgICAgICAgICAgIHByaW50ZigiRVJST1I6IGZhaWxlZCB0byBhY2NlcHQgdGhlIGNvbm5lY3Rpb25cbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFhNRU1DUFkoJmluZm8tPmNsaWVudEFkZHIsICZjbGllbnRBZGRyLCBzaXplb2YoY2xpZW50QWRkcikpOworICAgICAgICBpbmZvLT5zZXJ2ZXIuc29ja0ZkID0gaW5mby0+bGlzdGVuRmQ7CisgICAgfSBlbHNlIHsKKyNlbmRpZgorICAgIGlmICgoY29ubmQgPSBhY2NlcHQoaW5mby0+bGlzdGVuRmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZjbGllbnRBZGRyLCAmc2l6ZSkpID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBTT0NLRVRfRVdPVUxEQkxPQ0spCisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAgIHByaW50ZigiRVJST1I6IGZhaWxlZCB0byBhY2NlcHQgdGhlIGNvbm5lY3Rpb25cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGluZm8tPnNlcnZlci5zb2NrRmQgPSBjb25uZDsKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChpbmZvLT5zaG93VmVyYm9zZSkgeworICAgICAgICBwcmludGYoIkdvdCBjbGllbnQgJWRcbiIsIGNvbm5kKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIENsb3NlQW5kQ2xlYW51cExpc3RlblNvY2tldChpbnQqIGxpc3RlbkZkKQoreworICAgIGlmICgqbGlzdGVuRmQgIT0gLTEpIHsKKyAgICAgICAgY2xvc2UoKmxpc3RlbkZkKTsKKyAgICAgICAgKmxpc3RlbkZkID0gLTE7CisgICAgfQorfQorCitzdGF0aWMgaW50IGJlbmNoX3Rsc19zZXJ2ZXIoaW5mb190KiBpbmZvKQoreworICAgIGJ5dGUgKnJlYWRCdWYgPSBOVUxMOworICAgIGRvdWJsZSBzdGFydDsKKyAgICBpbnQgcmV0LCBsZW4gPSAwLCByZWFkQnVmU3o7CisgICAgV09MRlNTTF9DVFgqIHNydl9jdHggPSBOVUxMOworICAgIFdPTEZTU0wqIHNydl9zc2wgPSBOVUxMOworICAgIGludCB0bHMxMyA9IFhTVFJOQ01QKGluZm8tPmNpcGhlciwgIlRMUzEzIiwgNSkgPT0gMDsKKyAgICBpbnQgdG90YWxfc3o7CisKKyAgICAvKiBzZXQgdXAgc2VydmVyICovCisjaWZkZWYgV09MRlNTTF9EVExTCisgICAgaWYoaW5mby0+ZG9EVExTKSB7CisgICAgICAgIGlmKHRsczEzKSByZXR1cm4gV09MRlNTTF9TVUNDRVNTOworICAgICAgICBzcnZfY3R4ID0gd29sZlNTTF9DVFhfbmV3KHdvbGZEVExTdjFfMl9zZXJ2ZXJfbWV0aG9kKCkpOworICAgIH0gZWxzZSB7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgaWYgKHRsczEzKQorICAgICAgICBzcnZfY3R4ID0gd29sZlNTTF9DVFhfbmV3KHdvbGZUTFN2MV8zX3NlcnZlcl9tZXRob2QoKSk7CisjZW5kaWYKKyAgICBpZiAoIXRsczEzKQorICAgICAgICBzcnZfY3R4ID0gd29sZlNTTF9DVFhfbmV3KHdvbGZTU0x2MjNfc2VydmVyX21ldGhvZCgpKTsKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoc3J2X2N0eCA9PSBOVUxMKSB7CisgICAgICAgIHByaW50ZigiZXJyb3IgY3JlYXRpbmcgc2VydmVyIGN0eFxuIik7CisgICAgICAgIHJldCA9IE1FTU9SWV9FOyBnb3RvIGV4aXQ7CisgICAgfQorCisjaWZuZGVmIE5PX0NFUlRTCisjaWZkZWYgSEFWRV9FQ0MKKyAgICBpZiAoWFNUUlNUUihpbmZvLT5jaXBoZXIsICJFQ0RTQSIpKSB7CisgICAgICAgIHJldCA9IHdvbGZTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2J1ZmZlcihzcnZfY3R4LCBlY2Nfa2V5X2Rlcl8yNTYsCisgICAgICAgICAgICBzaXplb2ZfZWNjX2tleV9kZXJfMjU2LCBXT0xGU1NMX0ZJTEVUWVBFX0FTTjEpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIHJldCA9IHdvbGZTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2J1ZmZlcihzcnZfY3R4LCBzZXJ2ZXJfa2V5X2Rlcl8yMDQ4LAorICAgICAgICAgICAgc2l6ZW9mX3NlcnZlcl9rZXlfZGVyXzIwNDgsIFdPTEZTU0xfRklMRVRZUEVfQVNOMSk7CisgICAgfQorICAgIGlmIChyZXQgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgIHByaW50ZigiZXJyb3IgbG9hZGluZyBzZXJ2ZXIga2V5XG4iKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmZGVmIEhBVkVfRUNDCisgICAgaWYgKFhTVFJTVFIoaW5mby0+Y2lwaGVyLCAiRUNEU0EiKSkgeworICAgICAgICByZXQgPSB3b2xmU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfYnVmZmVyKHNydl9jdHgsIHNlcnZfZWNjX2Rlcl8yNTYsCisgICAgICAgICAgICBzaXplb2Zfc2Vydl9lY2NfZGVyXzI1NiwgV09MRlNTTF9GSUxFVFlQRV9BU04xKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICByZXQgPSB3b2xmU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfYnVmZmVyKHNydl9jdHgsIHNlcnZlcl9jZXJ0X2Rlcl8yMDQ4LAorICAgICAgICAgICAgc2l6ZW9mX3NlcnZlcl9jZXJ0X2Rlcl8yMDQ4LCBXT0xGU1NMX0ZJTEVUWVBFX0FTTjEpOworICAgIH0KKyAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICBwcmludGYoImVycm9yIGxvYWRpbmcgc2VydmVyIGNlcnRcbiIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmIC8qICFOT19DRVJUUyAqLworCisgICAgd29sZlNTTF9DVFhfU2V0SU9TZW5kKHNydl9jdHgsIFNlcnZlclNlbmQpOworICAgIHdvbGZTU0xfQ1RYX1NldElPUmVjdihzcnZfY3R4LCBTZXJ2ZXJSZWN2KTsKKworICAgIC8qIHNldCBjaXBoZXIgc3VpdGUgKi8KKyAgICByZXQgPSB3b2xmU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Qoc3J2X2N0eCwgaW5mby0+Y2lwaGVyKTsKKyAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICBwcmludGYoImVycm9yIHNldHRpbmcgY2lwaGVyIHN1aXRlXG4iKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmbmRlZiBOT19ESAorICAgIHJldCA9IHdvbGZTU0xfQ1RYX1NldE1pbkRoS2V5X1N6KHNydl9jdHgsIE1JTl9ESEtFWV9CSVRTKTsKKyAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICBwcmludGYoIkVycm9yIHNldHRpbmcgbWluaW11bSBESCBrZXkgc2l6ZVxuIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIEFsbG9jYXRlIHJlYWQgYnVmZmVyICovCisgICAgcmVhZEJ1ZlN6ID0gaW5mby0+cGFja2V0U2l6ZTsKKyAgICByZWFkQnVmID0gKHVuc2lnbmVkIGNoYXIqKVhNQUxMT0MocmVhZEJ1ZlN6LCBOVUxMLCBEWU5BTUlDX1RZUEVfVE1QX0JVRkZFUik7CisgICAgaWYgKHJlYWRCdWYgPT0gTlVMTCkgeworICAgICAgICBwcmludGYoImZhaWxlZCB0byBhbGxvY2F0ZSByZWFkIG1lbW9yeVxuIik7CisgICAgICAgIHJldCA9IE1FTU9SWV9FOyBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyogQkVOQ0hNQVJLIENPTk5FQ1RJT05TIExPT1AgKi8KKyAgICB3aGlsZSAoIWluZm8tPnNlcnZlci5zaHV0ZG93bikgeworICAgICNpZmRlZiBCRU5DSF9VU0VfTk9OQkxPQ0sKKyAgICAgICAgaW50IGVycjsKKyAgICAjZW5kaWYKKworICAgICNpZmRlZiBIQVZFX1BUSFJFQUQKKyAgICAgICAgaWYgKCFpbmZvLT51c2VMb2NhbE1lbSkKKyAgICAjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgLyogQWNjZXB0IGNsaWVudCBjb25uZWN0aW9ucyAqLworICAgICAgICAgICAgcmV0ID0gU29ja2V0V2FpdENsaWVudChpbmZvKTsKKyAgICAgICAgI2lmZGVmIEJFTkNIX1VTRV9OT05CTE9DSworICAgICAgICAgICAgaWYgKHJldCA9PSAtMikgeworICAgICAgICAgICAgICAgIFhTTEVFUF9NUygwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzcnZfc3NsID0gd29sZlNTTF9uZXcoc3J2X2N0eCk7CisgICAgICAgIGlmIChzcnZfc3NsID09IE5VTEwpIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3IgY3JlYXRpbmcgc2VydmVyIG9iamVjdFxuIik7CisgICAgICAgICAgICByZXQgPSBNRU1PUllfRTsgZ290byBleGl0OworICAgICAgICB9CisjaWZkZWYgV09MRlNTTF9EVExTCisgICAgICAgIGlmIChpbmZvLT5kb0RUTFMpIHsKKyAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfZHRsc19zZXRfcGVlcihzcnZfc3NsLCAmaW5mby0+Y2xpZW50QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpbmZvLT5jbGllbnRBZGRyKSk7CisgICAgICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3Igc2V0dGluZyBkdGxzIHBlZXJcbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgd29sZlNTTF9TZXRJT1JlYWRDdHgoc3J2X3NzbCwgaW5mbyk7CisgICAgICAgIHdvbGZTU0xfU2V0SU9Xcml0ZUN0eChzcnZfc3NsLCBpbmZvKTsKKyAgICAjaWZuZGVmIE5PX0RICisgICAgICAgIHdvbGZTU0xfU2V0VG1wREgoc3J2X3NzbCwgZGhwLCBzaXplb2YoZGhwKSwgZGhnLCBzaXplb2YoZGhnKSk7CisgICAgI2VuZGlmCisKKyAgICAgICAgLyogYWNjZXB0IFRMUyBjb25uZWN0aW9uICovCisgICAgICAgIHN0YXJ0ID0gZ2V0dGltZV9zZWNzKDEpOworICAgICNpZm5kZWYgQkVOQ0hfVVNFX05PTkJMT0NLCisgICAgICAgIHJldCA9IHdvbGZTU0xfYWNjZXB0KHNydl9zc2wpOworICAgICNlbHNlCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfYWNjZXB0KHNydl9zc2wpOworICAgICAgICAgICAgZXJyID0gd29sZlNTTF9nZXRfZXJyb3Ioc3J2X3NzbCwgcmV0KTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoZXJyID09IFdPTEZTU0xfRVJST1JfV0FOVF9SRUFEIHx8IGVyciA9PSBXT0xGU1NMX0VSUk9SX1dBTlRfV1JJVEUpOworICAgICNlbmRpZgorICAgICAgICBzdGFydCA9IGdldHRpbWVfc2VjcygwKSAtIHN0YXJ0OworICAgICAgICBpZiAocmV0ICE9IFdPTEZTU0xfU1VDQ0VTUykgeworICAgICAgICAgICAgcHJpbnRmKCJlcnJvciBvbiBzZXJ2ZXIgYWNjZXB0XG4iKTsKKyAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNydl9zc2wsIHJldCk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpbmZvLT5zZXJ2ZXJfc3RhdHMuY29ublRpbWUgKz0gc3RhcnQ7CisgICAgICAgIGluZm8tPnNlcnZlcl9zdGF0cy5jb25uQ291bnQrKzsKKworICAgICAgICAvKiBlY2hvIGxvb3AgKi8KKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgdG90YWxfc3ogPSAwOworICAgICAgICB3aGlsZSAocmV0ID09IDAgJiYgdG90YWxfc3ogPCBpbmZvLT5tYXhTaXplKSB7CisgICAgICAgICAgICBkb3VibGUgcnhUaW1lOworCisgICAgICAgICAgICAvKiByZWFkIG1lc3NhZ2UgZnJvbSBjbGllbnQgKi8KKyAgICAgICAgICAgIFhNRU1TRVQocmVhZEJ1ZiwgMCwgcmVhZEJ1ZlN6KTsKKyAgICAgICAgICAgIHN0YXJ0ID0gZ2V0dGltZV9zZWNzKDEpOworICAgICAgICAjaWZuZGVmIEJFTkNIX1VTRV9OT05CTE9DSworICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9yZWFkKHNydl9zc2wsIHJlYWRCdWYsIHJlYWRCdWZTeik7CisgICAgICAgICNlbHNlCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF9yZWFkKHNydl9zc2wsIHJlYWRCdWYsIHJlYWRCdWZTeik7CisgICAgICAgICAgICAgICAgZXJyID0gd29sZlNTTF9nZXRfZXJyb3Ioc3J2X3NzbCwgcmV0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChlcnIgPT0gV09MRlNTTF9FUlJPUl9XQU5UX1JFQUQpOworICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIHJ4VGltZSA9IGdldHRpbWVfc2VjcygwKSAtIHN0YXJ0OworCisgICAgICAgICAgICAvKiBzaHV0ZG93biBzaWduYWxzLCBubyBtb3JlIGNvbm5lY3Rpb25zIGZvciB0aGlzIGNpcGhlciAqLworICAgICAgICAgICAgaWYgKFhTVFJTVFIoKGNvbnN0IGNoYXIqKXJlYWRCdWYsIGtTaHV0ZG93bikgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGluZm8tPnNlcnZlci5zaHV0ZG93biA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGluZm8tPnNob3dWZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU2VydmVyIHNodXRkb3duIGRvbmVcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXQgPSAwOyAvKiBzdWNjZXNzICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluZm8tPnNlcnZlcl9zdGF0cy5yeFRpbWUgKz0gcnhUaW1lOworICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImVycm9yIG9uIHNlcnZlciByZWFkXG4iKTsKKyAgICAgICAgICAgICAgICByZXQgPSB3b2xmU1NMX2dldF9lcnJvcihzcnZfc3NsLCByZXQpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZm8tPnNlcnZlcl9zdGF0cy5yeFRvdGFsICs9IHJldDsKKyAgICAgICAgICAgIGxlbiA9IHJldDsKKyAgICAgICAgICAgIHRvdGFsX3N6ICs9IHJldDsKKworICAgICAgICAgICAgLyogd3JpdGUgbWVzc2FnZSBiYWNrIHRvIGNsaWVudCAqLworICAgICAgICAgICAgc3RhcnQgPSBnZXR0aW1lX3NlY3MoMSk7CisgICAgICAgICNpZm5kZWYgQkVOQ0hfVVNFX05PTkJMT0NLCisgICAgICAgICAgICByZXQgPSB3b2xmU1NMX3dyaXRlKHNydl9zc2wsIHJlYWRCdWYsIGxlbik7CisgICAgICAgICNlbHNlCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcmV0ID0gd29sZlNTTF93cml0ZShzcnZfc3NsLCByZWFkQnVmLCBsZW4pOworICAgICAgICAgICAgICAgIGVyciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNydl9zc2wsIHJldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoZXJyID09IFdPTEZTU0xfRVJST1JfV0FOVF9XUklURSk7CisgICAgICAgICNlbmRpZgorICAgICAgICAgICAgaW5mby0+c2VydmVyX3N0YXRzLnR4VGltZSArPSBnZXR0aW1lX3NlY3MoMCkgLSBzdGFydDsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvciBvbiBzZXJ2ZXIgd3JpdGVcbiIpOworICAgICAgICAgICAgICAgIHJldCA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNydl9zc2wsIHJldCk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5mby0+c2VydmVyX3N0YXRzLnR4VG90YWwgKz0gcmV0OworICAgICAgICAgICAgcmV0ID0gMDsgLyogcmVzZXQgcmV0dXJuIGNvZGUgKi8KKyAgICAgICAgfQorCisgICAgICAgIENsb3NlQW5kQ2xlYW51cFNvY2tldCgmaW5mby0+c2VydmVyLnNvY2tGZCk7CisKKyAgICAgICAgd29sZlNTTF9mcmVlKHNydl9zc2wpOworICAgICAgICBzcnZfc3NsID0gTlVMTDsKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgaWYgKGluZm8tPmRvRFRMUykgeworICAgICAgICAgICAgU2V0dXBTb2NrZXRBbmRMaXN0ZW4oJmluZm8tPmxpc3RlbkZkLCBpbmZvLT5wb3J0LCBpbmZvLT5kb0RUTFMpOworICAgICAgICB9CisjZW5kaWYKKworICAgIH0KKworZXhpdDoKKworICAgIGlmIChyZXQgIT0gMCAmJiByZXQgIT0gV09MRlNTTF9TVUNDRVNTKSB7CisgICAgICAgIHByaW50ZigiU2VydmVyIEVycm9yOiAlZCAoJXMpXG4iLCByZXQsCisgICAgICAgICAgICB3b2xmU1NMX0VSUl9yZWFzb25fZXJyb3Jfc3RyaW5nKHJldCkpOworICAgIH0KKworICAgIC8qIGNsZWFuIHVwICovCisgICAgQ2xvc2VBbmRDbGVhbnVwU29ja2V0KCZpbmZvLT5zZXJ2ZXIuc29ja0ZkKTsKKyAgICBpZiAoc3J2X3NzbCAhPSBOVUxMKQorICAgICAgICB3b2xmU1NMX2ZyZWUoc3J2X3NzbCk7CisgICAgaWYgKHNydl9jdHggIT0gTlVMTCkKKyAgICAgICAgd29sZlNTTF9DVFhfZnJlZShzcnZfY3R4KTsKKyAgICBYRlJFRShyZWFkQnVmLCBOVUxMLCBEWU5BTUlDX1RZUEVfVE1QX0JVRkZFUik7CisgICAgaW5mby0+c2VydmVyLnJldCA9IHJldDsKKworICAgIHJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBIQVZFX1BUSFJFQUQKK3N0YXRpYyB2b2lkKiBzZXJ2ZXJfdGhyZWFkKHZvaWQqIGFyZ3MpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgaW5mb190KiBpbmZvID0gKGluZm9fdCopYXJnczsKKworICAgIGlmICghaW5mby0+dXNlTG9jYWxNZW0pIHsKKyAgICAgICAgLyogU2V0dXAgVExTIHNlcnZlciBsaXN0ZW5lciAqLworI2lmZGVmIFdPTEZTU0xfRFRMUworICAgICAgICByZXQgPSBTZXR1cFNvY2tldEFuZExpc3RlbigmaW5mby0+bGlzdGVuRmQsIGluZm8tPnBvcnQsIGluZm8tPmRvRFRMUyk7CisjZWxzZQorICAgICAgICByZXQgPSBTZXR1cFNvY2tldEFuZExpc3RlbigmaW5mby0+bGlzdGVuRmQsIGluZm8tPnBvcnQsIDApOworI2VuZGlmCisgICAgfQorICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXQgPSBiZW5jaF90bHNfc2VydmVyKGluZm8pOworCisgICAgICAgIGlmICghaW5mby0+dXNlTG9jYWxNZW0pIHsKKyAgICAgICAgICAgIENsb3NlQW5kQ2xlYW51cExpc3RlblNvY2tldCgmaW5mby0+bGlzdGVuRmQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHRocmVhZF9jb25kX3NpZ25hbCgmaW5mby0+dG9fY2xpZW50LmNvbmQpOworICAgIGluZm8tPnRvX3NlcnZlci5kb25lID0gMTsKKyAgICBpbmZvLT5zZXJ2ZXIucmV0ID0gcmV0OworCisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogSEFWRV9QVEhSRUFEICovCisjZW5kaWYgLyogIU5PX1dPTEZTU0xfU0VSVkVSICovCisKKworI2lmZGVmIF9fR05VQ19fCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKyNlbmRpZgorc3RhdGljIHZvaWQgcHJpbnRfc3RhdHMoc3RhdHNfdCogd2NTdGF0LCBjb25zdCBjaGFyKiBkZXNjLCBjb25zdCBjaGFyKiBjaXBoZXIsIGludCB2ZXJib3NlKQoreworICAgIGNvbnN0IGNoYXIqIGZvcm1hdFN0cjsKKworICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgIGZvcm1hdFN0ciA9ICJ3b2xmU1NMICVzIEJlbmNobWFyayBvbiAlczpcbiIKKyAgICAgICAgICAgICAgICJcdFRvdGFsICAgICAgIDogJTlkIGJ5dGVzXG4iCisgICAgICAgICAgICAgICAiXHROdW0gQ29ubnMgICA6ICU5ZFxuIgorICAgICAgICAgICAgICAgIlx0UnggVG90YWwgICAgOiAlOS4zZiBtc1xuIgorICAgICAgICAgICAgICAgIlx0VHggVG90YWwgICAgOiAlOS4zZiBtc1xuIgorICAgICAgICAgICAgICAgIlx0UnggICAgICAgICAgOiAlOS4zZiBNQi9zXG4iCisgICAgICAgICAgICAgICAiXHRUeCAgICAgICAgICA6ICU5LjNmIE1CL3NcbiIKKyAgICAgICAgICAgICAgICJcdENvbm5lY3QgICAgIDogJTkuM2YgbXNcbiIKKyAgICAgICAgICAgICAgICJcdENvbm5lY3QgQXZnIDogJTkuM2YgbXNcbiI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmb3JtYXRTdHIgPSAiJS02cyAgJS0zM3MgICUxMWQgICU5ZCAgJTkuM2YgICU5LjNmICAlOS4zZiAgJTkuM2YgICUxNy4zZiAgJTE1LjNmXG4iOworICAgIH0KKworICAgIHByaW50Zihmb3JtYXRTdHIsCisgICAgICAgICAgIGRlc2MsCisgICAgICAgICAgIGNpcGhlciwKKyAgICAgICAgICAgd2NTdGF0LT50eFRvdGFsICsgd2NTdGF0LT5yeFRvdGFsLAorICAgICAgICAgICB3Y1N0YXQtPmNvbm5Db3VudCwKKyAgICAgICAgICAgd2NTdGF0LT5yeFRpbWUgKiAxMDAwLAorICAgICAgICAgICB3Y1N0YXQtPnR4VGltZSAqIDEwMDAsCisgICAgICAgICAgIHdjU3RhdC0+cnhUb3RhbCAvIHdjU3RhdC0+cnhUaW1lIC8gMTAyNCAvIDEwMjQsCisgICAgICAgICAgIHdjU3RhdC0+dHhUb3RhbCAvIHdjU3RhdC0+dHhUaW1lIC8gMTAyNCAvIDEwMjQsCisgICAgICAgICAgIHdjU3RhdC0+Y29ublRpbWUgKiAxMDAwLAorICAgICAgICAgICB3Y1N0YXQtPmNvbm5UaW1lICogMTAwMCAvIHdjU3RhdC0+Y29ubkNvdW50KTsKK30KKworc3RhdGljIHZvaWQgVXNhZ2Uodm9pZCkKK3sKKyAgICBwcmludGYoInRsc19iZW5jaCAiICAgIExJQldPTEZTU0xfVkVSU0lPTl9TVFJJTkcKKyAgICAgICAgICAgIiBOT1RFOiBBbGwgZmlsZXMgcmVsYXRpdmUgdG8gd29sZlNTTCBob21lIGRpclxuIik7CisgICAgcHJpbnRmKCItPyAgICAgICAgICBIZWxwLCBwcmludCB0aGlzIHVzYWdlXG4iKTsKKyAgICBwcmludGYoIi1jICAgICAgICAgIFJ1biBhcyBjbGllbnQgb25seSwgbm8gdGhyZWFkaW5nIGFuZCB1c2VzIHNvY2tldHNcbiIpOworICAgIHByaW50ZigiLXMgICAgICAgICAgUnVuIGFzIHNlcnZlciBvbmx5LCBubyB0aHJlYWRpbmcgYW5kIHVzZXMgc29ja2V0c1xuIik7CisgICAgcHJpbnRmKCItaCAgICAgICAgICBIb3N0IChkZWZhdWx0ICVzKVxuIiwgQkVOQ0hfREVGQVVMVF9IT1NUKTsKKyAgICBwcmludGYoIi1QICAgICAgICAgIFBvcnQgKGRlZmF1bHQgJWQpXG4iLCBCRU5DSF9ERUZBVUxUX1BPUlQpOworICAgIHByaW50ZigiLWUgICAgICAgICAgTGlzdCBFdmVyeSBjaXBoZXIgc3VpdGUgYXZhaWxhYmxlXG4iKTsKKyAgICBwcmludGYoIi1pICAgICAgICAgIFNob3cgcGVlciBpbmZvXG4iKTsKKyAgICBwcmludGYoIi1sIDxzdHI+ICAgIENpcGhlciBzdWl0ZSBsaXN0ICg6IGRlbGltaXRlZClcbiIpOworICAgIHByaW50ZigiLXQgPG51bT4gICAgVGltZSA8bnVtPiAoc2Vjb25kcykgdG8gcnVuIGVhY2ggdGVzdCAoZGVmYXVsdCAlZClcbiIsIEJFTkNIX1JVTlRJTUVfU0VDKTsKKyAgICBwcmludGYoIi1wIDxudW0+ICAgIFRoZSBwYWNrZXQgc2l6ZSA8bnVtPiBpbiBieXRlcyBbMS0xNmtCXSAoZGVmYXVsdCAlZClcbiIsIFRFU1RfUEFDS0VUX1NJWkUpOworI2lmZGVmIFdPTEZTU0xfRFRMUworICAgIHByaW50ZigiICAgICAgICAgICAgSW4gdGhlIGNhc2Ugb2YgRFRMUywgWzEtOGtCXSAoZGVmYXVsdCAlZClcbiIsIFRFU1RfRFRMU19QQUNLRVRfU0laRSk7CisjZW5kaWYKKyAgICBwcmludGYoIi1TIDxudW0+ICAgIFRoZSB0b3RhbCBzaXplIDxudW0+IGluIGJ5dGVzIChkZWZhdWx0ICVkKVxuIiwgVEVTVF9NQVhfU0laRSk7CisgICAgcHJpbnRmKCItdiAgICAgICAgICBTaG93IHZlcmJvc2Ugb3V0cHV0XG4iKTsKKyNpZmRlZiBERUJVR19XT0xGU1NMCisgICAgcHJpbnRmKCItZCAgICAgICAgICBFbmFibGUgZGVidWcgbWVzc2FnZXNcbiIpOworI2VuZGlmCisjaWZkZWYgSEFWRV9QVEhSRUFECisgICAgcHJpbnRmKCItVCA8bnVtPiAgICBOdW1iZXIgb2YgdGhyZWFkZWQgc2VydmVyL2NsaWVudCBwYWlycyAoZGVmYXVsdCAlZClcbiIsIE5VTV9USFJFQURfUEFJUlMpOworICAgIHByaW50ZigiLW0gICAgICAgICAgVXNlIGxvY2FsIG1lbW9yeSwgbm90IHNvY2tldFxuIik7CisjZW5kaWYKKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICBwcmludGYoIi11ICAgICAgICAgIFVzZSBEVExTXG4iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBTaG93Q2lwaGVycyh2b2lkKQoreworICAgIGNoYXIgY2lwaGVyc1tXT0xGU1NMX0NJUEhFUl9MSVNUX01BWF9TSVpFXTsKKworICAgIGludCByZXQgPSB3b2xmU1NMX2dldF9jaXBoZXJzKGNpcGhlcnMsIChpbnQpc2l6ZW9mKGNpcGhlcnMpKTsKKworICAgIGlmIChyZXQgPT0gV09MRlNTTF9TVUNDRVNTKQorICAgICAgICBwcmludGYoIiVzXG4iLCBjaXBoZXJzKTsKK30KKworI2lmZGVmIF9fR05VQ19fCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKK2ludCBiZW5jaF90bHModm9pZCogYXJncykKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBpbmZvX3QgKnRoZWFkSW5mbyA9IE5VTEwsICppbmZvOworICAgIHN0YXRzX3QgY2xpX2NvbWIsIHNydl9jb21iOworICAgIGludCBpOworICAgIGNoYXIgKmNpcGhlciwgKm5leHRfY2lwaGVyLCAqY2lwaGVycyA9IE5VTEw7CisgICAgaW50ICAgICBhcmdjID0gMDsKKyAgICBjaGFyKiogIGFyZ3YgPSBOVUxMOworICAgIGludCAgICBjaDsKKworICAgIC8qIFZhcnMgY29uZmlndXJlZCBieSBjb21tYW5kIGxpbmUgYXJndW1lbnRzICovCisgICAgaW50IGFyZ1J1bnRpbWVTZWMgPSBCRU5DSF9SVU5USU1FX1NFQzsKKyAgICBjaGFyICphcmdDaXBoZXJMaXN0ID0gTlVMTDsKKyAgICBpbnQgYXJnVGVzdFBhY2tldFNpemUgPSBURVNUX1BBQ0tFVF9TSVpFOworICAgIGludCBhcmdUZXN0TWF4U2l6ZSA9IFRFU1RfTUFYX1NJWkU7CisgICAgaW50IGFyZ1RocmVhZFBhaXJzID0gTlVNX1RIUkVBRF9QQUlSUzsKKyAgICBpbnQgYXJnU2hvd1ZlcmJvc2UgPSBTSE9XX1ZFUkJPU0U7CisgICAgaW50IGFyZ0NsaWVudE9ubHkgPSAwOworICAgIGludCBhcmdTZXJ2ZXJPbmx5ID0gMDsKKyAgICBjb25zdCBjaGFyKiBhcmdIb3N0ID0gQkVOQ0hfREVGQVVMVF9IT1NUOworICAgIGludCBhcmdQb3J0ID0gQkVOQ0hfREVGQVVMVF9QT1JUOworICAgIGludCBhcmdTaG93UGVlckluZm8gPSAwOworI2lmZGVmIEhBVkVfUFRIUkVBRAorICAgIGludCBkb1NodXRkb3duOworI2VuZGlmCisjaWYgIWRlZmluZWQoTk9fV09MRlNTTF9TRVJWRVIpIHx8IGRlZmluZWQoSEFWRV9QVEhSRUFEKQorICAgIGludCBhcmdMb2NhbE1lbSA9IDA7CisgICAgaW50IGxpc3RlbkZkID0gLTE7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFdPTEZTU0xfRFRMUykgJiYgIWRlZmluZWQoTk9fV09MRlNTTF9TRVJWRVIpCisgICAgaW50IG9wdGlvbl9wID0gMDsKKyNlbmRpZgorI2lmZGVmIFdPTEZTU0xfRFRMUworICAgIGludCBkb0RUTFMgPSAwOworI2VuZGlmCisgICAgaWYgKGFyZ3MgIT0gTlVMTCkgeworICAgICAgICBhcmdjID0gKChmdW5jX2FyZ3MqKWFyZ3MpLT5hcmdjOworICAgICAgICBhcmd2ID0gKChmdW5jX2FyZ3MqKWFyZ3MpLT5hcmd2OworICAgICAgICAoKGZ1bmNfYXJncyopYXJncyktPnJldHVybl9jb2RlID0gLTE7IC8qIGVycm9yIHN0YXRlICovCisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSB3b2xmU1NMICovCisgICAgd29sZlNTTF9Jbml0KCk7CisKKyAgICAvKiBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzICovCisgICAgd2hpbGUgKChjaCA9IG15Z2V0b3B0KGFyZ2MsIGFyZ3YsICI/IiAidWRlaWw6cDp0OnZUOnNjaDpQOm1TOiIpKSAhPSAtMSkgeworICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAgICBjYXNlICc/JyA6CisgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIGFyZ1NlcnZlck9ubHkgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBhcmdDbGllbnRPbmx5ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgYXJnSG9zdCA9IG15b3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdQJzoKKyAgICAgICAgICAgICAgICBhcmdQb3J0ID0gYXRvaShteW9wdGFyZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2QnIDoKKyAgICAgICAgICAgICNpZmRlZiBERUJVR19XT0xGU1NMCisgICAgICAgICAgICAgICAgd29sZlNTTF9EZWJ1Z2dpbmdfT04oKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdlJyA6CisgICAgICAgICAgICAgICAgU2hvd0NpcGhlcnMoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgICAgIGNhc2UgJ2knIDoKKyAgICAgICAgICAgICAgICBhcmdTaG93UGVlckluZm8gPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdsJyA6CisgICAgICAgICAgICAgICAgYXJnQ2lwaGVyTGlzdCA9IG15b3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdwJyA6CisgICAgICAgICAgICAgICAgYXJnVGVzdFBhY2tldFNpemUgPSBhdG9pKG15b3B0YXJnKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJnVGVzdFBhY2tldFNpemUgPiAoMTYgKiAxMDI0KSkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIkludmFsaWQgcGFja2V0IHNpemUgJWRcbiIsIGFyZ1Rlc3RQYWNrZXRTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgVXNhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gTVlfRVhfVVNBR0U7IGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWYgZGVmaW5lZChXT0xGU1NMX0RUTFMpICYmICFkZWZpbmVkKE5PX1dPTEZTU0xfU0VSVkVSKQorICAgICAgICAgICAgICAgIG9wdGlvbl9wID0gMTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdTJyA6CisgICAgICAgICAgICAgICAgYXJnVGVzdE1heFNpemUgPSBhdG9pKG15b3B0YXJnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAndCcgOgorICAgICAgICAgICAgICAgIGFyZ1J1bnRpbWVTZWMgPSBhdG9pKG15b3B0YXJnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAndicgOgorICAgICAgICAgICAgICAgIGFyZ1Nob3dWZXJib3NlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnVCcgOgorICAgICAgICAgICAgI2lmZGVmIEhBVkVfUFRIUkVBRAorICAgICAgICAgICAgICAgIGFyZ1RocmVhZFBhaXJzID0gYXRvaShteW9wdGFyZyk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAjaWZkZWYgSEFWRV9QVEhSRUFECisgICAgICAgICAgICAgICAgYXJnTG9jYWxNZW0gPSAxOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgICAgICAgICBkb0RUTFMgPSAxOworICAgICAgICAgICAgICAgICNpZmRlZiBCRU5DSF9VU0VfTk9OQkxPQ0sKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ0bHNfYmVuY2ggaGFzbid0IHlldCBzdXBwb3J0ZWQgRFRMUyAiCisgICAgICAgICAgICAgICAgICAgICAgICJub24tYmxvY2tpbmcgbW9kZS5cbiIpOworICAgICAgICAgICAgICAgICAgICBVc2FnZSgpOworICAgICAgICAgICAgICAgICAgICByZXQgPSBNWV9FWF9VU0FHRTsgZ290byBleGl0OworICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVzYWdlKCk7CisgICAgICAgICAgICAgICAgcmV0ID0gTVlfRVhfVVNBR0U7IGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHJlc2V0IGZvciB0ZXN0IGNhc2VzICovCisgICAgbXlvcHRpbmQgPSAwOworCisgICAgaWYgKGFyZ0NpcGhlckxpc3QgIT0gTlVMTCkgeworICAgICAgICAvKiBVc2UgdGhlIGxpc3QgZnJvbSBDTCBhcmd1bWVudCAqLworICAgICAgICBjaXBoZXIgPSBhcmdDaXBoZXJMaXN0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogUnVuIGZvciBlYWNoIGNpcGhlciAqLworICAgICAgICBjaXBoZXJzID0gKGNoYXIqKVhNQUxMT0MoV09MRlNTTF9DSVBIRVJfTElTVF9NQVhfU0laRSwgTlVMTCwgRFlOQU1JQ19UWVBFX1RNUF9CVUZGRVIpOworICAgICAgICBpZiAoY2lwaGVycyA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgd29sZlNTTF9nZXRfY2lwaGVycyhjaXBoZXJzLCBXT0xGU1NMX0NJUEhFUl9MSVNUX01BWF9TSVpFKTsKKyAgICAgICAgY2lwaGVyID0gY2lwaGVyczsKKyAgICB9CisKKyAgICAvKiBmb3Igc2VydmVyIG9yIGNsaWVudCBzaWRlIG9ubHksIG9ubHkgMSB0aHJlYWQgaXMgYWxsb3dlZCAqLworICAgIGlmIChhcmdTZXJ2ZXJPbmx5IHx8IGFyZ0NsaWVudE9ubHkpIHsKKyAgICAgICAgYXJnVGhyZWFkUGFpcnMgPSAxOworICAgIH0KKyNpZm5kZWYgSEFWRV9QVEhSRUFECisgICAgZWxzZSB7CisgICAgICAgIHByaW50ZigiVGhyZWFkaW5nIGlzIG5vdCBlbmFibGVkLCBzbyBwbGVhc2UgdXNlIC1zIG9yIC1jIHRvIGluZGljYXRlIHNpZGVcbiIpOworICAgICAgICBVc2FnZSgpOworICAgICAgICByZXQgPSBNWV9FWF9VU0FHRTsgZ290byBleGl0OworICAgIH0KKyNlbmRpZgorCisgICAgLyogQWxsb2NhdGUgdGVzdCBpbmZvIGFycmF5ICovCisgICAgdGhlYWRJbmZvID0gKGluZm9fdCopWE1BTExPQyhzaXplb2YoaW5mb190KSAqIGFyZ1RocmVhZFBhaXJzLCBOVUxMLAorICAgICAgICBEWU5BTUlDX1RZUEVfVE1QX0JVRkZFUik7CisgICAgaWYgKHRoZWFkSW5mbyA9PSBOVUxMKSB7CisgICAgICAgIHJldCA9IE1FTU9SWV9FOyBnb3RvIGV4aXQ7CisgICAgfQorICAgIFhNRU1TRVQodGhlYWRJbmZvLCAwLCBzaXplb2YoaW5mb190KSAqIGFyZ1RocmVhZFBhaXJzKTsKKworI2lmbmRlZiBOT19XT0xGU1NMX1NFUlZFUgorICAgIC8qIFVzZSBzYW1lIGxpc3RlbiBzb2NrZXQgdG8gYXZvaWQgdGltaW5nIGlzc3VlcyBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyICovCisgICAgaWYgKGFyZ1NlcnZlck9ubHkgJiYgIWFyZ0xvY2FsTWVtKSB7CisgICAgICAgIC8qIFNldHVwIFRMUyBzZXJ2ZXIgbGlzdGVuZXIgKi8KKyNpZmRlZiBXT0xGU1NMX0RUTFMKKyAgICAgICAgcmV0ID0gU2V0dXBTb2NrZXRBbmRMaXN0ZW4oJmxpc3RlbkZkLCBhcmdQb3J0LCBkb0RUTFMpOworI2Vsc2UKKyAgICAgICAgcmV0ID0gU2V0dXBTb2NrZXRBbmRMaXN0ZW4oJmxpc3RlbkZkLCBhcmdQb3J0LCAwKTsKKyNlbmRpZgorICAgICAgICBpZiAocmV0ICE9IDApIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoV09MRlNTTF9EVExTKSAmJiAhZGVmaW5lZChOT19XT0xGU1NMX1NFUlZFUikKKyAgICBpZiAoZG9EVExTKSB7CisgICAgICAgIGlmIChhcmdMb2NhbE1lbSkgeworICAgICAgICAgICAgcHJpbnRmKCJ0bHNfYmVuY2ggaGFzbid0IHlldCBzdXBwb3J0ZWQgRFRMUyB3aXRoIGxvY2FsIG1lbW9yeS5cbiIpOworICAgICAgICAgICAgcmV0ID0gTVlfRVhfVVNBR0U7IGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBpZiAob3B0aW9uX3AgJiYgYXJnVGVzdFBhY2tldFNpemUgPiBURVNUX0RUTFNfUEFDS0VUX1NJWkUpeworICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIHBhY2tldCBzaXplICVkXG4iLCBhcmdUZXN0UGFja2V0U2l6ZSk7CisgICAgICAgICAgICBVc2FnZSgpOworICAgICAgICAgICAgcmV0ID0gTVlfRVhfVVNBR0U7IGdvdG8gZXhpdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIGFyZ1Rlc3RQYWNrZXRTaXplIHdvdWxkIGJlIGRlZmF1bHQgZm9yIHRjcCBwYWNrZXQgKi8KKyAgICAgICAgICAgIGlmIChhcmdUZXN0UGFja2V0U2l6ZSA+PSBURVNUX1BBQ0tFVF9TSVpFKQorICAgICAgICAgICAgICAgIGFyZ1Rlc3RQYWNrZXRTaXplID0gVEVTVF9EVExTX1BBQ0tFVF9TSVpFOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgcHJpbnRmKCJSdW5uaW5nIFRMUyBCZW5jaG1hcmtzLi4uXG4iKTsKKworICAgIC8qIHBhcnNlIGJ5IDogKi8KKyAgICB3aGlsZSAoKGNpcGhlciAhPSBOVUxMKSAmJiAoY2lwaGVyWzBdICE9ICdcMCcpKSB7CisgICAgICAgIG5leHRfY2lwaGVyID0gc3RyY2hyKGNpcGhlciwgJzonKTsKKyAgICAgICAgaWYgKG5leHRfY2lwaGVyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGNpcGhlcltuZXh0X2NpcGhlciAtIGNpcGhlcl0gPSAnXDAnOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZ1Nob3dWZXJib3NlKSB7CisgICAgICAgICAgICBwcmludGYoIkNpcGhlcjogJXNcbiIsIGNpcGhlcik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGk9MDsgaTxhcmdUaHJlYWRQYWlyczsgaSsrKSB7CisgICAgICAgICAgICBpbmZvID0gJnRoZWFkSW5mb1tpXTsKKyAgICAgICAgICAgIFhNRU1TRVQoaW5mbywgMCwgc2l6ZW9mKGluZm9fdCkpOworCisgICAgICAgICAgICBpbmZvLT5ob3N0ID0gYXJnSG9zdDsKKyAgICAgICAgICAgIGluZm8tPnBvcnQgPSBhcmdQb3J0ICsgaTsgLyogdGhyZWFkcyBtdXN0IGhhdmUgc2VwYXJhdGUgcG9ydHMgKi8KKyAgICAgICAgICAgIGluZm8tPmNpcGhlciA9IGNpcGhlcjsKKyAgICAgICAgICAgIGluZm8tPnBhY2tldFNpemUgPSBhcmdUZXN0UGFja2V0U2l6ZTsKKworICAgICAgICAgICAgaW5mby0+cnVuVGltZVNlYyA9IGFyZ1J1bnRpbWVTZWM7CisgICAgICAgICAgICBpbmZvLT5tYXhTaXplID0gYXJnVGVzdE1heFNpemU7CisgICAgICAgICAgICBpbmZvLT5zaG93UGVlckluZm8gPSBhcmdTaG93UGVlckluZm87CisgICAgICAgICAgICBpbmZvLT5zaG93VmVyYm9zZSA9IGFyZ1Nob3dWZXJib3NlOworICAgICAgICAjaWZuZGVmIE5PX1dPTEZTU0xfU0VSVkVSCisgICAgICAgICAgICBpbmZvLT5saXN0ZW5GZCA9IGxpc3RlbkZkOworICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGluZm8tPmNsaWVudC5zb2NrRmQgPSAtMTsKKyAgICAgICAgICAgIGluZm8tPnNlcnZlci5zb2NrRmQgPSAtMTsKKworICAgICAgICAjaWZkZWYgV09MRlNTTF9EVExTCisgICAgICAgICAgICBpbmZvLT5kb0RUTFMgPSBkb0RUTFM7CisgICAgICAgICNpZmRlZiBIQVZFX1BUSFJFQUQKKyAgICAgICAgICAgIGluZm8tPnNlcnZlclJlYWR5ID0gMDsKKyAgICAgICAgICAgIGlmIChhcmdTZXJ2ZXJPbmx5IHx8IGFyZ0NsaWVudE9ubHkpIHsKKyAgICAgICAgICAgICAgICBpbmZvLT5jbGllbnRPcnNlcnZlck9ubHkgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBpZiAoYXJnQ2xpZW50T25seSkgeworICAgICAgICAgICAgI2lmbmRlZiBOT19XT0xGU1NMX0NMSUVOVAorICAgICAgICAgICAgICAgIHJldCA9IGJlbmNoX3Rsc19jbGllbnQoaW5mbyk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1NlcnZlck9ubHkpIHsKKyAgICAgICAgICAgICNpZm5kZWYgTk9fV09MRlNTTF9TRVJWRVIKKyAgICAgICAgICAgICAgICByZXQgPSBiZW5jaF90bHNfc2VydmVyKGluZm8pOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICNpZmRlZiBIQVZFX1BUSFJFQUQKKyAgICAgICAgICAgICAgICBpbmZvLT51c2VMb2NhbE1lbSA9IGFyZ0xvY2FsTWVtOworICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmaW5mby0+dG9fc2VydmVyLm11dGV4LCBOVUxMKTsKKyAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoJmluZm8tPnRvX2NsaWVudC5tdXRleCwgTlVMTCk7CisgICAgICAgICAgICAjaWZkZWYgV09MRlNTTF9EVExTCisgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF9pbml0KCZpbmZvLT5kdGxzX211dGV4LCBOVUxMKTsKKyAgICAgICAgICAgICAgICBwdGhyZWFkX2NvbmRfaW5pdCgmaW5mby0+ZHRsc19jb25kLCBOVUxMKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIHB0aHJlYWRfY29uZF9pbml0KCZpbmZvLT50b19zZXJ2ZXIuY29uZCwgTlVMTCk7CisgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX2luaXQoJmluZm8tPnRvX2NsaWVudC5jb25kLCBOVUxMKTsKKworICAgICAgICAgICAgICAgIHB0aHJlYWRfY3JlYXRlKCZpbmZvLT50b19zZXJ2ZXIudGlkLCBOVUxMLCBzZXJ2ZXJfdGhyZWFkLCBpbmZvKTsKKyAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgmaW5mby0+dG9fY2xpZW50LnRpZCwgTlVMTCwgY2xpZW50X3RocmVhZCwgaW5mbyk7CisKKyAgICAgICAgICAgICAgICAvKiBTdGF0ZSB0aGF0IHdlIHdvbid0IGJlIGpvaW5pbmcgdGhpcyB0aHJlYWQgKi8KKyAgICAgICAgICAgICAgICBwdGhyZWFkX2RldGFjaChpbmZvLT50b19zZXJ2ZXIudGlkKTsKKyAgICAgICAgICAgICAgICBwdGhyZWFkX2RldGFjaChpbmZvLT50b19jbGllbnQudGlkKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAjaWZkZWYgSEFWRV9QVEhSRUFECisgICAgICAgIC8qIEZvciB0aHJlYWRpbmcsIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKyAgICAgICAgaWYgKCFhcmdDbGllbnRPbmx5ICYmICFhcmdTZXJ2ZXJPbmx5KSB7CisgICAgICAgICAgICAvKiBXYWl0IHVudGlsIHRocmVhZHMgYXJlIG1hcmtlZCBkb25lICovCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgZG9TaHV0ZG93biA9IDE7CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnVGhyZWFkUGFpcnM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpbmZvID0gJnRoZWFkSW5mb1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvLT50b19jbGllbnQuZG9uZSB8fCAhaW5mby0+dG9fc2VydmVyLmRvbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvU2h1dGRvd24gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgWFNMRUVQX01TKDEwMDApOyAvKiBBbGxvdyBvdGhlciB0aHJlYWRzIHRvIHJ1biAqLworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlICghZG9TaHV0ZG93bik7CisgICAgICAgICAgICBpZiAoYXJnU2hvd1ZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlNodXRkb3duIGNvbXBsZXRlXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICNlbmRpZiAvKiBIQVZFX1BUSFJFQUQgKi8KKworICAgICAgICBpZiAoYXJnU2hvd1ZlcmJvc2UpIHsKKyAgICAgICAgICAgIC8qIHByaW50IHJlc3VsdHMgKi8KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdUaHJlYWRQYWlyczsgKytpKSB7CisgICAgICAgICAgICAgICAgaW5mbyA9ICZ0aGVhZEluZm9baV07CisKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuVGhyZWFkICVkXG4iLCBpKTsKKyAgICAgICAgICAgICNpZm5kZWYgTk9fV09MRlNTTF9TRVJWRVIKKyAgICAgICAgICAgICAgICBpZiAoIWFyZ0NsaWVudE9ubHkpCisgICAgICAgICAgICAgICAgICAgIHByaW50X3N0YXRzKCZpbmZvLT5zZXJ2ZXJfc3RhdHMsICJTZXJ2ZXIiLCBpbmZvLT5jaXBoZXIsIDEpOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAjaWZuZGVmIE5PX1dPTEZTU0xfQ0xJRU5UCisgICAgICAgICAgICAgICAgaWYgKCFhcmdTZXJ2ZXJPbmx5KQorICAgICAgICAgICAgICAgICAgICBwcmludF9zdGF0cygmaW5mby0+Y2xpZW50X3N0YXRzLCAiQ2xpZW50IiwgaW5mby0+Y2lwaGVyLCAxKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogcHJpbnQgY29tYmluZWQgcmVzdWx0cyBmb3IgbW9yZSB0aGFuIG9uZSB0aHJlYWQgKi8KKyAgICAgICAgWE1FTVNFVCgmY2xpX2NvbWIsIDAsIHNpemVvZihjbGlfY29tYikpOworICAgICAgICBYTUVNU0VUKCZzcnZfY29tYiwgMCwgc2l6ZW9mKHNydl9jb21iKSk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ1RocmVhZFBhaXJzOyArK2kpIHsKKyAgICAgICAgICAgIGluZm8gPSAmdGhlYWRJbmZvW2ldOworCisgICAgICAgICAgICBjbGlfY29tYi5jb25uQ291bnQgKz0gaW5mby0+Y2xpZW50X3N0YXRzLmNvbm5Db3VudDsKKyAgICAgICAgICAgIHNydl9jb21iLmNvbm5Db3VudCArPSBpbmZvLT5zZXJ2ZXJfc3RhdHMuY29ubkNvdW50OworCisgICAgICAgICAgICBjbGlfY29tYi5jb25uVGltZSArPSBpbmZvLT5jbGllbnRfc3RhdHMuY29ublRpbWU7CisgICAgICAgICAgICBzcnZfY29tYi5jb25uVGltZSArPSBpbmZvLT5zZXJ2ZXJfc3RhdHMuY29ublRpbWU7CisKKyAgICAgICAgICAgIGNsaV9jb21iLnJ4VG90YWwgKz0gaW5mby0+Y2xpZW50X3N0YXRzLnJ4VG90YWw7CisgICAgICAgICAgICBzcnZfY29tYi5yeFRvdGFsICs9IGluZm8tPnNlcnZlcl9zdGF0cy5yeFRvdGFsOworCisgICAgICAgICAgICBjbGlfY29tYi5yeFRpbWUgKz0gaW5mby0+Y2xpZW50X3N0YXRzLnJ4VGltZTsKKyAgICAgICAgICAgIHNydl9jb21iLnJ4VGltZSArPSBpbmZvLT5zZXJ2ZXJfc3RhdHMucnhUaW1lOworCisgICAgICAgICAgICBjbGlfY29tYi50eFRvdGFsICs9IGluZm8tPmNsaWVudF9zdGF0cy50eFRvdGFsOworICAgICAgICAgICAgc3J2X2NvbWIudHhUb3RhbCArPSBpbmZvLT5zZXJ2ZXJfc3RhdHMudHhUb3RhbDsKKworICAgICAgICAgICAgY2xpX2NvbWIudHhUaW1lICs9IGluZm8tPmNsaWVudF9zdGF0cy50eFRpbWU7CisgICAgICAgICAgICBzcnZfY29tYi50eFRpbWUgKz0gaW5mby0+c2VydmVyX3N0YXRzLnR4VGltZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmdTaG93VmVyYm9zZSkgeworICAgICAgICAgICAgcHJpbnRmKCJUb3RhbHMgZm9yICVkIFRocmVhZHNcbiIsIGFyZ1RocmVhZFBhaXJzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiJS02cyAgJS0zM3MgICUxMXMgICU5cyAgJTlzICAlOXMgICU5cyAgJTlzICAlMTdzICAlMTVzXG4iLAorICAgICAgICAgICAgICAgICJTaWRlIiwgIkNpcGhlciIsICJUb3RhbCBCeXRlcyIsICJOdW0gQ29ubnMiLCAiUnggbXMiLCAiVHggbXMiLAorICAgICAgICAgICAgICAgICJSeCBNQi9zIiwgIlR4IE1CL3MiLCAiQ29ubmVjdCBUb3RhbCBtcyIsICJDb25uZWN0IEF2ZyBtcyIpOworICAgICAgICAjaWZuZGVmIE5PX1dPTEZTU0xfU0VSVkVSCisgICAgICAgICAgICBpZiAoIWFyZ0NsaWVudE9ubHkpCisgICAgICAgICAgICAgICAgcHJpbnRfc3RhdHMoJnNydl9jb21iLCAiU2VydmVyIiwgdGhlYWRJbmZvWzBdLmNpcGhlciwgMCk7CisgICAgICAgICNlbmRpZgorICAgICAgICAjaWZuZGVmIE5PX1dPTEZTU0xfQ0xJRU5UCisgICAgICAgICAgICBpZiAoIWFyZ1NlcnZlck9ubHkpCisgICAgICAgICAgICAgICAgcHJpbnRfc3RhdHMoJmNsaV9jb21iLCAiQ2xpZW50IiwgdGhlYWRJbmZvWzBdLmNpcGhlciwgMCk7CisgICAgICAgICNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgLyogdGFyZ2V0IG5leHQgY2lwaGVyICovCisgICAgICAgIGNpcGhlciA9IChuZXh0X2NpcGhlciAhPSBOVUxMKSA/IChuZXh0X2NpcGhlciArIDEpIDogTlVMTDsKKyAgICB9IC8qIHdoaWxlICovCisKK2V4aXQ6CisKKyNpZm5kZWYgTk9fV09MRlNTTF9TRVJWRVIKKyAgICBpZiAoYXJnU2VydmVyT25seSAmJiAhYXJnTG9jYWxNZW0pIHsKKyAgICAgICAgLyogQ2xvc2Ugc2VydmVyIGxpc3RlbmVyICovCisgICAgICAgIENsb3NlQW5kQ2xlYW51cExpc3RlblNvY2tldCgmbGlzdGVuRmQpOworICAgIH0KKyNlbmRpZgorCisgICAgLyogQ2xlYW51cCB0aGUgd29sZlNTTCBlbnZpcm9ubWVudCAqLworICAgIHdvbGZTU0xfQ2xlYW51cCgpOworCisgICAgLyogRnJlZSB0aGVhZEluZm8gYXJyYXkgKi8KKyAgICBYRlJFRSh0aGVhZEluZm8sIE5VTEwsIERZTkFNSUNfVFlQRV9UTVBfQlVGRkVSKTsKKworICAgIC8qIEZyZWUgY2lwaGVyIGxpc3QgKi8KKyAgICBYRlJFRShjaXBoZXJzLCBOVUxMLCBEWU5BTUlDX1RZUEVfVE1QX0JVRkZFUik7CisKKyAgICAvKiBSZXR1cm4gcmVwb3J0aW5nIGEgc3VjY2VzcyAqLworICAgIGlmIChhcmdzKQorICAgICAgICAoKGZ1bmNfYXJncyopYXJncyktPnJldHVybl9jb2RlID0gcmV0OworCisgICAgcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiAoIU5PX1dPTEZTU0xfQ0xJRU5UIHx8ICFOT19XT0xGU1NMX1NFUlZFUikgJiYgIVdPTEZDUllQVF9PTkxZICYmIFVTRV9XT0xGU1NMX0lPICovCisKKyNpZm5kZWYgTk9fTUFJTl9EUklWRVIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGZ1bmNfYXJncyBhcmdzOworCisgICAgYXJncy5hcmdjID0gYXJnYzsKKyAgICBhcmdzLmFyZ3YgPSBhcmd2OworICAgIGFyZ3MucmV0dXJuX2NvZGUgPSAwOworCisjaWYgKCFkZWZpbmVkKE5PX1dPTEZTU0xfQ0xJRU5UKSB8fCAhZGVmaW5lZChOT19XT0xGU1NMX1NFUlZFUikpICYmIFwKKyAgICAhZGVmaW5lZChXT0xGQ1JZUFRfT05MWSkgJiYgZGVmaW5lZChVU0VfV09MRlNTTF9JTykKKyAgICBiZW5jaF90bHMoJmFyZ3MpOworI2VuZGlmCisKKyAgICByZXR1cm4gYXJncy5yZXR1cm5fY29kZTsKK30KKworI2VuZGlmIC8qICFOT19NQUlOX0RSSVZFUiAqLwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvaW5zdGFsbC9zaGFyZS9kb2Mvd29sZnNzbC90YW9DZXJ0LnR4dCBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvdGFvQ2VydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3M2RlZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL2luc3RhbGwvc2hhcmUvZG9jL3dvbGZzc2wvdGFvQ2VydC50eHQKQEAgLTAsMCArMSwxNzYgQEAKKworKioqKiogQ3JlYXRlIGEgc2VsZiBzaWduZWQgY2VydCAqKioqKioqKioqKioKKworMSkgb3BlbnNzbCBnZW5yc2EgMTAyNCA+IGNsaWVudC1rZXkucGVtCisKKzIpIG9wZW5zc2wgcmVxIC1uZXcgLXg1MDkgLW5vZGVzIC1zaGExIC1kYXlzIDEwMDAgLWtleSBjbGllbnQta2V5LnBlbSA+IGNsaWVudC1jZXJ0LnBlbQorCiszKSBub3RlIG1kNSB3b3VsZCBiZSAtbWQ1CisKKy0tIGFkZGluZyBtZXRhZGF0YSB0byBiZWdpbm5pbmcKKworMykgb3BlbnNzbCB4NTA5IC1pbiBjbGllbnQtY2VydC5wZW0gLXRleHQgPiB0bXAucGVtCisKKzQpIG12IHRtcC5wZW0gY2xpZW50LWNlcnQucGVtCisKKworKioqKiogQ3JlYXRlIGEgQ0EsIHNpZ25pbmcgYXV0aG9yaXR5ICoqKioqKioqKioKKworc2FtZSBhcyBzZWxmIHNpZ25lZCwgdXNlIGNhIHByZWZpeCBpbnN0ZWFkIG9mIGNsaWVudAorCisKKyoqKioqIENyZWF0ZSBhIGNlcnQgc2lnbmVkIGJ5IENBICoqKioqKioqKioqKioqCisKKzEpIG9wZW5zc2wgcmVxIC1uZXdrZXkgcnNhOjEwMjQgLXNoYTEgLWRheXMgMTAwMCAtbm9kZXMgLWtleW91dCBzZXJ2ZXIta2V5LnBlbSA+IHNlcnZlci1yZXEucGVtCisKKyogbm90ZSBpZiB1c2luZyBleGlzdGluZyBrZXkgZG86IC1uZXcgLWtleSBrZXlOYW1lCisKKzIpIGNvcHkgY2Eta2V5LnBlbSBjYS1jZXJ0LnNybCAgICh3aHkgPz8/PykKKworMykgb3BlbnNzbCB4NTA5IC1yZXEgLWluIHNlcnZlci1yZXEucGVtIC1kYXlzIDEwMDAgLXNoYTEgLUNBIGNhLWNlcnQucGVtIC1DQWtleSBjYS1rZXkucGVtIC1zZXRfc2VyaWFsIDAxID4gc2VydmVyLWNlcnQucGVtCisKKworKioqKiogQWRkaW5nIFN1YmplY3QgS2V5IElEIGFuZCBBdXRoZW50aWNhdGlvbiBLZXkgSUQgZXh0ZW5zaW9ucyB0byBhIGNlcnQgKioqKioKKworQ3JlYXRlIGEgY29uZmlnIGZpbGUgZm9yIE9wZW5TU0wgd2l0aCB0aGUgZXhhbXBsZSBjb250ZW50czoKKworICAgIFtza2lkYWtpZF0KKyAgICBzdWJqZWN0S2V5SWRlbnRpZmllcj1oYXNoCisgICAgYXV0aG9yaXR5S2V5SWRlbnRpZmllcj1rZXlpZAorCitBZGQgdG8gdGhlIG9wZW5zc2wgY29tbWFuZCBmb3IgY3JlYXRpbmcgYSBjZXJ0IHNpZ25lZCBieSBhIENBIHN0ZXAgMyB0aGUKK2ZvbGxvd2luZyBvcHRpb25zOgorCisgICAgLWV4dGZpbGUgPGZpbGUuY25mPiAtZXh0ZW5zaW9ucyBza2lkYWtpZAorCithbnl3aGVyZSBiZWZvcmUgdGhlIHJlZGlyZWN0LiBUaGlzIHdpbGwgYWRkIHRoZSBjZXJ0J3MgcHVibGljIGtleSBoYXNoIGFzIHRoZQorU3ViamVjdCBLZXkgSWRlbnRpZmllciwgYW5kIHRoZSBzaWduZXIncyBTS0lEIGFzIHRoZSBBdXRoZW50aWNhdGlvbiBLZXkgSUQuCisKKworKioqKiogVG8gY3JlYXRlIGEgZHNhIGNlcnQgKioqKioqKioqKioqKioqKioqKioKKworMSkgb3BlbnNzbCBkc2FwYXJhbSA1MTIgPiBkc2E1MTIucGFyYW0gICAgICAgIyBjcmVhdGVzIGdyb3VwIHBhcmFtcworCisyKSBvcGVuc3NsIGdlbmRzYSBkc2E1MTIucGFyYW0gPiBkc2E1MTIucGVtICAjIGNyZWF0ZXMgcHJpdmF0ZSBrZXkKKworMykgb3BlbnNzbCByZXEgLW5ldyAteDUwOSAtbm9kZXMgLWRheXMgMTAwMCAta2V5IGRzYTUxMi5wZW0gPiBkc2EtY2VydC5wZW0gCisKKworCisKKyoqKioqIFRvIGNvbnZlcnQgZnJvbSBQRU0gdG8gREVSICoqKioqKioqKioqKioqCisKK2EpIG9wZW5zc2wgeDUwOSAtaW4gY2VydC5wZW0gLWluZm9ybSBQRU0gLW91dCBjZXJ0LmRlciAtb3V0Zm9ybSBERVIKKwordG8gY29udmVydCByc2EgcHJpdmF0ZSBQRU0gdG8gREVSIDoKKworYikgb3BlbnNzbCByc2EgLWluIGtleS5wZW0gLW91dGZvcm0gREVSIC1vdXQga2V5LmRlcgorCisKKyoqKiogVG8gZW5jcnlwdCByc2Ega2V5IGFscmVhZHkgaW4gcGVtICoqKioqKioqKioKKworYSkgb3BlbnNzbCByc2EgPHNlcnZlci1rZXkucGVtLmJhayAtZGVzID5zZXJ2ZXIta2V5RW5jLnBlbQorCitub3RlIGxvY2F0aW9uIG9mIGRlcywgcGFzcyA9IHlhc3NsMTIzCisKKworKioqIFRvIG1ha2UgYSBwdWJsaWMga2V5IGZyb20gYSBwcml2YXRlIGtleSAqKioqKioKKworCitvcGVuc3NsIHJzYSAtaW4gMTAyNHJzYS5wcml2IC1wdWJvdXQgLW91dCAxMDI0cnNhLnB1YgorCisKKyoqKiogVG8gY29udmVydCB0byBwa2NzOCAqKioqKioqCisKK29wZW5zc2wgcGtjczggLW5vY3J5cHQgLXRvcGs4IC1pbiBzZXJ2ZXIta2V5LnBlbSAtb3V0IHNlcnZlci1rZXlQa2NzOC5wZW0KKworCisqKioqIFRvIGNvbnZlcnQgdG8gcGtjczggZW5jcnlwdGVkICoqKioqKioKKworb3BlbnNzbCBwa2NzOCAtdG9wazggLWluIHNlcnZlci1rZXkucGVtIC1vdXQgc2VydmVyLWtleVBrY3M4RW5jLnBlbQorCitwYXNzd2Q6IHlhc3NsMTIzCisKK3RvIHVzZSBQS0NTIzUgdjIgaW5zdGVhZCBvZiB2MS41IHdoaWNoIGlzIGRlZmF1bHQgYWRkCisKKy12MiBkZXMzICAgICAgICMgZmlsZSBQa2NzOEVuYzIKKwordG8gdXNlIFBLQ1MjMTIgaW5zdGVhZCB1c2UgLXYxIHdpdGNoIGEgMTIgYWxnbyBsaWtlCisKKy12MSBQQkUtU0hBMS0zREVTICAgIyBmaWxlIFBrY3M4RW5jMTIgLCBzZWUgbWFuIHBrY3M4IGZvciBtb3JlIGluZm8KKy12MSBQQkUtU0hBMS1SQzQtMTI4ICAgIyBubyBsb25nZXIgZmlsZSBQa2NzOEVuYzEyLCBhcmM0IG5vdyBvZmYgYnkgZGVmYXVsdAorCisKKyoqKiogVG8gY29udmVydCBmcm9tIHBrY3M4IHRvIHRyYWRpdGlvbmFsICoqKioKKworb3BlbnNzbCBwa2NzOCAtbm9jcnlwdCAtaW4gc2VydmVyLWtleVBrY3M4LnBlbSAtb3V0IHNlcnZlci1rZXkucGVtCisKKworKioqIERIIHBhcmFtZXRlcnMgKioqCisKK29wZW5zc2wgZGhwYXJhbSAyMDQ4ID4gZGgyMDQ4LnBhcmFtCisKK3RvIGFkZCBtZXRhZGF0YQorCitvcGVuc3NsIGRocGFyYW0gLWluIGRoMjA0OC5wYXJhbSAtdGV4dCA+IGRoMjA0OC5wZW0KKworKioqKiBFQ0MgKioqKioqCisKKzEpIG1ha2UgYSBrZXkKKworICAgIHRvIHNlZSB0eXBlcyBhdmFpbGFibGUgZG8KKyAgICAgICAgb3BlbnNzbCBlY3BhcmFtIC1saXN0X2N1cnZlcworCisgICAgbWFrZSBhIG5ldyBrZXkKKyAgICAgICAgb3BlbnNzbCBlY3BhcmFtIC1nZW5rZXkgLXRleHQgLW5hbWUgc2VjcDI1NnIxIC1vdXQgZWNjLWtleS5wZW0KKworICAgIGNvbnZlcnQgdG8gY29tcHJlc3NlZAorICAgICAgICBvcGVuc3NsIGVjIC1pbiBlY2Mta2V5LnBlbSAtY29udl9mb3JtIGNvbXByZXNzZWQgLW91dCBlY2Mta2V5LWNvbXAucGVtIAorCisqKiogQ1JMICoqKgorCisxKSBjcmVhdGUgYSBjcmwKKworYSkgb3BlbnNzbCBjYSAtZ2VuY3JsIC1jcmxkYXlzIDEyMCAtb3V0IGNybC5wZW0gLWtleWZpbGUgLi9jYS1rZXkucGVtIC1jZXJ0IC4vY2EtY2VydC5wZW0KKworRXJyb3IgTm8gLi9DQSByb290L2luZGV4LnR4dCBzbzoKKworYikgdG91Y2ggLi9DQSByb290L2luZGV4LnR4dAorCithKSBhZ2FpbgorCitFcnJvciBObyAuL0NBIHJvb3QvY3JsbnVtYmVyIHNvOgorCitjKSB0b3VjaCAuL0NBIHJvb3QvY3JsbnVtYmVyCisKK2EpIGFnYWluCisKK0Vycm9yIHVuYWJsZSB0byBsb2FkIENSTCBudW1iZXIKKworZCkgYWRkICcwMScgdG8gY3JsbnVtYmVyIGZpbGUKKworYSkgYWdhaW4KKworMikgIHZpZXcgY3JsIGZpbGUKKworb3BlbnNzbCBjcmwgLWluIGNybC5wZW0gLXRleHQKKworMykgcmV2b2tlCisKK29wZW5zc2wgY2EgLXJldm9rZSBzZXJ2ZXItY2VydC5wZW0gLWtleWZpbGUgLi9jYS1rZXkucGVtIC1jZXJ0IC4vY2EtY2VydC5wZW0KKworVGhlbiByZWdlbmVyYXRlIGNybCB3aXRoIGEpCisKKzQpIHZlcmlmeQorCitvcGVuc3NsIHZlcmlmeSAtQ0FmaWxlIC4vY2EtY2VydC5wZW0gIC4vc2VydmVyLWNlcnQucGVtCisKK09LCisKK01ha2UgZmlsZSB3aXRoIGJvdGggY2EgYW5kIGNybAorCitjYXQgY2EtY2VydC5wZW0gY3JsLnBlbSA+IGNhLWNybC5wZW0KKworb3BlbnNzbCB2ZXJpZnkgLUNBZmlsZSAuL2NhLWNybC5wZW0gLWNybF9jaGVjayAuL2NhLWNlcnQucGVtCisKK3Jldm9rZWQKZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ3b2xmc3NsL21ha2VmaWxlIGIvYXAvbGliL2xpYndvbGZzc2wvbWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTQxZTY5NgotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL21ha2VmaWxlCkBAIC0wLDAgKzEsNjYgQEAKKworaW5jbHVkZSAkKENPTU1PTl9CQVNFX01LKQorCitOQU1FIDo9IGxpYndvbGZzc2wKK1NSQ19ESVIgOj0gd29sZnNzbC00LjguMS1zdGFibGUKK0lOU1RBTExfRElSIDo9ICQoTElCX0RJUikvJChOQU1FKS9pbnN0YWxsCisKK0NPTkZJR19PUFRTIDo9IC0taG9zdD1hcm0tbGludXggLS1idWlsZD14ODZfNjQtdW5rbm93bi1saW51eC1nbnUgLS10YXJnZXQ9YXJtLWxpbnV4CitDT05GSUdfT1BUUyArPSAtLXByZWZpeD0kKElOU1RBTExfRElSKQorQ09ORklHX09QVFMgKz0gLS1kaXNhYmxlLXNoYXJlZCAtLWVuYWJsZS1zdGF0aWMKK0NPTkZJR19PUFRTICs9IC0tZGlzYWJsZS1ubHMKK0NPTkZJR19PUFRTICs9IC0tZW5hYmxlLXJlcHJvZHVjaWJsZS1idWlsZAorQ09ORklHX09QVFMgKz0gLS1lbmFibGUtbGlnaHR5CitDT05GSUdfT1BUUyArPSAtLWVuYWJsZS1vcGVuc3NsYWxsCitDT05GSUdfT1BUUyArPSAtLWVuYWJsZS1vcGVuc3NsZXh0cmEKK0NPTkZJR19PUFRTICs9IC0tZW5hYmxlLXNuaQorQ09ORklHX09QVFMgKz0gLS1lbmFibGUtc3R1bm5lbAorQ09ORklHX09QVFMgKz0gLS1kaXNhYmxlLWNyeXB0dGVzdHMKK0NPTkZJR19PUFRTICs9IC0tZGlzYWJsZS1leGFtcGxlcworQ09ORklHX09QVFMgKz0gLS1kaXNhYmxlLWpvYnNlcnZlcgorQ09ORklHX09QVFMgKz0gLS1lbmFibGUtaXB2NgorQ09ORklHX09QVFMgKz0gLS1lbmFibGUtYWVzY2NtCitDT05GSUdfT1BUUyArPSAtLWVuYWJsZS1jZXJ0Z2VuCitDT05GSUdfT1BUUyArPSAtLWVuYWJsZS1jaGFjaGEKK0NPTkZJR19PUFRTICs9IC0tZW5hYmxlLXBvbHkxMzA1CitDT05GSUdfT1BUUyArPSAtLWVuYWJsZS1kaAorQ09ORklHX09QVFMgKz0gLS1lbmFibGUtYXJjNAorQ09ORklHX09QVFMgKz0gLS1lbmFibGUtdGxzdjEwCitDT05GSUdfT1BUUyArPSAtLWVuYWJsZS10bHMxMworQ09ORklHX09QVFMgKz0gLS1lbmFibGUtc2Vzc2lvbi10aWNrZXQKK0NPTkZJR19PUFRTICs9IC0tZGlzYWJsZS1kdGxzCitDT05GSUdfT1BUUyArPSAtLWRpc2FibGUtY3VydmUyNTUxOQorQ09ORklHX09QVFMgKz0gLS1kaXNhYmxlLWFmYWxnCitDT05GSUdfT1BUUyArPSAtLWVuYWJsZS1kZXZjcnlwdG89bm8KK0NPTkZJR19PUFRTICs9IC0tZW5hYmxlLW9jc3AKK0NPTkZJR19PUFRTICs9IC0tZW5hYmxlLW9jc3BzdGFwbGluZworQ09ORklHX09QVFMgKz0gLS1lbmFibGUtb2NzcHN0YXBsaW5nMgorQ09ORklHX09QVFMgKz0gLS1lbmFibGUtd3BhcworQ09ORklHX09QVFMgKz0gLS1lbmFibGUtZm9ydHJlc3MKK0NPTkZJR19PUFRTICs9IC0tZW5hYmxlLWZhc3RtYXRoCitDT05GSUdfT1BUUyArPSAtLWRpc2FibGUtc3NsdjMKK0NPTkZJR19PUFRTICs9IC0tZGlzYWJsZS1hcm1hc20KKworCithbGw6ICQoU1JDX0RJUikvTWFrZWZpbGUKKwltYWtlIC1DICQoU1JDX0RJUikKKwltYWtlIC1DICQoU1JDX0RJUikgaW5zdGFsbAorCiskKFNSQ19ESVIpL01ha2VmaWxlOgorCWNkICQoU1JDX0RJUikgJiYgLi9hdXRvZ2VuLnNoCisJY2QgJChTUkNfRElSKSAmJiAuL2NvbmZpZ3VyZSBDX0VYVFJBX0ZMQUdTPSItZzEiICQoQ09ORklHX09QVFMpCisKK2NsZWFuOgorCS1tYWtlIC1DICQoU1JDX0RJUikgZGlzdGNsZWFuCisJLXJtIC1yZiAkKElOU1RBTExfRElSKQorCityb21mczoKKwljZCAkKElOU1RBTExfRElSKS9saWI7IFwKKwlmb3IgaSBpbiAqLnNvKjsgZG8gXAorCQlpZiBbIC1MICQkaSBdOyB0aGVuIFwKKwkJCSQoUk9NRlNJTlNUKSAtcyBgZmluZCAkJGkgLXByaW50ZiAlbGAgL2xpYi8kJGk7IFwKKwkJZWxpZiBbIC1mICQkaSBdOyB0aGVuIFwKKwkJCSQoUk9NRlNJTlNUKSAvbGliLyQkaTsgXAorCQlmaTsgXAorCWRvbmUKKwpkaWZmIC0tZ2l0IGEvYXAvbGliL2xpYndvbGZzc2wvcmVhZG1lLnR4dCBiL2FwL2xpYi9saWJ3b2xmc3NsL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTk1YTkyZAotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ3b2xmc3NsL3JlYWRtZS50eHQKQEAgLTAsMCArMSwxNiBAQAor1LS0+sLrz8LU2KO6aHR0cDovL3NvdXJjZXMuYnVpbGRyb290Lm5ldC93b2xmc3NsL3dvbGZzc2wtNC44LjEtc3RhYmxlLnRhci5neg0KK9TaYXAvbGliL2xpYndvbGZzc2zEv8K8veLRuQ0KKw0KK8b008OjqNLUcHJqX21kbM6qwP2jqaOs1Npwcm9qZWN0L3p4Mjk3NTIwdjMvcHJqX21kbC9jb25maWcvbm9ybWFsL2NvbmZpZ19saWIubWvA79e3vNNsaWJ3b2xmc3NsDQorDQoraW5zdGFsbMS/wrwgILHg0uvJ+rPJzsS8/qOsv8nWtNDQs8zQ8rvy1d++ssysoaK2r8ysv+LOxLz+DQorDQorxuTL+9Om08PKudPDy7XD96O6DQorDQorzbfOxLz+xL/CvKO6JChMSUJfRElSKS9saWJ3b2xmYnNzbC9pbnN0YWxsL2luY2x1ZGUNCisgICAgICAgICAgIMjnxeTWw0NGTEFHU6O6LUkkKExJQl9ESVIpL2xpYndvbGZic3NsL2luc3RhbGwvaW5jbHVkZQ0KK7/ixL/CvKO6JChMSUJfRElSKS9saWJ3b2xmc3NsL2luc3RhbGwvbGliDQorICAgICAgICAgICDI58Xk1sNMREZMQUdTo7otTCQoTElCX0RJUikvbGlid29sZmJzc2wvaW5zdGFsbC9saWIgLWx3b2xmc3NsDQorDQortPK/qravzKy/4qO6DQor0N64xG1ha2VmaWxlo6y4xLPJQ09ORklHX09QVFMgKz0gLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXN0YXRpYw0K