LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKrDmsb7L+dPQIChDKTIwMDnW0NDLzajRtrnJt93T0M/euavLvg0KICogIMSjv+nD+yAgo7rQrdLp1bvT687vwO2y47mrubK907/azsS8/g0KICogIM7EvP7D+yAgICCjunBzbDFjb20uaA0KICogIM7EvP6x6sq2o7oNCiAqICDP4LnYzsS8/qO6DQogKiAgyrXP1rmmxNyjutCt0unVu9PrTDFHvdO/2qGiuPfO78DtsuPKysXksuO907/aDQogKiAg1/fV3yAgICAgICAgo7p3ZWl5dXpoZW4NCiAqICCw5rG+ICAgICAgICCjulYxLjANCiAqICDN6rPJyNXG2qO6MjAxMC4xMi4zMA0KICogIMbky/zLtcP3o7oiSVIise3Kvs/gudi1xLrq1rW2qNLloaK94bm5zOW2qNLloaK6r8r9tqjS5b75vMyz0NfUY29tbmVvbrT6wuujrA0KICogICAgICAgICAgICAgICAgICDS1Mq+0+vX1NHQx/i31g0KICoNCiAqICDQ3rjEvMfCvDGjug0KICogICAgyNUgIMbao7oyMDEyLjA1LjIxDQogKiAgICDQ3rjEyMujutXFxfSzzA0KICogICAg0N64xMTayN2jug0KICAgICAgICAgbXMuaCANCiAgICAgICAgMSlORVRQQVJfSU5URVJfRlJFUV9MRU5HVEggINPJObjEs8kxNg0KICAgICAgICAgMilNQVhfTk9fVVRSQU5fQ0VMTF9MSVNUX0lEWCAgINPJObjEs8kxNiANCiAgICAgICAgIDMpTUFYX05PX1VUUkFOX1JFU1VMVCDTyTm4xLPJMTYgDQogICAgICAgIHBzbDFjb20uaDoNCiAgICAgICAgMaOpICAgWl9JUl9NQ1JfTUFYX0ZSRVEgICAg08k5uMSzyTE2DQogICAgICAgIDKjqVpQU19JUl9NQ1JfTUFYX0ZSRVEgICAg08k5uMSzyTE2DQogICAgICAgIDOjqVpfSVJfTk9GX0NFTExfTElTVF9GUkVRVUVOQ0lFUyDTyTm4xLPJMTYNCiAgICAgICAgNKOpWlBTX0lSX05PRl9DRUxMX0xJU1RfRlJFUVVFTkNJRVMgINPJObjEs8kxNg0KICAgICAgICB0ZHBzcGh5aW50LmgNCiAgICAgICAgMaOpWl9URF9QX01BWF9JTlRFUl9GUkVRX05VTSAg08k5uMSzyTE2DQogICAgICAgIDKjqVpfVERfUF9NQVhfQkxJTkRfSU5URVJfRlJFUSAg08k5uMSzyTE2DQogICAgICAgIGFzY2FzaW50LmgNCiAgICAgICAgWl9NYXhSZWRpclRkRnJlcU51bSAg0OjSqjktPjE2DQogICAgICAgIHJyLmijug0KICAgICAgICBNQVhfTk9fM0dfVVRSQU5fRlJFUVVFTkNZX0xJU1Qg0OjSqjktPjE2DQogICAgICAgIFpfTUFYX1BTRVVET19GUl9DRUxMUyDQ6NKqOS0+MTYNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNpZm5kZWYgICAgUFNMMUNPTV9IDQojZGVmaW5lICAgIFBTTDFDT01fSA0KDQojaWZuZGVmIE1VTFRJX0lSQVRfMjk2Mw0KI2luY2x1ZGUgICAibDFfY291bnRfbGF0Y2guaCINCiNlbmRpZg0KI2luY2x1ZGUgICAidGRwc3BoeWludC5oIg0KDQoNCiNpbmNsdWRlICAgInBzd3BoeWludC5oIg0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogICAgICAgICAgICAgICAgICAgICAgICDNt87EvP6w/LqsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiAgICAgICAgICAgICAgICAgICAgICAgICDIq77Wuuq2qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi8qysrF5MSjv+nJ6NbD1vfEo8q9u/LH68fzR0FQyrG21NOmtcTWxsq9Ki8NCiNkZWZpbmUgWl9JUkFUX0lOSVRfTU9ERSAgICAoQllURSkwIC8qs/XKvM7e0KfWxsq9Ki8NCiNkZWZpbmUgWlBTX0lSQVRfSU5JVF9NT0RFICBaX0lSQVRfSU5JVF9NT0RFIA0KI2RlZmluZSBaX0lSQVRfR1NNX01PREUgICAgIChCWVRFKTEgLypHU03Wxsq9Ki8NCiNkZWZpbmUgWlBTX0lSQVRfR1NNX01PREUgICBaX0lSQVRfR1NNX01PREUNCiNkZWZpbmUgWl9JUkFUX1REX01PREUgICAgICAoQllURSkyIC8qVETWxsq9Ki8NCiNkZWZpbmUgWlBTX0lSQVRfVERfTU9ERSAgICBaX0lSQVRfVERfTU9ERQ0KI2RlZmluZSBaX0lSQVRfTFRFX01PREUgICAgIChCWVRFKTMgLypMVEXWxsq9Ki8NCiNkZWZpbmUgWlBTX0lSQVRfTFRFX01PREUgICBaX0lSQVRfTFRFX01PREUNCiNkZWZpbmUgWl9JUkFUX1dfTU9ERSAgICAgICAoQllURSk0IC8qV9bGyr0qLw0KDQovKlJSQ9e0zKwqLw0KI2RlZmluZSBaX0wxQV9NRUFTX1JSQ19JRExFICAgMA0KI2RlZmluZSBaX0wxQV9NRUFTX1JSQ19GQUNIICAgMQ0KI2RlZmluZSBaX0wxQV9NRUFTX1JSQ19EQ0ggICAgMg0KDQovKkdBUMS/tcQqLw0KI2RlZmluZSBaX0wxQV9HQVBfUFVSUE9TRV9OVUxMIDB4MDANCiNkZWZpbmUgWl9MMUFfR0FQX1BVUlBPU0VfUExNTiAweDAxDQojZGVmaW5lIFpfTDFBX0dBUF9QVVJQT1NFX01FQVMgMHgwMg0KI2RlZmluZSBaX0wxQV9HQVBfUFVSUE9TRV9VU0VEIDB4MDQNCiNkZWZpbmUgWl9MMUFfR0FQX1BVUlBPU0VfUlNTSSAweDgwDQoNCi8qu6y2r8a9vvm0sL/aKi8NCiNkZWZpbmUgWl9MMUFfTUVBU19HU01fSURMRV9SQVZHX1NJWkUgNA0KI2RlZmluZSBaX0wxQV9NRUFTX0dTTV9EQ0hfUkFWR19TSVpFICAxDQoNCiNkZWZpbmUgWl9JUl9NQVhfSU5URVJfRlJFUV9DRUxMX05VTSAgICAgICAgICAgICAgKFdPUkQpMzIgICAgLyq4w9a10+t0ZFJyY1BoeUludC5o1tC1xFpfVERfUF9NQVhfSU5URVJfRlJFUV9DRUxMX05VTc/gtcgqLw0KI2RlZmluZSBaUFNfSVJfTUFYX0lOVEVSX0ZSRVFfQ0VMTF9OVU0gICAgICAgICAgICAgWl9JUl9NQVhfSU5URVJfRlJFUV9DRUxMX05VTQ0KI2RlZmluZSBaX0lSX01DUl9NQVhfRlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkxNg0KI2RlZmluZSBaUFNfSVJfTUNSX01BWF9GUkVRICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9NQ1JfTUFYX0ZSRVENCg0KI2RlZmluZSBaX0lSX01BWF9HQVBfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSk4DQojZGVmaW5lIFpQU19JUl9NQVhfR0FQX05VTSAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX01BWF9HQVBfTlVNDQoNCiNkZWZpbmUgWl9JUl9IV19JUkFUX01FQVNfT0ZGU0VUICAgICAgICAgICAgICAgICAgKEJZVEUpMyANCiNkZWZpbmUgWlBTX0lSX0hXX0lSQVRfTUVBU19PRkZTRVQgICAgICAgICAgICAgICAgIFpfSVJfSFdfSVJBVF9NRUFTX09GRlNFVCANCg0KI2RlZmluZSBaX0lSX0RFQUNfR1NNX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkwDQojZGVmaW5lIFpQU19JUl9ERUFDX0dTTV9SRVEgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX0RFQUNfR1NNX1JFUQ0KI2RlZmluZSBaX0lSX1NVU1BFTkRfVU1UU19SRVEgICAgICAgICAgICAgICAgICAgICAoQllURSkxDQojZGVmaW5lIFpQU19JUl9TVVNQRU5EX1VNVFNfUkVRICAgICAgICAgICAgICAgICAgICBaX0lSX1NVU1BFTkRfVU1UU19SRVENCiNkZWZpbmUgWl9JUl9SRVNVTUVfVU1UU19SRVEgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMg0KI2RlZmluZSBaUFNfSVJfUkVTVU1FX1VNVFNfUkVRICAgICAgICAgICAgICAgICAgICAgWl9JUl9SRVNVTUVfVU1UU19SRVENCg0KLyrLq7+oy6u0/UwxR9Dox/PQ3rjELLbgxKO66rao0uUs1rjKvsurtP3W0LbgxKPSu7T9tffTwyovDQojZGVmaW5lIFpfTDFBX01VVElfTU9ERSAgIDANCg0KLyq50sbwv6gxu7nKx7+oMiovDQojZGVmaW5lICBaX1NVU1BFTkRDQVJEMSAgICAwDQojZGVmaW5lICBaX1NVU1BFTkRDQVJEMiAgICAxDQoNCi8qv6gxIL+oMrbU06bK/dfpz8Kx6rrq1rUqLw0KI2RlZmluZSBaX0wxQV9DQVJEMSAgICAgICAgIDANCiNkZWZpbmUgWl9MMUFfQ0FSRDIgICAgICAgICAxDQoNCiNkZWZpbmUgIFpfTFRFX1BfSVJBVF9NQVhfR0FQX05VTSAgICAyMCAvKrioxKPPwtfutPPF5NbDZ2Fwyv3EvyovDQoNCi8q0rXO8cDg0M22qNLlKi8NCiNkZWZpbmUgIEVWRU5UX1JGX09GRiAgICAgICAgICAgICAgICAoQllURSkwDQojZGVmaW5lICBFVkVOVF9SRl9PTiAgICAgICAgICAgICAgICAgKEJZVEUpMQ0KI2RlZmluZSAgRVZFTlRfTVRfQ0FMTCAgICAgICAgICAgICAgIChCWVRFKTINCiNkZWZpbmUgIEVWRU5UX01PX0NBTEwgICAgICAgICAgICAgICAoQllURSkzDQojZGVmaW5lICBFVkVOVF9NVF9TUyAgICAgICAgICAgICAgICAgKEJZVEUpNA0KI2RlZmluZSAgRVZFTlRfTU9fU1MgICAgICAgICAgICAgICAgIChCWVRFKTUNCiNkZWZpbmUgIEVWRU5UX01PX0NTX1NNUyAgICAgICAgICAgICAoQllURSk2DQojZGVmaW5lICBFVkVOVF9NVF9DU19TTVMgICAgICAgICAgICAgKEJZVEUpNw0KI2RlZmluZSAgRVZFTlRfTU9fUFNfU01TICAgICAgICAgICAgIChCWVRFKTgNCiNkZWZpbmUgIEVWRU5UX01UX1BTX1NNUyAgICAgICAgICAgICAoQllURSk5DQojZGVmaW5lICBFVkVOVF9DQVJEX0NPTkZJRyAgICAgICAgICAgKEJZVEUpMTANCiNkZWZpbmUgIEVWRU5UX0NTX1VQREFURSAgICAgICAgICAgICAoQllURSkxMQ0KI2RlZmluZSAgRVZFTlRfQ1NfREVUQUNIICAgICAgICAgICAgIChCWVRFKTEyDQojZGVmaW5lICBFVkVOVF9DU19SUkNfQ09OTkVDVCAgICAgICAgKEJZVEUpMTMNCiNkZWZpbmUgIEVWRU5UX1BTX1VQREFURSAgICAgICAgICAgICAoQllURSkxNA0KI2RlZmluZSAgRVZFTlRfUFNfREVUQUNIICAgICAgICAgICAgIChCWVRFKTE1DQojZGVmaW5lICBFVkVOVF9QU19TSUdOQUxMSU5HICAgICAgICAgKEJZVEUpMTYNCiNkZWZpbmUgIEVWRU5UX1NFQVJDSFBMTU4gICAgICAgICAgICAoQllURSkxNw0KI2RlZmluZSAgRVZFTlRfUENIX1BBR0lORyAgICAgICAgICAgIChCWVRFKTE4DQojZGVmaW5lICBFVkVOVF9QTE1OX0NTR19MSVNUICAgICAgICAgKEJZVEUpMTkNCiNkZWZpbmUgIEVWRU5UX1BTX0NPTk5FQ1QgICAgICAgICAgICAoQllURSkyMA0KI2RlZmluZSAgRVZFTlRfSFBQTE1OUFJPQyAgICAgICAgICAgIChCWVRFKTIxDQojZGVmaW5lICBFVkVOVF9ERUFDVElWRUQgICAgICAgICAgICAgKEJZVEUpMjINCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgVVJSQ0HT60wxR7my08O66rao0uWjqLzMs9DX1ENvbW5lb260+sLro6kNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBsMXVkX21lYXMuaCwgYmVnaW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQojZGVmaW5lIFpfSVJfUFJFUF9JTlZBTElEICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTANCiNkZWZpbmUgWlBTX0lSX1BSRVBfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfUFJFUF9JTlZBTElEDQojZGVmaW5lIFpfSVJfUFJFUF9QQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTENCiNkZWZpbmUgWlBTX0lSX1BSRVBfUENIICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfUFJFUF9QQ0gNCiNkZWZpbmUgWl9JUl9QUkVQX1BQQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMg0KI2RlZmluZSBaUFNfSVJfUFJFUF9QUENIICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9QUkVQX1BQQ0gNCiNkZWZpbmUgWl9JUl9QUkVQX1RDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMw0KI2RlZmluZSBaUFNfSVJfUFJFUF9UQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9QUkVQX1RDSA0KI2RlZmluZSBaX0lSX1BSRVBfU0RDQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSk0DQojZGVmaW5lIFpQU19JUl9QUkVQX1NEQ0NIICAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX1BSRVBfU0RDQ0gNCiNkZWZpbmUgWl9JUl9QUkVQX1BUTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpNQ0KI2RlZmluZSBaUFNfSVJfUFJFUF9QVE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9QUkVQX1BUTQ0KI2RlZmluZSBaX0lSX1BSRVBfSVJBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSk2ICAgICAvKiBVc2VkIGZvciBib3RoIFRDSCBhbmQgUFRNIHdoZW4gU0lOR0xFX0FOVEVOTkFfU1VQUE9SVCBpcyBkZWZpbmVkICovDQojZGVmaW5lIFpQU19JUl9QUkVQX0lSQVQgICAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX1BSRVBfSVJBVCANCg0KI2RlZmluZSBaX0lSX0dzbUdhcENsdXN0ZXJUeXBlX2Rpc29yZGVyZWQgICAgICAgICAoQllURSkwDQojZGVmaW5lIFpQU19JUl9Hc21HYXBDbHVzdGVyVHlwZV9kaXNvcmRlcmVkICAgICAgICBaX0lSX0dzbUdhcENsdXN0ZXJUeXBlX2Rpc29yZGVyZWQNCiNkZWZpbmUgWl9JUl9Hc21HYXBDbHVzdGVyVHlwZV9zaG9ydCAgICAgICAgICAgICAgKEJZVEUpMQ0KI2RlZmluZSBaUFNfSVJfR3NtR2FwQ2x1c3RlclR5cGVfc2hvcnQgICAgICAgICAgICAgWl9JUl9Hc21HYXBDbHVzdGVyVHlwZV9zaG9ydA0KI2RlZmluZSBaX0lSX0dzbUdhcENsdXN0ZXJUeXBlX2xvbmcgICAgICAgICAgICAgICAoQllURSkyDQojZGVmaW5lIFpQU19JUl9Hc21HYXBDbHVzdGVyVHlwZV9sb25nICAgICAgICAgICAgICBaX0lSX0dzbUdhcENsdXN0ZXJUeXBlX2xvbmcNCiNkZWZpbmUgWl9JUl9TZWFyY2hQcmlvTW9kZV9PZmYgICAgICAgICAgICAgICAgICAgKEJZVEUpMA0KI2RlZmluZSBaUFNfSVJfU2VhcmNoUHJpb01vZGVfT2ZmICAgICAgICAgICAgICAgICAgWl9JUl9TZWFyY2hQcmlvTW9kZV9PZmYNCiNkZWZpbmUgWl9JUl9TZWFyY2hQcmlvTW9kZV9PbiAgICAgICAgICAgICAgICAgICAgKEJZVEUpMQ0KI2RlZmluZSBaUFNfSVJfU2VhcmNoUHJpb01vZGVfT24gICAgICAgICAgICAgICAgICAgWl9JUl9TZWFyY2hQcmlvTW9kZV9Pbg0KDQojaWZkZWYgU0lOR0xFX0FOVEVOTkFfU1VQUE9SVA0KI2RlZmluZSBaX0lSX0lSQVRfR1NNX1BSSU9fTUVBU19QRVJJT0RfSURMRSAgICAgICAoQllURSkzOA0KI2RlZmluZSBaUFNfSVJfSVJBVF9HU01fUFJJT19NRUFTX1BFUklPRF9JRExFICAgICAgWl9JUl9JUkFUX0dTTV9QUklPX01FQVNfUEVSSU9EX0lETEUNCiNlbHNlDQojZGVmaW5lIFpfSVJfSVJBVF9HU01fUFJJT19NRUFTX1BFUklPRF9JRExFICAgICAgIChCWVRFKTMyDQojZGVmaW5lIFpQU19JUl9JUkFUX0dTTV9QUklPX01FQVNfUEVSSU9EX0lETEUgICAgICBaX0lSX0lSQVRfR1NNX1BSSU9fTUVBU19QRVJJT0RfSURMRQ0KI2VuZGlmDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IGwxdWRfbWVhcy5oLCBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCi8qIG1heC4gbnVtYmVyIG9mIGNlbGxzIHRoYXQgYXJlIGJlaW5nIGtlcHQgc3luY2hyb25pemVkICovDQojZGVmaW5lIE1BWF9JUl9TWU5DX0lORk9fQ0VMTFMgICAgICAgICAgICAgICAgICAgIChCWVRFKTEwIC8vKE1BWF9SRVBPUlRFRF9HU01fQ0VMTFMgKyAyKQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBsMXVfaXJhdC5oLCBiZWdpbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQovKiBtYXguIG51bWJlciBvZiBjZWxscyB0aGF0IGFyZSBiZWluZyBrZXB0IHN5bmNocm9uaXplZCAqLw0KI2RlZmluZSBaX0lSX01BWF9JUl9TWU5DX0lORk9fQ0VMTFMgICAgICAgICAgICAgICBNQVhfSVJfU1lOQ19JTkZPX0NFTExTIA0KI2RlZmluZSBaUFNfSVJfTUFYX0lSX1NZTkNfSU5GT19DRUxMUyAgICAgICAgICAgICBaX0lSX01BWF9JUl9TWU5DX0lORk9fQ0VMTFMNCg0KLyoNCioqIEluZGljYXRlcyB0aGUgdHlwZSBvZiBJbnRlclJBVCB0aW1pbmcgY29udHJvbCBpbiB3aGljaCB3ZSB3b3JrLCBlLmcuIGZvciBTQg0KKi8NCiNkZWZpbmUgWl9JUl9VTVRTX1RJTUlOR19DVFJMICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMCAvKiBVTVRTIGRvZXMgbW9zdCBvZiB0aGUgdGltaW5nIGNhbGN1bGF0aW9uICovDQojZGVmaW5lIFpQU19JUl9VTVRTX1RJTUlOR19DVFJMICAgICAgICAgICAgICAgICAgICBaX0lSX1VNVFNfVElNSU5HX0NUUkwgDQojZGVmaW5lIFpfSVJfR1NNX1RJTUlOR19DVFJMICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTEgLyogR1NNIGRvZXMgbW9zdCBvZiB0aGUgdGltaW5nIGNhbGN1bGF0aW9uICAqLw0KI2RlZmluZSBaUFNfSVJfR1NNX1RJTUlOR19DVFJMICAgICAgICAgICAgICAgICAgICAgWl9JUl9HU01fVElNSU5HX0NUUkwNCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IGwxdV9pcmF0LmgsIGVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IGwxdV9pcmF0X21pc2MuaCwgYmVnaW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KLyogcmVxdWVzdHMgdG8gVU1UUyBJbnRlclJBVCBoYW5kbGVyICovDQojZGVmaW5lIFpfSVJfREVBQ19VTVRTX1JFUSAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTANCiNkZWZpbmUgWlBTX0lSX0RFQUNfVU1UU19SRVEgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfREVBQ19VTVRTX1JFUQ0KI2RlZmluZSBaX0lSX1NVU1BFTkRfR1NNX1JFUSAgICAgICAgICAgICAgICAgICAgICAoQllURSkxDQojZGVmaW5lIFpQU19JUl9TVVNQRU5EX0dTTV9SRVEgICAgICAgICAgICAgICAgICAgICBaX0lSX1NVU1BFTkRfR1NNX1JFUQ0KI2RlZmluZSBaX0lSX1JFU1VNRV9HU01fUkVRICAgICAgICAgICAgICAgICAgICAgICAoQllURSkyDQojZGVmaW5lIFpQU19JUl9SRVNVTUVfR1NNX1JFUSAgICAgICAgICAgICAgICAgICAgICBaX0lSX1JFU1VNRV9HU01fUkVRDQoNCi8qIGNvbmZpcm0gdG8gVU1UUyBJbnRlclJBVCBoYW5kbGVyICovDQojZGVmaW5lIFpfSVJfTk9fQ05GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTANCiNkZWZpbmUgWlBTX0lSX05PX0NORiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfTk9fQ05GDQojZGVmaW5lIFpfSVJfREVBQ19VTVRTX0NORiAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTENCiNkZWZpbmUgWlBTX0lSX0RFQUNfVU1UU19DTkYgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfREVBQ19VTVRTX0NORg0KI2RlZmluZSBaX0lSX1NVU1BFTkRfR1NNX0NORiAgICAgICAgICAgICAgICAgICAgICAoQllURSkyDQojZGVmaW5lIFpQU19JUl9TVVNQRU5EX0dTTV9DTkYgICAgICAgICAgICAgICAgICAgICBaX0lSX1NVU1BFTkRfR1NNX0NORg0KI2RlZmluZSBaX0lSX1JFU1VNRV9HU01fQ05GICAgICAgICAgICAgICAgICAgICAgICAoQllURSkzDQojZGVmaW5lIFpQU19JUl9SRVNVTUVfR1NNX0NORiAgICAgICAgICAgICAgICAgICAgICBaX0lSX1JFU1VNRV9HU01fQ05GDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gbDF1X2lyYXRfbWlzYy5oLCBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gbDF1ZF90c3RhbXAuaCwgYmVnaW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KLyogbW9kZXMgZm9yIGdldHRpbmcgdGltZXN0YW1wcyAqLw0KI2RlZmluZSBaX0lSX1RTX01PREVfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAoQllURSkwDQojZGVmaW5lIFpQU19JUl9UU19NT0RFX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICBaX0lSX1RTX01PREVfSU5WQUxJRA0KI2RlZmluZSBaX0lSX1RTX01PREVfTk9OU1RPUCAgICAgICAgICAgICAgICAgICAgICAoQllURSkxIC8qIGdldHRpbmcgdGltZXN0YW1wcyB0YWtlcyBwbGFjZSBmYXN0IGFzIHBvc3NpYmxlICovDQojZGVmaW5lIFpQU19JUl9UU19NT0RFX05PTlNUT1AgICAgICAgICAgICAgICAgICAgICBaX0lSX1RTX01PREVfTk9OU1RPUA0KI2RlZmluZSBaX0lSX1RTX01PREVfUEFVU0lORyAgICAgICAgICAgICAgICAgICAgICAoQllURSkyIC8qIHRha2UgYSBicmVhayBhZnRlciBnZXR0aW5nIGEgdGltZXN0YW1wICovDQojZGVmaW5lIFpQU19JUl9UU19NT0RFX1BBVVNJTkcgICAgICAgICAgICAgICAgICAgICBaX0lSX1RTX01PREVfUEFVU0lORw0KDQovKiBtb2RlcyBmb3IgZXZhbHVhdGluZyB0aGUgYW50ZW5uYSBnYXBzICovDQojZGVmaW5lIFpfSVJfR0FQU19JR05PUkVEICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTAgLyogcmVwb3J0aW5nIG9mIHBvc3NpYmx5IGNhbGN1bGF0ZWQgZ2FwcyBhY2NvcmRpbmcgVU1UUyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqIGFudGVubmEgYWN0aXZpdGllcyBvbiBHU00gc2lkZSBhcmUgaWdub3JlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiogLT4geklSX2wxdWRfdHN0YW1wX2lzX2FudGVubmFfcmVhZHlfZm9yX2dzbSguLikgYWx3YXlzIFRSVUUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQojZGVmaW5lIFpQU19JUl9HQVBTX0lHTk9SRUQgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX0dBUFNfSUdOT1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQojZGVmaW5lIFpfSVJfR0FQU19FVkFMVUFURUQgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTEgLyogZ2FwcyBhY2NvcmRpbmcgVU1UUyBhbnRlbm5hIGFjdGl2aXRpZXMgYXJlIGV2YWx1YXRlZCovDQojZGVmaW5lIFpQU19JUl9HQVBTX0VWQUxVQVRFRCAgICAgICAgICAgICAgICAgICAgICBaX0lSX0dBUFNfRVZBTFVBVEVEDQoNCiNkZWZpbmUgWl9JUl9UU1RBTVBfU0ZOX0JBU0VEICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMA0KI2RlZmluZSBaUFNfSVJfVFNUQU1QX1NGTl9CQVNFRCAgICAgICAgICAgICAgICAgICAgWl9JUl9UU1RBTVBfU0ZOX0JBU0VEDQojZGVmaW5lIFpfSVJfVFNUQU1QX0NGTl9CQVNFRCAgICAgICAgICAgICAgICAgICAgIChCWVRFKTENCiNkZWZpbmUgWlBTX0lSX1RTVEFNUF9DRk5fQkFTRUQgICAgICAgICAgICAgICAgICAgIFpfSVJfVFNUQU1QX0NGTl9CQVNFRA0KDQojZGVmaW5lIFpfSVJfTURPX1JFU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTANCiNkZWZpbmUgWlBTX0lSX01ET19SRVNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfTURPX1JFU0VMDQojZGVmaW5lIFpfSVJfTURPX0VYVF9NRUFTICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTENCiNkZWZpbmUgWlBTX0lSX01ET19FWFRfTUVBUyAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfTURPX0VYVF9NRUFTDQovLyNpZiAoZGVmaW5lZChHUFJTKSAmJiBkZWZpbmVkKFVNVFMpKQ0KI2RlZmluZSBaX0lSX01ET19VTVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkyDQojZGVmaW5lIFpQU19JUl9NRE9fVU1UUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX01ET19VTVRTDQovLyNlbmRpZiAvKiAoZGVmaW5lZChHUFJTKSAmJiBkZWZpbmVkKFVNVFMpKSAqLw0KI2RlZmluZSBaX0lSX01ET19QVVJQT1NFX0NPVU5UICAgICAgICAgICAgICAgICAgICAoQllURSkzDQojZGVmaW5lIFpQU19JUl9NRE9fUFVSUE9TRV9DT1VOVCAgICAgICAgICAgICAgICAgICBaX0lSX01ET19QVVJQT1NFX0NPVU5UDQoNCi8q0v3X1G1zLmjW0LKots61xLrqtqjS5aOszqqx3MPisPy6rG1zLmi5ytbY0MK2qNLlKi8NCiNkZWZpbmUgWl9JUl9NU19HU005MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMA0KI2RlZmluZSBaUFNfSVJfTVNfR1NNOTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9NU19HU005MDANCiNkZWZpbmUgWl9JUl9NU19HU005MDBfUCAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMQ0KI2RlZmluZSBaUFNfSVJfTVNfR1NNOTAwX1AgICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9NU19HU005MDBfUA0KI2RlZmluZSBaX0lSX01TX0dTTTkwMF9FICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkyDQojZGVmaW5lIFpQU19JUl9NU19HU005MDBfRSAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX01TX0dTTTkwMF9FDQojZGVmaW5lIFpfSVJfTVNfR1NNOTAwX1IgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTMNCiNkZWZpbmUgWlBTX0lSX01TX0dTTTkwMF9SICAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfTVNfR1NNOTAwX1INCiNkZWZpbmUgWl9JUl9NU19HU00xODAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpNA0KI2RlZmluZSBaUFNfSVJfTVNfR1NNMTgwMCAgICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9NU19HU00xODAwDQojZGVmaW5lIFpfSVJfTVNfR1NNMTkwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTUNCiNkZWZpbmUgWlBTX0lSX01TX0dTTTE5MDAgICAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfTVNfR1NNMTkwMA0KI2RlZmluZSBaX0lSX01TX0dTTTg1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSk2DQojZGVmaW5lIFpQU19JUl9NU19HU004NTAgICAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX01TX0dTTTg1MA0KI2RlZmluZSBaX0lSX01TX0dTTTQ1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSk3DQojZGVmaW5lIFpQU19JUl9NU19HU000NTAgICAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX01TX0dTTTQ1MA0KI2RlZmluZSBaX0lSX01TX0dTTTQ4MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSk4DQojZGVmaW5lIFpQU19JUl9NU19HU000ODAgICAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX01TX0dTTTQ4MA0KI2RlZmluZSBaX0lSX01TX0dTTTc1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSk5DQojZGVmaW5lIFpQU19JUl9NU19HU003NTAgICAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX01TX0dTTTc1MA0KI2RlZmluZSBaX0lSX01TX0dTTV9UX0dTTV8zODAgICAgICAgICAgICAgICAgICAgICAoQllURSkxMA0KI2RlZmluZSBaUFNfSVJfTVNfR1NNX1RfR1NNXzM4MCAgICAgICAgICAgICAgICAgICAgWl9JUl9NU19HU01fVF9HU01fMzgwDQojZGVmaW5lIFpfSVJfTVNfR1NNX1RfR1NNXzQxMCAgICAgICAgICAgICAgICAgICAgIChCWVRFKTExDQojZGVmaW5lIFpQU19JUl9NU19HU01fVF9HU01fNDEwICAgICAgICAgICAgICAgICAgICBaX0lSX01TX0dTTV9UX0dTTV80MTANCiNkZWZpbmUgWl9JUl9NU19HU01fVF9HU01fOTAwICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTINCiNkZWZpbmUgWlBTX0lSX01TX0dTTV9UX0dTTV85MDAgICAgICAgICAgICAgICAgICAgIFpfSVJfTVNfR1NNX1RfR1NNXzkwMA0KI2RlZmluZSBaX0lSX01TX01VTFRJQkFORCAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkxMw0KI2RlZmluZSBaUFNfSVJfTVNfTVVMVElCQU5EICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9NU19NVUxUSUJBTkQNCiNkZWZpbmUgWl9JUl9NU19VTVRTX0ZERCAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTQNCiNkZWZpbmUgWlBTX0lSX01TX1VNVFNfRkREICAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfTVNfVU1UU19GREQNCiNkZWZpbmUgWl9JUl9NU19VTVRTX1RERCAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTUNCiNkZWZpbmUgWlBTX0lSX01TX1VNVFNfVEREICAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfTVNfVU1UU19UREQNCiNkZWZpbmUgWl9JUl9JTlZBTElEX0JBTkQgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTYNCiNkZWZpbmUgWlBTX0lSX0lOVkFMSURfQkFORCAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfSU5WQUxJRF9CQU5EDQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBsMXVkX3RzdGFtcC5oLCBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gbDF1X21kYi5oID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQojZGVmaW5lIFpfSVJfTk9GX1VUUkFOX0NFTExTX1BFUl9GUkVRVUVOQ1kgICAgICAgIChCWVRFKTMyDQojZGVmaW5lIFpQU19JUl9OT0ZfVVRSQU5fQ0VMTFNfUEVSX0ZSRVFVRU5DWSAgICAgICBaX0lSX05PRl9VVFJBTl9DRUxMU19QRVJfRlJFUVVFTkNZDQogICAgDQojZGVmaW5lIFpfSVJfTk9GX0NFTExfTElTVF9GUkVRVUVOQ0lFUyAgICAgICAgICAgIChCWVRFKTE2DQojZGVmaW5lIFpQU19JUl9OT0ZfQ0VMTF9MSVNUX0ZSRVFVRU5DSUVTICAgICAgICAgICBaX0lSX05PRl9DRUxMX0xJU1RfRlJFUVVFTkNJRVMNCiAgICANCiNkZWZpbmUgWl9JUl9JTlZBTElEX1VBUkZDTiAgICAgICAgICAgICAgICAgICAgICAgKFdPUkQpMHhGRkZGDQojZGVmaW5lIFpQU19JUl9JTlZBTElEX1VBUkZDTiAgICAgICAgICAgICAgICAgICAgICBaX0lSX0lOVkFMSURfVUFSRkNODQojZGVmaW5lIFpfSVJfSU5WQUxJRF9ETF9QU0MgICAgICAgICAgICAgICAgICAgICAgIChXT1JEKTB4RkZGRg0KI2RlZmluZSBaUFNfSVJfSU5WQUxJRF9ETF9QU0MgICAgICAgICAgICAgICAgICAgICAgWl9JUl9JTlZBTElEX0RMX1BTQw0KICAgIA0KI2RlZmluZSBaX0lSX1VUUkFOX0lSQVRfTUVBU19ESVNBQkxFRCAgICAgICAgICAgICAoQllURSkwDQojZGVmaW5lIFpQU19JUl9VVFJBTl9JUkFUX01FQVNfRElTQUJMRUQgICAgICAgICAgICBaX0lSX1VUUkFOX0lSQVRfTUVBU19ESVNBQkxFRA0KI2RlZmluZSBaX0lSX1VUUkFOX0lSQVRfTUVBU19FTkFCTEVEICAgICAgICAgICAgICAoQllURSkxDQojZGVmaW5lIFpQU19JUl9VVFJBTl9JUkFUX01FQVNfRU5BQkxFRCAgICAgICAgICAgICBaX0lSX1VUUkFOX0lSQVRfTUVBU19FTkFCTEVEDQojZGVmaW5lIFpfSVJfVVRSQU5fSVJBVF9NRUFTX0RFRCAgICAgICAgICAgICAgICAgIChCWVRFKTINCiNkZWZpbmUgWlBTX0lSX1VUUkFOX0lSQVRfTUVBU19ERUQgICAgICAgICAgICAgICAgIFpfSVJfVVRSQU5fSVJBVF9NRUFTX0RFRA0KI2RlZmluZSBaX0lSX1VUUkFOX0lSQVRfTUVBU19OQyAgICAgICAgICAgICAgICAgICAoQllURSk0DQojZGVmaW5lIFpQU19JUl9VVFJBTl9JUkFUX01FQVNfTkMgICAgICAgICAgICAgICAgICBaX0lSX1VUUkFOX0lSQVRfTUVBU19OQw0KI2RlZmluZSBaX0lSX1VUUkFOX0lSQVRfTUVBU19BTEwgICAgICAgICAgICAgICAgICAoQllURSk3DQojZGVmaW5lIFpQU19JUl9VVFJBTl9JUkFUX01FQVNfQUxMICAgICAgICAgICAgICAgICBaX0lSX1VUUkFOX0lSQVRfTUVBU19BTEwNCiAgICANCiNkZWZpbmUgWl9JUl9NRE9fR0FQX01PREVfTE9ORyAgICAgICAgICAgICAgICAgICAgKEJZVEUpMA0KI2RlZmluZSBaUFNfSVJfTURPX0dBUF9NT0RFX0xPTkcgICAgICAgICAgICAgICAgICAgWl9JUl9NRE9fR0FQX01PREVfTE9ORw0KI2RlZmluZSBaX0lSX01ET19HQVBfTU9ERV9TSE9SVCAgICAgICAgICAgICAgICAgICAoQllURSkxDQojZGVmaW5lIFpQU19JUl9NRE9fR0FQX01PREVfU0hPUlQgICAgICAgICAgICAgICAgICBaX0lSX01ET19HQVBfTU9ERV9TSE9SVA0KICAgIA0KI2RlZmluZSBaX0lSX0NFTExfTElTVF8wICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkwDQojZGVmaW5lIFpQU19JUl9DRUxMX0xJU1RfMCAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX0NFTExfTElTVF8wDQojZGVmaW5lIFpfSVJfQ0VMTF9MSVNUXzEgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTENCiNkZWZpbmUgWlBTX0lSX0NFTExfTElTVF8xICAgICAgICAgICAgICAgICAgICAgICAgIFpfSVJfQ0VMTF9MSVNUXzENCiNkZWZpbmUgWl9JUl9DRUxMX0xJU1RfMiAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpOA0KI2RlZmluZSBaUFNfSVJfQ0VMTF9MSVNUXzIgICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9DRUxMX0xJU1RfMg0KI2RlZmluZSBaX0lSX0NFTExfTElTVF9JRF9VTktOT1dOICAgICAgICAgICAgICAgICAoQllURSkweEZGDQojZGVmaW5lIFpQU19JUl9DRUxMX0xJU1RfSURfVU5LTk9XTiAgICAgICAgICAgICAgICBaX0lSX0NFTExfTElTVF9JRF9VTktOT1dODQoNCiNkZWZpbmUgWl9JUl9VVFJBTl9JTkFDVElWRSAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMA0KI2RlZmluZSBaUFNfSVJfVVRSQU5fSU5BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgWl9JUl9VVFJBTl9JTkFDVElWRQ0KI2RlZmluZSBaX0lSX1VUUkFOX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkxDQojZGVmaW5lIFpQU19JUl9VVFJBTl9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX1VUUkFOX0FDVElWRQ0KI2RlZmluZSBaX0lSX1VUUkFOX1NVU1BFTkQgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkyDQojZGVmaW5lIFpQU19JUl9VVFJBTl9TVVNQRU5EICAgICAgICAgICAgICAgICAgICAgICBaX0lSX1VUUkFOX1NVU1BFTkQNCiNkZWZpbmUgWl9JUl9VVFJBTl9GSU5JU0hFRCAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMyANCiNkZWZpbmUgWlBTX0lSX1VUUkFOX0ZJTklTSEVEICAgICAgICAgICAgICAgICAgICAgIFpfSVJfVVRSQU5fRklOSVNIRUQNCg0KI2RlZmluZSBaX0lSX01BWF9HU01fQ0VMTF9DTlQgICAgICAgICAgICAgICAgICAgICAoQllURSkzMg0KI2RlZmluZSBaUFNfSVJfTUFYX0dTTV9DRUxMX0NOVCAgICAgICAgICAgICAgICAgICAgWl9JUl9NQVhfR1NNX0NFTExfQ05UDQojZGVmaW5lIFpfTFRFX1BfTUFYX0lSQVRfUkVQT1JUX0NFTExfUEVSX0ZSRVEgICAgIChCWVRFKTMyDQojZGVmaW5lIFpQU19MVEVfUF9NQVhfSVJBVF9SRVBPUlRfQ0VMTF9QRVJfRlJFUSAgICBaX0xURV9QX01BWF9JUkFUX1JFUE9SVF9DRUxMX1BFUl9GUkVRDQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAxdV9tZGIuaCwgZW5kID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgyKu+1sr9vt3A4NDNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiA9IDNHzqrW98qxo6wyR7T9suLBv9Chx/i2qNLlo6jT621zLmjW0FRfTU9OX01FQVNfUkVTVUxUX0dTTV9FTEVNRU5Uz+DNrKOpPQ0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KdHlwZWRlZiBzdHJ1Y3QgDQp7DQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbF9pZDsgICAgLypMMUfL+bGjtOZCQcHQse21xMv30v3WtSovDQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnNpYzsNCiAgICBDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3NpOw0KfSBUX3pJUl9NT05fTUVBU19SRVNVTFRfR1NNX0VMRU1FTlQsVF96UFNfSVJfTU9OX01FQVNfUkVTVUxUX0dTTV9FTEVNRU5UOw0KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiA9ICAgICAgIDNHzqrW98qxo6zH68fzu/HIoUwxR7GjtOa1xEJBwdCx7SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPQ0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KdHlwZWRlZiBXT1JEICBUX1JBRElPX0ZSRVFfTk87DQp0eXBlZGVmIEJZVEUgIFRfQlNJQzsNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIFRfUkFESU9fRlJFUV9OTyAgQVszMl07DQp9ICBUX0NIQU5fTElTVDsNCg0KdHlwZWRlZiBUX0NIQU5fTElTVCBUX3pJUl9DSEFOX0xJU1Q7DQp0eXBlZGVmIFRfeklSX0NIQU5fTElTVCBUX3pQU19JUl9DSEFOX0xJU1Q7DQoNCnR5cGVkZWYgc3RydWN0IFRfQkNDSF9MSVNUX3Mgew0KICAgIEJZVEUgIG51bV9vZl9jaGFuczsNCiAgICBUX0NIQU5fTElTVCAgY2hhbl9udW1iZXI7DQp9IFRfQkNDSF9MSVNUOw0KDQp0eXBlZGVmIFRfQkNDSF9MSVNUIFRfeklSX0JDQ0hfTElTVDsNCnR5cGVkZWYgVF96SVJfQkNDSF9MSVNUIFRfelBTX0lSX0JDQ0hfTElTVDsNCg0KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiA9ICAgICAgIDJHzqrW98qxo6yy4sG/x+vH87LOyv21xMr9vt294bm5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9DQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQp0eXBlZGVmIHN0cnVjdA0KeyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VWFyZmNuOw0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJOdW1fb2ZfY2VsbHM7DQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlBhZGRpbmc7DQogICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRDZWxsSW5mb1taX0lSX01BWF9JTlRFUl9GUkVRX0NFTExfTlVNXTsNCn0gVF96SVJfVU1lYXNVYXJmY24sVF96UFNfSVJfVU1lYXNVYXJmY247DQoNCnR5cGVkZWYgc3RydWN0DQp7ICAgIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJNZWFzX3JlZmVyZW5jZTsNCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiTnVtX29mX3VhcmZjbnM7ICAvKrT9suLGtbXjyv0qLw0KICAgIFRfeklSX1VNZWFzVWFyZmNuICAgICAgICAgICAgICAgIGF0VWFyZmNuW1pfSVJfTUNSX01BWF9GUkVRXTsgDQp9IFRfeklSX1VNZWFzUGFyYW1zLFRfelBTX0lSX1VNZWFzUGFyYW1zOw0KDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KID0gICAgICAgMkfOqtb3yrGjrLLiwb+94bn7yc+xqLLOyv21xMr9vt294bm5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0NCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCnR5cGVkZWYgc3RydWN0DQp7ICAgICAgIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJVY2VsbF9wYXJhbTsNCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiUnNjcDsgDQp9IFRfeklSX1VNZWFzQ2VsbHNSbHQsVF96UFNfSVJfVU1lYXNDZWxsc1JsdDsNCg0KdHlwZWRlZiBzdHJ1Y3QNCnsgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1VhcmZjbjsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCg0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3TWVhc3VyZWRfY2VsbHM7ICAvKtLRsuLQocf4tcRCSVRNQVAqLw0KDQogICAgVF96SVJfVU1lYXNDZWxsc1JsdCAgICAgICAgICAgICAgYXRDZWxsUmx0W1pfSVJfTUFYX0lOVEVSX0ZSRVFfQ0VMTF9OVU1dOyANCn0gVF96SVJfVU1lYXNGcmVxUmx0LFRfelBTX0lSX1VNZWFzRnJlcVJsdDsNCg0KdHlwZWRlZiBzdHJ1Y3QgDQp7DQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYk1lYXNfcmVmZXJlbmNlOyAgIC8qTDFHxNqyv8q508O1xLLiwb+x4LrFo6zTw8C0xdC2z7Liwb/Kx7fxuMSx5CovDQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm5vZl9mcmVxOyAgICAgICAgIC8qyc+xqLXExrW148r9Ki8NCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYlBhZGRpbmdbMl07DQoNCiAgICBUX3pJUl9VTWVhc0ZyZXFSbHQgICAgICAgICAgICAgICBhdEZyZXFSbHRbWl9JUl9NQ1JfTUFYX0ZSRVFdOw0KfSBUX3pJUl9VTWVhc1JsdExpc3QsVF96UFNfSVJfVU1lYXNSbHRMaXN0Ow0KDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KID0gR1NNIFRpbWluZyBpbmZvcm1hdGlvbiBhcyBjb21tdW5pY2F0ZWQgZnJvbSBVTVRTIA0KID0gRm9yIGRldGFpbHMgb24gdGltZXN0YW1wIHJlYWRpbmcsIHBsZWFzZSBzZWUgdGhlIGRzcGVjDQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQp0eXBlZGVmIGxvbmcgVF9MMV9IWVBFUl9GUkFNRV9OTzsNCnR5cGVkZWYgV09SRCAgVF9MMV9RQklUUzsNCg0KdHlwZWRlZiBzdHJ1Y3QgDQp7DQogIFRfTDFfSFlQRVJfRlJBTUVfTk8gIHRmbjsNCiAgVF9MMV9RQklUUyAgICAgICAgICAgdF9vZmY7DQp9IFRfSVJfVERNQV9USU1FX0lORk87DQoNCnR5cGVkZWYgVF9JUl9URE1BX1RJTUVfSU5GTyBUX3pJUl9URE1BX1RJTUVfSU5GTzsNCnR5cGVkZWYgVF96SVJfVERNQV9USU1FX0lORk8gVF96UFNfSVJfVERNQV9USU1FX0lORk87DQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAgICAgIEwxVNPrTDFHubLTw73hubm2qNLlo6i8zLPQ19RDb21uZW9utPrC66OpDQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBsMXVfaXJhdC5oLCBiZWdpbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQovKg0KKiogVGhpcyBlbnVtIGluZGljYXRlcyB0aGUgc3luYyBzdGF0dXMgb2YgYSBCUw0KKi8NCnR5cGVkZWYgZW51bQ0Kew0KICBJUl9OT19TWU5DLCAgICAgICAgICAgIC8qIHVuc3luY2VkIChubyBGQ0IsIG5vIFNCKSAgICAqLw0KICBJUl9GQ0JfU0VBUkNIX1BFTkRJTkcsIC8qIHVuc3luY2VkLCBidXQgRkNCIGF0dGVtcHRlZCAqLw0KICBJUl9GQ0JfU1lOQywgICAgICAgICAgIC8qIHVuc3luY2VkLCBidXQgRkNCIGZvdW5kICAgICAqLw0KICBJUl9TQl9TWU5DLCAgICAgICAgICAgIC8qIHN5bmNlZCAoRkNCIGFuZCBTQikgICAgICAgICAqLw0KICBJUl9TQl9SRUNPTkYsICAgICAgICAgIC8qIFNCIG5lZWRzIHRvIGJlIHJlY29uZmlybWVkICAqLw0KICBJUl9JTlZBTElEX1NZTkMgICAgICAgIC8qIHVuc3luY2VkIChvciByZWNvbmYgZmFpbGVkKSAqLw0KfSBUX0lSX0dTTV9TWU5DX1NUQVRVUzsNCg0KLyoNCioqIEluZGljYXRlcyB3aGV0aGVyIGluaXRpYWwgU0IgcmVhZCBvciBTQiByZWNvbmZpcm1hdGlvbiBpcyBkZXNpcmVkDQoqLw0KdHlwZWRlZiBlbnVtDQp7DQogIElSX0lOSVRfU0JfUkVBRCwgICAvKiBpbml0aWFsIFNCIHJlYWQgZGVzaXJlZCAgICovDQogIElSX1JFQ09ORl9TQl9SRUFEICAvKiBTQiByZWNvbmZpcm1hdGlvbiBkZXNpcmVkICovDQp9IFRfSVJfU0JfUkVBRF9UWVBFOw0KDQoNCnR5cGVkZWYgZW51bQp7CiAgICBMMUdfSVJBVF9YQ0VMTCA9IDAsCiAgICBMMUdfSVJBVF9SRVNFTF9HU00yVVRSQU4sCiAgICBMMUdfSVJBVF9SRVNFTF9HU00yTFRFLAogICAgTDFHX0lSQVRfUkVESVJFQ1RfR1NNMlVUUkFOLAogICAgTDFHX0lSQVRfUkVESVJFQ1RfR1NNMkxURSwKICAgIEwxR19JUkFUX0NDT19HU00yVVRSQU4sCiAgICBMMUdfSVJBVF9DQ09fR1NNMkxURSwKICAgIEwxR19JUkFUX0NTSE9fR1NNMlVUUkFOLAogICAgTDFHX0lSQVRfUFNIT19HU00yVVRSQU4sCiAgICBMMUdfSVJBVF9QU0hPX0dTTTJMVEUKfSBUX0wxR19JUkFUX1NDRU5FX1RZUEU7Cg0KDQoNCnR5cGVkZWYgVF9JUl9HU01fU1lOQ19TVEFUVVMgICAgICAgICAgICBUX3pJUl9HU01fU1lOQ19TVEFUVVM7DQp0eXBlZGVmIFRfeklSX0dTTV9TWU5DX1NUQVRVUyAgICAgICAgICAgVF96UFNfSVJfR1NNX1NZTkNfU1RBVFVTOw0KdHlwZWRlZiBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfeklSX1RJTUlOR19DVFJMOw0KdHlwZWRlZiBUX3pJUl9USU1JTkdfQ1RSTCAgICAgICAgICAgICAgIFRfelBTX0lSX1RJTUlOR19DVFJMOw0KdHlwZWRlZiBUX0lSX1NCX1JFQURfVFlQRSAgICAgICAgICAgICAgIFRfeklSX1NCX1JFQURfVFlQRTsNCnR5cGVkZWYgVF96SVJfU0JfUkVBRF9UWVBFICAgICAgICAgICAgICBUX3pQU19JUl9TQl9SRUFEX1RZUEU7DQp0eXBlZGVmIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF96SVJfSEFORExFUl9SRVFfVFlQRTsNCnR5cGVkZWYgVF96SVJfSEFORExFUl9SRVFfVFlQRSAgICAgICAgICBUX3pQU19JUl9IQU5ETEVSX1JFUV9UWVBFOw0KDQovKiAqKiBUaGlzIGVudW0gaW5kaWNhdGVzIHRoZSBzeW5jIHN0YXR1cyBvZiBhIEJTICovDQojZGVmaW5lIFpfSVJfTk9fU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSX05PX1NZTkMgLyogdW5zeW5jZWQgKG5vIEZDQiwgbm8gU0IpICAgICovDQojZGVmaW5lIFpQU19JUl9OT19TWU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX05PX1NZTkMNCiNkZWZpbmUgWl9JUl9GQ0JfU0VBUkNIX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgSVJfRkNCX1NFQVJDSF9QRU5ESU5HIC8qIHVuc3luY2VkLCBidXQgRkNCIGF0dGVtcHRlZCAqLw0KI2RlZmluZSBaUFNfSVJfRkNCX1NFQVJDSF9QRU5ESU5HICAgICAgICAgICAgICAgICAgWl9JUl9GQ0JfU0VBUkNIX1BFTkRJTkcNCiNkZWZpbmUgWl9JUl9GQ0JfU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJfRkNCX1NZTkMgLyogdW5zeW5jZWQsIGJ1dCBGQ0IgZm91bmQgICAgICovDQojZGVmaW5lIFpQU19JUl9GQ0JfU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX0ZDQl9TWU5DDQojZGVmaW5lIFpfSVJfU0JfU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSX1NCX1NZTkMgLyogc3luY2VkIChGQ0IgYW5kIFNCKSAgICAgICAgICovDQojZGVmaW5lIFpQU19JUl9TQl9TWU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaX0lSX1NCX1NZTkMNCiNkZWZpbmUgWl9JUl9TQl9SRUNPTkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJfU0JfUkVDT05GIC8qIFNCIG5lZWRzIHRvIGJlIHJlY29uZmlybWVkICAqLw0KI2RlZmluZSBaUFNfSVJfU0JfUkVDT05GICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9TQl9SRUNPTkYNCiNkZWZpbmUgWl9JUl9JTlZBTElEX1NZTkMgICAgICAgICAgICAgICAgICAgICAgICAgSVJfSU5WQUxJRF9TWU5DIC8qIHVuc3luY2VkIChvciByZWNvbmYgZmFpbGVkKSAqLw0KI2RlZmluZSBaUFNfSVJfSU5WQUxJRF9TWU5DICAgICAgICAgICAgICAgICAgICAgICAgWl9JUl9JTlZBTElEX1NZTkMNCg0KLyoNCioqIEluZGljYXRlcyB3aGV0aGVyIGluaXRpYWwgU0IgcmVhZCBvciBTQiByZWNvbmZpcm1hdGlvbiBpcyBkZXNpcmVkDQoqLw0KI2RlZmluZSBaX0lSX0lOSVRfU0JfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICBJUl9JTklUX1NCX1JFQUQgLyogaW5pdGlhbCBTQiByZWFkIGRlc2lyZWQgICAqLw0KI2RlZmluZSBaUFNfSVJfSU5JVF9TQl9SRUFEICAgICAgICAgICAgICAgICAgICAgICBaX0lSX0lOSVRfU0JfUkVBRA0KI2RlZmluZSBaX0lSX1JFQ09ORl9TQl9SRUFEICAgICAgICAgICAgICAgICAgICAgICBJUl9SRUNPTkZfU0JfUkVBRCAvKiBTQiByZWNvbmZpcm1hdGlvbiBkZXNpcmVkICovDQojZGVmaW5lIFpQU19JUl9SRUNPTkZfU0JfUkVBRCAgICAgICAgICAgICAgICAgICAgICBaX0lSX1JFQ09ORl9TQl9SRUFEDQoNCiNkZWZpbmUgICBaX0dTTV9SUElfU1VQUE9SVF9NQVhfQkFORCAgICAgICAgICAoQllURSk4DQoNCi8qDQoqKiBUaGlzIHR5cGUgaXMgdXNlZCB0byBzZWxlY3QgImFsbG93ZWQgYmFuZHMiIGZvciBSU1NJIG1lYXN1cmVtZW50cw0KKiogRm9yIGJhbmQgbiAoZnJvbSBUX0dTTV9CQU5EKSBiaXQgMTw8biBpcyBzZXQgaW4gdGhlIG1hc2suDQoqKg0KKi8NCnR5cGVkZWYgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pJUl9JUl9HU01fQkFORF9NQVNLOw0KdHlwZWRlZiBUX3pJUl9JUl9HU01fQkFORF9NQVNLICAgICAgICAgIFRfelBTX0lSX0lSX0dTTV9CQU5EX01BU0s7DQoNCi8qDQoqKiBHZW5lcmFsIHJldHVybiBmY3Qgc3R1Y3R1cmUsIHRvIGJlIHVzZWQgaW4gbW9zdCBJbnRlclJBVCBmdW5jdGlvbmFsaXR5DQoqLw0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKmZ1bmMpKEJZVEUsIEJZVEUpOyANCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhOw0KfSBUX3pJUl9SRVNVTFRfRlVOQ1RJT04sVF96UFNfSVJfUkVTVUxUX0ZVTkNUSU9OOw0KDQovKg0KKiogVGFibGUgd2l0aCBHU00gY2VsbCBpbmZvIGZvciBhbGwgcmVwb3J0ZWQgY2VsbHMNCiovDQp0eXBlZGVmIHN0cnVjdCBUX0wxX0NFTExfSU5GT19HU01fcyB7DQogICAgVF9SQURJT19GUkVRX05PICBhcmZjbjsNCiAgICBUX0JTSUMgIGJzaWM7DQp9IFRfTDFfQ0VMTF9JTkZPX0dTTTsNCg0KdHlwZWRlZiBUX0wxX0NFTExfSU5GT19HU00gVF96SVJfQ0VMTF9JTkZPX0dTTTsNCnR5cGVkZWYgVF96SVJfQ0VMTF9JTkZPX0dTTSBUX3pQU19JUl9DRUxMX0lORk9fR1NNOw0KDQp0eXBlZGVmIHN0cnVjdA0Kew0KICBCWVRFICAgICAgICAgICAgICAgIG5vZl9jZWxscyA7DQogIFRfTDFfQ0VMTF9JTkZPX0dTTSAgIHJlcF9jZWxsX2luZm9bTUFYX0lSX1NZTkNfSU5GT19DRUxMU107DQogIFRfSVJfR1NNX1NZTkNfU1RBVFVTIHN0YXR1c1tNQVhfSVJfU1lOQ19JTkZPX0NFTExTXTsNCn0gVF9JUl9SRVBfQ0VMTF9UQUJMRTsNCg0KdHlwZWRlZiBUX0lSX1JFUF9DRUxMX1RBQkxFIFRfeklSX1JFUF9DRUxMX1RBQkxFOw0KdHlwZWRlZiBUX3pJUl9SRVBfQ0VMTF9UQUJMRSBUX3pQU19JUl9SRVBfQ0VMTF9UQUJMRTsNCg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgICBUX3pJUl9SRVBfQ0VMTF9UQUJMRSAgICAgIGNlbGxfaW5mbzsNCiAgICBUX3pJUl9URE1BX1RJTUVfSU5GTyAgICAgICAgICAgICAgICAgIHNiX3RpbWVfaW5mb1taX0lSX01BWF9JUl9TWU5DX0lORk9fQ0VMTFNdOw0KfVRfeklSX1NCX0lORk9fVEFCTEUsVF96UFNfSVJfU0JfSU5GT19UQUJMRTsNCi8qDQoqKiBTdHJ1Y3R1cmUgd2hpY2ggcHJvdmlkZXMgYWxsIHN5bmMgaW5mbyBvbiBlYWNoIEdTTSBjZWxsLCANCioqIG5lY2Nlc3NhcnkgZm9yIEJTSUMgcmVhZC92ZXJpZmljYXRpb24uIA0KKi8NCnR5cGVkZWYgc3RydWN0DQp7DQogIFRfUkFESU9fRlJFUV9OTyAgICAgICBhcmZjbjsNCiAgVF9JUl9HU01fU1lOQ19TVEFUVVMgIHN0YXR1czsNCiAgVF9JUl9URE1BX1RJTUVfSU5GTyAgIHRpbWluZzsNCiAgV09SRCAgICAgICAgICAgICAgICBpbnZhbGlkX3RpbWVfcmVtYWluaW5nOw0KfSBUX0lSX0NFTExfU1lOQ19EQVRBOw0KDQp0eXBlZGVmIFRfSVJfQ0VMTF9TWU5DX0RBVEEgVF96SVJfQ0VMTF9TWU5DX0RBVEE7DQp0eXBlZGVmIFRfeklSX0NFTExfU1lOQ19EQVRBIFRfelBTX0lSX0NFTExfU1lOQ19EQVRBOw0KDQovKg0KKiogQXJyYXkgb2YgdGhlIHN5bmMgZGF0YSBmb3IgYWxsIHJlcG9ydGVkIGNlbGxzIA0KKi8NCnR5cGVkZWYgc3RydWN0DQp7DQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9mX2NlbGxzOw0KICAgIFRfeklSX0NFTExfU1lOQ19EQVRBICAgICAgICAgICAgIHN5bmNfZGF0YVtaX0lSX01BWF9JUl9TWU5DX0lORk9fQ0VMTFNdOw0KfSBUX3pJUl9DRUxMX1NZTkNfUVVFUllfREFUQSxUX3pQU19JUl9DRUxMX1NZTkNfUVVFUllfREFUQTsNCg0KLyogU3RydWN0dXJlIGlzIHVzZWQgdG8gY29tYmluZSBzb21lIHBhcmFtZXRlcnMuKi8NCnR5cGVkZWYgc3RydWN0DQp7DQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtUmVtYWluaW5nR2FwczsgLypzYW1lIGFzIGluIHN0cnVjdCBoY2lHc21JbmFjdGl2ZVRpbWVSZXFfdCovDQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUHJpb01vZGU7IC8qc2FtZSBhcyBpbiBzdHJ1Y3QgaGNpR3NtSW5hY3RpdmVUaW1lUmVxX3QqLyAgIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJUeXBlOyAvKnNhbWUgYXMgaW4gc3RydWN0IGhjaUdzbUluYWN0aXZlVGltZVJlcV90Ki8gICANCn0gVF96SVJfQ0xVU1RFUl9JTkZPLFRfelBTX0lSX0NMVVNURVJfSU5GTzsNCg0KLy90eXBlZGVmIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfUkFESU9fRlJFUV9OTzsNCi8vdHlwZWRlZiBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX1JYTEVWOw0KLy90eXBlZGVmIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfQlNJQzsNCi8vdHlwZWRlZiBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX0wxX1FCSVRTOw0KLy90eXBlZGVmIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfTDFfSFlQRVJfRlJBTUVfTk87DQoNCnR5cGVkZWYgc3RydWN0DQp7DQogIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZmNuOyAgICAgICAgICAgICAvKkNvbW5lb27W0MDg0M22qNLlzqpUX1JBRElPX0ZSRVFfTk8qLw0KICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeGxldl9hdmdyOyAgICAgICAgLypDb21uZW9u1tDA4NDNtqjS5c6qVF9SWExFViovDQogIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJzaWM7ICAgICAgICAgICAgICAvKkNvbW5lb27W0MDg0M22qNLlzqpUX0JTSUMqLw0KICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYW5kOyAgICAgICAgICAgICAgLyogVF9HU01fQkFORCBub3QgdXNlZCB0byBzYXZlIFJBTSAqLw0KICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBud2luX2lkeDsNCiAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nX29mZnNldDsgICAgIC8qQ29tbmVvbtbQwODQzbao0uXOqlRfTDFfUUJJVFMqLw0KICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbl9vZmZzZXQ7ICAgICAgICAgLypDb21uZW9u1tDA4NDNtqjS5c6qVF9MMV9IWVBFUl9GUkFNRV9OTyovDQp9VF96SVJfTURPX05DRUxMX0VMRU0sVF96UFNfSVJfTURPX05DRUxMX0VMRU07DQoNCnR5cGVkZWYgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pJUl9NRE9fUFVSUE9TRTsgIA0KdHlwZWRlZiBUX3pJUl9NRE9fUFVSUE9TRSAgICAgICAgICAgICAgIFRfelBTX0lSX01ET19QVVJQT1NFOyAgDQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAgICAgIEwxVNPrTDFHubLTw73hubm2qNLlo6i8zLPQ19RDb21uZW9utPrC66OpDQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBsMXVfbWRiLmgsIGJlZ2luID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCnR5cGVkZWYgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pJUl9DRUxMX0xJU1RfSUQ7DQp0eXBlZGVmIFRfeklSX0NFTExfTElTVF9JRCAgICAgICAgICAgICAgVF96UFNfSVJfQ0VMTF9MSVNUX0lEOw0KdHlwZWRlZiBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfeklSX1VUUkFOX0lSQVRfTUVBUzsNCnR5cGVkZWYgVF96SVJfVVRSQU5fSVJBVF9NRUFTICAgICAgICAgICBUX3pQU19JUl9VVFJBTl9JUkFUX01FQVM7DQp0eXBlZGVmIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF96SVJfTURPX0dBUF9NT0RFUzsNCnR5cGVkZWYgVF96SVJfTURPX0dBUF9NT0RFUyAgICAgICAgICAgICBUX3pQU19JUl9NRE9fR0FQX01PREVTOw0KdHlwZWRlZiBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfeklSX1VUUkFOX01FQVNfU1RBVEU7DQp0eXBlZGVmIFRfeklSX1VUUkFOX01FQVNfU1RBVEUgICAgICAgICAgVF96UFNfSVJfVVRSQU5fTUVBU19TVEFURTsNCg0KdHlwZWRlZiBzdHJ1Y3QgDQp7DQogICAgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNjcDsNCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2ZfcmVzdWx0czsNCn0gVF96SVJfTURCX1VUUkFOX0NFTExfTUVBU19CVUZGRVIsVF96UFNfSVJfTURCX1VUUkFOX0NFTExfTUVBU19CVUZGRVI7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y2VsbF9wYXJhbTsNCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZlcnNpdHk7DQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY19jYXNlX3RzdGQ7DQp9IFRfeklSX1VUUkFOX0NFTExfT05fRlJFUSxUX3pQU19JUl9VVFJBTl9DRUxMX09OX0ZSRVE7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICBUX3pJUl9VVFJBTl9DRUxMX09OX0ZSRVEgICAgICAgICBBW1pfSVJfTk9GX1VUUkFOX0NFTExTX1BFUl9GUkVRVUVOQ1ldOw0KfSBUX3pJUl9VVFJBTl9DRUxMX0ZJRUxELFRfelBTX0lSX1VUUkFOX0NFTExfRklFTEQ7DQoNCnR5cGVkZWYgc3RydWN0IA0Kew0KICAgIFRfeklSX01EQl9VVFJBTl9DRUxMX01FQVNfQlVGRkVSICAgbWVhc3VyZW1lbnRbWl9JUl9OT0ZfVVRSQU5fQ0VMTFNfUEVSX0ZSRVFVRU5DWV07DQp9IFRfeklSX01EQl9OQ0VMTF9NRUFTX1BFUklPRF9EQVRBX1NFVCwgKiBUX3pJUl9NREJfTkNFTExfTUVBU19QRVJJT0RfREFUQV9TRVRfUFRSLA0KVF96UFNfSVJfTURCX05DRUxMX01FQVNfUEVSSU9EX0RBVEFfU0VULCAqIFRfelBTX0lSX01EQl9OQ0VMTF9NRUFTX1BFUklPRF9EQVRBX1NFVF9QVFI7DQoNCnR5cGVkZWYgc3RydWN0IA0Kew0KICAgIENIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzY3A7IC8qQ29tZW5vbjogY2hhcii9rbroKSovDQp9IFRfeklSX01EQl9NRUFTX0VMRU1FTlQsVF96UFNfSVJfTURCX01FQVNfRUxFTUVOVDsNCg0KdHlwZWRlZiBzdHJ1Y3QgDQp7DQogICAgVF96SVJfTURCX01FQVNfRUxFTUVOVCAgICAgICAgICAgbWVhc3VyZW1lbnRbWl9JUl9OT0ZfVVRSQU5fQ0VMTFNfUEVSX0ZSRVFVRU5DWV07DQp9IFRfeklSX01EQl9VVFJBTl9OQ0VMTF9NRUFTX1JFU1VMVF9TRVQsICpUX3pJUl9NREJfVVRSQU5fTkNFTExfTUVBU19SRVNVTFRfU0VUX1BUUiwNClRfelBTX0lSX01EQl9VVFJBTl9OQ0VMTF9NRUFTX1JFU1VMVF9TRVQsICpUX3pQU19JUl9NREJfVVRSQU5fTkNFTExfTUVBU19SRVNVTFRfU0VUX1BUUjsNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Ow0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbF91YXJmY247IC8qQ29tbmVvbjogdW5zaWduZWQgc2hvcnQova266CkqLw0KICAgIFRfeklSX1VUUkFOX0NFTExfRklFTEQgICAgICAgICAgIHV0cmFuX2NlbGw7DQp9VF96SVJfTURCX0NFTExfTElTVF9EQVRBX1NFVCwgKlRfeklSX01EQl9DRUxMX0xJU1RfREFUQV9TRVRfUFRSLA0KVF96UFNfSVJfTURCX0NFTExfTElTVF9EQVRBX1NFVCwgKlRfelBTX0lSX01EQl9DRUxMX0xJU1RfREFUQV9TRVRfUFRSOw0KDQp0eXBlZGVmIHN0cnVjdCANCnsNCiAgICBUX3pJUl9NREJfQ0VMTF9MSVNUX0RBVEFfU0VUX1BUUiAgICAgICAgICAgICAgICAgcF9jZWxsX2xpc3Q7DQogICAgVF96SVJfTURCX05DRUxMX01FQVNfUEVSSU9EX0RBVEFfU0VUX1BUUiAgICAgICAgIHBfcGVyaW9kOw0KICAgIFRfeklSX01EQl9VVFJBTl9OQ0VMTF9NRUFTX1JFU1VMVF9TRVRfUFRSICAgICAgICBwX2F2ZzsNCn0gVF96SVJfTURCX05DRUxMX0xJU1RfREFUQV9TRVQsVF96UFNfSVJfTURCX05DRUxMX0xJU1RfREFUQV9TRVQ7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbF91YXJmY247IC8qQ29tbmVvbjogdW5zaWduZWQgc2hvcnQova266CkqLw0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZl9uY2VsbDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dHJhbl9jZWxsW1pfSVJfTk9GX1VUUkFOX0NFTExTX1BFUl9GUkVRVUVOQ1ldOw0KfSBUX3pJUl9JUkFUX1VUUkFOX0NFTExTX1BFUl9GUkVRLFRfelBTX0lSX0lSQVRfVVRSQU5fQ0VMTFNfUEVSX0ZSRVE7ICAgICAgDQoNCnR5cGVkZWYgc3RydWN0IA0KeyAgIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXNfcmVmZXJlbmNlOyAvKkNvbW5lb246IGJ5dGUova266CkqLw0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsgICAgICAgICAvKkNvbW5lb246IGJ5dGUova266CkqLw0KICAgICNpZm5kZWYgTVVMVElfSVJBVF8yOTYzDQoJRFdPUkQJCQkgICAgICAgICAgICAgICAgICAgIGR3VG1lYXNJbmlhbDsvKrP1yryy4sG/1tzG2m1zo6zQ6NKqsuLBv7XExrW147a8y9HL97rzo6y0y9bcxtqx5M6qzt7QpyAqLyAgICAgICAgICAgIA0KICAgIFdPUkQJCSAgICAgICAgICAgICAgICAgICAgICAgIHdUbWVhczsvKtX9s6PJz7Go1tzG2iovDQoJI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICBUX3pJUl9JUkFUX1VUUkFOX0NFTExTX1BFUl9GUkVRICBBW1pfSVJfTk9GX0NFTExfTElTVF9GUkVRVUVOQ0lFU107DQp9VF96SVJfTDFHX1RkZENlbGxNZWFzUmVxLFRfelBTX0lSX0wxR19UZGRDZWxsTWVhc1JlcTsNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjY2NoX3ByZXNlbnQ7DQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTNnX2JhX2luZDsNCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2kzX2NoYW5nZV9tYXJrOw0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtb19pbmQ7DQp9IFRfeklSX1JSXzNHX0xJU1RfSUQsVF96UFNfSVJfUlJfM0dfTElTVF9JRDsNCg0KdHlwZWRlZiBzdHJ1Y3R7ICANCiAgICBUX3pJUl9SUl8zR19MSVNUX0lEICAgICAgICAgICAgICBpZF9zZXRbMl07ICANCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9pbmRleDsgIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfaW5kZXg7DQp9IFRfeklSX1UzR19MSVNUX0lEX0JVRkZFUixUX3pQU19JUl9VM0dfTElTVF9JRF9CVUZGRVI7DQoNCnR5cGVkZWYgc3RydWN0eyANCiAgICAvKiBmbGFnIGluZGljYXRpbmcgaWYgbmNlbGwgbWVhc3VyZW1lbnRzIG9uIGEgcGFydGljdWxhciBmcmVxdWVuY3kgYXJlIGVuYWJsZWQgKi8gIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXFfZW5hYmxlZDsNCiAgICAvKiBiYWNrdXAgb2YgZnJlcV9lbmFibGVkIGZsYWcsIG5lZWRlZCBmb3Igc3VzcGVuZCBtb2RlICovIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cF9mcmVxX2VuYWJsZWQ7IA0KICAgIC8qIGluZGljYXRlcyB0aGF0IGEgcmVwb3J0IGNhbiBiZSBjcmVhdGVkICovICANCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2VsbF9tZWFzX2NvbXBsZXRlOyAgDQogICAgLyogaW5kaWNhdGVzIGZvciB3aGljaCBjZWxscyB0aGVyZSBhcmUgcmVjZW50IHJlc3VsdHMgZnJvbSBIVyAqLyAgDQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZWRfY2VsbHM7DQp9IFRfeklSX1VUUkFOX05DRUxMX0lORk8sVF96UFNfSVJfVVRSQU5fTkNFTExfSU5GTzsNCg0KdHlwZWRlZiBzdHJ1Y3R7ICANCiAgICAvKiBpbmRpY2F0ZXMgdGhhdCBtZWFzdXJlbWVudHMgY2FuIGJlIHN0YXJ0ZWQgYmVjYXVzZSBxc2VhcmNoIHRocmVzaG9sZCBjb25kaXRpb24gaXMgZnVsZmlsbGVkICovIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFzZWFyY2hfc3RhcnRfbWVhczsgIA0KICAgIC8qIGluZGljYXRlcyB0aGUgUlhMRVYgdGhyZXNob2xkIHZhbHVlIGZvciB0aGUgc3RhcnQgb2YgVU1UUyBtZWFzdXJlbWVudHMgICAqKiBpbiBpZGxlIG9yIHBhY2tldCB0cmFuc2ZlciBtb2RlICovICANCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxc2VhcmNoX2lwOyAgDQogICAgLyogaW5kaWNhdGVzIHRoZSBSWExFViB0aHJlc2hvbGQgdmFsdWUgZm9yIHRoZSBzdGFydCBvZiBVTVRTIG1lYXN1cmVtZW50cyBjb25uZWN0ZWQgbW9kZSAqLyAgDQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXNlYXJjaF9jOyAgDQogICAgLyogSW5kaWNhdGVzIHRoZSBRc2VhcmNoIHZhbHVlIHRvIGJlIHVzZWQgaW4gY29ubmVjdGVkIG1vZGUgYmVmb3JlIFFzZWFyY2hfQyBpcyByZWNlaXZlZCAqLyAgDQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXNlYXJjaF9jX2luaXRpYWw7IA0KICAgIC8qIGluZGljYXRlcyBpZiAzRyBjZWxscyBtYXkgYmUgc2VhcmNoZWQgd2hlbiBCU0lDIGRlY29kaW5nIGlzIHJlcXVpcmVkICovICANCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hfcHJpbzsgDQogICAgLyogM0dfTElTVF9JRCBwYXJhbWV0ZXJzIHNlbnQgYnkgUlIgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZWFzdXJlbWVudCByZXF1ZXN0IG1lc3NhZ2UgKi8gIA0KICAgIFRfeklSX1UzR19MSVNUX0lEX0JVRkZFUiAgICAgICAgIHUzZ19saXN0X2lkOw0KfSBUX3pJUl9DRUxMX1BBUkFNUyxUX3pQU19JUl9DRUxMX1BBUkFNUzsNCg0KdHlwZWRlZiBzdHJ1Y3R7ICANCiAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIG5ldyBtZWFzdXJlbWVudCByZXF1ZXN0IGZyb20gUlIgaGFzIGFycml2ZWQgKi8gIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19tZWFzX3JlcTsgDQogICAgLyogaW5kaWNhdGVzIGEgbmV3IHNldCBvZiBoZWFkZXIgcGFyYW1zIG9mIHRoZSB0eXBlIFRfUlJfM0dfTElTVF9JRCBmb3IgYSBuZXcgbWVhcyByZXEgKi8gIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJyXzNnX2lkX2NoYW5nZWQ7ICANCiAgICAvKiBpbmRpY2F0ZXMgdGhlIG92ZXJhbGwgb24vb2ZmIHN0YXRlIG9mIHRoZSBJbnRlci1SQVQgbWVhc3VyZW1lbnRzICovICANCiAgICBUX3pJUl9VVFJBTl9NRUFTX1NUQVRFICAgICAgICAgICB1dHJhbl9zdGF0ZTsgIA0KICAgIC8qIFBhcmFtZXRlcnMgdG8gY29vcmRpbmF0ZSBHU00gdGFza3MgYW5kIFVNVFMgbWVhc3VyZW1lbnRzICovICANCiAgICBUX3pJUl9DRUxMX1BBUkFNUyAgICAgICAgICAgICAgICBjZWxsX3BhcmFtczsgIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZF8zZ19uZXR3b3JrczsNCiAgICAvKiBjb250cm9sIGRhdGEgZm9yIG5jZWxsIHJlc3VsdCBwcm9jZXNzaW5nICovICANCiAgICBUX3pJUl9VVFJBTl9OQ0VMTF9JTkZPICAgICAgICAgICBuY2VsbF9pbmZvW1pfSVJfTk9GX0NFTExfTElTVF9GUkVRVUVOQ0lFU107DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJmY247ICANCiAgICAvKiBpbmRpY2F0ZXMgdGhhdCBtZWFzdXJlbWVudCByZXF1ZXN0IGRhdGEgd2VyZSBzZW50IGVpdGhlciB0aHJvdWdoIE1QSF9VUERBVEVfREVEX1BBUkFNX1JFUSAgKiogb3IgTVBIX1NUQVJUX05DX01FQVNfUkVROyBmbGFnIGlzIG5lZWRlZCBpbiB0aGUgcmVzdWx0IGhhbmRsZXIgKi8gIA0KICAgIFRfeklSX1VUUkFOX0lSQVRfTUVBUyAgICAgICAgICAgIG1lYXNfbW9kZTsgIA0KICAgIC8qIGluZGljYXRlcyB0aGF0IGFuIHVwZGF0ZSAoZGVsdGEpIG9mIHRoZSBjdXJyZW50IG1lYXN1cmVtZW50IHJlcXVlc3QgaXMgcGVuZGluZy4gVGhpcyBtYXkgICoqIGhhcHBlbiBvbmx5IGluIERDSCBtb2RlLiAqLyAgDQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNoX21lYXNfZGVsdGFfcGVuZGluZzsgIC8qIGluZGljYXRlcyB0aGF0IGEgbmV3IG1lYXN1cmVtZW50IHJlcXVlc3QgY2FtZSBpbiB3aGlsZSBJbnRlcnJhdCBtZWFzdXJlbWVudHMgYXJlIHN1c3BlbmRlZCAqLyAgDQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRiX2JhY2t1cF9vYnNvbGV0ZTsgIC8qIG1lYXN1cmVtZW50IElEIHRoYXQgaW5kZW50aWZpZXMgYSBtZWFzdXJlbWVudCByZXF1ZXN0IG9uIFNETCBhbmQgSFcgbGV2ZWwgKi8gIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXNfcmVmZXJlbmNlOw0KI2lmIGRlZmluZWQgKFNJTkdMRV9BTlRFTk5BX1NVUFBPUlQpICAvKiBjb3VudGVyIGZvciBzZWFyY2ggZnJhbWVzLCBtdWx0aXBsZSBvZiBTRUFSQ0hfRlJBTUVTX0ZPUl9JUkFUICovICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZnIyNl9jbnQ7ICAvKiBjb3VudGVyIGZvciBzZWFyY2ggZnJhbWVzIHdoaWNoIHdlcmUgdXNlZCBmb3IgaVJBVCwgbXVsdGlwbGUgb2YgUEVSSU9EX0ZPUl9JUkFUICovICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZnIyNl90YWtlbl9mb3JfaXJhdF9jbnQ7ICAvKiBjb3VudGVyIGZvciBzZWFyY2ggZnJhbWVzIGluc2lkZSBhIGNsdXN0ZXIsIDAgbm8gaVJBVCBhdCB0aGUgbW9tZW50ICovICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZnIyNl9jbHVzdGVyX2Zvcl9pcmF0X2NudDsgICAgLyogc3VtIG9mIGNvbm5lY3RlZCBzZWFyY2ggZnJhbWVzIGZvciBpUkFUIG1lYXN1cmVtZW50ICovICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZnIyNl9jbHVzdGVyX3NpemVfZm9yX2lyYXQ7ICAgIC8qIGNsdXN0ZXIgbW9kZSAqLyAgDQogICAgVF96SVJfTURPX0dBUF9NT0RFUyAgICAgICAgICAgICAgbWZyMjZfY2x1c3Rlcl9tb2RlOyAgLyogU2NoZWR1bGluZyBpbmRleCBmb3IgY2FsY3VsYXRpbmcgcHJpb3JpdHkgZm9yIElSQVQgbWVhc3VyZW1lbnQgKi8gIA0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkX2lkeDsNCiNlbmRpZiAvKiAoU0lOR0xFX0FOVEVOTkFfU1VQUE9SVCkgKi8gIA0KfSBUX3pJUl9VVFJBTl9DVFJMX0RBVEEsVF96UFNfSVJfVVRSQU5fQ1RSTF9EQVRBOw0KDQp0eXBlZGVmIHN0cnVjdCAgew0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJVY2VsbF9wYXJhbTsNCiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiUnNjcDsNCn0gVF96SVJfVXRyYW5NZWFzQ2VsbHNSZXN1bHRzLFRfelBTX0lSX1V0cmFuTWVhc0NlbGxzUmVzdWx0czsNCg0KdHlwZWRlZiBzdHJ1Y3QgIHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VWFyZmNuOw0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3TWVhc3VyZWRfY2VsbHM7DQogICAgVF96SVJfVXRyYW5NZWFzQ2VsbHNSZXN1bHRzICAgICAgYXRDZWxsUmx0W1pfSVJfTk9GX1VUUkFOX0NFTExTX1BFUl9GUkVRVUVOQ1ldOw0KfSBUX3pJUl9JcmF0VW1jck1lYXNSZXN1bHQsVF96UFNfSVJfSXJhdFVtY3JNZWFzUmVzdWx0Ow0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxfdWFyZmNuOw0KICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsNCiAgICBUX3pJUl9VVFJBTl9DRUxMX0ZJRUxEICAgICAgICAgICB1dHJhbl9jZWxsOw0KfSBUX3pJUl9VVFJBTl9DRUxMU19QRVJfRlJFUSxUX3pQU19JUl9VVFJBTl9DRUxMU19QRVJfRlJFUTsNCg0KDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgICAgICBDQlPT60wxR8/7z6K94bm5tqjS5Q0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gbXMuaCwgYmVnaW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KINSt0++jukwxTU5fQ0JDSF9EQVRBX0lORChMMUctPkNCUykNCiDLtcP3OiBMMUfJz7GotcQyM9fWvdq1xM7ez9+/6Q0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8gDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJCdWZbMjNdOw0KfSBUX3pDYnNfTDFNTl9DQkNIX0RBVEFfSU5EOyAvKiBjb21lIGZyb20gY29tbW5lb24geVBEZWZfTDFNTl9DQkNIX0RBVEFfSU5EICovDQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQog1K3T76O6TDFNTl9DQkNIX1NUQVJUX1JFUShDQlMtPkwxRykNCiDLtcP3OiBDQlPNqNaqTDFHxvS2r0NCU73TytUsIL/Vz/vPog0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8gDQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQog1K3T76O6TDFNTl9DQkNIX1NUT1BfUkVRKChDQlMtPkwxRykNCiDLtcP3OiBDQlPNqNaqTDFHzaPWuUNCU73TytUsIL/Vz/vPog0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8gDQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQog1K3T76O6TDFNTl9DQkNIX1NLSVBfUkVRKChDQlMtPkwxRykNCiDLtcP3OiBDQlPP8kwxR7eiy81Ta2lw0rPD5sfrx/MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovIA0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWdlTm87DQp9IFRfekNic19MMU1OX0NCQ0hfU0tJUF9SRVE7IC8qIGNvbWUgZnJvbSBjb21tbmVvbiB5UERlZl9MMU1OX0NCQ0hfU0tJUF9SRVEgKi8NCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gbXMuaCwgZW5kID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgIEwxVC0+TDFHDQogICAguabE3DoNCiAgICAgICAgICAgICAgIEwxVM/yTDFHIMfrx/PJ5Ma118rUtCwNCiAgICDP+8+ivLC94bm5OiAgICAgIFpfTDFfVGRHZXRSZkZyb21Hc21fUmVxo6hTREzP+8+io7pMMVRfREVBQ1RfR1NNX1JFUV9FVqOpDQogICAgICAgICAgICAgICAgICBOVUxMDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICBMMUctPkwxVA0KICAgILmmxNw6DQogICAgICAgICAgICAgICBMMUfP8kwxVLvYuLTJ5Ma118rUtMjDs/bIt8jPDQogICAgz/vPorywveG5uTogICAgICBaX0wxX1RkR2V0UmZGcm9tR3NtX0NuZqOoU0RMz/vPoqO6TDFUX0RFQUNUX0dTTV9DTkZfRVajqQ0KICAgICAgICAgICAgICAgICAgTlVMTA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICBMMUUtPkwxRw0KICAgILmmxNw6DQogICAgICAgICAgICAgICAgTDFFz/JMMUfH68fzyeTGtdfK1LQNCiAgICDP+8+ivLC94bm5OiAgICAgIFpfTDFfTHRlR2V0UmZGcm9tR3NtX1JlcaOoU0RMz/vPoqO6TDFFX0RFQUNUX0dTTV9SRVFfRVajqQ0KICAgICAgICAgICAgICAgICAgTlVMTA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgIEwxRy0+TDFFDQogICAguabE3DoNCiAgICAgICAgICAgICAgIEwxR8/yTDFFu9i4tMnkxrXXytS0yMOz9si3yM8NCiAgICDP+8+ivLC94bm5OiAgICAgIFpfTDFfTHRlR2V0UmZGcm9tR3NtX0NuZqOoU0RMz/vPoqO6TDFFX0RFQUNUX0dTTV9DTkZfRVajqQ0KICAgICAgICAgICAgICAgICAgTlVMTA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgTDFHLT5MMVQNCiAgICC5psTcOg0KICAgICAgICAgICAgICAgTDFHz/JMMVTH68fzyeTGtdfK1LQNCiAgICDP+8+ivLC94bm5OiAgICAgIFpfTDFfR3NtR2V0UmZGcm9tVGRfUmVxo6hTREzP+8+io7pMMUdfREVBQ1RfVU1UU19SRVFfRVajqQ0KICAgICAgICAgICAgICAgICAgTlVMTA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgTDFULT5MMUcNCiAgICC5psTcOg0KICAgICAgICAgICAgICAgTDFUz/JMMUe72Li0yeTGtdfK1LTIw7P2yLfIzw0KICAgIM/7z6K8sL3hubk6ICAgICAgWl9MMV9Hc21HZXRSZkZyb21UZF9DbmajqFNETM/7z6KjukwxR19ERUFDVF9VTVRTX0NORl9FVqOpDQogICAgICAgICAgICAgICAgICBOVUxMDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgIEwxRy0+TDFFDQogICAguabE3DoNCiAgICAgICAgICAgICAgIEwxR8/yTDFFx+vH88nkxrXXytS0DQogICAgz/vPorywveG5uTogICAgICBaX0wxX0dzbUdldFJmRnJvbUx0ZV9SZXGjqFNETM/7z6KjukwxR19ERUFDVF9MVEVfUkVRX0VWo6kNCiAgICAgICAgICAgICAgICAgIE5VTEwNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgTDFFLT5MMUcNCiAgICC5psTcOg0KICAgICAgICAgICAgIEwxRSDP8kwxR7vYuLTJ5Ma118rUtMjDs/bIt8jPDQogICAgz/vPorywveG5uTogICAgICBaX0wxX0dzbUdldFJmRnJvbUx0ZV9DbmajqFNETM/7z6KjukwxR19ERUFDVF9MVEVfQ05GX0VWo6kNCiAgICAgICAgICAgICAgICAgIE5VTEwNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIEwxRTwtPkwxVA0KICAgILmmxNw6DQogICAgICAgICAgICAgICAgVETOqtb3yrEgTDFFz/JMMVQgIMfrx/PJ5Ma118rUtLvyTFRFzqrW98qxIEwxVM/yTDFFICDH68fzyeTGtdfK1LQNCiAgICDP+8+ivLC94bm5OiAgICAgWl9MMV9HZXRSRl9SZXENCiAgICAgICAgICAgICAgICAgIE5VTEwNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgIEwxVDwtPkwxRQ0KICAgILmmxNw6DQogICAgICAgICAgICAgIFREzqrW98qxIEwxVM/yTDFFILvYuLTIw7P218rUtMi3yM+78kxURc6q1vfKsSBMMUXP8kwxVLvYuLTIw7P218rUtMi3yM8NCiAgICDP+8+ivLC94bm5OiAgICAgIFpfTDFfR2V0UkZfQ25mDQogICAgICAgICAgICAgICAgICBOVUxMDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKkwxRyxMMVQ8LT5FUEhZvdO/2iovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgt73P8jpMMUcsTDFULT5FUEhZDQogICAguabE3DpMVEXOqrioxKPKvbXEyrG68qOsTDFHLEwxVMXk1sNMVEXO78DtsuOy4sG/oaMNCiAgICAgICAgICAgICC21NPaTFRFzu/A7bLjwLTLtb/JxNzPyMrVtb2y4sG/vLBtZWFzbWFzayy688rVtb1HQVCjrA0KICAgICAgICAgICAgINKyv8nE3M/IytW1vUdBUCy688rVtb2y4sG/wdCx7aGjyOe5+8/IytW1vcHQse26887vwO0NCiAgICAgICAgICAgICCy47K7u+Gy4sG/1rG1vcrVtb1HQVCyxbvhsuLBv6OsyOe5+8/IytW1vUdBUNKysru74bLiDQogICAgICAgICAgICAgwb/WsbW909Cy4sG/wdCx7cXk1sPPwsC0CQkJCSANCiAgICDP+8+iOkxURV9QX0ZSRVFfTElTVF9DT05GSUdfUkVRX0VWDQogICAgveG5uTpUX3pMVEVfUF9GcmVxTGlzdENvbmZpZ1JlcQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdTdGFydFBDSTsgLyrG8Mq8tcTO78Dt0KHH+ElELDB+NTAzKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3UmFuZ2U7ICAgIC8qsPzAqHdTdGFydFBDSda4tqjQocf41NrE2rXE0KHH+Lj2yv0u0KHH+NLAtM7OqndTdGFydFBDSSx3U3RhcnRQQ0krMSwuLi4uLHdTdGFydFBDSSt3UmFuZ2UtMSovDQp9VF96TFRFX1BfQmxhY2tDZWxsOw0KDQp0eXBlZGVmIHN0cnVjdCANCnsgDQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgZHdFYXJmY247DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgd01lYXNCYW5kV2lkdGg7IA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdCbGFja0NlbGxSYW5nZU51bTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3SGlnaFByaW9JbmQ7LyrI57n7tMtMVEXGtbXjzqq439PFz8i8tqOs1PLWwzGjrLfx1PLOqjAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KICAgIFRfekxURV9QX0JsYWNrQ2VsbCAgICAgIGF0QmxhY2tDZWxsc1sxNl07DQp9VF96TFRFX1BfRnJlcUluZm87ICANCg0KDQp0eXBlZGVmIHN0cnVjdCANCnsgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgICAvKg0KICAgIGJSZXBvcnRRdWFudGl0eToJyKHWtbe2zqejujCjrDGjrDINCiAgICAwOiDWu7LiUlNSUA0KICAgIDE6INa7suJSU1JRLA0KICAgIDI6IFJTUlC6zVJTUlHBvbj2tryy4g0KKi8gDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgd1JlcG9ydFF1YW50aXR5Ow0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgIHdNYXhDZWxsUmVwUGVyRnJlcTsNCgkgICAgLyoNCiAgICCxu7LitcTGtbXjuPbK/aGjuPm+3cS/x7BMVEXO78DtsuO1xLLiwb/E3MGm1+624Nans9Y0uPbGtbXjoaMNCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgIHdGcmVxTnVtOw0KICAgIC8qDQogICAgsuLBv7bUz/O1xNDFz6LB0LHto6i6rM2sxrW6zdLsxrWjqSwg1KrL2DC5zLaozqppbnRyYca1teO1xLLOyv2hozF+M86qaW50ZXLGtbXjss7K/Q0KCSovDQogICAgVF96TFRFX1BfRnJlcUluZm8gICAgICAgICBhdEZyZXFJbmZvTGlzdFs4XTsNCn1UX3pMVEVfUF9GcmVxTGlzdENvbmZpZ19SZXE7DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgILe9z/I6TDFHLEwxVC0+RVBIWQ0KICAgILmmxNw6TDFULGwxR82ouf1NYXNrzajWqkxURc7vwO2y48b0tq/P4NOmxrW147Liwb+jrLKixvTTw9DCtcSy4sG/1tzG2iAgIA0KICAgIM/7z6I6TFRFX1BfSVJBVF9NRUFTX0NPTkZJR19SRVFfRXYNCiAgICC94bm5OlRfekxURV9QX0lyYXRNZWFzQ29uZmlnUmVxDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdCANCnsgDQogICAgIFdPUkQgICAgICAgICAgICAgd01zZ0lkOw0KICAgICBXT1JEICAgICAgICAgICAgIHdDb25uZWN0U3RhdGVGbGc7LyrNqNaq1vfEo8q917TMrKOsML/Vz9DMrKOsMcGsvdPMrCovDQoJIC8qDQoJIMO/uPZiaXS21NOmbWVhc19mcmVxX2luZm/W0LXE0ru49sa1teOjrM7vwO2y49a7xvS2r7bU06a1xGJpdM67zqoxtcTGtbXjtcSy4sG/oaMNCgkgQml0brbU06ZUX3pMVEVfUF9JcmF0TWVhc0NvbmZpZ19SZXHW0LXEYXRNZWFzRnJlcUluZm9MaXN0W25do6xuo7owfjMNCgkgKi8NCiAgICAgV09SRCAgICAgICAgICAgICB3TWVhc0JpdE1hc2s7DQogICAgIC8qs/XL0bLiwb+687XEuvPQ+LLiwb+y4sG/1tzG2r75zqp3VG1lYXMstaXOu21zKi8NCiAgICAgV09SRCAgICAgICAgICAgICB3VG1lYXM7IA0KICAgIC8qtdrSu7TOsuLBv7XEsai45tbcxtqjrLWlzrttcyzI57n71tzG2sTazOHHsM3qs8m/ydLUzOHHsMnPsaijrA0KCdfus6Syu7Osuf2xqLjm1tzG2qGjyOe5+9K7uPbGtbXj1tjF5Mew0tG+rdf2uf2y4sG/o6zU8taxvdPTw9Pad1RtZWFztviyu8rHZHdUbWVhc0luaXRpYWwqLw0KICAgICBEV09SRCAgICAgICAgICAgZHdUbWVhc0luaXRpYWw7DQp9VF96TFRFX1BfSXJhdE1lYXNDb25maWdfUmVxOw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgILe9z/I6TDFHLEwxVC0+RVBIWQ0KICAgILmmxNw6TDFUx+vH887vwO2y482j1rnKudPD0tG+rbfWxeS1xEdBUC5MVEXO78DtsuPK1bW9uMPP+8+iwaK8tM2j1rm21NLRvq231sXktcRHQVC1xMq508OjrA0KICAgICAgICAgICAgIMihz/u689D4tfe2yKOs1NrX7r/stcTKsbzkxNrIw7P2yeTGtS5Ob3RlOrrNTFRFX1BfQUJPUlRfR0FQX0NORl9FdsXk1sPKudPDDQogICAgz/vPojpMVEVfUF9BQk9SVF9HQVBfUkVRX0V2DQogICAgveG5uTpUX3pMVEVfUF9BYm9ydEdhcFJlcQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3QgDQp7IA0KICAgIFdPUkQgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgd1BhZGRpbmc7DQp9IFRfekxURV9QX0Fib3J0R2FwX1JlcTsNCg0KDQovKiAgtuDEo73Tv9oqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgILe9z/I6TDFFLT5MMVQvTDFHDQogICAguabE3DpMVEXO78DtsuPJz7GosuLBv73hufssxuTW0LK7uqy62sP7taXW0LXE0KHH+A0KICAgIM/7z6I6TFRFX1BfSVJBVF9NRUFTX0lORF9FVg0KICAgIL3hubk6VF96TFRFX1BfSXJhdE1lYXNfSW5kDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKg0KRVBIWdK7uPbQocf4tcSy4sG/veG5+9DFz6INCiovDQp0eXBlZGVmIHN0cnVjdCANCnsgDQogICAgIFdPUkQgICAgICAgICAgICAgICAgIHdQaHlDZWxsSWQ7ICAgLy/Ioda1t7bOp6O6IDB+NTAzDQogICAgIFdPUkQgICAgICAgICAgICAgICAgIHdSc3JwOyAgICAgICAvL8ih1rW3ts6no7ogMH45Nw0KICAgICBXT1JEICAgICAgICAgICAgICAgICB3UnNycTsgICAgICAgLy/Ioda1t7bOp6O6IDB+MzQNCiAgICAgV09SRCAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQp9IFRfekxURV9QX01lYXNSZXN1bHQ7DQoNCi8qDQrSu7j2xrW147XEsuLBv73hufss08PT2tLsxrWy4sG/veG5+7XEyc+xqA0KKi8NCnR5cGVkZWYgc3RydWN0IA0KeyANCiAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICBkd1JlcG9ydEVhcmZjbjsgICAgICAgIC8vyKHWtbe2zqejuiAwfjI2MjE0Mw0KICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsTnVtOyAgICAgICAgIC8vyKHWtbe2zqejuiAwfjMyDQogICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQogICBUX3pMVEVfUF9NZWFzUmVzdWx0ICAgICAgICAgYXRSZXN1bHRMaXN0W1pfTFRFX1BfTUFYX0lSQVRfUkVQT1JUX0NFTExfUEVSX0ZSRVFdOw0KfSBUX3pMVEVfUF9GcmVxTWVhc1Jlc3VsdDsgDQoNCnR5cGVkZWYgc3RydWN0IA0KeyANCiAgICBXT1JEICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgIHdGcmVxTnVtOyAgICANCiAgICBUX3pMVEVfUF9GcmVxTWVhc1Jlc3VsdCAgYXRGcmVxUmVzdWx0TGlzdFs4XTsNCiAgICBXT1JEICAgICAgICAgICAgIHdScHRGbGc7IC8qMDrW3Mbayc+xqCAxOszhx7DJz7GoKi8NCiAgICBXT1JEICAgICAgICAgICAgIHdQYWRkaW5nOw0KfSBUX3pMVEVfUF9JcmF0TWVhc19JbmQ7DQoNCiNpZmRlZiBaX1NJTkdMRUFOVEVOTkENCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICC3vc/yOkwxRyxMMVQtPkVQSFkNCiAgICC5psTcOkxURc6quKi1xMqxuvKjrEwxR6OsTDFUuPhFUEhZt9bF5EdBUMqxvOQs1rTQ0EVQSFm1xMmoxrWhorLiwb+hos+1zbPP+8+itsHIobXIoaMNCiAgICDP+8+iOkxURV9QX0lSQVRfR0FQX0NPTkZJR19SRVFfRVYNCiAgICC94bm5OlRfekxURV9QX0lyYXRHYXBDb25maWdSZXENCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgIHdHYXBTdGFydFN1YmZyYW1lOy8qR2FwxvDKvM671sPX09ahusWjrNX7TXOyv7fWKi8NCiAgICBXT1JEICAgICAgICAgICAgICB3R2FwU3RhcnRTZm47ICAgICAvKkdhcMbwyrzOu9bDU0ZOusWjrNX7MTBNc7K/t9YqLw0KICAgIFdPUkQgICAgICAgICAgICAgIHdHYXBTdGFydFRzOyAgICAgIC8qR2FwxvDKvM671sMsVHOyv7fWKi8NCiAgICBXT1JEICAgICAgICAgICAgICB3R2FwTGVuZ3RoTXM7ICAgICAvKiBHQVCzpLbILLWlzrttcy4qLw0KICAgIFdPUkQgICAgICAgICAgICAgIHdHYXBMZW5ndGhUczsgICAgIC8qIEdBULOktsgsVFOyv7fWLtX7uPZHQVCzpLbIyrW8ysrHYkdhcExlbmd0aE1zK2JHYXBMZW5ndGhUcyovDQp9VF96TFRFX1BfSXJhdEdhcEluZm87DQoNCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdHYXBOdW07DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdHYXBHc21Db25uZWN0RmxnOy8qR1NNzqrW98SjyrHKudPDo6xMVEXO78DtsuPQ6NKqttRHU00gway908ysR0FQzrK21MbrserKtiovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KICAgIFRfekxURV9QX0lyYXRHYXBJbmZvICAgICAgIGF0SXJhdEdhcEluZm9bWl9MVEVfUF9JUkFUX01BWF9HQVBfTlVNXTsNCn1UX3pMVEVfUF9JcmF0R2FwQ29uZmlnX1JlcTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgt73P8jpMMUUtPkVQSFkNCiAgILmmxNw6TFRFzqrW99bGyr21sUwxRbeiz9bQ6NKquPjG5Mv71sbKvbfWxeRHQVDKsbzktcTKsbryo6xMMUXP8kVQSFnH68fzR0FQyc+xqA0KICAgz/vPojpMVEVfUF9JRExFX1BFUklPRF9SRVBfUkVRX0VWLg0KICAgveG5uTpUX3pMVEVfUF9JZGxlX1BlcmlvZFJlcF9SZXENCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0DQp7ICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgd01zZ0lkOyAgICANCiAgICBXT1JEICAgICAgICAgICAgIHdSZXBvcnRpbmdNb2RlOyAgICAvKjE6v6rG9EdBUMnPsagsIDA6zaPWuUdBUMnPsagqLw0KICAgIFdPUkQgICAgICAgICAgICAgd0Fuck1vZGU7ICAgICAgICAgLyowOrfHQU5SIEdBUMnPsagsIDE6IEFOUiBHQVDJz7GoKi8NCiAgICBXT1JEICAgICAgICAgICAgIHdQYWRkaW5nOw0KfSBUX3pMVEVfUF9HYXBSZXBvcnRDdHJsX1JlcTsNCiNlbHNlDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgt73P8jpMMUcsTDFULT5FUEhZDQogICAguabE3DpMVEXOqriotcTKsbryo6xMMUejrEwxVLj4RVBIWbfWxeRHQVDKsbzkLNa00NBFUEhZtcTJqMa1oaKy4sG/oaLPtc2zz/vPorbByKG1yKGjDQogICAgz/vPojpMVEVfUF9JUkFUX0dBUF9DT05GSUdfUkVRX0VWDQogICAgveG5uTpUX3pMVEVfUF9JcmF0R2FwQ29uZmlnUmVxDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgd0dhcFN0YXJ0U3ViZnJhbWU7LypHYXDG8Mq8zrvWw9fT1qG6xaOs1ftNc7K/t9YqLw0KICAgIFdPUkQgICAgICAgICAgICAgIHdHYXBTdGFydFNmbjsgICAgIC8qR2FwxvDKvM671sNTRk66xaOs1fsxME1zsr+31iovDQogICAgV09SRCAgICAgICAgICAgICAgd0dhcFN0YXJ0VHM7ICAgICAgLypHYXDG8Mq8zrvWwyxUc7K/t9YqLw0KICAgIFdPUkQgICAgICAgICAgICAgIHdHYXBMZW5ndGhNczsgICAgIC8qIEdBULOktsgstaXOu21zLiovDQogICAgV09SRCAgICAgICAgICAgICAgd0dhcExlbmd0aFRzOyAgICAgLyogR0FQs6S2yCxUU7K/t9Yu1fu49kdBULOktsjKtbzKysdiR2FwTGVuZ3RoTXMrYkdhcExlbmd0aFRzKi8NCiAgICBXT1JEICAgICAgICAgICAgICB3R2FwR3NtQ29ubmVjdEZsZzsvKkdTTc6q1vfEo8qxyrnTw6OsTFRFzu/A7bLj0OjSqrbUR1NNIMGsvdPMrEdBUM6yttTG67HqyrYqLw0KICAgIFdPUkQgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfekxURV9QX0lyYXRHYXBDb25maWdfUmVxOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICC3vc/yOkwxRS0+RVBIWQ0KICAguabE3DpMVEXOqtb31sbKvbWxTDFFt6LP1tDo0qq4+Mbky/vWxsq9t9bF5EdBUMqxvOS1xMqxuvKjrEwxRc/yRVBIWcfrx/NHQVDJz7GoDQogICDP+8+iOkxURV9QX0lETEVfUEVSSU9EX1JFUF9SRVFfRVYuDQogICC94bm5OlRfekxURV9QX0lkbGVfUGVyaW9kUmVwX1JlcQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3QNCnsgICAgDQogICAgV09SRCAgICAgICAgICAgICB3TXNnSWQ7ICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgd1JlcG9ydGluZ01vZGU7ICAgIC8qMTq/qsb0R0FQyc+xqCwgMDrNo9a5R0FQyc+xqCovDQp9IFRfekxURV9QX0lkbGVfUGVyaW9kUmVwX1JlcTsNCiNlbmRpZg0KLypFUEhZt6LLzbj4TDFHLEwxVLXEvdO/2rao0uUqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgILe9z/I6RVBIWS0+TDFULEwxRw0KICAgILmmxNw6TFRFzu/A7bLjytW1vUxURV9QX0FCT1JUX0dBUF9SRVFfRXbIw7P2yeTGtbrzoaO4+EwxVCxMMUe1xMi3yM8NCiAgICAgICAgICAgINei0uKjurbU09pHQVC1xMihz/u5psTc0+uy4sG/wdCx7cO709Cx2Mi7udjBqrnYz7WjrExURc7vwO2y49PQR0FQvs2y4sG/o6zDu0dBUL7Nsruy4sG/o6zA/cjno6xHQVDIoc/7DQogICAgICAgICAgICDSu7bOyrG85LrzTDFU1Nm0zsXk1sNHQVCjrMTHw7RMVEXO78DtsuPI1Mi7v8nS1LzM0Piy4sG/oaMJCQkJIA0KICAgIM/7z6I6TFRFX1BfQUJPUlRfR0FQX0NORl9Fdg0KICAgIL3hubk6TlVMTA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBUX3pQU19JUl9DTFVTVEVSX0lORk8gVF9MMU1EX0lSQVRfQ0xVU1RFUl9JTkZPOyAJIA0KDQp0eXBlZGVmIHN0cnVjdCAgDQp7DQogICAgQllURSBiVGFyZ2V0TW9kZTsNCiAgICBCWVRFIGJNYXN0ZXJGbGc7DQogICAgQllURSBiQ3Vyck1vZGU7DQp9VF96RnVuY19TZXRNb2RlX1JlcTsNCg0KLypHU03Qocf40MXPoiovDQp0eXBlZGVmIHN0cnVjdHsNCiBCWVRFICAgICAgICAgICAgICAgICAgICBiQ2VsbElkOyAgICAvKtChx/jE2rK/y/fS/SovICAgICAgICAgDQogQllURSAgICAgICAgICAgICAgICAgICAgYlBhZGRpbmc7DQogV09SRCAgICAgICAgICAgICAgICAgICAgd0FyZmNuOyAgICAgLyrGtbXjo6y12jE2scjM2KO9MbHtyr7OqjE5MDCyqLbOKi8gICAgIA0KfVRfekwxYV9Hc21DZWxsSW5mbzsNCg0KLypHU03Qocf4suLBv73hufsqLw0KdHlwZWRlZiBzdHJ1Y3Qgew0KIEJZVEUgICAgICAgICAgICAgICAgICAgIGJDZWxsSWQ7ICAgICAgICAgICANCiBCWVRFICAgICAgICAgICAgICAgICAgICBiQnNpYzsgICANCiBXT1JEICAgICAgICAgICAgICAgICAgICB3QXJmY247ICAgICAvKsa1teOjrLXaMTaxyMzYo70xse3Kvs6qMTkwMLKots4qLyAgICAgICAgICAgICAgICAgDQogQllURSAgICAgICAgICAgICAgICAgICAgYlJzc2k7ICAgICAgICAgICAgIA0KIEJZVEUgICAgICAgICAgICAgICAgICAgIGFiUGFkZGluZ1szXTsNCn1UX3pMMWFfR3NtQ2VsbE1lYXNSbHQ7ICANCg0KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICBQUy0+TDFHDQogICAgysK8/qO6TDFHX1JQSV9DRkdfUkVRX0VWDQogICAguabE3DoNCiAgICAgICAgxeTWw0dTTc/COLj2QkFORKOsw7+49kJBTkTPwlJQSbrNUFVNQVi1xNOzyeS52M+1o6zG5NbQUlBJt7bOpzB+Mg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCnR5cGVkZWYgc3RydWN0IA0KeyANCiAgICBUX3pCYW5kUnBpQ2ZnICAgICB0R3NtQmFuZFJwaUNmZ1taX0dTTV9SUElfU1VQUE9SVF9NQVhfQkFORF07DQp9VF96UFNfR1NNX1BfUnBpQ2ZnUmVxOw0KDQpleHRlcm4gRFdPUkQgeldfU2VuZE1zZ1RvcGh5KERXT1JEIGR3TXNnSWQsIFBCWVRFIHBiTXNnRGF0YSwgV09SRCB3TXNnTGVuKTsNCmV4dGVybiBEV09SRCB6THRlX1NlbmRNc2dUb0VwaHkoRFdPUkQgZHdNc2dJZCwgUEJZVEUgcGJNc2dEYXRhLCBXT1JEIHdNc2dMZW4pOw0KZXh0ZXJuIFZPSUQgekdzbV9TZW5kUnBpQ2ZnTXNnVG9MMWcgKFRfelBTX0dTTV9QX1JwaUNmZ1JlcSogcHRHc21ScGlDZmdSZXEsIEJZVEUgYkN1ckluc0lkeCk7DQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIMirvta6r8r91K3QzSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKtb3xKPKvcno1sO6r8r9DQogIGJUYXJnZXRSYXSjutDo0qq0psDttcTEv7Hq1sbKvaO6MUdTTaOsMlREo6wzTFRFo6w0Vw0KICBiTWFzdGVyRmxno7rKx7fxvavEv7Hq1sbKvcno1sPOqtb3xKPKvaOsWl9WQUxJRMrHo6xaX0lOVkFMSUS38SovDQpleHRlcm4gVk9JRCAgICB6U2V0TWFzdGVyTW9kZShCWVRFIGJUYXJnZXRSYXQsIEJZVEUgYk1hc3RlckZsZyk7DQoNCi8q1vfEo8q9sunRr7qvyv0NCiAgYlJhdKO6sb7Eo7/ptcTWxsq9KNans9ZBU7WlyrXA/curtP0pDQogILe1u9jWtaO6MMO709DW98Sjyr2jrDFHU03Oqtb3o6wyVETOqtb3o6wzTFRFzqrW96OsNFfOqtb3Ki8NCmV4dGVybiBCWVRFICAgIHpHZXRNYXN0ZXJNb2RlKEJZVEUgYlJhdCk7DQovKtb3xKPKvcno1sO6r8r9LL32uam1pbDlSUMgTDFHtffTwyovCQkJCQkJCQkgIA0KZXh0ZXJuIFZPSUQgICAgelNldElyYXRNYXN0ZXJNb2RlKEJZVEUgYlRhcmdldEFjdCwgQllURSBiSXNTZXRUYXJnZXRBY3RNYXN0ZXIpOw0KICAgICAvKmJUYXJnZXRBY3SjutDo0qq0psDttcTEv7Hq1sbKvaO6MbHtyr5aX0lSQVRfR1NNX01PREWhojKx7cq+Wl9JUkFUX1REX01PREWhojOx7cq+WlBTX0lSQVRfTFRFX01PREUNCiAgICAgICAgICAgICAgICAgYklzU2V0VGFyZ2V0QWN0TWFzdGVyo7rKx7fxvavEv7Hq1sbKvcno1sPOqtb31sbKvaOsWl9WQUxJRChUUlVFKaO6ysejrFpfSU5WQUxJRChGQUxTRSmjurfxDQogICAgICAgICAgICAgKi8NCi8qu/HIobWxx7DW99bGyr26r8r9o6y99rmptaWw5UlDIEwxR7X308MqLw0KZXh0ZXJuIEJZVEUgekdldElyYXRNYXN0ZXJNb2RlKFZPSUQpOy8qt7W72Na1MCA6s/XKvLuv1rW78sj9uPbWxsq9vvmyu86q1vcsMSA6R1NNzqrW9ywpMiA6VETOqtb3LDMgOkxURc6q1vcqLw0KDQovKkdTTbLiwb+197bIvdO/2iovDQpleHRlcm4gVk9JRCB6TDFhX21lYXNfR3NtSW5pdChWT0lEKTsNCmV4dGVybiBWT0lEIHpMMWFfbWVhc19Hc21SZXNldChWT0lEKTsNCmV4dGVybiBWT0lEIHpMMWFfbWVhc19Hc21Db25maWcoQllURSBiQ2VsbE51bSwgVF96TDFhX0dzbUNlbGxJbmZvICpwQ2VsbExpc3QsIEJZVEUgYlJyY1N0YXRlKTsNCmV4dGVybiBWT0lEIHpMMWFfbWVhc19Hc21TdGFydChCWVRFIGJGdWxseSk7DQpleHRlcm4gVk9JRCB6TDFhX21lYXNfR3NtU3VzcGVuZChWT0lEKTsNCmV4dGVybiBWT0lEIHpMMWFfbWVhc19Hc21SZXN1bWUoVk9JRCk7DQpleHRlcm4gVk9JRCB6TDFhX21lYXNfR3NtU3RvcChCWVRFIGJGdWxseSk7DQpleHRlcm4gQk9PTCB6TDFhX21lYXNfR3NtSXNTdG9wcGVkKFZPSUQpOw0KZXh0ZXJuIEJZVEUgekwxYV9tZWFzX0dzbUdldFJlc3VsdChUX3pMMWFfR3NtQ2VsbE1lYXNSbHQgKnBNZWFzUmx0KTsNCmV4dGVybiBWT0lEIHpMMWFfbWVhc19Hc21TY2hlZHVsZShCWVRFIGJQdXJwb3NlLCBUX3pJUl9URE1BX1RJTUVfSU5GTyAqcFN0YXJ0LA0KICAgIFRfeklSX1RETUFfVElNRV9JTkZPICpwTGVuKTsNCmV4dGVybiBWT0lEIHpMMWFfbWVhc19Hc21TZXRCc2ljUmVxdWlyZWQoQllURSBiTm90TmVlZEZjYik7DQoNCiNpZmRlZiBaX1NJTkdMRUFOVEVOTkENCmV4dGVybiBWT0lEIHpMMWFfU2V0Q2FyZDFSZk9jY3VwU3RhdChWT0lEKTsNCmV4dGVybiBWT0lEIHpMMWFfU2V0Q2FyZDJSZk9jY3VwU3RhdChWT0lEKTsNCmV4dGVybiBCWVRFIHpMMWFfR2V0Q2FyZDFSZk9jY3VwU3RhdChWT0lEKTsNCmV4dGVybiBCWVRFIHpMMWFfR2V0Q2FyZDJSZk9jY3VwU3RhdChWT0lEKTsNCmV4dGVybiBWT0lEIHpMMWFfQ2xlYXJDYXJkMVJmT2NjdXBTdGF0KFZPSUQpOw0KZXh0ZXJuIFZPSUQgekwxYV9DbGVhckNhcmQyUmZPY2N1cFN0YXQoVk9JRCk7DQpleHRlcm4gQllURSB6TDFhX0Noa0lzRXZlbnRFeGlzdChCWVRFIGJDYXJkaW5kZXgsIEJZVEUgYkV2ZW50KTsNCmV4dGVybiBCWVRFIHpMMWFfSXNDYXJkMUNzRXZlbnRFeGlzdChWT0lEKTsNCmV4dGVybiBWT0lEICAgIHpMMWFfU2V0RXZlbnRQcmlvcml0eShCWVRFIGJDYXJkaW5kZXgsIEJZVEUgYkV2ZW50KTsNCmV4dGVybiBWT0lEICAgIHpMMWFfQ2xlYW5FdmVudFByaW9yaXR5KEJZVEUgYkNhcmRpbmRleCwgQllURSBiRXZlbnQpOw0KZXh0ZXJuIEJZVEUgekwxYV9HZXREdWFsQ2FyZEV2ZW50UHJpb3JpdHkoVk9JRCk7DQpleHRlcm4gVk9JRCB6TDFhX0luaXQoVk9JRCk7DQojZW5kaWYNCg0KLyoqKioqKioqKioqKioqKioqKiogIEwxR8v5zOG5qbXEuq/K/cn5w/cgICoqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiBWT0lEIGwxbWRfc2V0X3VtdHNfcGFyYW1zKFRfeklSX0JDQ0hfTElTVCAqIHBfYmFfbGlzdCApOw0KZXh0ZXJuIEJPT0wgbDFjb191bXRzX2lzX2FjdGl2YXRlZChWT0lEKTsNCmV4dGVybiBWT0lEIGwxY29fdW10c19pbml0aWFsaXNlX3JlcShWT0lEKTsNCmV4dGVybiBWT0lEIGwxbWRfdW10c19pbml0aWFsaXplKFZPSUQpOw0KZXh0ZXJuIFZPSUQgbDFtZF91bXRzX3NldF9yZWNvbmZfc3RhdGUoY29uc3QgVF96SVJfSVJfR1NNX0JBTkRfTUFTSyBkd0NlbGxCaXRtYXApOw0KZXh0ZXJuIFZPSUQgbDFtZF91bXRzX2dldF91cGRhdGVkX3N5bmNfc3RhdHVzKFRfeklSX0NFTExfU1lOQ19RVUVSWV9EQVRBICpwX3N5bmNfcXVlcnlfZGF0YSAvKiBJTzogc3luYyBkYXRhICovKTsNCmV4dGVybiBWT0lEIGwxbWRfZXhjaGFuZ2VfbmNlbGxfcnhsZXZfYnVmZmVycyhCWVRFIGJNdXRpTW9kZUluZCk7LyrLq7+oy6u0/UwxR9Dox/PQ3rjEoaO24MSjILWlxKPI67LOoaMwse3KvsurtP3W0LXEtuDEo9K7tP2199PDo6wxse3KvsurtP3WrtbQtaW0/bX308MqLw0KZXh0ZXJuIEJPT0wgbDFtZF91bXRzX3Jzc2lfbWVhc19jb21wbGV0ZShWT0lEKTsNCmV4dGVybiBWT0lEIGwxbWRfZGJfc2hpZnRfbmNlbGxfcnVuYXYoQllURSBiTXV0aU1vZGVJbmQpOw0KZXh0ZXJuIEJPT0wgbDFtZF91bXRzX3F1ZXJ5X3N5bmNfc3RhdHVzKFRfeklSX0NFTExfU1lOQ19RVUVSWV9EQVRBICogcF9zeW5jX3F1ZXJ5X2RhdGEsICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgY2VsbF9tYXNrLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFIG1heF9jZWxscyk7DQpleHRlcm4gVk9JRCBsMWNvX3VtdHNfZGVhY3RpdmF0ZV9yZXEoVk9JRCk7DQpleHRlcm4gRFdPUkQgbDFtZF91bXRzX2RldGVybWluZV9iYWNrdXBfc2l6ZShWT0lEKTsNCmV4dGVybiBWT0lEIGwxbWRfdW10c19iYWNrdXBfZGIoUFZPSUQgUCk7DQpleHRlcm4gVk9JRCBsMW1kX3VtdHNfcmVzdG9yZV9kYihQVk9JRCBQKTsNCmV4dGVybiBCT09MIGwxY29fdW10c19zYl9yZWFkKFRfeklSX1RJTUlOR19DVFJMICAgICAgdGltaW5nX2N0cmxfZmxhZywgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pJUl9TQl9SRUFEX1RZUEUgICAgIHNiX3JlYWRfdHlwZSwgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF96SVJfU0JfSU5GT19UQUJMRSAgICAqc2JfaW5mbywgICAgICAgICAgIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfeklSX1RETUFfVElNRV9JTkZPICAgKnN0YXJ0LCAgICAgICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pJUl9URE1BX1RJTUVfSU5GTyAgICpsZW5ndGgsICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF96SVJfUkVTVUxUX0ZVTkNUSU9OICAqcmVzdWx0X3JlY29uZl9zYl9yZWFkX2ZjdCk7DQpleHRlcm4gVk9JRCBsMWNvX3VtdHNfcnNzaV9tZWFzKERXT1JEICBiYW5kLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICAgd3JhcF9hcm91bmRfZmxhZywgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF96SVJfVERNQV9USU1FX0lORk8gKnN0YXJ0LCAgICAgICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfeklSX1RETUFfVElNRV9JTkZPICpsZW5ndGgsICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pJUl9SRVNVTFRfRlVOQ1RJT04gKnJlc3VsdF9yc3NpX21lYXNfZmN0ICk7DQpleHRlcm4gVk9JRCBsMW1kX3VtdHNfc2V0X2FjdGl2ZV9jZWxscyhEV09SRCBhY3RpdmVfY2VsbHMgIC8qIEk6IGFjdGl2ZSBjZWxscyhiaXRtYXApICovKTsNCmV4dGVybiBWT0lEIGwxY29fdW10c19hY3RpdmF0ZV9yZXEoVk9JRCk7DQpleHRlcm4gVk9JRCBsMWNvX3VtdHNfZmNiX3NiX3JlYWQoVF96SVJfUkVQX0NFTExfVEFCTEUgKiBjZWxsX2luZm8sICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfeklSX1RETUFfVElNRV9JTkZPICogc3RhcnQsICAgICAgICAgIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pJUl9URE1BX1RJTUVfSU5GTyAqIGxlbmd0aCwgICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF96SVJfUkVTVUxUX0ZVTkNUSU9OICogcmVzdWx0X2ZjYl9zYl9yZWFkX2ZjdCk7DQoJCQkJCQkJCSAgDQpleHRlcm4gQk9PTCBsMWNvX3VtdHNfaXNfZGVhY3RpdmF0ZWQoVk9JRCk7DQpleHRlcm4gVk9JRCBsMWdfaXJhdF9zZXRfZ3NtX21hc3RlcihWT0lEKTsNCmV4dGVybiBCT09MIGwxZF90Y2hfc3RtX2R0eF9hY3RpdmUoQllURSBiTXV0aU1vZGVJbmQpOwkNCg0KZXh0ZXJuIFZPSUQgbDFtZF91bXRzX2NsZWFyX2FsbF9zeW5jX2luZm8oVk9JRCk7DQoNCiNpZmRlZiBNVUxUSV9JUkFUXzI5NjMNCmV4dGVybiBWT0lEIGwxZ19pcmF0X3N0b3BfZ2FwX3JlcF9yZXEoVk9JRCk7DQpleHRlcm4gVk9JRCBsMWdfaXJhdF9zdGFydF9nYXBfcmVwX3JlcShWT0lEKTsNCi8qKioqKioqKioqKioqKioqKioqbDF1ZF9tZWFzLmgqKioqKioqKioqKioqKioqKioqKiovDQpleHRlcm4gVk9JRCBaUFNfSVJfbDF1ZF9tZWFzX3N0bV9pbml0KCBWT0lEICk7DQpleHRlcm4gVk9JRCBaUFNfSVJfbDF1ZF9tZWFzX3N0bV9yZXNldChWT0lEKTsNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX21lYXNfc3RtX3ByZXBhcmUoIEJZVEUgYkdzbUJhbmQsIEJZVEUgYldpbmRvd0xlbik7DQpleHRlcm4gVk9JRCBaUFNfSVJfbDF1ZF9tZWFzX3N0bV9mcmFtZV90aWNrKFZPSUQpOw0KDQojaWYgZGVmaW5lZCAoU0lOR0xFX0FOVEVOTkFfU1VQUE9SVCkNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX21lYXNfaXJhdF9wcmVwYXJlKCBCWVRFIGJQaWQsIEJZVEUgYklyYXRVc2VUeEZvclRvdXQsIEJZVEUgYkxhc3RVc2VkVHMpOw0KI2Vsc2UNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX21lYXNfaXJhdF9wcmVwYXJlICggQllURSBiUGlkICwgQllURSBiSXJhdFVzZVR4Rm9yVG91dCApOw0KI2VuZGlmDQoNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX21lYXNfaXJhdF9pZnJtX3Nob3J0ZW5lZCggQ0hBUiBkZWx0YV9vZmZzZXQgKTsNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX21lYXNfaXJhdF90eF9lbmFibGVkKCBCWVRFIGJUeEVuYWJsZWQgKTsNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX2lyYXRfbWVhc3VyZW1lbnRzX2Fib3J0KCBWT0lEICk7DQpleHRlcm4gQllURSBaUFNfSVJfbDF1ZF9pcmF0X21lYXNfYWN0aXZlICggVk9JRCApOw0KZXh0ZXJuIFZPSUQgWlBTX0lSX2wxdWRfaXJhdF9nc21fZ2FwX3N0YXJ0KFdPUkQgd1dpbmRvd1RpbWUpOw0KZXh0ZXJuIFZPSUQgWlBTX0lSX2wxdWRfaXJhdF9nc21fZ2FwX3N0b3AoIFZPSUQgKTsNCmV4dGVybiBCWVRFIFpQU19JUl9sMXVkX2lyYXRfcGxtbl9zZWFyY2hfZ2FwX3N0YXJ0KCBXT1JEIHdXaW5kb3dUaW1lICk7DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1zdHViIHRoZW0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpleHRlcm4gVk9JRCBaUFNfSVJfbDF1ZF9pcmF0X21lYXN1cmVtZW50c19yZWxlYXNlKFZPSUQpOw0KZXh0ZXJuIEJZVEUgWlBTX0lSX2wxdWRfbWVhc19pcmF0X3JlbGVhc2VfY25mKFZPSUQpOw0KDQovKioqKioqKioqKioqKioqKioqKmwxdV9pcmF0X21pc2MuaCwgYmVnaW4qKioqKioqKioqKioqKioqKioqKiovDQpleHRlcm4gVk9JRCBaUFNfSVJfbDF1X2lyYXRfaW5pdCAoIFZPSUQgKTsNCmV4dGVybiBCWVRFIFpQU19JUl9sMXVfaXJhdF90cnVzdF9ic2ljX3JlY29uZl90aW1pbmcgKCBWT0lEICk7DQpleHRlcm4gVk9JRCBaUFNfSVJfbDF1X2lyYXRfc2V0X3VtdHNfbWFzdGVyICggVk9JRCApOw0KZXh0ZXJuIEJZVEUgWlBTX0lSX2wxdV9pcmF0X2lzX3VtdHNfbWFzdGVyICggVk9JRCApOw0KZXh0ZXJuIFZPSUQgWlBTX0lSX2wxdV9pcmF0X3NldF91bXRzX21vZGUgKCBWT0lEICk7DQpleHRlcm4gQllURSBaUFNfSVJfbDF1X2lyYXRfY2hlY2tfb25fcmZfY29uZmxpY3Rfd2l0aF91bXRzICggVk9JRCAqcFBhcmFtICk7DQpleHRlcm4gVk9JRCBaUFNfSVJfbDF1X2lyYXRfaGFuZGxlcl9yZXEgKCBCWVRFIGJSZXF1ZXN0VHlwZSApOw0KZXh0ZXJuIEJZVEUgWlBTX0lSX2wxdV9pcmF0X2hhbmRsZXJfY25mICggVk9JRCApOw0KDQojaWYgZGVmaW5lZChTSU5HTEVfQU5URU5OQV9TVVBQT1JUKQ0KZXh0ZXJuIFZPSUQgWlBTX0lSX2wxdV9pcmF0X3N0YXJ0X2dhcF9yZXBfcmVxICggVk9JRCApOw0KZXh0ZXJuIFZPSUQgWlBTX0lSX2wxdV9pcmF0X3N0b3BfZ2FwX3JlcF9yZXEgKCBWT0lEICk7DQojZW5kaWYNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX3RzdGFtcF9hY3RpdmF0ZShCWVRFIGJUc01vZGUsIEJZVEUgYkdhcElnbm9yZU1vZGUpOw0KZXh0ZXJuIEJZVEUgWlBTX0lSX2wxdWRfdHN0YW1wX2lzX2FudGVubmFfcmVhZHlfZm9yX2dzbShUX3pQU19JUl9URE1BX1RJTUVfSU5GTyAqcF9nZm5fZnJlZV91bnRpbCk7DQpleHRlcm4gVk9JRCBaUFNfSVJfbDF1ZF90c3RhbXBfcmVzZXRfZ3Byc19vZmZzZXQoIFZPSUQgKTsNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX3RzdGFtcF9zZXRfZ3Byc19mbihEV09SRCBkd0ZuKTsNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX3RzdGFtcF9nZXRfdGltZV9nc21fYW50ZW5uYV9mcmVlKFRfelBTX0lSX1RETUFfVElNRV9JTkZPICpwX2dzbV9zdGFydHRpbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pQU19JUl9URE1BX1RJTUVfSU5GTyAqcF90ZG1hX3RpbWVfcmVzdWx0KTsNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX3RzdGFtcF9ncHJzX2ZyYW1lX3RpY2soIFdPUkQgd1ByZXZMZW4gKTsNCmV4dGVybiBWT0lEIFpQU19JUl9sMXVkX3RzdGFtcF9ncHJzX2Vhcmx5X3ByZXBfdGljayggVk9JRCApOw0KZXh0ZXJuIFNIT1JUIFpQU19JUl9sMXVkX3RhbGdfZ2V0X2FuZF9yZXNldF90aW1lX2RyaWZ0X29mZnNldChWT0lEKTsNCi8qKioqKioqKioqKioqKioqKioqbDF1X2F0Y19pZi5oKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIFBCWVRFIFpQU19JUl9sMXVfYXRjX3NldChQQllURSBwU3RyaW5nKTsNCg0KLyoqKioqKioqKioqKioqKioqKipsMXVfZnMuaCoqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiBCWVRFIFpQU19JUl9sMXVfZnNfZ2V0X25vZl9hY3RpdmVfZnJfdGlja19mdW5jKFZPSUQpOw0KDQovKioqKioqKioqKioqKioqKioqKmwxdV9kY2guaCoqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiBCWVRFIFpQU19JUl9sMXVfZGNoX2NoZWNrX2lkbGUoVk9JRCk7DQovKioqKioqKioqKioqKioqKioqKmwxdV9mY2guaCoqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiBCWVRFIFpQU19JUl9sMXVfZmFjaF9jaGVja19pZGxlKFZPSUQpOw0KLyoqKioqKioqKioqKioqKioqKipsMXVfYmNoLmgqKioqKioqKioqKioqKioqKioqKiovDQpleHRlcm4gQllURSBaUFNfSVJfbDF1X2JjaF9jaGVja19pZGxlKFZPSUQpOw0KLyoqKioqKioqKioqKioqKioqKipsMXVfY3NyY2guaCoqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiBCWVRFIFpQU19JUl9sMXVfY3NyY2hfY2hlY2tfaWRsZShWT0lEKTsNCg0KLyoqKioqKioqKioqKioqKioqKipsMXVfbW9uX2lyYXQxLmgqKioqKioqKioqKioqKioqKioqKiovDQpleHRlcm4gVk9JRCBaUFNfSVJfbDF1X21vbl9pcmF0X2NoYW5nZV90aW1lc3RhbXBpbmdfdG9faWRsZShWT0lEKTsNCg0KLyoqKioqKioqKioqKioqKioqKipsMXVfbWRiLmgqKioqKioqKioqKioqKioqKioqKiovDQpleHRlcm4gIFZPSUQgWlBTX0lSX2wxdV9tZGJfcmVzZXRfY2VsbF9kYXRhYmFzZShWT0lEKTsNCmV4dGVybiAgVk9JRCBaUFNfSVJfbDF1X21kYl9zZXRfY2VsbF9saXN0X3VhcmZjbihUX3pQU19JUl9DRUxMX0xJU1RfSUQgIGxpc3RfaWQsICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09SRCAgdWFyZmNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgIGlkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFICBub2ZfY2VsbHMpOw0KZXh0ZXJuICBWT0lEIFpQU19JUl9sMXVfbWRiX2FkZF9hc3NpZ25lZF9jZWxsKFRfelBTX0lSX1VUUkFOX0NFTExfT05fRlJFUSAgKnBfY2VsbF9pbmZvLCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF96UFNfSVJfQ0VMTF9MSVNUX0lEIGxpc3RfaWQsICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFICBzcmNfaWR4KTsNCmV4dGVybiAgVk9JRCBaUFNfSVJfQ3JlYXRlX1pQU19MMUdfVEREX0NFTExfTUVBU19SRVEoIFRfelBTX0lSX1VUUkFOX0NUUkxfREFUQSAgKnBfdXRyYW5fY3RybCApOw0KZXh0ZXJuICBWT0lEIFpQU19JUl9zZW5kX1pQU19MMUdfVEREX0NFTExfTUVBU19SRVEoVF96UFNfSVJfTDFHX1RkZENlbGxNZWFzUmVxICpwX21zZ19wYXJhbSk7DQpleHRlcm4gIFZPSUQgWlBTX0lSX2wxdV9tZGJfYWRkX25jZWxsX3Jlc3VsdChUX3pQU19JUl9JcmF0VW1jck1lYXNSZXN1bHQgICpwX3VtY3JfbWVhc19yZXN1bHQsICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pQU19JUl9DRUxMX0xJU1RfSUQgKnBfbGlzdF9pZCk7DQpleHRlcm4gIFZPSUQgWlBTX0lSX2wxdV9tZGJfdXBkYXRhX25jZWxsX3J1bm5pbmdfYXZlcmFnZV9idWZmZXJzKFRfelBTX0lSX0NFTExfTElTVF9JRCAgbGlzdF9pZCwgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pQU19JUl9VVFJBTl9DVFJMX0RBVEEgKnBfdXRyYW5fY3RybCk7DQpleHRlcm4gIFRfelBTX0lSX1VUUkFOX0NFTExfT05fRlJFUSAgKlpQU19JUl9sMXVfbWRiX2dldF9uY2VsbF9kYXRhKFRfelBTX0lSX0NFTExfTElTVF9JRCAgbGlzdF9pZCwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFICBjZWxsX2lkeCk7DQpleHRlcm4gIFZPSUQgWlBTX0lSX2wxdV9tZGJfY2FsY19uY2VsbF9yYXZnKFRfelBTX0lSX0NFTExfTElTVF9JRCAgbGlzdF9pZCwgICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgIGNlbGxfaWR4LCAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfelBTX0lSX01EQl9NRUFTX0VMRU1FTlQgKm1lYXNfcmVzdWx0KTsNCmV4dGVybiAgQllURSBaUFNfSVJfY29tcF91dHJhbl9saXN0KFRfelBTX0lSX1VUUkFOX0NFTExTX1BFUl9GUkVRICAgICpwX25ld191dHJhbl9uY2VsbHMsICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF96UFNfSVJfQ0VMTF9MSVNUX0lEICBsaXN0X2lkeCk7DQpleHRlcm4gIEJZVEUgIFpQU19JUl9sMXVfbWRiX2dldF9jZWxsX251bSggVF96UFNfSVJfQ0VMTF9MSVNUX0lEICBsaXN0X2lkICk7DQpleHRlcm4gIFdPUkQgWlBTX0lSX2wxdV9tZGJfZ2V0X3VhcmZjbihUX3pQU19JUl9DRUxMX0xJU1RfSUQgIGxpc3RfaWQpOw0KZXh0ZXJuICBCWVRFIFpQU19JUl9sMXVfbWRiX2dldF91YXJmY25faW5kZXgoVF96UFNfSVJfQ0VMTF9MSVNUX0lEICBsaXN0X2lkKTsNCi8qKioqKioqKioqKioqKioqKioqICBMMUfL+czhuam1xLqvyv3J+cP3ICAqKioqKioqKioqKioqKioqKioqKiovDQpleHRlcm4gVk9JRCBsMW1kX2ZpbGxfdW10c19yZXNlbF9kYihUX3pQU19JUl9NT05fTUVBU19SRVNVTFRfR1NNX0VMRU1FTlQgKiBwX3Jlc3VsdCwgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURSBtYXhfY2VsbHNfdG9fcmVwb3J0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGFjdGl2ZV9jZWxsX2JpdG1hc2ssICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFIHJhdmdfc2l6ZSk7DQoNCmV4dGVybiBCT09MIGwxZF90dV91bXRzX2xhdGNoX2Rpc2FibGUoVk9JRCk7DQpleHRlcm4gQk9PTCBsMWRfdHVfdW10c19sYXRjaF9lbmFibGUoVk9JRCk7DQpleHRlcm4gaW50IGwxZF90dV91bXRzX2xhdGNoX29mZnNldChWT0lEKTsNCmV4dGVybiB2b2lkIGwxZ19pcmF0X2hhbmRsZXJfcmVxX2V4ICggVF9MMUdfSVJBVF9TQ0VORV9UWVBFICBzY2VuZV90eXBlLCAgVF96UFNfSVJfSEFORExFUl9SRVFfVFlQRSByZXF1ZXN0X3R5cGUpOw0KZXh0ZXJuIEJPT0wgbDFnX2lyYXRfaGFuZGxlcl9jbmYoVk9JRCk7DQpleHRlcm4gVk9JRCBsMW1kX3VtdHNfc2V0X2ludmFsaWRfc3RhdGUgKGNvbnN0IFRfelBTX0lSX0lSX0dTTV9CQU5EX01BU0sgYmFuZF9tYXNrKTsNCiNlbHNlDQpleHRlcm4gVk9JRCBsMWdfaXJhdF9zdGFydF9nYXBfcmVwX3JlcSAoIEJZVEUgYlJhdCApOw0KZXh0ZXJuIFZPSUQgbDFnX2lyYXRfc3RvcF9nYXBfcmVwX3JlcSAoIEJZVEUgYlJhdCApOw0KLyoqKioqKioqKioqKioqKioqKipsMXVkX21lYXMuaCoqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiBWT0lEIHpJUl9sMXVkX21lYXNfc3RtX2luaXQoIFZPSUQgKTsNCmV4dGVybiBWT0lEIHpJUl9sMXVkX21lYXNfc3RtX3Jlc2V0KFZPSUQpOw0KZXh0ZXJuIFZPSUQgeklSX2wxdWRfbWVhc19zdG1fcHJlcGFyZSggQllURSBiR3NtQmFuZCwgQllURSBiV2luZG93TGVuKTsNCmV4dGVybiBWT0lEIHpJUl9sMXVkX21lYXNfc3RtX2ZyYW1lX3RpY2soVk9JRCk7DQoNCiNpZiBkZWZpbmVkIChTSU5HTEVfQU5URU5OQV9TVVBQT1JUKQ0KZXh0ZXJuIFZPSUQgeklSX2wxdWRfbWVhc19pcmF0X3ByZXBhcmUoIEJZVEUgYlBpZCwgQllURSBiSXJhdFVzZVR4Rm9yVG91dCwgQllURSBiTGFzdFVzZWRUcyk7DQojZWxzZQ0KZXh0ZXJuIFZPSUQgeklSX2wxdWRfbWVhc19pcmF0X3ByZXBhcmUgKCBCWVRFIGJQaWQgLCBCWVRFIGJJcmF0VXNlVHhGb3JUb3V0ICk7DQojZW5kaWYNCg0KZXh0ZXJuIFZPSUQgeklSX2wxdWRfbWVhc19pcmF0X2lmcm1fc2hvcnRlbmVkKCBDSEFSIGRlbHRhX29mZnNldCApOw0KZXh0ZXJuIFZPSUQgeklSX2wxdWRfbWVhc19pcmF0X3R4X2VuYWJsZWQoIEJZVEUgYlR4RW5hYmxlZCApOw0KZXh0ZXJuIFZPSUQgeklSX2wxdWRfaXJhdF9tZWFzdXJlbWVudHNfYWJvcnQoIFZPSUQgKTsNCmV4dGVybiBCWVRFIHpJUl9sMXVkX2lyYXRfbWVhc19hY3RpdmUgKCBWT0lEICk7DQpleHRlcm4gVk9JRCB6SVJfbDF1ZF9pcmF0X2dhcF9zdGFydChUX3pURF9QX0lyYXRHYXBDb25maWdfUmVxICpwR2FwQ29uZmlnUmVxKTsNCmV4dGVybiBWT0lEIHpJUl9sMXVkX2lyYXRfZ3NtX2dhcF9zdG9wKCBWT0lEICk7DQpleHRlcm4gQllURSB6SVJfbDF1ZF9pcmF0X3BsbW5fc2VhcmNoX2dhcF9zdGFydCggV09SRCB3V2luZG93VGltZSApOw0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tc3R1YiB0aGVtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KZXh0ZXJuIFZPSUQgeklSX2wxdWRfaXJhdF9tZWFzdXJlbWVudHNfcmVsZWFzZShWT0lEKTsNCmV4dGVybiBCWVRFIHpJUl9sMXVkX21lYXNfaXJhdF9yZWxlYXNlX2NuZihWT0lEKTsNCg0KLyoqKioqKioqKioqKioqKioqKipsMXVfaXJhdF9taXNjLmgsIGJlZ2luKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIFZPSUQgeklSX2wxdV9pcmF0X2luaXQgKCBWT0lEICk7DQpleHRlcm4gQllURSB6SVJfbDF1X2lyYXRfdHJ1c3RfYnNpY19yZWNvbmZfdGltaW5nICggVk9JRCApOw0KZXh0ZXJuIEJZVEUgeklSX2wxdV9pcmF0X2NoZWNrX29uX3JmX2NvbmZsaWN0X3dpdGhfdW10cyAoIFZPSUQgKnBQYXJhbSApOw0KZXh0ZXJuIFZPSUQgeklSX2wxdV9pcmF0X2hhbmRsZXJfcmVxICggQllURSBiUmVxdWVzdFR5cGUgKTsNCmV4dGVybiBCWVRFIHpJUl9sMXVfaXJhdF9oYW5kbGVyX2NuZiAoIFZPSUQgKTsNCg0KLyojaWYgZGVmaW5lZChTSU5HTEVfQU5URU5OQV9TVVBQT1JUKSovDQpleHRlcm4gQk9PTCB6TDF0X21lYXNfSXJhdFN0b3BHYXBDbmYoQllURSBiUmF0KTsNCmV4dGVybiBWT0lEIHpMMXRfbWVhc19JcmF0U3RhcnRHYXBSZXEoQllURSBiUmF0KTsNCmV4dGVybiBWT0lEIHpMMXRfbWVhc19JcmF0U3RvcEdhcFJlcShCWVRFIGJSYXQpOw0KLyojZW5kaWYqLw0KZXh0ZXJuIFZPSUQgeklSX2wxdWRfdHN0YW1wX2dldF90aW1lX2dzbV9hbnRlbm5hX2ZyZWUoVF96SVJfVERNQV9USU1FX0lORk8gKnBfZ3NtX3N0YXJ0dGltZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfeklSX1RETUFfVElNRV9JTkZPICpwX3RkbWFfdGltZV9yZXN1bHQpOw0KLyoqKioqKioqKioqKioqKioqKipsMXVfYXRjX2lmLmgqKioqKioqKioqKioqKioqKioqKiovDQpleHRlcm4gUEJZVEUgeklSX2wxdV9hdGNfc2V0KFBCWVRFIHBTdHJpbmcpOw0KDQovKioqKioqKioqKioqKioqKioqKmwxdV9mcy5oKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIEJZVEUgeklSX2wxdV9mc19nZXRfbm9mX2FjdGl2ZV9mcl90aWNrX2Z1bmMoVk9JRCk7DQoNCi8qKioqKioqKioqKioqKioqKioqbDF1X2RjaC5oKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIEJZVEUgeklSX2wxdV9kY2hfY2hlY2tfaWRsZShWT0lEKTsNCi8qKioqKioqKioqKioqKioqKioqbDF1X2ZjaC5oKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIEJZVEUgeklSX2wxdV9mYWNoX2NoZWNrX2lkbGUoVk9JRCk7DQovKioqKioqKioqKioqKioqKioqKmwxdV9iY2guaCoqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiBCWVRFIHpJUl9sMXVfYmNoX2NoZWNrX2lkbGUoVk9JRCk7DQovKioqKioqKioqKioqKioqKioqKmwxdV9jc3JjaC5oKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIEJZVEUgeklSX2wxdV9jc3JjaF9jaGVja19pZGxlKFZPSUQpOw0KDQovKioqKioqKioqKioqKioqKioqKmwxdV9tb25faXJhdDEuaCoqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiBWT0lEIHpJUl9sMXVfbW9uX2lyYXRfY2hhbmdlX3RpbWVzdGFtcGluZ190b19pZGxlKFZPSUQpOw0KDQovKioqKioqKioqKioqKioqKioqKmwxdV9tZGIuaCoqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiAgVk9JRCB6SVJfbDF1X21kYl9yZXNldF9jZWxsX2RhdGFiYXNlKFZPSUQpOw0KZXh0ZXJuICBWT0lEIHpJUl9sMXVfbWRiX3NldF9jZWxsX2xpc3RfdWFyZmNuKFRfeklSX0NFTExfTElTVF9JRCAgbGlzdF9pZCwgICAgICAgIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT1JEICB1YXJmY24sICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURSAgaWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgIG5vZl9jZWxscyk7DQpleHRlcm4gIFZPSUQgeklSX2wxdV9tZGJfYWRkX2Fzc2lnbmVkX2NlbGwoVF96SVJfVVRSQU5fQ0VMTF9PTl9GUkVRICAqcF9jZWxsX2luZm8sIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pJUl9DRUxMX0xJU1RfSUQgbGlzdF9pZCwgICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgIHNyY19pZHgpOw0KZXh0ZXJuICBWT0lEIHpJUl9DcmVhdGVfTDFHX1RERF9DRUxMX01FQVNfUkVRX0VWKCBUX3pJUl9VVFJBTl9DVFJMX0RBVEEgICpwX3V0cmFuX2N0cmwgKTsNCmV4dGVybiAgVk9JRCB6SVJfc2VuZF9MMUdfVEREX0NFTExfTUVBU19SRVFfRVYoVF96SVJfTDFHX1RkZENlbGxNZWFzUmVxICpwX21zZ19wYXJhbSk7DQpleHRlcm4gIFZPSUQgeklSX2wxdV9tZGJfYWRkX25jZWxsX3Jlc3VsdChUX3pJUl9JcmF0VW1jck1lYXNSZXN1bHQgICpwX3VtY3JfbWVhc19yZXN1bHQsICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pJUl9DRUxMX0xJU1RfSUQgKnBfbGlzdF9pZCk7DQpleHRlcm4gIFZPSUQgeklSX2wxdV9tZGJfdXBkYXRhX25jZWxsX3J1bm5pbmdfYXZlcmFnZV9idWZmZXJzKFRfeklSX0NFTExfTElTVF9JRCAgbGlzdF9pZCwgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3pJUl9VVFJBTl9DVFJMX0RBVEEgKnBfdXRyYW5fY3RybCk7DQpleHRlcm4gIFRfeklSX1VUUkFOX0NFTExfT05fRlJFUSAgKnpJUl9sMXVfbWRiX2dldF9uY2VsbF9kYXRhKFRfeklSX0NFTExfTElTVF9JRCAgbGlzdF9pZCwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFICBjZWxsX2lkeCk7DQpleHRlcm4gIFZPSUQgeklSX2wxdV9tZGJfY2FsY19uY2VsbF9yYXZnKFRfeklSX0NFTExfTElTVF9JRCAgbGlzdF9pZCwgICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgIGNlbGxfaWR4LCAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfeklSX01EQl9NRUFTX0VMRU1FTlQgKm1lYXNfcmVzdWx0KTsNCmV4dGVybiAgQllURSB6SVJfY29tcF91dHJhbl9saXN0KFRfeklSX1VUUkFOX0NFTExTX1BFUl9GUkVRICAgICpwX25ld191dHJhbl9uY2VsbHMsICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF96SVJfQ0VMTF9MSVNUX0lEICBsaXN0X2lkeCk7DQpleHRlcm4gIEJZVEUgeklSX2wxdV9tZGJfZ2V0X2NlbGxfbnVtKCBUX3pJUl9DRUxMX0xJU1RfSUQgIGxpc3RfaWQgKTsNCmV4dGVybiAgV09SRCB6SVJfbDF1X21kYl9nZXRfdWFyZmNuKFRfeklSX0NFTExfTElTVF9JRCAgbGlzdF9pZCk7DQpleHRlcm4gIEJZVEUgeklSX2wxdV9tZGJfZ2V0X3VhcmZjbl9pbmRleChUX3pJUl9DRUxMX0xJU1RfSUQgIGxpc3RfaWQpOw0KZXh0ZXJuIFZPSUQgbDFtZF9maWxsX3VtdHNfcmVzZWxfZGIoVF96SVJfTU9OX01FQVNfUkVTVUxUX0dTTV9FTEVNRU5UICogcF9yZXN1bHQsICAgIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgbWF4X2NlbGxzX3RvX3JlcG9ydCwgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBhY3RpdmVfY2VsbF9iaXRtYXNrLCAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURSByYXZnX3NpemUpOw0KZXh0ZXJuIHZvaWQgbDFnX2lyYXRfaGFuZGxlcl9yZXFfZXggKCBUX0wxR19JUkFUX1NDRU5FX1RZUEUgIHNjZW5lX3R5cGUsIFRfeklSX0hBTkRMRVJfUkVRX1RZUEUgcmVxdWVzdF90eXBlKTsNCmV4dGVybiBCT09MIGwxZ19pcmF0X2hhbmRsZXJfY25mKFZPSUQpOw0KZXh0ZXJuIFZPSUQgbDFtZF91bXRzX3NldF9pbnZhbGlkX3N0YXRlIChjb25zdCBUX3pJUl9JUl9HU01fQkFORF9NQVNLIGJhbmRfbWFzayk7DQpleHRlcm4gRFdPUkQgelRkX1NlbmRNc2dUb3BoeShEV09SRCBkd01zZ0lkLCBQQllURSBwYk1zZ0RhdGEsIFdPUkQgd01zZ0xlbik7DQoNCiNpZmRlZiBfVVNFX1BTTQ0KZXh0ZXJuIERXT1JEIHpMdGVfU2VuZE1zZ1RvU2ltRXBoeShEV09SRCBkd01zZ0lkLCBQQllURSBwYk1zZ0RhdGEsIFdPUkQgd01zZ0xlbik7DQpleHRlcm4gVk9JRCB6TDFlX0lyYXRXYWtlVXBFcGh5KFZPSUQpOw0KZXh0ZXJuIEJPT0wgUE9XX2dldF90aW1lc3RhbXBfc3RhdHVzKFZPSUQpOw0KDQojaWYgZGVmaW5lZCAoUFNfUkFUX1RERCkNCmV4dGVybiBCT09MICAgIHpMMXRfVGFza0lzSWRsZShWT0lEKTsNCmV4dGVybiBVSU5UMzIgekwxdF9UYXNrSXNJZGxlUHJpbnQoVk9JRCk7DQojZW5kaWYNCg0KI2lmIGRlZmluZWQgKFBTX1JBVF9MVEUpDQpleHRlcm4gQk9PTCAgICB6TDFlX1Rhc2tJc0lkbGUoQllURSBiU3RhY2tJbnMpOw0KZXh0ZXJuIFVJTlQzMiB6TDFlX1Rhc2tJc0lkbGVQcmludChCWVRFIGJTdGFja0lucyk7DQojZW5kaWYNCg0KI2lmIGRlZmluZWQgKFBTX1JBVF9GREQpDQpleHRlcm4gQk9PTCAgICB6TDF3X1Rhc2tJc0lkbGUoVk9JRCk7DQpleHRlcm4gVUlOVDMyIHpMMXdfVGFza0lzSWRsZVByaW50KFZPSUQpOw0KI2VuZGlmDQoNCiNlbmRpZiAvKmVuZGlmIFVTRV9QU00qLw0KZXh0ZXJuIFZPSUQgekwxZV9JcmF0U3RhcnRHYXBSZXEoQllURSBiUmF0KTsNCmV4dGVybiBWT0lEIHpMMWVfSXJhdFN0b3BHYXBSZXEoQllURSBiUmF0KTsNCmV4dGVybiBCWVRFIHpMMWVfSXJhdFN0b3BHYXBDbmYoQllURSBiUmF0KTsNCmV4dGVybiBWT0lEIHpMMWVfdHN0YW1wX2dldF90aW1lX2dzbV9hbnRlbm5hX2ZyZWUoIFRfeklSX1RETUFfVElNRV9JTkZPICpwX2dzbV9zdGFydHRpbWUsVF96SVJfVERNQV9USU1FX0lORk8gKnBfdGRtYV90aW1lX3Jlc3VsdCk7DQojaWZkZWYgUFNfUkFUX0ZERA0KZXh0ZXJuIEJPT0wgekwxd19tZWFzX0lyYXRTdG9wR2FwQ25mKEJZVEUgYlJhdCk7DQpleHRlcm4gVk9JRCB6TDF3X21lYXNfSXJhdFN0YXJ0R2FwUmVxKEJZVEUgYlJhdCk7DQpleHRlcm4gVk9JRCB6TDF3X21lYXNfSXJhdFN0b3BHYXBSZXEoQllURSBiUmF0KTsNCmV4dGVybiBWT0lEIHpMMXdfaXJhdF9tZWFzX3N0YXJ0KFRfeldfUF9pbnRlcl9mcmVxX21lYXNfcmVxICpwSW50ZXJNZWFzUmVxKTsNCmV4dGVybiBWT0lEIHpMMXdfaXJhdF9tZWFzX3N0b3AgKFZPSUQpOw0KZXh0ZXJuIFZPSUQgICAgekwxd19pcmF0X2dhcF9zdGFydChUX3pXX1BfaXJhdF9nYXBfY29uZmlnX3JlcSAqcEdhcENvbmZpZ1JlcSk7DQpleHRlcm4gVk9JRCAgICB6TDF3X2lyYXRfZ2FwX3N0b3AoVk9JRCk7DQojZW5kaWYNCmV4dGVybiBWT0lEIHpMMWFfZ2V0X3RpbWVfZ3NtX2FudGVubmFfZnJlZShUX3pJUl9URE1BX1RJTUVfSU5GTyAqcF9nc21fc3RhcnR0aW1lLCBUX3pJUl9URE1BX1RJTUVfSU5GTyAqcF90ZG1hX3RpbWVfcmVzdWx0KTsNCg0KZXh0ZXJuIEJPT0wgbDFnX2JjaF9idXN5ZmxnKFZPSUQpOy8quq/K/bmmxNyjurLp0a9CQ0ggQ0/Kx7fx1bzTw8nkxrUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICC3tbvY1rVUUlVFILHtyr7V/dTa1bzTw8nkxrUgIEZBTFNFILHtyr7Du9PQyrnTw8nkxrUqLw0KZXh0ZXJuIEJZVEUgICAgekFzX0dldFRXTEluc3RJbmRleChWT0lEKTsgIA0KZXh0ZXJuIEJZVEUgekwxZV9nc21fSXNDb24oVk9JRCk7DQoNCiNpZmRlZiBaX1NJTkdMRUFOVEVOTkENCmV4dGVybiBCWVRFIHpBc19HZXRNaW5JbmRleChEV09SRCBkd0JpdG1hcCk7DQpleHRlcm4gQllURSB6SVJfbDF1ZF90c3RhbXBfaXNfYW50ZW5uYV9yZWFkeV9mb3JfZ3NtKFRfeklSX1RETUFfVElNRV9JTkZPICpwX2dzbV9zdGFydHRpbWUsDQogICAgICAgICAgICAgICAgICAgICAgVF96SVJfVERNQV9USU1FX0lORk8gKnBfZ3NtX2VuZHRpbWUpOw0KZXh0ZXJuIEJZVEUgekwxZV90c3RhbXBfaXNfYW50ZW5uYV9yZWFkeV9mb3JfZ3NtKFRfeklSX1RETUFfVElNRV9JTkZPICpwX2dzbV9zdGFydHRpbWUsIFRfeklSX1RETUFfVElNRV9JTkZPICpwX2dzbV9lbmR0aW1lKTsNCmV4dGVybiBCWVRFIHpMMWFfaXNfYW50ZW5uYV9yZWFkeV9mb3JfZ3NtKFRfeklSX1RETUFfVElNRV9JTkZPICpwX2dzbV9zdGFydHRpbWUsIFRfeklSX1RETUFfVElNRV9JTkZPICpwX2dzbV9lbmR0aW1lKTsNCiNlbHNlDQpleHRlcm4gQllURSB6SVJfbDF1ZF90c3RhbXBfaXNfYW50ZW5uYV9yZWFkeV9mb3JfZ3NtKFRfeklSX1RETUFfVElNRV9JTkZPICpwX2dmbl9mcmVlX3VudGlsKTsNCmV4dGVybiBCWVRFIHpMMWVfdHN0YW1wX2lzX2FudGVubmFfcmVhZHlfZm9yX2dzbShUX3pJUl9URE1BX1RJTUVfSU5GTyAqcF9nZm5fZnJlZV91bnRpbCk7DQpleHRlcm4gQllURSB6TDFhX2lzX2FudGVubmFfcmVhZHlfZm9yX2dzbShUX3pJUl9URE1BX1RJTUVfSU5GTyAqcF9nZm5fZnJlZV91bnRpbCk7DQojZW5kaWYNCiNlbmRpZg0KZXh0ZXJuIEJZVEUgekV1Y2VyX0dldFJyY1N0YXRlRm9yUFNNKFZPSUQpOw0KDQpleHRlcm4gQk9PTCB6R3JyX0lzTGltaXRTZXJ2aWNlU3RhdGUoQllURSBiU3RrSWQpOw0KZXh0ZXJuIEJPT0wgekdycl9HZXRSZXNlbFN0YXRlKEJZVEUgYlN0a0lkKTsNCmV4dGVybiBCT09MIHpHcnJfSXNQb3dlck9mZlByb2MoQllURSBiU3RrSWQpOw0KZXh0ZXJuIEJZVEUgICAgelVjc3JfSXNJblJlYWRQcmVEZWZQcm9jKFZPSUQpOw0KZXh0ZXJuIExPTkcgekwxZ19HZXRMYXN0VHhQd3IoQllURSBiU3RrSWQpOw0KDQojaWZkZWYgWl9TRU5EX1RPX1NJTVBIWQ0KZXh0ZXJuIFVJTlQzMiB6TDFnX1NlbmRNc2dUb05ldChVSU5UMzIgbXNnX2lkLCBjb25zdCBWT0lEICpidWYsIFVJTlQxNiBtc2dfbGVuLCBaT1NTX1RBU0tfSUQgdGFza19pZCk7DQpleHRlcm4gVUlOVDMyIHpMMWdfU2VuZE1zZ1RvTmV0X1NlYyhVSU5UMzIgbXNnX2lkLCBjb25zdCBWT0lEICpidWYsIFVJTlQxNiBtc2dfbGVuLCBaT1NTX1RBU0tfSUQgdGFza19pZCk7DQojZW5kaWYNCg0KI2VuZGlmDQo=